srixivas/PcapXray
GitHub: srixivas/PcapXray
一款离线网络取证工具,通过将 PCAP 文件可视化为网络拓扑图来加速流量调查分析过程。
Stars: 1849 | Forks: 290
# PcapXray [](https://github.com/srixivas/PcapXray/actions/workflows/test.yml) [](https://codecov.io/gh/srixivas/PcapXray) [](https://www.defcon.org/html/defcon-27/dc-27-demolabs.html#PcapXray)
```
A Network Forensics Tool - To visualize a Packet Capture offline as a Network Diagram including device identification, highlight important communication and file extraction
```

## PcapXray 设计规范
Wiki 提供了更多帮助。
### 目标:
给定一个 Pcap 文件,绘制一个网络拓扑图,显示网络中的主机、网络流量,突出显示重要流量和 Tor 流量,以及潜在的恶意流量(包括通信中涉及的数据)。
### 问题:
* 鉴于调查初期的卡顿,Pcap 文件的调查需要花费大量时间
* 每一位取证调查员和任何分析网络的人都会面临这个问题
* 位置: https://github.com/srixivas/PcapXray
### 解决方案: 加快调查过程
* 根据 Pcap 文件制作具有以下特征的网络拓扑图
工具亮点:
* 网络拓扑图 – 完整网络的摘要拓扑图
* 信息:
* 包含服务器详细信息的 Web 流量
* Tor 流量
* 潜在的恶意流量
* 报告中从数据包获取的数据 – 设备/流量/Payload
* 设备详细信息
### 工具截图:


### 组件:
* 网络拓扑图
* 设备/流量详情与分析
* 恶意流量识别
* Tor 流量
* GUI – 提供上传 pcap 文件并显示网络拓扑图选项的图形用户界面
### 安装设置
* Python 3
```
apt install python3-pip
apt install python3-tk
apt install graphviz
apt install python3-pil python3-pil.imagetk
pip3 install -r requirements.txt
python3 Source/main.py
```
(请确保提升权限以允许创建文件 - 使用 `sudo` 运行)
对于 MAC:
```
brew install graphviz
```
* Python 2
```
apt install python-tk
apt install graphviz
pip install -r requirements.txt
python Source/main.py
```
(请确保提升权限以允许创建文件 - 使用 `sudo` 运行)
### 使用的 Python 库: - 以下所有库均为实现功能所必需
* Tkinter 和 TTK – 通过 pip 或 apt-get 安装 – 确保已安装 Tkinter 和 graphviz(大多数 Linux 默认包含)
* apt install python-tk
* apt install graphviz
* apt install python3-tk (用于 python3 支持)
* 在 python3 环境中有时会抛出 ImageTk 错误 --> 使用 apt install python3-pil python3-pil.imagetk
* 所有这些均已包含在 requirements.txt 文件中
* Scapy – rdpcap,用于从 pcap 文件中读取数据包
* Ipwhois – 用于从 IP 获取 whois 信息
* Netaddr – 用于检查 IP 信息类型
* Pillow – 图像处理库
* Stem – Tor 共识数据获取库
* pyGraphviz – 绘制图形
* Networkx – 绘制图形
* Matplotlib – 绘制图形(目前未使用)
### 演示

### 入门指南:
* 克隆该代码库
* pip install -r requirements.txt
* python Source/main.py
### 附加信息:
* 已在 Linux 上测试
* 流量选项包括 - Web (HTTP 和 HTTPS), Tor, 恶意流量, ICMP, DNS
### 挑战:
* TK GUI 的不稳定性:
* 在 Django 和 TK 之间决定 GUI 时,为了实现简单的本地界面最终选择了 TK,但 TK GUI 的不稳定性导致了诸多问题
* 图形绘制:
* 从获取的数据中绘制出可读性强的合适网络拓扑图颇费了一番功夫,尝试使用了多种库才最终实现。
* 性能与时间:
* 由于涉及各种数据收集和输出生成,整个应用程序的性能和耗时是一个巨大的挑战
### 已知缺陷:
* 内存占用过高
* 当系统 RAM 较低时,有时会出现内存占用过高的情况,因为内存中存储的 pcap 文件数据量非常庞大
* 应通过将数据迁移到数据库而非直接存入内存来解决
* 竞态条件
* 由于 TK GUI 的 mainloop 机制,其他线程可能会发生竞态条件
* 应通过迁移到结构更良好的 TK 实现或 Web GUI 来解决
* TK GUI 不稳定性:
* 原因同上
* 代码:
* 代码结构臃肿且缺乏条理
* 目前的临时修复方案:在极少数情况下,如果发生上述任何问题,进度条会一直转圈且无法生成输出,此时需要重启应用程序。
### PcapXray 的 Docker 容器
* 位于根目录中的 Dockerfile 用于构建镜像
* 已构建好的 Docker 镜像可在 dockerhub 上找到
- srinivas11789/pcapxray-1.0
- srinivas11789/pcapxray-2.2
* 手动执行 `run.sh` 文件中的步骤即可通过 docker 启动该工具(如有错误我可以提供帮助)
* 运行 `run.sh` 脚本是一种自动化尝试(无法保证 100% 成功运行)
- 已在 mac 和 linux 上测试 - 很快会做得更好!...
### 近期未来任务: (目标: 3.0)
- 清理代码(将代码库从原型状态进行优化重构)
- 为数据包捕获的所有资产生成存放在独立文件夹中的报告
- 可疑活动检测
- 支持更多 pcap 读取引擎
- 流量支持: ICMP, DNS
* 已知文件类型检测与提取
- Python2 和 Python3
- 交互式地图
### 未来规划:
* 结构化且清晰的代码流程
* 由于内存占用过高,将数据库从 JSON 更改为 sqlite 或主流数据库
* 将前端更改为基于 Web 的框架,例如 Django
* 提升应用程序的稳定性
* 支持更多协议
* 清理代码
### 致谢:
* 感谢你们让其变得更好,
- Marc Budofsky 教授
- Kevin Gallagher
* 感谢所有使用到的依赖库
* Logo 使用 logomakr.com 和 www.inkscape.org 制作
## ***一切为了安全的乐趣!***
标签:DefCon, Graphviz, IP 地址批量处理, PCAP分析, Python3, Tkinter, Tor流量分析, 图形界面, 安全分析工具, 恶意流量检测, 数字取证, 文件提取, 流量可视化, 流量审查, 离线分析, 网络安全, 网络拓扑图, 自动化脚本, 设备识别, 请求拦截, 逆向工具, 隐私保护