Hu9o73/elasticsearch-data-generator
GitHub: Hu9o73/elasticsearch-data-generator
Stars: 0 | Forks: 0
# Elasticsearch Data Generator
**Un générateur de données de sécurité réalistes pour Elasticsearch**
Ce projet permet de générer et d'injecter des événements de sécurité réalistes dans Elasticsearch pour tester des solutions SIEM, SOC, et d'analyse de sécurité comme FusionAI.
Adapté depuis [splunk-data-generator](https://github.com/philoo99999/splunk-data-generator) pour fonctionner avec Elasticsearch 8.x.
## 🎯 Caractéristiques
- ✅ Génération de 500 MB à 3+ GB de données d'attaques réalistes
- ✅ Support de multiples types d'attaques cyber (SQL Injection, XSS, Lateral Movement, Data Exfiltration, etc.)
- ✅ Mapping MITRE ATT&CK (techniques et tactiques)
- ✅ Format ECS (Elastic Common Schema) compatible
- ✅ Intégration avec Active Directory (utilisateurs) et CMDB (assets)
- ✅ Injection via Elasticsearch Bulk API
- ✅ Compatible avec Elasticsearch 8.x
## 🔐 Types d'Attaques Générées
| Attaque | Sévérité | Techniques MITRE | Description |
|---------|----------|------------------|-------------|
| **SQL Injection** | CRITICAL | T1190, T1189 | URLs malveillantes avec injections SQL réalistes |
| **Cross-Site Scripting (XSS)** | HIGH | T1189, T1203 | Scripts JavaScript injectés, Payloads XSS variés |
| **Lateral Movement** | CRITICAL | T1021, T1550 | SMB, RDP, Pass-the-Hash, mouvements réseau suspects |
| **Data Exfiltration** | CRITICAL | T1048, T1041 | DNS exfiltration, transferts FTP/HTTPS massifs |
| **Reconnaissance** | MEDIUM | T1046, T1087 | Port scans, énumération réseau et LDAP |
## 📋 Prérequis
- Python 3.6+
- Elasticsearch 8.x en cours d'exécution
- Bibliothèques Python: `requests`, `urllib3`, `elasticsearch`
## 📂 Structure du Projet
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
## 🚀 Installation
1. **Clonez ce repository:**
git clone https://github.com/philoo99999/elasticsearch-data-generator.git
cd elasticsearch-data-generator
2. **Installez les dépendances:**
pip install -r requirements.txt
3. **Préparez vos données de référence:**
- `DATABASE_FusionAI.db` - Base de données SQLite avec alertes et IPs
- `ad_users.csv` (optionnel) - Liste des utilisateurs Active Directory
- `cmdb_assets.csv` (optionnel) - Liste des assets de votre CMDB
## ⚡ Quickstart (attack-chain generator)
- Copiez `scripts/.env.example` vers `scripts/.env` et ajustez les chemins (`DB_PATH`, `AD_USERS_FILE`, `CMDB_ASSETS_FILE`, `OUTPUT_PREFIX`).
- (Optionnel) Fixez une graine pour des runs reproductibles: exportez `SEED=42`.
- Générez les chaînes corrélées + bruit réaliste:
python3 scripts/generate_attack_chains.py
- Les NDJSON sont écrits sous `OUTPUT_PREFIX####.json`; un résumé JSON est produit à `SUMMARY_PATH` (ou `_summary.json` par défaut).
## 💻 Utilisation
### 1. Démarrer Elasticsearch
Assurez-vous qu'Elasticsearch est en cours d'exécution:
sudo systemctl status elasticsearch
### 2. Générer les Données
Générez 500 MB de données d'événements de sécurité:
python3 scripts/generate_events.py
Le script génère:
- 700,000+ événements
- 7 fichiers batch (~71 MB chacun)
- Événements répartis sur 30 jours
- Mix réaliste d'attaques avec mapping MITRE ATT&CK
**Personnalisation:**
Modifiez `TARGET_SIZE_MB` dans le script pour générer plus ou moins de données.
### 3. Injecter dans Elasticsearch
**Configuration:**
Éditez `scripts/inject_to_es.py` avec vos credentials Elasticsearch:
ES_URL = "https://localhost:9200"
ES_USER = "elastic"
ES_PASS = "votre_mot_de_passe"
**Injection:**
python3 scripts/inject_to_es.py
Le script:
- Se connecte à Elasticsearch
- Crée un index template avec mapping ECS
- Injecte les événements via Bulk API
- Affiche la progression en temps réel
- Temps estimé: 5-10 minutes pour 500 MB
### 4. Vérifier l'Injection
python3 scripts/verify_es.py
Ou directement avec curl:
# Compter les événements
curl -k -u elastic:PASSWORD https://localhost:9200/fusionai-*/_count
# Voir les index
curl -k -u elastic:PASSWORD https://localhost:9200/_cat/indices/fusionai-*?v
# Rechercher
curl -k -u elastic:PASSWORD https://localhost:9200/fusionai-*/_search?size=5
## 📊 Exemples de Requêtes Elasticsearch
### Top 10 des IPs sources
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"top_sources": {
"terms": {
"field": "source.ip",
"size": 10
}
}
}
}
### Attaques par Sévérité
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"by_severity": {
"terms": {
"field": "event.severity"
}
}
}
}
### Timeline des Attaques
GET /fusionai-*/_search
{
"size": 0,
"aggs": {
"timeline": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "day"
},
"aggs": {
"by_category": {
"terms": {
"field": "security.category"
}
}
}
}
}
}
### Techniques 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"
}
}
}
}
}
}
## 🧪 Tests
- Les tests unitaires valident quelques invariants du générateur (bornes de ratios, clamp des timestamps, cohérence host/destination) via `unittest`.
- Exécution:
python -m unittest tests/test_generator.py
Ajoutez le projet à `PYTHONPATH` si besoin; `tests/test_generator.py` l’insère automatiquement depuis la racine.
### Événements d'une IP Spécifique
GET /fusionai-*/_search
{
"query": {
"term": {
"source.ip": "10.14.45.103"
}
}
}
## 🔧 Configuration
### Format ECS (Elastic Common Schema)
Les événements générés suivent le format ECS pour une compatibilité maximale avec l'écosystème 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"
}
}
}
### Données de Référence
#### Format ad_users.csv (optionnel)
Username,Department,Display_Name
jsmith,IT,John Smith
mdoe,Finance,Mary Doe
#### Format cmdb_assets.csv (optionnel)
Hostname,Asset_Type,Criticality,Location
WKS-001,Workstation,Medium,Building A
SRV-001,Server,Critical,DataCenter
Si ces fichiers ne sont pas fournis, le générateur crée des données par défaut.
## 🔍 Dépannage
### Erreur: "Connection refused"
Elasticsearch n'est pas démarré:
sudo systemctl start elasticsearch
sudo systemctl status elasticsearch
### Erreur: "Authentication failed"
Vérifiez vos credentials dans `inject_to_es.py`:
# Réinitialiser le mot de passe
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
### Erreur: "Index creation failed"
Vérifiez que vous avez les droits suffisants et que l'index n'existe pas déjà:
curl -k -u elastic:PASSWORD -X DELETE https://localhost:9200/fusionai-*
## 🎨 Visualisation avec Kibana
1. **Installer Kibana** (optionnel):
sudo apt-get install kibana
sudo systemctl start kibana
2. **Accéder à Kibana**: http://localhost:5601
3. **Créer un Data View**:
- Stack Management → Data Views
- Create data view: `fusionai-*`
- Timestamp field: `@timestamp`
4. **Créer des visualisations**:
- Dashboard → Create visualization
- Utilisez les champs ECS pour créer des graphiques
## 📈 Performance
| Métrique | Valeur |
|----------|--------|
| Taille des événements | ~800 bytes/événement |
| Vitesse de génération | ~50,000 événements/s |
| Vitesse d'injection | ~5,000-10,000 événements/s |
| Temps pour 500 MB | ~5-10 minutes |
## 🔒 Sécurité
- ⚠️ Ne partagez JAMAIS vos mots de passe Elasticsearch publiquement
- ⚠️ Les données générées sont pour environnements de test uniquement
- ⚠️ Utilisez HTTPS et des mots de passe forts en production
## 🤝 Contribuer
Les contributions sont les bienvenues ! N'hésitez pas à:
- Reporter des bugs via les Issues
- Proposer des améliorations via des Pull Requests
- Ajouter de nouveaux types d'attaques
- Améliorer la documentation
## 📄 Licence
MIT License - Voir le fichier LICENSE pour plus de détails
## 👤 Auteur
Adapté pour Elasticsearch depuis [splunk-data-generator](https://github.com/philoo99999/splunk-data-generator)
Projet créé pour tester et développer des solutions SIEM/SOC comme FusionAI.
## 🔗 Liens Utiles
- [Elasticsearch Documentation](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 Framework](https://attack.mitre.org/)
- [Kibana User Guide](https://www.elastic.co/guide/en/kibana/current/index.html)
## 📝 Changelog
### v1.0.0 (2025-11-16)
- ✅ Génération initiale de 500 MB de données
- ✅ Support des 5 types d'attaques principaux
- ✅ Format ECS compatible
- ✅ Injection via Bulk API
- ✅ Scripts de vérification
- ✅ Documentation complète
**Note:** Ce projet est conçu pour des environnements de test et de développement. N'utilisez pas en production sans validation appropriée.