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报告查看器, 内容过滤, 安全仿真, 安全运营中心, 插件系统, 流量重放, 版权保护, 网络信息收集, 网络映射, 请求拦截, 越狱测试, 逆向工具