序言
从西方 APT 组织的攻击历史及已经泄露的网络攻击武器来看,高隐藏、高持久化(Low&Slow)是已经成为区分威胁等级的关键特征,而 Rookit 则是达成此目的重要的技术手段之一。
在之前的文章中,“序章:悬顶的达摩克利斯之剑”,带我们领略了 Rootkit 的前世今生,隐匿于 Rootkit 背后的影子以及针对 Rootkit 的基本检测思想。“Windows 平台高隐匿、高持久化威胁”和“Linux平台高隐匿、高持久化威胁”各自从宏观角度讲述Windows 平台和 Linux 平台下,Rootkit 技术原理、应用和发展现状以及攻防角度的总结。“Rootkit 检测技术发展现状”让我们见识到了防御方对抗 Rootkit 的技术。
本文则是在“Windows 平台高隐匿、高持久化威胁”的基础上,结合攻击者在攻击中利用到的技术手段,对 Windows 平台上的 Rootkit 的运行效果及应用方面进行介绍。
Rootkit威胁情报-战火从未停止
2015年4月,安全研究团队发表了关于 Turla 组织的 Rootkit 分析报告。
2016年8月,安全研究团队发布了索伦之眼(ProjectSauron)相关的技术细节。
2018年10月,安全研究人员披露有驱动护体的挖矿病毒 ProtectionX。
2019年4月,安全研究团队发布关于跨平台间谍 Rootkit Scranos 的文章。
2021年10月,安全研究团队披露了 DirtyMoe Rootkit 驱动程序。
2021年12月,安全研究团队披露了方程式组织(Equation Group)的攻击框架DanderSpritz。
2022年1月,安全研究团队披露了紫狐(Purple Fox)僵尸网络通过伪装 Telegram 安装程序释放 Rootkit 的攻击事件。
紫狐-黑产中Rookit技术应用的代表
紫狐是已经持续多年的、以营利为目的的网络黑产组织,他们历来每次出现在视野中,都会变化一种攻击方式或技术。
攻击者控制大量受害终端,通过刷量、推广用户不需要的软件来获利,这会拖慢设备性能,严重影响受害者的正常使用。
其恶意程序使用了 Rootkit 技术,以至于具有很高的隐蔽性,很难被受害者发掘和清除。在紫狐病毒释放器下载最终 Purple Fox Rootkit 载荷之前,我们注意到释放程序会安装一个名为 “Driver.sys” 的驱动程序,用于注销名为 “360FsFlt”的Minifilter,并关闭名为 “ZhuDongFangYu.exe” 的进程,来规避安全软件检测。
“ZhuDongFangYu.exe” 的进程是从驱动启动的,用常规手段是无法关闭的。
驱动服务运行后,通过一个独立的命令行工具进行调用,通过 IO 通讯传递指令,具有四种命令,对应四种功能。
实际运行效果如下:
关闭指定文件过滤器
拷贝文件
删除文件
结束进程
在分析过程中我们发现,该驱动程序为了避免被检测,在文件拷贝和删除文件的过程中没有使用常规的 API 函数,而是通过 IofCallDriver 函数向文件设备发送带有操作的 IRP 数据,以此达到文件操作的目的。
而在关闭进程功能上,更是提供了两种结束进程的方法,来规避检测。而且我们发现,该驱动目前仍是半成品的状态,也就是说,攻击者仍在进行功能的迭代升级。
在完成安全软件进程关闭后,释放文件才会继续下载最后的 Purple Fox Rootkit,经分析,该 Rookit 是基于开源 Rookit 项目“Hidden”修改,具有隐藏注册表项和值、隐藏文件和目录、隐藏进程、保护指定进程等功能。
文件隐藏运行效果:
注册表隐藏运行效果:
进程保护运行效果:
由此可见,学习开源项目也是攻击者提升攻击能力的有效方式,他们也在不断吸取新的技术,应用与攻击活动之中。
Turla 组织最早可以追溯到2004年,已经超过45个国家受到相关攻击,涉及政府、大使馆、军事、教育、研究和制药公司等多个行业。其攻击使用的技战术一直都有着较高的技术水平,对于国家和行业机密有着极大的威胁。
本事件中使用的 Rootkit 主要功能是通过 HOOK 一系列系统调用函数,隐藏和保护其用户态组件。然后通过修改 Ntoskrnl.exe 和 Ndis.sys 的内存数据,在 0xc3 处创建一个新的 IDT 条目并重定向所有的被 HOOK 的函数到一个简单的中断句柄(ISR),每个被 HOOK 的函数都有一个唯一的标识符与 ISR 中的派遣函数相对应。
由于能够该方法能够禁用任何主机内的 HOOK 机制,因此传统的针对 Rookit 的监测能力都受到了限制。
Turla Rootkit 还使用了两个虚拟文件系统,一个 NTFS 文件系统和一个 FAT 文件系统,也就是说,受害者主机上有一个承载了文件系统的加密文件,攻击者将其作为工作空间使用。
这里突出了 Turla 组织攻击活动所使用的工具非常具有高对抗性,能够做到从系统层面避免安全软件的检测和查杀。
除了Rootkit部分,还有一点值得注意,Turla在攻击过程中会使用一个名为“VBoxDrv.sys”的驱动程序,该驱动程序存在 CVE-2008-3431 漏洞,攻击者能够利用该漏洞完成权限提升。
这里就要说到一个概念“VulnDriver”,也就是带有漏洞的驱动程序,比较常见的VulnDriver 还有 GDRV.sys (CVE-2018-19320),Novell (CVE-2013-3956), CPU-Z (CVE-2017-15302), ASUS (CVE-2018-18537)。
挖矿木马常用的矿机所使用的 WinRing0.sys 也是一个非常常见的 VulnDriver,这个驱动是一个名为 NZXT CAM 的计算机硬件性能监控产品内的一个便于程序访问 Windows 内核的组件。
这个看起来不大的驱动程序上存在着多达11个 CVE 漏洞,其中 CVE-2020-13516 可以越权直接从 USB 和 PCI 设备查询信息;CVE-2020-13515 可以越权将数据写入 I/O 总线,可能会更改 PCI 配置信息或特定于供应商的数据寄存器,帮助其他程序完成提权;CVE-2020-13518 可以越权直接访问 rdmsr,任意读取 MSR 内数据;CVE-2020-13519 可以越权直接访问 writemsr,向 MSR 内写入数据。
因此,利用这个驱动程序做很多事情,其利用成本低,很受以营利为目的网络攻击者欢迎。
在前段时间 Log4j 曝出存在 RCE 漏洞的时候,该漏洞被大量的黑产攻击者利用,这个驱动程序也连带着出现在了大众的视野之中。
这些 VulnDriver 带着官方的签名,而且本身没有什么恶意行为,因此很多安全厂商都不会告警。
在不久前被曝光的方程式组织的后渗透框架 DanderSpritz 中,也存在 VulnDriver 的利用,在其名为 DoubleFeature 的插件中,存在名为 hidsvc.sys 的驱动程序,该驱动程序存在 CVE-2017-0005 漏洞,能够让攻击者通过用户层代码指定名称和参数来调用内核功能。
说到这,我们来简单了解一些方程式这个组织吧。
方程式组织被称为世界上最尖端的网络攻击组织之一,和恶名昭彰的震网(Stuxnet)和火焰(Flame)有着很深的联系。
震网是一个全球性质的工业病毒,是世界上首个网络“超级破坏性武器”,曾被用来攻击伊朗核设施,手法极其阴险。
同时,我国的工业设施也受到了一定的影响。
因此他们的存在,是国家机密和关键基础设施巨大的威胁。
在这次被曝光的项目中存在一个远程访问工具,其下有一个名为 MSNDSRV.sys 的驱动程序。
该驱动程序曾在2015年的 EquationDrug 组件中被提到,可以隐藏用户侧组件,另外可以在注册表遍历所有网卡,调用 NdisRegisterProtocol 函数注册一个 NDIS 流量监听器,可以接收到受害主机所有流量,实现通讯流量监控。
在两个庞大的项目中,这个驱动程序显得微不足道,和之前提到的 Rootkit 程序相比,方程式组织的 Rootkit 技术没有核心组件的地位,只是整个项目下某一个插件下的一个组件,是一个“随取随用”的地位。
但就是这样一个看起来不值一提的组件,在两个程序中都出现了。
足以说明,Rookit 是方程式组织在攻击组件开发的过程中非常常用的技术,而对于这类常用的组件,攻击者也不会花太多心思进行二次开发。
然而就算是这样,安全厂商仍旧鲜有捕获到方程式组织的活动痕迹,该组织的高隐匿技术之强,可想而知。
业界对反 Rootkit 软件使用的技术进行了分类。签名的检测(Signature-based detection)、文件完整性监测(File integrity monitoring)、Rootkit Hook 检测(Rootkit hooking detection)、交叉视图分析(Cross-view analysis)以及基于网络的检测(Network-based detection)。
基于签名的检测就是匹配 Rootkit 软件字节特征,缺点是无法匹配新的 Rootkit,而且特征容易更改,对于已安装 Rootkit 的系统再实施检测不理想。
文件完整性监测,该方法计算关键的、不变的操作系统文件的哈希,并将其与存储在数据库中的已知值进行比较。这项技术对于在磁盘上修改系统二进制文件的 Rootkit 很有效,但 Rootkit 的作者很快使用 hooking 或 DKOM 技术,以此篡改执行结果,使得检测效果不理想。
Rootkit Hook 检测,SSDT、IAT 和 IDT 都有一组用于每个服务或中断的函数指针,它们都在内存中的特定范围内。当rootkit修改Hook指向恶意服务或中断例程时,函数指针所指向的位置几乎总是位于特定内存地址范围之外。在这期间还发展了 Inline Hook形式,来规避这些关键表的检测,后来发展了 FSD Hook、FSD Inline Hook。
交叉视图分析,交叉视图分析涉及从“用户”或“API”视图查看系统,并将其与低级视图进行比较,交叉视图方法可以检测基于 DKOM 和系统例程补丁的 Rootkit,不能检测基于HOOK 的 Rootkit。
基于网络的检测,理论上,Rootkit 可能会试图隐藏其网络通信,以逃避操作系统或用户的检测,但是从系统外部还是能看到流量的,这方面成了C2隐藏通信和网络检测的较量。
Windows 也引进了一些防御技术,PatchGuard 和 DSE。PatchGuard 用于内核完整性检测,守护容易被 HOOK 的地方。DSE 用于检测驱动签名,限制未签名驱动加载。上文提到的 Turla 则绕过了这种限制,通过引入 VulnDriver 间接绕过。通过修改内存中的特殊变量就能关闭DSE功能,此时,加载第二个未签名的恶意驱动,直接 HOOK PatchGuard 告警的关键函数,在下一个内核完整性校验过程中不让异常表现出来,从而完成了 PatchGuard 功能的绕过。
说了这么多,其实只想说明一个问题,那就是 Rootkit 技术一直都没有过时,它一直都是攻击者青睐的攻击技术。虽然他的热度被各式各样的新型网络威胁所掩盖,但在那些网络攻击的事件中,我们又常常能见到它的影子。
在我们忙于研究处理其他网络威胁技术的时候,它也在以某种的方式存在,并不断成长着。在安全厂商不断提升己方检测能力的同时,攻击者也在不断提升对抗能力,传统的检测方式不断的承受着一轮又一轮的攻击。
对于高对抗的 Rookit 技术的检测,对于传统的检测技术是一个很大的挑战,安全厂商还有很多的工作要去完成。
3. https://blog.minerva-labs.com/malicious-telegram-installer-drops-purple-fox-rootkit
4. https://www.lastline.com/labsblog/dissecting-turla-rootkit-malware-using-dynamic-analysis/
本文作者:Further_eye
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/176838.html