0x00 这一周的推送主要介绍的都是一些工具
0x01 nim语言轻量化C2
- nimc2 是使用nim编写的C2框架,目前来说作者更新的很快
- 生成的implant免杀效果还是很好的
- Ref:https://github.com/d4rckh/nimc2/blob/main/README.md
0x02 可注入PE转换工具v1.0版本发布
pe_to_shellcode这款工具原理就是重新复写PE文件DOS头,因为装载器装载PE文件会读取MZ头,这块不能变,剩下的可以进行修改,从第五行开始,定位当前EIP,第六行,ebx为EIP,
sub ebx,9
则表示ebx为ImageBase,然后加一个常量,最终跳转到入口点。123456789101112"\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
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如下代码即可。1xor rax, rax; ret这篇文章涉及到好多内核的知识,看的不深入。