feat: rewrite sql + alert sent to sql db from idps

This commit is contained in:
2024-11-18 21:49:08 -05:00
parent 2d25387fde
commit 48e9554d38
10 changed files with 110 additions and 87 deletions

View File

@ -1,5 +0,0 @@
CREATE DATABASE sidps DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sidps'@'localhost' IDENTIFIED BY 'SUPERPASSWORD';
GRANT ALL PRIVILEGES ON sidps.* TO 'sidps'@'localhost';
FLUSH PRIVILEGES;
use sidps;

View File

@ -9,7 +9,6 @@ import time
import random
from datetime import datetime
def generate_alert(alert_type):
# Dictionnaire pour différents types d'alertes réseau et fichiers
alert_templates = {
@ -71,7 +70,7 @@ def generate_filename():
def generate_alerts(conn, cursor, main_headers):
# Récupérer ces données depuis une fonction
alertes = ["Syn Flood", "Port Scanning", "Suspicious File Creation", "Critical File Deletion Attempt"]
alertes = ["Syn Flood", "Port Scanning"] #, "Suspicious File Creation", "Critical File Deletion Attempt"]
while True:
data = generate_alert(random.choice(alertes))
@ -81,15 +80,14 @@ def generate_alerts(conn, cursor, main_headers):
# Préparer la requête SQL d'insertion
sql_query = """
INSERT INTO alertes (
cef_version, date_alerte, event_gravite, device_product,
device_vendor, device_version, alerte_name, sourceAddress,
destinationAddress, destinationPort, sourcePort, protocol,
applicationProtocol, reason, action, commentaire
cef_version, date_alerte, agent_severity, device_event_class_id,
device_product, device_vendor, device_version, name, dst, src,
dpt, spt, msg, proto, bytesin, bytesout, reason, act
) VALUES (
%(cef_version)s, %(date_alerte)s, %(event_gravite)s, %(device_product)s,
%(device_vendor)s, %(device_version)s, %(alerte_name)s, %(src)s,
%(dst)s, %(destinationPort)s, %(sourcePort)s, %(protocol)s,
%(applicationProtocol)s, %(reason)s, %(action)s, %(commentaire)s
%(cef_version)s, %(date_alerte)s, %(agent_severity)s, %(device_event_class_id)s,
%(device_product)s, %(device_vendor)s, %(device_version)s, %(name)s, %(dst)s,
%(src)s, %(dpt)s, %(spt)s, %(msg)s, %(proto)s, %(bytesin)s, %(bytesout)s,
%(reason)s, %(act)s
);
"""
@ -97,20 +95,22 @@ def generate_alerts(conn, cursor, main_headers):
params = {
"cef_version": merged["CEF"],
"date_alerte": datetime.now(),
"event_gravite": int(merged["agent_severity"]),
"agent_severity": int(merged["agent_severity"]),
"device_event_class_id": None,
"device_product": merged["Device Product"],
"device_vendor": merged["Device Vendor"],
"device_version": merged["Device Version"],
"alerte_name": merged["name"],
"name": merged["name"],
"src": merged["src"],
"dst": merged["dst"],
"destinationPort": None, # A définir si disponible
"sourcePort": None, # A définir si disponible
"protocol": "TCP", # Par défaut, à adapter si besoin
"applicationProtocol": "N/A", # À ajuster en fonction des besoins
"reason": "Suspicious activity detected", # Exemple, à adapter
"action": "Alerted", # Exemple d'action
"commentaire": "" # Optionnel
"dpt": None,
"spt": None,
"msg": "Message",
"proto": "TCP",
"bytesin": None,
"bytesout": None,
"reason": "Activité suspecte",
"act": "Alert"
}
# Exécution de la requête d'insertion
@ -132,17 +132,11 @@ def main():
cursor = conn.cursor()
# En-têtes généraux
CEF_version = 1
Device_vendor = "ArKa"
Device_product = "SIDPS"
Device_version = "vAlpha"
main_headers = {
"CEF": CEF_version,
"Device Vendor": Device_vendor,
"Device Product": Device_product,
"Device Version": Device_version
"CEF": 1,
"Device Vendor": "ArKa",
"Device Product": "SIDPS",
"Device Version": "vAlpha"
}
# Lancer la génération d'alertes

View File

@ -12,18 +12,21 @@ CREATE TABLE alertes (
id SERIAL PRIMARY KEY, -- Identifiant unique pour chaque alerte
cef_version VARCHAR(10) DEFAULT 'CEF:1', -- Version du format CEF utilisé
date_alerte TIMESTAMP(3) NOT NULL, -- Date et heure de l'alerte avec une précision de millisecondes
event_gravite INT CHECK (event_gravite >= 0 AND event_gravite <= 10), -- Niveau de gravité de l'alerte sur une échelle de 0 à 10
agent_severity INT CHECK (agent_severity >= 0 AND agent_severity <= 10), -- Niveau de gravité de l'alerte sur une échelle de 0 à 10
device_event_class_id VARCHAR(1023), -- Identifiant de la signature permettant d'aider les moteurs de corrélations
device_product VARCHAR(63), -- Nom du produit à l'origine de l'alerte
device_vendor VARCHAR(63), -- Nom du fournisseur ou fabricant du produit
device_version VARCHAR(31), -- Version du produit ou dispositif ayant généré l'alerte
alerte_name VARCHAR(512), -- Nom descriptif de l'alerte
destinationAddress VARCHAR(45), -- Adresse IP de destination impliquée dans l'alerte
sourceAddress VARCHAR(45), -- Adresse IP source impliquée dans l'alerte
destinationPort INT, -- Port de destination utilisé pour l'événement ou l'alerte
sourcePort INT, -- Port source de l'événement ou de l'alerte
protocol VARCHAR(10), -- Protocole réseau impliqué (ex : TCP, UDP)
applicationProtocol VARCHAR(20), -- Protocole applicatif impliqué (ex : HTTP, FTP)
reason TEXT, -- Description de la raison de l'alerte expliquant pourquoi elle a été générée
action VARCHAR(50), -- Action entreprise en réponse à l'alerte (ex : bloqué, alerté uniquement, ...)
commentaire TEXT -- Champ texte pour des notes ou commentaires additionnels concernant l'alerte
name VARCHAR(512), -- Nom descriptif de l'alerte
-- Champ d'extension du CEF
dst VARCHAR(45), -- Adresse IP de destination impliquée dans l'alerte
src VARCHAR(45), -- Adresse IP source impliquée dans l'alerte
dpt INT, -- Port de destination utilisé pour l'événement ou l'alerte
spt INT, -- Port source de l'événement ou de l'alerte
msg VARCHAR(1023), -- Champ texte pour des notes ou commentaires additionnels concernant l'alerte
proto VARCHAR(10), -- Protocole réseau impliqué (ex : TCP, UDP)
bytesin INT, -- Quantité de bytes (8 bits ici) entrant (cas de flood ou DOS)
bytesout INT, -- Quantité des bytes (8 bits ici) sortants
reason VARCHAR(1023), -- Description de la raison de l'alerte expliquant pourquoi elle a été générée
act VARCHAR(50) -- Action entreprise en réponse à l'alerte (ex : bloqué, alerté uniquement, ...)
);

View File

@ -18,18 +18,20 @@ CREATE TABLE alertes (
id SERIAL PRIMARY KEY, -- Identifiant unique pour chaque alerte
cef_version VARCHAR(10) DEFAULT 'CEF:1', -- Version du format CEF utilisé
date_alerte TIMESTAMP(3) NOT NULL, -- Date et heure de l'alerte avec une précision de millisecondes
event_gravite INT CHECK (event_gravite >= 0 AND event_gravite <= 10), -- Niveau de gravité de l'alerte sur une échelle de 0 à 10
agent_severity INT CHECK (agent_severity >= 0 AND agent_severity <= 10), -- Niveau de gravité de l'alerte sur une échelle de 0 à 10
device_event_class_id VARCHAR(1023), -- Identifiant de la signature permettant d'aider les moteurs de corrélations
device_product VARCHAR(63), -- Nom du produit à l'origine de l'alerte
device_vendor VARCHAR(63), -- Nom du fournisseur ou fabricant du produit
device_version VARCHAR(31), -- Version du produit ou dispositif ayant généré l'alerte
alerte_name VARCHAR(512), -- Nom descriptif de l'alerte
destinationAddress VARCHAR(45), -- Adresse IP de destination impliquée dans l'alerte
sourceAddress VARCHAR(45), -- Adresse IP source impliquée dans l'alerte
destinationPort INT, -- Port de destination utilisé pour l'événement ou l'alerte
sourcePort INT, -- Port source de l'événement ou de l'alerte
protocol VARCHAR(10), -- Protocole réseau impliqué (ex : TCP, UDP)
applicationProtocol VARCHAR(20), -- Protocole applicatif impliqué (ex : HTTP, FTP)
reason TEXT, -- Description de la raison de l'alerte expliquant pourquoi elle a été générée
action VARCHAR(50), -- Action entreprise en réponse à l'alerte (ex : bloqué, alerté uniquement, ...)
commentaire TEXT -- Champ texte pour des notes ou commentaires additionnels concernant l'alerte
name VARCHAR(512), -- Nom descriptif de l'alerte
dst VARCHAR(45), -- Adresse IP de destination impliquée dans l'alerte
src VARCHAR(45), -- Adresse IP source impliquée dans l'alerte
dpt INT, -- Port de destination utilisé pour l'événement ou l'alerte
spt INT, -- Port source de l'événement ou de l'alerte
msg VARCHAR(1023), -- Champ texte pour des notes ou commentaires additionnels concernant l'alerte
proto VARCHAR(10), -- Protocole réseau impliqué (ex : TCP, UDP)
bytesin INT, -- Quantité de bits entrant (cas de flood ou DOS)
bytesout INT, -- Quantité des bits sortants
reason VARCHAR(1023), -- Description de la raison de l'alerte expliquant pourquoi elle a été générée
act VARCHAR(50) -- Action entreprise en réponse à l'alerte (ex : bloqué, alerté uniquement, ...)
);