恶意软件的完美掩护:Docker容器
关注E安全 关注网络安全一手资讯
E安全8月5日讯 研究人员发现一种新型攻击途径,可允许攻击者滥用Docker API隐藏目标系统上的恶意软件,Docker API可被用于实现远程代码执行与安全机制回避等目的。
作为开发人员群体当中人气极高的代码测试方案,Docker能够建立起一套完整的IT堆栈(包含操作系统、固件以及应用程序),用以在容器这一封闭环境当中进行代码运行。尽管其结构本身非常适合实现代码测试,但容器技术亦可能被攻击者用于在企业环境内进行恶意软件感染。
在本届于拉斯维加斯召开的2017美国黑帽大会上,Aqu Security公司研究人员Michael Cherny与Sagie Dulce指出,Aqua Security研究人员塞奇·杜尔塞曾提出这种概念验证(PoC)攻击,并首次演示了这种技术。
研究人员们解释称,攻击者不仅能够在企业网络之内运行恶意软件代码,同时亦可在过程当中配合较高执行权限。
在攻击当中,恶意一方往往会诱导受害者打开受控网页,而后使用REST API调用执行Docker Build命令,借以建立起能够执行任意代码的容器环境。通过一种名为“主机重绑定”的技术,攻击者能够绕过同源政策保护机制并获得底层Moby Linux虚拟机当中的root访问能力。
如此一来,攻击者将能够窃取开发者登录凭证、在开发者设备上运行恶意软件或者将恶意软件注入至容器镜像之内,进而在该容器的每一次启动当中实现感染传播。
杜尔塞表示,攻击最终能在企业网络中驻留持久代码,由于这部分代码运行在Moby Linux虚拟机当中,因此现有主机上的安全产品无法检测主机上的持久性。
攻击的多个阶段
这种攻击分多个阶段进行。首先,将运行Docker for Windows的开发人员引诱到攻击者控制的网页(托管着特制JavaScript)。
JavaScript能绕过浏览器“同源策略”(Same Origin Policy,SOP)安全协议——现代浏览器上的数据保护功能。所谓同源,是指,域名,协议,端口相同。
杜尔塞指出,HTTP请求方法有限,包括GET、HEAD和POST。杜尔塞不仅使用未违反SOP保护的API命令,而且还在主机(将Git仓库作为C&C服务器)上创建一个Docker容器,由此托管恶意攻击代码。
杜尔塞表示,Docker容器受限。如果想要访问整个Docker API,以便能运行任何容器,例如对主机和底层虚拟机具有更多访问权的特权容器。为了实现该效果,Aqua研究人员创建了与“DNS重绑定攻击”(DNS Rebinding Attack.)类似的“主机重绑定攻击”(Host Rebinding Attack)技术。
DNS重绑定攻击指的是,对手滥用DNS诱骗浏览器不执行SOP。Aqua的主机重绑定攻击针对Microsoft名称解析协议实现同样的目标,不过主机重绑定攻击通过虚拟接口实现,因此攻击本身不会在网络中被检测到。
研究人员写到,主机重绑定攻击会将本地网络上的主机IP地址重绑定到另一个IP地址,即与DNS重绑定类似。DNS重绑定是欺骗DNS响应、控制域名或干扰DNS服务,但主机重绑定攻击则是欺骗对名称解析协议(广播的)的响应,例如NetBIOS和LLMNR。其结果是创建容器,使其在受害者Hyper-V虚拟机中运行,共享主机网络,并执行攻击者控制的任意代码。
研究人员解释称,具备能力针对Docker Daemon REST API执行任何命令之后,他们能有效获取底层Moby Linux虚拟机的Root访问权限。
下一步是利用Root权限执行恶意代码,同时在主机上保持持久性,并在虚拟机内隐匿活动。
接下来,需生成杜尔塞所谓的“影子容器”(Shadow Container)。当虚拟机重启时,“影子容器”允许恶意容器下达保持持久性的指令。如果受害者重启主机或只是重启Docker for Windows,攻击者将失去控制。为了解决这些问题,他们提出采用“影子容器”技术获取持久性和隐匿性。
为此,杜尔塞编写了容器关闭脚本,以此保存他的脚本/状态。当Docker重启时,或Docker重置或主机重启后,“影子容器”将运行攻击者的容器,保存攻击脚本。这样一来,攻击者便能在渗透网络的同时保持隐匿性,以此执行侦察活动、植入恶意软件或在内部网络中横向活动。
杜尔塞表示,通过这种攻击可以访问内部网络、扫描网络、发现开放端口、横向活动,并感染其它设备,但还得找到方法感染本地容器镜像,从而散布到整个企业Docker渠道中。
杜尔塞和Aqua Security研究负责人迈克尔·乔尔内表示,他们今年年初通知了Docker这种攻击途径。
Docker承认存在这个问题,并表示这是由于先前所有Docker for Windows版本允许通过TCP/HTTP远程访问Docker。自此之后,Docker改变了默认配置,关闭了HTTP端口,以此防止访问Docker Daemon。
缓解措施
专家给出的缓解措施包括,更新Docker for Windows,仅允许证客户端访问暴露的端口,通过防火墙阻止Moby Linux虚拟机接口上的2375端口,以及在所有端点上禁用LLMNR和NetBIOS。
E安全推荐文章
官网:www.easyaq.com
2017年8月