莱顿高级计算机科学研究所的研究人员近日在GitHub上发现了成千上万个代码库提供针对多个漏洞的虚假概念证明(PoC)漏洞利用代码(exploit),其中一些含有恶意软件。
GitHub是全球最大的代码托管平台之一,众多研究人员使用它发布PoC漏洞利用代码,以帮助安全行业验证漏洞修复程序,或者确定漏洞的影响和范围。
据莱顿高级计算机科学研究所的研究人员撰写的技术文章显示,感染上恶意软件而不是获得PoC的可能性也许高达10.3%,这不包括已证实的虚假漏洞利用代码和恶作剧软件。
数据收集和分析
研究人员使用以下三种机制分析了47300多个代码库,这些代码库发布了针对2017年至2021年期间披露的一个漏洞的漏洞利用代码:
IP地址分析:将PoC的发布者IP与公共黑名单、VT和AbuseIPDB进行比对。
二进制文件分析:对提供的可执行程序及其散列运行VirusTotal检查。
十六进制文件和Base64分析:在执行二进制文件和IP检查之前解码经过混淆处理的文件。
图1. 数据分析方法(来源:Arxiv.org)
在提取的150734个独特IP中,有2864个IP与黑名单条目匹配,在Virus Total上的反病毒扫描中检测到1522个IP是恶意IP,其中1069个IP存在于AbuseeIPDB数据库中。
图2. 各个黑名单上找到的IP地址(来源:Arxiv.org)
二进制文件分析检查了一组6160个可执行程序,显示总共2164个恶意样本驻留在1398个代码库中。
在测试的47313个代码库中,共有4893个代码库被认为是恶意的,其中大多数涉及来自2020年的漏洞。
图3. 每年的恶意代码库(来源:Arxiv.org)
这份报告中包含的一小组代码库含有分发恶意软件的虚假PoC。然而,研究人员向BleepingComputer表明了至少另外60个代码库依然存在,目前正在被GitHub撤下的过程中。
PoC中的恶意软件
通过进一步研究其中一些代码库,研究人员发现了大量不同的恶意软件和有害脚本,从远程访问木马到Cobalt Strike,不一而足。
一个值得关注的例子是CVE-2019-0708(通常名为“BlueKeep”)的PoC,它含有一个用base64模糊处理的Python脚本,该脚本可以从Pastebin获取VBScript。
该脚本其实是Houdini RAT,这个基于JavaScript的旧木马支持通过Windows CMD远程执行命令。
图4. 模糊处理的脚本和去模糊处理的Houdini
在另一种情况下,研究人员发现了一个虚假的PoC,这其实是信息窃取工具,收集系统信息、IP地址和用户代理。
这是另一名研究人员之前进行的一个安全实验,所以研究人员用自动化工具发现它,以确认他们的方法是有效的。
图5. 虚假PoC泄密示例(来源:Arxiv.org)
其中一名研究人员El Yadmani Soufian还是Darktrac的安全研究人员,他好心地为BleepingComputer提供了技术报告中未包含的其他示例,如下所示:
含有用base64编码的二进制代码的PowerShell PoC在Virus Total中被标记为是恶意的。
图6. 虚假PowerShell PoC
Python PoC含有一行代码,用于解码用base64编码的攻击载荷,该攻击载荷在Virus Total上被标记为是恶意的。
图7. 恶意的一行代码攻击载荷冒充PoC
虚假的BlueKeep漏洞利用代码含有一个可执行程序,该程序被大多数反病毒引擎标记为是恶意的,并被识别为是Cobalt Strike。
图8. Cobalt Strike通过虚假PoC来投放
图9. 无害但虚假的PoC
如何保持安全?
盲目信任GitHub上来源未经验证的代码库是个坏主意,因为内容没有经过审核,所以用户在使用之前需要审核它。
建议软件测试人员仔细检查他们下载的PoC,并在执行它们之前运行尽可能多的检查。
Soufian认为,所有测试人员都应该遵循以下三个步骤:
1. 仔细阅读将要在贵公司的网络或客户的网络上运行的代码。
2. 如果代码太过模糊,需要大量的时间来手动分析,不妨将它放在沙盒环境(比如隔离的虚拟机)中,检查网络中的任何可疑流量。
3. 使用像VirusTotal这样的开源情报工具来分析二进制文件。
研究人员已经向GitHub报告了他们发现的所有恶意代码库,但需要一段时间才能审查和删除所有恶意代码库,因此仍有许多恶意代码库对公众开放。
正如Soufian所解释,他们的研究目的不仅仅是作为GitHub上的一次性清理行动,而是以此为契机,开发一种自动解决方案,可以用来标记上传代码中的恶意指令。
这是该团队研究的第一个版本,他们正在努力改进其探测工具。目前,这款检测工具遗漏了迷惑性较强的代码。
来源:ROARTALK