本文作者:x-encounter (信安之路作者团队成员)
在公司实习也有一个月了,学到不少东西,不知不觉就要大四了,回首漫漫安全路,不禁感慨万千:我入安全的时间比较晚,大一大二跟着老师参加 Android 移动应用开发的比赛,大三开始学习安全,和大部分的人一样,始于 web 安全,当时是以视频为主,比如大家耳熟能详的黑麒麟(已经凉了)、小迪渗透等等,后来不知有一股神秘的力量莫名其妙的让我迷上了远控,之后又看了本《0day》,从此开始了底层二进制之旅,如果问我为什么一个搞 Android 开发的在后来会选择 PC 端的病毒分析,emmmm,大概这就是缘分吧……到现在我依然觉得病毒和外挂是计算机领域最吊的东西,C 语言是世界上最牛逼的语言。说了那么多就以对未来的期望作为结尾吧,但愿在未来依然可以感受到接受新知识时的心潮澎湃、受到挫折时的迷惘无助、柳暗花明后的“自怨自艾”,或许这就是所谓的初心吧!
其实扯了那么多就想说一句:开学啦!来给信安投稿吧!
该驱动样本经过 VMProtect2.x 混淆,先让其加载到内核中,使其在内核展开之后 dump 出来。
接着修复 dump 后的节区
之后载入 ida,由于 VMP 将函数调用进行了混淆所以我们无法直观的查看函数调用,这里需要双机内核调式,动态查看 call 的是哪个内核 API。
该 Rootkit 一共注册了四个回调,进程创建回调,映像加载回调,注册表回调和关机回调,与锁首有关的回调为,进程创建回调和映像加载回调
进程创建回调函数代码如下
之后会分别获取进程创建回调函数列表和映像加载回调函数列表,并且调用 PsSetCreateProcessNotifyRoutine 将除自己外的其他回调函数全部清除,用于保护自身。
接着获取 NtSuspendProcess 并调用使当前进程挂起,调用 NtCreateFile 修改浏览器快捷方式中的命令行参数,锁定为 2345 导航站的首页,之后恢复进程,此时浏览器进程为 System 权限,逻辑如下
映像加载回调函数主要用于和杀软对抗,有些杀软的浏览器保护功能是通过向浏览器中注入相关的动态链接库从而达到保护的目的。每当浏览器载入一个模块,该回调函数都会检查载入的 Dll 中是否包含特定的字符串
如果发现了满足上述条件的 DLL,先判断该 DLL 是 32 位还是 64 位,如果是 32 位将该 DLL 的前三个字节改为 "\x31\x0c\xc2",64 位就改前 5 个字节,修改的 DLL 位于 3 环下所以当载入到主进程中时并不会蓝屏,且是个非法的 PE 文件,最终会导致 DLL 加载失败,对抗的逻辑如下
注册表回调和关机回调与锁首没有太大的关联就不分析了
修改 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main
中的 Start Page 或 Default_Page_URL 的值即可
以谷歌浏览器为例
修改 %USERPROFILE%\AppData\Local\Google\Chrome\User Data \Default\Secure Preferencesa
文件中的 startup_urls 的值即可
1、与上述例子相似,进程创建回调函数记录进程信息,映像加载回调函数修改命令行,这种绕过比较简单直接把浏览器的名字改一下就行了。
2、除了内核改命令行的操作外,还可以在内核中直接创建过滤设备,过滤网络数据,也可以挂钩子等等都可以达到锁首的效果。
第一:你的系统肯定不是正版系统,而且国内有数量巨大的Ghost系统,对于这种魔改后的系统,你就只能自求多福吧。
第二:我就不会买个签名啊,通过下载站、外挂等推广手段植入到你电脑中给我挖矿,一个月过后本钱不就赚过来了吗?
所以不是病毒不常见了,是越来越骚了。
第一种是纯粹的恶意行为,并且作为一个独立的进程或者脚本常驻系统,对系统并没太大的影响,单纯觉得恶心而且难以清理,这里推荐火绒的一键锁首(趁机安利一波)
第二种是流氓软件,这种一般不好搞,都有正规签名。基本上锁首的逻辑都做到了驱动中且与正常逻辑混在了一起,难以对抗,但是你还要时不时的升升驱动,扫扫毒,点点广告…… emmmm,大兄弟,是换还是忍,自己看着办吧
内核级别的对抗是个无底洞,永远没有尽头,我这里只是抛转,希望能够引来不少珍贵的“美玉”。
Dump样本下载地址
https://pan.baidu.com/s/1rHnIM-XBK2nvax-iCiFo7A