在模拟对抗过程中,“初始访问”阶段的一个关键挑战,就是绕过企业端点上的检测和响应能力 (EDR)。由于商业的c2框架向红队队员提供的是不可修改的shellcode和二进制文件,所以,安全解决方案供应商会提取这些代码的特征(或者成为签名),那么,为了植入这些代码,红队就必须对其特征(静态和行为特征)进行必要的混淆处理。
在这篇文章中,我将介绍以下技术,最终目标是执行恶意shellcode,也称为(shellcode)加载程序:
- Shellcode加密技术
- 降低熵值
- (本地)AV沙箱逃逸技术
- 导入表混淆技术
- 禁用Windows事件跟踪 (ETW)
- 规避常见的恶意API调用模式
- 使用直接系统调用并规避“系统调用标记”
- 删除ntdll.dll中的钩子
- 伪造线程调用堆栈
- beacon的内存加密
- 自定义反射型加载程序
- 利用柔性配置文件配置OpSec
让我们从一个基本且很重要的话题开始,shellcode静态混淆。在我的加载程序中,我利用了XOR或RC4加密算法,因为它们不仅易于实现,而且不会留下太多加密活动的痕迹。如果用AES加密来混淆shellcode的静态特征的话,会在二进制文件的导入地址表中留下加密痕迹,所以,很容易引起人们的怀疑。实际上,这个加载程序的早期版本中专门用于AES解密函数(如CryptDecrypt、CryptHashData、Cryp