该技术不会破坏原文件的签名,可以让恶意软件绕过反病毒检测。
一项新技术能够让攻击者在数字签名过的文件中隐藏 恶意代码 ,而不需要破坏其签名,并进而能够将该文件直接载入进另一个进程的内存中。
该攻击方法由网络安全公司 Deep Instinct 的一位研究人员 Tom Nipravsky 发现。 它可能将成为罪犯和间谍小组在未来的有用工具,让他们能够使恶意软件溜过反病毒扫描器和其它安全产品。
Nipravsky研究的第一部分已经在近日于拉斯维加斯召开的黑帽安全大会上得到展示。它与速记式加密 (Steganography) 有关,可以将数据藏在合法的文件中。
恶意软件作者在以前曾经将 恶意代码 或恶意软件配置文件数据藏在照片里,Nipravsky的技术则与此有所不同,因为该技术能够让攻击者对数字签名过的文件如法炮制。这对黑客而言意义非凡,因为数字签名的唯一作用就是确保文件来自某个特定的开发者,而且在传输过程中没有遭到篡改。
如果对某可执行文件进行签名,其签名的文件就会被存储在header的某区域中,该区域的名称是属性证书表 (Attribute Certificate Table, ACT) ,计算文件的哈希值时系统会将它排除出去。ACT中存储的特定字符串作为文件内容的加密代表值。
该方法能够奏效的原因是数字证书的信息在签名时并不被算作源文件的一部分。它时候来被加上的,以证明文件是按照创建者的意愿配置的,并且拥有某个特定的哈希值。
然而,这意味着攻击者能够增加数据,包括在ACT区域内增加单独的完整文件,而不需要改变文件哈希值、破坏签名。这种增添会导致文件存储体积变大。操作系统在进行文件体积检查的时候会将header区域计算在内,比如微软的Authenticode技术就会在检验文件签名时进行体积检查。
然而,文件体积是在文件header中的三个位置上进行声明的,而其中两个可以被攻击者篡改,而不需要破坏签名。问题在于,Authenticode只会检查这两个能够被篡改的文件体积记录,而不会检查第三个。
Nipravsky表示,这是Authenticode设计中的逻辑失误。如果该技术检查了第三项记录,也即那个无法篡改的值,攻击者就无法在实现这一技术的同时确保文件签名合法。
增加到ACT的恶意数据并不会在遭篡改的文件执行时同时执行,因为它属于header的一部分,而不是文件body。不过,ACT能够作为一个恶意软件的藏身之处,助其绕过反病毒防御。
比如,攻击者可以将恶意代码增添至各种微软签名的windows系统文件或者微软Office文件上。签名将仍旧有效,文件也仍将能够执行。
此外,大多数安全应用对这些文件都添加了白名单策略,因为它们得到了可信发布方微软的认证。这样做是为了避免假阳性出现,导致删除关键文件或者系统崩溃。
Nipravsky研究的第二部分是开发一种能够秘密将恶意可执行文件隐藏进签名过的文件,而不会被检测出来的方法。他对Windows在将PE文件加载进内存时的整个幕后操作过程进行了反向工程。该步骤并不是公开的,因为开发者一般而言不需要亲自执行这一过程,而是依赖操作系统进行文件执行。
这部分花费了Nipravsky四个月的全天工作时间,但其成果能够让他创建所谓的 反射式PE加载器:一个能够直接将外来可执行文件加载入系统内存,而不会在硬盘上留下任何痕迹的应用 。由于加载器与Windows操作系统使用了完全一样的操作流程,安全解决方案极难将其活动认定为可疑的。
Nipravsky的加载器可以被用作秘密攻击链条中的一环,使用路过下载的漏洞利用,在内存中执行一个恶意软件投放器。该过程之后会从服务器上下载一个数字签名过的文件,但其ACT区域中有恶意代码,并将代码直接加载进内存中。
研究人员没有公开放出此加载器的打算,因为它可能遭到滥用。不过,有技术的黑客如果愿意花费时间,就能够创建他们自己的加载器。
Nipravsky针对反病毒产品测试了自己的反射式PE加载器,并成功执行了一些原本会被检测到的恶意软件。
在演示中,他使用了一个通常会被反病毒产品检测并拦截的勒索软件,将其加入到数字签名文件的ACT区域中,并使用反射式PE加载器执行。
反病毒软件在勒索软件已经加密了所有用户文件之后,才检测到了它创建的勒索文本文档。太迟了。
即使是攻击者并不具备Nipravsky的反射式PE加载器,他们仍旧能够使用速记式加密技术在合法的文件中隐藏恶意软件配置数据,甚至是通过它来传递从机构处窃取的数据。在数字签名文件中隐藏的数据一般而言能够通过网络层的流量监测系统,而不会遇到任何障碍。