
(以前称为 proxy2's malleable_redirector 插件)
让我们提高 C2 重定向器的 IR 弹性门槛,好吗?

红队业务已经看到了 若干 不同 出色 的想法,关于如何对抗事件响应者并误导他们,同时提供有抵抗力的 C2 重定向器网络。
这项工作将许多这些出色想法结合成一个轻量级工具,模仿 Apache2 作为简单 HTTP(S) 反向代理的本质。
结合对 Malleable C2 配置文件的理解、对恶意 IP 地址池的了解以及轻松添加新检查和误路由逻辑的灵活性——结果产生了一个针对 IR 检查的巧妙驱避剂。

如果任何无效入站数据包到达 RedWarden——你可以 redirect、reset 或直接 proxy 将其转走!
此程序充当 HTTP/HTTPS 反向代理,对入站 C2 HTTP 请求施加了几项限制,选择哪些数据包定向到 Teamserver,哪些丢弃,类似于 Apache2 的 mod_rewrite 中强制规定的 .htaccess 文件限制。
RedWarden 旨在解决 C2 重定向器层上的 IR/AV/EDRs/Sandbox 规避问题。它旨在取代为此目的使用的经典 Apache2 + mod_rewrite 设置。
特性:
RedWarden 接收 Malleable C2 配置文件和 teamserver 的 hostname:port 作为输入。然后解析提供的 malleable 配置文件部分以理解契约,并仅让满足契约的入站请求通过,同时误导其他请求。
诸如 http-stager、http-get、http-post 及其对应的 URI、头部、前置/后置模式、User-Agent 等部分,都用于区分合法 Beacon 的请求与无关的互联网噪声或 IR/AV/EDRs 出站数据包。
该程序受益于来自以下位置的出色已知恶意 IP 范围: curi0usJack 和其他人: https://gist.github.com/curi0usJack/971385e8334e189d93a6cb4671238b10
使用 IP 地址黑名单以及通过反向 IP DNS 查询和 HTTP 头部检查进行已知恶意关键字查找,带来了可靠性,从而显著提高了重定向器对想要检查攻击者基础设施的未授权对端的弹性。
无效数据包可能根据三种策略误路由:
此配置在配置文件中强制指定:```yaml
drop_action: redirect
以下示例展示将 `redirect` 目标设为 `https://googole.com` 的结果:

请谨慎使用,注意安全。
### 环境要求
该程序仅能在 Linux 系统上运行,因为它使用 fork 创建多个进程。
此外,系统需预装 `openssl` 命令,因为程序将使用它生成 SSL 证书。
最后,使用以下命令轻松安装所有 Python3 PIP 依赖:```shell
bash $ sudo pip3 install -r requirements.txt
RedWarden 的最小 config.yaml 配置文件可能包含:```yaml port:
profile: jquery-c2.3.14.profile
ssl_cacert: /etc/letsencrypt/live/attacker.com/fullchain.pem ssl_cakey: /etc/letsencrypt/live/attacker.com/privkey.pem
teamserver_url:
drop_action: reset
然后,可以通过提供配置文件的路径来启动程序:```shell
bash$ sudo python3 RedWarden.py -c config.yaml
[INFO] 19:21:42: Loading 1 plugin...
[INFO] 19:21:42: Plugin "malleable_redirector" has been installed.
[INFO] 19:21:42: Preparing SSL certificates and keys for https traffic interception...
[INFO] 19:21:42: Using provided CA key file: ca-cert/ca.key
[INFO] 19:21:42: Using provided CA certificate file: ca-cert/ca.crt
[INFO] 19:21:42: Using provided Certificate key: ca-cert/cert.key
[INFO] 19:21:42: Serving http proxy on: 0.0.0.0, port: 80...
[INFO] 19:21:42: Serving https proxy on: 0.0.0.0, port: 443...
[INFO] 19:21:42: [REQUEST] GET /jquery-3.3.1.min.js
[INFO] 19:21:42: == Valid malleable http-get request inbound.
[INFO] 19:21:42: Plugin redirected request from [code.jquery.com] to [1.2.3.4:8080]
[INFO] 19:21:42: [RESPONSE] HTTP 200 OK, length: 5543
[INFO] 19:21:45: [REQUEST] GET /jquery-3.3.1.min.js
[INFO] 19:21:45: == Valid malleable http-get request inbound.
[INFO] 19:21:45: Plugin redirected request from [code.jquery.com] to [1.2.3.4:8080]
[INFO] 19:21:45: [RESPONSE] HTTP 200 OK, length: 5543
[INFO] 19:21:46: [REQUEST] GET /
[...]
[ERROR] 19:24:46: [DROP, reason:1] inbound User-Agent differs from the one defined in C2 profile.
[...]
[INFO] 19:24:46: [RESPONSE] HTTP 301 Moved Permanently, length: 212
[INFO] 19:24:48: [REQUEST] GET /jquery-3.3.1.min.js
[INFO] 19:24:48: == Valid malleable http-get request inbound.
[INFO] 19:24:48: Plugin redirected request from [code.jquery.com] to [1.2.3.4:8080]
[...]
上述输出中包含一行,指出存在一个未经授权的、不符合我们C2配置文件的入站请求,该请求因提供的User-Agent字符串不兼容而被丢弃:``` [...] [DROP, reason:1] inbound User-Agent differs from the one defined in C2 profile. [...]
## 使用场景
### 对Beacon流量发起方施加IP地理位置限制
你已出色地完成了钓鱼前侦察和开源情报收集工作。现在你掌握了目标所在的位置,并对流量应来源于哪些地域有了一定线索,或者至少能够识别出完全无关的流量。
如何在重定向器上对Beacon请求施加IP地理位置限制?
RedWarden 来帮忙!
假设你只想接受源自波兰(欧洲)的流量。
你的钓鱼前侦察/开源情报结果表明:
- `89.64.64.150` 是你某个目标的合法IP,来自波兰
- `59.99.140.76` 这个IP则并非如此,它以常规的网络噪声数据包到达了你的系统。