geezsecurity/Pcap-Analyzer

GitHub: geezsecurity/Pcap-Analyzer

蓝队 DFIR 流量取证平台,上传 PCAP 文件后自动完成攻击检测、时间线重建、威胁情报关联与事件报告生成。

Stars: 0 | Forks: 0

# Pcap-Analyzer DFIR 分流平台 logo-full-transparent 上传一个网络数据包捕获文件,立即获得每个事件响应者首先提出的问题的答案: **是否发生了攻击,攻击是否成功,以及攻击来自哪里?** Pcap-Analyzer 解析 `.pcap` / `.pcapng` / `.cap` 文件,在其上运行 28 条检测规则和 YARA 引擎,关联您分析过的每个捕获文件中的指标,在时间线上重建攻击链,恢复传输的文件,在世界地图上绘制每个外部端点,并将事件报告导出为 PDF 或 DOCX。 ``` docker compose up --build → http://localhost:8182 ``` ## 目录 - [功能](#features) - [截图](#screenshots) - [快速开始](#quick-start) - [样本数据包](#sample-captures) - [网络威胁地图](#cyber-threat-map) - [可选集成](#optional-integrations) - [检测覆盖范围](#detection-coverage) - [分析工作原理](#how-the-analysis-works) - [架构](#architecture) - [配置](#configuration) - [开发](#development) - [已知限制](#known-limitations) - [致谢](#credits) ## 功能 ### 分流 - **一眼看出的结论** - 概览页面带有按严重程度着色的结论横幅、捕获摘要(时间窗口、持续时间、速率、链路层、snaplen 截断)、严重程度细分、热门类别和主要通信节点(Top talkers)。 - **攻击时间线** - 每个发现都有产生它的数据包的时间锚点,因此链条按顺序读取:侦察 → 利用 → 后门端口 → 凭据窃取。 - **攻击真的成功了吗?** - Web 攻击发现根据服务器的 HTTP 响应进行分类 - **已确认**(2xx)、**服务器错误**(5xx)、**尝试**(4xx) - 并且 Findings 页面可以对此进行过滤。确认的命中和被阻止的探测不是同一个事件。 ### 检测 - **28 条检测规则**,每条都映射了 MITRE ATT&CK,并带有证据和下钻数据包。 - **YARA 引擎** - 45 条内置规则扫描重组的 TCP 流*和*提取的文件:webshell(明文*和*加密 - Behinder、Godzilla、AntSword、reGeorg),现代 C2(Sliver、Havoc、Mythic、Empire、Covenant、Brute Ratel),隧道(chisel、ngrok、cloudflared、frp),挖矿(Stratum、XMRig),信息窃取程序,AD 工具(Rubeus、SharpHound、impacket、DCSync)以及 payload/凭据痕迹。放入您自己的 `.yar` 文件并重新加载即可。 - **Active Directory 覆盖** - Kerberoasting、AS-REP roasting、SMB 横向移动(管理共享、PsExec 风格的 `svcctl`、通过 `drsuapi` 进行的 DCSync)。 ### 调查 - **追踪 TCP 流** - Wireshark 风格,带有**解码**视图,可对 HTTP body 进行分块解码和 gunzip 解压,因此压缩响应读取为文本而不是二进制乱码。支持文本 / Raw / Hex 模式;hex 是标准的偏移量·十六进制·ASCII 转储。 - **文件雕刻(File carving)** - HTTP 对象(根据 `Content-Disposition` 或 URL 命名)、FTP 传输(根据控制通道的 `RETR`/`STOR` 命名),以及在流内*任意*偏移量处发现的 PE/ELF 二进制文件,具有 header 验证和真实的磁盘大小,因此 SHA-256 与真实工件匹配。会**标记**扩展名与其 magic bytes 相矛盾的伪装文件。 - **会话与凭据** - 重组 HTTP / FTP / Telnet / 邮件,抓取明文凭据。 - **数据包浏览器** - 分页、可过滤,带有逐层详情抽屉。 ### 上下文与输出 - **GeoIP 攻击地图** - 绘制带有攻击者→受害者弧线的外部端点,基于真实的街道地图(街道 / 卫星 / 暗色底图,带英文标签)。 - **威胁情报** - AbuseIPDB(滥用分数、ISP、Tor)和 VirusTotal(IP + 文件哈希),在服务端代理并缓存以遵守速率限制。 - **报告** - 将完整的事件报告导出为 **PDF** 或 **DOCX**:结论、捕获摘要、发现概述、攻击时间线、带有 MITRE 的单项发现详情、外部威胁端点、主要通信节点(Top talkers)。 - **AI 支持** *(可选)* - 让 LLM 阅读发现结果并撰写 DFIR 评估:攻击链、可能的误报、影响以及优先的后续步骤。兼容 **Anthropic Claude**、**OpenAI** 或 **Google Gemini** - 均通过其官方 SDK。 ## 截图 **概览 - 一眼看出的结论** ![概览页面:按严重程度着色的结论横幅、捕获摘要、严重程度细分和主要通信节点](https://static.pigsec.cn/wp-content/uploads/repos/cas/13/13508484660761902d01cbe0383ca31c9c8a6d65252f075f68c6d53f77201490.png) **发现 - 按严重程度排名的检测** ![发现页面:映射了 MITRE 的检测,带有证据以及已确认/尝试的分类](https://static.pigsec.cn/wp-content/uploads/repos/cas/a7/a7f54c29e9ce760db48320357f7c6d0c0cbaccba5af696220bff8333c023c266.png) **追踪 TCP 流** image **攻击时间线** ![时间线:每个发现都有产生它的数据包的时间锚点](https://static.pigsec.cn/wp-content/uploads/repos/cas/43/43cdf500ba87eac45b442f2942ccf0f0340d212d45ab5619e9e750054c3c4a9a.png) **连接** ![连接:按对话对端点、端口和字节数进行细分](https://static.pigsec.cn/wp-content/uploads/repos/cas/f3/f318d72bbfed9ab694eabbba01340edb0965f635aca13b4f3feb48e9d4b0ceb7.png) **GeoIP 攻击地图** ![GeoIP 攻击地图](https://static.pigsec.cn/wp-content/uploads/repos/cas/77/774671f4d4cffc96286a0dae4c28ee5cf30e6831a5024221a842decfbd66d4dd.png) **协议分析** ![协议分析](https://static.pigsec.cn/wp-content/uploads/repos/cas/e8/e8e85e56bcacd6ab9efc57995626dff3a1a4e46f6a4212ce6443f6c0a436ecf3.png) **流量流向** ![流量流向](https://github.com/user-attachments/assets/8d922dee-c1a2-42b2-9c4f-17126d2aa79a) **HTTP 事务** ![HTTP 事务](https://static.pigsec.cn/wp-content/uploads/repos/cas/4f/4fd4cbe0c121b9cdf711f60acb40a457e2c02450c1955ef9be04d35dfaf1ed44.png) **TLS/JA3 与证书** ![TLS/JA3 与证书](https://static.pigsec.cn/wp-content/uploads/repos/cas/04/04deca0d17736dfb7c44cbd9cbdcec6b51c449996fcee2352ce404be52931a28.png) **IOC** ![IOC](https://static.pigsec.cn/wp-content/uploads/repos/cas/62/62f0fff8b44b73dc88904ddc37f07cfb9f1396f0abf51b398c2aeadafa8789c5.png) **会话与文件** ![会话与文件](https://static.pigsec.cn/wp-content/uploads/repos/cas/37/37cba796416170dd302638f1f7c371ec986de9694ee652aa54526d85f35addaf.png) **AI 支持评估** image ## 快速开始 ### Docker(推荐) ``` git clone https://github.com/geezsecurity/Pcap-Analyzer.git cd Pcap-Analyzer docker compose up --build ``` 打开 **http://localhost:8182**,然后在上传页面上放下一个捕获文件。 一切都在两个容器中运行(FastAPI 后端 + nginx 提供服务的 React 前端)。后端只能在 compose 网络内部访问;浏览器通过前端的 `/api` 代理与其通信,因此它们在单个端口上全部属于同源。 ### 本地开发 **后端**(Python 3.12+): ``` cd backend python3 -m venv .venv ./.venv/bin/pip install -r requirements.txt ./.venv/bin/uvicorn app.main:app --reload --port 8000 ``` **前端**(Node 20.19+ 或 22.12+ - Vite 8 所要求): ``` cd frontend npm install npm run dev # http://localhost:5173, proxies /api → :8000 ``` ### GeoIP 数据库(可选) MaxMind GeoLite2 数据库**不包含在内** - 它有许可限制,不能重新分发。没有它,应用程序也能正常工作;只是地图和地理列会保持空白。 要启用地理位置定位,请注册一个免费的 [MaxMind 账户](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data),下载 **GeoLite2-City.mmdb**(以及可选的 **GeoLite2-ASN.mmdb** 以获取 ASN/组织数据),然后将它们放在这里: ``` backend/geoip/GeoLite2-City.mmdb backend/geoip/GeoLite2-ASN.mmdb # optional ``` `GET /api/health` 会报告是否找到了该数据库。 ## 样本数据包 `pcaps/` 附带六个小型捕获文件,每个攻击类别一个。上传其中的任何一个,即可看到该工具端到端的工作过程,无需四处寻找测试数据。 | 捕获 | 场景 | 触发 | |---|---|---| | `01-web-attacks.pcap` | SQLi、XSS、路径遍历、LFI、命令注入 - 混合的 200/403/404/500 响应 | 9 个发现;练习 **攻击结果过滤器**(哪些 payload 实际生效了) | | `02-ssh-bruteforce.pcap` | 30 次 SSH 连接尝试,然后是一次成功的登录 | `brute_force`(高) | | `03-ftp-attack.pcap` | FTP 密码喷洒(18× `530`)、明文凭据、后门上传 | `brute_force`、`cleartext_credentials`、`insecure_protocol`、**YARA** 反向 shell 匹配(严重) | | `04-malware-download.pcap` | 通过 HTTP 下载的 PE 可执行文件 + 编码的 PowerShell stager | `malware_download` ×2、YARA;恢复 3 个文件,包括一个有效的 PE | | `05-data-exfiltration.pcap` | 将 5.25 MB 数据推送到外部主机,返回流量极少 | `data_exfiltration`(中等级别) | | `06-ddos-synflood.pcap` | 来自 5 个国家/地区约 1,160 个源的 3,000 个 SYN | `dos`(高);填充 GeoIP 攻击地图 | 总计:**19 个发现,0 个规则错误,每个发现都有时间锚点。** 使用以下命令重新生成它们(输出是确定性的): ``` python backend/tests/fixtures/generate_samples.py ``` 生成器兼作回归测试夹具 - 每个捕获文件都是为了触发特定的规则而构建的,因此如果某个规则悄悄停止匹配,就会显示为缺失的发现。 ## 网络威胁地图 将攻击源绘制在真实的底图上,带有从每个敌对来源运行到目标的动态弧线。 - **攻击源** - 按国家/地区汇总并排名的敌对地址,因此 1,000 个源的洪水攻击会折叠成几行。点击某个国家/地区即可将地图过滤到该国家/地区。 - **移动的攻击弧线** - 箭头沿着从源到目标的每条路径延伸,按严重程度着色,并根据该源的份额进行加权。可从工具栏暂停。 - **涟漪标记** - 敌对端点闪烁;目标位于不断扩大的圆环下方。 - **矢量世界地图** - 来自 Natural Earth 的国家/地区轮廓(公共领域,已内置),因此地图不需要切片服务器,并且可以完全离线渲染。 需要 GeoLite2 数据库(请参阅[快速开始](#quick-start));没有它,地图将是空白的,但工具的其余部分不受影响。 **设置您的位置。** 受监控的主机通常是私有地址,没有自己的地理位置信息,因此默认情况下,目标是绘制在观察到的端点的质心处 - 这通常会落在海中央。将 *Settings → Threat map → Latitude/Longitude* 设置为您的站点并重新运行分析;*Reset to automatic* 会恢复到质心。 ## 可选集成 全部可选 - 如果没有任何集成,分析器也能完全正常工作。从 **Settings** 页面进行配置(存储在服务端,永远不会返回给浏览器)或通过 `backend/.env` 进行配置(请参阅 `backend/.env.example`)。 | 集成 | 添加的内容 | 在哪里获取 key | ||---|---| | **AbuseIPDB** | IP 滥用分数、ISP、Tor exit 检测 | [abuseipdb.com](https://www.abuseipdb.com/api) | | **VirusTotal** | IP 信誉 + 恢复文件的哈希查找 | [virustotal.com](https://www.virustotal.com/gui/join-us) | | **AI Support** | LLM 编写的 DFIR 评估 | [Anthropic](https://console.anthropic.com) · [OpenAI](https://platform.openai.com) · [Google AI](https://aistudio.google.com/apikey) | 对于 AI 支持,请在“设置”中选择一个提供商并粘贴该提供商的 API key。保存 key 后,模型下拉列表将**从提供商的 API 实时填充**,因此它始终反映您的账户实际可以使用的模型 - 此外还有一个用于输入特定模型 ID 的自由文本框。 ## 检测覆盖范围 28 条规则,全部映射了 MITRE ATT&CK 并带有时间锚点。 | 类别 | 检测项 | MITRE | |---|---|---| | **侦察** | 端口扫描(SYN 数量 + 不同端口)、隐蔽扫描(NULL/FIN/Xmas)、扫描器 user-agent | T1046, T1595 | | **Web 攻击** | SQL 注入、XSS、路径遍历、LFI/RFI、命令注入、webshell、Log4Shell - 15 个签名,根据 HTTP 状态进行结果分类 | T1190, T1059, T1505.003, T1083 | | **凭据攻击** | FTP / Telnet / HTTP 暴力破解(失败计数)、SSH / RDP / SMB / DB 暴力破解(连接搅动)、明文凭据 | T1110, T1040 | | **Active Directory** | Kerberoasting(RC4 TGS)、AS-REP roasting、SMB 横向移动 - 管理共享、PsExec `svcctl`、DCSync `drsuapi` | T1558.003, T1558.004, T1021.002, T1569.002, T1003.006 | | **Kerberos 身份验证结果** | 密码喷洒(跨账户的广度)、单账户暴力破解、账户枚举、锁定 - 根据 KDC 返回的内容进行分类:AS-REP 表示凭据有效,`KDC_ERR_PREAUTH_FAILED` 表示无效 | T1110.003, T1110.001, T1087.002, T1531 | | **命令与控制(C2)** | Beaconing(间隔抖动分析)、DNS 隧道、DGA 评分、fast-flux DNS、恶意 JA3、可疑 TLS 证书、木马/后门端口 | T1071, T1568, T1573, T1571 | | **外发与传输** | 数据外发(单向流量 + 比率)、ICMP 隧道、HTTP 恶意软件传输(PE/编码的 PowerShell) | T1048, T1095, T1105 | | **拒绝服务** | SYN flood - 针对一个服务的流量、源多样性以及握手完成率必须在触发前全部一致 | T1498.001, T1499.002 | | **安全卫生** | 正在使用的不安全协议(Telnet、FTP、HTTP Basic、明文 LDAP、SNMP v1/v2c) | T1040 | | **YARA** | 针对流和恢复文件的 45 条内置规则 - webshell(包括 China Chopper)、Mimikatz、Meterpreter、Cobalt Strike、反向 shell、私钥、云凭据、勒索说明 | 规则定义 | 暴力破解、端口扫描、DNS 隧道、beaconing 和数据外发的阈值可以在“设置”页面进行调整。 ## 分析工作原理 ``` upload → parse (scapy) → analyze → detect → persist → explore ``` 1. **上传**创建一个任务;分析作为后台任务运行,因此 UI 永远不会阻塞。 2. **分析**计算捕获元数据、协议/流统计信息以及 GeoIP 报告。 3. **检测**在单个过程中针对共享上下文(会话、TLS 指纹、Kerberos/SMB 事件只计算一次并重用)运行每条规则。引发异常的规则会被隔离 - 它会变成一个 `info` 发现,而不是终止运行。 4. **时间锚定** - 规则运行后,任何没有时间戳的发现都会从它引用的数据包中获取时间戳,因此*每个*发现都会出现在时间线上。 5. **结果被缓存**在任务上(SQLite),因此重新访问捕获文件是即时的。归因是感知方向的:客户端(发起者)是攻击者,服务器是目标,由知名端口决定,而不是通过猜测捕获是在哪台主机上进行的。 ## 架构 ``` backend/ FastAPI + scapy app/analysis/ protocol stats, flow, geoip, sessions, TLS/JA3, AD (Kerberos/SMB), file carving, stream reassembly, HTTP body decoding app/detection/ rule engine, signatures, YARA engine, scoring app/intel/ AbuseIPDB + VirusTotal clients with TTL cache app/reporting/ shared report model → PDF (ReportLab) + DOCX (python-docx) app/ai/ multi-provider LLM analyst (Anthropic / OpenAI / Gemini) app/api/routes/ upload, analysis, extract, detection, report, ai, settings config/ protocol/port lookups, trojan ports, file magics, JA3 blacklist, yara/*.yar rules frontend/ React 18 + TypeScript + Vite + Tailwind src/pages/ Upload, Overview, Findings, Timeline, GeoMap, Connections, Hosts, Protocols, Flow, Packets, HTTP, DNS, TLS, IOCs, Sessions, Settings src/components/ Layout, FollowStream, PayloadView (text/hex), IpIntel, ui ``` **技术栈:** FastAPI · scapy 2.7 · SQLAlchemy 2 · SQLite · cryptography · yara-python · ReportLab · python-docx - React 18 · TanStack Query · Recharts · React-Leaflet · Tailwind。 ## 配置 设置是分层的:**数据库(Settings 页面)覆盖 `.env` 覆盖默认值。** | 设置 | 默认值 | 用途 | |---|---|---| | `MAX_UPLOAD_MB` | 512 | 上传大小限制 | | `BRUTE_FORCE_THRESHOLD` | 10 | 暴力破解发现之前的身份验证失败次数 | | `PORT_SCAN_PORT_THRESHOLD` | 15 | 扫描发现之前的不同端口数 | | `DNS_TUNNEL_QNAME_LENGTH` | 50 | 看起来像隧道的查询长度 | | `BEACON_MIN_EVENTS` | 8 | 间隔分析所需的连接数 | | `EXFIL_MIN_UPLOAD_MB` | 1 | 数据外发发现之前的出站流量 | | `INTEL_CACHE_TTL_HOURS` | 24 | 威胁情报缓存生命周期 | | `CORS_ORIGINS` | `localhost:8182` | 允许的浏览器源 | API keys(`ANTHROPIC_API_KEY`、`OPENAI_API_KEY`、`GEMINI_API_KEY`、`ABUSEIPDB_API_KEY`、 `VIRUSTOTAL_API_KEY`)可以用相同的方式设置。将 `backend/.env.example` 复制到 `backend/.env` 即可使用文件路由 - 它被 git 忽略。 ## 开发 ``` # 后端 cd backend && ./.venv/bin/uvicorn app.main:app --reload --port 8000 # http://localhost:8000/docs 上的交互式 API 文档 # 前端 cd frontend && npm run dev # :5173 npx tsc -b # typecheck npm run build # production build ``` 示例捕获文件位于 `pcaps/` 中 - 请参阅[样本数据包](#sample-captures)。它们是 生成的,而不是录制的,每一个都针对特定的规则,因此它们可以作为更改检测逻辑后的快速回归测试。 **添加检测规则:** 在 `app/detection/rules_dfir.py` 中编写一个函数 `(ctx) -> list[RawFinding]`,并将其添加到 `DFIR_RULES` 中。包含 `evidence["packet_ids"]`,您将免费获得时间线放置、流向下钻以及数据包证据。 **添加 YARA 规则:** 将 `.yar` 文件放入 `backend/config/yara/`,然后在“设置”中点击**重新加载规则** 。使用 `meta.severity` 和 `meta.mitre` 来控制发现结果的显示方式。 每个文件都是独立编译的,因此损坏的规则文件会被跳过,而不是禁用整个引擎。 ## 已知限制 在依赖它之前值得注意: - **检测是启发式的。** 它们呈现的是线索,而不是结论。特别是响应侧的签名匹配会被降低权重,因为普通的 Web 内容可能会触发它们 - 务必通过 Follow Stream 或数据包证据进行确认。 - **捕获大小有一个实际上限。** 解析后的捕获被缓存在内存中(LRU,默认约 1 GB,`CAPTURE_CACHE_MB`),因此重复查看同一个捕获是即时的,而不是每次都重新解析它。但是,整个捕获仍然必须容纳在 RAM 中,大小约为其文件大小的 10 倍,并且超过缓存预算的捕获会像以前一样在每个请求时重新解析。在最高约 50 MB / 约 10 万个数据包时较为舒适;在最高约 150 MB 时可用; 超过这个数值,您就需要一个流式/索引后端,但目前不存在。请注意,`MAX_UPLOAD_MB`(512)远远高于引擎可以舒适处理的范围。 - **加密流量保持加密状态。** 没有 TLS 解密 - TLS 分析 仅限于握手元数据(SNI、JA3、证书)。 - **AI 评估仅供参考。** 它可能会出错或自信地遗漏某些内容;请将其 视为第二意见,而不是最终结论。 - **时间戳以服务器的本地时区呈现。** - **没有身份验证。** 任何可以访问该端口的人都可以上传和读取捕获文件 - 请在 受信任的网络上运行它,或者在它前面放置您自己的身份验证。 ## 致谢 - 原始项目:**[HatBoy/Pcap-Analyzer](https://github.com/HatBoy/Pcap-Analyzer)** - 协议/流/会话分析方法以及 `config/` 查找表均来自 该项目。 - [scapy](https://scapy.net/) 用于数据包解析,[MaxMind GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) 用于 地理位置定位,[YARA](https://virustotal.github.io/yara/) 用于签名匹配, [AbuseIPDB](https://www.abuseipdb.com/) 和 [VirusTotal](https://www.virustotal.com/) 用于威胁情报。 ## 许可证 **GNU General Public License v3.0** - 请参阅 [LICENSE](LICENSE)。这是继承自 上游项目并延续到此重写版本的:您可以使用、修改和 重新分发它,但衍生作品也必须是 GPLv3 并附带其源代码。 GeoLite2 数据和任何第三方 API 的使用均受其各自条款的约束。
标签:Docker, IP 地址批量处理, Petitpotam, YARA, 云资产可视化, 安全防御评估, 网络信息收集, 请求拦截, 逆向工具