diff --git a/idps/rules/TCP/Scan/dataExfiltration.py b/idps/rules/TCP/Data/dataExfiltration.py similarity index 90% rename from idps/rules/TCP/Scan/dataExfiltration.py rename to idps/rules/TCP/Data/dataExfiltration.py index db616b2..10b285d 100644 --- a/idps/rules/TCP/Scan/dataExfiltration.py +++ b/idps/rules/TCP/Data/dataExfiltration.py @@ -6,7 +6,10 @@ from datetime import datetime data_transfer = defaultdict(lambda: {"current": 0, "daily": 0, "last_reset": time.time()}) def rule(packet, _, db): - """Règle pour détecter une exfiltration de données importantes.""" + """ + Règle pour détecter une exfiltration de données importantes. + Actuellement, ne fonctionne pas pour un débit supérieur à 4Mo + """ global data_transfer if IP in packet: @@ -23,8 +26,6 @@ def rule(packet, _, db): data_transfer[src_ip]["current"] += payload_size data_transfer[src_ip]["daily"] += payload_size - print(data_transfer[src_ip]["current"]) - # Exfiltration de données instantané if data_transfer[src_ip]["current"] > rule.seuil_session: db.send_alert( @@ -58,5 +59,5 @@ def rule(packet, _, db): rule.reset_time = 24 * 3600 # 24 heures en secondes -rule.seuil_session = 5 * 1024 * 1024 * 1024 # 5 Go en octets +rule.seuil_session = 0.5 * 1024 * 1024 * 1024 # 500 Mo en octets rule.seuil_journalier = 50 * 1024 * 1024 * 1024 # 50 Go en octets \ No newline at end of file diff --git a/idps/rules/TCP/Data/lateCommunication.py b/idps/rules/TCP/Data/lateCommunication.py new file mode 100644 index 0000000..5645449 --- /dev/null +++ b/idps/rules/TCP/Data/lateCommunication.py @@ -0,0 +1,48 @@ +from datetime import datetime, time, timedelta +from scapy.all import IP + +# Dictionnaire pour stocker les dernières alertes envoyées pour chaque IP +last_alert_time = {} + +def rule(packet, _, db): + """ + Règle pour détecter l'activité réseau entre une plage horaire donnée. + """ + global last_alert_time + + if IP in packet: + + src_ip = packet[IP].src + dst_ip = packet[IP].dst + + # Obtenir l'heure actuelle + current_time = datetime.now() + + # Vérifier si l'heure est dans la plage + if rule.start_time <= current_time.time() or current_time.time() <= rule.end_time: + # Vérifier si une alerte a déjà été envoyée récemment pour cette IP + if src_ip in last_alert_time: + time_since_last_alert = current_time - last_alert_time[src_ip] + if time_since_last_alert < timedelta(minutes=5): # 5 minutes de délai + return # Ne pas envoyer une nouvelle alerte + + # Envoyer une alerte + db.send_alert( + current_time, + 5, + None, + f"Activité réseau détectée entre {rule.start_time} et {rule.end_time}", + src_ip, + dst_ip, + proto="TCP", + reason=f"Activité réseau à {current_time.time()}", + act="Alerte" + ) + print(f"Alerte : activité réseau détectée à {current_time.time()} entre {src_ip} et {dst_ip}") + + # Mettre à jour le temps de la dernière alerte pour cette IP + last_alert_time[src_ip] = current_time + +# Définir la plage horaire +rule.start_time = time(21, 0) +rule.end_time = time(6, 0)