diff --git a/Demo/architecture.png b/Demo/architecture.png new file mode 100644 index 0000000..f9f6274 Binary files /dev/null and b/Demo/architecture.png differ diff --git a/Demo/docker-compose.yml b/Demo/docker-compose.yml new file mode 100644 index 0000000..1197f5d --- /dev/null +++ b/Demo/docker-compose.yml @@ -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 diff --git a/README.md b/README.md index fd414b4..9223b4e 100644 --- a/README.md +++ b/README.md @@ -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