白加黑 DLL 劫持免杀
认识
DLL劫持,顾名思义,即对正常运行的无害程序的DLL调用进行劫持,使其调用了黑客设置的非法的、有害的DLL库,从而执行恶意代码。该类无害程序大多本身是有正规的文件签名与证书的,因此会被许多杀毒软件列为白名单,对其一些敏感的操作会进行规避。如果对白名单内的程序进行DLL劫持,将其替换为自己的payload,往往可以实现恶意代码的免杀。
程序调用DLL有一个大致的优先级,大致为
- 程序根目录
- 系统目录(如system32)
- 16位系统目录
- Windows目录
- 当前工作目录
- 环境变量PATH中的目录
如果优于原本的DLL伪造了一个DLL,那么程序在尝试加载DLL时,会优先载入恶意DLL,从而执行恶意代码。
白名单程序
白名单程序是十分好找的,只不过随着越来越多的开发者对安全的重视变得更强,程序在调用 dll 时会进行校验。所以对于白名单程序,须探明其是否有 dll 的完整性校验。但其实还是有很多的常见的白名单程序没有引入完整性校验的。
删去对应的dll,再检查能否正常启动应用,即可简单地判断是否进行了对该dll的调用。
而为了测试其是否检测了dll的完整性就有点麻烦了,一般是做完之后才能检测。。
使用工具
- ProcessMonitor: 微软提供的Sysinternals套件的一部分。可以监控和显示操作系统中关于文件系统、注册表、进程、线程和DLL活动的详细实时信息。在本次实验中,Process Monitor可以被用来追踪哪些程序正在尝试加载哪些DLL。即可下载,直接谷歌在官网即可下载。
- Aheadlib: 典中典DLL劫持领域中的最常见工具。可以利用该工具用于生成代理DLL,然后替换至对应目录即可实现DLL劫持。这里我使用的是GitHub上使用较广的版本
https://github.com/Yonsm/AheadLib
- VisualStudio 2022:现在许多重写版的Aheadlib都是基于VisualStudio2022来开发的,为了防止环境不同的bug出错,也为了更好地生成出稳定的dll,最好使用该工具来编写和生成dll。
DLL 劫持 - 即时调用函数
dll劫持的实操其实比较麻烦,而且寻找不会做检验的应用也比较靠运气,当然有很多现成的已知的可以劫持的应用程序。我这里实操使用雷神加速器进行。
1.寻找调用dll
可以看到雷神加速器目录下有ffmpeg.dll,应该是团队开发时基于ffmpeg魔改的dll。如果删去该dll,运行leigod.exe时,会产生报错
那么可知雷神加速器启动时就会调用ffmpeg.exe。那么就可以通过劫持该dll,在虚假的dll中写入自己的恶意代码,在运行启动leigod.exe时就会调用它,从而实现代码执行或远控。
2.构造恶意dll
使用Ahead进行构造,参数如下
这里填写大致如上,选择即时调用函数,其dll劫持方法与直接转发大有不同,且听后文分解。
得到输出的cpp后,将其代码内容全部复制至visual studio中。vs这边需要先创建一个dll项目,然后将代码复制到dllmain即可
如果有提示形参不兼容等报错,可以在项目处修改字符集为多字节字符集。等会生成方法使用Release,所以需要修改Release的配置。注意这里的原始dll,待会会用到。
bug问题
我使用的Aheadlib生成的cpp疑似有点bug,也可能是我vs的配置问题。
生成出来的cpp在链接函数时,是从0开始链接
询问gpt后得知好像不能从0开始(在Windows上)
所以把第一行删去即可
即删去#pragma comment(linker, "/EXPORT:Noname0=_AheadLib_Noname0,@0,NONAME")
这一行
删去后,就可以构造自己的恶意代码了。
在dll的入口函数处添加即可,我这里简单弹个计算器。
|
|
然后生成出最终dll即可。选择Release x86,但具体是x86还是x64需要根据原先dll的具体信息来选择。
3.更名劫持dll
得到的dll改名为ffmpeg.dll,将其复制到雷神加速器leigod.exe的同目录下。同时还需要将原始的ffmpeg.dll更名为ffmpegOrg.dll(即之前的原始dll名)一同复制,然后再运行。
可以看到成功弹出了计算器
但是由于雷神加速器自身开发的机制,检测到被修改后的dll后,会进行一次自我修复,然后ffmpeg就被替换了(可以对比前后两次ffmpeg.dll的大小)
但这也总比直接禁用好,好歹调用了一次dll执行了代码。
而potplayer就会检测dll完整性,如果检测到dll被修改则直接取消调用,代码也无法执行了。
4.简化打包(武器化)
测试完毕后,如果该app检测出dll被修改后不会强行停用,就可以将该app简化打包了。
将其主要文件放在独立的文件夹里,查看是否能成功运行恶意代码
如此,只需要将恶意代码修改为payload并加载,就可以上线了。
已知白文件汇总
可以通过此网站来查看已挖掘到的Dll:https://hijacklibs.net/