feat: add demo docker-compose

This commit is contained in:
2024-11-11 12:22:29 -05:00
parent ed2ce209df
commit 2558938092
3 changed files with 104 additions and 26 deletions

BIN
Demo/architecture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

84
Demo/docker-compose.yml Normal file
View File

@ -0,0 +1,84 @@
version: "3.8"
services:
# Attaquant 1
atk1:
image: python:alpine3.20
container_name: attaquant1
command: sleep infinity
networks:
net_public:
ipv4_address: 172.20.1.2
restart: unless-stopped
# IDPS
idps:
image: python:alpine3.20
container_name: idps
command: sleep infinity
cap_add:
- NET_ADMIN
- NET_RAW
networks:
net_public:
ipv4_address: 172.20.1.3
net_private:
ipv4_address: 172.20.2.2
restart: unless-stopped
# Cible
cible:
image: python:alpine3.20
container_name: cible
command: sleep infinity
networks:
net_private:
ipv4_address: 172.20.2.3
restart: unless-stopped
# Attaquant 2
atk2:
image: python:alpine3.20
container_name: attaquant2
command: sleep infinity
networks:
net_private:
ipv4_address: 172.20.2.4
restart: unless-stopped
ids:
image: python:alpine3.20
container_name: ids
command: sleep infinity
cap_add:
- NET_ADMIN
- NET_RAW
networks:
net_private:
ipv4_address: 172.20.2.5
# Network mode host obligatoire pour que la sonde puisse sniffer le réseau
network_mode: host
restart: unless-stopped
# BDD d'alertes
alert_db:
image: mysql:5.7
container_name: alert_db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: alert_db
networks:
net_private:
ipv4_address: 172.20.2.10
restart: unless-stopped
networks:
net_public:
driver: bridge
ipam:
config:
- subnet: 172.20.1.0/24
net_private:
driver: bridge
ipam:
config:
- subnet: 172.20.2.0/24

View File

@ -3,46 +3,30 @@
SIDPS est un outils de détection et de prévention d'intrusion.
Il est capable de détecter & d'identifier différents types d'attaques réseaux, ainsi que de protéger contre certaines de ces attaques automatiquement.
**Attention, il s'agit d'un projet étudiant, dont le but est de réaliser une démonstration pour un projet Universitaire ! Ce projet ne sera probablement pas maintenu par la suite**
**Attention, il s'agit d'un projet étudiant, dont le but est de réaliser une démonstration pour un projet Universitaire !**
**Ce projet ne sera probablement pas maintenu par la suite**
## Fonctionnalités clés:
- Rapidité
- Interface web simple et intuitive
- Messages d'alertes interopérable suivant la norme [CEF (Common Event Format)](https://www.microfocus.com/documentation/arcsight/arcsight-smartconnectors-8.4/pdfdoc/cef-implementation-standard/cef-implementation-standard.pdf)
- Détections de nombreuses attaques réseaux (scan, DOS, ...)
- Détections de nombreuses attaques réseaux (scan, DOS, exfiltration de données...)
## Installation
Pour son fonctionnement, ce projet utilise une base de donnée [redis](https://redis.io/).
Pour son fonctionnement, ce projet utilise une base de donnée [mysql](https://www.mysql.com/).
Un moyen simple d'avoir une base de donnée redis fonctionnel est d'utilisé docker:
## Structure de la base de données SQL
```bash
docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
```
Ou si vous souhaitez avoir une interface graphique pour Redis en plus de la base de donnée, vous pouvez installer un docker de [redis insight](https://redis.io/insight/).
```bash
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
```
*Installation interface web & noyau de l'IDS*
## Structure de la base de données Redis
La base de données Redis est structurée de la façon suivante:
- stream `logs:alertes` contenant toutes les alertes envoyés par le noyau de l'IDPS
- stream `logs:correlations` contenant toutes les corrélations d'alertes, avec un message de corrélation et les alertes corrélées
Ces deux streams suivent la norme CEF, mais sont structurées sous la forme d'objet et non d'une seule chaine de caractère. Afin de faciliter le parsing par la suite.
La base de données SQL est structurée de la façon suivante:
- une table pour les alertes `alertes`, contenant toutes les alertes. Ces alertes sont décrites selon la [norme CEF](https://www.microfocus.com/documentation/arcsight/arcsight-smartconnectors-8.4/pdfdoc/cef-implementation-standard/cef-implementation-standard.pdf)
## Interface de tests d'alertes
Un script python `tests/cef-generator.py` permet de générer des alertes CEF dans la base de données Redis.
Ce script peut être utile pour le développement d'interface d'affichage des alertes. Pour l'utiliser il faut une base de donnée redis, et mettre les identifiants dans le script.
De plus, ce script à besoin de la librairie `redis` pour pouvoir ajouter / faire des requêtes à la base de données Redis.
Un script python `tests/cef-generator.py` permet de générer des alertes CEF dans la base de données SQL.
Ce script peut être utile pour le développement d'interface d'affichage des alertes. Pour l'utiliser il faut une base de donnée sql, et mettre les identifiants dans le script.
De plus, ce script à besoin de la librairie `sql` pour pouvoir ajouter / faire des requêtes à la base de données Redis.
Pour cela, utiliser les commandes suivantes:
@ -58,6 +42,16 @@ Puis executer le script `tests/cef-generator.py` avec le python3 du l'environnem
.venv/bin/python3 tests/cef-generator.py
```
## Demo
Ce projet étant réaliser dans le cadre d'un cours à l'université, une démonstration est donc nécessaire.
Ci-dessous, le schéma de l'architecture réseau de la démonstration:
![Architecture réseau démo](Demo/architecture.png)
Cette démonstration peut être déployer facilement grâce à un docker-compose `Demo/docker-compose.yml`.
## TODO
- Noyau d'analyse de l'IDS