pavel-kalmykov/threat-landscape-monitor

GitHub: pavel-kalmykov/threat-landscape-monitor

基于 abuse.ch 开放数据源的端到端威胁情报分析管道,将原始威胁数据转化为可交互的分析看板,聚焦恶意 URL 移除时效和恶意软件活跃趋势。

Stars: 0 | Forks: 0

# Threat Landscape 监控 一个数据 pipeline,从 [abuse.ch](https://abuse.ch) 源拉取网络威胁数据,将其加载到 BigQuery,并转化为一个可供实际使用的 dashboard。它回答了两个问题:恶意 URL 被移除的速度有多快,以及其背后是什么恶意软件。 在线 dashboard:https://threat-landscape-monitor.streamlit.app/ ## 这解决了什么问题? abuse.ch 发布免费的威胁情报数据:恶意 URL、入侵指标 和恶意软件样本。数据质量很高,但属于原始 CSV 转储。如果你想知道哪些托管提供商移除恶意 URL 耗时最长,或者本月的 Cobalt Strike 活动是否呈上升趋势,你需要一个连接原始源和答案之间的 pipeline。 本项目就是这个 pipeline。它每天从 URLhaus(恶意 URL)和 ThreatFox(入侵指标)下载数据,将其加载到 BigQuery,运行 SQL 转换,并为 Streamlit dashboard 提供两个维度的信息: 1. **Takedown time(移除时间)**:恶意 URL 在被举报后保持活跃状态的时间长短,按托管提供商细分。如果你从事事件响应或滥用举报工作,这就是你想要的数据。 2. **Threat trends(威胁趋势)**:随时间推移的报告威胁数量,按恶意软件家族分类。如果你需要了解当前有哪些活跃威胁,请从这里开始。 ## 架构 ``` graph LR subgraph Sources A[URLhaus CSV dump] B[ThreatFox CSV dump] end subgraph Bruin Pipeline C[raw_urlhaus_urls\nPython ingestion] D[raw_threatfox_iocs\nPython ingestion] E[stg_urlhaus\nSQL staging] F[stg_threatfox\nSQL staging] G[mart_takedown_analysis] H[mart_threat_trends] I[mart_dashboard_*\npre-aggregated] end subgraph GCP J[(BigQuery)] end K[Streamlit Dashboard] L[GitHub Actions\ndaily 06:00 UTC] A --> C --> E --> G --> I B --> D --> F --> H --> I G --> J H --> J I --> J --> K L -.triggers.-> C L -.triggers.-> D ``` ## 技术栈 | 层级 | 工具 | |---|---| | 基础设施即代码 | Terraform | | 云平台 | GCP (BigQuery, GCS) | | 采集、转换、编排 | Bruin | | 数据仓库 | BigQuery | | 可视化 | Streamlit + Plotly | | CI/CD | GitHub Actions | ## 数据源 | 来源 | 内容 | 数据量 | 更新频率 | |---|---|---|---| | [URLhaus](https://urlhaus.abuse.ch/) | 用于恶意软件分发的恶意 URL | 约 7 万个 URL,含 2018 年以来的完整历史记录 | 每 5 分钟 | | [ThreatFox](https://threatfox.abuse.ch/) | 与恶意软件家族相关的入侵指标 | 约 17.5 万个 IOC,含 2020 年以来的完整历史记录 | 每 5 分钟 | 这两个源都是开放的。无需身份验证,无需 API 密钥。 ## 设置与复现 ### 前置条件 - 已启用计费的 GCP 账号 - 已通过认证的 `gcloud` CLI (`gcloud auth application-default login`) - [Terraform](https://www.terraform.io/) - [Bruin CLI](https://getbruin.com/) (`curl -LsSf https://raw.githubusercontent.com/bruin-data/bruin/refs/heads/main/install.sh | sh`) ### 1. 克隆仓库 ``` git clone https://github.com/pavel-kalmykov/threat-landscape-monitor.git cd threat-landscape-monitor ``` ### 2. 配置基础设施 ``` cd terraform terraform init terraform apply cd .. ``` 创建一个 BigQuery 数据集 (`threat_intelligence`) 和一个 GCS 存储桶,均位于 `europe-southwest1`。 ### 3. 配置 Bruin 在项目根目录创建一个 `.bruin.yml` 文件(已加入 gitignore): ``` default_environment: default environments: default: connections: google_cloud_platform: - name: "gcp-threat" project_id: "YOUR_PROJECT_ID" location: "europe-southwest1" use_application_default_credentials: true ``` ### 4. 运行 pipeline ``` bruin run . ``` 从 abuse.ch 下载最新数据,将其加载到 BigQuery,运行所有转换。端到端大约需要一分钟。 ### 5. 运行 dashboard ``` uv run streamlit run dashboard.py ``` 或使用在线版本:https://threat-landscape-monitor.streamlit.app/ ## Pipeline 资产 | 资产 | 类型 | 功能 | |---|---|---| | `raw_urlhaus_urls` | Python | 下载完整的 URLhaus ZIP 转储(约 7 万行),解析 CSV,加载到 BigQuery | | `raw_threatfox_iocs` | Python | 下载完整的 ThreatFox ZIP 转储(约 17.5 万行),解析 CSV,加载到 BigQuery | | `stg_urlhaus` | SQL | 清洗类型,从 URL 中提取域名/TLD,计算移除时间 | | `stg_threatfox` | SQL | 清洗类型,将 `fk_malware` 拆分为平台和家族 | | `mart_takedown_analysis` | SQL | 每个 URL 一行,包含移除指标 | | `mart_threat_trends` | SQL | 来自两个源每日计数,按威胁类型和恶意软件家族分组 | | `mart_dashboard_stats` | SQL | 单行数据,包含 dashboard 的汇总数字 | | `mart_dashboard_takedown_monthly` | SQL | 每月平均和中等移除时间 | | `mart_dashboard_domain_stats` | SQL | 每个域名的移除聚合数据 | | `mart_dashboard_ioc_types` | SQL | 来自 ThreatFox 的 IOC 类型细分 | ## Dashboard 在线地址:https://threat-landscape-monitor.streamlit.app/ 支持深色和浅色模式(通过右上角切换)。主机图表上带有交互式过滤器。将鼠标悬停在(或在移动设备上长按)恶意软件树状图中的任何块上,可查看该家族的具体行为。 ## 许可证 MIT
标签:BigQuery, Bruin, CSIRT, ETL, GCP, Github Actions, Google Cloud, Incident Response, IOC, IP 地址批量处理, JavaCC, Kubernetes, Looker Studio, Python, SQL, Streamlit, ThreatFox, URLhaus, 下线时间分析, 互联网扫描, 代码示例, 可视化仪表盘, 多线程, 失陷标示, 威胁情报, 安全运营, 密码管理, 开发者工具, 恶意URL, 恶意软件, 托管服务提供商分析, 扫描框架, 数据分析, 数据工程, 数据管道, 数据转换, 无后门, 系统审计, 网络信息收集, 网络安全, 网络调试, 自动化, 访问控制, 趋势分析, 软件工程, 逆向工具, 配置审计, 隐私保护