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

by 高渐离 ultrain

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

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

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

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

1.       创建诱饵文件

关键点:

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

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

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

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

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

 

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

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

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

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

这部分有两个关键点:

a.       应用层文件系统监控

Windows提供了FindFirstChangeNotificationReadDirectoryChangesW 两种方法。参见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+,故建议环境是win7win2008这种。如果你要支持winxp,请将查找句柄的函数用NtQuerySystemInformation来实现。建议你不设置网络以及共享文件夹。

 

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

C:\Cversions245

C:\Xdata229  

C:\Users\Acly09pk

C:\Users\Qtua

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

 

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

 

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

 

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

最后,http://drops.mogong.org,我们将不定期分享威胁分析检测回溯方面的经验。

墨攻安全实验室

我们是一个致力于研究安全威胁分析、检测和应急处理的民间组织。

墨攻安全实验室,包括前百度安全高渐离,京东安全 lucifer,百度安全 c0debreak,Xteam Stefanie,蚂蚁安全 Cryin,360安全 ultrain以及百度机器学习专家 demon386等。

我们希望与大家一起交流威胁分析检测等方面的技术。