mirror of
https://github.com/Oxbian/SIDPS.git
synced 2025-07-08 12:53:47 +02:00
feat: dockerfile web
This commit is contained in:
@ -4,8 +4,12 @@ import time
|
||||
from datetime import datetime
|
||||
|
||||
data_transfer = defaultdict(lambda: {"current": 0, "daily": 0, "last_reset": time.time()})
|
||||
reset_time = 24 * 3600 # 24 heures en secondes
|
||||
seuil_session = 0.5 * 1024 * 1024 * 1024 # 500 Mo en octets
|
||||
seuil_journalier = 50 * 1024 * 1024 * 1024 # 50 Go en octets
|
||||
|
||||
def rule(packet, _, db):
|
||||
|
||||
def rule(packet, objets):
|
||||
"""
|
||||
Règle pour détecter une exfiltration de données importantes.
|
||||
Actuellement, ne fonctionne pas pour un débit supérieur à 4Mo
|
||||
@ -19,7 +23,7 @@ def rule(packet, _, db):
|
||||
|
||||
# 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:
|
||||
if current_time - data_transfer[src_ip]["last_reset"] > reset_time:
|
||||
data_transfer[src_ip]["daily"] = 0
|
||||
data_transfer[src_ip]["last_reset"] = current_time
|
||||
|
||||
@ -27,37 +31,12 @@ def rule(packet, _, db):
|
||||
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"
|
||||
)
|
||||
if data_transfer[src_ip]["current"] > seuil_session:
|
||||
objets["database"].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")
|
||||
print("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
|
||||
if data_transfer[src_ip]["daily"] > seuil_journalier:
|
||||
objets["database"].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("Alerte, data transfer, transfert journalier important")
|
||||
|
@ -4,7 +4,12 @@ from scapy.all import IP
|
||||
# Dictionnaire pour stocker les dernières alertes envoyées pour chaque IP
|
||||
last_alert_time = {}
|
||||
|
||||
def rule(packet, _, db):
|
||||
# Définir la plage horaire
|
||||
start_time = time(21, 0)
|
||||
end_time = time(6, 0)
|
||||
|
||||
|
||||
def rule(packet, objets):
|
||||
"""
|
||||
Règle pour détecter l'activité réseau entre une plage horaire donnée.
|
||||
"""
|
||||
@ -19,7 +24,7 @@ def rule(packet, _, db):
|
||||
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:
|
||||
if rule.start_time <= current_time.time() or current_time.time() <= 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]
|
||||
@ -27,22 +32,8 @@ def rule(packet, _, db):
|
||||
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"
|
||||
)
|
||||
objets["database"].send_alert(current_time, 5, None, f"Activité réseau détectée entre {start_time} et {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)
|
||||
|
Reference in New Issue
Block a user