转载来自:http://blogs.360.cn/360safe/2016/10/24/hook007autostart/
https://blog.51cto.com/2817071/710911
级别一:
一般程序调用dll会从一定的路径查找需要的Dll,在调用真正的dll之前将payload变成dll让程序先识别调用,这就是dll劫持。
加载顺序为:首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL被劫(hijack)了。
级别二
利用msdtc.exe。
msdtc.exe是微软分布式传输协调程序,以Windows服务的形式存在。该服务在启动过程中会调用一个系统中不存在的dll文件oci.dll。而***可以生成一个oci.dll文件供msdtc.exe加载,而该dll文件也会随着服务的启动而启动。将***生成为oci.dll放在%windir%system32下,在启动该服务后,会调用这个dll。
关键点:
-
分别加载3个dll:oci.dll,SQLLib80.dll,xa80.dll
-
然而特别的是,Windows系统默认不包含oci.dll
-
也就是说,将payload.dll重名为oci.dll并保存在%windir%system32下
-
域中的计算机启动服务MSDTC时就会加载该dll,实现代码执行
设置服务自启动: 使用wmic.exe "service where name="msdtc" changestartmode "automatic"" open 检出特点:查找oci.dll文件,服务MSDTC的开启。
级别三:
Spooler服务是windows的打印机服务,在服务启动时,会检索注册表键HKLM\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64(Windows NT x86)下Directory的键值,而该键值对应的是一个文件夹名称,文件夹位于C:\Windows\System32\spool\prtprocs下。Spooler服务检索该注册表之后会查找该文件夹路径下的winprint.dll(x64下,x86下为TPWinPrn.dll)。hook007远控***利用这一点修改了注册表键值使其指向另一文件夹,然后在C:\Windows\System32\spool\prtprocs路径下新建该文件夹,并将***以dll的形式存放到文件夹中,重命名为winprint.dll。
检出:
查看C:\Windows\System32\spool\prtprocs下文件夹修改时间,查看winprint.dll修改时间
级别四
第一个可利用的点来自于RemoteAccess服务。RemoteAccess服务在启动时会读取注册表键HKLM\Software\Microsoft\Ras\AdminDll下的DLLPath的值,并加载DLLPath的值所表示的路径下的dll。因此***可以将DLLPath的值设为***dll的路径以达到劫持效果。如果将RemoteAccess服务设为自动启动,那么该dll也将随着RemoteAccess服务开机自启。
第二个可利用的点就是利用了这样一个较为稳定的dll,它劫持一个常见的注册表键HKLM\SYSTEM\CurrentControlSet\Services\,这是一个存放系统服务相关信息的注册表键。样本中的***劫持了系统服务eventlog,也就是事件查看器,通过修改注册表键HKLM\SYSTEM\CurrentControlSet\Services\eventlog下ServiceDll的值来进行dll劫持。
原值对应的是%SystemRoot%\System32\wevtsvc.dll,***作者将其改为***dll的路径,每次事件查看器启动时就会加载该dll。
检出:
(1)检查HKLM\Software\Microsoft\Ras\AdminDll下的DLLPath的值
(2)检查HKLM\SYSTEM\CurrentControlSet\Services\eventlog下ServiceDll的值 正确的值为:%SystemRoot%\System32\wevtsvc.dll
转载于:https://blog.51cto.com/antivirusjo/2092368