绿盟科技-每周蓝军技术推送(2022.4.30-5.6)学习

0x00 这一周的推送主要介绍的都是一些工具

每周蓝军技术推送(2022.4.30-5.6)

0x01 nim语言轻量化C2

0x02 可注入PE转换工具v1.0版本发布

  • pe_to_shellcode这款工具原理就是重新复写PE文件DOS头,因为装载器装载PE文件会读取MZ头,这块不能变,剩下的可以进行修改,从第五行开始,定位当前EIP,第六行,ebx为EIP,sub ebx,9则表示ebx为ImageBase,然后加一个常量,最终跳转到入口点。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    "\x4D" //dec ebp
    "\x5A" //pop edx
    "\x45" //inc ebp
    "\x52" //push edx
    "\xE8\x00\x00\x00\x00" //call <next_line>
    "\x5B" // pop ebx
    "\x48\x83\xEB\x09" // sub ebx,9
    "\x53" // push ebx (Image Base)
    "\x48\x81\xC3" // add ebx,
    "\x59\x04\x00\x00" // value
    "\xFF\xD3" // call ebx
    "\xc3"; // ret
  • Ref:https://github.com/hasherezade/pe_to_shellcode

0x03 禁用驱动程序签名强制执行技术

  • 作者首先介绍了,在windows10以前的操作系统,禁用驱动程序强制签名是很容易的,只需要将g_CiOptions设置为0即可。

  • 但是在windows10的计算机中,微软启用了基于虚拟化的安全性VBS(Virtualization Based Security)和虚拟机托管程序代码完整性HVCI(Hypervisor Code Integrity),就不可以很简单的修改内核数据了。

  • 所以作者开始寻找在启动VBS的情况下,禁用DSE的方法。

  • 根本原理就是通过Patch禁用DSE,首先作者针对CiCheckPolicyBits下断,并查看栈回溯,发现CiValidateImageHeader这是负责验证我们的驱动程序是否满足签名要求的函数,然后作者尝试加载一个未签名的驱动程序,并查看 CiValidateImageHeader的返回值,发现该函数返回值是一个NTSTATUS值(c0000428),所以作者猜测只需要该函数返回为STATUS_SUCCESS(0)即可。所以只需要寻找一个方法Patch该函数即可。

  • 首先作者将虚拟地址转化为PTE(页目录表项)

  • 作者通过使用暴力搜索特征码的方式最终定位到了CiValidateImageHeader函数地址,然后Patch如下代码即可。

    1
    xor rax, rax; ret
  • 这篇文章涉及到好多内核的知识,看的不深入。