hmiezan/SOC-automation-pipeline-built-with-StackStorm-Python-and-VirusTotal

GitHub: hmiezan/SOC-automation-pipeline-built-with-StackStorm-Python-and-VirusTotal

基于 StackStorm 与 Python 构建的 SOC 自动化流水线,自动从告警中提取 IP 并经 VirusTotal 富化后以 HTML 邮件通知安全团队。

Stars: 0 | Forks: 0

# SOC IP 富化与自动化告警 Pipeline 一个使用 StackStorm、Python 和 VirusTotal 构建的端到端安全自动化工作流 通过从原始告警中提取 IP 地址,使用实时威胁情报对其进行富化,并将结构化的 HTML 通知直接发送给 SOC 团队,从而实现整个告警分类处理流程的自动化。 本项目展示了实用的安全自动化工程:自定义 pack 开发、API 集成、工作流编排以及自动化告警交付。 ## 概述 本项目的目标是构建一个完全自动化的富化和告警 pipeline,能够实现: - 从原始告警中提取特征码(IP 地址) - 使用 VirusTotal 对其进行富化 - 生成结构化情报 - 向 SOC 团队发送 HTML 格式的告警 - 在隔离的实验室环境中运行(VLAN 90 用于 SOAR,VLAN 200 用于分析师工作站) 本项目模拟了企业环境中使用的真实 SOC 自动化工作流。 ## 项目结构 ### A- SOAR 平台设置 (StackStorm) - 在 VLAN 90 中的专用机器上安装了 StackStorm - 配置了系统服务、runner 和 pack 目录 - 验证了 SOAR、Proxmox 和分析师工作站之间的连接性 - 确保了安全的访问路径(SOAR 被隔离,分析师通过 Proxmox/DC 进行访问) image ### 1. 创建自定义 StackStorm Pack (my_pack) image - 在 /opt/stackstorm/packs/ 下初始化了一个新的 pack 目录 - 添加了所需的元数据 (pack.yaml) - 为 actions、workflows 和 configs 创建了文件夹结构 ### 2. 开发用于 IP 提取和 VirusTotal 富化的 Python Action - 编写了 enrich_ip.py 以实现: - 解析告警字符串 - 提取 IP 地址 - 使用 API key 查询 VirusTotal - 返回结构化的 JSON 富化数据 - 注册了 action 并验证了执行情况 此 action 返回 return ### 3. 构建工作流 (enrich_ip_flow.yaml) - 设计了一个多步骤工作流,用于: - 接收告警 + API key - 运行富化 action - 将结果发布到工作流上下文中 - 发送 HTML 电子邮件通知 - 为动态字段实现了 Jinja 模板 ### 4. 安装和配置 Email Pack - 安装了 email pack > /opt/stackstorm/configs/email.yaml - 创建了一个包含以下内容的有效 email.yaml: - smtp_accounts - imap_accounts - Gmail App Password - TLS 设置 - 修复了 schema 验证错误 - 修正了缩进 (chown st2:st2, chmod 600)、权限和行尾符 成功注册了配置 最终的工作配置并使用 st2 run email.send_email ... 验证了电子邮件 Email ### 5. 构建工作流 (enrich_ip_flow) 我的工作流: - 接收告警 + API key - 提取并富化 IP - 发布富化结果 - 发送 HTML 电子邮件 最终的工作流: #########yaml ############### version: 1.0 description: > SOC workflow that extracts an IP from an alert and enriches it using VirusTotal. input: - alert - vt_api_key vars: - enrichment: null tasks: extract_and_enrich: action: my_pack.enrich_ip input: alert: <% ctx().alert %> vt_api_key: <% ctx().vt_api_key %> next: - when: <% succeeded() and result() %> publish: - enrichment: <% result() %> do: - notify_email notify_email: action: email.send_email input: email_from: "soc-alerts@dct-ltd.com" email_to: - "hmiezan@gmail.com" subject: "SOC Alert: <% ctx().enrichment.result.extracted_ip %>" message: | SOC Alert

SOC Alert Enrichment

IP: <% ctx().enrichment.result.extracted_ip %>

Reputation: <% ctx().enrichment.result.vt_enrichment.reputation %>

Country: <% ctx().enrichment.result.vt_enrichment.country %>

ASN: <% ctx().enrichment.result.vt_enrichment.as_owner %>

Malicious: <% ctx().enrichment.result.vt_enrichment.last_analysis_stats.malicious %>

Suspicious: <% ctx().enrichment.result.vt_enrichment.last_analysis_stats.suspicious %>

Harmless: <% ctx().enrichment.result.vt_enrichment.last_analysis_stats.harmless %>

account: "gmail" mime: "html" ### 6. 端到端测试 st2 run my_pack.enrich_ip_flow alert="ET MALWARE Possible Malicious Traffic from 185.220.101.4" vt_api_key="XXXX" image
标签:Python, SOAR, StackStorm, 威胁情报, 开发者工具, 无后门, 自动化剧本, 逆向工具