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 进行访问)
### 1. 创建自定义 StackStorm Pack (my_pack)
- 在 /opt/stackstorm/packs/ 下初始化了一个新的 pack 目录
- 添加了所需的元数据 (pack.yaml)
- 为 actions、workflows 和 configs 创建了文件夹结构
### 2. 开发用于 IP 提取和 VirusTotal 富化的 Python Action
- 编写了 enrich_ip.py 以实现:
- 解析告警字符串
- 提取 IP 地址
- 使用 API key 查询 VirusTotal
- 返回结构化的 JSON 富化数据
- 注册了 action 并验证了执行情况
此 action 返回
### 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 ... 验证了电子邮件
### 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
### 1. 创建自定义 StackStorm Pack (my_pack)
- 在 /opt/stackstorm/packs/ 下初始化了一个新的 pack 目录
- 添加了所需的元数据 (pack.yaml)
- 为 actions、workflows 和 configs 创建了文件夹结构
### 2. 开发用于 IP 提取和 VirusTotal 富化的 Python Action
- 编写了 enrich_ip.py 以实现:
- 解析告警字符串
- 提取 IP 地址
- 使用 API key 查询 VirusTotal
- 返回结构化的 JSON 富化数据
- 注册了 action 并验证了执行情况
此 action 返回
### 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 ... 验证了电子邮件
### 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 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"
标签:Python, SOAR, StackStorm, 威胁情报, 开发者工具, 无后门, 自动化剧本, 逆向工具