一些有趣的自写的行为签名

这篇文章才应该是随时有可能更新的文章,记得偶尔来看看,指不定就更新了 :-)

2018.08.19 00:40

suspicious_network

这个签名应该算是我的更新日志里的常客了,很多时候你都会看到它的身影。那么它是干嘛的呢?
实际上,这个签名的诞生,一开始是被迫的。
在之前有关Cuckoo Sandbox的搭建的文章内我提到了网络相关的配置,在一开始的时候我也是按照了相关博客内的指示做的配置,那么就意味着Cuckoo Sandbox无法截获网络流量(但是虚拟机仍然可以访问互联网),也就意味着网络相关的行为签名基本作废了。
这可不行啊!咱们得找个替代品。
于是这个签名就诞生了。
签名本质就是拦截各类网络相关API(先后补充了好几次,分别做了适配),解析出域名和访问路径,然后与我的黑名单(以前更新的很频繁,现在更新频率比较低了)进行匹配。经过一波迷之计算(自认为这个计算方式非常nice)后得出最后这条规则的Severity值。
就算是后来可以截获网络流量了,这条规则依旧没有放弃更新,毕竟我没有也不打算为Cuckoo Sandbox整合Snort(整合意味着又多了个要定期更新的玩意儿)。
有少量行为签名依赖本条签名。

2018.08.19 23:25

antisandbox_detectmousemove

在很久很久以前,部分病毒就开始使用检测鼠标指针所在的位置来判断自己是否正处于自动化分析环境了(现在用这种手段用的最猛的就是Lokibot【这玩意儿真的很火】)。由于Cuckoo默认的移动鼠标的间隔实在是太长,因此我还特地将其改短了(参见之前的文章)。这条规则也正是用来检测病毒是否使用此项技术的。
一开始,我做的比较粗暴,直接拦截GetCursorPos函数,发现有这个函数调用就判定存在此行为。但是我一直觉得这样不妥,有种一棒子打死的感觉(虽然给的Severity值只有2,而且不会像上面的suspicious_network那样有一套特别的分数累加算法【只要病毒胆子够大,靠suspicious_network一条规则就可以最后评分上5】)。
最后我还是想到了更好的规则写法,可以用于判断行为序列(其实是率先在另一条规则上使用,这条规则以后再提,构思+编写+调试这条规则花了我差不多8个小时的时间),也把这条规则的Severity值改成了3。
目前没有行为签名依赖本条签名,但不排除我以后会专门写个签名用来判定程序是否使用了大量的环境检测/逃逸技巧。只不过目前看到的使用了大量的环境检测/逃逸技巧的样本很多都命中了我这边的特定病毒家族的签名,所以这个签名的需求不是特别强烈。

2018.08.21 23:30

dyncompile

刚刚算了下,我这边已经在Cuckoo的Windows行为签名目录下一共新建了72个额外的签名文件,而每个签名文件里不一定只包含1条签名,最多有个文件包含了6条签名。
这次来说说dyncompile这个签名吧。
顾名思义,这个签名是用来检测动态编译的,当然目前只针对.NET,毕竟.NET代码的编译器在.NET Framework(Runtime)里就有,而VC++的编译器你必须得装SDK。
有不少的.NET病毒喜欢先调用编译器把释放出来的源代码编译好再执行,而这些被编译的源代码同样可读性极差。命名混淆,EntryPoint.Invoke,控制流打乱应有尽有。
至于签名具体怎么写的,实际上就是检测一段命令行,正则匹配下就好。

2018.08.27 12:44

suspicious_nslookup

这条签名可以说和之前的suspicious_network算是兄弟俩了。目的一样,计分方式一致。
很明显,这条签名用于检测程序是否使用nslookup去解析可疑/已知恶意域名的IP地址。
至于这条签名的引入,完全是因为一款名字叫做GandCrab的勒索软件。由于其使用的.bit顶级域名无法通过咱们常见的DNS服务获得域名对应的IP地址(具体原因可以自行去网上搜索),因而病毒在访问服务器的时候需要先通过nslookup指定DNS服务器的方式来获得其IP地址。

2018.09.01 16:05

antivm_timeduration

这条签名就是我之前提到的最先使用行为序列判断的签名,也是用来检测病毒常用的反虚拟机手段的一条签名。
众所周知,虚拟机的运行效率是要低于真实机器的。于是病毒制作者想出一招,先获取当前时间,然后休眠一段特定时间,接着再次获取当前时间。然后比较两个时间差与休眠时间,如果差距过大即可判定处于虚拟环境中。
为了能够判断类似的行为,就需要判断行为序列。由于Cuckoo的一些特性,实际上判断行为序列并不是一件很难的事情(虽然Cuckoo并没有直接提供相关接口)

2018.09.09 23:37

antisandbox_sleep_zero

又是一条反沙盒检测的签名,其实从某种角度上来说应该是反虚拟机检测的签名。
原理也非常的粗暴,单纯检测NtDelayExecution的参数是否为0.
至于为什么有这条规则,纯粹是因为某个样本产生了近十万次类似的行为。
差点有一条行为签名就要依赖本条签名了,后来想想不大合适,于是作罢。

2018.10.01 16:20

dotnetRunPE

众所周知,RunPE是一种极其常见的进程注入手法。甚至有部分厂商还推出了RunPE的检测工具,如https://www.phrozen.io/freeware/runpe-detector/
因此,部分.NET混淆工具也得跟上时代潮流啊,将RunPE这个技巧也作为保护程序代码的一个部分(然后各大国际知名反病毒厂商开始大杀特杀)。
至于这条签名,则是用来检测样本是否在进行代码保护处理时使用了这项技术。由于Cuckoo的社区签名库里已有RunPE的检测规则,因此在这条规则匹配的基础上加入一些其他条件即可。

Comments

Popular posts from this blog

DTLMiner

当宽带运营商恶心人的时候...