『网络安全科普』Windows安全之HOOK技术机制_windows hook技术

前言

如你所知,Windows系统是建立在事件驱动的机制上的,而每一个事件就是一个消息,每个运行中的程序,也就是所谓的进程,都维护着一个或多个消息队列(消息队列的个数取决于进程内包含的线程的个数)。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

typedef struct tagMsg
{
HWND hwnd; //接受消息的窗口句柄
UINT message; //消息常量标识符(消息号)
WPARAM wParam;//32位消息特定附加信息
LPARAM lParam;//32位消息特定附加信息
DWORD time; //消息创建时的时间
POINT pt; //消息创建时的光标位置
}MSG;

你在Windows应用程序的调用函数中,常可以看到WaitMessage等对消息队列的处理函数,另外还有诸如此:PeekMessage、GetMessage、GetQueueStatus、WaitMessage、MsgWaitForMultipleObjects以及MsgWaitForMultipleObjectsEx等来对消息队列进行接收和检索。

Windows系统会为每一个正在运行的应用程序保持有一个消息队列。当有事件发生后,Windows并不是将这个激发事件直接送给应用程序,而是先将其翻译成一个Windows消息,然后再把这个消息加入到这个应用程序的消息队列中去。

Windows中的应用程序,需要通过消息循环来接收这些消息,也正是因为Windows消息机制的缘故,我们可以进行消息HOOK,而Windows的HOOK技术,也是一种消息处理机制,一种提供给用户的对Windows运行过程进行干预的消息处理机制,通过钩子程序,Windows将内部流动的消息暴露给用户,使用户能够在消息被窗口管理器分派之前对其进行特殊的处理,比如跟踪消息流程以便进行调试工作。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

此外,消息不仅可以在应用内传递,也能在进程间传递,包括应用程序之间、以及应用程序与windows 系统之间。这样的设计,使得一些恶意的木马病毒程序等,可以通过向高权限进程发送特定消息,去提升自己的权限,进而对操作系统造成破坏,或者进行特殊的操作来获取隐私数据。

分类

Windows系统的HOOK技术,大致按照以下方放进行分类。

首先,可以根据其作用范围分为两类:一类是只能获取本进程内某个线程消息的局部钩子(Thread Local Hook),另一类是可以获取当前系统中所有线程消息的全局钩子(Global Hook 或 System Hook)。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

其次,也可以根据其作用的权限,分为应用层HOOK和内核层Hook,在 Ring3 层的 Hook机制,称之为应用层 Hook 技术,而在 Ring0 层的Hook机制,则称为内核层 Hook 技术。

Windows用于处理消息的钩子函数,主要是SetWindowsHookEx() 、CallNextHookEx()和UnhookWindowsHookEx()

每当进程消息产生的时候,其会被加入到系统消息队列,然后由操作系统从消息队列中取出消息,将其添加到相应的程序的消息队列中。而HOOK技术则抢先一步,在其被发往应用程序之前,监视到此类函数的调用,并且提前捕获到该消息,随后进行自己预先设定的处理工作。

例如,Inline Hook技术,这属于应用层的注入Hook,通过在内存中找到想要Hook函数地址,并在其之前加入自己构造的跳转指令,紧接着,当被Hook位置执行时,便可以跳转到HOOK技术使用者自己编写的执行代码,在其执行完毕后,还原被修改的字节,接着执行正常流程。

再例如,使用API函数SetWindowsHookEx(),这是通过消息机制进行消息Hook(消息Hook)。其把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个Hook子程需要调用CallNextHookEx函数。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

在操作系统中安装全局钩子以后,只要进程接收到可以发出钩子的消息后,全局钩子的DLL文件会被操作系统自动或强行加载到该进程中,这里要注意:系统不仅仅是加载挂钩函数,包含其在内的整个DLL都会被载入其中,Windows核心编程第五版中第这部分内容有说明,见下图。

Windows核心编程第五版 P577,拍摄于2021.12.07

此外,还可以导入地址表来进行HOOK(IAT HOOK,应用层的注入HOOK),地址表是PE文件结构中的一个表结构,Windows加载器定位导入函数是借助可执行文件的导入表来完成的,导入表中存放了所使用的DLL的模块名称及导入的函数名称或函数序号,可以借助修改导入表来完成对关键函数调用的HOOK。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

接着还有调试HOOK的方法(调试HOOK),即通过调试方式进行的API钩取函数。

调试器能够逐一执行被调试者的指令,拥有对调试器与内存的所有访问权限。每当被调试者发生调试事件时,OS就会暂停并向调试器报告此事件,调试器做适当处理后,会使被调试进程继续执行。这和HOOK的机制很像,因此攻击者可以伪装成调试器行为进行hook,对目标API入口地址下断点并截获参数内容,之后将其修改至自己构造的跳转指令即可,可以使用DebugActiveProcess(ProcessID)函数来附加到一个进程来进行调试。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

此外,还有内核层SSDT Hook(内核层HOOK),SSDT 的全称是 System Services Descriptor Table,系统服务描述符表。这个表是一个把 Ring3 的 Win32 API 和 Ring0 的内核 API 联系起来对应表。SSDT 并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。通过修改此表的函数地址,可以对常用 Windows 函数及 API 进行 Hook,从而实现对一些关心的系统动作进行过滤、监控的目的。一些 HIPS、防毒软件、系统监控、注册表监控软件往往会采用此接口来实现自己的监控模块,实现内核级的防护手段。

如果,你仔细观察我上面的Windows核心编程截图,你会发现标题是DLL注入和API拦截,没错,HOOK技术还可以被用作DLL注入的手段,通过HOOK将一个DLL注入到另一个进程的地址空间当中去。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

Windows核心编程第五版 P576,拍摄于2021.12.07

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

Windows核心编程第五版 P577,拍摄于2021.12.07

hhookGetMsg=::SetWindowsHookEx(WH_GETMESSAGE,GetMessageHookProc,::GetModuleHandle(TEXT(“dll.dll”)),threadId);
//参数1:钩子类型
//参数2:钩子处理函数
//参数3:钩子所在的模块
//参数4:钩子要拦截的线程ID,如果要设置全局钩子,这里允许给0

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

hook是微软为了保持与16位程序兼容而被迫设计出的一种方式,利用hook可以实现dll的注入。这种方法和利用注册表来注入DLL相比,允许我们在不需要该DLL的时候从该进程地址空间中取消对其的映射。

作用

HOOK技术,常被翻译成“钩子”,通过劫持函数调用,截获监视系统的消息,来改变程序执行流的技术,将程序原有的执行流程改变,更改程序流向,并使其可以执行自己植入代码的技术。

有一种误解在于,把HOOK函数当作是恶意软件的专属技术,当然,这在某种程度上是成立的,例如很多调用NtUserGetAsyncKeyState或者NtUserGetRawInputData来获取用户键盘输入,以此完成自己的密码窃取。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

但是,Hook技术也被广泛应用于安全的多个领域,Windows xp及其之前的安全机制,除了靠定期向病毒木马样本库中添加新样本外,还需要辅之以hook关键的系统函数,以方便在用户down文件或者打开exe时查杀木马。此外,早期的杀软,除了被动扫描之外,也还需要主动对一些敏感API进行HOOK监控;有时Windows系统本身及一些相关应用程序,在打补丁时也需要使用Hook技术,可以说这是一把双刃剑吧。

总结

微软在Win 10里设立了Secure ETW通道,安全软件不再需要像以前那样HOOK系统内核来完成对系统内进程的监视**。**而HOOK作为一个比较老的技术,也已经越来越少被提起到了,但这并不妨碍它曾经的光辉岁月,作为一类经典的流行方法,很值得我们去了解。

网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

网络安全学习路线

这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阶段一:基础入门

img

网络安全导论

渗透测试基础

网络基础

操作系统基础

Web安全基础

数据库基础

编程基础

CTF基础

该阶段学完年薪15w+没有问题

阶段二:技术进阶(到了这一步你才算入门)

img

弱口令与口令爆破

XSS漏洞

CSRF漏洞

SSRF漏洞

XXE漏洞

SQL注入

任意文件操作漏洞

业务逻辑漏洞

该阶段学完年薪25w+

阶段三:高阶提升

img

反序列化漏洞

RCE

综合靶场实操项目

内网渗透

流量分析

日志分析

恶意代码分析

应急响应

实战训练

该阶段学完即可年薪30w+

阶段四:蓝队课程

img

蓝队基础

蓝队进阶

该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。

攻防兼备,年薪收入可以达到40w+

阶段五:面试指南&阶段六:升级内容

img

需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容可在文章后方领取。

在这里插入图片描述

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

或者扫描下方csdn官方合作二维码获取哦!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

感谢您观看我的文章,谢谢!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值