sfc-gh-kkeller/security-ops-skill
GitHub: sfc-gh-kkeller/security-ops-skill
一套基于 Snowflake 和 Cortex AI 的安全运营技能,将数据仓库转化为具备自动威胁检测与自然语言调查能力的现代安全数据湖。
Stars: 0 | Forks: 0
# Cortex Code 的安全运营 AI 技能
一个全面的网络安全 AI 代理技能,将 Snowflake 转变为具有自动化威胁检测、事件响应和实时 SOC 仪表板的现代 Security Data Lake。
## 此技能的功能
此技能使 Cortex Code 能够充当 AI 驱动的安全分析师,能够:
- 使用 Dynamic Table 管道以亚分钟级延迟**检测威胁**
- 跨访问日志、查询历史和网络数据**搜寻异常**
- 通过针对安全日志的自然语言查询**调查事件**
- 构建具有亚秒级响应时间的 **SOC 仪表板**
- 通过 webhook、Slack 和工单集成**自动化响应**
## 业务成果
| 成果 | 实现方式 |
|---------|-------------------|
| **降低 MTTD** (平均检测时间) | 具有 1-5 分钟 TARGET_LAG 的 Dynamic Tables 用于持续检测 |
| **降低 MTTR** (平均响应时间) | 通过自然语言威胁搜寻进行 AI 辅助调查 |
| **降低 SIEM 成本** | 用 Snowflake 的基于消费的定价替代昂贵的 SIEM |
| **整合工具** | 用于日志、检测、仪表板和 ML 的单一平台 |
| **启用 Detection-as-Code** | 使用 dbt 和 CI/CD 进行版本控制的检测 |
| **实时可见性** | Interactive Tables + SPCS Streamlit 实现亚秒级仪表板 |
## 架构概览
```
┌─────────────────────────────────────────────────────────────────────────────────┐
│ Security Data Lake Architecture │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Cloud Logs │ │ EDR/XDR │ │ Identity │ │ Network │ │
│ │ (AWS/GCP/Az) │ │ (CrowdStrike)│ │ (Okta/Entra) │ │ (Firewall) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ └──────────────────┼──────────────────┼──────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │ INGESTION LAYER │ │
│ │ Snowpipe Streaming │ OpenFlow (NiFi) │ Kafka Connector │ REST API │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │ PROCESSING LAYER (Dynamic Tables) │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Stage 1 │───▶│ Stage 2 │───▶│ Stage 3 │───▶│ Alerts │ │ │
│ │ │ Normalize │ │ Enrich │ │ Detect │ │ & Actions │ │ │
│ │ │ (1 min lag) │ │ (2 min lag) │ │ (5 min lag) │ │ │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────┼──────────────────┬──────────────────┐ │
│ ▼ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Interactive │ │ Cortex │ │ Streamlit │ │ Webhooks │ │
│ │ Tables │ │ Agent │ │ Dashboard │ │ (PagerDuty) │ │
│ │ (Dashboard) │ │ (nanocortex)│ │ (SPCS) │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘
```
## 演示:端到端安全运营管道
`demo/` 文件夹包含一个完整、可运行的安全运营环境,您可以在 15 分钟内部署。按顺序运行脚本以构建功能齐全的威胁检测系统。
### 您将构建的内容
```
┌─────────────────────────────────────────────────────────────────────────────────┐
│ DEMO ARCHITECTURE │
│ │
│ 📊 5,000+ Normal Events 🔴 Injected Attack Patterns │
│ └─────────────────────────────┬───────────────────────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │ RAW TABLES │ │
│ │ • LOGIN_EVENTS (auth attempts) • QUERY_EVENTS (SQL activity) │ │
│ │ • NETWORK_EVENTS (firewall logs) │ │
│ └─────────────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Dynamic Table Pipeline │
│ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────────────────┐ │
│ │ STAGE 1 │ │ STAGE 2 │ │ STAGE 3: DETECTIONS │ │
│ │ Normalize │───▶│ Enrich with │───▶│ • Brute Force Alerts │ │
│ │ (1 min lag) │ │ Threat Intel │ │ • Credential Stuffing Alerts │ │
│ │ │ │ (2 min lag) │ │ • Impossible Travel Alerts │ │
│ └──────────────┘ └──────────────┘ │ • Data Exfiltration Alerts │ │
│ │ • Privilege Escalation Alerts │ │
│ └──────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────────┐ │
│ │ 📺 STREAMLIT SOC DASHBOARD │ │
│ │ Real-time metrics │ Alert table │ Severity charts │ Auto-refresh │ │
│ └────────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘
```
### 演示脚本概览
| 脚本 | 功能 | 创建的对象 | 时间 |
|--------|--------------|-----------------|------|
| **01_setup_security_schema.sql** | 创建数据库、schema、表和角色 | 1 个数据库、5 个 schema、6 个表、2 个角色 | 1 分钟 |
| **02_generate_demo_data.sql** | 用真实事件 + 攻击模式填充表 | 10,000+ 个事件,包含 5 种攻击类型 | 2 分钟 |
| **03_detection_pipeline.sql** | 构建 3 阶段 Dynamic Table 检测管道 | 9 个 Dynamic Tables、5 条检测规则 | 3 分钟 |
| **04_interactive_tables.sql** | 创建用于仪表板的高性能表 | 2 个 Interactive Tables、1 个 Hybrid Table | 2 分钟 |
| **05_streamlit_dashboard.py** | 具有自动刷新功能的实时 SOC 仪表板 | Streamlit 应用 (SPCS 或本地) | 5 分钟 |
### 脚本 1:设置安全 Schema
**文件:** `demo/01_setup_security_schema.sql`
**创建内容:**
```
SECURITY_OPS (Database)
├── RAW ← Landing zone for ingested logs
│ ├── LOGIN_EVENTS (auth attempts with geo-location)
│ ├── QUERY_EVENTS (SQL queries with metadata)
│ └── NETWORK_EVENTS (firewall/flow logs)
├── STAGING ← Normalized, cleaned data
├── ENRICHED ← Enriched with threat intel context
├── DETECTIONS ← Alert outputs from detection rules
└── REFERENCE ← Lookup tables
├── THREAT_INDICATORS (IOCs: malicious IPs, domains)
└── KNOWN_GOOD_IPS (allowlist for VPN, corporate)
```
**创建的角色:**
- `SECURITY_ANALYST` — 对所有安全数据的读取权限
- `SECURITY_ADMIN` — 对安全基础设施的完全控制权
### 脚本 2:生成演示数据
**文件:** `demo/02_generate_demo_data.sql`
**生成内容:**
| 数据类型 | 数量 | 描述 |
|-----------|--------|-------------|
| 正常登录 | 5,000 | 来自美国企业 IP 的成功登录 |
| 失败登录 | 500 | 随机失败尝试(输入错误、密码过期) |
| 正常查询 | 3,000 | 典型的 SELECT/INSERT/UPDATE 模式 |
| 威胁指标 | 100 | 已知恶意 IP、域、哈希值 |
**注入的攻击模式(用于检测测试):**
| 攻击 | 模式 | 表现形式 |
|--------|---------|-------------------|
| 🔴 **暴力破解** | 单个 IP 在 3 分钟内失败登录 50 次 | `185.220.101.42` → `USER_042` 且状态为 `INCORRECT_PASSWORD` |
| 🔴 **撞库攻击** | 1 个 IP 针对 25 个不同用户 | `45.227.255.99` 轮换使用不同用户名 |
| 🔴 **不可能的移动** | 从纽约登录,30 分钟后从莫斯科登录 | `USER_017` 以不可能的速度跨越 7,500 公里 |
| 🔴 **数据泄露** | 1 小时内扫描 200 GB 数据 | `USER_031` 从 `CUSTOMER_DB` 批量下载 |
| 🔴 **权限提升** | 向可疑用户授予 ACCOUNTADMIN 权限 | `GRANT ROLE ACCOUNTADMIN TO USER compromised_user` |
### 脚本 3:检测管道
**文件:** `demo/03_detection_pipeline.sql`
**3 阶段 Dynamic Table 架构:**
```
STAGE 1: NORMALIZATION (1 min lag)
┌─────────────────────────────────────────────────────────┐
│ DT_NORMALIZED_LOGINS │
│ • Standardize timestamps │
│ • Add time buckets (minute, hour, day) │
│ • Filter to 7-day rolling window │
├─────────────────────────────────────────────────────────┤
│ DT_NORMALIZED_QUERIES │
│ • Calculate GB scanned │
│ • Extract query metadata │
└─────────────────────────────────────────────────────────┘
│
▼
STAGE 2: ENRICHMENT (2 min lag)
┌─────────────────────────────────────────────────────────┐
│ DT_ENRICHED_LOGINS │
│ • JOIN with THREAT_INDICATORS (is_known_threat_ip) │
│ • JOIN with KNOWN_GOOD_IPS (is_corporate_ip) │
│ • Add threat_actor, threat_type, confidence_score │
├─────────────────────────────────────────────────────────┤
│ DT_ENRICHED_QUERIES │
│ • Flag queries from threat IPs │
│ • Tag sensitive data access │
└─────────────────────────────────────────────────────────┘
│
▼
STAGE 3: DETECTION (5 min lag)
┌─────────────────────────────────────────────────────────┐
│ DT_BRUTE_FORCE_ALERTS │
│ • Trigger: >5 failed logins per user per minute │
│ • Severity: 3-5 based on attempt count │
│ • MITRE: T1110 (Brute Force) │
├─────────────────────────────────────────────────────────┤
│ DT_CREDENTIAL_STUFFING_ALERTS │
│ • Trigger: 1 IP targeting 5+ unique users │
│ • Severity: 3-5 based on user count │
│ • MITRE: T1110.004 (Credential Stuffing) │
├─────────────────────────────────────────────────────────┤
│ DT_IMPOSSIBLE_TRAVEL_ALERTS │
│ • Trigger: >500km travel in <2 hours │
│ • Uses Haversine formula for distance │
│ • Filters: requires >800 km/h (faster than planes) │
│ • MITRE: T1078 (Valid Accounts) │
├─────────────────────────────────────────────────────────┤
│ DT_DATA_EXFILTRATION_ALERTS │
│ • Trigger: >50 GB scanned in 1 hour │
│ • Severity boost if from known threat IP │
│ • MITRE: T1567 (Exfiltration Over Web Service) │
├─────────────────────────────────────────────────────────┤
│ DT_PRIVILEGE_ESCALATION_ALERTS │
│ • Trigger: GRANT to ACCOUNTADMIN/SECURITYADMIN │
│ • Always severity 5 (critical) │
│ • MITRE: T1078.004 (Cloud Accounts) │
└─────────────────────────────────────────────────────────┘
```
**示例告警输出:**
```
SELECT * FROM DETECTIONS.DT_BRUTE_FORCE_ALERTS LIMIT 1;
```
| alert_id | alert_time | detection_name | severity | entity_id | description |
|----------|------------|----------------|----------|-----------|-------------|
| `abc-123` | `2024-01-15 14:32:00` | `BRUTE_FORCE_ATTEMPT` | `5` | `USER_042` | 检测到来自 IP 185.220.101.42 (俄罗斯) 针对用户 USER_042 的 50 次失败登录尝试 |
### 脚本 4:Interactive Tables
**文件:** `demo/04_interactive_tables.sql`
**创建内容:**
| 表 | 类型 | 用途 | 查询延迟 |
|-------|------|---------|---------------|
| `IT_ALERT_SUMMARY` | Interactive Table | 按严重程度统计的实时告警数 | <100ms |
| `IT_USER_RISK_SCORES` | Interactive Table | 每个用户的实时风险评分 | <100ms |
| `HT_CASE_MANAGEMENT` | Hybrid Table | 通过行级更新跟踪调查案例 | <50ms |
**Interactive Tables 支持:**
- 亚秒级仪表板查询(使用普通表需 2-5 秒)
- 24 小时最小自动挂起仓库(专用计算)
- CLUSTER BY 用于优化的点查询
**Hybrid Tables 支持:**
- 用于案例管理的行级 UPDATE/DELETE
- 强制 PRIMARY KEY 约束
- 与分析并存的 OLTP 风格工作负载
### 脚本 5:Streamlit SOC 仪表板
**文件:** `demo/05_streamlit_dashboard.py`
**展示内容:**
```
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 🔒 Security Operations Center Auto-refresh: 30s │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 🔴 CRITICAL │ │ 🟠 HIGH │ │ 🟡 MEDIUM │ │ 🟢 LOW │ │
│ │ 3 │ │ 7 │ │ 12 │ │ 25 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ ALERTS BY TYPE (24h) │ │
│ │ ████████████████████████ Brute Force (15) │ │
│ │ ████████████████ Credential Stuffing (12) │ │
│ │ ██████████ Impossible Travel (8) │ │
│ │ ████████ Data Exfiltration (6) │ │
│ │ ████ Privilege Escalation (3) │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ RECENT ALERTS [▼] │ │
│ ├──────────┬────────────────────────┬──────────┬─────────────────────────┤ │
│ │ Severity │ Detection │ Entity │ Description │ │
│ ├──────────┼────────────────────────┼──────────┼─────────────────────────┤ │
│ │ 🔴 5 │ IMPOSSIBLE_TRAVEL │ USER_017 │ NYC → Moscow in 30 min │ │
│ │ 🔴 5 │ PRIVILEGE_ESCALATION │ USER_099 │ GRANT ACCOUNTADMIN │ │
│ │ 🟠 4 │ BRUTE_FORCE_ATTEMPT │ USER_042 │ 50 failed logins │ │
│ │ 🟠 4 │ DATA_EXFILTRATION │ USER_031 │ 200 GB scanned │ │
│ │ 🟡 3 │ CREDENTIAL_STUFFING │ 45.227.* │ 25 users targeted │ │
│ └──────────┴────────────────────────┴──────────┴─────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ TOP RISKY USERS │ │
│ │ USER_042 ████████████████████████████████████████ Risk: 95 │ │
│ │ USER_017 ██████████████████████████████ Risk: 78 │ │
│ │ USER_031 ████████████████████████ Risk: 65 │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────────┘
```
**仪表板功能:**
- 使用 `st.fragment(run_every=30)` 每 30 秒**自动刷新**(需要 SPCS)
- 带颜色编码 KPI 卡片的**严重性指标**
- 按检测类型分类的**告警细分**
- **向下钻取**至包含完整证据 JSON 的告警详情
- 从所有检测聚合的每个用户的**风险评分**
### 运行演示
**步骤 1:执行 SQL 脚本**
```
-- Run in Snowflake worksheet (in order)
-- 1. Setup (run as ACCOUNTADMIN)
!source demo/01_setup_security_schema.sql
-- 2. Generate data
!source demo/02_generate_demo_data.sql
-- 3. Create detection pipeline
!source demo/03_detection_pipeline.sql
-- 4. Create Interactive Tables (optional, Enterprise+ required)
!source demo/04_interactive_tables.sql
```
**步骤 2:验证生成的告警**
```
-- Check that attacks were detected
SELECT detection_name, COUNT(*), MAX(severity)
FROM SECURITY_OPS.DETECTIONS.DT_BRUTE_FORCE_ALERTS
GROUP BY detection_name
UNION ALL
SELECT detection_name, COUNT(*), MAX(severity)
FROM SECURITY_OPS.DETECTIONS.DT_CREDENTIAL_STUFFING_ALERTS
GROUP BY detection_name
UNION ALL
SELECT detection_name, COUNT(*), MAX(severity)
FROM SECURITY_OPS.DETECTIONS.DT_IMPOSSIBLE_TRAVEL_ALERTS
GROUP BY detection_name;
```
**预期输出:**
| detection_name | count | max_severity |
|----------------|-------|--------------|
| BRUTE_FORCE_ATTEMPT | 3 | 5 |
| CREDENTIAL_STUFFING | 2 | 4 |
| IMPOSSIBLE_TRAVEL | 1 | 5 |
**步骤 3:启动仪表板**
```
# 本地开发
cd demo
streamlit run 05_streamlit_dashboard.py
# 或部署到 SPCS 用于生产环境并支持 auto-refresh
```
## 核心能力
### 威胁检测模式
| 检测 | 技术 | MITRE ATT&CK |
|-----------|-----------|--------------|
| 暴力破解 | 每分钟失败登录次数 > 阈值 | T1110 |
| 撞库攻击 | 同一 IP 对应多个用户 | T1110.004 |
| 不可能的移动 | 来自遥远地点的登录 | T1078 |
| 权限提升 | 向敏感角色授予角色权限 | T1078.004 |
| 数据泄露 | 异常的数据导出量 | T1567 |
| 异常查询 | 偏离基线行为 | T1213 |
### 实时基础设施选项
| 组件 | 用例 | 延迟 |
|-----------|----------|---------|
| **Dynamic Tables** | 检测管道 | 1-5 分钟 |
| **Interactive Tables** | 仪表板查询 | 亚秒级 |
| **Hybrid Tables** | 案例管理、IOC 跟踪 | 毫秒级 |
| **Kafka Connector** | 高频日志摄取 | 毫秒级 |
| **SPCS Streamlit** | 实时 SOC 仪表板 | 亚秒级 |
### 集成选项
- **SIEM**: Splunk (DB Connect)、Sentinel、Chronicle
- **SOAR**: Tines、Torq、Palo Alto XSOAR
- **工单系统**: ServiceNow、Jira、PagerDuty
- **通讯工具**: Slack、Teams、Email
- **威胁情报**: MISP、VirusTotal、AbuseIPDB
## 文件结构
```
security_ops_skill/
├── README.md # This file
├── SKILL.md # Full skill knowledge base (~3600 lines)
└── demo/
├── 01_setup_security_schema.sql # Database, schemas, tables, roles
├── 02_generate_demo_data.sql # 10,000+ events with attack patterns
├── 03_detection_pipeline.sql # 9 Dynamic Tables, 5 detections
├── 04_interactive_tables.sql # Sub-second query tables
└── 05_streamlit_dashboard.py # Real-time SOC dashboard
```
## 需求
- Snowflake Enterprise Edition 或更高版本
- 用于设置的 ACCOUNTADMIN 或 SECURITYADMIN 角色
- 访问 SNOWFLAKE.ACCOUNT_USAGE schema 的权限
- Cortex Code 用于 AI 辅助分析
## 资源
- [Dynamic Tables 文档](https://docs.snowflake.com/en/user-guide/dynamic-tables-about)
- [Interactive Tables 文档](https://docs.snowflake.com/en/user-guide/interactive)
- [MITRE ATT&CK 框架](https://attack.mitre.org/)
- [nanocortex - 自定义 Cortex 代理](https://github.com/sfc-gh-kkeller/nanocortex)
## 许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
**AI 驱动的安全运营** | 由 Cortex Code 提供支持
标签:AI 智能体, AMSI绕过, CISA项目, Cortex Code, dbt, Detection-as-Code, DevSecOps, DLL 劫持, GPT, Kubernetes, Log Analytics, MTTD, MTTR, PE 加载器, Security Operations, SIEM 替代, Snowflake, 上游代理, 代码示例, 入侵检测系统, 动态表, 多线程, 大语言模型, 威胁检测, 安全数据湖, 安全运营中心, 实时仪表盘, 异常检测, 数据分析, 数据管道, 漏洞管理, 网络安全, 网络安全审计, 网络映射, 自动化响应, 自然语言查询, 软件工程, 逆向工具, 隐私保护