GuardianUnivalle-Benito-Yucra 0.1.64__tar.gz → 0.1.66__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.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/detectores/detector_dos.py +1 -1
- guardianunivalle_benito_yucra-0.1.66/GuardianUnivalle_Benito_Yucra.egg-info/PKG-INFO +213 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra.egg-info/SOURCES.txt +0 -1
- guardianunivalle_benito_yucra-0.1.66/PKG-INFO +213 -0
- guardianunivalle_benito_yucra-0.1.66/README.md +190 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/pyproject.toml +2 -2
- guardianunivalle_benito_yucra-0.1.64/GuardianUnivalle_Benito_Yucra/detectores/detector_keylogger.py +0 -219
- guardianunivalle_benito_yucra-0.1.64/GuardianUnivalle_Benito_Yucra.egg-info/PKG-INFO +0 -57
- guardianunivalle_benito_yucra-0.1.64/PKG-INFO +0 -57
- guardianunivalle_benito_yucra-0.1.64/README.md +0 -34
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/__init__.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/auditoria/registro_auditoria.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/criptografia/cifrado_aead.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/criptografia/intercambio_claves.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/criptografia/kdf.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/detectores/detector_csrf.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/middleware_web/middleware_web.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/mitigacion/limitador_peticion.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/mitigacion/lista_bloqueo.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/puntuacion/puntuacion_amenaza.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra/utilidades.py +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra.egg-info/dependency_links.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra.egg-info/requires.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/GuardianUnivalle_Benito_Yucra.egg-info/top_level.txt +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/LICENSE +0 -0
- {guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/setup.cfg +0 -0
|
@@ -59,7 +59,7 @@ def fetch_and_parse_blacklists() -> Set[str]:
|
|
|
59
59
|
|
|
60
60
|
for url in IP_BLACKLIST_SOURCES:
|
|
61
61
|
try:
|
|
62
|
-
response = requests.get(url, headers=SCRAPING_HEADERS, timeout=
|
|
62
|
+
response = requests.get(url, headers=SCRAPING_HEADERS, timeout=15)
|
|
63
63
|
response.raise_for_status()
|
|
64
64
|
|
|
65
65
|
found_ips = ip_pattern.findall(response.text)
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
+
Version: 0.1.66
|
|
4
|
+
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS) para Django/Flask
|
|
5
|
+
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
+
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
+
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Framework :: Django
|
|
16
|
+
Classifier: Framework :: Flask
|
|
17
|
+
Requires-Python: >=3.8
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: redis>=4.0
|
|
21
|
+
Requires-Dist: django>=3.2
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
<!-- Información de la librería -->
|
|
25
|
+
|
|
26
|
+
🛡️ Guardian Univalle – Benito & Junkrat
|
|
27
|
+
|
|
28
|
+
Framework de detección y defensa de amenazas web para Django
|
|
29
|
+
|
|
30
|
+
Guardian Univalle es un sistema de seguridad modular desarrollado para fortalecer aplicaciones Django frente a ataques web comunes como XSS, CSRF, inyección SQL, ataques DoS y scraping automatizado.
|
|
31
|
+
Cada módulo opera mediante middleware independientes que analizan el tráfico HTTP en tiempo real, aplican heurísticas inteligentes y registran eventos sospechosos para auditoría y bloqueo adaptativo.
|
|
32
|
+
|
|
33
|
+
⚙️ Arquitectura general
|
|
34
|
+
|
|
35
|
+
Guardian Univalle está diseñado bajo una arquitectura modular y extensible, donde cada tipo de amenaza se gestiona mediante un middleware especializado.
|
|
36
|
+
Cada middleware:
|
|
37
|
+
|
|
38
|
+
Se ejecuta en la fase inicial del request (process_request).
|
|
39
|
+
|
|
40
|
+
Analiza cabeceras, cuerpo y metadatos de la petición.
|
|
41
|
+
|
|
42
|
+
Evalúa indicadores de ataque según patrones heurísticos y reglas configurables.
|
|
43
|
+
|
|
44
|
+
Calcula una puntuación de riesgo (score) para cada evento.
|
|
45
|
+
|
|
46
|
+
Anexa la información al objeto request (por ejemplo, request.xss_attack_info) para que otros módulos (como el de auditoría) la procesen.
|
|
47
|
+
|
|
48
|
+
🧩 Módulos de defensa incluidos
|
|
49
|
+
|
|
50
|
+
1. 🔐 CSRFDefenseMiddleware
|
|
51
|
+
|
|
52
|
+
Defensa contra Cross-Site Request Forgery (CSRF).
|
|
53
|
+
|
|
54
|
+
Este módulo detecta intentos de falsificación de peticiones mediante:
|
|
55
|
+
|
|
56
|
+
Verificación de cabeceras Origin y Referer contra el host real.
|
|
57
|
+
|
|
58
|
+
Validación de tokens CSRF en cookies, cabeceras o formularios.
|
|
59
|
+
|
|
60
|
+
Análisis del tipo de contenido (Content-Type) y parámetros sensibles.
|
|
61
|
+
|
|
62
|
+
Detección de peticiones JSON o formularios enviados desde dominios externos.
|
|
63
|
+
|
|
64
|
+
Asignación de un score de riesgo proporcional al número y severidad de señales encontradas.
|
|
65
|
+
|
|
66
|
+
Algoritmos utilizados:
|
|
67
|
+
Heurísticas basadas en cabeceras HTTP, validación semántica de origen, y detección de anomalías en métodos POST, PUT, DELETE y PATCH.
|
|
68
|
+
|
|
69
|
+
2. 🧬 XSSDefenseMiddleware
|
|
70
|
+
|
|
71
|
+
Defensa contra Cross-Site Scripting (XSS).
|
|
72
|
+
|
|
73
|
+
Analiza en profundidad los datos enviados en el cuerpo y querystring, detectando vectores de inyección HTML/JS mediante:
|
|
74
|
+
|
|
75
|
+
Patrones de alto riesgo (<script>, javascript:, onload=, eval()).
|
|
76
|
+
|
|
77
|
+
Ofuscaciones con entidades (<, %3Cscript).
|
|
78
|
+
|
|
79
|
+
Detección de atributos de eventos (onmouseover, onfocus, etc.).
|
|
80
|
+
|
|
81
|
+
Análisis de URIs maliciosas (data:text/html, vbscript:).
|
|
82
|
+
|
|
83
|
+
Scoring ponderado por severidad (de 0.3 a 0.95).
|
|
84
|
+
|
|
85
|
+
Algoritmos utilizados:
|
|
86
|
+
Detección basada en expresiones regulares avanzadas con pesos heurísticos y uso opcional de la librería Bleach para sanitización comparativa.
|
|
87
|
+
|
|
88
|
+
Salida:
|
|
89
|
+
Agrega request.xss_attack_info con los detalles de detección, la IP de origen, descripción, payload y score total.
|
|
90
|
+
|
|
91
|
+
3. 💾 SQLIDefenseMiddleware
|
|
92
|
+
|
|
93
|
+
Defensa contra Inyección SQL (SQLi).
|
|
94
|
+
|
|
95
|
+
Identifica intentos de inyección SQL en los parámetros enviados a través de:
|
|
96
|
+
|
|
97
|
+
Palabras clave peligrosas (UNION, SELECT, DROP, INSERT, UPDATE).
|
|
98
|
+
|
|
99
|
+
Uso de comentarios (--, #, /_ ... _/).
|
|
100
|
+
|
|
101
|
+
Concatenaciones o subconsultas sospechosas.
|
|
102
|
+
|
|
103
|
+
Comportamientos anómalos en parámetros GET, POST o JSON.
|
|
104
|
+
|
|
105
|
+
Algoritmos utilizados:
|
|
106
|
+
Heurísticas sintácticas + patrones combinados con contextos.
|
|
107
|
+
Evalúa combinaciones de operadores y palabras reservadas para minimizar falsos positivos.
|
|
108
|
+
|
|
109
|
+
Resultado:
|
|
110
|
+
Registra el intento en request.sql_injection_info con score calculado y parámetros comprometidos.
|
|
111
|
+
|
|
112
|
+
4. 🌐 DOSDefenseMiddleware
|
|
113
|
+
|
|
114
|
+
Detección de ataques de Denegación de Servicio (DoS).
|
|
115
|
+
|
|
116
|
+
Monitorea la frecuencia de peticiones por IP y calcula una métrica adaptativa de comportamiento:
|
|
117
|
+
|
|
118
|
+
Detecta exceso de solicitudes en intervalos cortos.
|
|
119
|
+
|
|
120
|
+
Analiza User-Agent, patrones repetitivos y tamaño de payloads.
|
|
121
|
+
|
|
122
|
+
Aplica límites configurables (MAX_REQUESTS_PER_WINDOW).
|
|
123
|
+
|
|
124
|
+
Marca IPs sospechosas para registro y bloqueo temporal.
|
|
125
|
+
|
|
126
|
+
Algoritmos utilizados:
|
|
127
|
+
Sliding Window con conteo adaptativo en memoria, controlado por señales de frecuencia e intensidad.
|
|
128
|
+
|
|
129
|
+
5. 🕷️ ScrapingDefenseMiddleware (opcional)
|
|
130
|
+
|
|
131
|
+
Detección de scraping y bots automatizados.
|
|
132
|
+
|
|
133
|
+
Evalúa características típicas de scraping:
|
|
134
|
+
|
|
135
|
+
User-Agent anómalo o ausente.
|
|
136
|
+
|
|
137
|
+
Patrón de navegación repetitivo o excesivamente rápido.
|
|
138
|
+
|
|
139
|
+
Ausencia de cabeceras humanas (como Accept-Language o Referer).
|
|
140
|
+
|
|
141
|
+
Combinación con heurísticas de DoS para detectar scrapers agresivos.
|
|
142
|
+
|
|
143
|
+
Algoritmos utilizados:
|
|
144
|
+
Análisis estadístico de cabeceras + patrones de comportamiento a corto plazo.
|
|
145
|
+
|
|
146
|
+
🧠 Integración y uso
|
|
147
|
+
|
|
148
|
+
Instalar la librería:
|
|
149
|
+
|
|
150
|
+
pip install guardian-univalle
|
|
151
|
+
|
|
152
|
+
En tu archivo settings.py de Django, añadir los middlewares:
|
|
153
|
+
|
|
154
|
+
MIDDLEWARE = [
|
|
155
|
+
"guardian_univalle.detectores.csrf_defense.CSRFDefenseMiddleware",
|
|
156
|
+
"guardian_univalle.detectores.xss_defense.XSSDefenseMiddleware",
|
|
157
|
+
"guardian_univalle.detectores.sql_defense.SQLIDefenseMiddleware",
|
|
158
|
+
"guardian_univalle.detectores.dos_defense.DOSDefenseMiddleware",
|
|
159
|
+
"guardian_univalle.detectores.scraping_defense.ScrapingDefenseMiddleware", # opcional
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
(Opcional) Configurar umbrales en settings.py:
|
|
163
|
+
|
|
164
|
+
XSS_DEFENSE_THRESHOLD = 0.6
|
|
165
|
+
CSRF_DEFENSE_MIN_SIGNALS = 1
|
|
166
|
+
DOS_DEFENSE_MAX_REQUESTS = 100
|
|
167
|
+
SQLI_DEFENSE_THRESHOLD = 0.5
|
|
168
|
+
|
|
169
|
+
🧾 Auditoría y correlación de eventos
|
|
170
|
+
|
|
171
|
+
Cada middleware genera un diccionario con detalles de detección:
|
|
172
|
+
|
|
173
|
+
request.xss_attack_info = {
|
|
174
|
+
"ip": "192.168.1.10",
|
|
175
|
+
"tipos": ["XSS"],
|
|
176
|
+
"descripcion": ["Etiqueta <script> detectada"],
|
|
177
|
+
"payload": "{'field': 'comentario', 'snippet': '<script>alert(1)</script>'}",
|
|
178
|
+
"score": 0.92,
|
|
179
|
+
"url": "/comentarios/enviar/",
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
Estos datos pueden ser almacenados por un AuditoriaMiddleware o enviados a un sistema SIEM para correlación y respuesta automatizada.
|
|
183
|
+
|
|
184
|
+
🧩 Filosofía del proyecto
|
|
185
|
+
|
|
186
|
+
Guardian Univalle – Benito & Junkrat busca proporcionar una capa de defensa proactiva para entornos Django universitarios y empresariales, combinando:
|
|
187
|
+
|
|
188
|
+
Detección heurística,
|
|
189
|
+
|
|
190
|
+
Análisis semántico de cabeceras y payloads, y
|
|
191
|
+
|
|
192
|
+
Escalamiento de score basado en señales múltiples.
|
|
193
|
+
|
|
194
|
+
Su diseño es didáctico y extensible, ideal tanto para proyectos reales como para enseñanza de ciberseguridad aplicada.
|
|
195
|
+
|
|
196
|
+
🧱 Estructura del paquete
|
|
197
|
+
guardian_univalle/
|
|
198
|
+
│
|
|
199
|
+
├── detectores/
|
|
200
|
+
│ ├── csrf_defense.py
|
|
201
|
+
│ ├── xss_defense.py
|
|
202
|
+
│ ├── sql_defense.py
|
|
203
|
+
│ ├── dos_defense.py
|
|
204
|
+
│ ├── scraping_defense.py
|
|
205
|
+
│
|
|
206
|
+
├── auditoria/
|
|
207
|
+
│ └── auditoria_middleware.py
|
|
208
|
+
│
|
|
209
|
+
└── **init**.py
|
|
210
|
+
|
|
211
|
+
🧾 Licencia
|
|
212
|
+
|
|
213
|
+
Este proyecto se distribuye bajo la licencia MIT, permitiendo libre uso y modificación con atribución.
|
|
@@ -15,7 +15,6 @@ GuardianUnivalle_Benito_Yucra/criptografia/intercambio_claves.py
|
|
|
15
15
|
GuardianUnivalle_Benito_Yucra/criptografia/kdf.py
|
|
16
16
|
GuardianUnivalle_Benito_Yucra/detectores/detector_csrf.py
|
|
17
17
|
GuardianUnivalle_Benito_Yucra/detectores/detector_dos.py
|
|
18
|
-
GuardianUnivalle_Benito_Yucra/detectores/detector_keylogger.py
|
|
19
18
|
GuardianUnivalle_Benito_Yucra/detectores/detector_sql.py
|
|
20
19
|
GuardianUnivalle_Benito_Yucra/detectores/detector_xss.py
|
|
21
20
|
GuardianUnivalle_Benito_Yucra/middleware_web/middleware_web.py
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
+
Version: 0.1.66
|
|
4
|
+
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS) para Django/Flask
|
|
5
|
+
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
+
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
+
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Framework :: Django
|
|
16
|
+
Classifier: Framework :: Flask
|
|
17
|
+
Requires-Python: >=3.8
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: redis>=4.0
|
|
21
|
+
Requires-Dist: django>=3.2
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
|
|
24
|
+
<!-- Información de la librería -->
|
|
25
|
+
|
|
26
|
+
🛡️ Guardian Univalle – Benito & Junkrat
|
|
27
|
+
|
|
28
|
+
Framework de detección y defensa de amenazas web para Django
|
|
29
|
+
|
|
30
|
+
Guardian Univalle es un sistema de seguridad modular desarrollado para fortalecer aplicaciones Django frente a ataques web comunes como XSS, CSRF, inyección SQL, ataques DoS y scraping automatizado.
|
|
31
|
+
Cada módulo opera mediante middleware independientes que analizan el tráfico HTTP en tiempo real, aplican heurísticas inteligentes y registran eventos sospechosos para auditoría y bloqueo adaptativo.
|
|
32
|
+
|
|
33
|
+
⚙️ Arquitectura general
|
|
34
|
+
|
|
35
|
+
Guardian Univalle está diseñado bajo una arquitectura modular y extensible, donde cada tipo de amenaza se gestiona mediante un middleware especializado.
|
|
36
|
+
Cada middleware:
|
|
37
|
+
|
|
38
|
+
Se ejecuta en la fase inicial del request (process_request).
|
|
39
|
+
|
|
40
|
+
Analiza cabeceras, cuerpo y metadatos de la petición.
|
|
41
|
+
|
|
42
|
+
Evalúa indicadores de ataque según patrones heurísticos y reglas configurables.
|
|
43
|
+
|
|
44
|
+
Calcula una puntuación de riesgo (score) para cada evento.
|
|
45
|
+
|
|
46
|
+
Anexa la información al objeto request (por ejemplo, request.xss_attack_info) para que otros módulos (como el de auditoría) la procesen.
|
|
47
|
+
|
|
48
|
+
🧩 Módulos de defensa incluidos
|
|
49
|
+
|
|
50
|
+
1. 🔐 CSRFDefenseMiddleware
|
|
51
|
+
|
|
52
|
+
Defensa contra Cross-Site Request Forgery (CSRF).
|
|
53
|
+
|
|
54
|
+
Este módulo detecta intentos de falsificación de peticiones mediante:
|
|
55
|
+
|
|
56
|
+
Verificación de cabeceras Origin y Referer contra el host real.
|
|
57
|
+
|
|
58
|
+
Validación de tokens CSRF en cookies, cabeceras o formularios.
|
|
59
|
+
|
|
60
|
+
Análisis del tipo de contenido (Content-Type) y parámetros sensibles.
|
|
61
|
+
|
|
62
|
+
Detección de peticiones JSON o formularios enviados desde dominios externos.
|
|
63
|
+
|
|
64
|
+
Asignación de un score de riesgo proporcional al número y severidad de señales encontradas.
|
|
65
|
+
|
|
66
|
+
Algoritmos utilizados:
|
|
67
|
+
Heurísticas basadas en cabeceras HTTP, validación semántica de origen, y detección de anomalías en métodos POST, PUT, DELETE y PATCH.
|
|
68
|
+
|
|
69
|
+
2. 🧬 XSSDefenseMiddleware
|
|
70
|
+
|
|
71
|
+
Defensa contra Cross-Site Scripting (XSS).
|
|
72
|
+
|
|
73
|
+
Analiza en profundidad los datos enviados en el cuerpo y querystring, detectando vectores de inyección HTML/JS mediante:
|
|
74
|
+
|
|
75
|
+
Patrones de alto riesgo (<script>, javascript:, onload=, eval()).
|
|
76
|
+
|
|
77
|
+
Ofuscaciones con entidades (<, %3Cscript).
|
|
78
|
+
|
|
79
|
+
Detección de atributos de eventos (onmouseover, onfocus, etc.).
|
|
80
|
+
|
|
81
|
+
Análisis de URIs maliciosas (data:text/html, vbscript:).
|
|
82
|
+
|
|
83
|
+
Scoring ponderado por severidad (de 0.3 a 0.95).
|
|
84
|
+
|
|
85
|
+
Algoritmos utilizados:
|
|
86
|
+
Detección basada en expresiones regulares avanzadas con pesos heurísticos y uso opcional de la librería Bleach para sanitización comparativa.
|
|
87
|
+
|
|
88
|
+
Salida:
|
|
89
|
+
Agrega request.xss_attack_info con los detalles de detección, la IP de origen, descripción, payload y score total.
|
|
90
|
+
|
|
91
|
+
3. 💾 SQLIDefenseMiddleware
|
|
92
|
+
|
|
93
|
+
Defensa contra Inyección SQL (SQLi).
|
|
94
|
+
|
|
95
|
+
Identifica intentos de inyección SQL en los parámetros enviados a través de:
|
|
96
|
+
|
|
97
|
+
Palabras clave peligrosas (UNION, SELECT, DROP, INSERT, UPDATE).
|
|
98
|
+
|
|
99
|
+
Uso de comentarios (--, #, /_ ... _/).
|
|
100
|
+
|
|
101
|
+
Concatenaciones o subconsultas sospechosas.
|
|
102
|
+
|
|
103
|
+
Comportamientos anómalos en parámetros GET, POST o JSON.
|
|
104
|
+
|
|
105
|
+
Algoritmos utilizados:
|
|
106
|
+
Heurísticas sintácticas + patrones combinados con contextos.
|
|
107
|
+
Evalúa combinaciones de operadores y palabras reservadas para minimizar falsos positivos.
|
|
108
|
+
|
|
109
|
+
Resultado:
|
|
110
|
+
Registra el intento en request.sql_injection_info con score calculado y parámetros comprometidos.
|
|
111
|
+
|
|
112
|
+
4. 🌐 DOSDefenseMiddleware
|
|
113
|
+
|
|
114
|
+
Detección de ataques de Denegación de Servicio (DoS).
|
|
115
|
+
|
|
116
|
+
Monitorea la frecuencia de peticiones por IP y calcula una métrica adaptativa de comportamiento:
|
|
117
|
+
|
|
118
|
+
Detecta exceso de solicitudes en intervalos cortos.
|
|
119
|
+
|
|
120
|
+
Analiza User-Agent, patrones repetitivos y tamaño de payloads.
|
|
121
|
+
|
|
122
|
+
Aplica límites configurables (MAX_REQUESTS_PER_WINDOW).
|
|
123
|
+
|
|
124
|
+
Marca IPs sospechosas para registro y bloqueo temporal.
|
|
125
|
+
|
|
126
|
+
Algoritmos utilizados:
|
|
127
|
+
Sliding Window con conteo adaptativo en memoria, controlado por señales de frecuencia e intensidad.
|
|
128
|
+
|
|
129
|
+
5. 🕷️ ScrapingDefenseMiddleware (opcional)
|
|
130
|
+
|
|
131
|
+
Detección de scraping y bots automatizados.
|
|
132
|
+
|
|
133
|
+
Evalúa características típicas de scraping:
|
|
134
|
+
|
|
135
|
+
User-Agent anómalo o ausente.
|
|
136
|
+
|
|
137
|
+
Patrón de navegación repetitivo o excesivamente rápido.
|
|
138
|
+
|
|
139
|
+
Ausencia de cabeceras humanas (como Accept-Language o Referer).
|
|
140
|
+
|
|
141
|
+
Combinación con heurísticas de DoS para detectar scrapers agresivos.
|
|
142
|
+
|
|
143
|
+
Algoritmos utilizados:
|
|
144
|
+
Análisis estadístico de cabeceras + patrones de comportamiento a corto plazo.
|
|
145
|
+
|
|
146
|
+
🧠 Integración y uso
|
|
147
|
+
|
|
148
|
+
Instalar la librería:
|
|
149
|
+
|
|
150
|
+
pip install guardian-univalle
|
|
151
|
+
|
|
152
|
+
En tu archivo settings.py de Django, añadir los middlewares:
|
|
153
|
+
|
|
154
|
+
MIDDLEWARE = [
|
|
155
|
+
"guardian_univalle.detectores.csrf_defense.CSRFDefenseMiddleware",
|
|
156
|
+
"guardian_univalle.detectores.xss_defense.XSSDefenseMiddleware",
|
|
157
|
+
"guardian_univalle.detectores.sql_defense.SQLIDefenseMiddleware",
|
|
158
|
+
"guardian_univalle.detectores.dos_defense.DOSDefenseMiddleware",
|
|
159
|
+
"guardian_univalle.detectores.scraping_defense.ScrapingDefenseMiddleware", # opcional
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
(Opcional) Configurar umbrales en settings.py:
|
|
163
|
+
|
|
164
|
+
XSS_DEFENSE_THRESHOLD = 0.6
|
|
165
|
+
CSRF_DEFENSE_MIN_SIGNALS = 1
|
|
166
|
+
DOS_DEFENSE_MAX_REQUESTS = 100
|
|
167
|
+
SQLI_DEFENSE_THRESHOLD = 0.5
|
|
168
|
+
|
|
169
|
+
🧾 Auditoría y correlación de eventos
|
|
170
|
+
|
|
171
|
+
Cada middleware genera un diccionario con detalles de detección:
|
|
172
|
+
|
|
173
|
+
request.xss_attack_info = {
|
|
174
|
+
"ip": "192.168.1.10",
|
|
175
|
+
"tipos": ["XSS"],
|
|
176
|
+
"descripcion": ["Etiqueta <script> detectada"],
|
|
177
|
+
"payload": "{'field': 'comentario', 'snippet': '<script>alert(1)</script>'}",
|
|
178
|
+
"score": 0.92,
|
|
179
|
+
"url": "/comentarios/enviar/",
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
Estos datos pueden ser almacenados por un AuditoriaMiddleware o enviados a un sistema SIEM para correlación y respuesta automatizada.
|
|
183
|
+
|
|
184
|
+
🧩 Filosofía del proyecto
|
|
185
|
+
|
|
186
|
+
Guardian Univalle – Benito & Junkrat busca proporcionar una capa de defensa proactiva para entornos Django universitarios y empresariales, combinando:
|
|
187
|
+
|
|
188
|
+
Detección heurística,
|
|
189
|
+
|
|
190
|
+
Análisis semántico de cabeceras y payloads, y
|
|
191
|
+
|
|
192
|
+
Escalamiento de score basado en señales múltiples.
|
|
193
|
+
|
|
194
|
+
Su diseño es didáctico y extensible, ideal tanto para proyectos reales como para enseñanza de ciberseguridad aplicada.
|
|
195
|
+
|
|
196
|
+
🧱 Estructura del paquete
|
|
197
|
+
guardian_univalle/
|
|
198
|
+
│
|
|
199
|
+
├── detectores/
|
|
200
|
+
│ ├── csrf_defense.py
|
|
201
|
+
│ ├── xss_defense.py
|
|
202
|
+
│ ├── sql_defense.py
|
|
203
|
+
│ ├── dos_defense.py
|
|
204
|
+
│ ├── scraping_defense.py
|
|
205
|
+
│
|
|
206
|
+
├── auditoria/
|
|
207
|
+
│ └── auditoria_middleware.py
|
|
208
|
+
│
|
|
209
|
+
└── **init**.py
|
|
210
|
+
|
|
211
|
+
🧾 Licencia
|
|
212
|
+
|
|
213
|
+
Este proyecto se distribuye bajo la licencia MIT, permitiendo libre uso y modificación con atribución.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
<!-- Información de la librería -->
|
|
2
|
+
|
|
3
|
+
🛡️ Guardian Univalle – Benito & Junkrat
|
|
4
|
+
|
|
5
|
+
Framework de detección y defensa de amenazas web para Django
|
|
6
|
+
|
|
7
|
+
Guardian Univalle es un sistema de seguridad modular desarrollado para fortalecer aplicaciones Django frente a ataques web comunes como XSS, CSRF, inyección SQL, ataques DoS y scraping automatizado.
|
|
8
|
+
Cada módulo opera mediante middleware independientes que analizan el tráfico HTTP en tiempo real, aplican heurísticas inteligentes y registran eventos sospechosos para auditoría y bloqueo adaptativo.
|
|
9
|
+
|
|
10
|
+
⚙️ Arquitectura general
|
|
11
|
+
|
|
12
|
+
Guardian Univalle está diseñado bajo una arquitectura modular y extensible, donde cada tipo de amenaza se gestiona mediante un middleware especializado.
|
|
13
|
+
Cada middleware:
|
|
14
|
+
|
|
15
|
+
Se ejecuta en la fase inicial del request (process_request).
|
|
16
|
+
|
|
17
|
+
Analiza cabeceras, cuerpo y metadatos de la petición.
|
|
18
|
+
|
|
19
|
+
Evalúa indicadores de ataque según patrones heurísticos y reglas configurables.
|
|
20
|
+
|
|
21
|
+
Calcula una puntuación de riesgo (score) para cada evento.
|
|
22
|
+
|
|
23
|
+
Anexa la información al objeto request (por ejemplo, request.xss_attack_info) para que otros módulos (como el de auditoría) la procesen.
|
|
24
|
+
|
|
25
|
+
🧩 Módulos de defensa incluidos
|
|
26
|
+
|
|
27
|
+
1. 🔐 CSRFDefenseMiddleware
|
|
28
|
+
|
|
29
|
+
Defensa contra Cross-Site Request Forgery (CSRF).
|
|
30
|
+
|
|
31
|
+
Este módulo detecta intentos de falsificación de peticiones mediante:
|
|
32
|
+
|
|
33
|
+
Verificación de cabeceras Origin y Referer contra el host real.
|
|
34
|
+
|
|
35
|
+
Validación de tokens CSRF en cookies, cabeceras o formularios.
|
|
36
|
+
|
|
37
|
+
Análisis del tipo de contenido (Content-Type) y parámetros sensibles.
|
|
38
|
+
|
|
39
|
+
Detección de peticiones JSON o formularios enviados desde dominios externos.
|
|
40
|
+
|
|
41
|
+
Asignación de un score de riesgo proporcional al número y severidad de señales encontradas.
|
|
42
|
+
|
|
43
|
+
Algoritmos utilizados:
|
|
44
|
+
Heurísticas basadas en cabeceras HTTP, validación semántica de origen, y detección de anomalías en métodos POST, PUT, DELETE y PATCH.
|
|
45
|
+
|
|
46
|
+
2. 🧬 XSSDefenseMiddleware
|
|
47
|
+
|
|
48
|
+
Defensa contra Cross-Site Scripting (XSS).
|
|
49
|
+
|
|
50
|
+
Analiza en profundidad los datos enviados en el cuerpo y querystring, detectando vectores de inyección HTML/JS mediante:
|
|
51
|
+
|
|
52
|
+
Patrones de alto riesgo (<script>, javascript:, onload=, eval()).
|
|
53
|
+
|
|
54
|
+
Ofuscaciones con entidades (<, %3Cscript).
|
|
55
|
+
|
|
56
|
+
Detección de atributos de eventos (onmouseover, onfocus, etc.).
|
|
57
|
+
|
|
58
|
+
Análisis de URIs maliciosas (data:text/html, vbscript:).
|
|
59
|
+
|
|
60
|
+
Scoring ponderado por severidad (de 0.3 a 0.95).
|
|
61
|
+
|
|
62
|
+
Algoritmos utilizados:
|
|
63
|
+
Detección basada en expresiones regulares avanzadas con pesos heurísticos y uso opcional de la librería Bleach para sanitización comparativa.
|
|
64
|
+
|
|
65
|
+
Salida:
|
|
66
|
+
Agrega request.xss_attack_info con los detalles de detección, la IP de origen, descripción, payload y score total.
|
|
67
|
+
|
|
68
|
+
3. 💾 SQLIDefenseMiddleware
|
|
69
|
+
|
|
70
|
+
Defensa contra Inyección SQL (SQLi).
|
|
71
|
+
|
|
72
|
+
Identifica intentos de inyección SQL en los parámetros enviados a través de:
|
|
73
|
+
|
|
74
|
+
Palabras clave peligrosas (UNION, SELECT, DROP, INSERT, UPDATE).
|
|
75
|
+
|
|
76
|
+
Uso de comentarios (--, #, /_ ... _/).
|
|
77
|
+
|
|
78
|
+
Concatenaciones o subconsultas sospechosas.
|
|
79
|
+
|
|
80
|
+
Comportamientos anómalos en parámetros GET, POST o JSON.
|
|
81
|
+
|
|
82
|
+
Algoritmos utilizados:
|
|
83
|
+
Heurísticas sintácticas + patrones combinados con contextos.
|
|
84
|
+
Evalúa combinaciones de operadores y palabras reservadas para minimizar falsos positivos.
|
|
85
|
+
|
|
86
|
+
Resultado:
|
|
87
|
+
Registra el intento en request.sql_injection_info con score calculado y parámetros comprometidos.
|
|
88
|
+
|
|
89
|
+
4. 🌐 DOSDefenseMiddleware
|
|
90
|
+
|
|
91
|
+
Detección de ataques de Denegación de Servicio (DoS).
|
|
92
|
+
|
|
93
|
+
Monitorea la frecuencia de peticiones por IP y calcula una métrica adaptativa de comportamiento:
|
|
94
|
+
|
|
95
|
+
Detecta exceso de solicitudes en intervalos cortos.
|
|
96
|
+
|
|
97
|
+
Analiza User-Agent, patrones repetitivos y tamaño de payloads.
|
|
98
|
+
|
|
99
|
+
Aplica límites configurables (MAX_REQUESTS_PER_WINDOW).
|
|
100
|
+
|
|
101
|
+
Marca IPs sospechosas para registro y bloqueo temporal.
|
|
102
|
+
|
|
103
|
+
Algoritmos utilizados:
|
|
104
|
+
Sliding Window con conteo adaptativo en memoria, controlado por señales de frecuencia e intensidad.
|
|
105
|
+
|
|
106
|
+
5. 🕷️ ScrapingDefenseMiddleware (opcional)
|
|
107
|
+
|
|
108
|
+
Detección de scraping y bots automatizados.
|
|
109
|
+
|
|
110
|
+
Evalúa características típicas de scraping:
|
|
111
|
+
|
|
112
|
+
User-Agent anómalo o ausente.
|
|
113
|
+
|
|
114
|
+
Patrón de navegación repetitivo o excesivamente rápido.
|
|
115
|
+
|
|
116
|
+
Ausencia de cabeceras humanas (como Accept-Language o Referer).
|
|
117
|
+
|
|
118
|
+
Combinación con heurísticas de DoS para detectar scrapers agresivos.
|
|
119
|
+
|
|
120
|
+
Algoritmos utilizados:
|
|
121
|
+
Análisis estadístico de cabeceras + patrones de comportamiento a corto plazo.
|
|
122
|
+
|
|
123
|
+
🧠 Integración y uso
|
|
124
|
+
|
|
125
|
+
Instalar la librería:
|
|
126
|
+
|
|
127
|
+
pip install guardian-univalle
|
|
128
|
+
|
|
129
|
+
En tu archivo settings.py de Django, añadir los middlewares:
|
|
130
|
+
|
|
131
|
+
MIDDLEWARE = [
|
|
132
|
+
"guardian_univalle.detectores.csrf_defense.CSRFDefenseMiddleware",
|
|
133
|
+
"guardian_univalle.detectores.xss_defense.XSSDefenseMiddleware",
|
|
134
|
+
"guardian_univalle.detectores.sql_defense.SQLIDefenseMiddleware",
|
|
135
|
+
"guardian_univalle.detectores.dos_defense.DOSDefenseMiddleware",
|
|
136
|
+
"guardian_univalle.detectores.scraping_defense.ScrapingDefenseMiddleware", # opcional
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
(Opcional) Configurar umbrales en settings.py:
|
|
140
|
+
|
|
141
|
+
XSS_DEFENSE_THRESHOLD = 0.6
|
|
142
|
+
CSRF_DEFENSE_MIN_SIGNALS = 1
|
|
143
|
+
DOS_DEFENSE_MAX_REQUESTS = 100
|
|
144
|
+
SQLI_DEFENSE_THRESHOLD = 0.5
|
|
145
|
+
|
|
146
|
+
🧾 Auditoría y correlación de eventos
|
|
147
|
+
|
|
148
|
+
Cada middleware genera un diccionario con detalles de detección:
|
|
149
|
+
|
|
150
|
+
request.xss_attack_info = {
|
|
151
|
+
"ip": "192.168.1.10",
|
|
152
|
+
"tipos": ["XSS"],
|
|
153
|
+
"descripcion": ["Etiqueta <script> detectada"],
|
|
154
|
+
"payload": "{'field': 'comentario', 'snippet': '<script>alert(1)</script>'}",
|
|
155
|
+
"score": 0.92,
|
|
156
|
+
"url": "/comentarios/enviar/",
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
Estos datos pueden ser almacenados por un AuditoriaMiddleware o enviados a un sistema SIEM para correlación y respuesta automatizada.
|
|
160
|
+
|
|
161
|
+
🧩 Filosofía del proyecto
|
|
162
|
+
|
|
163
|
+
Guardian Univalle – Benito & Junkrat busca proporcionar una capa de defensa proactiva para entornos Django universitarios y empresariales, combinando:
|
|
164
|
+
|
|
165
|
+
Detección heurística,
|
|
166
|
+
|
|
167
|
+
Análisis semántico de cabeceras y payloads, y
|
|
168
|
+
|
|
169
|
+
Escalamiento de score basado en señales múltiples.
|
|
170
|
+
|
|
171
|
+
Su diseño es didáctico y extensible, ideal tanto para proyectos reales como para enseñanza de ciberseguridad aplicada.
|
|
172
|
+
|
|
173
|
+
🧱 Estructura del paquete
|
|
174
|
+
guardian_univalle/
|
|
175
|
+
│
|
|
176
|
+
├── detectores/
|
|
177
|
+
│ ├── csrf_defense.py
|
|
178
|
+
│ ├── xss_defense.py
|
|
179
|
+
│ ├── sql_defense.py
|
|
180
|
+
│ ├── dos_defense.py
|
|
181
|
+
│ ├── scraping_defense.py
|
|
182
|
+
│
|
|
183
|
+
├── auditoria/
|
|
184
|
+
│ └── auditoria_middleware.py
|
|
185
|
+
│
|
|
186
|
+
└── **init**.py
|
|
187
|
+
|
|
188
|
+
🧾 Licencia
|
|
189
|
+
|
|
190
|
+
Este proyecto se distribuye bajo la licencia MIT, permitiendo libre uso y modificación con atribución.
|
{guardianunivalle_benito_yucra-0.1.64 → guardianunivalle_benito_yucra-0.1.66}/pyproject.toml
RENAMED
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "GuardianUnivalle-Benito-Yucra" # usar mayúsculas consistente
|
|
7
|
-
version = "0.1.
|
|
8
|
-
description = "Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS
|
|
7
|
+
version = "0.1.66"
|
|
8
|
+
description = "Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS) para Django/Flask"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Andres Benito Calle Yucra", email = "benitoandrescalle035@gmail.com" }
|
|
11
11
|
]
|
guardianunivalle_benito_yucra-0.1.64/GuardianUnivalle_Benito_Yucra/detectores/detector_keylogger.py
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
import psutil
|
|
3
|
-
import os
|
|
4
|
-
import logging
|
|
5
|
-
import platform
|
|
6
|
-
import subprocess
|
|
7
|
-
from typing import List, Dict
|
|
8
|
-
from django.conf import settings
|
|
9
|
-
from ..auditoria.registro_auditoria import registrar_evento
|
|
10
|
-
|
|
11
|
-
# =====================================================
|
|
12
|
-
# === CONFIGURACIÓN DEL LOGGER ===
|
|
13
|
-
# =====================================================
|
|
14
|
-
logger = logging.getLogger("keyloggerdefense")
|
|
15
|
-
logger.setLevel(logging.INFO)
|
|
16
|
-
if not logger.handlers:
|
|
17
|
-
handler = logging.StreamHandler()
|
|
18
|
-
handler.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
|
|
19
|
-
logger.addHandler(handler)
|
|
20
|
-
# =========================================
|
|
21
|
-
# Middleware de Keylogger para Django
|
|
22
|
-
# =========================================
|
|
23
|
-
from django.utils.deprecation import MiddlewareMixin
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class KEYLOGGERDefenseMiddleware(MiddlewareMixin):
|
|
27
|
-
"""
|
|
28
|
-
Middleware que ejecuta el escaneo de keyloggers
|
|
29
|
-
en cada request entrante.
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
def __init__(self, get_response=None):
|
|
33
|
-
super().__init__(get_response)
|
|
34
|
-
# Importa tu clase de detección
|
|
35
|
-
from .detector_keylogger import KEYLOGGERDefense
|
|
36
|
-
|
|
37
|
-
self.detector = KEYLOGGERDefense()
|
|
38
|
-
|
|
39
|
-
def process_request(self, request):
|
|
40
|
-
"""
|
|
41
|
-
Ejecuta el escaneo antes de procesar la vista.
|
|
42
|
-
Guarda los resultados en el objeto request para uso posterior.
|
|
43
|
-
"""
|
|
44
|
-
try:
|
|
45
|
-
# Detecta en modo interactivo
|
|
46
|
-
resultado = self.detector.ejecutar_escaneo(modo_interactivo=True)
|
|
47
|
-
request.keylogger_attack_info = resultado
|
|
48
|
-
except Exception as e:
|
|
49
|
-
logger.error("Error en KEYLOGGERDefenseMiddleware: %s", e)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# =====================================================
|
|
53
|
-
# === CONFIGURACIÓN DE PARÁMETROS ===
|
|
54
|
-
# =====================================================
|
|
55
|
-
PESO_KEYLOGGER = getattr(settings, "KEYLOGGER_PESO", 0.4)
|
|
56
|
-
EXTENSIONES_SOSPECHOSAS = [".exe", ".dll", ".scr", ".bat", ".cmd", ".msi"]
|
|
57
|
-
CARPETAS_CRITICAS = [
|
|
58
|
-
"C:\\Users\\Public",
|
|
59
|
-
"C:\\Users\\%USERNAME%\\AppData\\Roaming",
|
|
60
|
-
"C:\\Users\\%USERNAME%\\AppData\\Local\\Temp",
|
|
61
|
-
"C:\\ProgramData",
|
|
62
|
-
"C:\\Windows\\Temp",
|
|
63
|
-
]
|
|
64
|
-
PATRONES_NOMBRES = ["keylogger", "spy", "hook", "keyboard", "capture", "stealer"]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
# =====================================================
|
|
68
|
-
# === FUNCIONES AUXILIARES ===
|
|
69
|
-
# =====================================================
|
|
70
|
-
def calcular_score_keylogger(total_items: int) -> float:
|
|
71
|
-
"""Calcula el nivel de amenaza normalizado."""
|
|
72
|
-
return round(min(PESO_KEYLOGGER * total_items, 1.0), 3)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
def detectar_procesos_sospechosos() -> List[Dict]:
|
|
76
|
-
"""Escanea procesos activos y detecta posibles keyloggers."""
|
|
77
|
-
hallazgos = []
|
|
78
|
-
for proc in psutil.process_iter(["pid", "name", "exe"]):
|
|
79
|
-
try:
|
|
80
|
-
nombre = proc.info.get("name", "").lower()
|
|
81
|
-
if any(pat in nombre for pat in PATRONES_NOMBRES):
|
|
82
|
-
hallazgos.append(proc.info)
|
|
83
|
-
registrar_evento("Keylogger", f"Proceso sospechoso: {proc.info}")
|
|
84
|
-
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
|
85
|
-
continue
|
|
86
|
-
return hallazgos
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def detectar_archivos_sospechosos() -> List[str]:
|
|
90
|
-
"""
|
|
91
|
-
Busca archivos con extensiones peligrosas y nombres relacionados
|
|
92
|
-
a keyloggers en carpetas críticas del sistema.
|
|
93
|
-
"""
|
|
94
|
-
hallazgos = []
|
|
95
|
-
for base in CARPETAS_CRITICAS:
|
|
96
|
-
base = os.path.expandvars(base) # reemplaza %USERNAME%
|
|
97
|
-
if not os.path.exists(base):
|
|
98
|
-
continue
|
|
99
|
-
for root, _, files in os.walk(base):
|
|
100
|
-
for file in files:
|
|
101
|
-
if any(file.lower().endswith(ext) for ext in EXTENSIONES_SOSPECHOSAS):
|
|
102
|
-
if any(pat in file.lower() for pat in PATRONES_NOMBRES):
|
|
103
|
-
ruta = os.path.join(root, file)
|
|
104
|
-
hallazgos.append(ruta)
|
|
105
|
-
registrar_evento("Keylogger", f"Archivo sospechoso: {ruta}")
|
|
106
|
-
return hallazgos
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def detectar_programas_instalados() -> list[str]:
|
|
110
|
-
"""
|
|
111
|
-
Detecta software potencialmente malicioso en Windows usando PowerShell.
|
|
112
|
-
"""
|
|
113
|
-
hallazgos = []
|
|
114
|
-
if platform.system() != "Windows":
|
|
115
|
-
return hallazgos
|
|
116
|
-
|
|
117
|
-
ps_command = (
|
|
118
|
-
"Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\*,"
|
|
119
|
-
"HKLM:\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Select-Object DisplayName"
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
try:
|
|
123
|
-
salida = subprocess.check_output(
|
|
124
|
-
["powershell", "-Command", ps_command],
|
|
125
|
-
stderr=subprocess.DEVNULL,
|
|
126
|
-
shell=True,
|
|
127
|
-
).decode("utf-8", errors="ignore")
|
|
128
|
-
|
|
129
|
-
for linea in salida.splitlines():
|
|
130
|
-
nombre = linea.strip().lower()
|
|
131
|
-
if any(pat in nombre for pat in PATRONES_NOMBRES):
|
|
132
|
-
hallazgos.append(nombre)
|
|
133
|
-
registrar_evento("Keylogger", f"Software sospechoso: {nombre}")
|
|
134
|
-
|
|
135
|
-
except Exception as e:
|
|
136
|
-
logger.error("Error al listar programas instalados con PowerShell: %s", e)
|
|
137
|
-
|
|
138
|
-
return hallazgos
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
# =====================================================
|
|
142
|
-
# === CLASE PRINCIPAL DE DETECCIÓN ===
|
|
143
|
-
# =====================================================
|
|
144
|
-
class KEYLOGGERDefense:
|
|
145
|
-
"""
|
|
146
|
-
Escanea procesos, archivos y programas para detectar keyloggers
|
|
147
|
-
o software espía potencialmente malicioso.
|
|
148
|
-
"""
|
|
149
|
-
|
|
150
|
-
def ejecutar_escaneo(self, modo_interactivo=False):
|
|
151
|
-
procesos = detectar_procesos_sospechosos()
|
|
152
|
-
archivos = detectar_archivos_sospechosos()
|
|
153
|
-
programas = detectar_programas_instalados()
|
|
154
|
-
|
|
155
|
-
total_hallazgos = len(procesos) + len(archivos) + len(programas)
|
|
156
|
-
score = calcular_score_keylogger(total_hallazgos)
|
|
157
|
-
|
|
158
|
-
evento = {
|
|
159
|
-
"tipo": "Keylogger",
|
|
160
|
-
"procesos": procesos,
|
|
161
|
-
"archivos": archivos,
|
|
162
|
-
"programas": programas,
|
|
163
|
-
"score": score,
|
|
164
|
-
"descripcion": [],
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if total_hallazgos > 0:
|
|
168
|
-
evento["descripcion"] = [
|
|
169
|
-
f"Procesos sospechosos: {len(procesos)}",
|
|
170
|
-
f"Archivos sospechosos: {len(archivos)}",
|
|
171
|
-
f"Programas sospechosos: {len(programas)}",
|
|
172
|
-
]
|
|
173
|
-
if modo_interactivo:
|
|
174
|
-
# Retornar hallazgos para mostrar al usuario antes de bloquear
|
|
175
|
-
return evento
|
|
176
|
-
|
|
177
|
-
# Si no es interactivo, registra y bloquea automáticamente
|
|
178
|
-
registrar_evento(
|
|
179
|
-
tipo="Keylogger",
|
|
180
|
-
descripcion=f"Detectados {total_hallazgos} elementos sospechosos.",
|
|
181
|
-
severidad="ALTA" if score >= 0.5 else "MEDIA",
|
|
182
|
-
)
|
|
183
|
-
return evento
|
|
184
|
-
|
|
185
|
-
# Si no hay hallazgos
|
|
186
|
-
evento["descripcion"] = ["Sin hallazgos"]
|
|
187
|
-
return evento
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
"""
|
|
191
|
-
Algoritmos relacionados:
|
|
192
|
-
*Guardar registros con AES-256 + hash SHA-512 para integridad.
|
|
193
|
-
Contribución a fórmula de amenaza S:
|
|
194
|
-
S_keylogger = w_keylogger * numero_procesos_sospechosos
|
|
195
|
-
S_keylogger = 0.4 * 2
|
|
196
|
-
donde w_keylogger es peso asignado a keyloggers y numero_procesos_sospechosos es la cantidad de procesos detectados.
|
|
197
|
-
|
|
198
|
-
"""
|
|
199
|
-
"""
|
|
200
|
-
Detector extendido de Keyloggers
|
|
201
|
-
================================
|
|
202
|
-
|
|
203
|
-
Módulo avanzado de detección de keyloggers y software espía en el sistema.
|
|
204
|
-
Incluye revisión de procesos activos, archivos ejecutables sospechosos y
|
|
205
|
-
aplicaciones instaladas en el sistema operativo Windows.
|
|
206
|
-
|
|
207
|
-
Componentes:
|
|
208
|
-
- Escaneo de procesos activos.
|
|
209
|
-
- Detección de archivos con extensiones críticas (.exe, .dll, .scr, .bat, .cmd, .msi).
|
|
210
|
-
- Revisión de aplicaciones instaladas (si se ejecuta en Windows).
|
|
211
|
-
- Cálculo de nivel de amenaza y registro de auditoría.
|
|
212
|
-
|
|
213
|
-
Algoritmos:
|
|
214
|
-
* Revisión de procesos (psutil)
|
|
215
|
-
* Análisis de archivos con extensiones críticas
|
|
216
|
-
* Detección de software instalado
|
|
217
|
-
* Registro cifrado con AES-256 + SHA-512
|
|
218
|
-
* Fórmula: S_keylogger = w_keylogger * (procesos + archivos + instalaciones)
|
|
219
|
-
"""
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
-
Version: 0.1.64
|
|
4
|
-
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
|
|
5
|
-
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
-
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
-
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Topic :: Security
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Framework :: Django
|
|
16
|
-
Classifier: Framework :: Flask
|
|
17
|
-
Requires-Python: >=3.8
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
License-File: LICENSE
|
|
20
|
-
Requires-Dist: redis>=4.0
|
|
21
|
-
Requires-Dist: django>=3.2
|
|
22
|
-
Dynamic: license-file
|
|
23
|
-
|
|
24
|
-
<!-- Información de la librería -->
|
|
25
|
-
|
|
26
|
-
🔐 Algoritmos de cifrado simétrico
|
|
27
|
-
AES (Rijndael) → AES-128, AES-192, AES-256
|
|
28
|
-
RC6
|
|
29
|
-
ChaCha20
|
|
30
|
-
|
|
31
|
-
🔀 Modos de operación de cifrado simétrico
|
|
32
|
-
CTR (Counter Mode)
|
|
33
|
-
CFB (Cipher Feedback Mode)
|
|
34
|
-
OFB (Output Feedback Mode)
|
|
35
|
-
CCM (Counter with CBC-MAC)
|
|
36
|
-
EAX
|
|
37
|
-
GCM (Galois/Counter Mode)
|
|
38
|
-
XTS
|
|
39
|
-
|
|
40
|
-
🔑 Algoritmos de cifrado asimétrico
|
|
41
|
-
RSA (Rivest–Shamir–Adleman)
|
|
42
|
-
ECC (Elliptic Curve Cryptography)
|
|
43
|
-
🧮 Algoritmos relacionados con factorización y logaritmos
|
|
44
|
-
CGCN (Criba General del Cuerpo de Números / General Number Field Sieve, GNFS)
|
|
45
|
-
Algoritmo de Shor (para computación cuántica)
|
|
46
|
-
Multiplicación por tentativa (método básico de exponenciación para logaritmos discretos)
|
|
47
|
-
|
|
48
|
-
🔑 Funciones de derivación de claves (KDF)
|
|
49
|
-
PBKDF2
|
|
50
|
-
scrypt
|
|
51
|
-
Argon2
|
|
52
|
-
|
|
53
|
-
📝 Funciones hash
|
|
54
|
-
Serie MD: MD2, MD4, MD5, MD6
|
|
55
|
-
SHA (Secure Hash Algorithm): SHA-0, SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
|
|
56
|
-
|
|
57
|
-
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: GuardianUnivalle-Benito-Yucra
|
|
3
|
-
Version: 0.1.64
|
|
4
|
-
Summary: Middleware y detectores de seguridad (SQLi, XSS, CSRF, DoS, Keylogger) para Django/Flask
|
|
5
|
-
Author-email: Andres Benito Calle Yucra <benitoandrescalle035@gmail.com>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://pypi.org/project/guardianunivalle-benito-yucra/
|
|
8
|
-
Project-URL: Bug_Tracker, https://github.com/Andyyupy/guardianunivalle-benito-yucra/issues
|
|
9
|
-
Keywords: security,django,flask,sqli,xss,csrf,middleware
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Topic :: Security
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Programming Language :: Python :: 3
|
|
15
|
-
Classifier: Framework :: Django
|
|
16
|
-
Classifier: Framework :: Flask
|
|
17
|
-
Requires-Python: >=3.8
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
License-File: LICENSE
|
|
20
|
-
Requires-Dist: redis>=4.0
|
|
21
|
-
Requires-Dist: django>=3.2
|
|
22
|
-
Dynamic: license-file
|
|
23
|
-
|
|
24
|
-
<!-- Información de la librería -->
|
|
25
|
-
|
|
26
|
-
🔐 Algoritmos de cifrado simétrico
|
|
27
|
-
AES (Rijndael) → AES-128, AES-192, AES-256
|
|
28
|
-
RC6
|
|
29
|
-
ChaCha20
|
|
30
|
-
|
|
31
|
-
🔀 Modos de operación de cifrado simétrico
|
|
32
|
-
CTR (Counter Mode)
|
|
33
|
-
CFB (Cipher Feedback Mode)
|
|
34
|
-
OFB (Output Feedback Mode)
|
|
35
|
-
CCM (Counter with CBC-MAC)
|
|
36
|
-
EAX
|
|
37
|
-
GCM (Galois/Counter Mode)
|
|
38
|
-
XTS
|
|
39
|
-
|
|
40
|
-
🔑 Algoritmos de cifrado asimétrico
|
|
41
|
-
RSA (Rivest–Shamir–Adleman)
|
|
42
|
-
ECC (Elliptic Curve Cryptography)
|
|
43
|
-
🧮 Algoritmos relacionados con factorización y logaritmos
|
|
44
|
-
CGCN (Criba General del Cuerpo de Números / General Number Field Sieve, GNFS)
|
|
45
|
-
Algoritmo de Shor (para computación cuántica)
|
|
46
|
-
Multiplicación por tentativa (método básico de exponenciación para logaritmos discretos)
|
|
47
|
-
|
|
48
|
-
🔑 Funciones de derivación de claves (KDF)
|
|
49
|
-
PBKDF2
|
|
50
|
-
scrypt
|
|
51
|
-
Argon2
|
|
52
|
-
|
|
53
|
-
📝 Funciones hash
|
|
54
|
-
Serie MD: MD2, MD4, MD5, MD6
|
|
55
|
-
SHA (Secure Hash Algorithm): SHA-0, SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
|
|
56
|
-
|
|
57
|
-
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<!-- Información de la librería -->
|
|
2
|
-
|
|
3
|
-
🔐 Algoritmos de cifrado simétrico
|
|
4
|
-
AES (Rijndael) → AES-128, AES-192, AES-256
|
|
5
|
-
RC6
|
|
6
|
-
ChaCha20
|
|
7
|
-
|
|
8
|
-
🔀 Modos de operación de cifrado simétrico
|
|
9
|
-
CTR (Counter Mode)
|
|
10
|
-
CFB (Cipher Feedback Mode)
|
|
11
|
-
OFB (Output Feedback Mode)
|
|
12
|
-
CCM (Counter with CBC-MAC)
|
|
13
|
-
EAX
|
|
14
|
-
GCM (Galois/Counter Mode)
|
|
15
|
-
XTS
|
|
16
|
-
|
|
17
|
-
🔑 Algoritmos de cifrado asimétrico
|
|
18
|
-
RSA (Rivest–Shamir–Adleman)
|
|
19
|
-
ECC (Elliptic Curve Cryptography)
|
|
20
|
-
🧮 Algoritmos relacionados con factorización y logaritmos
|
|
21
|
-
CGCN (Criba General del Cuerpo de Números / General Number Field Sieve, GNFS)
|
|
22
|
-
Algoritmo de Shor (para computación cuántica)
|
|
23
|
-
Multiplicación por tentativa (método básico de exponenciación para logaritmos discretos)
|
|
24
|
-
|
|
25
|
-
🔑 Funciones de derivación de claves (KDF)
|
|
26
|
-
PBKDF2
|
|
27
|
-
scrypt
|
|
28
|
-
Argon2
|
|
29
|
-
|
|
30
|
-
📝 Funciones hash
|
|
31
|
-
Serie MD: MD2, MD4, MD5, MD6
|
|
32
|
-
SHA (Secure Hash Algorithm): SHA-0, SHA-1, SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
|
|
33
|
-
|
|
34
|
-
|
|
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
|