wong-hau-pepelu/DRaiG
GitHub: wong-hau-pepelu/DRaiG
DRaiG 是一款基于 Python 的 NetFlow CSV 交互式威胁狩猎工具,通过分析流量行为模式快速生成可疑 IP 的完整活动报告。
Stars: 0 | Forks: 0
# DRaiG
DRaiG 是一个小巧、略显单调,但极其有用的 NetFlow 调查工具。我开发它是为了满足这样一种威胁狩猎场景:当你已经掌握了一个可疑的 IP,现在需要弄清楚它这一天到底干了些什么。你只需将它指向一个 NetFlow CSV 文件,在 `flow>` 提示符下输入目标 IP,它就会为你提供关于该主机的完整行为分析报告;或者,如果你宁愿什么也不信,它也会提供隐藏在任何发现背后的具体数据行,这样你就可以去核实工具的作业,而不是盲信它的结论。脚本中没有硬编码任何关于特定目标的信息,因此你可以对同一个抓包文件进行一次又一次的审问,而不必每次都付出重新读取文件的时间代价。
它的核心在于,抓包数据中隐藏着一个故事,而这个故事大部分存在于流量的形态之中,而不是孤立在某一行数据里。如果一个机器悄悄地向外发送的数据远多于接收回来的数据,同时又有大量琐碎的连接不断拨入,那么它通常不是什么正在查收邮件的礼貌客户端;更常见的情况是,它是一个服务器,正在向下面的受害者集群分发 payload 和任务指令。DRaiG 的存在就是为了快速呈现这种形态,从而让你把真正的脑力用在有趣的部分。
## 当你输入一个 IP 时它会做什么
只需交给 DRaiG 一个 IP,它就会从头到尾运行完整的报告:包含出入流量比率的概览,并初步猜测你看到的是一个客户端、一个服务器,还是更嘈杂的设备;协议分布;标记了统计异常值的顶级对等节点;客户端与服务器的角色划分;运维者枢纽部分;安静的低频通信节点;端口情况;包含 SYN 扫描的 TCP 标志分析;带有非常保守的时区猜测的逐小时活动图表;标记了流量峰值的每日时间线;针对每个对等节点的信标检查;最后是看起来像受害者的入站重型通信节点。我知道这部分内容很多,但它们是按照我实际阅读抓包数据的顺序打印出来的,所以一旦情况明朗,你随时可以跳出阅读。
## 当你添加过滤器时它会做什么
当你添加 `--port`、`--peer`、`--query` 或 `--direction` 时,DRaiG 就会切换到查询模式,提取具体的数据行而不是输出摘要。它还会打印出用于获取这些结果的确切 pandas 命令,一方面是为了让结果可复现,另一方面是因为我总是忘记自己的过滤语法,希望工具能直接把语法重新教给我。你可以完全不填 IP,直接按端口或对等节点对整个抓包记录进行切片,当你想要获取文件中所有的 SSH 流量而不是单个主机的流量时,这非常棒。
## 快速入门
```
python draig.py flows.csv
```
然后在提示符下输入:
```
flow> 198.51.100.23 # full report on an IP
flow> 198.51.100.23 --port 22 # just the SSH rows for that IP
flow> --port 443 # every HTTPS flow in the capture
flow> --peer 203.0.113.10 -n 30 # all flows between target and this peer
flow> -h # help
flow> q # quit
```
目标 IP 本身通常来源于威胁情报源,在 ThreatFox 上进行 `ip:port` IOC 查找是挑选目标 IP 的一种可靠方式,最好选择那些远离庞大云服务 ASN 的地址,这样你才能获得一些真正值得研究的流量规模。这些示例中的每个地址都来自 RFC 5737 文档规定的地址段,因此它们都不会指向真实的机器,你可以放心地复制粘贴,而不至于意外地将工具对准你的邻居。
## 标记
在整个报告中,你会看到散布在方括号中的小标签。它们的存在是为了让你的视线无需阅读每一行就能直接跳转到关键信息:
| 标记 | 含义 |
|--------|---------|
| `[!]` | 统计异常(超出了比率或 z-score 阈值) |
| `[PIVOT]` | 对等节点与目标共享相同的 /16 网段,因此可能是兄弟基础设施 |
| `[C2]` | 行为 C2 指标(信标活动、持久化、已知的框架端口) |
| `[OP]` | 运维者或管理端指纹(SSH、Telnet、RDP、ClickHouse、DB) |
## 它所期望的 CSV 格式
DRaiG 读取扁平的 NetFlow CSV 文件,并在缺少列时极力避免崩溃。它最喜欢的列包括:
```
start_time, src_ip_addr, src_cc, dst_ip_addr, dst_cc, proto,
src_port, dst_port, tcp_flags, num_pkts, num_octets,
sample_algo, sample_interval
```
如果你的文件中还包含 `client_ip_addr` 和 `server_ip_addr`,DRaiG 会使用它们来进行角色划分,这是最准确的方法。如果缺少这些列(在很多真实的抓包记录中确实如此),它会悄悄地退回到推断角色的方式,并坦率地告诉你它是这么做的,而不是假装自己一直都知道。只要存在国家代码列,它们就会被用于数据丰富化。
## 我在这个版本中所做的更改
这是最近投入精力最多的地方,主要是因为 DRaiG 的第一版假设输入的文件比我磁盘上实际落地的文件要规整得多。
### 采样现在被正确计算了
收集器为了节省空间,通常喜欢每 N 个数据包只保留一个;如果你忽视这一点,你最终就像是在拿一整个苹果和一个切得极薄的苹果片做比较。当一个流携带的 sample_interval 为 4096 时,那一行数据实际上代表了大约四千个流,因此原始的字节和包数看起来会低得离谱。DRaiG 现在会在加载数据时计算出乘数,并据此构建有效的字节和数据包列,然后在所有涉及流量的地方使用这些有效数值,同时刻意将时间检查保留在原始数据行上进行。这样分开处理的原因很简单:采样会丢弃整个流,你无法从满是漏洞的记录中重建信标的心跳。
### 在必要时它会猜测客户端与服务器角色
许多抓包记录出现时并不包含权威的客户端和服务器列,因此 DRaiG 会根据现有的任何证据来推断角色。孤立的 SYN 数据包从客户端发往服务器,因此发送它的那一端就是客户端,这个信号具有绝对的优先权。当没有 SYN 可以依赖时,它会退而求其次根据端口进行判断,因为知名的低端口几乎总是属于服务,而临时端口范围内的那个大端口号通常属于拨入方。这是一种启发式方法,而非金科玉律,但它与现实的吻合度已经足够高,足以发挥其实用价值,并且对于那些无法自信地判定角色的少数流,它也保持了诚实。
### 运维者枢纽有了专门的部分
受害者总是喧闹的,而运维者总是安静的,这种不对称性基本上就是整个博弈的核心。这一部分提取了目标机器连接过的每一个位于管理或分析端口上的主机,比如你的 SSH、Telnet、RDP,以及 ClickHouse 和数据库端口,因为一个出站的管理会话更有可能是一个运维者的跳板,而不是某个受害节点。这些正是你接下来想要输入到 VirusTotal 和 Shodan 中进行查询的 IP,因此工具将它们集中在一个地方,而不是让你自己四处翻找。
### 低频通信节点也被呈现出来
因为受害者群体往往会凭借庞大的流量规模掩盖一切,那些有趣的、具有运维者特征的连接通常隐藏在长尾部分,每个连接只有寥寥几个流。DRaiG 会列出这些安静的对等节点,并标记出任何触及过管理端口的节点,这为你留下了一个简短的、符合人类阅读习惯的待查运维者指纹候选列表,而不是直接面对整个数据洪流。
### TCP 标志带有健康警告
NetFlow 的标志值是被压缩进那一个流中的所有数据包中出现的所有标志的并集,这意味着一旦涉及多个数据包,像 18 这样的值就不再自动代表纯粹的 SYN 加 ACK 了。报告会明确地说明这一点,并单独指出那些不知为何携带了多个数据包的纯 SYN 流,因为那通常意味着 SYN 重传且握手从未完成,这委婉地说明了远端要么被过滤了,要么已经死机,或者根本就不存在。
## 各部分如何与实际狩猎相对应
大致上符合我的工作顺序,这也恰好是报告打印的顺序:
1. 浏览端口部分,以查看主机暴露了什么以及它尝试连接什么。
2. 查看信标和受害者情况,以评估受害者池规模并摸索任何 C2 的节奏。
3. 扫描低频通信节点,寻找潜在的运维者候选者。
4. 从运维者枢纽部分提取 SSH、Telnet 和 ClickHouse 的跳板节点。
5. 将这些枢纽节点输入到 VirusTotal、Shodan 和 ThreatFox 中进行丰富化。
6. 根据证书重用、被动 DNS 和 /16 集群构建基础设施映射。
## 一些诚实的局限性
时区猜测只是一种粗略的启发式方法,报告也将其标记为低可信度,因此请将其视为线索而非事实。基于被采样的对等节点得出的信标判定会被标记为不可靠,因为它们的间隔被打破了。DRaiG 永远只读取元数据,从不触碰 payload,它自身也不进行任何外部连接,这完全是刻意为之的。一切都在本地针对单一的 CSV 文件运行,所以请自带抓包数据。
## 环境要求
Python 3.9 或更高版本,外加 pandas 和 numpy。
```
pip install pandas numpy
```
这就是全部内容了。如果它能为你省下十分钟盯着电子表格斗鸡眼的时间,它就完成了它的使命。
标签:IP 地址批量处理, NetFlow, 安全研究社区, 网络安全, 逆向工具, 隐私保护