🛡️ Hardening de navegadores en Windows: blinda Chrome, Edge y Firefox con PowerShell

hace 3 meses

Hardering de navegadores en Windows

Table of Contents

Cómo endurecer Chrome, Edge y Firefox en Windows para bloquear phishing y robo de credenciales

El hardening de navegadores en Windows es el proceso de aplicar configuraciones de seguridad avanzadas en Chrome, Edge y Firefox para bloquear phishing, descargas peligrosas y robo de credenciales. El navegador es la aplicación que más tiempo pasa expuesta a internet y, por defecto, viene configurada para la comodidad, no para la seguridad: cada política que se deja sin endurecer es una puerta abierta a infostealers y a campañas de phishing dirigidas.

⚡ Respuesta rápida

Para endurecer los navegadores en Windows, ejecuta como Administrador el script PowerShell unificado de esta guía: aplica SafeBrowsingProtectionLevel=2 y DownloadRestrictions=3 en Chrome, SmartScreenEnabled=1 y TrackingPrevention=3 en Edge, y un archivo policies.json con HTTPSOnlyMode y DisableTelemetry en Firefox. El propio script desactiva el gestor de contraseñas integrado, bloquea cookies de terceros y crea 3 tareas programadas (inicio, logon y cada 6 horas) para que las políticas se reapliquen solas. Verifica el resultado en chrome://policy, edge://policy y about:policies.

💡 Definición rápida

Hardening de navegadores en Windows: proceso de aplicar configuraciones de seguridad avanzadas en Chrome, Edge y Firefox mediante políticas del registro (Chrome y Edge) o un archivo policies.json (Firefox), sin instalar software adicional. Bloquea phishing, descargas peligrosas, robo de cookies y extracción de contraseñas (técnica MITRE T1555.003). A diferencia de un antivirus, no añade software en memoria ni consume recursos de forma continua: endurece la configuración nativa que el navegador ya trae por defecto, orientada a la comodidad y no a la seguridad.

📋 Resumen rápido

🌐 Hardening de navegadores en Windows con PowerShell

El hardening de navegadores en Windows aplica políticas de seguridad a Chrome, Edge y Firefox para bloquear phishing, descargas peligrosas, robo de cookies y extracción de contraseñas (MITRE T1555.003). El script de esta guía aplica todo de una vez y crea 3 tareas programadas que reaplican las políticas en inicio, logon y cada 6 horas para que no se pierdan tras una actualización.

  • ✅ Safe Browsing nivel 2, SmartScreen y HTTPS-Only forzados
  • ✅ Gestor de contraseñas del navegador desactivado (previene T1555.003)
  • ✅ Bloqueo automático de descargas peligrosas y cookies de terceros
  • ✅ Script PowerShell unificado con 3 tareas programadas persistentes
  • ✅ Checklist de verificación, de emergencia y de riesgos reales del script
  • ✅ Totalmente reversible desde el registro y el archivo policies.json

📅 Publicado: 13 de abril de 2026 · 🕒 Tiempo de lectura: 16 minutos

El hardening de navegadores en Windows es una medida defensiva eficaz para el puesto de trabajo: con un único script de PowerShell se cierran los vectores de phishing, descargas drive-by y robo de credenciales que el navegador deja abiertos por defecto. A diferencia de instalar un nuevo antivirus, el hardening no añade software en memoria ni consume recursos de forma continua: endurece la configuración nativa de Chrome, Edge y Firefox mediante políticas oficiales documentadas por sus fabricantes.

El endurecimiento del navegador es una pieza más dentro de las medidas de seguridad en Windows para blindar el sistema operativo sin instalar programas adicionales, y complementa la guía completa de hardening de Windows 11: 7 pasos para blindar tu PC sin instalar nada adicional y el Windows Defender como capa antiphishing nativa del sistema frente a descargas y webs maliciosas, formando un modelo de protección integral del endpoint sin coste de licencias.


Qué significa el hardening de navegadores en Windows

📌 Qué significa el hardening de navegadores en Windows

🔍 ¿Cuál es la diferencia entre configurar el navegador manualmente y aplicar hardening por políticas?

La diferencia clave entre configuración manual y hardening por políticas en cinco puntos:

  1. Persistencia: la configuración manual es reversible por el usuario en segundos; las políticas son inmutables salvo con privilegios admin
  2. Resistencia a actualizaciones: la configuración manual puede perderse; las políticas persisten y se reaplican automáticamente
  3. Auditoría: la configuración manual no queda registrada; las políticas son verificables en chrome://policy, edge://policy y about:policies
  4. Despliegue: la configuración manual es imposible de desplegar en masa; las políticas son automatizables con GPO, Intune y PowerShell
  5. Cumplimiento: la configuración manual no es demostrable; las políticas son trazables para ENS, ISO 27001 y NIST CSF

👉 El hardening de navegadores en Windows reduce ataques de phishing, bloquea scripts maliciosos y mejora la privacidad del usuario.

  • ✔ Reduce los ataques de phishing dirigido y campañas masivas: cómo reconocerlos y protegerte.
  • ✔ Bloquea descargas peligrosas automáticamente.
  • ✔ Mejora la privacidad limitando cookies y telemetría.
  • ✔ Protege credenciales almacenadas en el navegador.
  • ✔ Reduce la superficie de ataque frente a infostealers modernos.
  • ✔ Refuerza la gobernanza del navegador en entornos compartidos.

📊 Diferencias entre configuración manual y hardening por políticas

AspectoConfiguración manual (chrome://settings)Hardening por políticas (registro / policies.json)
PersistenciaReversible por el usuario en segundosInmutable salvo con privilegios admin
Resistencia a actualizacionesPuede perderse tras actualización mayorPersiste y se reaplica automáticamente
AuditoríaNo registradaVerificable en chrome://policy
Despliegue masivoImposibleAutomatizable con GPO/Intune/PowerShell
Cumplimiento normativoNo demostrableTrazable para ENS, ISO 27001 y NIST CSF

Por qué es importante el hardening de navegadores en Windows

🚨 Por qué es importante endurecer navegadores en Windows

🔍 ¿Por qué el navegador es el principal vector de ataque en Windows? El navegador es el principal punto de entrada de amenazas en Windows: el 90% del tiempo en línea transcurre dentro de él. Sin hardening, cualquier web maliciosa puede instalar malware drive-by, robar cookies de sesión, capturar credenciales guardadas o redirigir al usuario a páginas de phishing. Según MITRE ATT&CK, la técnica T1555.003 documenta el robo de credenciales directamente desde Chrome, Edge y Firefox. Más del 70% de las brechas iniciales de credenciales corporativas se originan a través del navegador.
Riesgo sin hardeningConsecuenciaTécnica MITRENivel de peligro
Descargas automáticasInstalación silenciosa de malwareT1189 Drive-by Compromise🔴 Crítico
Páginas de phishingRobo de credenciales y datos bancariosT1566 Phishing🔴 Crítico
Contraseñas guardadasExtracción mediante infostealersT1555.003🔴 Crítico
Robo de cookiesSecuestro de sesiones activasT1539🟠 Alto
Extensiones maliciosasEspionaje y robo de datos en tiempo realT1176🟠 Alto

Los informes anuales del Verizon Data Breach Investigations Report (DBIR) y CrowdStrike coinciden en que más del 70% de las brechas iniciales de credenciales corporativas se originan a través del navegador. En entornos donde no es viable desplegar EDR ni MDM, el hardening de navegadores en Windows sigue siendo una de las barreras más eficaces frente a infostealers como RedLine, Lumma o Raccoon, que operan exclusivamente sobre los almacenes de credenciales del navegador.

Otro motivo poco comentado es la trazabilidad: una vez fijadas las políticas, cualquier desviación queda registrada en el CSV histórico, lo que facilita la respuesta ante incidentes y cumple con los requisitos de auditoría de marcos como ENS, ISO 27001 o NIST CSF.


🥉🥈🥇 Niveles del hardening de navegadores en Windows: bronce, plata y oro

🔍 ¿Cuántos niveles de hardening de navegadores existen y cuál aplicar?

Tres niveles de hardening de navegadores en Windows ordenados por protección:

  1. 🥉 Bronce (usuario doméstico ocasional): activación manual de Safe Browsing y SmartScreen desde la interfaz, reversible, sin tareas programadas
  2. 🥈 Plata (usuario avanzado o profesional independiente): políticas vía registro y policies.json sin automatización persistente, protección sólida pero requiere reaplicación manual tras actualizaciones
  3. 🥇 Oro (equivalente corporativo): políticas + 3 tareas programadas + log + CSV histórico, el nivel que aplica el script de esta guía, equivalente a un baseline gestionado por SOC
NivelPersistenciaAuditoríaEsfuerzoPerfil recomendado
🥉 BronceBaja (revertible)Manual5 minutosDoméstico ocasional
🥈 PlataMediaManual15 minutosProfesional autónomo
🥇 OroAlta (persistente)Automática (CSV)15 minutos (script)Empresa, teletrabajo, perfiles expuestos

⚙️ Requisitos previos para el hardening de navegadores en Windows

  • ✅ Windows 10 u 11 actualizado.
  • ✅ PowerShell abierto como administrador (clic derecho → Ejecutar como administrador).
  • ✅ Navegadores instalados: Chrome, Edge o Firefox.
  • ✅ Política de ejecución habilitada (-ExecutionPolicy Bypass).
  • ✅ Espacio libre mínimo en C:\Logs\ para registros de auditoría.
  • ✅ Exportación previa de contraseñas si las tienes guardadas en el navegador.

👉 Antes de aplicar el hardening de navegadores en Windows, consulta la documentación oficial sobre políticas de ejecución en Set-ExecutionPolicy en la documentación oficial de Microsoft Learn.


📥 Cómo guardar cualquiera de estos scripts como .ps1

⚠️ Importante: Todos los scripts de esta guía (los 3 individuales de Chrome, Edge y Firefox, y el script unificado) tienen que guardarse con extensión .ps1, nunca como .txt. Si no cambias el tipo de archivo al guardar, Windows lo guarda como nombre.ps1.txt aunque hayas escrito ".ps1" en el nombre, y luego PowerShell no lo encuentra al ejecutarlo.
  1. Si no la tienes ya, crea la carpeta C:\Scripts: Explorador de archivos → C:\ → clic derecho → Nuevo → Carpeta → nómbrala Scripts.
  2. Abre el Bloc de notas (tecla Windows → escribe "Bloc de notas" → Enter).
  3. Pega el código completo del script que quieras usar.
  4. Ve a Archivo → Guardar como. Rellena estos tres campos:
    • Dónde guardarlo: C:\Scripts
    • Nombre de archivo: el nombre correspondiente terminado en .ps1 (por ejemplo hardening-chrome.ps1)
    • Tipo: cambia el desplegable de "Documentos de texto (*.txt)" a "Todos los archivos (*.*)"
  5. Pulsa Guardar.
  6. Comprueba que salió bien: en C:\Scripts, el icono debe verse como una pantalla de consola azul, no como una hoja de papel. Si se ve como hoja de papel, repite el paso 4 y revisa el tipo de archivo.

▶️ Comandos de instalación y ejecución

Nunca hagas doble clic sobre el archivo ni pegues el código directamente en la consola de PowerShell, guárdalo siempre primero como .ps1 y ejecútalo con -File.

  1. Pulsa la tecla Windows, escribe PowerShell.
  2. Haz clic derecho sobre "Windows PowerShell" → "Ejecutar como administrador". Confirma si te lo pide.
  3. Escribe estas líneas una a una, pulsando Enter después de cada una:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
cd C:\Scripts
dir *.ps1

Con dir *.ps1 confirmas el nombre exacto del archivo tal como quedó guardado. Ejecuta el script correspondiente con este comando, sustituyendo el nombre del archivo:

powershell -NoExit -ExecutionPolicy Bypass -File "hardening-chrome.ps1"
powershell -NoExit -ExecutionPolicy Bypass -File "hardening-edge.ps1"
powershell -NoExit -ExecutionPolicy Bypass -File "hardening-firefox.ps1"
powershell -NoExit -ExecutionPolicy Bypass -File "Hardening-Navegadores.ps1"

Al terminar te pedirá pulsar una tecla o Enter para cerrar.

🚨 Si ves "El argumento '...' para el parámetro -File no existe": el nombre que escribiste no coincide con el archivo guardado (o se guardó como .ps1.txt). Ejecuta dir *.ps1 en C:\Scripts y usa el nombre exacto que aparece ahí, entre comillas.
Cómo aplicar hardening de navegadores en Windows: Google Chrome

🛠️ Cómo aplicar el hardening de navegadores en Windows en Google Chrome

🔍 ¿Cómo aplicar hardening a Google Chrome en Windows? Chrome se endurece mediante políticas del registro en HKLM\Software\Policies\Google\Chrome. Las cinco políticas clave son: SafeBrowsingProtectionLevel=2 (protección mejorada contra phishing), DownloadRestrictions=3 (bloqueo de descargas peligrosas), PasswordManagerEnabled=0 (desactiva gestor interno para prevenir T1555.003), BlockThirdPartyCookies=1 (privacidad) y DnsOverHttpsMode=automatic (cifrado DNS). Se aplican con Set-ItemProperty desde PowerShell como administrador y se verifican en chrome://policy.

🔐 Configuraciones clave del hardening aplicadas a Chrome

  • ✅ Activar Safe Browsing nivel 2 (protección mejorada).
  • ✅ Bloquear descargas peligrosas.
  • ✅ Deshabilitar gestor de contraseñas del navegador.
  • ✅ Bloquear cookies de terceros.
  • ✅ Forzar DNS over HTTPS automático (cifrado de resolución DNS).

💻 Script para hardening de Chrome

⚠️ Importante: ejecuta este script desde PowerShell abierto como administrador.

📥 Script individual: solo Chrome

Si solo quieres endurecer Google Chrome sin tocar Edge ni Firefox, usa este script independiente.

  1. Abre el Bloc de notas en texto plano.
  2. Pega el código de abajo.
  3. Archivo → Guardar como → nombre hardening-chrome.ps1 → tipo "Todos los archivos (*.*)" → guarda en C:\Scripts.
  4. PowerShell como administrador:
cd C:\Scripts
powershell -NoExit -ExecutionPolicy Bypass -File "hardening-chrome.ps1"

Verifica en Chrome, en la barra de direcciones: chrome://policy

$clave = "HKLM:\Software\Policies\Google\Chrome"
$claveUpdate = "HKLM:\Software\Policies\Google\Update"
if (-not (Test-Path $clave)) { New-Item -Path $clave -Force | Out-Null }
if (-not (Test-Path $claveUpdate)) { New-Item -Path $claveUpdate -Force | Out-Null }
Set-ItemProperty -Path $clave -Name "SafeBrowsingProtectionLevel" -Value 2 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "DownloadRestrictions" -Value 3 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "PasswordManagerEnabled" -Value 0 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "BlockThirdPartyCookies" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "DnsOverHttpsMode" -Value "automatic" -Type String -Force
Set-ItemProperty -Path $clave -Name "ForceGoogleSafeSearch" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "AutofillAddressEnabled" -Value 0 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "AutofillCreditCardEnabled" -Value 0 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "SyncDisabled" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $claveUpdate -Name "AutoUpdateCheckPeriodMinutes" -Value 1440 -Type DWord -Force
Write-Host "Politicas aplicadas. Verifica en chrome://policy" -ForegroundColor Green

Debes ver los valores con sus datos. A continuación abre Chrome y navega a chrome://policy para confirmar que aparecen con origen Platform.


Hardening de navegadores en Windows: Microsoft Edge

🛠️ Hardening de navegadores en Windows aplicado a Microsoft Edge

🔍 ¿Cómo aplicar hardening a Microsoft Edge en Windows? Edge se configura en HKLM\Software\Policies\Microsoft\Edge con siete políticas clave: SmartScreenEnabled=1 (activa filtro antiphishing integrado con Defender), SmartScreenPuaEnabled=1 (bloquea PUA), DownloadRestrictions=3, PasswordManagerEnabled=0, TrackingPrevention=3 (bloqueo estricto), BlockThirdPartyCookies=1 y DnsOverHttpsMode=automatic. Se verifican en edge://policy.

🔐 Configuraciones clave del hardening aplicadas a Edge

  • ✅ Activar SmartScreen (protección contra phishing y malware).
  • ✅ Activar SmartScreen PUA (aplicaciones potencialmente no deseadas).
  • ✅ Bloquear descargas peligrosas.
  • ✅ Deshabilitar gestor de contraseñas del navegador.
  • ✅ Forzar protección de seguimiento estricta.
  • ✅ Bloquear cookies de terceros para cortar el rastreo entre sitios.
  • ✅ Forzar DNS over HTTPS automático.

💻 Script para hardening de Edge

📥 Script individual: solo Edge

Este script aplica el endurecimiento exclusivamente a Microsoft Edge, sin tocar Chrome ni Firefox.

  1. Bloc de notas en texto plano → pega el código de abajo.
  2. Guardar comohardening-edge.ps1 → tipo "Todos los archivos" → en C:\Scripts.
  3. PowerShell como administrador:
cd C:\Scripts
powershell -NoExit -ExecutionPolicy Bypass -File "hardening-edge.ps1"

Verifica en Edge: edge://policy

$clave = "HKLM:\Software\Policies\Microsoft\Edge"
if (-not (Test-Path $clave)) { New-Item -Path $clave -Force | Out-Null }
Set-ItemProperty -Path $clave -Name "SmartScreenEnabled" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "SmartScreenPuaEnabled" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "DownloadRestrictions" -Value 3 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "PasswordManagerEnabled" -Value 0 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "TrackingPrevention" -Value 3 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "BlockThirdPartyCookies" -Value 1 -Type DWord -Force
Set-ItemProperty -Path $clave -Name "DnsOverHttpsMode" -Value "automatic" -Type String -Force
Write-Host "Politicas de Edge aplicadas. Verifica en edge://policy" -ForegroundColor Green

Abre Edge y navega a edge://policy para confirmar que las siete políticas aparecen con origen Platform.


Hardening de navegadores en Windows: Mozilla Firefox

🛠️ Hardening de navegadores en Windows aplicado a Mozilla Firefox

🔍 ¿Cómo aplicar hardening a Mozilla Firefox en Windows? Firefox no usa el registro de Windows: sus políticas se definen en el archivo policies.json ubicado en C:\Program Files\Mozilla Firefox\distribution\. El script PowerShell de esta sección crea la carpeta, escribe el archivo y verifica que Firefox lo reconoce. Las directivas clave son DisableTelemetry: true, HTTPSOnlyMode: enabled, OfferToSaveLogins: false, DisableFirefoxStudies: true y Cookies.Behavior: reject-tracker-and-partition-foreign. Se verifican en about:policies.

🔐 Configuraciones clave del hardening aplicadas a Firefox

  • ✅ Desactivar telemetría y envío de datos a Mozilla.
  • ✅ Forzar modo HTTPS en todas las conexiones.
  • ✅ Bloquear guardado de contraseñas en el navegador.
  • ✅ Deshabilitar estudios y experimentos automáticos de Firefox.
  • ✅ Rechazar rastreadores y cookies particionadas entre sitios.
  • ✅ Activar DNS over HTTPS (DoH) para cifrar la resolución DNS.
  • ✅ Desactivar la página de bienvenida de Firefox.

💻 Script PowerShell para hardening de Firefox

📥 Script individual: solo Firefox

Completa el endurecimiento aplicando este script solo a Firefox mediante su archivo policies.json.

  1. Bloc de notas en texto plano → pega el código de abajo.
  2. Guardar comohardening-firefox.ps1 → tipo "Todos los archivos" → en C:\Scripts.
  3. PowerShell como administrador:
cd C:\Scripts
powershell -NoExit -ExecutionPolicy Bypass -File "hardening-firefox.ps1"

Reinicia Firefox y verifica en: about:policies

# Hardening de Firefox mediante policies.json
# Requiere PowerShell como administrador
$rutaDir = "C:\Program Files\Mozilla Firefox\distribution"
$rutaJson = "$rutaDir\policies.json"
if (-not (Test-Path $rutaDir)) {
    New-Item -ItemType Directory -Path $rutaDir -Force | Out-Null
    Write-Host "[OK] Carpeta distribution creada." -ForegroundColor Green
} else {
    Write-Host "[i] Carpeta distribution ya existe." -ForegroundColor Cyan
}
$contenido = @'
{
  "policies": {
    "DisableTelemetry": true,
    "DisableFirefoxStudies": true,
    "OverrideFirstRunPage": "",
    "OfferToSaveLogins": false,
    "HTTPSOnlyMode": "enabled",
    "DNSOverHTTPS": {
      "Enabled": true,
      "ProviderURL": "https://cloudflare-dns.com/dns-query",
      "Locked": true
    },
    "Cookies": {
      "Behavior": "reject-tracker-and-partition-foreign",
      "BehaviorPrivateBrowsing": "reject-tracker-and-partition-foreign"
    },
    "EnableTrackingProtection": {
      "Value": true,
      "Locked": true,
      "Cryptomining": true,
      "Fingerprinting": true
    },
    "PasswordManagerEnabled": false,
    "DisableFormHistory": true,
    "DisablePocket": true,
    "DisableFirefoxAccounts": false,
    "FirefoxHome": {
      "Pocket": false,
      "Snippets": false,
      "TopSites": false,
      "Highlights": false
    }
  }
}
'@
Set-Content -Path $rutaJson -Encoding UTF8 -Value $contenido
Write-Host "[OK] policies.json escrito en $rutaJson" -ForegroundColor Green
if (Test-Path $rutaJson) {
    $lineas = (Get-Content $rutaJson).Count
    Write-Host "[OK] Verificacion correcta: $lineas lineas." -ForegroundColor Green
    Write-Host "  Reinicia Firefox y comprueba en: about:policies" -ForegroundColor Yellow
} else {
    Write-Host "[X] Error: no se pudo crear el archivo." -ForegroundColor Red
}

Una vez ejecutado, reinicia Firefox y navega a about:policies para confirmar que las políticas aparecen activas. Si Firefox no está instalado en la ruta por defecto, ajusta $rutaDir a tu ruta real.


📊 Comparativa de seguridad: Chrome vs Edge vs Firefox tras el hardening de navegadores en Windows

🔍 ¿Qué navegador queda más protegido tras aplicar hardening en Windows? Tras el hardening, los tres navegadores alcanzan un nivel de protección equivalente frente a phishing, descargas peligrosas y robo de credenciales. Edge lidera en bloqueo nativo gracias a SmartScreen integrado con Windows Defender. Firefox destaca en auditabilidad y privacidad por su archivo policies.json y desactivación de telemetría. Chrome mantiene la cobertura más amplia de políticas y la mejor compatibilidad empresarial. Los tres deshabilitan el gestor de contraseñas integrado, bloquean cookies de terceros y fuerzan HTTPS y DNS cifrado.
Capacidad de seguridadChrome (post-hardening)Edge (post-hardening)Firefox (post-hardening)
Antiphishing nativoSafe Browsing nivel 2SmartScreen + DefenderSafe Browsing (Google)
Bloqueo PUAParcialCompleto (SmartScreenPua)No nativo
HTTPS forzado✅ Sí✅ Sí✅ Sí (HTTPSOnlyMode)
AuditabilidadRegistro (HKLM)Registro (HKLM)policies.json (texto)
DNS over HTTPS✅ Sí (automatic)✅ Sí (automatic)✅ Sí (Cloudflare, bloqueado)
Gestor contraseñas🔴 Deshabilitado🔴 Deshabilitado🔴 Deshabilitado
Cookies terceros🔴 Bloqueadas🔴 Bloqueadas🔴 Bloqueadas
TelemetríaReducidaReducida✅ Desactivada

Script completo de hardening unificado de navegadores con 3 tareas programadas

⚙️ Script completo: hardening unificado de navegadores con 3 tareas programadas

El siguiente script PowerShell completo y unificado aplica en un solo paso el hardening de Chrome, Edge y Firefox, y crea tres tareas programadas que reaplican la configuración en cada arranque del equipo, en cada inicio de sesión y cada 6 horas. De esta forma, si una actualización del navegador o el propio usuario modifica alguna política, el sistema vuelve automáticamente al estado endurecido en menos de 6 horas.

⚠️ Antes de ejecutar el script: escribe políticas en el registro (Chrome y Edge) y en policies.json (Firefox), y crea tres tareas programadas persistentes. Es completamente reversible revirtiendo las claves de registro y el archivo policies.json. Genera un log en C:\Logs\hardening-navegadores.log y un CSV histórico en C:\Logs\hardening-navegadores-historico.csv. Lee siempre el código antes de pegarlo en PowerShell.

📥 Pasos para instalar y ejecutar el script

  1. Abre PowerShell como administrador. Pulsa la tecla Windows, escribe PowerShell, haz clic derecho y elige Ejecutar como administrador. Acepta el aviso UAC.
  2. Verifica que tienes privilegios. Ejecuta el siguiente comando; debe devolver True: ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
  3. Crea la carpeta de scripts. Si no existe: New-Item -Path "C:\Scripts" -ItemType Directory -Force
  4. Guarda el script como C:\Scripts\Hardening-Navegadores.ps1 usando el Bloc de notas.
  5. Ejecuta el script: powershell -ExecutionPolicy Bypass -File "C:\Scripts\Hardening-Navegadores.ps1"
  6. Verifica el resultado. Debes ver las líneas [!] NombrePolítica : → Valor para cada política y [OK] Tarea creada para cada tarea programada.

📄 Contenido del script Hardening-Navegadores.ps1

# ============================================
# Hardening de navegadores: Chrome, Edge y Firefox
# (union de los 3 scripts: politicas ampliadas de Chrome,
# politicas de Edge y policies.json de Firefox)
# y mantenimiento con tres tareas programadas
# Requiere: PowerShell como Administrador
# Ruta fija: C:\Scripts\Hardening-Navegadores.ps1
# ============================================
try {
    # 0. Verificar privilegios de administrador
    if (-not ([Security.Principal.WindowsPrincipal] `
        [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(`
        [Security.Principal.WindowsBuiltInRole]::Administrator)) {
        Write-Host "[X] Ejecuta este script como Administrador." -ForegroundColor Red
        exit
    }
    # 1. Asegurar que el script vive en C:\Scripts (ruta que usaran las tareas programadas)
    $carpetaScripts = "C:\Scripts"
    if (-not (Test-Path $carpetaScripts)) {
        New-Item -ItemType Directory -Path $carpetaScripts -Force | Out-Null
    }
    $rutaFinal = "$carpetaScripts\Hardening-Navegadores.ps1"
    if ($PSCommandPath -and ($PSCommandPath -ne $rutaFinal)) {
        Copy-Item -Path $PSCommandPath -Destination $rutaFinal -Force
        Write-Host "[i] Copia del script guardada en $rutaFinal para uso de las tareas programadas." -ForegroundColor Cyan
    }
    $carpetaLogs = "C:\Logs"
    if (-not (Test-Path $carpetaLogs)) {
        New-Item -ItemType Directory -Path $carpetaLogs -Force | Out-Null
    }
    $log = "$carpetaLogs\hardening-navegadores.log"
    $csv = "$carpetaLogs\hardening-navegadores-historico.csv"
    Start-Transcript -Path $log -Append | Out-Null
    $disparador = if ($args[0]) { $args[0] } else { "Manual" }
    Write-Host "=== Hardening: Chrome, Edge, Firefox ===" -ForegroundColor Cyan
    Write-Host "Fecha: $(Get-Date) | Disparador: $disparador" -ForegroundColor Gray
    $cambios = 0
    function Set-RegPolicy {
        param($Ruta, $Nombre, $Valor, $Tipo = "DWord")
        if (-not (Test-Path $Ruta)) { New-Item -Path $Ruta -Force | Out-Null }
        $actual = (Get-ItemProperty -Path $Ruta -Name $Nombre -ErrorAction SilentlyContinue).$Nombre
        if ($actual -ne $Valor) {
            Set-ItemProperty -Path $Ruta -Name $Nombre -Value $Valor -Type $Tipo -Force
            Write-Host "[!] $Nombre : $actual -> $Valor" -ForegroundColor Yellow
            return 1
        }
        return 0
    }
    # -------------------------------------------------------
    # CHROME (politicas ampliadas: navegacion, autofill, sync y actualizaciones)
    # -------------------------------------------------------
    Write-Host "--- Chrome ---" -ForegroundColor Yellow
    $c = "HKLM:\Software\Policies\Google\Chrome"
    $cUpdate = "HKLM:\Software\Policies\Google\Update"
    $cambios += Set-RegPolicy $c "SafeBrowsingProtectionLevel" 2
    $cambios += Set-RegPolicy $c "DownloadRestrictions" 3
    $cambios += Set-RegPolicy $c "PasswordManagerEnabled" 0
    $cambios += Set-RegPolicy $c "BlockThirdPartyCookies" 1
    $cambios += Set-RegPolicy $c "DnsOverHttpsMode" "automatic" "String"
    $cambios += Set-RegPolicy $c "ForceGoogleSafeSearch" 1
    $cambios += Set-RegPolicy $c "AutofillAddressEnabled" 0
    $cambios += Set-RegPolicy $c "AutofillCreditCardEnabled" 0
    $cambios += Set-RegPolicy $c "SyncDisabled" 1
    $cambios += Set-RegPolicy $cUpdate "AutoUpdateCheckPeriodMinutes" 1440
    Write-Host "[OK] Chrome listo." -ForegroundColor Green
    # -------------------------------------------------------
    # EDGE
    # -------------------------------------------------------
    Write-Host "--- Edge ---" -ForegroundColor Yellow
    $e = "HKLM:\Software\Policies\Microsoft\Edge"
    $cambios += Set-RegPolicy $e "SmartScreenEnabled" 1
    $cambios += Set-RegPolicy $e "SmartScreenPuaEnabled" 1
    $cambios += Set-RegPolicy $e "DownloadRestrictions" 3
    $cambios += Set-RegPolicy $e "PasswordManagerEnabled" 0
    $cambios += Set-RegPolicy $e "TrackingPrevention" 3
    $cambios += Set-RegPolicy $e "BlockThirdPartyCookies" 1
    $cambios += Set-RegPolicy $e "DnsOverHttpsMode" "automatic" "String"
    Write-Host "[OK] Edge listo." -ForegroundColor Green
    # -------------------------------------------------------
    # FIREFOX (policies.json)
    # -------------------------------------------------------
    Write-Host "--- Firefox ---" -ForegroundColor Yellow
    $rutasFirefox = @(
        "C:\Program Files\Mozilla Firefox\distribution",
        "C:\Program Files (x86)\Mozilla Firefox\distribution"
    )
    $firefoxInstalado = $false
    $contenidoPolicies = @'
{
  "policies": {
    "DisableTelemetry": true,
    "DisableFirefoxStudies": true,
    "OverrideFirstRunPage": "",
    "OfferToSaveLogins": false,
    "HTTPSOnlyMode": "enabled",
    "DNSOverHTTPS": {
      "Enabled": true,
      "ProviderURL": "https://cloudflare-dns.com/dns-query",
      "Locked": true
    },
    "Cookies": {
      "Behavior": "reject-tracker-and-partition-foreign",
      "BehaviorPrivateBrowsing": "reject-tracker-and-partition-foreign"
    },
    "EnableTrackingProtection": {
      "Value": true,
      "Locked": true,
      "Cryptomining": true,
      "Fingerprinting": true
    },
    "PasswordManagerEnabled": false,
    "DisableFormHistory": true,
    "DisablePocket": true,
    "DisableFirefoxAccounts": false,
    "FirefoxHome": {
      "Pocket": false,
      "Snippets": false,
      "TopSites": false,
      "Highlights": false
    }
  }
}
'@
    foreach ($dir in $rutasFirefox) {
        $exe = Join-Path (Split-Path $dir) "firefox.exe"
        if (Test-Path $exe) {
            if (-not (Test-Path $dir)) {
                New-Item -ItemType Directory -Path $dir -Force | Out-Null
                Write-Host "[OK] Carpeta distribution creada en $dir." -ForegroundColor Green
            }
            $jsonPath = "$dir\policies.json"
            $actual = if (Test-Path $jsonPath) { Get-Content $jsonPath -Raw } else { "" }
            if ($actual -ne $contenidoPolicies) {
                Set-Content -Path $jsonPath -Encoding UTF8 -Value $contenidoPolicies
                Write-Host "[!] policies.json actualizado en $dir" -ForegroundColor Yellow
                $cambios++
            } else {
                Write-Host "[i] policies.json ya esta actualizado en $dir." -ForegroundColor Cyan
            }
            $firefoxInstalado = $true
        }
    }
    if (-not $firefoxInstalado) {
        Write-Host "[i] Firefox no detectado. Se omite." -ForegroundColor Cyan
    }
    Write-Host "[OK] Firefox listo." -ForegroundColor Green
    # -------------------------------------------------------
    # Resumen y CSV historico
    # -------------------------------------------------------
    $resumen = [PSCustomObject]@{
        Fecha = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
        Disparador = $disparador
        CambiosAplic = $cambios
    }
    # Reintentos por si otra instancia del script tiene el CSV abierto en ese instante
    $intentos = 0
    $escrito = $false
    while (-not $escrito -and $intentos -lt 5) {
        try {
            if (-not (Test-Path $csv)) {
                $resumen | Export-Csv -Path $csv -NoTypeInformation -Encoding UTF8
            } else {
                $resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
            }
            $escrito = $true
        } catch {
            $intentos++
            Start-Sleep -Seconds 2
        }
    }
    if (-not $escrito) {
        Write-Host "[AVISO] No se pudo escribir en el CSV historico tras 5 intentos (en uso por otro proceso)." -ForegroundColor Yellow
    }
    Write-Host "[OK] Cambios aplicados: $cambios" -ForegroundColor Green
    Write-Host "  Log: $log" -ForegroundColor Gray
    # -------------------------------------------------------
    # Tareas programadas (Inicio, Logon, cada 6 horas)
    # -------------------------------------------------------
    $carpetaTareas = "\SeguridadEnMiPC\Hardening-Navegadores\"
    function Crear-Tarea {
        param($Nombre, $Disp, $Trigger)
        if (-not (Get-ScheduledTask -TaskName $Nombre -TaskPath $carpetaTareas -ErrorAction SilentlyContinue)) {
            $a = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$rutaFinal`" $Disp"
            $p = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
            $s = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew
            Register-ScheduledTask -TaskName $Nombre -TaskPath $carpetaTareas -Action $a -Trigger $Trigger -Principal $p -Settings $s | Out-Null
            Write-Host "[OK] Tarea '$Nombre' creada." -ForegroundColor Green
        } else {
            Write-Host "[i] Tarea '$Nombre' ya existia." -ForegroundColor Yellow
        }
    }
    Crear-Tarea "Hardening-Navegadores-Inicio" "Inicio" (New-ScheduledTaskTrigger -AtStartup)
    Crear-Tarea "Hardening-Navegadores-Logon" "Logon" (New-ScheduledTaskTrigger -AtLogOn)
    Crear-Tarea "Hardening-Navegadores-6h" "6h" (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(10) -RepetitionInterval (New-TimeSpan -Hours 6) -RepetitionDuration (New-TimeSpan -Days 3650))
    # Verificacion final (busqueda por nombre, mas fiable que por TaskPath si el cache no esta sincronizado)
    Write-Host "`n=== Tareas programadas activas ===" -ForegroundColor Cyan
    Get-ScheduledTask -TaskName "Hardening-Navegadores-*" | Select-Object TaskName, TaskPath, State | Format-Table -AutoSize
    Write-Host "[OK] Hardening de navegadores (Chrome + Edge + Firefox) activo con 3 tareas programadas." -ForegroundColor Green
    Write-Host "  Script principal: $rutaFinal" -ForegroundColor Gray
    Write-Host "  Log: $log" -ForegroundColor Gray
    Write-Host "  CSV historico: $csv" -ForegroundColor Gray
    Write-Host "`n[i] Reinicia el equipo. Tras reiniciar, verifica con:" -ForegroundColor Yellow
    Write-Host "  Get-ScheduledTask -TaskName 'Hardening-Navegadores-*' | Select-Object TaskName, TaskPath, State" -ForegroundColor Gray
}
catch {
    Write-Host "`n[X] Error: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
    Stop-Transcript | Out-Null
    Read-Host "`nPulsa Enter para salir"
}

⚠️ Riesgos y efectos reales del script

Función¿Se ve afectada?Detalle técnico
Inicio de sesión local🟢 NoNo modifica LSASS, SAM ni políticas de cuenta
Inicio de Windows🟢 NoLas tareas se ejecutan tras el arranque, no lo bloquean
Navegación HTTPS (banca, Gmail)🟢 Sí (positivo)Reforzada con SmartScreen, Safe Browsing y HTTPS-Only
Gestor de contraseñas del navegador🔴 Sí (a propósito)Deshabilitado en Chrome, Edge y Firefox
Cookies de terceros🔴 Sí (a propósito)Bloqueadas; algunos SSO antiguos pueden pedir login manual
Descargas🟡 FiltradasLas peligrosas se bloquean; las normales siguen funcionando
Extensiones instaladas antes🟢 No se desinstalanLas políticas no borran extensiones ya presentes
Carga de CPU (3 tareas)🟡 MínimaCada ejecución dura menos de 3 s; total diario inferior a 30 s
🚨 No ejecutes el script sin consultar si: tu empresa ya despliega políticas de navegador por GPO (pueden chocar); dependes del gestor de contraseñas del navegador (exporta antes de ejecutar); necesitas instalar extensiones fuera de la tienda oficial; usas servicios que requieran cookies de terceros (SSO antiguos, widgets embebidos).

🔎 ¿Cómo verificar que el hardening está activo?

💡 Comandos de verificación

# Las 3 tareas programadas
Get-ScheduledTask -TaskName "Hardening-Navegadores-*" | Select TaskName, State, LastRunTime, LastTaskResult
# Politicas Chrome
reg query "HKLM\Software\Policies\Google\Chrome"
# Politicas Edge
reg query "HKLM\Software\Policies\Microsoft\Edge"
# Firefox
Get-Content "C:\Program Files\Mozilla Firefox\distribution\policies.json"
# CSV historico
Import-Csv C:\Logs\hardening-navegadores-historico.csv | Select -Last 24

Comprobar que el hardening de navegadores en Windows sigue activo es tan importante como aplicarlo: las tres tareas deben aparecer en estado Ready con LastTaskResult = 0. En los navegadores, chrome://policy, edge://policy y about:policies deben mostrar las políticas con origen Platform.

✅ Checklist de verificación del hardening

Después de ejecutar el script, confirma cada punto:

  • ☑ Las 3 tareas Hardening-Navegadores-* aparecen en estado Ready
  • LastTaskResult = 0 en todas las tareas (ejecución exitosa)
  • ☑ En chrome://policy: SafeBrowsingProtectionLevel, DownloadRestrictions, PasswordManagerEnabled, BlockThirdPartyCookies y DnsOverHttpsMode con origen Platform
  • ☑ En edge://policy: SmartScreenEnabled, SmartScreenPuaEnabled, TrackingPrevention, DownloadRestrictions, BlockThirdPartyCookies y DnsOverHttpsMode con origen Platform
  • ☑ En about:policies (Firefox): DisableTelemetry, HTTPSOnlyMode, DNSOverHTTPS, EnableTrackingProtection y Cookies
  • ☑ El archivo C:\Program Files\Mozilla Firefox\distribution\policies.json existe
  • ☑ El log C:\Logs\hardening-navegadores.log no muestra errores
  • ☑ El CSV C:\Logs\hardening-navegadores-historico.csv registra la ejecución inicial
  • ☑ El gestor de contraseñas del navegador aparece deshabilitado en la configuración
  • ☑ El navegador muestra «Administrado por tu organización» en el menú

✔ 10/10 = hardening activo y verificado · ✘ menos de 8 = revisar antes de continuar


📋 Checklist de cumplimiento normativo

Mapeo del hardening contra controles auditables:

  • ENS mp.sw.2 — Configuración segura del software del puesto
  • ENS op.exp.2 — Configuración de seguridad documentada y reproducible
  • ISO 27001:2022 A.8.7 — Protección frente a malware (Safe Browsing + SmartScreen)
  • ISO 27001:2022 A.8.9 — Gestión de configuraciones (políticas en registro/policies.json)
  • ISO 27001:2022 A.5.23 — Servicios en la nube (cookies de terceros y SSO)
  • NIST CSF 2.0 PR.PS-01 — Baseline de configuración aplicado y verificado
  • NIST CSF 2.0 DE.CM-01 — Monitorización continua (3 tareas programadas)
  • CIS Controls v8 5.1 — Inventario y control de software autorizado
  • CIS Controls v8 7.6 — Filtrado de URLs y descargas (DownloadRestrictions)
  • RGPD art. 32 — Medidas técnicas para proteger datos personales en sesión

🔐 Configuraciones adicionales recomendadas

ConfiguraciónChromeEdgeFirefoxImpacto seguridad
Bloquear cookies de terceros🟠 Alto
Forzar HTTPS🔴 Muy alto
Desactivar telemetría🟡 Medio
Limitar extensiones🔴 Muy alto
DNS over HTTPS (DoH)🟠 Alto

Más allá del DNS, el navegador puede seguir filtrando tu dirección IP real a través de WebRTC incluso con una VPN activa. Para conocer los métodos profesionales para impedir que el navegador delate tu IP verdadera, complementa esta sección con la guía de cómo anonimizar tu IP pública con VPN, DNS cifrado y sin fugas WebRTC.


🧠 Buenas prácticas complementarias al hardening de navegadores en Windows

Estas prácticas refuerzan el endurecimiento del navegador más allá de lo que cubre el script:

🛡️ Checklist preventivo de navegación segura (12 puntos)

Marca estos 12 puntos para una navegación blindada:

  • ☑ Script de hardening ejecutado y 3 tareas programadas activas
  • ☑ Navegador actualizado a la última versión (automático)
  • ☑ uBlock Origin o bloqueador similar instalado
  • ☑ Gestor de contraseñas externo (Bitwarden, 1Password, KeePassXC)
  • ☑ 2FA activo en todas las cuentas críticas (correo, banco, redes sociales)
  • ☑ Safe Browsing y SmartScreen en nivel mejorado
  • ☑ HTTPS-Only activado en todos los navegadores
  • ☑ DNS over HTTPS (DoH) activo con proveedor de confianza
  • ☑ Cookies de terceros bloqueadas
  • ☑ Ninguna extensión instalada fuera de la tienda oficial
  • ☑ Revisión mensual del CSV histórico para detectar reversiones
  • ☑ Windows Defender con protección en tiempo real activa en el host

✔ 12/12 = navegación blindada · ✘ menos de 9 = revisar prioridades


⏱️ Checklist de emergencia: hardening comprometido

Si detectas redirecciones, extensiones desconocidas o logins desde IP extrañas, aplica de urgencia el hardening de navegadores en Windows con este orden:

  1. 0-5 min: cierra el navegador y desconecta el PC de internet.
  2. 5-10 min: desde OTRO dispositivo limpio, cambia la contraseña del correo principal y activa el 2FA.
  3. 10-20 min: revoca sesiones activas en Gmail, Outlook, banco y redes sociales.
  4. 20-30 min: en modo invitado, revisa chrome://extensions, edge://extensions o about:addons.
  5. 30-45 min: desinstala toda extensión que no reconozcas y restablece el navegador a su configuración por defecto.
  6. 45-60 min: lanza un análisis completo con Windows Defender para descartar infostealers.
  7. A partir de 1 hora: reaplica el script de hardening, verifica las tres tareas y consulta el CSV histórico.

❓ Preguntas frecuentes sobre el hardening de navegadores en Windows

¿Cuánto tiempo lleva aplicar el hardening?

👉 La ejecución inicial del script tarda entre 10 y 30 segundos en un equipo moderno, incluyendo la creación de las tres tareas programadas. La verificación manual de políticas lleva otros 2 o 3 minutos. En total, aplicar el hardening de navegadores en Windows lleva menos de 15 minutos de principio a fin.

¿Necesito ser administrador para ejecutar el script?

👉 Sí. El script escribe en HKLM (registro local de máquina) y crea tareas programadas con privilegios SYSTEM, lo que requiere derechos de administrador. Sin esos permisos, el script termina inmediatamente con el mensaje [X] Ejecuta como Administrador.

¿El script no hace nada al ejecutarlo?

👉 Comprueba tres cosas: que estás ejecutando PowerShell como administrador (True); que el archivo existe en la ruta correcta (Test-Path "C:\Scripts\Hardening-Navegadores.ps1"); y que el archivo tiene más de una línea ((Get-Content "C:\Scripts\Hardening-Navegadores.ps1").Count mayor que 1). Si devuelve 1, el archivo está guardado en una sola línea: recréalo copiando el código directamente al Bloc de notas.

¿El script desinstala extensiones que ya tengo instaladas?

👉 No. Las políticas aplicadas no eliminan extensiones ya presentes en el perfil del navegador. Solo restringen la instalación de nuevas extensiones fuera de los canales oficiales si añades las directivas correspondientes al script.

¿Qué pasa con las contraseñas guardadas al desactivar el gestor del navegador?

👉 Las contraseñas guardadas previamente siguen accesibles en sesiones ya abiertas, pero el navegador deja de ofrecer guardar nuevas. Antes de aplicar el hardening, exporta tus contraseñas desde la configuración del navegador e impórtalas en Bitwarden, KeePassXC o el gestor externo que prefieras.

¿El script entra en conflicto con políticas GPO o Intune corporativas?

👉 Sí, puede chocar. GPO e Intune escriben en las mismas claves del registro, y las políticas corporativas prevalecen sobre las locales. Si tu equipo ya recibe directivas de empresa, coordínalo con tu administrador antes de ejecutar el script.

¿El hardening protege frente a ataques zero-day en el navegador?

👉 Reduce significativamente la superficie de ataque pero no sustituye las actualizaciones del navegador. Frente a exploits zero-day, la mejor defensa combina el hardening con actualizaciones automáticas activas, Defender en tiempo real y un bloqueador de anuncios. El hardening corta los vectores conocidos; las actualizaciones cierran los desconocidos.


🏁 Conclusión

El hardening de navegadores en Windows transforma una instalación por defecto en un endpoint con nivel de protección equivalente al corporativo: bloquea phishing antes de que el usuario interactúe con la página falsa, neutraliza el robo de credenciales por infostealers (T1555.003) y reduce la superficie de ataque sin licencias ni software adicional en memoria.

Aplicar las políticas con PowerShell, auditar el estado en el CSV histórico y mantenerlas vivas mediante las tres tareas programadas convierte el hardening en un hábito automatizado, no en una tarea recurrente que dependa de la disciplina del usuario. La diferencia entre un equipo expuesto y un equipo blindado no está en el navegador elegido, sino en si este endurecimiento se ha aplicado antes del primer intento de robo de credenciales o la primera descarga peligrosa. Endurecer el navegador es solo un pilar más de una estrategia sólida de ciberseguridad práctica para proteger tu equipo, tus cuentas y tus datos personales frente a amenazas reales.

Autor

Entusiasta de la seguridad informática con años de experiencia en protección de sistemas Windows y defensa contra amenazas digitales. Apasionado por la tecnología y la privacidad, comparto en este blog consejos prácticos, análisis detallados y guías paso a paso para que cualquier usuario pueda fortalecer la seguridad de su PC y su vida digital

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tu puntuación: Útil

Subir