arkanzasfeziii/Aegis
GitHub: arkanzasfeziii/Aegis
Aegis 是一个攻击性网络框架,将扫描、枚举、凭证攻击、横向移动和 C2 通道串联为完整的攻击路径模拟链路。
Stars: 0 | Forks: 0
# Aegis — 攻击性网络攻击框架
## 威胁模型
企业网络从来不是扁平的。它是一个由未打补丁的遗留服务、配置错误的协议以及被忽视的默认设置组成的生态系统——每一个都是垫脚石。
Aegis 模拟了这样一种攻击者:从边界内部的立足点开始,有条不紊地将协议暴露转化为访问权限:
| 阶段 | 失败之处 | 攻击者行为 |
|---|---|---|
| **发现** | 防火墙规则过于宽松的内部子网上的开放端口 | 对 /24 网段进行带 banner grabbing 的 TCP 扫描 |
| **枚举** | Windows 2003 迁移后从未禁用的 SMB 空会话 | 枚举共享,搜寻敏感文件名,检测签名是否禁用 |
| **枚举** | AD 域控制器上保留启用的 LDAP 匿名绑定 | 导出所有用户、组、Domain Admins——包括存储在描述中的密码 |
| **凭证访问** | 部署时未启用身份验证的 Redis、Elasticsearch、MongoDB、Memcached | 命令执行,数据提取,全密钥空间导出 |
| **横向移动** | 密码薄弱的服务账户,工作负载之间没有网络隔离 | PSExec 风格的 SCMR 服务创建;在 Linux 主机上执行 SSH |
| **数据窃取** | 从未受监控的 DNS 出口;与正常流量无法区分的 HTTP beacon | 通过 DNS 子域标签进行 base32 编码的数据;位于 User-Agent 标头中的 payload |
| **OT/IoT** | 在扁平网络中以默认设置运行的 Modbus/TCP、MQTT 和 BACnet | 寄存器读取、主题订阅、设备发现 |
**范围:** 授权的红蓝对抗演练和针对企业环境的攻击者模拟,其目标是在真正的攻击者之前识别出攻击路径。
## 为什么存在
企业网络积累了协议债务。扫描类别中的每个工具都会识别出开放的端口。它们都没有回答这个关键问题:*“如果攻击者位于此处,接下来会发生什么?”*
Aegis 串联起了答案:
- 端口扫描成为特定协议枚举的目标列表
- 匿名 LDAP 绑定成为具有 Domain Admin 成员身份的完整用户名单
- 未经身份验证的 Redis 实例成为无需触及凭证存储的横向移动
- 成功的凭证成为 PSExec shell,进而成为通过 DNS 的 C2 通道
该框架围绕 `EngagementContext` 构建——这是一个共享状态对象,它积累跨每个模块发现的开放端口、有效凭证和数据窃取成果,因此发现的漏洞会不断叠加,而不是孤立地存在于脱节的报告部分中。
## 功能
### 网络发现与指纹识别
- 跨前 50 个端口的并发 TCP 端口扫描器,具有可配置的线程池
- CIDR 扩展——将 `/24` 块作为单个目标表达式进行扫描
- 通过正则表达式进行 banner grabbing 和版本提取:SSH、HTTP、FTP、SMTP、Redis、MySQL
- 服务指纹识别,在决定接下来触发哪个模块之前识别正在运行的内容
### 协议枚举
| 协议 | Aegis 测试内容 |
|---|---|
| **SMB** | 空会话身份验证 · 共享枚举 · 敏感文件名搜寻(passwords、backup、private) · SMB 签名禁用检测 |
| **LDAP** | 匿名绑定可行性 · 完整用户/组导出 · 描述字段中的 `password` 检测 · Domain Admin 组成员身份 |
| **DNS** | 针对所有 NS 记录的区域传送 (AXFR) · 跨字典的子域暴力破解 |
| **SNMP** | 社区字符串暴力破解 · 完整的 OID 遍历 (sysDescr, ifTable, hrSWInstalled, hrStorageTable) |
### 凭证攻击
- 通过 Paramiko 进行 SSH 密码喷射(通过可配置的延迟进行限速)
- 通过 Impacket 进行 SMB 身份验证喷射
- FTP 匿名登录检测
- 未经身份验证的服务访问:Redis (`INFO` 命令)、Elasticsearch (`/_cat/indices`)、MongoDB (wire protocol)、Memcached (`stats` 命令)
- 跨 admin endpoint 的 HTTP 面板默认凭证测试
### 横向移动
- 通过 SCMR 服务创建进行 SMB 横向移动(PSExec 风格)——创建临时服务,执行命令,从 `C$` 读取输出,移除服务
- 在已发现的主机间重用凭证的 SSH 命令执行
### 命令与控制 — 数据外发通道
- **DNS 隧道:** 数据被编码为 base32,分块为 DNS 子域标签,通过标准 DNS 查询外发——绕过 HTTP 层代理和 DLP 设备
- **HTTP beacon:** 嵌入在 `User-Agent` 标头中的侦察数据——融入常见的 HTTPS 流量模式
### OT / IoT 覆盖范围
- MQTT:订阅 `#` 通配符主题——捕获跨 broker 的所有已发布消息
- Modbus/TCP:保持寄存器读取 (FC 0x03)——无需身份验证即可读取 PLC 过程数据
- BACnet:Who-Is 广播发现——枚举楼宇自动化设备
- Telnet:在发现的端口 23 上进行默认凭证测试
- Web 管理面板:跨 `/admin`、`/login`、`/management` endpoint 的默认凭证喷射
## 架构
```
Targets (IP · CIDR · hostname list)
│
▼
EngagementContext
┌─────────────────────────────────────┐
│ targets · ports · threads │
│ open_ports · credentials · loot │
│ stealth mode · delay │
└─────────────────────────────────────┘
│
┌──────┼──────┐
▼ ▼ ▼
ScanModule → EnumModule → CredAttackModule
TCP sweep SMB/LDAP/ spray + default
banner grab DNS/SNMP unauthenticated
│
▼
LateralModule → TunnelModule → IoTModule
PSExec/SSH DNS C2 MQTT/Modbus
exec chains HTTP beacon BACnet/Telnet
│
▼
JSON Report
(loot · creds · open_ports · severity)
```
每个模块都从 `EngagementContext` 读取数据并写入数据。扫描结果为枚举目标提供输入;凭证成功为横向移动目标提供输入。没有任何东西是孤立的。
## 攻击流程
1. **目标扩展** — CIDR 表示法扩展为单独的主机列表;`--targets` 接受混合的 IP、CIDR 和主机名输入
2. **并发 TCP 扫描** — ThreadPoolExecutor 使用可配置的线程数扫描前 50 个端口;开放的端口存储在上下文中
3. **Banner 获取** — 在每个开放端口上进行原始 socket banner grabbing;通过正则表达式模式提取版本字符串
4. **协议枚举** — ScanModule 结果驱动 EnumModule:SMB 主机进行空会话测试;LDAP 端口触发匿名绑定;DNS 端口进行区域传送尝试;SNMP 端口 161 进行社区字符串暴力破解
5. **凭证攻击** — 所有识别出的服务都测试默认或弱凭证;成功的结果存储在 `EngagementContext.credentials` 中
6. **横向链** — 来自 CredAttackModule 的有效 SSH/SMB 凭证直接传递给 LateralModule;创建 PSExec 服务,执行命令,检索输出,移除服务
7. **数据外发** — 发现的成果被进行 base32 编码,并作为 DNS 子域查询传输到由操作者控制的解析器;在过滤 DNS 的环境中提供 HTTP beacon 选项
8. **OT/IoT 扫描** — MQTT broker 订阅、Modbus 寄存器读取、BACnet 设备发现针对识别出的 OT 范围主机运行
9. **报告** — `--output report.json` 生成结构化的结果,其中包含每个发现的模块、操作、状态、严重性和说明
## 用法
```
# 安装依赖
pip install -r requirements.txt
# TCP 扫描子网,识别开放服务
python aegis.py --targets 192.168.1.0/24 --modules scan
# 针对 domain controller 进行完整协议枚举
python aegis.py --targets 10.0.0.5 --modules enum --domain corp.local
# 对已发现的主机进行凭证攻击
python aegis.py --targets 10.0.0.0/24 --modules cred
# 使用特定凭证通过 SMB 进行 Password spray
python aegis.py --targets 10.0.0.5 --modules cred --spray-user jsmith --spray-pass "Summer2024!"
# 利用收集到的凭证进行横向移动
python aegis.py --targets 10.0.0.8 --modules lateral --username svc-backup --password "found-cred"
# 完整攻击链 — scan → enum → cred → lateral
python aegis.py --targets 10.0.0.0/24 --modules all --domain corp.local --output engagement.json
# 非交互模式(CI/pipeline 使用)
python aegis.py --targets 10.0.0.0/24 --modules all --yes --output results.json
```
## 输出
```
13:41:01 [INFO] [Scan] Expanding CIDR 10.0.0.0/24 → 254 hosts
13:41:02 [OK] [Scan] OPEN 10.0.0.5:445 Windows Server 2019 SMB
13:41:02 [OK] [Scan] OPEN 10.0.0.5:389 Microsoft LDAP
13:41:02 [OK] [Scan] OPEN 10.0.0.8:6379 Redis 6.2.1
13:41:02 [OK] [Scan] OPEN 10.0.0.12:22 OpenSSH_8.9
13:41:03 [CRIT] [Enum/SMB] Null session authenticated on 10.0.0.5:445
13:41:03 [CRIT] [Enum/SMB] Shares: ADMIN$, C$, Users, Backups, IT-Archive
13:41:03 [CRIT] [Enum/SMB] Sensitive file: \\10.0.0.5\Backups\db_passwords.txt
13:41:03 [CRIT] [Enum/SMB] SMB signing DISABLED — relay attacks feasible
13:41:04 [CRIT] [Enum/LDAP] Anonymous bind accepted on 10.0.0.5:389
13:41:04 [INFO] [Enum/LDAP] 312 user objects enumerated
13:41:04 [CRIT] [Enum/LDAP] Domain Admins: Administrator, svc-backup, john.admin
13:41:04 [CRIT] [Enum/LDAP] Password in description → svc-db: "Temp@1234 reset later"
13:41:05 [CRIT] [Cred/Redis] Unauthenticated access confirmed — 10.0.0.8:6379
13:41:05 [INFO] [Cred/Redis] Redis version: 6.2.1 | keyspace: db0 → 1,847 keys
13:41:06 [CRIT] [Cred/SSH] Valid credential → 10.0.0.12:22 svc-backup:Temp@1234
13:41:07 [CRIT] [Lateral/SSH] Command exec success on 10.0.0.12 as svc-backup
13:41:07 [INFO] [Tunnel/DNS] Exfiltrating 2.1KB via DNS subdomain encoding
[✓] Engagement complete — 4 critical findings | report: engagement.json
```
## MITRE ATT&CK 覆盖范围
| 技术 | ID | 模块 |
|---|---|---|
| 网络服务发现 | T1046 | ScanModule |
| 网络共享发现 | T1135 | EnumModule / SMB |
| 账户发现:域账户 | T1087.002 | EnumModule / LDAP |
| OS 凭证转储:LSASS / 凭证存储 | T1003 | CredAttackModule |
| 暴力破解:密码喷射 | T1110.003 | CredAttackModule |
| 远程服务:SMB/Windows 管理共享 | T1021.002 | LateralModule |
| 远程服务:SSH | T1021.004 | LateralModule |
| 通过替代协议外发:DNS | T1048.003 | TunnelModule |
| 应用层协议:Web 协议 | T1071.001 | TunnelModule / HTTP |
| 利用面向公众的应用 | T1190 | CredAttackModule (未经身份验证的服务) |
**战术:** TA0007 发现 · TA0006 凭证访问 · TA0008 横向移动 · TA0011 命令与控制 · TA0010 数据外发
## 涵盖的 CWE 演练
| CWE | 描述 | 位置 |
|---|---|---|
| CWE-521 | 弱密码要求 | SSH/SMB 喷射目标 |
| CWE-306 | 关键功能缺失身份验证 | Redis、Elasticsearch、MongoDB、Memcached |
| CWE-200 | 向未经授权的参与者暴露敏感信息 | LDAP 匿名绑定、SMB 空会话 |
| CWE-284 | 不当访问控制 | 共享枚举、未经身份验证的服务访问 |
| CWE-522 | 凭证保护不足 | LDAP 描述字段中的密码 |
## 法律声明
Aegis 专门为已获得资产所有者明确书面许可的授权渗透测试、红蓝对抗演练和安全评估活动而设计。在大多数司法管辖区,未经授权针对您不拥有或无权测试的系统进行使用是非法的。作者对滥用不承担任何责任。
标签:PE 加载器, PKINIT, 云存储安全, 工控安全, 插件系统, 模拟器, 横向移动, 物联网安全, 编程规范, 网络扫描, 逆向工具