当前位置: 首页 > news >正文

无痕HOOK 检测及对抗

大家也知道,攻防这个东西就是打个信息差,这些东西一旦被发出来…也就没啥用了,就让我来当这个恶人吧,哈哈哈

下面我将详解若干检测,并附上对抗思路

无痕hook:

基于硬件虚拟化VT-x或者AMD-v的扩展页表(EPT或NPT)功能使读写和执行访问分离进行inline hook操作,表现为执行指令与读取指令不一致

(应用层驱动层hook并无区别,以下的思路不做此区分,代码在最后)
一 . 构造可控执行中断对比指令执行前后上下文

首先了解几个概念:

单步,分支单步, 硬断,页面重映射,接管IDT,接管CR3,指令截断, 执行预测,异常处理,LBR

· 单步: 利用flags寄存器TF标志位实现单步执行,设置后每执行一条指令会陷入向量号为1的中断,即DB中断

· 分支单步 设置MSR_DEBUGCTRL的BTF位及flags寄存器TF标志位即可在执行到跳转指令时才会陷入DB中断(JCC指令判定失败不会触发)

· 硬断: 设置DR寄存器为目标地址以达到访问或者执行会触发DB中断的效果

· 页面重映射: 通过将目标页面重新映射到其他位置以达到规避GVA的判断,或者映射到应用层以利用应用层VEH接管无法回滚的异常

· 接管IDT: 构造一份IDT替换IDTR.base以达到接管无法回滚的异常,防止蓝屏,或检查触发了哪些异常

· 接管CR3: 构造一份仅映射ntos模块以及自身模块还有目标页的页表,用以获取hook handler的地址

· 执行预测; 利用符号执行或者模拟执行对目标指令进行执行预测,中断后对比寄存器或者栈内是否有不应该有的数据

· 指令截断: 即执行时从指令中间开始执行,对比预测执行结果与实际执行结果,以达到探测执行分离的效果

· 异常处理: r0只有SEH,如果存在hook,单步时RIP就会出现偏差,异常回滚会失败导致蓝屏,R3有SEH和VEH,VEH接管全局异常.

· LBR: 即"最后分支记录"可以搭配硬断完成hook handler address的探测

实际上的概念细节实现比较复杂,建议直接看代码,我不再赘述

以上关键词可以自由搭配组合,下面我介绍几种使用方法:

  1. 接管IDT.DB + 单步在这里插入图片描述
    效果:在这里插入图片描述
    2.页面重映射+R3 VEH+单步
    虽然不会导致蓝屏,但是执行环境毕竟和驱动层有区别,且用且珍惜

利用ZwMapViewOfSection函数将目标地址映射到应用层:在这里插入图片描述
触发单步和驱动一样在这里插入图片描述
在这里插入图片描述
执行效果:在这里插入图片描述
在这里插入图片描述
不太好写,拉倒吧,剩的组合各位自己尝试实践,这里再略微提几个思路:

-分支单步+硬断

-指令截断+硬断(+重映射到R3)

-LBR+硬断

-执行预测+指令截断+单步(+重映射到R3)

-执行预测+单步(+重映射到R3)

-接管CR3+接管IDT+硬断

-…对抗的话,通用规避不太优雅…不建议做,建议直接修改检测代码,通用规避思路:

通用规避:单指令hook(用int3int1触发vmeixt vmm改rip),vmexit后判断当前执行环境,如果发现异常使用MTF执行原指令跳过hook即可

但是这样就会每次执行都要vmexit,一个是效率问题,一个是实现复杂

二,时间检测,tsc,HPET,Local APIC Timer,性能计数器,等,此检测只能精确到目标页是否存在hook
不再多讲

对抗思路:处理好相关时间即可

以上对抗思路未经实践验证,仅有理论,如有逻辑漏洞欢迎指正

http://www.lryc.cn/news/622721.html

相关文章:

  • 数据结构:构建 (create) 一个二叉树
  • OpenJDK 17的C1和C2编译器实现中,方法返回前插入安全点(Safepoint Poll)的机制
  • 【lubancat】鲁班猫4实现开机后自动播放视频
  • 攻击者如何毒害人工智能工具和防御系统
  • 罗技MX Anywhere 2S鼠标修复记录
  • 【攻防实战】红队攻防之Goby反杀
  • 云原生俱乐部-RH124知识点总结(1)
  • PHP反序列化的CTF题目环境和做题复现第2集_POP链构造
  • 布隆过滤器的原理及使用
  • 基于STM32的智能书房系统设计与实现
  • 从阿里一面真题看:索引树搜索次数背后的逻辑
  • Sklearn 机器学习 邮件文本分类 加载邮件数据
  • 防御保护16
  • Redis集群设计实战:从90%缓存命中率看高并发系统优化
  • Rust 语法基础教程
  • AI应用安全 - Prompt注入攻击
  • [1Prompt1Story] 滑动窗口机制 | 图像生成管线 | VAE变分自编码器 | UNet去噪神经网络
  • 【LeetCode题解】LeetCode 35. 搜索插入位置
  • Dify实战应用指南(上传需求稿生成测试用例)
  • Jenkins常见问题及解决方法
  • STM32 延时函数详解
  • 343整数拆分
  • 后量子密码算法ML-DSA介绍及开源代码实现
  • 【Qt开发】常用控件(四)
  • 算法提升之树上问题-(tarjan求LCA)
  • 基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
  • MySQL 配置性能优化赛技术文章
  • Win10、Win11电脑之间无法Ping通解决办法
  • 设计模式之【快速通道模式】,享受VIP的待遇
  • Python - 100天从新手到大师:第十一天常用数据结构之字符串