Guilgo Blog

Notas de mi quehacer diario con las técnologias.

Como padre en la era digital, monitorizar la actividad online de los hijos es fundamental. Las soluciones comerciales son caras y poco transparentes. Este proyecto implementa un sistema de control parental completo usando herramientas open-source: Wazuh como SIEM para recolectar y analizar eventos, AdGuard Home como DNS filtering para bloquear contenido inapropiado, Hayabusa para threat hunting avanzado y Telegram para alertas en tiempo real al móvil.

¿Qué detecta este sistema?

Categoría Ejemplos
🔞 Contenido adulto Pornografía, sitios para adultos
🔒 Evasión de controles VPN, TOR, Proxy, DNS alternativo
🏴‍☠️ Piratería Torrents, sitios de descargas ilegales
🎮 Gaming Steam, Fortnite, Roblox, Minecraft
💬 Redes sociales TikTok, Discord, Snapchat, Instagram
🌙 Uso nocturno Actividad entre 23:00 y 06:00
⏰ Uso excesivo Más de 4-8 horas de uso
🛡️ Seguridad Antivirus deshabilitado, malware

Arquitectura del Sistema

┌─────────────────────────────────────────────────────────────────────┐
│                      EQUIPOS DE LOS NIÑOS                          │
│                                                                     │
│   PC-Hijo-1 (Windows)                 PC-Hijo-2 (Windows)          │
│   ┌─────────────────────┐            ┌─────────────────────┐       │
│   │ • Wazuh Agent 4.9.2 │            │ • Wazuh Agent 4.9.2 │       │
│   │ • Script Control    │            │ • Script Control    │       │
│   │   Parental (.ps1)   │            │   Parental (.ps1)   │       │
│   │ • Hayabusa          │            │ • Hayabusa          │       │
│   └──────────┬──────────┘            └──────────┬──────────┘       │
│              │                                  │                   │
│              │    Eventos Windows               │                   │
│              │    (Puerto 1514/tcp)             │                   │
│              └────────────────┬─────────────────┘                   │
│                               │                                     │
│                          DNS (53)                                   │
│                               │                                     │
└───────────────────────────────┼─────────────────────────────────────┘
                                │
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        SERVIDOR CENTRAL                             │
│                        (Docker Host)                                │
│                                                                     │
│  ┌──────────────────────┐      ┌──────────────────────┐            │
│  │   WAZUH MANAGER      │      │   ADGUARD HOME       │            │
│  │   (Container)        │      │   (Container)        │            │
│  │                      │      │                      │            │
│  │ • Recibe eventos     │◄─────│ • DNS Filtering      │            │
│  │ • Analiza con reglas │ cron │ • Bloqueo por listas │            │
│  │ • Genera alertas     │ */5m │ • Querylog JSON      │            │
│  │ • Integración        │      │                      │            │
│  │   Telegram           │      │ Listas activas:      │            │
│  │                      │      │ • anti-pr0n          │            │
│  │ Puertos:             │      │ • Anti-VPN/TOR       │            │
│  │ • 1514 (agentes)     │      │ • Anti-Piracy        │            │
│  │ • 1515 (registro)    │      │ • Anti-Malware       │            │
│  │ • 55000 (API)        │      │                      │            │
│  └──────────┬───────────┘      └──────────────────────┘            │
│             │                                                       │
│             │ Alertas nivel ≥7                                      │
│             ▼                                                       │
│  ┌──────────────────────┐                                          │
│  │   TELEGRAM BOT       │                                          │
│  │   (Notificaciones)   │───────────────────┐                      │
│  └──────────────────────┘                   │                      │
│                                             │                      │
└─────────────────────────────────────────────┼──────────────────────┘
                                              │
                                              ▼
                                   ┌──────────────────────┐
                                   │   📱 MÓVIL PADRE    │
                                   │   Alertas tiempo    │
                                   │   real              │
                                   └──────────────────────┘

Componentes Utilizados

Software del Servidor

Componente Versión Función
Docker 24.x Contenedores
Wazuh Manager 4.9.2 SIEM, análisis de eventos
AdGuard Home Latest DNS filtering
Python 3 3.x Scripts de integración

Software de los Clientes

Componente Versión Función
Wazuh Agent 4.9.2 Envío de eventos
Hayabusa 3.x Threat hunting local
PowerShell 5.1+ Scripts de monitoreo

Prerequisitos

En el servidor:

  • Linux con Docker instalado
  • Mínimo 4GB RAM, 20GB disco
  • Puertos abiertos: 53, 1514, 1515, 55000

En los clientes Windows:

  • Windows 10/11
  • PowerShell 5.1 o superior
  • Permisos de administrador
  • Conectividad al servidor

Instalación del Servidor

1. Docker Compose para Wazuh Manager

# docker-compose.yml
services:
  wazuh-manager-lite:
    image: wazuh/wazuh-manager:4.9.2
    container_name: wazuh-lite
    ports:
      - "1514:1514/tcp"   # Comunicación agentes
      - "1515:1515/tcp"   # Registro agentes
      - "55000:55000/tcp" # API
    volumes:
      - ./etc:/var/ossec/etc
      - ./data:/var/ossec/data
    networks:
      - mi-red
    restart: unless-stopped

networks:
  mi-red:
    external: true
# Iniciar Wazuh Manager
docker-compose up -d

# Verificar estado
docker exec wazuh-lite /var/ossec/bin/wazuh-control status

2. AdGuard Home

# docker-compose-adguard.yml
services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    volumes:
      - ./adguard/work:/opt/adguardhome/work
      - ./adguard/conf:/opt/adguardhome/conf
    restart: unless-stopped

3. Listas de bloqueo recomendadas para AdGuard

En la interfaz web de AdGuard, añadir estas listas:

Lista URL
Anti-Porn https://raw.githubusercontent.com/4skinSkywalker/Anti-Porn-HOSTS-File/master/HOSTS.txt
HaGeZi VPN/TOR/Proxy https://raw.githubusercontent.com/hagezi/dns-blocklists/main/domains/doh-vpn-proxy-bypass.txt
HaGeZi Anti-Piracy https://raw.githubusercontent.com/hagezi/dns-blocklists/main/domains/anti.piracy.txt
Malware https://raw.githubusercontent.com/hagezi/dns-blocklists/main/domains/tif.txt

Configuración de Wazuh Manager

Crear grupo para agentes Windows

docker exec wazuh-lite mkdir -p /var/ossec/etc/shared/windows

Configuración centralizada de agentes (agent.conf)

<!-- /var/ossec/etc/shared/windows/agent.conf -->
<agent_config os="windows">

  <!-- Event Channels a monitorizar -->
  <localfile>
    <location>Security</location>
    <log_format>eventchannel</log_format>
  </localfile>

  <localfile>
    <location>System</location>
    <log_format>eventchannel</log_format>
  </localfile>

  <localfile>
    <location>Application</location>
    <log_format>eventchannel</log_format>
  </localfile>

  <localfile>
    <location>Microsoft-Windows-PowerShell/Operational</location>
    <log_format>eventchannel</log_format>
  </localfile>

  <localfile>
    <location>Microsoft-Windows-Windows Defender/Operational</location>
    <log_format>eventchannel</log_format>
  </localfile>

  <!-- File Integrity Monitoring -->
  <syscheck>
    <disabled>no</disabled>
    <frequency>43200</frequency>
    <directories realtime="yes">%PROGRAMDATA%\Microsoft\Windows\Start Menu\Programs\Startup</directories>
    <windows_registry arch="both">HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run</windows_registry>
  </syscheck>

  <!-- System Inventory -->
  <wodle name="syscollector">
    <disabled>no</disabled>
    <interval>12h</interval>
    <hardware>yes</hardware>
    <os>yes</os>
    <packages>yes</packages>
    <processes>yes</processes>
  </wodle>

</agent_config>

Integración con AdGuard DNS

Script de extracción de logs (adguard-to-wazuh.sh)

Este script extrae los logs DNS de AdGuard y los envía a Wazuh:

#!/bin/bash
# /home/user/adguard-to-wazuh.sh
# Cron: */5 * * * * /home/user/adguard-to-wazuh.sh

CONTAINER="adguardhome"
QUERYLOG="/opt/adguardhome/work/data/querylog.json"
WAZUH_LOG="/path/to/wazuh/data/logs/adguard-dns.json"

# IPs de los niños
KIDS_IPS="10.5.5.124 10.5.5.112"

# Extraer últimas 100 líneas y filtrar
docker exec $CONTAINER tail -100 $QUERYLOG 2>/dev/null | while read line; do
    for IP in $KIDS_IPS; do
        if echo "$line" | grep -q "\"IP\":\"$IP\""; then
            DOMAIN=$(echo "$line" | sed -n 's/.*"QH":"\([^"]*\)".*/\1/p')
            TIME=$(echo "$line" | sed -n 's/.*"T":"\([^"]*\)".*/\1/p')
            BLOCKED=$(echo "$line" | grep -c "IsFiltered\":true")
            
            # Determinar nombre del niño
            case "$IP" in
                "10.5.5.124") NAME="Hijo1" ;;
                "10.5.5.112") NAME="Hijo2" ;;
                *) NAME="Unknown" ;;
            esac
            
            if [ -n "$DOMAIN" ]; then
                IS_BLOCKED="false"
                [ $BLOCKED -gt 0 ] && IS_BLOCKED="true"
                echo "{\"timestamp\":\"$TIME\",\"source\":\"adguard\",\"client_ip\":\"$IP\",\"client_name\":\"$NAME\",\"is_kid\":true,\"domain\":\"$DOMAIN\",\"is_blocked\":$IS_BLOCKED}" >> $WAZUH_LOG
            fi
        fi
    done
done

# Mantener log pequeño
tail -2000 $WAZUH_LOG > ${WAZUH_LOG}.tmp 2>/dev/null && mv ${WAZUH_LOG}.tmp $WAZUH_LOG

Configurar Wazuh para leer logs de AdGuard

Añadir a /var/ossec/etc/ossec.conf:

<localfile>
  <log_format>json</log_format>
  <location>/var/ossec/logs/adguard-dns.json</location>
</localfile>

Reglas de Detección Personalizadas

Reglas de Control Parental (control-parental.xml)

<!-- /var/ossec/etc/rules/control-parental.xml -->
<!-- IDs: 110001 - 110099 -->

<group name="control_parental,">

  <!-- Regla base - Reporte recibido -->
  <rule id="110001" level="3">
    <decoded_as>json</decoded_as>
    <field name="ReportType">ControlParental</field>
    <description>Control Parental: Reporte de $(Host)</description>
    <group>control_parental,</group>
  </rule>

  <!-- Uso excesivo > 4 horas -->
  <rule id="110010" level="7">
    <if_sid>110001</if_sid>
    <field name="ScreenTime.UptimeHours" type="pcre2">^[4-7]\.</field>
    <description>Uso excesivo $(Host) $(ScreenTime.UptimeHours)h</description>
    <group>control_parental,screen_time,</group>
  </rule>

  <!-- Uso muy excesivo > 8 horas -->
  <rule id="110011" level="10">
    <if_sid>110001</if_sid>
    <field name="ScreenTime.UptimeHours" type="pcre2">^[8-9]\.|^[1-9][0-9]</field>
    <description>ALERTA: Uso muy excesivo $(Host)</description>
    <group>control_parental,high,</group>
  </rule>

  <!-- Juegos detectados -->
  <rule id="110020" level="5">
    <if_sid>110001</if_sid>
    <field name="ActiveProcesses" type="pcre2">(?i)fortnite|minecraft|roblox|steam</field>
    <description>Juego detectado $(Host)</description>
    <group>control_parental,gaming,</group>
  </rule>

  <!-- Redes sociales -->
  <rule id="110030" level="6">
    <if_sid>110001</if_sid>
    <field name="ActiveProcesses" type="pcre2">(?i)discord|tiktok|snapchat</field>
    <description>Red social $(Host)</description>
    <group>control_parental,social,</group>
  </rule>

  <!-- VPN/Proxy/TOR detectado -->
  <rule id="110040" level="10">
    <if_sid>110001</if_sid>
    <field name="ActiveProcesses" type="pcre2">(?i)vpn|tor|proxy</field>
    <description>ALERTA: VPN/Proxy $(Host)</description>
    <group>control_parental,evasion,high,</group>
  </rule>

  <!-- Windows Defender deshabilitado -->
  <rule id="110050" level="12">
    <if_sid>110001</if_sid>
    <field name="DefenderStatus.RealTimeProtectionEnabled">False</field>
    <description>CRITICO: Defender OFF $(Host)</description>
    <group>control_parental,security,critical,</group>
  </rule>

  <!-- Hayabusa alertas críticas -->
  <rule id="110060" level="12">
    <if_sid>110001</if_sid>
    <field name="Hayabusa.CriticalAlerts" type="pcre2">^[1-9]</field>
    <description>CRITICO: Hayabusa alertas $(Host)</description>
    <group>control_parental,hayabusa,critical,</group>
  </rule>

  <!-- Uso nocturno -->
  <rule id="110080" level="8">
    <if_sid>110001</if_sid>
    <time>11:00 pm - 6:00 am</time>
    <description>ALERTA: $(Host) activo noche</description>
    <group>control_parental,night,</group>
  </rule>

</group>

Reglas de AdGuard DNS (adguard-rules.xml)

<!-- /var/ossec/etc/rules/adguard-rules.xml -->
<!-- IDs: 111001 - 111099 -->

<group name="adguard,dns,">

  <!-- Query DNS base -->
  <rule id="111001" level="0">
    <decoded_as>json</decoded_as>
    <field name="source">adguard</field>
    <description>AdGuard DNS: Query de $(client_ip)</description>
    <group>adguard,dns,</group>
  </rule>

  <!-- Query de los niños -->
  <rule id="111010" level="3">
    <if_sid>111001</if_sid>
    <field name="is_kid">true</field>
    <description>DNS: $(client_name) consulto $(domain)</description>
    <group>adguard,kids,</group>
  </rule>

  <!-- BLOQUEADO - Contenido adulto -->
  <rule id="111020" level="10">
    <if_sid>111001</if_sid>
    <field name="category">adult</field>
    <field name="is_blocked">true</field>
    <description>BLOQUEADO ADULTO: $(client_name) - $(domain)</description>
    <group>adguard,blocked,adult,high,</group>
  </rule>

  <!-- BLOQUEADO - VPN/Proxy -->
  <rule id="111021" level="10">
    <if_sid>111001</if_sid>
    <field name="category">vpn_proxy</field>
    <field name="is_blocked">true</field>
    <description>BLOQUEADO VPN: $(client_name) - $(domain)</description>
    <group>adguard,blocked,vpn,evasion,high,</group>
  </rule>

  <!-- BLOQUEADO - Piratería -->
  <rule id="111022" level="8">
    <if_sid>111001</if_sid>
    <field name="category">piracy</field>
    <field name="is_blocked">true</field>
    <description>BLOQUEADO PIRATERIA: $(client_name) - $(domain)</description>
    <group>adguard,blocked,piracy,</group>
  </rule>

  <!-- Cualquier bloqueo de niños -->
  <rule id="111040" level="6">
    <if_sid>111010</if_sid>
    <field name="is_blocked">true</field>
    <description>DNS BLOQUEADO: $(client_name) - $(domain)</description>
    <group>adguard,kids,blocked,</group>
  </rule>

  <!-- Muchos bloqueos (intento persistente) -->
  <rule id="111050" level="10" frequency="10" timeframe="300">
    <if_matched_sid>111040</if_matched_sid>
    <same_field>client_ip</same_field>
    <description>ALERTA: $(client_name) muchos bloqueos DNS</description>
    <group>adguard,kids,persistent,high,</group>
  </rule>

</group>

Integración con Telegram

1. Crear Bot de Telegram

  1. Abre Telegram y busca @BotFather
  2. Envía /newbot
  3. Sigue las instrucciones para crear el bot
  4. Guarda el token que te proporciona

2. Obtener tu Chat ID

  1. Envía un mensaje a tu nuevo bot
  2. Visita: https://api.telegram.org/bot<TU_TOKEN>/getUpdates
  3. Busca el campo "chat":{"id":XXXXXXX}

3. Script de integración (custom-telegram.py)

#!/usr/bin/env python3
# /var/ossec/integrations/custom-telegram.py

import sys
import json
import requests

BOT_TOKEN = "TU_BOT_TOKEN"
CHAT_ID = "TU_CHAT_ID"

EMOJIS = {
    "adult": "🔞", "vpn_proxy": "🔒", "evasion": "🔒", "piracy": "🏴‍☠️",
    "gaming": "🎮", "social": "💬", "security": "🛡️", "night": "🌙",
    "screen_time": "⏰", "hayabusa": "🔍", "critical": "🚨", "high": "⚠️"
}

def main():
    if len(sys.argv) < 2:
        sys.exit(1)
    
    try:
        with open(sys.argv[1]) as f:
            alert = json.load(f)
    except:
        sys.exit(1)
    
    rule = alert.get("rule", {})
    data = alert.get("data", {})
    agent = alert.get("agent", {})
    
    level = rule.get("level", 0)
    if level < 7:
        sys.exit(0)
    
    rule_id = rule.get("id", "N/A")
    rule_desc = rule.get("description", "")
    groups = rule.get("groups", [])
    timestamp = alert.get("timestamp", "")[:19].replace("T", " ")
    
    subject = data.get("client_name") or data.get("Host") or agent.get("name", "Sistema")
    domain = data.get("domain", "")
    is_blocked = data.get("is_blocked")
    
    emoji = "📢"
    for g in groups:
        if g in EMOJIS:
            emoji = EMOJIS[g]
            break
    
    lines = [f"{emoji} *CONTROL PARENTAL*", "", f"👤 *Quién:* {subject}", f"📋 *Alerta:* {rule_desc}"]
    
    if domain:
        lines.append(f"🌐 *Dominio:* `{domain}`")
    if is_blocked is True:
        lines.append("📊 *Estado:* ✅ BLOQUEADO")
    elif is_blocked is False:
        lines.append("📊 *Estado:* ⚡ Permitido")
    
    lines.extend([f"⏰ *Hora:* {timestamp}", f"🔢 *Rule:* {rule_id} (Level {level})"])
    
    msg = "\n".join(lines)
    
    try:
        requests.post(f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage",
            json={"chat_id": CHAT_ID, "text": msg, "parse_mode": "Markdown"},
            timeout=10)
    except:
        pass

if __name__ == "__main__":
    main()

4. Configurar integración en Wazuh

Añadir a /var/ossec/etc/ossec.conf:

<integration>
  <name>custom-telegram.py</name>
  <level>7</level>
  <group>control_parental|adguard|hayabusa</group>
  <alert_format>json</alert_format>
</integration>

5. Instalar dependencias y permisos

docker exec wazuh-lite pip3 install requests
docker exec wazuh-lite chmod 750 /var/ossec/integrations/custom-telegram.py
docker exec wazuh-lite chown root:wazuh /var/ossec/integrations/custom-telegram.py

Instalación en Equipos Windows

Instalador automático (Install-Agent.bat)

@echo off
:: Instalador Wazuh Agent para Control Parental
:: Ejecutar como Administrador

echo.
echo ========================================
echo   WAZUH AGENT - CONTROL PARENTAL
echo   Manager: 10.5.5.3
echo ========================================
echo.

net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [ERROR] Ejecutar como Administrador!
    pause
    exit /b 1
)

echo [*] Descargando Wazuh Agent 4.9.2...
powershell -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; Invoke-WebRequest -Uri 'https://packages.wazuh.com/4.x/windows/wazuh-agent-4.9.2-1.msi' -OutFile '%TEMP%\wazuh-agent.msi'"

echo [*] Instalando...
msiexec.exe /i "%TEMP%\wazuh-agent.msi" /q WAZUH_MANAGER="10.5.5.3" WAZUH_REGISTRATION_SERVER="10.5.5.3" WAZUH_AGENT_NAME="%COMPUTERNAME%" WAZUH_AGENT_GROUP="windows"

echo [*] Esperando instalacion...
timeout /t 10 /nobreak >nul

echo [*] Iniciando servicio...
NET START WazuhSvc

echo.
echo ========================================
echo   INSTALACION COMPLETADA
echo ========================================
pause

Script de Control Parental

Control-Parental-Simple.ps1

# Control Parental - Script de monitoreo
# Ejecutar cada 30 minutos via Task Scheduler

$fecha = Get-Date -Format "yyyyMMdd_HHmm"
$hostname = $env:COMPUTERNAME
$usuario = $env:USERNAME
$baseRemoto = "\\SERVIDOR\logs\$hostname"
$baseLocal = "C:\ProgramData\ControlParental"

New-Item -ItemType Directory -Force -Path $baseLocal -ErrorAction SilentlyContinue | Out-Null
New-Item -ItemType Directory -Force -Path $baseRemoto -ErrorAction SilentlyContinue | Out-Null

Write-Host "=== CONTROL PARENTAL ===" -ForegroundColor Yellow

# Software instalado
$apps = @()
$regPaths = @(
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
    "HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
foreach ($p in $regPaths) {
    $items = Get-ItemProperty $p -ErrorAction SilentlyContinue
    foreach ($item in $items) {
        if ($item.DisplayName) {
            $apps += [PSCustomObject]@{
                Name = $item.DisplayName
                Version = $item.DisplayVersion
            }
        }
    }
}
$apps = $apps | Sort-Object Name -Unique | Select-Object -First 100

# Procesos activos
$procesos = Get-Process -ErrorAction SilentlyContinue | 
    Where-Object { $_.ProcessName -notmatch "^(svchost|csrss|dwm|System)" } | 
    Select-Object ProcessName, Id, @{N='Memory_MB';E={[math]::Round($_.WorkingSet64/1MB,2)}} | 
    Sort-Object Memory_MB -Descending | Select-Object -First 30

# Conexiones de red
$conexiones = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | 
    Where-Object { $_.RemoteAddress -notmatch "^(127\.|::1)" } | 
    Select-Object RemoteAddress, RemotePort, @{N='Process';E={(Get-Process -Id $_.OwningProcess -EA SilentlyContinue).ProcessName}}

# Tiempo de uso
$bootTime = (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
$uptime = (Get-Date) - $bootTime
$screenTime = [PSCustomObject]@{
    BootTime = $bootTime.ToString("yyyy-MM-dd HH:mm:ss")
    UptimeHours = [math]::Round($uptime.TotalHours, 2)
}

# USB
$usb = Get-PnpDevice -Class USB -Status OK -EA SilentlyContinue | 
    Where-Object { $_.FriendlyName } | Select-Object FriendlyName

# Defender
$defender = Get-MpComputerStatus -EA SilentlyContinue | 
    Select-Object AntivirusEnabled, RealTimeProtectionEnabled

# Crear payload
$payload = [PSCustomObject]@{
    Host = $hostname
    User = $usuario
    Timestamp = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss")
    ReportType = "ControlParental"
    ScreenTime = $screenTime
    ActiveProcesses = @($procesos)
    NetworkConnections = @($conexiones)
    InstalledApps = @($apps)
    USBDevices = @($usb)
    DefenderStatus = $defender
}

# Guardar y enviar
$jsonFile = "$baseLocal\control_$fecha.json"
$payload | ConvertTo-Json -Depth 10 | Out-File -Encoding UTF8 $jsonFile
Copy-Item $jsonFile "$baseRemoto\" -Force -ErrorAction SilentlyContinue

# Copiar a Wazuh
$wazuhPath = "C:\Program Files (x86)\ossec-agent\active-response\control-parental.json"
if (Test-Path "C:\Program Files (x86)\ossec-agent") {
    $payload | ConvertTo-Json -Depth 10 -Compress | Out-File -Encoding UTF8 $wazuhPath -Force
}

Write-Host "Completado - Tiempo uso: $($screenTime.UptimeHours)h"

Crear tarea programada

Register-ScheduledTask -TaskName "ControlParental" `
  -Action (New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File C:\script\Control-Parental-Simple.ps1") `
  -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 30) -RepetitionDuration (New-TimeSpan -Days 9999)) `
  -Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -RunLevel Highest) `
  -Force

Hayabusa - Threat Hunting Avanzado

Instalación

# Crear directorio
New-Item -ItemType Directory -Force -Path "C:\Tools\Hayabusa"

# Descargar
$url = "https://github.com/Yamato-Security/hayabusa/releases/download/v3.0.0/hayabusa-3.0.0-win-x64.zip"
Invoke-WebRequest -Uri $url -OutFile "$env:TEMP\hayabusa.zip"

# Extraer
Expand-Archive -Path "$env:TEMP\hayabusa.zip" -DestinationPath "C:\Tools\Hayabusa" -Force

# Actualizar reglas Sigma
cd C:\Tools\Hayabusa
.\hayabusa.exe update-rules

Uso básico

# Scan completo
.\hayabusa.exe csv-timeline -d C:\Windows\System32\winevt\Logs -o timeline.csv

# Solo alertas críticas
.\hayabusa.exe csv-timeline -d . -m critical -o critical-alerts.csv

# Alertas high y critical
.\hayabusa.exe csv-timeline -d . -m high -o high-alerts.csv

Alertas y Notificaciones

Ejemplos de alertas que recibirás en Telegram

Contenido adulto bloqueado:

🔞 CONTROL PARENTAL

👤 Quién: Hijo1
📋 Alerta: BLOQUEADO ADULTO: intento acceder
🌐 Dominio: sitio-malo.com
📊 Estado: ✅ BLOQUEADO
⏰ Hora: 2025-11-29 22:30:15
🔢 Rule: 111020 (Level 10)

VPN detectada:

🔒 CONTROL PARENTAL

👤 Quién: Hijo2
📋 Alerta: VPN/Proxy detectado
🌐 Dominio: nordvpn.com
📊 Estado: ✅ BLOQUEADO
⏰ Hora: 2025-11-29 23:15:00
🔢 Rule: 111021 (Level 10)

Uso nocturno:

🌙 CONTROL PARENTAL

👤 Quién: Hijo1
📋 Alerta: Equipo activo en horario nocturno
⏰ Hora: 2025-11-30 02:30:00
🔢 Rule: 110080 (Level 8)

Comandos Útiles

Gestión de Wazuh

# Ver agentes conectados
docker exec wazuh-lite /var/ossec/bin/agent_control -l

# Estado del manager
docker exec wazuh-lite /var/ossec/bin/wazuh-control status

# Reiniciar manager
docker exec wazuh-lite /var/ossec/bin/wazuh-control restart

# Ver alertas recientes
docker exec wazuh-lite tail -50 /var/ossec/logs/alerts/alerts.log

# Ver logs del manager
docker exec wazuh-lite tail -100 /var/ossec/logs/ossec.log

Probar Telegram

curl -s -X POST "https://api.telegram.org/botTU_TOKEN/sendMessage" \
  -d "chat_id=TU_CHAT_ID" \
  -d "text=Test de Control Parental"

En Windows (PowerShell)

# Estado del agente
Get-Service WazuhSvc

# Logs del agente
Get-Content "C:\Program Files (x86)\ossec-agent\ossec.log" -Tail 50

# Reiniciar agente
Restart-Service WazuhSvc

Conclusiones

Este sistema proporciona:

✅ Monitoreo en tiempo real de la actividad de los equipos
✅ Bloqueo automático de contenido inapropiado vía DNS
✅ Alertas instantáneas al móvil del padre
✅ Detección de evasión (VPN, TOR, Proxy)
✅ Threat hunting con reglas Sigma
✅ Código abierto y personalizable
✅ Sin costes de licencia

Limitaciones

  • Requiere conocimientos técnicos para la instalación
  • Los niños tech-savvy podrían intentar desactivar el agente
  • No funciona si usan datos móviles en lugar de WiFi

Mejoras futuras

  • Dashboard web para visualización
  • Reportes semanales automáticos
  • Integración con calendario escolar
  • Machine learning para detectar patrones anómalos

Referencias