首页
社区
课程
招聘
[原创][翻译]规避技术: 拦截
发表于: 2021-6-1 10:16 8310

[原创][翻译]规避技术: 拦截

2021-6-1 10:16
8310

备注
原文地址:https://evasions.checkpoint.com/techniques/hooks.html
原文标题:Evasions: Hooks
更新日期:2021年6月1日
此文后期:根据自身所学进行内容扩充
因自身技术有限,只能尽自身所能翻译国外技术文章,供大家学习,若有不当或可完善的地方,希望可以指出,用于共同完善这篇文章。

目录

拦截检测方法

1. 检查系统功能中是否设置了拦截

2. 通过鼠标拦截检查用户的点击中是否存在特定字符串

2.1. Windows Vista+

识别标志

反制措施

归功于

拦截检测方法
这里描述的技术利用拦截来检测用户的存在,或者作为检查是否安装了一些不寻常的主机操作系统拦截的手段。
1. 检查系统功能中是否设置了拦截
恶意软件在特定地址读取内存,以检查Windows API函数是否被拦截。
这种方法是基于这样一个事实,即仿真环境最有可能钩住这些功能,以便能够在伪装期间收集数据和统计数据。
要检查的常用函数:

ReadFile

DeleteFile

CreateProcessA/W

通过以下函数读取内存:

ReadProcessMemory

NtReadVirtualMemory

然后可以使用不同的算法进行检查:

将前两个字节与\x8B\xFF(mov edi,edi)进行比较 —kernel32函数的典型出现方式。

将前N个字节与\xCC-软件断点(int 3)进行比较,该断点未直接与拦截连接,但仍有可疑行为。

将前N个字节与\xE9(调用)或\xEB(jmp指令)进行比较-用于重定向执行的典型指令。

正在检查执行重定向的push/ret组合
等等

要计算每一种可能的比较是非常困难的,所以应用程序行为中不正常的一般迹象是读取操作系统库所在的内存。如果更准确地说:读取 "有趣 "的函数所在的内存。
这篇文章解释了如何检测用户模式下的钩子并移除它们。下面的代码样本取自这篇文章
检测拦截的样本:

解除拦截函数的样本:


2. 通过鼠标拦截检查用户的点击中是否存在特定字符串
这项技术由这个链接描述(第4页,第7页)。

恶意软件设置鼠标拦截来检测点击(或更多)如果它发生。如果是这样的话,恶意软件会将主机视为一个常规的主机,即最终用户在屏幕后面,而不是虚拟环境。如果没有检测到鼠标点击,那么很可能是一个虚拟环境。
使用的函数:

SetWindowsHookExA/W (WH_MOUSE_LL, ...)

GetAsyncKeyState

代码样本 (SetWindowsHookExA):


代码样本 (GetAsyncKeyState):

识别标志
没有为这个规避组提供识别标志,因为很难在以某种规避技术为目标的代码和 "合法使用 "的代码之间做出区别。
反制措施


归功于
归功于0x00sec.org论坛的用户dtm。

由于Check Point名为InviZzzible的工具采用了模块化的代码结构,因此需要更多的空间来展示这个工具的代码样本,以达到相同的目的。这就是为什么我们决定在整个百科全书中使用其他伟大的开源项目作为例子。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//