🗂️ Archivo HOSTS de Windows: qué es, cómo detectar si ha sido manipulado y cómo protegerlo

hace 4 meses

Archivo HOSTS de Windows: qué es, cómo detectar si ha sido manipulado y cómo protegerlo

Archivo hosts en Windows: cómo restaurarlo y protegerlo con PowerShell

📄 El archivo hosts en Windows es uno de los objetivos favoritos del malware: basta con añadir una sola línea para redirigir tu banco, tu antivirus o Windows Update a un servidor falso, sin que el navegador muestre ninguna advertencia. En esta guía verás qué es el archivo hosts en Windows, cómo detectar si ha sido manipulado, y cómo restaurarlo y protegerlo de forma permanente con un script PowerShell y tareas programadas.

⚡ Respuesta rápida

Abre el archivo en C:\Windows\System32\drivers\etc\hosts con el Bloc de notas como administrador y revisa si hay líneas añadidas debajo de localhost. Si encuentras entradas que no reconoces, restaura el archivo hosts en Windows a su contenido limpio, aplica permisos NTFS restrictivos con icacls para que solo SYSTEM y Administradores puedan modificarlo, y usa el script de esta guía para que dos tareas programadas verifiquen el archivo al arrancar y cada hora, restaurándolo automáticamente si detectan un cambio no autorizado.

💡 Definición rápida

Archivo hosts en Windows: fichero de texto sin extensión situado en C:\Windows\System32\drivers\etc\hosts que el sistema operativo consulta antes que cualquier servidor DNS para traducir nombres de dominio a direcciones IP. Puedes consultar la página oficial de soporte de Microsoft sobre el archivo hosts para más detalle técnico. Al tener prioridad sobre el DNS, una sola línea añadida por malware puede redirigir silenciosamente cualquier dominio a un servidor controlado por un atacante, sin que el navegador ni el antivirus lo detecten como algo anómalo.

📋 Resumen rápido

🔒 Archivo HOSTS Windows: cómo restaurarlo y protegerlo

El archivo hosts en Windows traduce nombres de dominio a direcciones IP antes de consultar cualquier servidor DNS, así que una sola línea añadida por malware puede redirigir en silencio tu banco, tu antivirus o Windows Update a un servidor falso, sin que el navegador muestre ninguna advertencia.

  • ✅ Qué es el archivo hosts en Windows y por qué es un objetivo habitual del malware
  • ✅ Señales de que tu archivo hosts en Windows ha sido manipulado
  • ✅ Script PowerShell para restaurar, proteger y monitorizar el archivo hosts en Windows
  • ✅ Cómo verificar que la protección está activa
  • ✅ Cómo revertir la protección si necesitas editar el archivo manualmente

📅 Publicado: 21 de marzo de 2026 · 🕒 Tiempo de lectura: 8 minutos


¿Qué es el archivo hosts en Windows y por qué es un objetivo del malware?

¿Qué es el archivo hosts en Windows y por qué es un objetivo del malware?

🔍 ¿Por qué los atacantes manipulan este archivo?

Cuatro razones por las que sigue siendo un vector de ataque vigente:

  • Tiene prioridad sobre el DNS, así que una redirección aquí es invisible para cualquier herramienta que solo audite el DNS de la red
  • No requiere privilegios de red: basta con escribir un archivo local, algo que muchos troyanos hacen sin llamar la atención
  • Permite bloquear silenciosamente los dominios de actualización de antivirus y de Windows Update, dejando el equipo indefenso ante nuevas amenazas
  • Permite suplantar dominios bancarios o de correo apuntándolos a un servidor de phishing sin cambiar ni una letra de la URL visible

Este archivo es un mecanismo heredado de los primeros días de internet, anterior al DNS moderno. Puedes consultar también la entrada de referencia sobre el archivo hosts para entender su origen. Windows lo sigue consultando primero por compatibilidad, lo que lo convierte en un punto ciego para quien solo vigila el tráfico DNS de su router.

Señales de que el archivo ha sido manipulado

🔍 ¿Cómo saber si ha sido modificado sin permiso?
  • 🌐 Una web conocida (tu banco, tu correo) carga distinto, más lenta, o pide credenciales de forma extraña
  • 🛡️ El antivirus deja de poder actualizar sus firmas o Windows Update falla repetidamente sin motivo aparente
  • 📄 El archivo hosts pesa más de lo habitual o tiene fecha de modificación reciente que no recuerdas haber hecho tú
  • 🔒 El archivo aparece con permisos distintos a los normales, o de repente puedes editarlo sin que estuviera protegido antes

El hosts limpio solo contiene comentarios y, como mucho, dos líneas activas: 127.0.0.1 localhost y ::1 localhost. Cualquier otra línea sin comentar que no hayas añadido tú mismo es motivo de sospecha.


Cómo restaurar y proteger el archivo hosts en Windows con PowerShell

Cómo restaurar y proteger el archivo hosts en Windows con PowerShell

Este script hace cuatro cosas en un solo paso: guarda una copia de seguridad del archivo actual, lo restaura a su contenido limpio por defecto, lo protege con permisos NTFS para que solo SYSTEM y Administradores puedan modificarlo, y crea dos tareas programadas que comprueban el hash del archivo al arrancar y cada hora, restaurándolo automáticamente si detectan un cambio no autorizado. Consulta la documentación oficial de Microsoft sobre icacls para entender cada parámetro usado en el script.

⚠️ Antes de ejecutar: si usas software legítimo que necesita entradas propias en el hosts (por ejemplo, un bloqueador de anuncios basado en hosts, o un entorno de desarrollo local), este script las eliminará al restaurar el contenido limpio. Guarda esas líneas aparte antes de ejecutarlo y añádelas de nuevo después, editando también C:\ProgramData\SeguridadEnMiPC\Hosts\hosts_referencia.txt y recalculando el hash, o las tareas programadas las borrarán en la siguiente verificación horaria.

📥 Cómo guardar y ejecutar el script paso a paso

1. Cómo guardar el script como .ps1 en C:\Scripts

  1. Crea la carpeta C:\Scripts si no la tienes: abre el Explorador de archivos, ve a C:\, clic derecho → Nuevo → Carpeta, nómbrala Scripts.
  2. Abre el Bloc de notas (tecla Windows → escribe "Bloc de notas" → Enter).
  3. Pega dentro el código completo del script (lo tienes al final de esta sección).
  4. Ve a Archivo → Guardar como. Rellena estos tres campos:
    • Dónde guardarlo: navega hasta C:\Scripts.
    • Nombre de archivo: escribe restaurar-proteger-hosts.ps1 (con el .ps1 al final, escrito por ti).
    • Tipo: cambia el desplegable de "Documentos de texto (*.txt)" a "Todos los archivos (*.*)". Si no lo cambias, el archivo se guarda como restaurar-proteger-hosts.ps1.txt aunque hayas escrito ".ps1".
  5. Pulsa Guardar.
  6. Comprueba que salió bien: en C:\Scripts, el icono del archivo debe verse como una pantalla de consola azul, no como una hoja de papel.

2. Cómo se ejecuta

Nunca hagas doble clic sobre el archivo ni pegues el código directamente en la consola de PowerShell.

  1. Pulsa la tecla Windows, escribe PowerShell.
  2. Haz clic derecho sobre "Windows PowerShell" y elige "Ejecutar como administrador". Confirma si te lo pide.
  3. En la ventana azul que se abre, escribe estas tres 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 con este comando:

powershell -NoExit -ExecutionPolicy Bypass -File "restaurar-proteger-hosts.ps1"

Verás en pantalla, en verde, cada paso completado: copia de seguridad, restauración, protección ACL y creación de las 2 tareas programadas. Al terminar te pedirá pulsar Enter para cerrar.

3. Si algo falla

  • "ERROR: Ejecuta PowerShell como Administrador": cierra la ventana y vuelve a abrir PowerShell con "Ejecutar como administrador" (clic derecho).
  • "Acceso denegado a la ruta de acceso '...\hosts'": el propietario por defecto del archivo hosts en Windows es TrustedInstaller, no tu cuenta de Administrador. El script toma posesión del archivo automáticamente con icacls /setowner usando el SID *S-1-5-32-544 (Administradores) en vez del nombre en inglés, porque en Windows en español el grupo se llama "Administradores" y un nombre inexistente hace que icacls falle en silencio sin aplicar el cambio.
  • Las 2 tareas no aparecen en Get-ScheduledTask, aunque el script haya mostrado "OK Tarea creada": problema de caché del Programador de tareas. Reinicia el equipo para forzarlo.
  • Necesitas volver a editar el hosts manualmente: primero elimina las tareas programadas (ver sección de verificación más abajo) o la siguiente verificación horaria revertirá tu cambio.
⚠️ No hagas doble clic sobre el archivo .ps1. Ejecútalo siempre desde una ventana de PowerShell abierta como administrador, como se explica arriba.
Script para proteger y restaurar el archivo HOSTS en Windows

Script para proteger y restaurar el archivo HOSTS en Windows

# =====================================================
# Restaurar y proteger el archivo hosts + monitorizacion
# seguridadenmipc.com
# Ejecutar como Administrador
# =====================================================
# --- Verificar administrador ---
$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$pri = New-Object Security.Principal.WindowsPrincipal($id)
if (-not $pri.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host "ERROR: Ejecuta PowerShell como Administrador." -ForegroundColor Red
    pause
    exit
}
# --- Auto-copia a C:\Scripts ---
$scriptsDir = "C:\Scripts"
if (-not (Test-Path $scriptsDir)) { New-Item -Path $scriptsDir -ItemType Directory -Force | Out-Null }
$destinoScript = Join-Path $scriptsDir "restaurar-proteger-hosts.ps1"
if ($PSCommandPath -and (Test-Path $PSCommandPath) -and ($PSCommandPath -ne $destinoScript)) {
    Copy-Item -Path $PSCommandPath -Destination $destinoScript -Force -ErrorAction SilentlyContinue
}
# --- Transcript ---
$logDirInstalacion = "C:\Logs"
if (-not (Test-Path $logDirInstalacion)) { New-Item -Path $logDirInstalacion -ItemType Directory -Force | Out-Null }
$transcriptFile = Join-Path $logDirInstalacion ("restaurar-proteger-hosts_" + (Get-Date -Format "yyyyMMdd_HHmmss") + ".log")
Start-Transcript -Path $transcriptFile -Append | Out-Null
try {
    Write-Host "======================================================" -ForegroundColor Cyan
    Write-Host " RESTAURAR Y PROTEGER ARCHIVO HOSTS" -ForegroundColor Cyan
    Write-Host " seguridadenmipc.com" -ForegroundColor Cyan
    Write-Host "======================================================" -ForegroundColor Cyan
    Write-Host ""
    $hostsPath = Join-Path $env:windir "System32\drivers\etc\hosts"
    $baseDir   = "C:\ProgramData\SeguridadEnMiPC\Hosts"
    $backupDir = Join-Path $baseDir "Backup"
    $auxLogDir = Join-Path $baseDir "Logs"
    foreach ($d in @($baseDir, $backupDir, $auxLogDir)) {
        if (-not (Test-Path $d)) { New-Item -Path $d -ItemType Directory -Force | Out-Null }
    }
    # -------------------------------------------------------
    # PARTE 1: Copia de seguridad del hosts actual
    # -------------------------------------------------------
    Write-Host "--- PARTE 1: Copia de seguridad del hosts actual ---" -ForegroundColor Cyan
    Write-Host ""
    # Tomar posesion y otorgar permisos usando SIDs (no nombres en ingles):
    # en Windows en espanol el grupo se llama "Administradores", no "Administrators",
    # y un nombre inexistente hace que icacls falle en silencio sin aplicar el cambio.
    # S-1-5-18 = SYSTEM | S-1-5-32-544 = Administradores | S-1-5-32-545 = Usuarios
    icacls $hostsPath /setowner "*S-1-5-32-544" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-544:F" | Out-Null
    try { (Get-Item $hostsPath).Attributes = 'Normal' } catch {}
    $fecha = Get-Date -Format "yyyyMMdd_HHmmss"
    $backupActual = Join-Path $backupDir ("hosts_" + $fecha + ".bak")
    Copy-Item -Path $hostsPath -Destination $backupActual -Force -ErrorAction SilentlyContinue
    Write-Host ("OK Copia guardada en: " + $backupActual) -ForegroundColor Green
    # -------------------------------------------------------
    # PARTE 2: Restaurar hosts a su contenido limpio por defecto
    # -------------------------------------------------------
    Write-Host ""
    Write-Host "--- PARTE 2: Restaurando hosts a estado limpio ---" -ForegroundColor Cyan
    Write-Host ""
    $contenidoLimpio = @'
# Copyright (c) 1993-2009 Microsoft Corp.
#
# Este es un archivo HOSTS de ejemplo usado por Microsoft TCP/IP para Windows.
#
# Este archivo contiene las asignaciones de direcciones IP a nombres de host.
# Cada entrada debe mantenerse en una linea individual. La direccion IP debe
# colocarse en la primera columna seguida del nombre de host correspondiente.
# La direccion IP y el nombre de host deben estar separados por al menos un
# espacio.
#
# Ademas, se pueden agregar comentarios (como estos) en lineas individuales
# o despues del nombre de la maquina, delimitados por el simbolo '#'.
#
# Por ejemplo:
#
#      102.54.94.97     rhino.acme.com          # servidor de origen
#       38.25.63.10     x.acme.com              # host cliente x
# localhost es usado para resolver el nombre local del propio equipo.
127.0.0.1       localhost
::1             localhost
'@
    $contenidoLimpio | Out-File -FilePath $hostsPath -Encoding ascii -Force
    Write-Host "OK Archivo hosts restaurado a contenido limpio." -ForegroundColor Green
    # Guardar copia de referencia (usada para restauraciones automaticas futuras)
    $referencia = Join-Path $baseDir "hosts_referencia.txt"
    Copy-Item -Path $hostsPath -Destination $referencia -Force
    # Calcular y guardar el hash de referencia
    $hashFile = Join-Path $baseDir "hosts.hash"
    (Get-FileHash -Path $hostsPath -Algorithm SHA256).Hash | Out-File -FilePath $hashFile -Encoding ascii -Force
    Write-Host ("OK Hash de referencia guardado en: " + $hashFile) -ForegroundColor Green
    # -------------------------------------------------------
    # PARTE 3: Proteger el archivo hosts (ACL + solo lectura)
    # -------------------------------------------------------
    Write-Host ""
    Write-Host "--- PARTE 3: Aplicando proteccion al archivo hosts ---" -ForegroundColor Cyan
    Write-Host ""
    icacls $hostsPath /inheritance:r | Out-Null
    icacls $hostsPath /grant "*S-1-5-18:F" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-544:F" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-545:RX" | Out-Null
    Write-Host "OK Permisos ACL aplicados: solo SYSTEM y Administradores pueden modificar el archivo." -ForegroundColor Green
    (Get-Item $hostsPath).Attributes = 'ReadOnly'
    Write-Host "OK Atributo de solo lectura activado (capa adicional)." -ForegroundColor Green
    # -------------------------------------------------------
    # PARTE 4: Script auxiliar de verificacion/restauracion
    # -------------------------------------------------------
    Write-Host ""
    Write-Host "--- PARTE 4: Instalando script de verificacion ---" -ForegroundColor Cyan
    Write-Host ""
    $scriptVerif = Join-Path $baseDir "verificar-hosts.ps1"
    $contenidoVerif = @'
$hostsPath = Join-Path $env:windir "System32\drivers\etc\hosts"
$baseDir   = "C:\ProgramData\SeguridadEnMiPC\Hosts"
$referencia = Join-Path $baseDir "hosts_referencia.txt"
$hashFile   = Join-Path $baseDir "hosts.hash"
$logFile    = Join-Path $baseDir "Logs\verificacion-hosts.log"
$hashGuardado = (Get-Content -Path $hashFile -ErrorAction SilentlyContinue)
$hashActual   = (Get-FileHash -Path $hostsPath -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
if ($hashActual -ne $hashGuardado) {
    $mensaje = "$(Get-Date) - ALERTA: el archivo hosts fue modificado. Restaurando desde referencia."
    Add-Content -Path $logFile -Value $mensaje
    $fuenteExiste = $false
    try { $fuenteExiste = [System.Diagnostics.EventLog]::SourceExists("SEGPC-Hosts") } catch { $fuenteExiste = $false }
    if ($fuenteExiste) {
        Write-EventLog -LogName Application -Source "SEGPC-Hosts" -EventId 9002 -EntryType Warning -Message $mensaje -ErrorAction SilentlyContinue
    }
    icacls $hostsPath /setowner "*S-1-5-32-544" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-544:F" | Out-Null
    try { (Get-Item $hostsPath).Attributes = 'Normal' } catch {}
    Copy-Item -Path $referencia -Destination $hostsPath -Force
    icacls $hostsPath /inheritance:r | Out-Null
    icacls $hostsPath /grant "*S-1-5-18:F" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-544:F" | Out-Null
    icacls $hostsPath /grant "*S-1-5-32-545:RX" | Out-Null
    (Get-Item $hostsPath).Attributes = 'ReadOnly'
    Add-Content -Path $logFile -Value "$(Get-Date) - Archivo hosts restaurado y protegido de nuevo."
} else {
    Add-Content -Path $logFile -Value "$(Get-Date) - OK: hosts sin cambios."
}
'@
    Set-Content -Path $scriptVerif -Encoding UTF8 -Value $contenidoVerif
    Write-Host ("OK Script de verificacion instalado en: " + $scriptVerif) -ForegroundColor Green
    # --- Registrar fuente en el Visor de eventos ---
    $fuenteExiste = $false
    try { $fuenteExiste = [System.Diagnostics.EventLog]::SourceExists("SEGPC-Hosts") } catch { $fuenteExiste = $false }
    if (-not $fuenteExiste) {
        try {
            New-EventLog -LogName Application -Source "SEGPC-Hosts" -ErrorAction SilentlyContinue
            Write-Host "OK Fuente de eventos registrada: SEGPC-Hosts" -ForegroundColor Green
        } catch {
            Write-Host "-- Fuente de eventos no registrada (no es critico)." -ForegroundColor Gray
        }
    }
    # -------------------------------------------------------
    # PARTE 5: Tareas programadas bajo \SeguridadEnMiPC\Hosts\
    # -------------------------------------------------------
    Write-Host ""
    Write-Host "--- PARTE 5: Creando tareas programadas ---" -ForegroundColor Cyan
    Write-Host ""
    $taskPath  = "\SeguridadEnMiPC\Hosts\"
    $accion    = New-ScheduledTaskAction -Execute "powershell.exe" -Argument ("-ExecutionPolicy Bypass -WindowStyle Hidden -File `"" + $scriptVerif + "`"")
    $ajustes   = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 5) -MultipleInstances IgnoreNew -StartWhenAvailable
    $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest
    # Tarea 1: al arrancar
    $triggerArranque = New-ScheduledTaskTrigger -AtStartup
    $nombreTarea1 = "Verificacion-Arranque"
    Unregister-ScheduledTask -TaskName $nombreTarea1 -TaskPath $taskPath -Confirm:$false -ErrorAction SilentlyContinue
    Register-ScheduledTask -TaskName $nombreTarea1 -TaskPath $taskPath -Action $accion -Trigger $triggerArranque -Settings $ajustes -Principal $principal -Description "Verificar y restaurar hosts al arrancar - seguridadenmipc.com" | Out-Null
    Write-Host ("OK Tarea creada: " + $taskPath + $nombreTarea1) -ForegroundColor Green
    # Tarea 2: cada hora (RepetitionDuration finito para evitar errores de serializacion XML)
    $triggerHora = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1) -RepetitionDuration (New-TimeSpan -Days 3650)
    $nombreTarea2 = "Verificacion-Horaria"
    Unregister-ScheduledTask -TaskName $nombreTarea2 -TaskPath $taskPath -Confirm:$false -ErrorAction SilentlyContinue
    Register-ScheduledTask -TaskName $nombreTarea2 -TaskPath $taskPath -Action $accion -Trigger $triggerHora -Settings $ajustes -Principal $principal -Description "Verificar y restaurar hosts cada hora - seguridadenmipc.com" | Out-Null
    Write-Host ("OK Tarea creada: " + $taskPath + $nombreTarea2) -ForegroundColor Green
    # -------------------------------------------------------
    # RESUMEN FINAL
    # -------------------------------------------------------
    Write-Host ""
    Write-Host "======================================================" -ForegroundColor Cyan
    Write-Host " INSTALACION COMPLETADA" -ForegroundColor Green
    Write-Host "======================================================" -ForegroundColor Cyan
    Write-Host " Script principal copiado en  : $destinoScript" -ForegroundColor Gray
    Write-Host " Hosts restaurado y protegido  : $hostsPath" -ForegroundColor Gray
    Write-Host " Copia de seguridad            : $backupActual" -ForegroundColor Gray
    Write-Host " Copia de referencia           : $referencia" -ForegroundColor Gray
    Write-Host " Script de verificacion        : $scriptVerif" -ForegroundColor Gray
    Write-Host " Log de verificacion           : $auxLogDir\verificacion-hosts.log" -ForegroundColor Gray
    Write-Host " Log de instalacion            : $transcriptFile" -ForegroundColor Gray
    Write-Host " Tarea al arrancar             : $taskPath$nombreTarea1" -ForegroundColor Gray
    Write-Host " Tarea cada hora                : $taskPath$nombreTarea2" -ForegroundColor Gray
    Write-Host ""
    Write-Host " Las alertas quedan en Visor de Eventos > Aplicacion" -ForegroundColor Cyan
    Write-Host " con el origen SEGPC-Hosts y EventID 9002." -ForegroundColor Cyan
    Write-Host ""
    Write-Host " Para ver las tareas:" -ForegroundColor Yellow
    Write-Host "   Get-ScheduledTask -TaskPath '\SeguridadEnMiPC\Hosts\'" -ForegroundColor White
    Write-Host ""
    Write-Host " Para eliminar todo:" -ForegroundColor Yellow
    Write-Host "   Unregister-ScheduledTask -TaskName 'Verificacion-*' -TaskPath '\SeguridadEnMiPC\Hosts\' -Confirm:`$false" -ForegroundColor White
    Write-Host "   (Get-Item '$hostsPath').Attributes = 'Normal'" -ForegroundColor White
    Write-Host "   icacls '$hostsPath' /reset" -ForegroundColor White
    Write-Host "   Remove-Item -Path 'C:\ProgramData\SeguridadEnMiPC\Hosts' -Recurse -Force" -ForegroundColor White
    Write-Host "   Remove-Item -Path '$destinoScript' -Force" -ForegroundColor White
}
catch {
    Write-Host ""
    Write-Host "[X] Error en linea $($_.InvocationInfo.ScriptLineNumber): $($_.Exception.Message)" -ForegroundColor Red
}
finally {
    Stop-Transcript | Out-Null
    Read-Host "`nPulsa Enter para salir"
}

Cómo verificar que la protección del archivo hosts en Windows está activa

🔎 Cómo verificar que la protección del archivo hosts en Windows está activa

💡 Comandos de verificación

icacls "C:\Windows\System32\drivers\etc\hosts"
Get-ScheduledTask -TaskPath "\SeguridadEnMiPC\Hosts\" | Select-Object TaskName, State
Get-Content "C:\ProgramData\SeguridadEnMiPC\Hosts\Logs\verificacion-hosts.log" -Tail 10

El ACL debe mostrar *S-1-5-32-544:(F) (Administradores) y *S-1-5-18:(F) (SYSTEM), sin permisos de escritura para Usuarios. Las 2 tareas deben aparecer en estado Ready. El log de verificación debe mostrar líneas "OK: hosts sin cambios" tras cada ejecución; si aparece una línea "ALERTA: el archivo hosts fue modificado", el script ya lo ha restaurado automáticamente y conviene revisar qué proceso hizo el cambio.

🔧 Cómo revertir la protección para editar el archivo hosts en Windows manualmente

Si necesitas añadir tus propias entradas más adelante (por ejemplo, para desarrollo local), primero elimina las tareas programadas o se revertirá tu cambio en la siguiente verificación horaria:

Unregister-ScheduledTask -TaskName "Verificacion-*" -TaskPath "\SeguridadEnMiPC\Hosts\" -Confirm:$false
(Get-Item "C:\Windows\System32\drivers\etc\hosts").Attributes = 'Normal'
icacls "C:\Windows\System32\drivers\etc\hosts" /reset

Después de editar el archivo, si quieres recuperar la protección, vuelve a ejecutar el script completo: regenerará la copia de referencia y el hash a partir de tu nuevo contenido.

⚡ Checklist de verificación rápida (2 minutos)

  • Archivo hosts limpio: solo contiene comentarios y las líneas de localhost
  • ACL restrictivo: solo SYSTEM y Administradores con control total
  • Atributo de solo lectura activo como capa adicional
  • Las 2 tareas programadas presentes y en Ready bajo \SeguridadEnMiPC\Hosts\
  • Log de verificación con entradas recientes "OK: hosts sin cambios"
  • Copia de seguridad y de referencia guardadas en C:\ProgramData\SeguridadEnMiPC\Hosts\

❓ Preguntas frecuentes sobre el archivo hosts en Windows

¿Puedo perder acceso a algún sitio al restaurarlo?

👉 Solo si tenías entradas propias añadidas intencionadamente (bloqueadores de anuncios basados en hosts, entornos de desarrollo local). El script guarda una copia de seguridad completa del hosts anterior en C:\ProgramData\SeguridadEnMiPC\Hosts\Backup\ antes de tocar nada, así que siempre puedes recuperar esas líneas.

¿Por qué se protege también con solo lectura además del ACL?

👉 Son dos capas independientes. El ACL controla qué cuentas pueden escribir en el archivo; el atributo de solo lectura es una barrera adicional que algunos procesos comprueban antes incluso de intentar escribir, y detiene ciertos scripts de malware poco sofisticados que no manejan errores de permisos NTFS.

¿Por qué usa SIDs en vez de nombres como "Administrators"?

👉 Porque en un Windows instalado en español el grupo se llama "Administradores", no "Administrators". Si icacls recibe un nombre que no existe en el idioma del sistema, falla en silencio sin aplicar el cambio de permisos, dejando el archivo hosts en Windows desprotegido sin que el script lo detecte. Los SID (S-1-5-18 para SYSTEM, S-1-5-32-544 para Administradores) son idénticos en cualquier idioma de Windows.

¿Qué pasa si el malware desactiva las tareas programadas?

👉 Si el malware tiene privilegios suficientes para desactivar tareas de SYSTEM, probablemente ya tiene control total del equipo y ninguna medida basada en software es suficiente por sí sola. Combina esta protección con un antivirus activo y con la monitorización de logins en Windows con eventos 4624 y 4625 para detectar accesos no autorizados que precedan a este tipo de manipulación.


🏁 Conclusión

El archivo hosts en Windows es un mecanismo antiguo que sigue teniendo prioridad sobre el DNS moderno, lo que lo convierte en un punto ciego para muchas defensas centradas en red. Restaurarlo a su estado limpio, bloquearlo con permisos NTFS basados en SID y vigilarlo con tareas programadas cierra ese punto ciego con una inversión de minutos. Combínalo con el resto de las guías de hardening de Windows paso a paso y con las guías de ciberseguridad para blindar archivos críticos del sistema para una postura defensiva completa. Proteger el archivo hosts en Windows es un paso pequeño con un impacto de seguridad enorme.

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