toyedeji/elk-soc-demo
GitHub: toyedeji/elk-soc-demo
一个基于 ELK Stack 的安全运营中心演示环境,内置 MITRE ATT&CK 映射的事件模拟器和预配置的 Kibana 仪表盘,帮助用户快速搭建安全监控可视化实验室。
Stars: 1 | Forks: 0
# ELK SOC 演示
一个功能齐全的安全运营中心(SOC)演示环境
基于 Elastic Stack 8.17 构建,并配备了一个自定义的、映射到 MITRE ATT&CK 的
安全事件模拟器。在 Proxmox LXC 测试实验室中构建并验证。
## 功能简介
- 部署一个包含 5 个容器的 ELK 技术栈:Elasticsearch、Kibana、Logstash、
Filebeat 和 Metricbeat
- 通过 Filebeat 接入真实的宿主机/容器日志
- 通过自定义的 Python 模拟器接入模拟的安全事件
- 将所有事件映射到 MITRE ATT&CK 战术和技术
- 提供预构建的 Kibana 安全运营中心仪表盘
(包含 5 个 Lens 可视化图表,通过 API 进行配置)
## 模拟的攻击类型
- 暴力破解
- 端口扫描
- Web 漏洞利用
- 权限提升
- 横向移动
- DNS 隧道
- 恶意软件下载
- 数据泄露
## Kibana 仪表盘
由 `scripts/setup_kibana_dashboards.py` 配置为一个单一的
“🛡️ 安全运营中心 — ELK 演示”仪表盘,包含:
- 按严重程度划分的事件 — 环形图
- 事件类型分布 — 华夫饼图
- MITRE ATT&CK 战术 — 矩形树图
- 随时间变化的安全事件 — 堆叠柱状时间线
- 攻击源 IP 排名 — 水平柱状图
Logstash pipeline 为每个事件加入了 GeoIP 数据,因此
在 Kibana Lens 中只需一行代码即可为仪表盘扩展地图面板。
## 架构
```
┌──────────────────────────────────────────────────────────────────────┐
│ Proxmox LXC container (8 GB RAM, 4 cores) │
│ │
│ ┌───────────────┐ ┌────────────┐ ┌──────────┐ ┌────────────┐ │
│ │ Elasticsearch │◄──│ Logstash │◄──│ Filebeat │ │ Metricbeat │ │
│ │ 2 GB │ │ 512 MB │ │ host + │ │ host + │ │
│ │ single-node │ │ 3 inputs │ │ docker │ │ docker │ │
│ └───────┬───────┘ └──────┬─────┘ └──────────┘ └──────┬─────┘ │
│ │ ▲ │ │
│ │ │ │ │
│ │ TCP 5515 (JSON lines) │ │
│ │ │ │ │
│ │ ┌───────┴────────────┐ │ │
│ │ │ security_event_ │ │ │
│ │ │ simulator.py │ │ │
│ │ │ (MITRE-mapped) │ │ │
│ │ └────────────────────┘ │ │
│ ▼ ▼ │
│ ┌───────────────┐ │
│ │ Kibana │◄─── setup_kibana_dashboards.py (Kibana API) │
│ │ port 5601 │ │
│ └───────────────┘ │
│ │
│ Data flow: │
│ • Real logs: Filebeat/Metricbeat → Logstash → ES (grok + GeoIP) │
│ • Sim events: simulator → TCP 5515 → Logstash → ES │
└──────────────────────────────────────────────────────────────────────┘
```
Logstash pipeline(`logstash/pipeline/main.conf`)具有三个输入源
(端口 5044 的 Beats,端口 5514 的 UDP/TCP syslog,端口 5515 的 JSON),
包含用于 SSH 认证 / sudo / 通用 syslog 的 grok 模式,为每个
`src_ip` 进行 GeoIP 丰富,并按日志类型进行索引路由(`security-events-*`、
`syslog-*`、`filebeat-*`、`metricbeat-*`)。
## 快速开始
### 1. 创建 LXC 容器(在 Proxmox 宿主机上)
```
pct create 300 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname elk-demo \
--memory 8192 --swap 2048 --cores 4 \
--rootfs local-lvm:50 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--features nesting=1,keyctl=1 \
--unprivileged 0 --start 1
# 在 Proxmox HOST 上(不在 CT 内部)— Elasticsearch 所需。
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -w vm.max_map_count=262144
pct enter 300
```
缺少模板?运行 `pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.zst`。
### 2. 在 LXC 内部进行配置和部署
```
cd /opt
git clone https://github.com//elk-soc-demo.git
cd elk-soc-demo
# 复制 env 模板并设置真实的加密密钥。
cp .env.example .env
sed -i "s||$(openssl rand -base64 32 | tr -d '=+/' | cut -c1-32)|" .env
$EDITOR .env # confirm ELK_HOST_IP and other values
bash deploy.sh --setup # installs Docker, tunes sysctl, pulls images
bash deploy.sh --start # starts the stack, waits for health
bash deploy.sh --demo # loads dashboards, generates 500 sim events
```
### 3. 访问
| 服务 | URL |
| ------------- | -------------------------- |
| Kibana | `http://:5601` |
| Elasticsearch | `http://:9200` |
| Logstash API | `http://:9600` |
## 命令
```
bash deploy.sh --setup # first-time install
bash deploy.sh --start # start the stack, wait for health
bash deploy.sh --stop # docker compose down
bash deploy.sh --status # container + cluster health
bash deploy.sh --demo # provision dashboards + 500 sim events
bash deploy.sh --destroy # remove containers AND data volumes (prompts)
# 模拟器
python3 scripts/security_event_simulator.py --burst 500 --rate 50
python3 scripts/security_event_simulator.py --rate 2 # continuous
python3 scripts/security_event_simulator.py --dry-run --burst 5
# REST API 工具
python3 scripts/es_api_queries.py --health
python3 scripts/es_api_queries.py --top-attackers
python3 scripts/es_api_queries.py --severity
python3 scripts/es_api_queries.py --timeline
python3 scripts/es_api_queries.py --mitre
python3 scripts/es_api_queries.py --report
```
## 安全态势
这是一个**演示**。`docker-compose.yml` 中的 `xpack.security.enabled=false`,
因此 Kibana/ES/Logstash 在运行时不带认证或 TLS。请勿将这些
端口暴露给不受信任的网络。如果用于本地演示以外的用途,请绑定到 `127.0.0.1` 或使用防火墙对 LXC 进行隔离。
## 文件概览
```
deploy.sh # setup/start/stop/status/demo/destroy
docker-compose.yml # 5-container stack
.env.example # KIBANA_ENCRYPTION_KEY and friends
filebeat/filebeat.yml # host + docker log shipping
metricbeat/metricbeat.yml # system + docker metrics
logstash/config/logstash.yml # workers, batch size
logstash/pipeline/main.conf # 3 inputs, grok, GeoIP, routing
scripts/security_event_simulator.py # MITRE-mapped event generator
scripts/setup_kibana_dashboards.py # dashboard bootstrap (Kibana API)
scripts/es_api_queries.py # REST API demo tool
```
## 资源使用情况(实测)
| 组件 | RAM | CPU |
| ------------- | ------- | ------- |
| Elasticsearch | ~2 GB | 1–2 |
| Logstash | ~512 MB | 0.5–1 |
| Kibana | ~512 MB | 0.5 |
| Filebeat | ~100 MB | 0.1 |
| Metricbeat | ~100 MB | 0.1 |
| **总计** | ~3.5 GB | ~3 |
在 8 GB / 4 核的 LXC 中可流畅运行。
## 许可证
MIT(详见 `LICENSE`)。Elastic Stack 8.17 的使用遵循 Elastic License 2.0 /
SSPL / AGPL 的适用条款;本演示是在这些条款范围内的作品集 / 教育性质的部署。
标签:CISA项目, Cloudflare, Elastic Stack, IP 地址批量处理, Kibana仪表盘, MITRE ATT&CK, MIT许可证, PE 加载器, Web报告查看器, 内容过滤, 安全仿真, 安全运营中心, 插件系统, 流量重放, 版权保护, 网络信息收集, 网络映射, 请求拦截, 越狱测试, 逆向工具