PKHarsimran/SwiftIOC-Automated-Threat-Intelligence-Collector

GitHub: PKHarsimran/SwiftIOC-Automated-Threat-Intelligence-Collector

轻量级 Python 自动化威胁情报收集器,从多个开源情报源聚合 IOC 并输出多种标准化格式,便于直接集成到安全工具链中。

Stars: 12 | Forks: 2

# ⚡ SwiftIOC – 开源自动化威胁情报收集器 [![CI – SwiftIOC](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/64bfac58b8081753.svg)](https://github.com/PKHarsimran/SwiftIOC-Automated-Threat-Intelligence-Collector/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5369819e16081754.svg)](https://github.com/PKHarsimran/SwiftIOC-Automated-Threat-Intelligence-Collector/actions/workflows/codeql.yml) [![安全策略](https://img.shields.io/badge/security-SECURITY.md-informational)](./SECURITY.md) SwiftIOC 是一个开源的 Python 威胁情报自动化工具包,它以机器可读的格式保存最新的威胁指标。轻量级收集器 (`swiftioc.py`) 通过 YAML 配置获取威胁源,对指标进行规范化和去重处理,并将其导出为 CSV、TSV、JSON、JSON Lines 和 STIX 2.1 格式,同时生成可搜索的运行诊断信息。 SwiftIOC 专为安全运营团队、SOC 分析师和网络威胁搜寻者设计,可在任何支持 Python 的环境中运行——本地工作站、CI/CD 流水线、GitHub Actions 或自动化 cron 作业。输出默认位于 `public/` 目录下,因此可以直接通过 GitHub Pages 发布,集成到 SIEM 和 SOAR 工具中,或归档用于合规性报告。该存储库包含现成的示例,便于在现代 DevSecOps 工作流中快速部署。 ## 📚 目录 - [SwiftIOC 概览](#-swiftioc-at-a-glance) - [功能特性](#-features) - [GitHub 项目健康状况](#-github-project-health) - [支持的威胁情报源](#-supported-threat-intelligence-sources) - [用例与 SEO 友好关键词](#-use-cases--seo-friendly-keywords) - [仓库布局](#-repository-layout) - [工作原理](#-how-it-works) - [快速入门](#-quick-start) - [配置源](#-configuring-sources) - [CLI 参考](#-cli-reference) - [输出与诊断](#-outputs--diagnostics) - [在 GitHub Actions 中运行](#-running-in-github-actions) - [GitHub Pages 预览与发布](#-github-pages-preview--publishing) - [自动生成的 IOC 摘要](#auto-generated-ioc-summary) ## 🔍 SwiftIOC 概览 SwiftIOC 帮助网络安全团队自动从权威来源收集和发布高保真 IOC。该项目强调: - **自动化威胁源聚合**,通过基于 YAML 的配置。 - **一致的 IOC 丰富化**,为 SIEM、SOAR、IDS 和 DFIR 工具做好准备。 - **Git 友好的工件**,专为 GitHub Pages、GitHub Actions 和其他 CI/CD 环境量身定制。 ## 🚀 功能特性 - **YAML 驱动的源** – 源元数据位于 `sources.yml` 中,因此无需修改 Python 代码即可更改收集配置。示例文件包含适用于 CISA KEV、URLhaus、MalwareBazaar、ThreatFox、Feodo Tracker、SSLBL JA3、Spamhaus DROP、OpenPhish、CINS Army 和 Tor 出口列表的适配器。 - **指标规范化** – 每个指标都由 `Indicator` 数据类表示,并在写入磁盘之前进行分类(IPv4/IPv6、URL、域名、哈希、CVE 等)。 - **失效处理与去重** – 辅助函数对 URL/域名进行失效处理(Defanging)并移除重复指标,确保下游工具接收到安全、唯一的值。 - **多种导出格式** – 每次运行都会生成 CSV、TSV、JSON、JSON Lines、STIX 2.1 包和 Markdown 更新日志。 - **丰富的诊断信息** – 自动生成 JSON 运行摘要、Markdown 报告和每个源的计数,用于审计和仪表板。 - **可选的 RSS 收集** – 安装 `feedparser` 后即可处理 RSS 源;使用 `--skip-rss`(或 `--ci-safe`)可在没有该依赖项的情况下运行。 - **对 CI 友好的默认设置** – JSON 日志记录、确定的输出路径以及防护标志(`--fail-on-empty`、`--fail-if-stale`、`--grace-on-404`)使收集器在自动化环境中表现可预测。 ## 🛡️ GitHub 项目健康状况 - **持续集成** – `CI – SwiftIOC` 工作流在每次推送和拉取请求时对 Python 代码库进行 lint 检查、类型验证、依赖项审计,并对收集器进行端到端测试。 - **CodeQL 扫描** – GitHub 的 CodeQL 工作流分析存储库中常见的安全问题,以确保收集器在自动化环境中的安全性。 - **安全策略** – 通过 [`SECURITY.md`](SECURITY.md) 处理协调漏洞披露,其中包含针对维护者的直接联系指导。 ## 🌐 支持的威胁情报源 SwiftIOC 附带了解析器和适配器,用于处理 SOC 团队和托管安全提供商广泛引用的网络威胁情报源: - **CISA 已知被利用漏洞 (KEV)** – 通过监控官方 CISA KEV 目录来优先安排补丁修补工作。 - **URLhaus** – 获取恶意 URL 指标以保护 Web 网关和代理。 - **MalwareBazaar** – 追踪恶意文件哈希,用于 EDR、AV 和沙箱工具。 - **ThreatFox** – 添加由 abuse.ch 策划的 IP、域名、URL 和哈希。 - **Feodo Tracker 与 SSLBL JA3 指纹** – 检测与银行木马和恶意 TLS 指纹相关的 C2 流量。 - **Spamhaus DROP/EDROP** – 在网络边缘封锁已知的僵尸网络控制器。 - **OpenPhish、CINS Army、Tor 出口列表等** – 利用钓鱼、扫描和匿名器指标扩展覆盖范围。 每个源都可通过 `sources.yml` 进行配置,允许团队根据需要微调收集频率、回溯窗口和身份验证。 ## 🎯 用例与 SEO 友好关键词 SwiftIOC 支持广泛的网络安全自动化工作流。常见用例包括: - **安全运营中心 (SOC) 自动化** – 安排 IOC 收集作业,使 SIEM 和 IDS 规则与开源威胁情报保持同步。 - **数字取证与事件响应 (DFIR)** – 导出经过失效处理的指标以用于调查,而不会有意外激活的风险。 - **DevSecOps 流水线** – 将威胁源丰富化集成到 CI/CD、GitOps 或基础设施即代码项目中。 - **威胁搜寻手册** – 生成可供 MISP、OpenCTI 和其他 CTI 平台使用的 STIX 2.1 包。 - **合规性报告与高管仪表板** – 利用 Markdown 和 JSON 诊断信息生成对利益相关者友好的报告。 提高可发现性的关键词:“automated threat intelligence collector”(自动化威胁情报收集器)、“open source IOC feed aggregator”(开源 IOC 源聚合器)、“Python threat hunting toolkit”(Python 威胁搜寻工具包)、“cyber threat intelligence automation”(网络威胁情报自动化)、“STIX export for SOC”(用于 SOC 的 STIX 导出)和“GitHub Actions threat feed workflow”(GitHub Actions 威胁源工作流)。 ## 🗂️ 仓库布局 ``` ├── public/ # Default output directory for generated feeds │ ├── iocs/ # CSV, JSON, JSONL, TSV, and STIX artifacts │ ├── diagnostics/ # Run report, JSON diagnostics, and auto summary │ └── changelog/ # Markdown changelog between runs ├── scripts/ # Utility helpers for post-processing │ └── summarize_iocs.py # Generates Markdown summaries for Pages & artifacts ├── requirements.txt # Python dependencies ├── sources.example.yml # Sample feed configuration ├── swiftioc.py # Main collector implementation & CLI ├── index.html # Optional GitHub Pages entry point ├── README.md # This document └── SECURITY.md # Security reporting policy ``` ## 🧠 工作原理 1. **加载配置** – `swiftioc.py` 读取 `sources.yml`(必要时回退到 `sources.example.yml`)并设置日志记录、用户代理和输出目录。 2. **按源收集** – 每个 API 或 RSS 源被路由到通过 `@register_parser` 注册的解析器,该解析器获取原始源数据并将其转换为 `Indicator` 对象。 3. **去重与过滤** – 指标根据配置的回溯窗口进行合并、去重和过滤。 4. **发布输出** – 所有格式、诊断信息和更新日志条目都写入所选的输出目录下。 ## 🏁 快速入门 前置条件: - Python 3.10 或更新版本(在 Linux 和 GitHub Actions 上使用 CPython 测试) - 用于依赖项管理的 `pip` ``` # 克隆并进入仓库 git clone https://github.com/PKHarsimran/SwiftIOC-Automated-Threat-Intelligence-Collector.git cd SwiftIOC-Automated-Threat-Intelligence-Collector # (可选)创建并激活虚拟环境 python -m venv .venv source .venv/bin/activate # Linux/macOS .venv\Scripts\activate # Windows PowerShell # 安装依赖项 pip install -r requirements.txt # 使用示例源运行收集器 python -m swiftioc --sources sources.example.yml --out-dir public ``` 工件将出现在 `public/` 下。添加 `--verbose` 以显示进度日志,或添加 `--self-test` 以在不访问网络的情况下运行内置健全性检查。 ## 🧾 配置源 创建一个 `sources.yml` 来描述你关心的源。该文件反映了 `sources.example.yml` 中的结构,并支持针对每个源的选项。`window_hours` 定义全局回溯窗口;可以使用 CLI 上的 `--source-window name=HOURS` 为单个源覆盖此设置。 ``` window_hours: 48 apis: - name: cisa_kev kind: json parse: kev url: https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json reference: https://www.cisa.gov/known-exploited-vulnerabilities-catalog - name: urlhaus_recent_urls kind: csv parse: urlhaus url: https://urlhaus.abuse.ch/downloads/csv_recent/ reference: https://urlhaus.abuse.ch/ # Optional filter supplied via --urlhaus-status rss: - name: google_tag url: https://blog.google/threat-analysis-group/rss/ reference: https://blog.google/threat-analysis-group/ ``` 每个解析器都可以接受在 `options:` 下定义的附加关键字参数。通过 Python 虚线路径支持自定义解析器(例如,`parse: my_package.parsers:parse_feed`)。 对于没有专用适配器的源,可以通过设置 `parse: universal` 回退到通用收集器。它将自动检测 JSON、CSV 或纯文本负载,发现常见的时间戳/标签字段,并通过用于 RSS 内容的相同启发式方法提取指标。 ## 📋 CLI 参考 运行 `python -m swiftioc --help` 获取开关的完整列表。要点: | 标志 | 用途 | | --- | --- | | `--out-dir PATH` | 写入工件的目录(默认为 `public/`)。 | | `--sources PATH` | YAML 配置(`sources.yml`,回退到 `sources.example.yml`)。 | | `--window-hours N` | 全局回溯窗口(以小时为单位)。 | | `--skip-rss` | 完全禁用 RSS 处理。 | | `--max-per-source N` | 限制从每个源获取的指标数量。 | | `--urlhaus-status {any,online,offline}` | 按状态过滤 URLhaus 指标。 | | `--source-window name=N` | 覆盖特定源的回溯窗口。 | | `--grace-on-404 name…` | 将列出源的 HTTP 404 视为非致命的空结果。 | | `--fail-on-empty name…` | 如果任何列出的源返回零个指标,则运行失败。 | | `--fail-if-stale name=N` | 当来自 `name` 的最新指标早于 `N` 小时时失败。 | | `--save-raw-dir PATH` | 保存原始源响应以供后续检查。 | | `--diag-json PATH` | 写入诊断 JSON(默认为 `public/diagnostics/run.json`)。 | | `--report PATH` | 写入 Markdown 运行报告(默认为 `public/diagnostics/REPORT.md`)。 | | `--ua-file PATH` | 提供自定义用户代理池(每行一个 UA)。 | | `--ci-safe` | CI 运行的便利标志(JSON 日志,确保诊断目录存在,容忍缺失的 RSS 依赖)。 | | `--self-test` | 在不获取源的情况下执行内置断言。 | | `-v/--verbose` | 增加控制台日志记录(`-vv` 用于调试)。 | | `--log-file PATH` | 将日志发送到文件。 | | `--log-format {text,json}` | 选择控制台/文件日志格式。 | | `--log-file-level LEVEL` | 控制文件日志级别(默认 `DEBUG`)。 | ## 📦 输出与诊断 收集器生成以下结构(路径相对于 `--out-dir`): ``` public/ ├── index.md ├── iocs/ │ ├── latest.csv │ ├── latest.tsv │ ├── latest.json │ ├── latest.jsonl │ └── stix2.json ├── changelog/ │ └── CHANGELOG.md └── diagnostics/ ├── REPORT.md ├── run.json ├── summary.md └── raw/ # present when --save-raw-dir is used ``` 诊断信息包括每个源的计数、重复统计信息、最早和最新时间戳以及任何记录的故障。这些摘要对于 CI 状态检查和仪表板非常有用。 ## 🌍 GitHub Pages 预览与发布 SwiftIOC 附带了一个适配 Pages 的仪表板,因此无需额外工具即可浏览收集的指标。该项目使用 `public/` 作为工件目录和发布的站点根目录: - `public/index.html` 使用 `swiftioc.py` 生成的 JSON/JSONL 输出呈现实时预览、源细分、标签计数和导出链接。 - 存储库根目录下的 `index.html` 提供了一个品牌着陆页,该页面在短暂延迟后重定向到 `public/`,同时提供用于手动导航的快速链接。 在 GitHub Pages 上发布: 1. 在本地或 CI 中运行收集器以填充 `public/`(参见 [快速入门](#-quick-start))。 2. 提交生成的工件或将其作为工作流工件上传(如 [在 GitHub Actions 中运行](#-running-in-github-actions) 所示)。 3. 启用 GitHub Pages 并选择 **GitHub Actions** 作为源,以便部署自动获取最新的 `public/` 输出。 仪表板通过按最新时间戳首先对预览行进行排序,然后按置信度排序来优先显示新鲜度,确保访问者在源顶部看到最新的 IOC。移动断点将预览表转换为卡片式行,以提供适合手机的体验,并且所有元数据都经过失效处理,以确保随意浏览时的安全性。 ## ⚙️ 在 GitHub Actions 中运行 SwiftIOC 在 GitHub Actions 内部运行良好,并生成可通过 GitHub Pages 发布的工件。以下工作流每小时收集一次 IOC 并部署 `public/`: ``` name: SwiftIOC – Threat Intel Collector on: schedule: - cron: "0 * * * *" # Run every hour workflow_dispatch: # Allow manual runs from the Actions tab permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: true jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - name: Install dependencies run: pip install -r requirements.txt - name: Collect recent IOCs run: python -m swiftioc --ci-safe --window-hours 48 --out-dir public - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: ./public deploy: environment: name: github-pages runs-on: ubuntu-latest needs: build steps: - id: deployment uses: actions/deploy-pages@v4 ``` `--ci-safe` 启用 JSON 日志记录,确保存在诊断目录,并在缺少可选 RSS 依赖项时抑制硬性失败。 ## 🧪 自动生成的 IOC 摘 辅助脚本 [`scripts/summarize_iocs.py`](scripts/summarize_iocs.py) 将诊断信息和 JSONL 输出转换为 Markdown 摘要。它在“Collect – SwiftIOC”工作流中自动运行,也可以手动执行: ``` python scripts/summarize_iocs.py \ --diag public/diagnostics/run.json \ --ioc-jsonl public/iocs/latest.jsonl ``` 覆盖 `--out` 或 `--index` 以控制摘要的写入位置。当存储库使用 GitHub Pages 发布时,`public/` 下的所有内容都会成为站点内容。 有关安全披露,请参阅 [SECURITY.md](SECURITY.md)。
标签:DevSecOps, ESC4, GitHub Actions, IOC收集, IP黑名单, JSON格式, Linux安全, OSINT, Python安全工具, SIEM集成, SOC工具, STIX 2.1, URL威胁源, 上游代理, 信标提取, 哈希校验, 威胁情报, 安全编排与自动化, 实时处理, 密码管理, 开发者工具, 指标失陷, 数据清洗, 漏洞发现, 网络安全, 自动化流水线, 自动笔记, 逆向工具, 隐私保护