漏洞概要

缺陷编号:
暂无

漏洞标题:
基于异常行为的未知勒索软件检测

提交时间:
2017-11-02

危害等级:

相关厂商:

漏洞分类:
安全文章

关注度:
共 7 人关注

漏洞详情

*本文作者:高渐离 ultrain @墨攻安全实验室,本文属 FreeBuf 原创奖励计划,未经许可禁止转载 

本篇文章感谢 todaro@安全狗和宋超提供勒索软件样本。感谢 killer 总在应用层终止恶意进程方面的指导。感谢 PT提供的非常棒的powertool,让我们能很好的分析国外软件的操作。 

近年勒索软件形式愈演愈烈,尤其是 WannaCry 让人印象深刻。近期 Badrabbit 又肆虐欧洲。目前云主机上的防护大多是云厂商自研的防护软件。企业内部终端安全防护,鉴于信息安全的需要,也不会直接使用个人PC上流行的防护软件。在这些防护软件上,对使用内核模块都保持着较为谨慎的态度。如果要做勒索软件检测模块并尽快上线,最好是提供能在应用层就直接实现的方式。同时,目前大家推崇的态势感知方案其实对勒索软件收效甚微。等看见了,伤害已经造成了。而大多数防护方案则是针对勒索软件所利用的漏洞进行防护,当换了一种漏洞利用方式了,原先的防护就会立马失效。在这种情况下,我们该如何做到未知的勒索软件防护呢?

墨攻安全实验室通过对国外知名主机端防护软件进行研究,发现了一个比较好的应用层的勒索软件检测方案:通过创建隐藏的诱饵文件,实时拦截对诱饵文件的加密操作,从而有效应对未知的勒索软件。

下面我们以 windows 为例,给出应用层勒索软件检测代码原型。 

1. 创建诱饵文件

关键点:

a. 在每个盘的根目录、Users目录、Users/Administrator/Documents 目录创建诱饵。

b. 每次创建诱饵,都创建两个目录,一个是文件夹名按字母序能排到第一位,一个是文件夹名按字母序能排到最后一个

c. 创建的诱饵文件种类涵盖要尽量全。包括doc docx pemjpeg

点保证了勒索软件试图加密的目录里面都有诱饵。点则保证了无论文件夹访问顺序是正序还是逆序,诱饵文件都能被最先访问到。c 点保证了诱饵属于勒索软件感兴趣的文件。

以上诱饵文件都是隐藏文件。

2. 应用层监控文件加密操作

windows下面,如果使用文件过滤驱动,其实很容易做到文件加密行为的拦截。但鉴于目前的安全防护现状,对大多数公司以及云厂商而言,使用驱动带来的稳定性的担忧会远远超过它带来的未知勒索软件防护这种好处。

做安全防护的都知道,宁大家都查不出来,也不能搞死用户机器啊!

如果不能找到稳定的应用层的解决方案,我们最终保卫地球、为国为民的愿望就会流产。

这部分有两个关键点:

a. 应用层文件系统监控

Windows提供了FindFirstChangeNotification ReadDirectoryChangesW  两种方法。参见 https://msdn.microsoft.com/en-us/library/windows/desktop/aa365261(v=vs.85).aspx。只有 ReadDirectoryChangeW才能获得具体变动的文件信息。

  基于异常行为的未知勒索软件检测基于异常行为的未知勒索软件检测 基于异常行为的未知勒索软件检测基于异常行为的未知勒索软件检测

基于异常行为的未知勒索软件检测基于异常行为的未知勒索软件检测 基于异常行为的未知勒索软件检测基于异常行为的未知勒索软件检测

b. 进程拦截

此处有个蛋疼的地方在于,应用层文件系统监控发现变动的时候,我们获得的仅仅是文件名信息和变动的操作,并不能获得当前导致变动的进程信息。就是说,我们知道对哪个文件有加密行为,但是不知道是谁干的。

只能去查找哪个进程持有该变动文件的句柄。Windows下有两种方式,一种是通过NtQuerySystemInformation来查询的。一种可以通过 RestartManager来查找。

主要区别在于NtQuerySystemInformation随时会被干掉。而RestartManager是微软钦定的 api

基于异常行为的未知勒索软件检测

基于异常行为的未知勒索软件检测

查找到有问题的进程,直接OpenProcessSuspend即可。(我原来对不 hook不加驱动拦截进程操作总觉得很不解。思维定势啊)

基于异常行为的未知勒索软件检测

基于异常行为的未知勒索软件检测

 

完整代码参见https://github.com/mogongtech/RansomDetection

测试方式:

1.  找一台干净的虚拟机,我的环境是win2008。目前 RestartManager的支持是vista+,故建议环境是win7 win2008这种。如果你要支持winxp,请将查找句柄的函数用NtQuerySystemInformation 来实现。建议你不设置网络以及共享文件夹。

2.  虚拟机里面创建以下目录,并把github breadcrumb目录下的蜜罐文件放进去。(别问我为啥目录是这几个,因为我硬编码的)

C:\Cversions245

C:\Xdata229  

C:\Users\Acly09pk

C:\Users\Qtua

C:\Users\Administrator\Documents\Lmirror147  C:\Users\Administrator\Documents\Nsetup158 

3. 编译RansomDetection代码,放到虚拟机里面运行

4. 解压github test 目录下的样本并运行(这是locker,不是随便造的勒索软件)

基于异常行为的未知勒索软件检测

基于异常行为的未知勒索软件检测

综上,欢迎云厂商和甲方安全团队在终端安全防护和主机入侵防护软件中加入该检测模块并完善,共同对抗未知勒索软件。大家一起做点实事。

最后,我们将不定期分享威胁分析检测回溯方面的经验。

*本文作者:高渐离 ultrain @墨攻安全实验室,本文属 FreeBuf 原创奖励计划,未经许可禁止转载

发表评论

电子邮件地址不会被公开。 必填项已用*标注