Wazuh IP Reputation Checker

📋 Descripción

Wazuh IP Reputation Checker es un sistema avanzado de análisis de reputación de IPs que se integra con Wazuh SIEM para enriquecer automáticamente los eventos de seguridad con información de inteligencia de amenazas de múltiples fuentes.


Características Principales

  • 🔍 Integración con Wazuh API: Extracción automática de IPs desde alertas de Wazuh
  • 🌐 Múltiples fuentes de inteligencia:
    • VirusTotal
    • AbuseIPDB
    • Shodan
  • 📊 Sistema de puntuación de riesgo: Clasificación automática de IPs (CRITICAL, HIGH, MEDIUM, LOW, SAFE)
  • 📧 Notificaciones inteligentes: Alertas por email con formato HTML enriquecido
  • 💾 Base de datos MariaDB/MySQL: Almacenamiento persistente con estadísticas históricas
  • 🔄 Monitoreo continuo: Análisis automático con intervalos configurables
  • 🛡️ Cache inteligente: Evita consultas repetidas a las APIs
  • 📈 Estadísticas y reportes: Métricas detalladas del sistema
  • 🔧 Herramientas de administración: CLI completa para gestión

🏗️ Diagrama Conceptual


🔓 Arquitectura del Sistema


📁 Estructura de archivos


🚀 Instalación

Requisitos del Sistema

  • Ubuntu 22.04 LTS
  • Python 3.10+
  • Acceso a Wazuh Manager API
  • Conexión a internet para APIs externas
  • Privilegios de administrador para instalación

Recomendaciones

Instalación Rápida

# Descargar el script de instalación
wget https://raw.githubusercontent.com/juanpadiaz/wazuh-ip-reputation/main/wazuh_ip_reputation_install.sh

# Dar permisos de ejecución
chmod +x wazuh_ip_reputation_install.sh

# Ejecutar instalación
sudo bash wazuh_ip_reputation_install.sh

⚙️ Configuración

Configuración durante la Instalación

El instalador solicitará interactivamente:

  1. Configuración de Wazuh:
    • Host/IP del Wazuh Manager
    • Puerto de la API (default: 55000)
    • Usuario y contraseña de la API
  2. API Keys de Reputación:
    • VirusTotal API Key
    • AbuseIPDB API Key
    • Shodan API Key (opcional)
  3. Notificaciones por Email:
    • Servidor SMTP y puerto
    • Email remitente y contraseña
    • Emails destinatarios (separados por comas)

Actualizar Configuración

# Editar configuración manualmente
sudo wazuh-reputation config

# O usar el editor directamente
sudo nano /etc/wazuh-ip-reputation/config.ini

Archivo de Configuración (config.ini)

[general]
log_level = INFO
log_file = /var/log/wazuh-ip-reputation/wazuh-ip-reputation.log
check_interval = 300        # Segundos entre análisis
cache_duration = 3600       # Segundos de cache por IP

[database]
host = localhost
port = 3306
database = wazuh_ip_reputation
user = wazuh_ip_user
password = ****************

[wazuh]
host = 192.168.1.100       # IP del Wazuh Manager
port = 55000
username = admin
password = ****************
verify_ssl = false

[apis]
virustotal_key = ********************************
abuseipdb_key = ********************************
shodan_key = ********************************

[email]
enabled = true
smtp_server = smtp.gmail.com
smtp_port = 587
sender_email = alerts@example.com
sender_password = ****************
recipient_emails = security@example.com,admin@example.com

[thresholds]
critical = 90              # Score >= 90 = CRITICAL
high = 70                  # Score >= 70 = HIGH
medium = 40                # Score >= 40 = MEDIUM
low = 20                   # Score >= 20 = LOW

Archivo de campos utilizados para la evualuación (network_fields.yml)

# Campos estándar
standard_fields:
  - field: data.srcip
    description: "IP de origen estándar"

# Campos de Suricata
suricata_fields:
  - field: data.flow.src_ip
    description: "IP origen de Suricata"

# Campos personalizados
custom_fields:
  - field: data.mi_integracion.ip_field
    description: "Mi campo personalizado"

# Estructuras anidadas a explorar
nested_structures:
  - data.flow
  - data.network

# Campos a ignorar
ignore_fields:
  - data.hostname

🛠️ Comandos de Administración

# Gestión del servicio
sudo wazuh-reputation start              # Iniciar servicio
sudo wazuh-reputation stop               # Detener servicio
sudo wazuh-reputation restart            # Reiniciar servicio
sudo wazuh-reputation status             # Ver estado y estadísticas

# Operaciones
sudo wazuh-reputation check-once         # Ejecutar análisis manual
sudo wazuh-reputation test-apis          # Probar conexión con APIs
sudo wazuh-reputation clear-cache        # Limpiar cache de IPs
sudo wazuh-reputation test-email    # Probar el envío de notificaciones por correo electrónico

# Consultas
sudo wazuh-reputation show-stats         # Mostrar estadísticas detalladas
sudo wazuh-reputation show-ips [N]       # Mostrar últimas N IPs analizadas
sudo wazuh-reputation show-alerts [N]    # Mostrar últimas N alertas enviadas

# Mantenimiento
sudo wazuh-reputation logs               # Ver logs en tiempo real
sudo wazuh-reputation backup             # Crear backup manual
sudo wazuh-reputation config             # Editar configuración
sudo wazuh-reputation test-email         # Probar configuración de email
sudo wazuh-reputation show-fields        # Ver campos de red configurados
sudo wazuh-reputation edit-fields        # Editar campos para evaluación personalizados
sudo wazuh-reputation check-once         # ejecutar la aplicación completa, útil si se habilita el modo de prueba

📊 Gestión del Servicio

Estado del Servicio

# Ver estado completo
sudo systemctl status wazuh-ip-reputation

# Ver logs del servicio
sudo journalctl -u wazuh-ip-reputation -f

# Habilitar inicio automático
sudo systemctl enable wazuh-ip-reputation

Activar/Desactivar modo de prueba

# Activar modo de prueba
sudo wazuh-reputation test-mode-on

# Desactivar modo de prueba
sudo wazuh-reputation test-mode-off

# Reiniciar para aplicar cambios
sudo wazuh-reputation restart

Editando la configuración:

# Editar configuración
sudo nano /etc/wazuh-ip-reputation/config.ini

# En la sección [general], agregar o modificar:
test_mode = true   # o false para desactivar

# Reiniciar el servicio
sudo systemctl restart wazuh-ip-reputation

Verificación:

bash
# 1. Verificar el estado del servicio
sudo wazuh-reputation status

# 2. Probar la extracción de IPs
sudo wazuh-reputation check-once

# 3. Ver los logs en tiempo real
sudo wazuh-reputation logs

# 4. Si activaste el modo de prueba, deberías ver:
# "Modo de prueba activado - generando IPs de ejemplo"
# Y 3 IPs de prueba serán procesadas

Agregar campos personalizados para su evaluación

1.- Editar el archivo:

sudo wazuh-reputation edit-fields

2.- Agregar campos en la sección apropiada:

custom_fields:
  - field: data.mi_campo.ip_origen
    description: "IP de mi sistema personalizado"

3.- Reiniciar el servicio:

sudo wazuh-reputation restart

Sistema de Notificaciones

El sistema envía notificaciones automáticas cuando detecta IPs con niveles de riesgo CRITICAL, HIGH o MEDIUM.

Características de las Notificaciones:

  • 📧 Formato HTML enriquecido con información detallada
  • 🔔 Deduplicación: No repite alertas de la misma IP en 24 horas
  • 📊 Agrupación por severidad: Organiza IPs por nivel de riesgo
  • 🌍 Información contextual: País, ISP, puertos abiertos, detecciones

Ejemplo de Notificación

🚨 Alerta de Seguridad Wazuh
IPs Maliciosas Detectadas

⚠️ CRÍTICAS (2)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IP: 192.168.1.100
Score de Riesgo: 95/100
Nivel: CRITICAL
País: CN
ISP: China Telecom
VT Detecciones: 15/87
Puertos: 22, 80, 443, 3389

⚠️ ALTAS (3)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IP: 10.0.0.50
Score de Riesgo: 75/100
Nivel: HIGH
País: RU
ISP: Petersburg Internet Network
VT Detecciones: 8/87

🗑️ Desinstalación

# Descargar script de desinstalación
wget https://raw.githubusercontent.com/juanpadiaz/wazuh-ip-reputation/main/wazuh_ip_reputation_uninstall.sh

# Ejecutar desinstalación
sudo bash wazuh_ip_reputation_uninstall.sh

# Desinstalación sin confirmaciones
sudo bash wazuh_ip_reputation_uninstall.sh --force

# Desinstalar pero mantener la base de datos
sudo bash wazuh_ip_reputation_uninstall.sh --keep-database

# Desinstalar sin crear backup
sudo wazuh_ip_reputation_uninstall.sh --no-backup

# Ver ayuda
sudo bash wazuh_ip_reputation_uninstall.sh --help

El script de desinstalación permite:

  • 🗑️ Elimina usuario del sistema
  • 🗑️ Elimina grupo del sistema
  • 📝 Verifica archivos remanentes
  • ✅ Crear backup antes de desinstalar
  • ❓ Eliminar base de datos (opcional)
  • 📝 Conservar logs (opcional)
  • 💾 Conservar datos históricos (opcional)

🔐 Seguridad

Mejores Prácticas Implementadas

  1. Permisos del Sistema:
    • Usuario dedicado sin shell (wazuh-reputation)
    • Archivos de configuración con permisos 640
    • Separación de privilegios
  2. Base de Datos:
    • Usuario dedicado con permisos mínimos
    • Contraseñas generadas aleatoriamente
    • Conexiones solo desde localhost
  3. API Keys:
    • Almacenadas en archivo protegido
    • No se muestran en logs
    • Rotación recomendada cada 90 días
  4. Comunicaciones:
    • HTTPS para todas las APIs externas
    • TLS/STARTTLS para email
    • Verificación SSL configurable

🔧 Solución de Problemas

Problemas Comunes

El servicio no inicia

# Verificar logs
sudo journalctl -u wazuh-ip-reputation -n 50

# Verificar configuración
sudo wazuh-reputation test-apis

# Verificar permisos
ls -la /etc/wazuh-ip-reputation/config.ini

No se reciben emails

# Probar configuración de email
sudo -u wazuh-reputation /opt/wazuh-ip-reputation/venv/bin/python << EOF
import smtplib
# Verificar conexión SMTP
EOF

# Para Gmail: verificar contraseña de aplicación
# Para otros: verificar puerto y autenticación

Error de API rate limit

# VirusTotal: Límite 4 requests/minuto (sin API key)
# AbuseIPDB: Límite 1000 requests/día
# Shodan: Límite según plan

# Solución: Aumentar cache_duration en config.ini

Base de datos llena

# Ver tamaño de tablas
mysql -u root -p -e "
SELECT table_name, ROUND(data_length/1024/1024, 2) AS 'Size MB'
FROM information_schema.tables
WHERE table_schema = 'wazuh_ip_reputation';"

# Limpiar datos antiguos (>90 días)
mysql -u root -p wazuh_ip_reputation -e "
DELETE FROM processed_ips WHERE processed_at < DATE_SUB(NOW(), INTERVAL 90 DAY);
DELETE FROM sent_alerts WHERE sent_at < DATE_SUB(NOW(), INTERVAL 90 DAY);"

📊 Métricas del Proyecto

  • Líneas de código: ~2,800
  • Archivos Python: 2
  • Scripts Bash: 2
  • Tablas de BD: 5
  • APIs integradas: 4 (Wazuh + 3 threat intel)
  • Tiempo promedio de análisis por IP: 3-5 segundos
  • Uso de memoria: ~100-200 MB
  • Almacenamiento requerido: ~1GB inicial + crecimiento según uso

📝 Changelog

Versión 3.0.0 (2024-07-28)

  • ✅Soporte mejorado para integraciones:
    • Suricata: data.flow.src_ip, data.flow.dest_ip
    • pfSense: Campos de firewall
    • IDS/IPS: Campos genéricos
    • Aplicaciones web: Headers y campos específicos
  • 📋Comando para probar email
  • ✨Archivo de campos personalizables
  • ✨Soporte mejorado para integraciones
  • ✨Método de extracción mejorado

Versión 2.0.2 (2024-07-12)

  • 📋Busca en múltiples endpoints de Wazuh
  • ✅Incluye vulnerabilidades y eventos de integridad
  • ✅Modo de prueba para generar IPs de ejemplo
  • ✅Mejor logging y manejo de errores

Versión 2.0.1 (2024-06-08)

  • 📋 Cambios principales en la versión 2.0.1:
  • ✅ Corrección de VirusTotal API:
  • ✨URL correcta: https://www.virustotal.com/api/v3/ip-addresses/{ip}
  • ✨Headers apropiados: ‘x-apikey’ y ‘Accept: application/json’
  • ✨Mejor manejo de respuestas 404 (IP no encontrada)
  • ✨Navegación correcta en la estructura JSON de respuesta
  • ✨Solo busca en endpoint /alerts
  • ✨Requiere alertas activas para encontrar IPs
  • ✅ Otras mejoras:
    • ✨Actualizada la versión a 2.0.1 en todo el código
    • ✨Mejor manejo de errores en todas las APIs
    • ✨Logging mejorado para diagnóstico

Versión 2.0.0 (2024-06-02)

  • 🎉 Release inicial completo
  • ✨ Integración con Wazuh API
  • ✨ Soporte para VirusTotal, AbuseIPDB y Shodan
  • ✨ Sistema de puntuación de riesgo
  • ✨ Notificaciones por email HTML
  • ✨ Base de datos MariaDB/MySQL
  • ✨ Herramientas de administración CLI
  • ✨ Sistema de cache inteligente
  • ✨ Backup automático
  • ✨ Instalador y desinstalador interactivos

Roadmap Futuro

  • 📅 v3.1.0: Integración con más APIs (AlienVault OTX, ThreatCrowd)
  • 📅 v3.2.0: Dashboard web para visualización
  • 📅 v3.3.0: Integración con Elastic Stack
  • 📅 v4.0.0: Machine Learning para detección de anomalías

👨‍💻 Autor y Licencia

  • Desarrollador: Juan Pablo Díaz Ezcurdia
  • Websitejpdiaz.com
  • Licencia: MIT License
  • Versión: 3.0.0
  • Última actualización: Julio 2025

¿Qué es un ataque de inyección iframe?

Hace algunos días me contacto un amigo que administra un sitio web para pedirme ayuda por que al entrar a su pagina principal el navegador le mostraba un mensaje de que entrar a su sitio podria dañar su equipo. El no entendía por que o como podía ocurrir esto ya que su servidor tenia sistema operativo Linux y el es el unico que tiene acceso al servidor por FTP. Así que se puso en contacto con su proveedor de hosting buscando respuestas y sobretodo ayuda pero poco fue lo que el soporte técnico del hosting pudo hacer por el, ya que no conocían este tipo de ataque.

Investigando al respecto logre ayudarle a solucionar el problema y en mi recorrido por los foros y sitios de antivirus y herramientas de malware encontré que esta situación es muy frecuente y en algunos servidores hasta recurrente. Así que me gustaría compartir los resultados que obtuve y como logre resolverlo.

Regularmente este ataque agrega una etiqueta  iframe dentro del body de nuestros archivos con nombre index, main, login y home. Esta etiqueta de iframe abre una pagina dentro de nuestra pagina que descarga codigo malicioso en la maquina de nuestros visitantes.

Un iframe también se puede usar para ataques CSRF (Cross-site request forgery) .

Un iframe de 1×1 no es visible pero cargado muchas veces puede causar una denegación de servicios.

Este tipo de ataques ocurre por que en el equipo o equipos desde donde accesamos por FTP a nuestro servidor web, se encuentra infectado con algún tipo de malware que toma los passwords guardados por el cliente de ftp y otras aplicaciones y los envía a los creadores del malware en algún servidor que se encarga de conectarse a nuestro servidor, buscar los archivos comunes (index, main, etc.) y agregar la etiqueta de iframe.

Existen algunas variaciones del mismo tipo de ataque.

En mi batalla personal encontré archivos con etiquetas de iframe con la dirección del atacante embebida dentro del código html (dentro de la etiqueta body), también encontre algunos tipos de ataque mas severos, en los que los archivos no conservaban nada del codigo original, en su lugar solo podemos ver una cadena sin sentido, que ejecuta codigo ofuscado con el mismo fin ejecutar el iframe. El problema de este ultimo es que el código ofuscado es una encripción del código original en base24 por lo que si bajamos el archivo para eliminar la cadena con el código ofuscado ninguna pc convencional podrá leerlo, de hecho ni siquiera se los mostrara dentro del editor.

La recomendación es:

1.- Revisar el ó los equipos que tienen acceso por FTP (incluso de los desarrolladores o programadores subcontratados) a este servidor con alguna herramienta anti malware, anti spyware y anti virus.

2.- Ya con nuestros equipos limpios pedir a nuestro proveedor de hosting eliminar la cuenta de hosting y crearla de nuevo. Para lo cual necesitaremos un respaldo reciente de nuestras paginas y de nuestras bases de datos. Si esto no es posible cambien el password de acceso a su FTP y borren todos los archivos anteriores del sitio.

3.- Subir el respaldo y cambiar los permisos de nuestros archivos y carpetas en el web server a solo lectura (444), de esta manera evitamos que algún código interno pueda escribir en los archivos, eso si cada que necesitemos realizar algun un cambio sobre los mismos tendremos que modificar las propiedades.

Por ultimo a petición de ustedes y sin afán de hacer comerciales les comento las herramientas que me funcionaron para detectar el malware:

Google Chrome como navegador web, si el sitio esta infectado evita la ejecución de la pagina y envía alertas visuales.

Ad Aware como complemento al antivirus para la detección del código malicioso.

Malwarebytes’ Anti-Malware nunca esta demás darle una doble revisada a los discos duros de nuestros equipos.

Y recuerden no guardar mas las contraseñas de sus sitios FTP en su maquina, sin importar que cliente de FTP usen.