简介
Windows 下的恶意软件一般包含以下功能
- Payload 存储、加密、混淆、执行
- PE 信息伪造、进程信息伪造
- 沙箱检测、虚拟环境检测
- 反调试、杀软绕过
- EDR 绕过
Payload 存储
目前有以下存储方式
- PE 文件内部
- .data .rdata 段
- .text 段
- .rsrc 段
- 本地 Payload 分离
- 可以起一个伪装的名称,config.xml、resources.pak…
- 远程 Payload
- Windows 注册表
三种方法各有优劣,应根据实际应用场景进行选择。例如:
- 在权限维持场景中,可以优先考虑 Payload 分离;
- 在社工钓鱼的场景中,可以优先考虑远程文件的方式,这样可以在钓鱼行动被发现后更改远程 Payload 内容;
- 在多层内网环境或者存在离线环境的情况下,就优先考虑在 PE 文件内部存储 Payload,这样会让蓝队不那么容易去追踪感染链。
PE 文件内部存储
- .data 段主要包含初始化的全局和静态变量,可读可写;.rdata 段存放常量,只读。一个较小的程序需要初始化一个较大的变量,这种行为看起来多少会有些奇怪。
- .text 段具有可执行权限,存储在其中的数据可以直接执行,因此这个段需要接受的审查会更严格,如果 Payload 较小(小于 10 字节),那么放在此段效果会很好。
- .rsrc 段主要放置资源文件,实际情况下大部分的二进制文件都会在此存放数据,所以 Payload 可以未造成图标或者其他文件存储在这里。
Payload 分离
Payload 分离,需要考虑的问题就是如何伪装,可以根据普通应用程序的内容来模仿。
- Windows 注册表
- 游戏资源文件
- 主题文件
- chm 手册
- pak、v8 文件(主要是一些基于浏览器打包的应用程序)
- ui 文件
- dll 文件
远程 Payload
本质上也是对 Payload 进行分离,所以需要考虑的内容也是如何伪装
- 图标资源
- API 请求
- …
Payload 加密
- XOR
- RC4
- AES
XOR、RC4 加密已经无法绕过 Windows Defender 了,建议使用 AES 或者其他强加密方法。
Payload 混淆
- IPv4/IPv6
- MAC
- UUID
三种方法可以结合应用场景进行选择。例如:Payload 分离的存储方式可以搭配 MAC 混淆,将 Payload 存储在 xml 等文件中。
Payload 执行
- 本地/远程 DLL 加载
- 本地/远程进程执行
- 本地/远程线程创建
- 本地/远程线程劫持
- APC 注入
- 回调代码执行
- 本地/远程映射注入
- 本地/远程函数篡改