bad-antics/vortex

GitHub: bad-antics/vortex

基于 Julia 的高性能威胁情报融合引擎,实时聚合 50+ 源的 IOC 并提供机器学习分析、威胁狩猎和多种检测规则导出能力。

Stars: 3 | Forks: 0

# 🌀 Vortex **实时威胁情报融合引擎** [![Julia](https://img.shields.io/badge/Julia-1.10+-9558B2?style=for-the-badge&logo=julia&logoColor=white)](https://julialang.org/) [![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](LICENSE) [![Security](https://img.shields.io/badge/Security-Threat%20Intel-red?style=for-the-badge)](https://github.com/nullsec-security/vortex) Vortex 是一个用 Julia 编写的高性能威胁情报融合平台。它实时聚合、关联并分析来自 50 多个威胁情报源的入侵指标 (IOC),为安全团队提供可操作的情报。 ## ✨ 功能特性 ### 🔍 **多源情报聚合** - **50+ 预配置源**:AlienVault OTX、Abuse.ch (URLhaus, Feodo, Bazaar)、MISP、VirusTotal、Shodan、Censys、Spamhaus、OpenPhish、PhishTank 等 - **19 种 IOC 类型**:IP、Domain、URL、MD5/SHA1/SHA256、Email、CVE、JA3、CIDR、Bitcoin 地址、YARA 规则等 - **自动去重**:通过置信度评分智能合并来自多个来源的 IOC - **限速轮询**:通过可配置的轮询间隔遵守 API 限制 ### 🧠 **高级分析** - **威胁关联**:7 条内置关联规则用于识别相关威胁 - **基于 ML 的聚类**:使用 K-means 聚类对相似威胁进行分组 - **异常检测**:使用基于距离的检测方法识别异常 IOC - **威胁评分**:带有衰减和来源信誉的加权评分模型 - **归属预测**:基于 IOC 特征预测威胁行为者归属 ### 🎯 **威胁狩猎** - **预定义狩猎查询**:C2、勒索软件、APT、钓鱼、挖矿 - **自定义狩猎规则**:创建带有告警的自动化狩猎 - **时间线分析**:随时间追踪威胁活动 - **模式匹配**:基于正则表达式的 IOC 值搜索 ### 🔔 **告警系统** - **基于规则的告警**:为高风险 IOC、特定类别或模式配置告警 - **严重性级别**:严重、高、中、低、信息 - **Webhook 通知**:Slack、Teams、Discord 和自定义 Webhook - **告警管理**:确认、调查、解决或升级 ### 📊 **富化** - **GeoIP 查询**:位置、ASN、ISP 信息 - **WHOIS 数据**:域名注册详情 - **DNS 解析**:A、AAAA、MX、TXT、NS 记录 - **信誉评分**:VirusTotal、AbuseIPDB、Shodan ### 📤 **导出格式** - **STIX 2.1**:标准威胁情报格式 - **MISP**:事件和属性导出 - **检测规则**:Snort、Suricata、YARA、Sigma - **数据格式**:CSV、JSON ## 🚀 快速开始 ### 安装 ``` using Pkg Pkg.add(url="https://github.com/nullsec-security/vortex") ``` ### 基本用法 ``` using Vortex # 创建威胁情报引擎 engine = create_vortex_engine() # 添加威胁源 add_feed!(engine, urlhaus_feed()) add_feed!(engine, feodo_tracker_feed()) add_feed!(engine, alienvault_otx_feed("YOUR_API_KEY")) add_feed!(engine, spamhaus_drop_feed()) # 启动引擎 (开始轮询源) start!(engine) # 搜索 IOC results = search_ioc(engine, "8.8.8.8") for ioc in results println("Found: $(ioc.value) - Risk: $(ioc.risk_score)") end # 批量检查 iocs_to_check = ["192.168.1.1", "malware.example.com", "suspicious.ru"] matches = search_bulk(engine, iocs_to_check) # 检查引擎状态 status(engine) ``` ### 威胁狩猎 ``` # 快速搜寻 result = threat_hunt(engine, "cobalt") # 搜寻 C2 基础设施 query = hunt_c2_infrastructure() c2_result = execute_hunt(engine, query) # 搜寻近期高风险威胁 query = hunt_recent_threats(24) # Last 24 hours recent = execute_hunt(engine, query) # 自定义搜寻查询 custom_query = create_hunt_query( name="My Hunt", ioc_types=[IOC_IP, IOC_DOMAIN], tags=["ransomware", "c2"], min_risk_score=60.0, date_from=now() - Day(7) ) result = execute_hunt(engine, custom_query) # 生成报告 report = export_hunt_report(result; detailed=true) println(report) ``` ### 告警 ``` # 添加默认告警规则 for rule in default_alert_rules() add_alert_rule!(engine, rule) end # 创建自定义告警规则 my_rule = create_alert_rule( name="Critical Ransomware", alert_type=ALERT_IOC_MATCH, severity=ALERT_CRITICAL, tags=["ransomware", "lockbit", "blackcat"], min_risk_score=70.0, notify_webhook=["https://hooks.slack.com/services/..."] ) add_alert_rule!(engine, my_rule) # 检查告警 alerts = get_alerts(engine) for alert in alerts println("$(alert.severity): $(alert.title)") end # 确认告警 acknowledge_alert!(alerts[1]; by="analyst@company.com") # 解决告警 resolve_alert!(alerts[1]; by="analyst@company.com", notes="Confirmed false positive - internal testing" ) ``` ### 分析 ``` # 关联分析 iocs = collect(values(engine.iocs)) correlations = correlate_iocs(iocs[1:100]) for corr in correlations println("Correlated: $(corr.source_ioc) <-> $(length(corr.related_iocs)) IOCs") end # 构建关联图 graph = build_graph(iocs) components = find_components(graph) centrality = calculate_centrality(graph) # 聚类 clusters = cluster_threats(engine; k=10) for cluster in clusters println("$(cluster.label): $(cluster.size) IOCs, avg risk: $(cluster.avg_score)") end # 异常检测 anomalies = detect_anomalies(engine; contamination=0.1) for anom in anomalies[1:10] println("Anomaly score: $(anom.anomaly_score) - $(anom.explanation)") end # 威胁评分 model = ScoringModel() for ioc in iocs[1:10] score = score_ioc(ioc, model) println("$(ioc.value): $(score.score) ($(score.risk_level))") end ``` ### 富化 ``` # 创建丰富化提供商 providers = [ geoip_provider(), virustotal_enrichment_provider("YOUR_VT_API_KEY"), abuseipdb_provider("YOUR_ABUSEIPDB_KEY") ] # 丰富化 IOC ioc = get_ioc(engine, "192.168.1.1") enriched = full_enrich(ioc; providers=providers) # 访问丰富化数据 if enriched.geoip !== nothing println("Location: $(enriched.geoip.city), $(enriched.geoip.country_name)") println("ASN: $(enriched.geoip.asn) - $(enriched.geoip.org)") end for rep in enriched.reputation println("$(rep.source): $(rep.score) ($(rep.detection_count) detections)") end ``` ### 导出 ``` # 导出为 STIX 2.1 stix_bundle = export_stix(iocs) write("threat_intel.stix.json", stix_bundle) # 导出为 MISP misp_event = export_misp(iocs; event_info="Weekly IOC Export") write("threat_intel.misp.json", misp_event) # 导出为 CSV csv_data = export_csv(iocs) write("iocs.csv", csv_data) # 导出为检测规则 snort_rules = export_snort(iocs) suricata_rules = export_suricata(iocs) yara_rules = export_yara(iocs) sigma_rules = export_sigma(iocs) # 带过滤导出 config = ExportConfig( FORMAT_STIX, true, # include_metadata false, # include_enrichment true, # pretty_print 5000, # max_items true, # stix_bundle false, # misp_galaxy ',', # csv_delimiter 0.5, # min_confidence 50.0, # min_risk_score [IOC_IP, IOC_DOMAIN] # ioc_types ) filtered_export = export_stix(iocs; config=config) ``` ### 存储 ``` # 创建情报库 store = create_intel_store() # 存储 IOC store_ioc!(store, ioc) store_iocs!(store, iocs) # 查询库 query = create_query( ioc_types=[IOC_IP], min_risk_score=50.0, tags=["c2", "malware"], sort_by=:risk_score, limit=100 ) results = execute_query(store, query) # 保存到磁盘 save_store(store, "intel_store.json") # 从磁盘加载 store = load_store("intel_store.json") # 获取统计数据 stats = store_stats(store) println("Total IOCs: $(stats["total_iocs"])") println("Risk distribution: $(stats["risk_distribution"])") ``` ## 📋 支持的 IOC 类型 | 类型 | 描述 | 示例 | |------|-------------|---------| | `IOC_IP` | IPv4 地址 | `192.168.1.1` | | `IOC_IP_V6` | IPv6 地址 | `2001:db8::1` | | `IOC_DOMAIN` | 域名 | `malware.example.com` | | `IOC_URL` | 完整 URL | `https://evil.com/malware.exe` | | `IOC_HASH_MD5` | MD5 哈希 | `d41d8cd98f00b204e9800998ecf8427e` | | `IOC_HASH_SHA1` | SHA1 哈希 | `da39a3ee5e6b4b0d3255bfef95601890afd80709` | | `IOC_HASH_SHA256` | SHA256 哈希 | `e3b0c44298fc1c149afbf4c8996fb924...` | | `IOC_EMAIL` | 电子邮件地址 | `attacker@evil.com` | | `IOC_CVE` | CVE 标识符 | `CVE-2024-1234` | | `IOC_JA3` | JA3 指纹 | `3b5074b1b5d032e5620f69f9f700ff0e` | | `IOC_JA3S` | JA3S 指纹 | 服务器 JA3 指纹 | | `IOC_CIDR` | CIDR 范围 | `192.168.0.0/24` | | `IOC_BITCOIN` | 比特币地址 | `1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa` | | `IOC_FILENAME` | 文件名 | `malware.exe` | | `IOC_FILEPATH` | 文件路径 | `C:\Windows\System32\evil.dll` | | `IOC_REGISTRY` | 注册表键 | `HKLM\Software\Malware` | | `IOC_MUTEX` | 互斥体名称 | `Global\EvilMutex` | | `IOC_USER_AGENT` | User Agent 字符串 | 浏览器/恶意软件签名 | | `IOC_YARA` | YARA 规则名称 | `rule_malware_family` | ## 🔌 支持的情报源 ### 预配置 | 提供商 | 情报源 | 数据 | |----------|------|------| | **Abuse.ch** | URLhaus | 恶意 URL | | **Abuse.ch** | Feodo Tracker | 银行木马 C2 | | **Abuse.ch** | Malware Bazaar | 恶意软件样本 | | **Abuse.ch** | SSL Blocklist | 恶意 SSL 证书 | | **AlienVault** | OTX | 多类型 IOC | | **Spamhaus** | DROP | IP 黑名单 | | **Emerging Threats** | IPs | 恶意 IP | | **Blocklist.de** | IPs | 攻击 IP | | **OpenPhish** | Phishing | 钓鱼 URL | | **PhishTank** | Phishing | 已验证钓鱼 | | **VirusTotal** | API | 文件/URL/IP 分析 | | **Shodan** | API | 互联网扫描 | | **Censys** | API | 互联网扫描 | | **MISP** | Custom | 威胁共享 | ### 添加自定义情报源 ``` # 创建自定义源 my_feed = custom_feed( name="My Internal Feed", url="https://internal.company.com/iocs.json", api_key="...", format="json", poll_interval=300 ) add_feed!(engine, my_feed) ``` ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ Vortex Engine │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ Feeds │ │ Analysis │ │ Alerting │ │ │ │ │ │ │ │ │ │ │ │ • OTX │ │ • Scoring │ │ • Rule Engine │ │ │ │ • Abuse.ch │ │ • Correlation│ │ • Notifications │ │ │ │ • MISP │ │ • Clustering │ │ • Webhook/Email │ │ │ │ • VirusTotal │ │ • Anomaly │ │ │ │ │ │ • Shodan │ │ • Attribution│ │ │ │ │ │ • Custom │ │ │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ IOC Store │ │ │ │ • 19 IOC Types • Indexing • Deduplication • Querying │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │ │ │ Enrichment │ │ Hunting │ │ Export │ │ │ │ │ │ │ │ │ │ │ │ • GeoIP │ │ • Queries │ │ • STIX 2.1 │ │ │ │ • WHOIS │ │ • Rules │ │ • MISP │ │ │ │ • DNS │ │ • Reports │ │ • Snort/Suricata │ │ │ │ • Reputation │ │ │ │ • YARA/Sigma │ │ │ └──────────────┘ └──────────────┘ └──────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 📈 性能 Vortex 专为高性能威胁情报处理而设计: - **IOC 摄取**:100,000+ IOC/秒 - **搜索**:通过索引实现亚毫秒级查找 - **关联**:针对大型数据集的并行处理 - **内存**:具有可配置限制的高效存储 - **可扩展性**:支持数百万个 IOC ## 🔒 安全注意事项 - API 密钥仅存储在内存中(不记录日志) - 支持所有情报源连接的 TLS - 速率限制防止 API 滥用 - 未加密情况下不会将敏感数据写入磁盘 ## 🤝 贡献 欢迎贡献!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解指南。 ## 📄 许可证 MIT 许可证 - 详情请参阅 [LICENSE](LICENSE)。 ## 🙏 致谢 - [Abuse.ch](https://abuse.ch/) 提供出色的威胁情报源 - [AlienVault OTX](https://otx.alienvault.com/) 提供威胁情报 - [MISP Project](https://www.misp-project.org/) 提供威胁共享标准 - Julia 社区提供了如此 amazing 的语言 **Vortex** - *将秩序带入混乱的威胁情报世界* [NullSec Security](https://github.com/nullsec-security) 项目的一部分。
标签:Apex, DAST, HTTP/HTTPS抓包, IOC关联分析, Julia, TIP平台, 入侵指标, 威胁情报, 威胁评分, 安全大数据, 安全运营, 实时威胁检测, 开发者工具, 异常检测, 态势感知, 恶意软件分析, 情报融合, 扫描框架, 攻击归因, 机器学习, 欺诈检测, 网络安全, 隐私保护, 高速数据处理