filippostz/APT-SimulActor
GitHub: filippostz/APT-SimulActor
基于 AutoIt 的红队对抗模拟与 EDR 检测验证库,提供映射 MITRE ATT&CK 的可复用攻击原语。
Stars: 5 | Forks: 2
# APT-SimulActor
APT-SimulActor 是一个面向红队操作员和 EDR 验证工程师的 AutoIt 库。它提供了一系列可复用的、映射到 [MITRE ATT&CK](https://attack.mitre.org/) 的原语,用于在 Windows 系统上模拟对手行为,旨在验证检测覆盖率并在授权环境中测试防御控制。
这些函数按**技术原语**(即每个函数所触及的 Windows 子系统或机制)进行分组,而不是按 MITRE 战术分组,因为许多技术跨越了多个战术。MITRE 战术和技术元数据记录在每个函数的内联注释及下方的参考表格中。
## 前置条件
- **AutoIt v3** — [下载](https://www.autoitscript.com/site/autoit/downloads/)
## 使用方法
在任何场景脚本的顶部包含入口点。所有模块和全局变量都会自动加载。
```
#include "APT-SimulActor.au3"
HandleRelocation()
If IsInternetReachable() Then
If GetLoginCount(GetCurrentUser()) > 2 Then
If IsRunningFromDir("C:\WINDOWS\TEMP") Then
SetRunKeyPersistence()
DownloadFile($g_sPsToolsUrl, "certutil")
Else
MoveAndExec("C:\WINDOWS\TEMP")
EndIf
EndIf
EndIf
```
## 函数参考
### Core.au3 — 通用辅助函数
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `ExecCommand($sCommand)` | 隐藏运行 shell 命令并返回合并的 stdout/stderr | — | — |
| `GenerateFilename($sExt)` | 生成随机的 8 字符字母数字文件名;默认扩展名为 `.exe` | — | — |
| `PauseSeconds($iSeconds)` | 阻塞执行 N 秒 | — | — |
| `ShowMessage($sText)` | 显示模式消息框 | — | — |
| `ShowPopup()` | 通过 PowerShell 显示 Windows 窗体消息框 | — | — |
### Registry.au3 — 注册表操作
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `SetRunKeyPersistence()` | 将当前可执行文件添加到 `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` | Persistence | T1547.001 |
| `SearchRegistry($sQuery)` | 通过 `reg query` 在 HKCU 中搜索字符串;如果失败则回退到完整的配置单元导出 | Credential Access | T1552.002 |
### FileSystem.au3 — 文件和目录操作
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `ReadFile($sFilePath)` | 读取文件并将其内容作为字符串返回 | Collection | T1005 |
| `LogToFile($sData, $sFilePath)` | 将数据缓冲区追加到文件中 | Collection | T1005 |
| `MutateFileHash($sFilePath)` | 向文件追加一个字节以改变其哈希值,且不影响执行 | Defense Evasion | T1027 |
| `GetDesktopFiles()` | 返回以换行符分隔的当前用户桌面文件列表 | Discovery | T1083 |
| `EnumerateShares()` | 枚举已映射的网络驱动器并读取其文件内容 | Collection | T1039 |
| `FindFiles($sDir, $sPattern)` | 递归查找匹配模式的文件;返回 `[0]=数量, [1..n]=路径` | Discovery | T1083 |
| `SearchFileContent($sDir, $sPattern, $sKeyword)` | 查找匹配模式且内容包含给定关键字的文件 | Collection | T1005 |
| `CaptureScreenshot($sFilePath)` | 将全屏截图捕获到文件 | Collection | T1113 |
| `GetBrowserCredentialFiles()` | 定位 Chrome、Edge 和 Firefox 的凭据存储文件 | Credential Access | T1555.003 |
| `EncryptFiles($sPassword, $sTarget)` | AES-256 加密目录中的所有常规文件或单个文件 | Impact | T1486 |
| `DecryptFiles($sPassword, $sFolder)` | AES-256 解密目录中的所有 `.crypt` 文件 | Impact | T1486 |
| `Unzip($sSource, $sDestination)` | 通过 PowerShell `Expand-Archive` 解压 zip 存档 | — | — |
### Process.au3 — 进程生成、计划任务和重定位协议
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `HandleRelocation()` | 在入口点调用 — 如果由 `MoveAndExec`/`CopyAndExec` 启动,则终止并选择性地删除父实例 | Defense Evasion | T1036 |
| `IsRunningFromDir($sFolder)` | 如果脚本当前正从指定文件夹执行,则返回 `True` | Defense Evasion | T1036 |
| `MoveAndExec($sDestDir, $sNewName)` | 将可执行文件移动到新位置,改变其哈希值,重新执行,并删除原始文件 | Defense Evasion | T1036 |
| `CopyAndExec($sDestDir, $sNewName)` | 将可执行文件复制到新位置,改变其哈希值,并在保留原始文件的同时重新执行 | Defense Evasion | T1036 |
| `RunElevated($sPsCommand)` | 通过 UAC 提示在提升的进程中运行 PowerShell 命令 | Execution, Privilege Escalation | T1059.001, T1548.002 |
| `ExecViaWMI($sCommand)` | 通过 WMI 进程创建执行命令 — 父进程是 WMI,而不是调用可执行文件 | Execution | T1047 |
| `ExecViaMshta($sUrl)` | 通过 `mshta.exe` 执行远程 HTA 脚本 (LOLBin) | Execution | T1218.005 |
| `CreateScheduledTask($sExePath)` | 创建一个每分钟运行指定可执行程序的计划任务 | Persistence | T1053.005 |
| `DeleteScheduledTask($sTaskName)` | 按名称删除计划任务 | Persistence | T1053.005 |
| `AddToStartupFolder($sExePath)` | 将可执行文件复制到当前用户的 Startup 文件夹 | Persistence | T1547.001 |
| `CreateService($sName, $sExePath)` | 创建并启动 Windows 服务以实现持久化执行 | Persistence | T1543.003 |
| `Mimikatz()` | 通过 Empire PowerShell 模块调用 Mimikatz 凭据转储 | Credential Access | T1003.001 |
### Network.au3 — 网络 I/O
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `IsInternetReachable()` | 如果外部主机可通过 ICMP 访问,则返回 `True` | Discovery | T1016 |
| `DnsLookup($sAddress)` | 执行 DNS 查找 — 返回输出字符串,如果主机不存在则返回 `0` | Discovery | T1018 |
| `ScanTcpPort($sIp, $iPort)` | 返回给定 TCP 端点的 `"open"` 或 `"closed"` | Discovery | T1046 |
| `ScanSubnet($iPort, $iStartHost, $iStopHost)` | 扫描本地 /24 子网中开放了指定端口的主机;返回 `[0]=数量, [1..n]=IP` | Discovery | T1046 |
| `DownloadFile($sUrl, $sMode, $sFilePath)` | 下载文件 — `$sMode`:`"native"` \| `"curl"` \| `"certutil"` \| `"bits"` | C2 | T1105 |
| `FetchUrl($sUrl)` | 返回远程 HTTP/S 资源的原始内容 | C2 | T1102 |
| `HttpPost($sHost, $sTag, $sPort, $sData)` | HTTP POST 数据到远程监听器 | Exfiltration | T1041 |
| `ReverseShell($sRemoteIp, $iRemotePort)` | 向远程监听器开启一个 PowerShell TCP 反向 shell | Execution, C2 | T1059.001, T1095 |
### System.au3 — 操作系统枚举和沙箱检测
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `GetCurrentUser()` | 以大写形式返回当前用户名 | Discovery | T1033 |
| `IsCurrentUser($sUsername)` | 如果进程以指定用户身份运行,则返回 `True` | Discovery | T1033 |
| `GetLoginCount($sUser)` | 通过 WMI 返回账户的 `NumberOfLogons` 值 | Discovery | T1033 |
| `GetLocalAdmins()` | 枚举本地 Administrators 组的成员 | Discovery | T1069.001 |
| `GetDomainAdmins()` | 返回 Domain Admins 组的成员 | Discovery | T1069.002 |
| `GetSystemInfo()` | 返回完整的 `systeminfo` 输出 | Discovery | T1082 |
| `GetInstalledUpdates()` | 通过 WMI 列出所有已安装的 Windows 更新 | Discovery | T1082 |
| `GetSharedResources()` | 通过 WMI 列出本机暴露的所有共享 | Discovery | T1135 |
| `GetRunningProcesses()` | 返回完整的 `tasklist` 输出 | Discovery | T1057 |
| `GetDomainInfo()` | 通过 `nltest` 返回域信任关系 | Discovery | T1482 |
| `GetWifiPasswords()` | 通过 `netsh` 返回已保存的 Wi-Fi SSID 及其明文密钥 | Credential Access | T1552.001 |
| `DetectSandboxMouse()` | 如果鼠标在 5 秒内移动,则返回 `True`;如果未检测到移动,则退出 | Defense Evasion | T1497.002 |
| `DetectSandboxSleep()` | 如果 `Sleep()` 以真实速度运行,则返回 `True` — 沙箱通常会加速时间以跳过延迟 | Defense Evasion | T1497.003 |
| `DetectVM()` | 如果发现 VMware、VirtualBox、Hyper-V 或 QEMU 痕迹,则返回 `True` | Defense Evasion | T1497.001 |
| `ClearEventLogs()` | 清除 System、Security 和 Application Windows 事件日志 | Defense Evasion | T1070.001 |
### Clipboard.au3 — 剪贴板监控
| 函数 | 描述 | MITRE 战术 | MITRE 技术 |
|---|---|---|---|
| `ClipboardToLog($iTimeout, $sLogPath)` | 轮询剪贴板并将每个新值追加到本地文件 | Collection | T1115 |
| `ClipboardToWeb($sHost, $sTag, $sPort, $iTimeout)` | 轮询剪贴板并将每个新值 POST 到远程监听器 | Collection, Exfiltration | T1115, T1041 |
标签:AI合规, APT模拟, ATT&CK框架, AutoIt, Conpot, DNS 解析, EDR验证, Windows安全, 代码库, 子域名枚举, 安全技术, 安全测试, 恶意行为模拟, 攻击性安全, 攻击模拟, 数据包嗅探, 数据展示, 无线安全, 端点可见性, 系统安全, 红队, 网络信息收集, 网络安全, 隐私保护, 驱动签名利用