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

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
La diferencia clave entre configuración manual y hardening por políticas en cinco puntos:
- Persistencia: la configuración manual es reversible por el usuario en segundos; las políticas son inmutables salvo con privilegios admin
- Resistencia a actualizaciones: la configuración manual puede perderse; las políticas persisten y se reaplican automáticamente
- Auditoría: la configuración manual no queda registrada; las políticas son verificables en chrome://policy, edge://policy y about:policies
- Despliegue: la configuración manual es imposible de desplegar en masa; las políticas son automatizables con GPO, Intune y PowerShell
- 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
| Aspecto | Configuración manual (chrome://settings) | Hardening por políticas (registro / policies.json) |
|---|---|---|
| Persistencia | Reversible por el usuario en segundos | Inmutable salvo con privilegios admin |
| Resistencia a actualizaciones | Puede perderse tras actualización mayor | Persiste y se reaplica automáticamente |
| Auditoría | No registrada | Verificable en chrome://policy |
| Despliegue masivo | Imposible | Automatizable con GPO/Intune/PowerShell |
| Cumplimiento normativo | No demostrable | Trazable para ENS, ISO 27001 y NIST CSF |

🚨 Por qué es importante endurecer navegadores en Windows
| Riesgo sin hardening | Consecuencia | Técnica MITRE | Nivel de peligro |
|---|---|---|---|
| Descargas automáticas | Instalación silenciosa de malware | T1189 Drive-by Compromise | 🔴 Crítico |
| Páginas de phishing | Robo de credenciales y datos bancarios | T1566 Phishing | 🔴 Crítico |
| Contraseñas guardadas | Extracción mediante infostealers | T1555.003 | 🔴 Crítico |
| Robo de cookies | Secuestro de sesiones activas | T1539 | 🟠 Alto |
| Extensiones maliciosas | Espionaje y robo de datos en tiempo real | T1176 | 🟠 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
Tres niveles de hardening de navegadores en Windows ordenados por protección:
- 🥉 Bronce (usuario doméstico ocasional): activación manual de Safe Browsing y SmartScreen desde la interfaz, reversible, sin tareas programadas
- 🥈 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
- 🥇 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
| Nivel | Persistencia | Auditoría | Esfuerzo | Perfil recomendado |
|---|---|---|---|---|
| 🥉 Bronce | Baja (revertible) | Manual | 5 minutos | Doméstico ocasional |
| 🥈 Plata | Media | Manual | 15 minutos | Profesional autónomo |
| 🥇 Oro | Alta (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
.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.- Si no la tienes ya, crea la carpeta
C:\Scripts: Explorador de archivos →C:\→ clic derecho → Nuevo → Carpeta → nómbralaScripts. - Abre el Bloc de notas (tecla Windows → escribe "Bloc de notas" → Enter).
- Pega el código completo del script que quieras usar.
- Ve a Archivo → Guardar como. Rellena estos tres campos:
- Dónde guardarlo:
C:\Scripts - Nombre de archivo: el nombre correspondiente terminado en
.ps1(por ejemplohardening-chrome.ps1) - Tipo: cambia el desplegable de "Documentos de texto (*.txt)" a "Todos los archivos (*.*)"
- Dónde guardarlo:
- Pulsa Guardar.
- 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.
- Pulsa la tecla Windows, escribe
PowerShell. - Haz clic derecho sobre "Windows PowerShell" → "Ejecutar como administrador". Confirma si te lo pide.
- Escribe estas líneas una a una, pulsando Enter después de cada una:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
cd C:\Scripts
dir *.ps1Con 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.
.ps1.txt). Ejecuta dir *.ps1 en C:\Scripts y usa el nombre exacto que aparece ahí, entre comillas.
🛠️ Cómo aplicar el hardening de navegadores en Windows en Google Chrome
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
📥 Script individual: solo Chrome
Si solo quieres endurecer Google Chrome sin tocar Edge ni Firefox, usa este script independiente.
- Abre el Bloc de notas en texto plano.
- Pega el código de abajo.
- Archivo → Guardar como → nombre
hardening-chrome.ps1→ tipo "Todos los archivos (*.*)" → guarda enC:\Scripts. - 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 GreenDebes 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 aplicado a Microsoft Edge
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.
- Bloc de notas en texto plano → pega el código de abajo.
- Guardar como →
hardening-edge.ps1→ tipo "Todos los archivos" → enC:\Scripts. - 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 GreenAbre Edge y navega a edge://policy para confirmar que las siete políticas aparecen con origen Platform.

🛠️ Hardening de navegadores en Windows aplicado a Mozilla Firefox
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.
- Bloc de notas en texto plano → pega el código de abajo.
- Guardar como →
hardening-firefox.ps1→ tipo "Todos los archivos" → enC:\Scripts. - 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
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 seguridad | Chrome (post-hardening) | Edge (post-hardening) | Firefox (post-hardening) |
|---|---|---|---|
| Antiphishing nativo | Safe Browsing nivel 2 | SmartScreen + Defender | Safe Browsing (Google) |
| Bloqueo PUA | Parcial | Completo (SmartScreenPua) | No nativo |
| HTTPS forzado | ✅ Sí | ✅ Sí | ✅ Sí (HTTPSOnlyMode) |
| Auditabilidad | Registro (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ía | Reducida | Reducida | ✅ Desactivada |

⚙️ 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.
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
- Abre PowerShell como administrador. Pulsa la tecla Windows, escribe
PowerShell, haz clic derecho y elige Ejecutar como administrador. Acepta el aviso UAC. - Verifica que tienes privilegios. Ejecuta el siguiente comando; debe devolver
True:([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) - Crea la carpeta de scripts. Si no existe:
New-Item -Path "C:\Scripts" -ItemType Directory -Force - Guarda el script como
C:\Scripts\Hardening-Navegadores.ps1usando el Bloc de notas. - Ejecuta el script:
powershell -ExecutionPolicy Bypass -File "C:\Scripts\Hardening-Navegadores.ps1" - Verifica el resultado. Debes ver las líneas
[!] NombrePolítica : → Valorpara cada política y[OK] Tarea creadapara 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 | 🟢 No | No modifica LSASS, SAM ni políticas de cuenta |
| Inicio de Windows | 🟢 No | Las 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 | 🟡 Filtradas | Las peligrosas se bloquean; las normales siguen funcionando |
| Extensiones instaladas antes | 🟢 No se desinstalan | Las políticas no borran extensiones ya presentes |
| Carga de CPU (3 tareas) | 🟡 Mínima | Cada ejecución dura menos de 3 s; total diario inferior a 30 s |
🔎 ¿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 = 0en 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.jsonexiste - ☑ El log
C:\Logs\hardening-navegadores.logno muestra errores - ☑ El CSV
C:\Logs\hardening-navegadores-historico.csvregistra 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ón | Chrome | Edge | Firefox | Impacto 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:
- 🚫 No instales extensiones de fuentes desconocidas.
- ⬇️ Evita descargas desde sitios no verificados.
- 🔄 Mantén el navegador siempre actualizado.
- 📱 Activa la autenticación en dos factores con app TOTP: qué es y cómo activarla paso a paso en todas tus cuentas.
- 🗝️ Usa un gestor de contraseñas profesional: análisis y comparativa de los mejores en lugar del del navegador.
- 📊 Revisa mensualmente el CSV histórico
C:\Logs\hardening-navegadores-historico.csvpara detectar reversiones. - 🛡️ Combina el hardening con EDR ligero si gestionas información sensible.
- 🌐 Configura DNS over HTTPS apuntando a resolvers de confianza (Cloudflare, Quad9, NextDNS).
🛡️ 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:
- 0-5 min: cierra el navegador y desconecta el PC de internet.
- 5-10 min: desde OTRO dispositivo limpio, cambia la contraseña del correo principal y activa el 2FA.
- 10-20 min: revoca sesiones activas en Gmail, Outlook, banco y redes sociales.
- 20-30 min: en modo invitado, revisa
chrome://extensions,edge://extensionsoabout:addons. - 30-45 min: desinstala toda extensión que no reconozcas y restablece el navegador a su configuración por defecto.
- 45-60 min: lanza un análisis completo con Windows Defender para descartar infostealers.
- 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.
Deja una respuesta