qt下调用win32 api实现屏幕绘图_EDR绕过方法:利用.NET动态调用绕过内联和IAT Hook...

b78dc14ee18a34f246ce7660f59f6448.gif

fc4c1ad97112d7a6ab2dac0c561fb768.png

一、概述

本文展示了几种动态调用方法,可以利用这些方法绕过Inline和IAT Hook。可以在这里找到概念证明:https://github.com/NVISO-BE/DInvisibleRegistry 。

fc4c1ad97112d7a6ab2dac0c561fb768.png

二、探索过程

时至今日,红队的技术已经发生了明显变化,他们越来越多地使用C#编写工具,或者逐步从PowerShell转移到C#。

由于AMSI(反恶意软件扫描接口)、脚本块日志记录等一些变化,利用PowerShell实施的一些攻击活动已经越来越容易被发现和防御。

C#中有一个很好用的功能,就是能够像在C或C++中一样,调用Win32 API并操纵这些低级别的函数。

在C#中利用这些API函数的过程被称为平台调用,简称为P/invoke。微软通过C#中的System.Runtime.InteropServices命名空间来实现这一点。所有这些都由CLR(公共语言运行时)进行管理。下图展示了如何使用P/Invoke来衔接非托管代码和托管代码。

bb09d7bde57464bb8044d81368902be8.png

但是,从攻击者视角来说,使用.NET也存在一些缺点。由于CLR负责.NET与机器可读代码之间的转换,因此可执行文件不会直接转换为机器可读的代码。这意味着,可执行文件将其整个代码库存储在程序集中,因此非常容易进行逆向工程。

除了进行逆向以外,我们还越来越多地接触到EDR(终端监测与响应)。借助EDR,组织可以提高其网络安全性,使攻击者变得更加艰难,这显然是一件好事。

即使恶意程序在内存中执行(不接触磁盘,通常也称为“无文件”),由于EDR挂钩了进程,因此也可以捕捉到进程活动,并发现特定函数的执行过程。EDR有能力检查当前正在发生的事情,放行合法的函数调用,并阻止可疑的调用。@CCob发表过一篇关于这个概念,以及如何绕过挂钩的文章。一些EDR可能会挂钩到最底层,即负责Windows内核系统调用的ntdll.dll。下图说明了EDR的工作原理。

EDR如何对ntdll调用进行挂钩以防止恶意软件执行:

6a15050e8156fb7a68e1844eea372131.png

EDR主要有两种挂钩方式,分别是IAT Hooking和Inline Hooking(也被称为splicing)。

IAT的全称是导入地址表,我们可以将IAT类比为电话簿,能够在其中查找朋友的号码(所需的函数)。

这个电话簿可能被篡改,EDR可能会更改其中的某个条目,以指向EDR。下面展示了一个图表,说明了IAT Hooking的工作原理。

在这里,我们将EDR视为“恶意代码”:

bb8f98a7995d2ffd9e2b31d12dc84dc6.png

在示例中,是一个要调用消息框的程序。该程序将在其电话簿中查找消息框的号码(地址),以便进行调用。

程序很难知道有人替换了电话号码(地址),所以每次当它以为在调用消息框时,实际上都在调用EDR。

EDR会接受呼叫(调用),收听消息(调用的函数),如果EDR判断该内容时合法的,则会将消息框的真实地址返回给程序,以便进行实际的调用。

而Inline Hooking的原理可以类比成入侵者把枪顶在了我们要呼叫的朋友的脑袋上。

2c6850eae7b0bcc75a15be48c3be0655.png

在Inline Hooking的情况下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值