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, 云存储安全, 工控安全, 插件系统, 模拟器, 横向移动, 物联网安全, 编程规范, 网络扫描, 逆向工具