Windows 恶意软件开发

简介

Windows 下的恶意软件一般包含以下功能

  • Payload 存储、加密、混淆、执行
  • PE 信息伪造、进程信息伪造
  • 沙箱检测、虚拟环境检测
  • 反调试、杀软绕过
  • EDR 绕过

Payload 存储

目前有以下存储方式

三种方法各有优劣,应根据实际应用场景进行选择。例如:

  • 在权限维持场景中,可以优先考虑 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 注入
  • 回调代码执行
  • 本地/远程映射注入
  • 本地/远程函数篡改