Hu9o73/elasticsearch-data-generator
GitHub: Hu9o73/elasticsearch-data-generator
该项目为 Elasticsearch 批量生成符合 ECS 格式并映射 MITRE ATT&CK 的逼真安全事件数据,用于测试和验证 SIEM/SOC 平台的检测能力。
Stars: 0 | Forks: 0
# Elasticsearch 数据生成器
**一个用于 Elasticsearch 的逼真安全数据生成器**
该项目旨在生成逼真的安全事件并将其注入到 Elasticsearch 中,以测试 SIEM、SOC 和安全分析解决方案(如 FusionAI)。
改编自 [splunk-data-generator](https://github.com/philoo99999/splunk-data-generator),以适配 Elasticsearch 8.x。
## 🎯 特性
- ✅ 生成 500 MB 至 3+ GB 的逼真攻击数据
- ✅ 支持多种网络攻击类型(SQL Injection、XSS、Lateral Movement、Data Exfiltration 等)
- ✅ MITRE ATT&CK 映射(技术与战术)
- ✅ 兼容 ECS (Elastic Common Schema) 格式
- ✅ 集成 Active Directory(用户)和 CMDB(资产)
- ✅ 通过 Elasticsearch Bulk API 注入
- ✅ 兼容 Elasticsearch 8.x
## 🔐 生成的攻击类型
| 攻击 | 严重性 | MITRE 技术 | 描述 |
|---------|----------|------------------|-------------|
| **SQL Injection** | CRITICAL | T1190, T1189 | 包含逼真 SQL 注入的恶意 URL |
| **Cross-Site Scripting (XSS)** | HIGH | T1189, T1203 | 注入的 JavaScript 脚本,多种 XSS Payload |
| **Lateral Movement** | CRITICAL | T1021, T1550 | SMB、RDP、Pass-the-Hash,可疑的网络移动 |
| **Data Exfiltration** | CRITICAL | T1048, T1041 | DNS 数据外泄,大规模 FTP/HTTPS 传输 |
| **Reconnaissance** | MEDIUM | T1046, T1087 | 端口扫描,网络和 LDAP 枚举 |
## 📋 前置条件
- Python 3.6+
- 正在运行的 Elasticsearch 8.x
- Python 库:`requests`、`urllib3`、`elasticsearch`
## 📂 项目结构
```
elasticsearch-data-generator/
├── scripts/
│ ├── generate_events.py # Génère les événements
│ ├── inject_to_es.py # Injecte dans Elasticsearch
│ └── verify_es.py # Vérifie les données injectées
├── requirements.txt
├── .gitignore
└── README.md
```
## 🚀 安装
1. **克隆此 repository:**
```
git clone https://github.com/philoo99999/elasticsearch-data-generator.git
cd elasticsearch-data-generator
```
2. **安装依赖:**
```
pip install -r requirements.txt
```
3. **准备您的参考数据:**
- `DATABASE_FusionAI.db` - 包含告警和 IP 的 SQLite 数据库
- `ad_users.csv`(可选)- Active Directory 用户列表
- `cmdb_assets.csv`(可选)- 您 CMDB 中的资产列表
## ⚡ 快速开始(attack-chain generator)
- 将 `scripts/.env.example` 复制到 `scripts/.env` 并调整路径(`DB_PATH`、`AD_USERS_FILE`、`CMDB_ASSETS_FILE`、`OUTPUT_PREFIX`)。
- (可选)设置种子以确保运行结果可复现:export `SEED=42`。
- 生成关联的攻击链 + 逼真的噪声数据:
python3 scripts/generate_attack_chains.py
- NDJSON 文件将写入 `OUTPUT_PREFIX####.json`;JSON 摘要将生成至 `SUMMARY_PATH`(或默认的 `_summary.json`)。
## 💻 使用说明
### 1. 启动 Elasticsearch
确保 Elasticsearch 正在运行:
```
sudo systemctl status elasticsearch
```
### 2. 生成数据
生成 500 MB 的安全事件数据:
```
python3 scripts/generate_events.py
```
该脚本将生成:
- 700,000+ 条事件
- 7 个 batch 文件(每个约 71 MB)
- 跨越 30 天分布的事件
- 混合逼真的攻击并进行 MITRE ATT&CK 映射
**自定义:**
修改脚本中的 `TARGET_SIZE_MB` 以生成更多或更少的数据。
### 3. 注入 Elasticsearch
**配置:**
使用您的 Elasticsearch credentials 编辑 `scripts/inject_to_es.py`:
```
ES_URL = "https://localhost:9200"
ES_USER = "elastic"
ES_PASS = "votre_mot_de_passe"
```
**注入:**
```
python3 scripts/inject_to_es.py
```
该脚本将:
- 连接到 Elasticsearch
- 创建带有 ECS mapping 的 index template
- 通过 Bulk API 注入事件
- 实时显示进度
- 预计时间:500 MB 需 5-10 分钟
### 4. 验证注入
```
python3 scripts/verify_es.py
```
或直接使用 curl:
```
# 统计事件
curl -k -u elastic:PASSWORD https://localhost:9200/fusionai-*/_count
# 查看 index
curl -k -u elastic:PASSWORD https://localhost:9200/_cat/indices/fusionai-*?v
# 搜索
curl -k -u elastic:PASSWORD https://localhost:9200/fusionai-*/_search?size=5
```
## 📊 Elasticsearch 查询示例
### Top 10 源 IP
```
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"top_sources": {
"terms": {
"field": "source.ip",
"size": 10
}
}
}
}
```
### 按严重性划分的攻击
```
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"by_severity": {
"terms": {
"field": "event.severity"
}
}
}
}
```
### 攻击时间线
```
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"timeline": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "day"
},
"aggs": {
"by_category": {
"terms": {
"field": "security.category"
}
}
}
}
}
}
```
### MITRE ATT&CK 技术
```
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"mitre_techniques": {
"terms": {
"field": "threat.technique.id",
"size": 20
},
"aggs": {
"tactics": {
"terms": {
"field": "threat.tactic.name"
}
}
}
}
}
}
```
## 🧪 测试
- 单元测试通过 `unittest` 验证生成器的一些不变量(比率边界、时间戳 clamp、host/destination 一致性)。
- 执行:
python -m unittest tests/test_generator.py
如有需要,请将项目添加到 `PYTHONPATH` 中;`tests/test_generator.py` 会自动从根目录插入它。
### 特定 IP 的事件
```
GET /fusionai-*/_search
{
"query": {
"term": {
"source.ip": "10.14.45.103"
}
}
}
```
## 🔧 配置
### ECS (Elastic Common Schema) 格式
生成的事件遵循 ECS 格式,以最大程度地兼容 Elastic 生态系统:
```
{
"@timestamp": "2025-11-16T10:30:00.000Z",
"event": {
"category": "security",
"severity": "critical",
"kind": "alert"
},
"source": {
"ip": "192.168.1.100",
"port": 54321
},
"destination": {
"ip": "10.0.1.50",
"port": 443
},
"threat": {
"framework": "MITRE ATT&CK",
"technique": {
"id": "T1190",
"name": "SQL Injection"
}
}
}
```
### 参考数据
#### ad_users.csv 格式(可选)
```
Username,Department,Display_Name
jsmith,IT,John Smith
mdoe,Finance,Mary Doe
```
#### cmdb_assets.csv 格式(可选)
```
Hostname,Asset_Type,Criticality,Location
WKS-001,Workstation,Medium,Building A
SRV-001,Server,Critical,DataCenter
```
如果未提供这些文件,生成器将创建默认数据。
## 🔍 故障排除
### 错误:“Connection refused”
Elasticsearch 未启动:
```
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
```
### 错误:“Authentication failed”
检查您在 `inject_to_es.py` 中的 credentials:
```
# 重置密码
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
```
### 错误:“Index creation failed”
检查您是否拥有足够的权限以及该 index 是否已存在:
```
curl -k -u elastic:PASSWORD -X DELETE https://localhost:9200/fusionai-*
```
## 🎨 使用 Kibana 进行可视化
1. **安装 Kibana**(可选):
```
sudo apt-get install kibana
sudo systemctl start kibana
```
2. **访问 Kibana**:http://localhost:5601
3. **创建 Data View**:
- Stack Management → Data Views
- Create data view:`fusionai-*`
- Timestamp field:`@timestamp`
4. **创建可视化**:
- Dashboard → Create visualization
- 使用 ECS 字段创建图表
## 📈 性能
| 指标 | 值 |
|----------|--------|
| 事件大小 | ~800 bytes/事件 |
| 生成速度 | ~50,000 事件/s |
| 注入速度 | ~5,000-10,000 事件/s |
| 500 MB 耗时 | ~5-10 分钟 |
## 🔒 安全
- ⚠️ 切勿公开分享您的 Elasticsearch 密码
- ⚠️ 生成的数据仅供测试环境使用
- ⚠️ 在生产环境中使用 HTTPS 和强密码
## 📄 许可证
MIT License - 有关更多详细信息,请参阅 LICENSE 文件
## 👤 作者
从 [splunk-data-generator](https://github.com/philoo99999/splunk-data-generator) 改编以适配 Elasticsearch
为测试和开发 SIEM/SOC 解决方案(如 FusionAI)而创建的项目。
## 🔗 相关链接
- [Elasticsearch 文档](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)
- [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/index.html)
- [MITRE ATT&CK 框架](https://attack.mitre.org/)
- [Kibana 用户指南](https://www.elastic.co/guide/en/kibana/current/index.html)
## 📝 更新日志
### v1.0.0 (2025-11-16)
- ✅ 初始生成 500 MB 数据
- ✅ 支持 5 种主要攻击类型
- ✅ 兼容 ECS 格式
- ✅ 通过 Bulk API 注入
- ✅ 验证脚本
- ✅ 完整的文档
**注意:** 本项目专为测试和开发环境设计。未经适当验证,请勿在生产环境中使用。
标签:CISA项目, Cloudflare, Elasticsearch, Go语言工具, MITRE ATT&CK, Modbus, PE 加载器, 安全测试, 插件系统, 攻击性安全, 数据生成, 越狱测试, 逆向工具