新闻快讯
< >

恶意软件的完美掩护:Docker容器

E安全8月5日讯 研究人员发现一种新型攻击途径,可允许攻击者滥用Docker API隐藏目标系统上的恶意软件,Docker API可被用于实现远程代码执行与安全机制回避等目的。

作为开发人员群体当中人气极高的代码测试方案,Docker能够建立起一套完整的IT堆栈(包含操作系统、固件以及应用程序),用以在容器这一封闭环境当中进行代码运行。尽管其结构本身非常适合实现代码测试,但容器技术亦可能被攻击者用于在企业环境内进行恶意软件感染。

攻击者通过Docker容器隐藏、植入恶意软件-E安全

在本届于拉斯维加斯召开的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容器,由此托管恶意攻击代码。

DNS重绑定攻击VS主机重绑定攻击

杜尔塞表示,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安全注:本文系E安全独家编译报道,转载请联系授权,并保留出处与链接,不得删减内容。联系方式:① 微信号zhu-geliang ②邮箱eapp@easyaq.com
@E安全,最专业的前沿网络安全媒体和产业服务平台,每日提供优质全球网络安全资讯与深度思考,欢迎关注微信公众号「E安全」(EAQapp),或登E安全门户网站www.easyaq.com , 查看更多精彩内容。