add lateCommunication + update dataExfiltration

This commit is contained in:
SofianeElNaggar
2024-11-24 15:29:00 -05:00
parent a869ad68f4
commit e9b004d2f7
2 changed files with 53 additions and 4 deletions

View File

@ -0,0 +1,63 @@
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()})
def rule(packet, _, db):
"""
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:
src_ip = packet[IP].src
dst_ip = packet[IP].dst
payload_size = len(packet[IP].payload)
# Mettre à jour le volume de données transférées
current_time = time.time()
if current_time - data_transfer[src_ip]["last_reset"] > rule.reset_time:
data_transfer[src_ip]["daily"] = 0
data_transfer[src_ip]["last_reset"] = current_time
data_transfer[src_ip]["current"] += payload_size
data_transfer[src_ip]["daily"] += payload_size
# Exfiltration de données instantané
if data_transfer[src_ip]["current"] > rule.seuil_session:
db.send_alert(
datetime.now(),
5,
None,
"Exfiltration de données détectée (instantané)",
src_ip,
dst_ip,
proto = "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:
db.send_alert(
datetime.now(),
5,
None,
"Exfiltration de données détectée (journalière)",
src_ip,
dst_ip,
proto = "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 = 0.5 * 1024 * 1024 * 1024 # 500 Mo en octets
rule.seuil_journalier = 50 * 1024 * 1024 * 1024 # 50 Go en octets

View File

@ -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)