From 6efbe6e2e4b6dac42a0034d5fb5eba44dd349ce1 Mon Sep 17 00:00:00 2001 From: SofianeElNaggar Date: Wed, 20 Nov 2024 19:02:42 -0500 Subject: [PATCH] Update dataExfiltration.py --- idps/rules/TCP/Scan/dataExfiltration.py | 46 +++++++++++++++---------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/idps/rules/TCP/Scan/dataExfiltration.py b/idps/rules/TCP/Scan/dataExfiltration.py index cd64b1d..9eab908 100644 --- a/idps/rules/TCP/Scan/dataExfiltration.py +++ b/idps/rules/TCP/Scan/dataExfiltration.py @@ -1,6 +1,7 @@ from collections import defaultdict from scapy.all import IP import time +from datetime import datetime data_transfer = defaultdict(lambda: {"current": 0, "daily": 0, "last_reset": time.time()}) @@ -22,28 +23,37 @@ def rule(packet, _, db): data_transfer[src_ip]["current"] += payload_size data_transfer[src_ip]["daily"] += payload_size - # Déclencher une alerte si un seuil est atteint + # Exfiltration de données instantané if data_transfer[src_ip]["current"] > rule.seuil_session: - alert = { - "type": "Exfiltration de données détectée (instantané)", - "source_ip": src_ip, - "destination_ip": dst_ip, - "volume": data_transfer[src_ip]["current"] / (1024 ** 3), - "threshold": rule.seuil_session / (1024 ** 3), - "time": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()), - } - db.save_alert(alert) + db.send_alert( + datetime.now(), + 5, + None, + "Exfiltration de données détectée (instantané)", + src_ip, + dst_ip, + "TCP", + reason="Exfiltration de données détectée (instantané)", + act="Alerte" + ) data_transfer[src_ip]["current"] = 0 # Réinitialiser pour les prochaines sessions + print(f"Alerte, data transfer, transfert instantané important") + # Exfiltration de données journalière if data_transfer[src_ip]["daily"] > rule.seuil_journalier: - alert = { - "type": "Exfiltration de données détectée (journalière)", - "source_ip": src_ip, - "volume": data_transfer[src_ip]["daily"] / (1024 ** 3), - "threshold": rule.seuil_journalier / (1024 ** 3), - "time": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()), - } - db.save_alert(alert) + db.send_alert( + datetime.now(), + 5, + None, + "Exfiltration de données détectée (journalière)", + src_ip, + dst_ip, + "TCP", + reason="Exfiltration de données détectée (journalière)", + act="Alerte" + ) + print(f"Alerte, data transfer, transfert journalier important") + rule.reset_time = 24 * 3600 # 24 heures en secondes rule.seuil_session = 5 * 1024 * 1024 * 1024 # 5 Go en octets