Etiqueta: linux

  • Detección y limpieza de browser hijacking en Brave, Firefox y Chrome

    Aplica a: Brave, Firefox, Chrome — SO: Windows y Linux

    El browser hijacking (secuestro de navegador) es uno de los problemas de soporte más comunes: un programa, extensión o instalador cambia la página de inicio, el motor de búsqueda o inyecta anuncios sin que el usuario lo haya autorizado. Esta guía cubre el diagnóstico y limpieza para los tres navegadores más usados, tanto en Windows como en Linux.

    1. Síntomas comunes

    Estos síntomas aplican por igual a Brave, Firefox y Chrome:

    SíntomaDescripción
    Página de inicio cambiadaAbre una URL que el usuario no configuró
    Motor de búsqueda cambiadoRedirige a Bing, Yahoo u otros desconocidos
    Extensiones no reconocidasAparecen sin que el usuario las haya instalado
    RedireccionamientosURLs normales redirigen a sitios publicitarios o extraños
    Barras de herramientas extraToolbars nuevas en la interfaz del navegador
    Velocidad reducidaEl navegador se siente más lento de lo habitual
    Anuncios invasivosPopups o anuncios fuera de lo normal
    Shields/protecciones desactivadosBrave Shields o uBlock apagados en sitios

    2. Diagnóstico rápido por navegador

    Brave

    brave://policy/          ← MÁS IMPORTANTE: si hay entradas en equipo personal = sospechoso
    brave://extensions/      ← extensiones instaladas
    brave://settings/search  ← motor de búsqueda activo
    brave://settings/getStarted ← página de inicio
    brave://settings/shields ← estado de Brave Shields global
    brave://components/      ← componentes instalados

    Firefox

    about:policies           ← MÁS IMPORTANTE: políticas activas
    about:addons             ← extensiones y temas (Ctrl+Shift+A)
    about:preferences#search ← motor de búsqueda
    about:preferences#home   ← página de inicio y nueva pestaña
    about:support            ← información completa del perfil y configuración
    about:config             ← configuración avanzada (buscar "homepage" o "newTab")

    Chrome

    chrome://policy/         ← MÁS IMPORTANTE: políticas activas
    chrome://extensions/     ← extensiones instaladas
    chrome://settings/search ← motor de búsqueda
    chrome://settings/onStartup ← página de inicio
    chrome://settings/cleanup   ← limpiador integrado (solo Windows)

    3. Revisar políticas en el registro de Windows

    Si brave://policy/, about:policies o chrome://policy/ muestran entradas en un equipo personal, verificar el registro:

    Brave:

    Get-ItemProperty "HKLM:\SOFTWARE\Policies\BraveSoftware\Brave" -ErrorAction SilentlyContinue
    Get-ItemProperty "HKCU:\SOFTWARE\Policies\BraveSoftware\Brave" -ErrorAction SilentlyContinue

    Firefox:

    Get-ItemProperty "HKLM:\SOFTWARE\Policies\Mozilla\Firefox" -ErrorAction SilentlyContinue
    Get-ItemProperty "HKCU:\SOFTWARE\Policies\Mozilla\Firefox" -ErrorAction SilentlyContinue

    Chrome:

    Get-ItemProperty "HKLM:\SOFTWARE\Policies\Google\Chrome" -ErrorAction SilentlyContinue
    Get-ItemProperty "HKCU:\SOFTWARE\Policies\Google\Chrome" -ErrorAction SilentlyContinue

    4. Investigar qué instaló el hijack (Windows)

    Programas instalados recientemente:

    Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
    Select-Object DisplayName, InstallDate, Publisher |
    Sort-Object InstallDate -Descending |
    Select-Object -First 20 | Format-Table -AutoSize

    Tareas programadas sospechosas:

    Get-ScheduledTask | Where-Object { $_.State -eq "Ready" } |
    Select-Object TaskName, TaskPath |
    Sort-Object TaskPath | Format-Table -AutoSize

    Procesos del navegador corriendo con el navegador «cerrado»:

    # Brave
    Get-Process brave -ErrorAction SilentlyContinue | Select-Object Name, Id, CPU
    
    # Firefox
    Get-Process firefox -ErrorAction SilentlyContinue | Select-Object Name, Id, CPU
    
    # Chrome
    Get-Process chrome -ErrorAction SilentlyContinue | Select-Object Name, Id, CPU

    5. Diagnóstico en Linux

    Políticas por archivo de configuración — Brave:

    cat /etc/brave/policies/managed/*.json 2>/dev/null
    cat /etc/brave/policies/recommended/*.json 2>/dev/null

    Firefox:

    cat /etc/firefox/policies/policies.json 2>/dev/null
    # También puede estar en el directorio de instalación:
    find /usr/lib/firefox* -name "policies.json" 2>/dev/null

    Chrome:

    cat /etc/opt/chrome/policies/managed/*.json 2>/dev/null
    cat /etc/opt/chrome/policies/recommended/*.json 2>/dev/null

    Procesos activos:

    ps aux | grep -E "(brave|firefox|chrome)" | grep -v grep

    Extensiones instaladas por ruta:

    # Brave (directorio de perfil del usuario)
    ls ~/.config/BraveSoftware/Brave-Browser/Default/Extensions/
    
    # Firefox
    ls ~/.mozilla/firefox/*.default-release/extensions/
    
    # Chrome
    ls ~/.config/google-chrome/Default/Extensions/

    6. Limpieza paso a paso

    Paso 1 — Herramientas de limpieza

    HerramientaURL oficialNotas
    AdwCleanermalwarebytes.com/adwcleanerEspecífico para adware/hijackers
    Malwarebytes Freemalwarebytes.comEscaneo completo
    HitmanProhitmanpro.comSegunda opinión, 30 días gratis

    Importante: nunca buscar estas herramientas en Google; hay copias falsas que instalan más malware. Ir directo a la URL del fabricante:

    Paso 2 — Eliminar políticas del registro (Windows)

    # Brave
    Remove-Item "HKLM:\SOFTWARE\Policies\BraveSoftware" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item "HKCU:\SOFTWARE\Policies\BraveSoftware" -Recurse -Force -ErrorAction SilentlyContinue
    
    # Firefox
    Remove-Item "HKLM:\SOFTWARE\Policies\Mozilla" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item "HKCU:\SOFTWARE\Policies\Mozilla" -Recurse -Force -ErrorAction SilentlyContinue
    
    # Chrome
    Remove-Item "HKLM:\SOFTWARE\Policies\Google" -Recurse -Force -ErrorAction SilentlyContinue
    Remove-Item "HKCU:\SOFTWARE\Policies\Google" -Recurse -Force -ErrorAction SilentlyContinue

    Paso 3 — Eliminar extensiones maliciosas

    Ir a la URL de extensiones del navegador correspondiente, identificar las sospechosas y eliminarlas manualmente. Si no se puede eliminar (botón gris/deshabilitado), hay una política activa que lo impide — primero ejecutar el Paso 2.

    Paso 4 — Resetear el navegador a valores de fábrica

    Brave:

    brave://settings/reset

    Firefox: desde about:support, botón «Restablecer Firefox». O desde línea de comandos, para crear un perfil limpio:

    firefox --ProfileManager

    Chrome:

    chrome://settings/reset

    Nota: el reset elimina historial, cookies y configuraciones. Avisar al cliente antes de ejecutarlo.

    Paso 5 — Verificación post-limpieza

    Revisar nuevamente que las páginas de políticas estén vacías:

    brave://policy/     (debe estar vacío)
    about:policies      (debe estar vacío)
    chrome://policy/    (debe estar vacío)

    Verificar motor de búsqueda y página de inicio. Reiniciar el equipo y confirmar que no volvieron los cambios.

    7. Eliminar políticas en Linux

    Brave:

    sudo rm -rf /etc/brave/policies/managed/
    sudo mkdir -p /etc/brave/policies/managed/

    Firefox:

    sudo rm -f /etc/firefox/policies/policies.json

    Chrome:

    sudo rm -rf /etc/opt/chrome/policies/managed/
    sudo mkdir -p /etc/opt/chrome/policies/managed/

    8. Origen más común del hijack

    OrigenDescripción
    BundlewareSoftware gratuito que incluye el hijacker en su instalador (muy común)
    Extensión maliciosaExtensión instalada desde fuera de la tienda oficial
    Descarga de sitio falsoCopias falsas de software conocido (VLC, WinRAR, etc.)
    Crack/keygenSoftware pirateado con malware incluido
    PhishingEl usuario aceptó instalar algo sin leerlo

    Pregunta clave al cliente: «¿Instalaste algún programa recientemente, descargaste algo desde un sitio que no era el oficial, o alguien más usó el equipo?»

    9. Resumen del flujo de diagnóstico

    1. Abrir la página de políticas del navegador (brave://policy/, about:policies o chrome://policy/).
    2. Si hay entradas: eliminar las políticas del registro (Paso 2). Si no hay entradas: revisar extensiones y motor de búsqueda directamente.
    3. Correr AdwCleaner para detectar adware/hijackers residuales.
    4. Si el problema persiste, resetear el navegador a valores de fábrica.
    5. Verificar que la página de políticas quede vacía y confirmar con el cliente que no reaparecen los cambios tras reiniciar el equipo.
  • Fail2Ban: instalación, monitoreo con diagnóstico y desbloqueo de IPs

    Fail2Ban es una herramienta que monitorea logs del sistema (como los intentos de login de SSH) y bloquea automáticamente, vía iptables o nftables, las IPs que superan un número de intentos fallidos configurado. Cada servicio protegido (SSH, Nginx, Postfix, etc.) tiene su propio jail — una configuración independiente con sus propias reglas de detección y tiempo de bloqueo.

    Instalación

    Fail2Ban está disponible en los repositorios oficiales de las principales distribuciones.

    Debian / Ubuntu:

    sudo apt update
    sudo apt install fail2ban
    sudo systemctl enable --now fail2ban

    Red Hat / CentOS / Rocky / AlmaLinux:

    sudo dnf install epel-release
    sudo dnf install fail2ban
    sudo systemctl enable --now fail2ban

    Por defecto, Fail2Ban trae solo el jail de SSH activo (o ninguno, según la distribución). La configuración recomendada es nunca editar /etc/fail2ban/jail.conf directamente, ya que se sobrescribe con las actualizaciones — en su lugar, se crea /etc/fail2ban/jail.local con las secciones que se quieran personalizar o activar:

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    sudo nano /etc/fail2ban/jail.local

    Jails más comunes

    Un jail se activa agregando o editando su sección en jail.local con enabled = true. Estos son los más usados en un servidor típico:

    • sshd — protege el servicio SSH contra ataques de fuerza bruta en intentos de login. Es el jail más usado y suele venir activo por defecto.
    • nginx-http-auth — bloquea IPs que fallan repetidamente la autenticación básica HTTP en Nginx.
    • nginx-limit-req — banea IPs que exceden los límites de tasa (limit_req) configurados en Nginx, útil contra scraping o abuso de API.
    • postfix — protege el servidor de correo contra intentos de relay no autorizado o fuerza bruta en autenticación SMTP.
    • apache-auth — equivalente a nginx-http-auth pero para servidores Apache.
    • recidive — un jail «de segundo nivel»: vigila el propio log de Fail2Ban y aplica bloqueos más largos a IPs que son baneadas repetidamente por otros jails (reincidentes).

    Ejemplo de activación del jail sshd con parámetros personalizados en jail.local:

    [sshd]
    enabled = true
    port = ssh
    filter = sshd
    logpath = /var/log/auth.log
    maxretry = 5
    findtime = 600
    bantime = 3600

    Donde maxretry es el número de intentos fallidos permitidos, findtime la ventana de tiempo (en segundos) en la que se cuentan esos intentos, y bantime cuánto dura el bloqueo. Tras cualquier cambio en jail.local, se debe reiniciar el servicio:

    sudo systemctl restart fail2ban

    Administración: ver lo baneado

    Para consultar el estado general y por jail:

    # Listar todos los jails activos
    sudo fail2ban-client status
    
    # Ver detalle de un jail específico (intentos totales, IPs baneadas)
    sudo fail2ban-client status sshd

    La salida de status sshd muestra, entre otros datos, Total failed (intentos fallidos acumulados) y Banned IP list (las IPs actualmente bloqueadas). Para ver el detalle de logs de baneos recientes directamente:

    sudo grep 'Ban' /var/log/fail2ban.log | tail -20

    Y para revisar las reglas realmente aplicadas a nivel de firewall (la capa que efectivamente bloquea el tráfico):

    sudo iptables -L -n -v -x f2b-sshd

    El resto de esta guía documenta un caso real de troubleshooting: un jail con un volumen alto de intentos fallidos, donde el desbloqueo estándar no reflejaba cambios correctamente.

    Diagnóstico del problema

    Se detectó un alto volumen de intentos fallidos (Total failed: 50634) con 15 IPs bloqueadas activamente. Se intentaron realizar desbloqueos manuales, pero se identificó que la IP objetivo no estaba en la lista de bloqueados actual (Banned IP list).

    Esto es más común de lo que parece: el jail puede tener la IP bloqueada a nivel de iptables/nftables sin que la base de datos interna de Fail2Ban (SQLite, normalmente en /var/lib/fail2ban/fail2ban.sqlite3) refleje el mismo estado — de ahí la necesidad de verificar ambas capas por separado.

    1. Consulta y monitoreo

    Para verificar el estado del jail e identificar las direcciones bajo sanción:

    # Ver IPs actualmente bloqueadas en el jail sshd
    sudo fail2ban-client status sshd
    
    # Listar todos los jails activos en la instancia de Fail2Ban
    fail2ban-client status
    
    # Verificar reglas activas dentro de la cadena específica de iptables
    sudo iptables -L -n -v -x f2b-sshd

    2. Ejecución de desbloqueo (unban)

    Comandos para liberar IPs individuales o masivamente:

    # Desbloquear una IP específica por su dirección
    sudo fail2ban-client set sshd unbanip <IP_ADDRESS>
    
    # Intentar el desbloqueo masivo de todas las IPs en el jail 'sshd'
    sudo fail2ban-client set sshd unbanip ALL
    
    # Limpiar la cadena de iptables (uso extremo si persiste el bloqueo)
    sudo iptables -F f2b-sshd

    3. Automatización y troubleshooting

    En caso de que los comandos estándar no reflejen cambios en iptables, se sugiere este bucle para procesar cada IP individualmente:

    # Bucle Bash para desbloqueo manual iterativo
    for ip in $(sudo fail2ban-client status sshd | awk '/Banned IP list:/ {print $4}'); do 
        sudo fail2ban-client set sshd unbanip $ip; 
    done
    
    # Reinicio del servicio para refrescar la base de datos interna y reglas
    sudo systemctl restart fail2ban

    Whitelist: prevenir el auto-bloqueo

    Para evitar volver a quedar bloqueado por accidente (por ejemplo, tu propia IP fija o la red interna), conviene agregar excepciones permanentes en jail.local:

    [DEFAULT]
    ignoreip = 127.0.0.1/8 ::1 192.168.100.0/24

    Cualquier IP dentro de ignoreip nunca será bloqueada por ningún jail, sin importar cuántos intentos fallidos genere.

    Notas técnicas adicionales

    • Retorno 0: en fail2ban-client, el retorno 0 indica que la operación se ejecutó exitosamente, aunque no necesariamente significa que haya habido cambios si la IP ya estaba libre.
    • Persistencia en iptables: si las IPs siguen bloqueadas tras usar unbanip ALL, es necesario verificar reglas manuales con sudo nft list ruleset o limpiar directamente la cadena de iptables.
    • Diferencia entre capas: un unbanip exitoso a nivel de Fail2Ban no siempre elimina la regla correspondiente en el firewall si hubo inconsistencias previas — por eso conviene verificar ambos lados (Fail2Ban y iptables/nftables) tras cualquier operación de desbloqueo masivo.