导语:许多声誉过滤解决方案存在着底层设计的漏洞, URL和域的分类有时可能像表单提交一样简单,没有经过人工验证,这样网站上托管的内容就无法被真正检查到。利用这些底层漏洞,攻击者就可以将他们的基础设施提交给网站提供商进行审核,在审核
本文主要针对的读者是一些大型组织,这些组织通常会使用网络流量的声誉过滤系统(reputational filtering)来防范恶意代码的传递,并对数据进行过滤。这也是许多下一代防火墙和网络代理进行安全防御的一个发展方向,这其中就包括Zscaler等基于云的安全服务商。
声誉过滤通常会屏蔽已知的恶意网站,并对所有的网络流量进行病毒扫描。因为我在执行模拟攻击时,就发现声誉过滤会在访问未分类的网站时向我发出警告。
从理论上来说,任何用作攻击的URL和域在发起攻击时都需要在Web浏览器中和用户进行交互。这样,利用声誉过滤就可以有效地排除在攻击的发送和攻击阶段使用新设置的基础设施,这是因为这些活动是在受害者不知情的情况下进行的。这样攻击者就只能选择欺骗系统的方式来发起进攻。
但实际情况却是,许多声誉过滤解决方案存在着底层设计的漏洞, URL和域的分类有时可能像表单提交一样简单,没有经过人工验证,这样网站上托管的内容就无法被真正检查到。利用这些底层漏洞,攻击者就可以将他们的基础设施提交给网站提供商进行审核,在审核被通过并被分配适当的许可类别后,就可以完全避开声誉过滤了。
当声誉过滤器不允许公开提交网站时,攻击就变得更加困难了。例如,思科网络安全设备(WSA)是一种只允许思科客户提交分类请求的解决方案,其他几家设备提供商也采取了类似的做法。利用该方法,供应商经常对错误分类和滥用的报告作出迅速反应。
使用受信任的站点进行攻击
通常用户会对把一些常用的网站默认设置为信任站点,例如谷歌、亚马逊、微软、推特……。如果攻击者在他们的攻击路径中利用这些站点,则声誉过滤将是无效的,这是声誉过滤的一个软肋。
网站的声誉过滤不会对托管在受信任站点上的恶意命令进行防护
这个攻击想法很简单,因为只要该站点受信任,那只要搞定该站点,那利用它进行恶意有效载荷有不会被发现了。例如 Facebook的帖子,共享的Google Drive文件和Amazon S3托管的文件。在大多数情况下,如果运行恶意软件本身就可以将命令发送到所选择的可信服务,则可以建立一个全功能的命令和控制(C&C)通道。
使用受信任的站点来对恶意软件发布命令,并返回结果
最危险的地方就是最安全的地方
一些黑客高手会利用复杂的混淆程序和加密来保护C&C通道,我在进行模拟攻击时也采取了类似的方法。让我们再次使用一个简单的对称加密密钥来重复一下上面提到的攻击案例:
攻击者控制的未加密和加密的页面
与真实的攻击相比,模拟攻击的一个优势是加密密钥只有受害者和我知道。例如,一个专门经过设计的内部DNS TXT记录可以包含秘钥,或者在受害者机器上设置环境变量。如果模拟的恶意软件能在规定的攻击范围之外找到目标,我就可以确信它不会运行。
当然,如果将加密的通信发送到Facebook的好友墙上,则看起来很可疑,但如果包含在S3存储桶中的文件或GitHub上的Gist,则就很容易被忽略。
预警线攻击策略
道理很简单,就像小时候玩的游戏一样,在门口栓上一根线,只要有人进来碰到这根线,就会发出警告。同样,我在模拟攻击中也使用了同样的原理,通过设置一个信标来进行预警。这样攻击者就会在预警为发出前,安然地进行攻击。
攻击链
攻击者可将攻击伪装成来自脸书或推特的好友点赞,已加星号的Gist或发布到公告栏的特定消息。在这个阶段,攻击者的主要任务就是确保攻击不被发现。
预警线攻击策略非常实用,如果攻击者看到有第二次攻击请求,或在很短的时间内看到下一阶段的攻击被启动,则立马就会怀疑攻击已经被检测到,很可能攻击发生在沙箱中。如果是这样的话,攻击者可以更换新的电子邮件帐户,其它的可信网站或网络钓鱼方案重新发起攻击。
在模拟攻击时,我做了一些有趣的观察,即只要关注攻击者所利用的短网址,就可以知道攻击是否被跟踪。因为如果我们看到点击次数的增加,就可以怀疑有人发现了攻击。而且,还可以看到这些跟踪来自哪里以及他们使用的浏览器。
点击次数的增加可能表明分析师正在监控攻击路径
VirusTotal是一个提供免费的可疑文件分析服务的网站,这是网络维护者经常要用的一把利器。但凡事都有两面性,对于攻击者和我的模拟攻击来说,这也是一个有用的工具。当然,好的OPSEC可以防止攻击者直接将恶意软件上传到受信的网站,但是任何与攻击文件的校验和值匹配的上传的定期检查或提醒也同样对攻击者有价值,如果攻击者看到自己的攻击已被列入扫描,就会另选其它方法。
如果恶意软件已进入了扫描范围,则提示攻击者要注意了
图3中所介绍的对称加密可以被改进为一个包含一次性在线密钥。一旦在线密钥被攻击者的有效载荷检索到,则这个载荷就会被立即删除,从而防止任何分析人员对攻击的过程进行分析,以暴露秘密,所以这个一次性的密钥又是一个非常有用的攻击预警装置。
如果攻击者看到一次性在线密钥被重复使用,则攻击就会结束。
端到端的模拟攻击
以上我把一些攻击预警的技术都做了一些大概地介绍,下面我会通过一次端到端的模拟攻击,把这些预警技术应用到其中。
在进行模拟攻击时,我对先执行了一个全面的开源侦察,然后确定了数百名攻击目标,另外,我还可以在某些情况下确定了他们所在公司的位置。
由于我在计划发起模拟攻击时,出现了一种DDE攻击技术,它可以利用Office套件中的漏洞发起攻击。所以我认为这是一个不错的攻击手段,于是我选择了利用Outlook进行了攻击,如果攻击目标回复了我所发过去的电子邮件,则就会开始执行攻击代码,本次模拟的网络钓鱼活动针对的是攻击目标所预定的酒店。
一开始,我发送的前10封电子邮件都没有收到回复,最重要的是,我所嵌入的攻击代码都没有被触发。不过为了防止被检测到,在这次攻击中,我使用了Github上的Gist来对攻击是否成功进行指示。由于在我发起的模拟攻击中,这个预警线从未被触发,所以我可以继续对确定的更多目标发起同样的攻击。
在我的努力下,终于有一名受害者进行了回复。紧接着,我利用该回复就执行了一个非常短的PowerShell代码片断,该代码片段下载并执行了Github上的一个Google 短链接的Gist,随后又使用GitHub API对某个Gist进行了了解,之后我创建了一个登录注册表项,该注册表项创建了另一个隐藏的PowerShell脚本,并在下次登录时从另一个Google短链接的Gist中执行代码。作为一个额外的保护层,PowerShell脚本使用一个已知的特定环境变量进行加密,该环境变量是在我的目标环境中设置的。
这样,我就可以检查攻击的时间,以及与短链接有关的分析。分析发现,所有的时间和预警措施都与以上的理论分析是一致的,在对受害目标进行攻击时,我的预警线始终都没有被触发。所以,我现在完全可以开始我的远程恶意木马安装了。
安装后,只需等待下一次重启,我所安装的恶意木马就会完全嵌入在Gist的内容中。这意味着,攻击者也可以使用GitHub作为C&C通道,解析Gist任务命令。此时,我实际上已经完全控制了受害者的设备,并能访问受害者可以获得的所有网络资源和数据。
总结
通过模拟攻击,我想要告诉大家的是没有什么东西能够百分百地保证保证网络安全,即使你把它标位可信,它仍然可能被攻击者作为利用工具。