mirror of
https://github.com/Oxbian/SIDPS.git
synced 2025-07-07 20:33:51 +02:00
add lateCommunication + update dataExfiltration
This commit is contained in:
@ -6,7 +6,10 @@ from datetime import datetime
|
|||||||
data_transfer = defaultdict(lambda: {"current": 0, "daily": 0, "last_reset": time.time()})
|
data_transfer = defaultdict(lambda: {"current": 0, "daily": 0, "last_reset": time.time()})
|
||||||
|
|
||||||
def rule(packet, _, db):
|
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
|
global data_transfer
|
||||||
|
|
||||||
if IP in packet:
|
if IP in packet:
|
||||||
@ -23,8 +26,6 @@ def rule(packet, _, db):
|
|||||||
data_transfer[src_ip]["current"] += payload_size
|
data_transfer[src_ip]["current"] += payload_size
|
||||||
data_transfer[src_ip]["daily"] += payload_size
|
data_transfer[src_ip]["daily"] += payload_size
|
||||||
|
|
||||||
print(data_transfer[src_ip]["current"])
|
|
||||||
|
|
||||||
# Exfiltration de données instantané
|
# Exfiltration de données instantané
|
||||||
if data_transfer[src_ip]["current"] > rule.seuil_session:
|
if data_transfer[src_ip]["current"] > rule.seuil_session:
|
||||||
db.send_alert(
|
db.send_alert(
|
||||||
@ -58,5 +59,5 @@ def rule(packet, _, db):
|
|||||||
|
|
||||||
|
|
||||||
rule.reset_time = 24 * 3600 # 24 heures en secondes
|
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
|
rule.seuil_journalier = 50 * 1024 * 1024 * 1024 # 50 Go en octets
|
48
idps/rules/TCP/Data/lateCommunication.py
Normal file
48
idps/rules/TCP/Data/lateCommunication.py
Normal 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)
|
Reference in New Issue
Block a user