GuardianUnivalle-Benito-Yucra 0.1.36__tar.gz → 0.1.38__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of GuardianUnivalle-Benito-Yucra might be problematic. Click here for more details.
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/auditoria/registro_auditoria.py +5 -11
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/detectores/detector_dos.py +45 -26
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra.egg-info/PKG-INFO +1 -1
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/PKG-INFO +1 -1
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/pyproject.toml +1 -1
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/__init__.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/criptografia/cifrado_aead.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/criptografia/intercambio_claves.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/criptografia/kdf.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/detectores/detector_csrf.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/detectores/detector_keylogger.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/middleware_web/middleware_web.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/mitigacion/limitador_peticion.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/mitigacion/lista_bloqueo.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/puntuacion/puntuacion_amenaza.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra/utilidades.py +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra.egg-info/SOURCES.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra.egg-info/dependency_links.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra.egg-info/requires.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/GuardianUnivalle_Benito_Yucra.egg-info/top_level.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/LICENSE +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/README.md +0 -0
- {guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/setup.cfg +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import datetime
|
|
2
3
|
import json
|
|
3
|
-
import os
|
|
4
4
|
|
|
5
|
-
# Archivo donde se guardarán los eventos
|
|
6
5
|
LOG_FILE = "auditoria_guardian.log"
|
|
7
6
|
|
|
8
7
|
|
|
@@ -12,13 +11,6 @@ def registrar_evento(
|
|
|
12
11
|
severidad: str = "MEDIA",
|
|
13
12
|
extra: dict | None = None,
|
|
14
13
|
):
|
|
15
|
-
"""
|
|
16
|
-
Registra un evento de auditoría en un archivo.
|
|
17
|
-
:param tipo: Tipo de evento (DoS, CSRF, XSS, SQLi, etc.)
|
|
18
|
-
:param descripcion: Descripción detallada del evento
|
|
19
|
-
:param severidad: Nivel de severidad (BAJA, MEDIA, ALTA)
|
|
20
|
-
:param extra: Datos adicionales opcionales
|
|
21
|
-
"""
|
|
22
14
|
try:
|
|
23
15
|
evento = {
|
|
24
16
|
"fecha": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
@@ -28,8 +20,10 @@ def registrar_evento(
|
|
|
28
20
|
"extra": extra or {},
|
|
29
21
|
}
|
|
30
22
|
|
|
31
|
-
#
|
|
32
|
-
os.
|
|
23
|
+
# ✅ Crear carpeta solo si hay directorio en la ruta
|
|
24
|
+
log_dir = os.path.dirname(LOG_FILE)
|
|
25
|
+
if log_dir:
|
|
26
|
+
os.makedirs(log_dir, exist_ok=True)
|
|
33
27
|
|
|
34
28
|
with open(LOG_FILE, "a", encoding="utf-8") as f:
|
|
35
29
|
f.write(json.dumps(evento, ensure_ascii=False) + "\n")
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Detector de ataques de tipo DoS (Denial of Service)
|
|
3
|
-
====================================================
|
|
4
|
-
|
|
5
|
-
Este módulo forma parte del sistema de detección de amenazas.
|
|
6
|
-
Detecta tasas de petición anómalas en base a límites configurables,
|
|
7
|
-
captura datos del atacante (IP, agente, cabeceras)
|
|
8
|
-
y registra los incidentes para su auditoría.
|
|
9
|
-
|
|
10
|
-
Componentes:
|
|
11
|
-
- DOSDefenseMiddleware: Middleware principal de detección.
|
|
12
|
-
- detectar_dos(): Evalúa si la tasa supera el umbral permitido.
|
|
13
|
-
- calcular_nivel_amenaza_dos(): Calcula la severidad proporcional.
|
|
14
|
-
- registrar_evento(): Registra los incidentes en auditoría.
|
|
15
|
-
|
|
16
|
-
Algoritmos relacionados:
|
|
17
|
-
* Rate Limiting basado en ventana deslizante.
|
|
18
|
-
* Cálculo de score: S_dos = w_dos * (tasa_peticion / limite)
|
|
19
|
-
"""
|
|
20
|
-
|
|
21
1
|
from __future__ import annotations
|
|
22
2
|
import time
|
|
23
3
|
import logging
|
|
@@ -38,7 +18,6 @@ if not logger.handlers:
|
|
|
38
18
|
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
|
|
39
19
|
logger.addHandler(handler)
|
|
40
20
|
|
|
41
|
-
|
|
42
21
|
# =====================================================
|
|
43
22
|
# === PARÁMETROS DE CONFIGURACIÓN BASE ===
|
|
44
23
|
# =====================================================
|
|
@@ -46,12 +25,10 @@ LIMITE_PETICIONES = getattr(settings, "DOS_LIMITE_PETICIONES", 100) # por minut
|
|
|
46
25
|
VENTANA_SEGUNDOS = getattr(settings, "DOS_VENTANA_SEGUNDOS", 60)
|
|
47
26
|
PESO_DOS = getattr(settings, "DOS_PESO", 0.6)
|
|
48
27
|
|
|
49
|
-
|
|
50
28
|
# =====================================================
|
|
51
29
|
# === REGISTRO TEMPORAL DE SOLICITUDES POR IP ===
|
|
52
30
|
# =====================================================
|
|
53
|
-
# En producción se recomienda
|
|
54
|
-
# para este tipo de conteo, aquí usamos una memoria temporal.
|
|
31
|
+
# En producción se recomienda Redis o Memcached
|
|
55
32
|
REGISTRO_SOLICITUDES: Dict[str, List[float]] = {}
|
|
56
33
|
|
|
57
34
|
|
|
@@ -89,12 +66,14 @@ def calcular_nivel_amenaza_dos(
|
|
|
89
66
|
def detectar_dos(ip: str, tasa_peticion: int, limite: int = LIMITE_PETICIONES) -> bool:
|
|
90
67
|
"""Evalúa si la tasa de peticiones excede el umbral permitido."""
|
|
91
68
|
if tasa_peticion > limite:
|
|
69
|
+
# Registrar evento en auditoría
|
|
92
70
|
registrar_evento(
|
|
93
71
|
tipo="DoS",
|
|
94
72
|
descripcion=f"Alta tasa de peticiones desde {ip}: {tasa_peticion} req/min (límite {limite})",
|
|
95
73
|
severidad="ALTA",
|
|
96
74
|
)
|
|
97
|
-
|
|
75
|
+
# Mitigación: pasar un usuario genérico
|
|
76
|
+
limitar_peticion(usuario_id="anonimo")
|
|
98
77
|
return True
|
|
99
78
|
return False
|
|
100
79
|
|
|
@@ -107,7 +86,7 @@ class DOSDefenseMiddleware(MiddlewareMixin):
|
|
|
107
86
|
Middleware para detección y registro de ataques DoS.
|
|
108
87
|
- Captura IP, agente y cabeceras sospechosas.
|
|
109
88
|
- Evalúa la frecuencia de peticiones por IP.
|
|
110
|
-
- Marca request.
|
|
89
|
+
- Marca request.dos_attack_info con información del intento.
|
|
111
90
|
"""
|
|
112
91
|
|
|
113
92
|
def process_request(self, request):
|
|
@@ -155,6 +134,27 @@ class DOSDefenseMiddleware(MiddlewareMixin):
|
|
|
155
134
|
return None
|
|
156
135
|
|
|
157
136
|
|
|
137
|
+
"""
|
|
138
|
+
Detector de ataques de tipo DoS (Denial of Service)
|
|
139
|
+
====================================================
|
|
140
|
+
|
|
141
|
+
Este módulo forma parte del sistema de detección de amenazas.
|
|
142
|
+
Detecta tasas de petición anómalas en base a límites configurables,
|
|
143
|
+
captura datos del atacante (IP, agente, cabeceras)
|
|
144
|
+
y registra los incidentes para su auditoría.
|
|
145
|
+
|
|
146
|
+
Componentes:
|
|
147
|
+
- DOSDefenseMiddleware: Middleware principal de detección.
|
|
148
|
+
- detectar_dos(): Evalúa si la tasa supera el umbral permitido.
|
|
149
|
+
- calcular_nivel_amenaza_dos(): Calcula la severidad proporcional.
|
|
150
|
+
- registrar_evento(): Registra los incidentes en auditoría.
|
|
151
|
+
|
|
152
|
+
Algoritmos relacionados:
|
|
153
|
+
* Rate Limiting basado en ventana deslizante.
|
|
154
|
+
* Cálculo de score: S_dos = w_dos * (tasa_peticion / limite)
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
|
|
158
158
|
"""
|
|
159
159
|
Algoritmos relacionados:
|
|
160
160
|
*Rate Limiting, listas de bloqueo.
|
|
@@ -164,3 +164,22 @@ S_dos = w_dos * (tasa_peticion / limite)
|
|
|
164
164
|
S_dos = 0.6 * (150 / 100)
|
|
165
165
|
donde w_dos es peso asignado a DoS y tasa_peticion / limite es la proporción de la tasa actual sobre el límite.
|
|
166
166
|
"""
|
|
167
|
+
"""
|
|
168
|
+
Detector de ataques de tipo DoS (Denial of Service)
|
|
169
|
+
====================================================
|
|
170
|
+
|
|
171
|
+
Este módulo forma parte del sistema de detección de amenazas.
|
|
172
|
+
Detecta tasas de petición anómalas en base a límites configurables,
|
|
173
|
+
captura datos del atacante (IP, agente, cabeceras)
|
|
174
|
+
y registra los incidentes para su auditoría.
|
|
175
|
+
|
|
176
|
+
Componentes:
|
|
177
|
+
- DOSDefenseMiddleware: Middleware principal de detección.
|
|
178
|
+
- detectar_dos(): Evalúa si la tasa supera el umbral permitido.
|
|
179
|
+
- calcular_nivel_amenaza_dos(): Calcula la severidad proporcional.
|
|
180
|
+
- registrar_evento(): Registra los incidentes en auditoría.
|
|
181
|
+
|
|
182
|
+
Algoritmos relacionados:
|
|
183
|
+
* Rate Limiting basado en ventana deslizante.
|
|
184
|
+
* Cálculo de score: S_dos = w_dos * (tasa_peticion / limite)
|
|
185
|
+
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.38
|
|
4
4
|
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
|
|
5
5
|
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.38
|
|
4
4
|
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
|
|
5
5
|
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
6
|
License: MIT
|
{guardianunivalle_benito_yucra-0.1.36 → guardianunivalle_benito_yucra-0.1.38}/pyproject.toml
RENAMED
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GuardianUnivalle-Benito-Yucra" # usar mayúsculas consistente
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.38"
|
|
8
8
|
description = "Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Andres Benito Calle Yucra", email = "benitoandrescalle035@gmail.com" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|