『免杀』白加黑
一、白加黑
1)白就是此文件在杀软的白名单中,不会被杀软查杀;黑就是我们的恶意代码,由自己编写。通常白加黑共同组成木马的被控端,最大限度的逃避杀软查杀,增强抗杀能力,而且方便免杀处理。一般情况下,白为.exe可执行程序(带有数字签名),黑为.dll文件或者其他,黑文件里面加入了我们自己编写的恶意代码,恶意代码有很多种,比较常见的就是shellcode和其它的反弹shell,当然,黑可以分成很多部分⛱
2)“白加黑”是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段⛅
二、DLL劫持
1、DLL
1)DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32.DLL
用于执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。.dll文件和.exe文件一样都是PE文件。
2)我们可以用进程管理器Process Explorer
来查看下一个已经运行的程序所调用的DLL文件:
这里以Edge浏览器为例子,根据参考资料的操作来查看其对应调用的DLL,如下所示:
💘参考资料:工具 | Procexp工具使用及案例说明_Mocha-Li的博客-CSDN博客_procexp
2、为什么可以DLL劫持
1)主要是因为Windows的资源共享机制。为了尽可能多的安排资源共享,微软建议多个应用程序共享的任何模块应该放在Windows的系统目录中,如kernel32.dll
,这样能够方便找到。但是随着时间的推移,安装程序会用旧文件或者未向后兼容的新文件来替换系统目录下的文件,这样会使一些其他的应用程序无法正确执行,因此,微软改变了策略,建议应用程序将所有文件放到自己的目录中去,而不要去碰系统目录下的任何东西。
2)为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。利用系统的这个特性,就可以使应用程序强制加载我们指定的DLL做一些特殊的工作。
3、什么是DLL劫持
1)如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去指定的目录下查找这个DLL;如果攻击者能够控制其中的某一个目录,并且放一个恶意的DLL文件到这个目录下,这个恶意的DLL便会被进程所加载,从而造成代码执行,进而持久化控制,这就是所谓的DLL劫持。
2)由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。
进程装载DLL
进程卸载DLL
DLL在被装载之后创建新进程
DLL在被卸载之后线程被终止
4、DLL文件的加载顺序
1)Windows XP SP2
之前:
Windows 查找DLL的目录以及对应的顺序:
1. 进程对应的应用程序所在目录;
⬇⬇⬇
2. 当前目录(Current Directory);
⬇⬇⬇
3. 系统目录(通过 GetSystemDirectory 获取);
⬇⬇⬇
4. 16位系统目录;
⬇⬇⬇
5. Windows目录(通过 GetWindowsDirectory 获取);
⬇⬇⬇
6. PATH环境变量中的各个目录;
例如:对于文件系统,如doc文档打开会被应用程序office打开,而office运行的时候会加载系统的一个dll文件,如果我们将用恶意的dll来替换系统的dll文件,就是将DLL和doc文档放在一起,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。
2)Windows xp sp2
之后:
Windows查找DLL的目录以及对应的顺序(SafeDllSearchMode 默认会被开启):
默认注册表为:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode //其键值为1
查找DLL的目录以及对应的顺序:
1. 进程对应的应用程序所在目录(可理解为程序安装目录比如C:\ProgramFiles\uTorrent)
⬇⬇⬇
2. 系统目录(即%windir%system32);
⬇⬇⬇
3. 16位系统目录(即%windir%system);
⬇⬇⬇
4. Windows目录(即%windir%);
⬇⬇⬇
5. 当前目录(运行的某个文件所在目录,比如C:\Documents and Settings\Administrator\Desktop\test);
⬇⬇⬇
6. PATH环境变量中的各个目录;
3)Windows7 以上版本:
系统没有了SafeDllSearchMode 而采用KnownDLLs,那么凡是此项下的DLL文件就会被禁止从exe自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用,其注册表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
根据dll文件的路径,去注册表里面找。
那么最终Windows2003以上以及win7以上操作系统通过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来确定应用程序所要调用的DLL的路径,之后,应用程序就将DLL载入了自己的内存空间,执行相应的函数功能。
• 默认情况下,如果软件安装在C盘根目录,而不是 C:\Program Files,那经过身份验证的用户具有该目录的写权限,另外,perl,python,ruby等软件通常都添加到path变量中。那攻击者可以在当前目录中编写恶意DLL,只要重新运行exe程序就会中招。
• SafeDllSearchMode + KnownDLLs 二者结合可用来防范dll劫持,但是如果调用"不常见"的dll,也就是并未出现在KnownDLLs的列表中,那么无论SafeDllSearchMode是否开启,dll搜索的第一顺序均为程序的当前目录,这里就存在一个DLL劫持漏洞(在程序同级目录下预先放置一个同名dll,在进程启动的过程中会优先加载,实现劫持。
4)但是不管是哪种情况,第一个搜索的肯定是应用程序的所在目录,这样就有机会让应用程序去加载我们的DLL。如果这个DLL和系统目录下的某个DLL同名,导出表也相同,功能就是加载系统目录下的那个DLL,并且将导出表转发到那个真实的DLL。这时DLL劫持就发生了。可以看出,构造一个符合上面要求的DLL,再将其放在可执行文件的目录即可轻松实现DLL劫持了。
5、DLL劫持的产生条件
1)DLL能否被劫持:不在以下的注册表中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
2)其DLL是.EXE可执行程序首先加载的DLL,而不是依赖其它DLL加载的💥
3)DLL确实被加载进内存中✔
6、DLL是否可以被劫持的判断方法
1)手动方法:利用进程管理器,查看DLL是否存在于'KnownDlls'注册表中。
🍸进程查看工具:ProcessExplorer、ProcessMonitor、火绒剑
ProcessExplorer
🚀(好东西)下载地址:进程资源管理器 - Windows Sysinternals | Microsoft Docs
ProcessMonitor
🚀(好东西)下载地址:进程监视器 - Windows Sysinternals | Microsoft Docs
火绒剑
🚀下载地址:火绒安全 (huorong.cn)
7、DLL劫持——实战情况下
1)DLL劫持的时候,需要找白文件,白文件分为:系统级别和用户级别,用户级别就是非C:\Windows目录下的白文件、非C:\Program Files目录下的白文件和非C:\Program Files (x86)目录下的白文件;
2)我们在安装程序的时候,安装程序的默认路径一般都是C:\Program Files
或者C:\Program Files (x86)
,就算我们把安装的路径修改了,在这两个目录下也是会有一些安装的信息的,因此我们在对目标服务器进行DLL劫持的时候,我们可以去这两个目录下寻找对方安装在这两个目录中的程序,然后对其进行DLL劫持,只要是个安装程序我们都可以尝试DLL劫持,但是呢,我们得知道对应的DLL文件所调用的函数才可以进行黑文件的构造。
3)当然了,技术够的话也可以劫持系统级别的白文件🤣
今日,意识到自己目前还未到学习免杀的阶段,自身的技术水准还没有到可以吸收得了的程度,因此不再继续往下学习,潜心修炼,潜心学习,直到自己到达这个高度了,再回来继续学习剩下的内容,综上种种原因,本次笔记无限期停更!!!
——断剑重铸之日,骑士归来之时
分类:
免杀
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?