🧱 Protege las cuentas de Windows contra fuerza bruta con PowerShell (CIS + NIST)

hace 2 meses

Protege las cuentas de Windows contra fuerza bruta con PowerShell CIS + NIST

Table of Contents

Hardening de Cuentas Windows con PowerShell: 8 medidas de seguridad en una sola ejecución

Las credenciales comprometidas son el vector de ataque número uno en incidentes de seguridad, por delante de exploits y malware, y la mayoría de sistemas Windows funcionan sin ningún hardening de cuentas aplicado. La configuración por defecto no impone restricción de intentos, no exige longitud mínima de contraseña y mantiene cuentas innecesarias activas, lo que convierte el hardening de cuentas Windows en una de las medidas defensivas más urgentes y rentables de aplicar.

En Seguridad en mi PC documentamos cómo un único script de PowerShell aplica 8 medidas de hardening en segundos, alineadas con el CIS Benchmark nivel 1 y el NIST SP 800-63B, sin instalar ningún software adicional. Todas las guías técnicas de protección del sistema operativo están recogidas en nuestra sección de seguridad y endurecimiento de sistemas Windows, que complementa este hardening de cuentas Windows con guías sobre red, navegador y servicios.

💡 Resumen rápido

🔒 Hardening de cuentas Windows: 8 medidas con PowerShell paso a paso

El hardening de cuentas Windows consiste en reforzar la seguridad de usuarios y credenciales para evitar accesos no autorizados, ataques de fuerza bruta, password spraying y credential stuffing. Según el informe DBIR de Verizon, las credenciales comprometidas son el vector de ataque número uno por delante de exploits y malware, lo que sitúa el hardening de cuentas Windows como pieza clave de cualquier estrategia defensiva.

  • 8 medidas automatizadas del hardening de cuentas Windows: política de contraseñas robusta, bloqueo por intentos, cuentas Invitado y Admin, autologon y auditoría
  • Script PowerShell completo alineado con CIS Benchmark L1 y NIST SP 800-63B
  • 7 tareas programadas: inicio, logon, horaria, desbloqueo, creación de cuentas, elevación a admin y auditoría semanal
  • Detección reactiva de creación de cuentas (evento 4720) y elevación a Administrators (4728/4732)
  • Bloqueo automático tras 5 intentos fallidos para frenar fuerza bruta y credential stuffing
  • Recomendaciones previas para aplicar el hardening de cuentas Windows sin bloquearse el acceso

📅 2026 · 🕐 10 minutos de lectura

💡 Definición rápida Hardening de cuentas Windows: Proceso de configurar la política de seguridad local de usuarios, contraseñas y accesos para resistir ataques de fuerza bruta, escalación de privilegios y robo de credenciales mediante credential stuffing. Se aplica mediante comandos nativos de Windows y PowerShell sin instalar software adicional, siguiendo los controles L1 del CIS Benchmark para Windows 11 y el estándar NIST SP 800-63B de gestión de credenciales digitales.

El hardening de cuentas Windows consiste en reforzar la seguridad de usuarios y credenciales para evitar accesos no autorizados, ataques de fuerza bruta y robo de cuentas. En esta guía aplicarás 8 medidas de hardening de cuentas Windows automáticamente con PowerShell, sin necesidad de herramientas externas ni consola de directivas de grupo.

Este proceso de hardening de cuentas Windows complementa el hardening general de Windows 11. Para proteger también las credenciales online contra filtraciones, consulta nuestra guía sobre cómo crear contraseñas seguras y combina este hardening de cuentas Windows con la monitorización de logins Windows para detectar fuerza bruta y password spraying en tiempo real.


Qué es el hardening de cuentas Windows

📌 ¿Qué es el hardening de cuentas Windows?

El hardening de cuentas Windows protege credenciales, evita accesos no autorizados y reduce la superficie de ataque configurando la política de seguridad local del sistema operativo. Windows instala con una configuración de cuentas permisiva por defecto: sin longitud mínima de contraseña, sin bloqueo automático por intentos fallidos y con la cuenta Invitado disponible. El hardening corrige esas configuraciones inseguras siguiendo estándares internacionales como el CIS Benchmark nivel 1 y el NIST SP 800-63B.

A diferencia de un antivirus, que reacciona ante amenazas ya activas, este hardening actúa de forma preventiva endureciendo la configuración base del sistema antes de que el ataque se produzca:

  • ✔ Protege credenciales frente a ataques de fuerza bruta, diccionario y password spraying mediante política de bloqueo de cuentas
  • ✔ Elimina cuentas innecesarias (Invitado, Administrador predecible) que amplían la superficie de ataque
  • ✔ Reduce privilegios siguiendo el principio de mínimo privilegio documentado en MITRE ATT&CK
  • ✔ Activa la política de auditoría para detectar intentos de acceso sospechosos en el registro de eventos de Windows
  • ✔ Bloquea el acceso físico sin autenticación desactivando el inicio de sesión automático (autologon)

💡 ¿Qué es el CIS Benchmark y por qué lo sigue este script?

El CIS Benchmark (Center for Internet Security) es el estándar de referencia mundial para la configuración segura de sistemas operativos. Sus controles de nivel 1 (L1) son medidas de hardening conservadoras recomendadas para todos los sistemas: no degradan la funcionalidad y tienen el máximo impacto sobre la seguridad. El nivel 2 incluye medidas más restrictivas para entornos de alta seguridad. Este script de hardening de cuentas Windows aplica los controles L1 del CIS Benchmark para Windows 11 relativos a política de contraseñas, política de bloqueo de cuentas y auditoría de seguridad, combinados con el estándar NIST SP 800-63B de gestión de credenciales digitales.


🚨 ¿Por qué es importante el hardening de cuentas Windows?

Sin un hardening de cuentas correctamente aplicado, el equipo queda expuesto a la categoría de ataques más explotada en la actualidad. Estas son las debilidades concretas que el hardening neutraliza:

🚨 Dato crítico: Según el informe DBIR de Verizon, el uso de credenciales comprometidas es de forma consistente el vector de ataque número uno en incidentes de seguridad. Sin hardening de cuentas, cualquier atacante con acceso a una contraseña filtrada en una brecha de datos puede entrar directamente al sistema mediante credential stuffing, escalar privilegios y moverse lateralmente sin restricciones ni rastro en el registro de eventos.
Riesgo sin hardening de cuentas WindowsDescripción técnicaConsecuenciaTécnica MITRENivel
Sin política de contraseñasWindows permite contraseñas vacías o de 1 carácter por defectoContraseñas débiles trivialmente rompibles por fuerza brutaT1110 Brute Force🔴 Crítico
Sin política de bloqueo por intentosSin límite de intentos fallidos en el loginAtaques de diccionario y password spraying ilimitadosT1110 Brute Force🔴 Crítico
Cuenta Invitado activaCuenta sin contraseña disponible por defectoAcceso anónimo al sistema sin autenticaciónT1078 Valid Accounts🟠 Alto
Cuenta Administrador con nombre predecibleNombre "Administrator" conocido por todos los atacantesObjetivo prioritario de credential stuffing y fuerza brutaT1078 Valid Accounts🟠 Alto
Autologon activoCredenciales almacenadas en el registro de Windows en texto claroAcceso físico sin autenticación; credenciales extraíbles del registroT1552 Credentials in Registry🟠 Alto
Sin política de auditoríaLos eventos de inicio de sesión no se registranIntrusiones y escalaciones de privilegios sin dejar rastroT1562 Defense Evasion🟠 Alto

Por estas razones, el hardening de cuentas Windows no es opcional: es la primera capa que se debe aplicar en cualquier equipo, doméstico o corporativo, antes incluso de configurar el firewall o los antivirus.


Las 8 medidas del hardening de cuentas Windows

⚙️ Las 8 medidas del hardening de cuentas Windows

💡 Resumen de las 8 medidas del script de hardening de cuentas Windows:Este script implementa 8 medidas de seguridad de la política de seguridad local, alineadas con el CIS Benchmark para Windows 11 y el NIST SP 800-63B: política de contraseñas robusta, política de bloqueo de cuentas, desactivación de cuentas innecesarias, eliminación del autologon y activación de la política de auditoría completa.

Estas son las ocho medidas del hardening de cuentas Windows automatizadas en este script, ordenadas por orden de aplicación:

  1. 🔒 Política de contraseñas robusta, mínimo 12 caracteres, historial de 5 contraseñas previas, caducidad máxima a 90 días (NIST SP 800-63B)
  2. ⏱️ Política de bloqueo de cuentas por intentos fallidos, bloqueo automático a los 5 intentos durante 30 minutos para frenar fuerza bruta y password spraying
  3. 🚫 Desactivar cuenta Invitado, elimina el acceso anónimo al sistema sin contraseña
  4. 🔑 Desactivar cuenta Administrador integrada, elimina el objetivo predecible de los atacantes con nombre conocido
  5. 🔄 Caducidad de contraseñas en usuarios existentes, fuerza la renovación periódica de credenciales en todas las cuentas
  6. 🧑‍💻 Auditar y listar cuentas administradoras activas, identifica y controla todas las cuentas con privilegios elevados en el sistema
  7. 🛑 Desactivar inicio de sesión automático (autologon), evita el acceso físico sin autenticación y protege las credenciales almacenadas en el registro
  8. 🔐 Activar política de auditoría completa de seguridad, registra todos los eventos de acceso en el registro de eventos de Windows para detección de intrusiones

⚙️ Script completo: Hardening de cuentas Windows con 7 tareas programadas

A continuación encontrarás un script PowerShell completo y unificado que aplica las 8 medidas anteriores en una sola ejecución y, además, crea siete tareas programadas que reaplican y vigilan el hardening de forma continua. Si una actualización de Windows, un instalador corporativo o un atacante revierte alguna política, crea una cuenta nueva o eleva un usuario a Administrators, el script lo detecta y lo restaura automáticamente en el siguiente disparador, sin intervención del usuario y dejando rastro en el CSV histórico.

⚠️ Antes de ejecutar: Este script de hardening de cuentas Windows modifica la política de seguridad local del sistema y crea siete tareas programadas que se ejecutan como SYSTEM. Es completamente reversible mediante el script de reversión incluido, pero asegúrate de tener al menos una cuenta de administrador alternativa funcional antes de ejecutarlo. El script genera log en C:\Logs\hardening-cuentas.log y CSV histórico en C:\Logs\hardening-cuentas-historico.csv. Lee siempre el código antes de pegarlo en PowerShell.

📅 Las 7 tareas programadas que crea el script de hardening de cuentas Windows

Nombre de la tareaDisparadorFrecuenciaPropósito
Hardening-Cuentas-InicioAl iniciar Windows (-AtStartup)Cada arranque del equipoReaplica política de contraseñas, bloqueo y auditoría por si una actualización de Windows ha revertido alguna configuración
Hardening-Cuentas-LogonAl iniciar sesión (-AtLogOn)Cada login (incluye reinicios)Verifica el hardening cuando un usuario inicia sesión y detecta software corporativo que haya revertido la política local
Hardening-Cuentas-HorariaCada hora (-RepetitionInterval 1h)24 veces al díaVigilancia continua: si un "tweaker" o debloater resetea net accounts o desactiva la auditoría, lo revierte en menos de una hora
Hardening-Cuentas-DesbloqueoEvento 4801 (desbloqueo de sesión)Cada desbloqueo de sesiónVerifica el hardening tras desbloquear el equipo: momento típico de uso tras ausencia prolongada, cuando alguien podría haber manipulado el sistema
Hardening-Cuentas-NuevaCuentaEvento 4720 (creación de cuenta de usuario)Cada cuenta nueva creadaDetección reactiva: si malware o un atacante crea una cuenta nueva con net user /add, reaplica auditoría inmediatamente y lo registra en el CSV para alerta posterior
Hardening-Cuentas-ElevacionEventos 4728/4732 (miembro añadido a grupo privilegiado)Cada elevación a grupo sensibleDetección crítica: si alguien añade un usuario al grupo Administrators u otros grupos privilegiados, lo registra con nombre de usuario, grupo y origen para análisis forense
Hardening-Cuentas-AuditoriaSemanal (-Weekly)Una vez por semanaInforme completo de cuentas admin activas, cambios acumulados y verificación total de la política. Queda registrado en el CSV como snapshot histórico
Por qué añadimos las tareas 4720 y 4728/4732: En hardening de cuentas, los vectores de ataque más peligrosos no son los mismos que en red. Aquí un atacante no cambia el DNS ni abre un puerto: crea una cuenta nueva (evento 4720) o añade un usuario existente al grupo Administrators (eventos 4728 de grupo global y 4732 de grupo local). Estas dos tareas se disparan en el mismo instante en que ocurren esas acciones y dejan rastro inmediato en el CSV histórico, incluso si el atacante intenta borrar el registro de eventos después.
Cómo funcionan las tareas programadas: Las siete tareas se ejecutan como SYSTEM con privilegios elevados y en modo oculto (sin ventana visible). El script es idempotente: comprueba cada configuración (política de contraseñas, bloqueo, auditoría, cuentas innecesarias) antes de modificarla y solo actúa si detecta desviación. La carga sobre el equipo es mínima. El CSV histórico registra cada ejecución con disparador, cambios aplicados, cuentas admin activas y eventos relevantes detectados.

📥 Pasos para instalar y ejecutar el script de hardening de cuentas Windows

  1. Verifica que tienes una cuenta de administrador alternativa ejecutando net localgroup administrators. Debe haber al menos dos cuentas activas con privilegios de administrador antes de continuar.
  2. Abre PowerShell como administrador: pulsa Windows, escribe PowerShell, clic derecho sobre Windows PowerShellEjecutar como administrador.
  3. Permite la ejecución de scripts:
    Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
  4. Crea la carpeta de scripts del sistema:
    New-Item -ItemType Directory -Path "C:\Scripts" -Force
  5. Crea el archivo del script: pega el código en el Bloc de notas y guárdalo como Hardening-Cuentas.ps1 en C:\Scripts\ (Tipo: Todos los archivos, no .txt).
  6. Ejecuta el script por primera vez:
    C:\Scripts\Hardening-Cuentas.ps1
  7. Verifica las siete tareas programadas:
    Get-ScheduledTask -TaskName "Hardening-Cuentas-*"
  8. Revisa el log y el CSV histórico: C:\Logs\hardening-cuentas.log y C:\Logs\hardening-cuentas-historico.csv.
  9. Reinicia el equipo para que la tarea de inicio se ejecute automáticamente.

💻 Script de hardening de cuentas Windows (copia y pega)

# ============================================================
# Script: Hardening de cuentas Windows + 7 tareas programadas
# Autor:  seguridadenmipc.com
# Compat: Windows 10 / 11 / Server 2019+
# Alineado con: CIS Benchmark L1 + NIST SP 800-63B
# Uso:    Ejecutar como administrador (1a vez)
#         Despues se reaplica solo: inicio, logon, hora,
#         desbloqueo, nueva cuenta, elevacion, semanal
# Ruta:   C:\Scripts\Hardening-Cuentas.ps1
# Idempotente: solo actua si detecta desviacion
# ============================================================

# 1. 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
}

# 2. Preparar log y CSV historico
$logDir = "C:\Logs"
if (-not (Test-Path $logDir)) { New-Item -ItemType Directory -Path $logDir | Out-Null }
$log = "$logDir\hardening-cuentas.log"
$csv = "$logDir\hardening-cuentas-historico.csv"
Start-Transcript -Path $log -Append | Out-Null

$disparador = if ($args[0]) { $args[0] } else { "Manual" }
Write-Host "=== Hardening de cuentas Windows ===" -ForegroundColor Cyan
Write-Host "Fecha: $(Get-Date)  |  Disparador: $disparador" -ForegroundColor Gray

$cambios = 0
$cuentaNueva = ""
$grupoElevado = ""

# 3. Comprobacion de seguridad: cuentas admin alternativas
$admins = (net localgroup administrators) -match "^[A-Za-z]" |
          Where-Object { $_ -notmatch "comando|completed|---|Alias|Members|Comment" }
$adminsActivos = @()
foreach ($a in $admins) {
    try {
        $info = net user $a.Trim() 2>$null
        if ($info -match "Account active\s+Yes|Cuenta activa\s+S") {
            $adminsActivos += $a.Trim()
        }
    } catch {}
}
if ($adminsActivos.Count -lt 2) {
    $omitirAdmin = $true
} else {
    $omitirAdmin = $false
}

# 4. POLITICA DE CONTRASENAS ROBUSTA (NIST SP 800-63B + CIS L1)
try {
    $accActual = net accounts
    if ($accActual -notmatch "12" -or $disparador -eq "Manual") {
        net accounts /minpwlen:12   | Out-Null
        net accounts /maxpwage:90   | Out-Null
        net accounts /minpwage:1    | Out-Null
        net accounts /uniquepw:5    | Out-Null
        Write-Host "[OK] Politica de contrasenas aplicada." -ForegroundColor Green
        $cambios++
    } else { Write-Host "[OK] Politica de contrasenas ya activa." -ForegroundColor Green }
} catch { Write-Host "[X] Error: $_" -ForegroundColor Red }

# 5. POLITICA DE BLOQUEO DE CUENTAS (MITRE T1110)
try {
    net accounts /lockoutthreshold:5  | Out-Null
    net accounts /lockoutduration:30  | Out-Null
    net accounts /lockoutwindow:30    | Out-Null
    Write-Host "[OK] Politica de bloqueo aplicada." -ForegroundColor Green
} catch { Write-Host "[X] Error: $_" -ForegroundColor Red }

# 6. DESACTIVAR CUENTA INVITADO (T1078)
try {
    net user guest /active:no | Out-Null
    Write-Host "[OK] Cuenta Invitado desactivada." -ForegroundColor Green
} catch {}

# 7. DESACTIVAR CUENTA ADMINISTRADOR INTEGRADA
if (-not $omitirAdmin) {
    try {
        net user administrator /active:no | Out-Null
        Write-Host "[OK] Cuenta Administrator desactivada." -ForegroundColor Green
    } catch {}
} else {
    Write-Host "[!] OMITIDO: desactivacion de Administrator (sin alternativa)." -ForegroundColor Yellow
}

# 8. DESACTIVAR INICIO DE SESION AUTOMATICO (T1552)
try {
    reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" `
        /v AutoAdminLogon /t REG_SZ /d 0 /f | Out-Null
    reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" `
        /v DefaultPassword /f 2>$null | Out-Null
    Write-Host "[OK] Autologon desactivado." -ForegroundColor Green
} catch { Write-Host "[X] Error: $_" -ForegroundColor Red }

# 9. ACTIVAR POLITICA DE AUDITORIA COMPLETA
try {
    auditpol /set /category:* /success:enable /failure:enable | Out-Null
    Write-Host "[OK] Politica de auditoria activada." -ForegroundColor Green
} catch { Write-Host "[X] Error: $_" -ForegroundColor Red }

# 10. DISPARADOR ESPECIFICO: CUENTA NUEVA CREADA (evento 4720)
if ($disparador -eq "NuevaCuenta") {
    Write-Host "`n--- ALERTA: Cuenta nueva detectada ---" -ForegroundColor Red
    try {
        $evt = Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4720} `
               -MaxEvents 1 -ErrorAction SilentlyContinue
        if ($evt) {
            $cuentaNueva = ($evt.Message -split "`n" | Select-String "Account Name" | Select -Last 1).ToString().Trim()
            Write-Host "[!] Cuenta creada: $cuentaNueva" -ForegroundColor Red
        }
    } catch {}
}

# 11. DISPARADOR ESPECIFICO: ELEVACION A GRUPO PRIVILEGIADO (4728/4732)
if ($disparador -eq "Elevacion") {
    Write-Host "`n--- ALERTA: Elevacion de privilegios ---" -ForegroundColor Red
    try {
        $evt = Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4728,4732} `
               -MaxEvents 1 -ErrorAction SilentlyContinue
        if ($evt) {
            $grupoElevado = "Evento $($evt.Id) - $($evt.TimeCreated)"
            Write-Host "[!] Elevacion detectada: $grupoElevado" -ForegroundColor Red
        }
    } catch {}
}

# 12. AUDITAR CUENTAS ADMINISTRADORAS ACTIVAS
Write-Host "`n--- Cuentas administradoras activas ---" -ForegroundColor Yellow
$adminList = (net localgroup administrators) -join "; "
if ($disparador -eq "Auditoria" -or $disparador -eq "Manual") {
    net localgroup administrators
}

# 13. Resumen al CSV historico
$resumen = [PSCustomObject]@{
    Fecha         = (Get-Date -Format "yyyy-MM-dd HH:mm:ss")
    Disparador    = $disparador
    CambiosAplic  = $cambios
    CuentaNueva   = $cuentaNueva
    Elevacion     = $grupoElevado
    AdminsActivos = $adminsActivos.Count
}
$resumen | Export-Csv -Path $csv -Append -NoTypeInformation -Encoding UTF8
Write-Host "[OK] Resumen anadido al CSV." -ForegroundColor Green

# 14. CREAR LAS 7 TAREAS PROGRAMADAS
$scriptPath = "C:\Scripts\Hardening-Cuentas.ps1"

function Crear-Tarea-Basica {
    param([string]$Nombre, [string]$Disparador, $Trigger, [string]$Descripcion)
    try {
        if (-not (Get-ScheduledTask -TaskName $Nombre -ErrorAction SilentlyContinue)) {
            $action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
                -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" $Disparador"
            $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
                -LogonType ServiceAccount -RunLevel Highest
            $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
                -DontStopIfGoingOnBatteries -StartWhenAvailable `
                -ExecutionTimeLimit (New-TimeSpan -Minutes 5)
            Register-ScheduledTask -TaskName $Nombre -Action $action -Trigger $Trigger `
                -Principal $principal -Settings $settings -Description $Descripcion | Out-Null
            Write-Host "[OK] Tarea '$Nombre' creada." -ForegroundColor Green
        } else { Write-Host "[i] Tarea '$Nombre' ya existe." -ForegroundColor Cyan }
    } catch { Write-Host "[X] Error en $Nombre : $_" -ForegroundColor Red }
}

function Crear-Tarea-Evento {
    param([string]$Nombre, [string]$Disparador, [string]$Subscripcion, [string]$Descripcion)
    try {
        if (-not (Get-ScheduledTask -TaskName $Nombre -ErrorAction SilentlyContinue)) {
            $cim = New-CimInstance -CimClass (Get-CimClass `
                -ClassName MSFT_TaskEventTrigger `
                -Namespace Root/Microsoft/Windows/TaskScheduler) -ClientOnly
            $cim.Enabled = $true
            $cim.Subscription = $Subscripcion
            $action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
                -Argument "-NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$scriptPath`" $Disparador"
            $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" `
                -LogonType ServiceAccount -RunLevel Highest
            $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries `
                -DontStopIfGoingOnBatteries -StartWhenAvailable `
                -ExecutionTimeLimit (New-TimeSpan -Minutes 5)
            Register-ScheduledTask -TaskName $Nombre -Action $action -Trigger $cim `
                -Principal $principal -Settings $settings -Description $Descripcion | Out-Null
            Write-Host "[OK] Tarea '$Nombre' creada." -ForegroundColor Green
        } else { Write-Host "[i] Tarea '$Nombre' ya existe." -ForegroundColor Cyan }
    } catch { Write-Host "[X] Error en $Nombre : $_" -ForegroundColor Red }
}

# 14a. Al iniciar Windows
Crear-Tarea-Basica -Nombre "Hardening-Cuentas-Inicio" -Disparador "Inicio" `
    -Trigger (New-ScheduledTaskTrigger -AtStartup) `
    -Descripcion "Hardening de cuentas Windows al arranque - seguridadenmipc.com"

# 14b. Al iniciar sesion
Crear-Tarea-Basica -Nombre "Hardening-Cuentas-Logon" -Disparador "Logon" `
    -Trigger (New-ScheduledTaskTrigger -AtLogOn) `
    -Descripcion "Hardening de cuentas Windows al iniciar sesion - seguridadenmipc.com"

# 14c. Cada hora
Crear-Tarea-Basica -Nombre "Hardening-Cuentas-Horaria" -Disparador "Horaria" `
    -Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(10) `
              -RepetitionInterval (New-TimeSpan -Hours 1)) `
    -Descripcion "Hardening de cuentas Windows cada hora - seguridadenmipc.com"

# 14d. Al desbloquear sesion (evento 4801)
Crear-Tarea-Evento -Nombre "Hardening-Cuentas-Desbloqueo" -Disparador "Desbloqueo" `
    -Subscripcion '<QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name=''Microsoft-Windows-Security-Auditing''] and EventID=4801]]</Select></Query></QueryList>' `
    -Descripcion "Hardening al desbloquear sesion - seguridadenmipc.com"

# 14e. Al crear cuenta nueva (evento 4720) - CRITICO
Crear-Tarea-Evento -Nombre "Hardening-Cuentas-NuevaCuenta" -Disparador "NuevaCuenta" `
    -Subscripcion '<QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name=''Microsoft-Windows-Security-Auditing''] and EventID=4720]]</Select></Query></QueryList>' `
    -Descripcion "Alerta: cuenta nueva creada - seguridadenmipc.com"

# 14f. Al anadir a grupo privilegiado (4728 global, 4732 local) - CRITICO
Crear-Tarea-Evento -Nombre "Hardening-Cuentas-Elevacion" -Disparador "Elevacion" `
    -Subscripcion '<QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name=''Microsoft-Windows-Security-Auditing''] and (EventID=4728 or EventID=4732)]]</Select></Query></QueryList>' `
    -Descripcion "Alerta: elevacion a grupo privilegiado - seguridadenmipc.com"

# 14g. Auditoria semanal
Crear-Tarea-Basica -Nombre "Hardening-Cuentas-Auditoria" -Disparador "Auditoria" `
    -Trigger (New-ScheduledTaskTrigger -Weekly -DaysOfWeek Sunday -At 3am) `
    -Descripcion "Auditoria semanal de cuentas - seguridadenmipc.com"

Write-Host "`n[OK] Hardening aplicado. Disparador: $disparador" -ForegroundColor Green
Write-Host "     Log: $log" -ForegroundColor Gray
Write-Host "     CSV: $csv" -ForegroundColor Gray
Stop-Transcript | Out-Null

↩️ Script de reversión del hardening de cuentas Windows

Si necesitas restaurar la configuración por defecto y eliminar las tareas programadas (por ejemplo, para diagnosticar un problema o aplicar una política corporativa distinta), ejecuta este script de reversión. Elimina primero las siete tareas programadas, porque si no, el hardening volverá a aplicarse en el siguiente disparador.

# ============================================================
# Revertir Hardening de cuentas Windows
# ============================================================

# 1. ELIMINAR PRIMERO las 7 tareas programadas
$tareas = @(
    "Hardening-Cuentas-Inicio",
    "Hardening-Cuentas-Logon",
    "Hardening-Cuentas-Horaria",
    "Hardening-Cuentas-Desbloqueo",
    "Hardening-Cuentas-NuevaCuenta",
    "Hardening-Cuentas-Elevacion",
    "Hardening-Cuentas-Auditoria"
)
foreach ($t in $tareas) {
    if (Get-ScheduledTask -TaskName $t -ErrorAction SilentlyContinue) {
        Unregister-ScheduledTask -TaskName $t -Confirm:$false
        Write-Host "[OK] Tarea $t eliminada." -ForegroundColor Green
    }
}

# 2. Restaurar politica de contrasenas por defecto
net accounts /minpwlen:0      | Out-Null
net accounts /maxpwage:unlimited | Out-Null
net accounts /uniquepw:0      | Out-Null

# 3. Restaurar politica de bloqueo por defecto
net accounts /lockoutthreshold:0 | Out-Null

# 4. Reactivar cuenta Administrador integrada
net user administrator /active:yes | Out-Null

# 5. Desactivar politica de auditoria
auditpol /set /category:* /success:disable /failure:disable | Out-Null

# NOTA: la cuenta Invitado se mantiene desactivada por seguridad.

Write-Host ""
Write-Host "[OK] Hardening revertido. Reinicia el equipo." -ForegroundColor Green

⚠️ Riesgos y efectos reales del hardening de cuentas Windows

Antes de ejecutar este script conviene entender exactamente qué cambios aplica y qué funciones de Windows pueden verse afectadas. A diferencia de los scripts de hardening de red, este sí toca directamente la configuración de cuentas y autenticación, por lo que es el más sensible de toda la serie en cuanto a riesgo de bloquearse el acceso al sistema si no se siguen las recomendaciones previas.

Función del sistema¿Se ve afectada?Detalle técnico
Inicio de sesión local🟡 Sí (parcialmente)Sigue funcionando, pero ahora exige contraseña de 12+ caracteres en cambios y bloquea tras 5 intentos fallidos
Inicio de Windows🟢 NoEl arranque del sistema no se ve afectado; las tareas se ejecutan tras el inicio
Reinicio / apagado🟢 NoNo modifica el subsistema de apagado ni BCD
UEFI / arranque seguro🟢 NoNo afecta BCD, Secure Boot ni particiones EFI
Banca online y plataformas web🟢 NoEl hardening afecta a credenciales locales, no a cuentas online
Creación legítima de cuentas🟡 Sí (registro)Cualquier cuenta nueva queda registrada en el CSV; no bloquea la creación
Elevación legítima a Administrators🟡 Sí (registro)Cualquier adición al grupo Administrators se registra para auditoría
Inicio de sesión automático (autologon)🔴 Sí (a propósito)Si tenías autologon activo, ahora deberás escribir la contraseña en cada arranque
Cuenta Invitado🔴 Sí (a propósito)Queda desactivada; cualquier acceso anónimo deja de funcionar
Cuenta Administrator integrada🔴 Sí (con protección)Se desactiva SOLO si hay otra cuenta admin activa; el script lo verifica antes
Contraseñas existentes🟡 Caducan en 90 díasLas contraseñas actuales seguirán funcionando, pero deberán cambiarse en máximo 90 días
Tras 5 intentos fallidos de login🔴 Bloqueo de 30 minSi te equivocas 5 veces, la cuenta se bloquea media hora
Carga de CPU (7 tareas)🟡 MínimaCada ejecución < 5 segundos; total < 2 min/día de CPU
🚨 Casos en los que NO debes ejecutar el script sin precauciones:
  • Si tu equipo es gestionado por el departamento de IT de una empresa (puede entrar en conflicto con GPO corporativas)
  • Si tienes una sola cuenta de administrador en el sistema
  • Si dependes del autologon para tareas automatizadas (kioscos, equipos de presentación, servidores domésticos)
  • Si tu contraseña actual tiene menos de 12 caracteres (no afecta al login actual, pero el siguiente cambio fallará si no usas 12+)
  • Si compartes el equipo con personas que no recuerdan bien las contraseñas (5 intentos = bloqueo de 30 min)
  • Si usas habitualmente herramientas administrativas que crean cuentas o elevan privilegios (aparecerán alertas frecuentes en el CSV)
En todos estos casos, valora ejecutar primero el script en un entorno de prueba (máquina virtual) o crear una cuenta de administrador adicional como red de seguridad.
⚠️ Verificar que las tareas funcionan: Abre el Programador de tareas (Win+R → taskschd.msc), busca las siete tareas Hardening-Cuentas-* y revisa el campo "Último resultado" (debe ser 0x0). También desde PowerShell: Import-Csv C:\Logs\hardening-cuentas-historico.csv | Select -Last 30.

🔐 ¿Qué consigue cada medida del hardening de cuentas Windows?

Cada una de las medidas que componen este hardening está mapeada a una técnica concreta del marco MITRE ATT&CK y a un control específico del CIS Benchmark o del NIST SP 800-63B. Esta es la traducción técnica de qué amenaza neutraliza cada paso:

Medida del hardening de cuentas WindowsAmenaza bloqueadaTécnica MITREReferencia oficial
Contraseñas de 12+ caracteres con historialFuerza bruta, ataque de diccionario y reutilización de contraseñas filtradasT1110.001NIST SP 800-63B + CIS L1
Política de bloqueo a los 5 intentosPassword spraying, credential stuffing y fuerza bruta automatizadaT1110.003Microsoft Learn + MITRE T1110
Cuenta Invitado desactivadaAcceso anónimo al sistema sin credenciales (T1078)T1078CIS Benchmark Windows 11 L1
Cuenta Administrador integrada desactivadaObjetivo predecible de credential stuffing y fuerza bruta dirigidaT1078Microsoft Best Practices AD
Caducidad de contraseñas (90 días)Uso prolongado de credenciales comprometidas en brecha de datosT1078NIST SP 800-63B
Detección de creación de cuentas (4720)Creación no autorizada de cuentas por malware o atacanteT1136.001Microsoft Security Events
Detección de elevación (4728/4732)Adición no autorizada al grupo AdministratorsT1098Microsoft Security Events
Autologon desactivadoAcceso físico sin autenticación y extracción de credenciales del registroT1552CIS Benchmark L1
Política de auditoría completa activaIntrusiones y escalaciones de privilegios sin rastroT1562auditpol, Microsoft Learn
Referencias oficiales: Las medidas de este hardening de cuentas Windows siguen los controles L1 del CIS Benchmark para Windows 11 y las directrices del NIST SP 800-63B sobre autenticación y gestión de credenciales digitales.

💡 ¿Cómo verificar que el hardening de cuentas Windows está activo?

Ejecuta estos comandos en PowerShell como administrador para confirmar que el hardening está correctamente configurado en la política de seguridad local:

# Las 7 tareas programadas
Get-ScheduledTask -TaskName "Hardening-Cuentas-*" | `
  Select TaskName, State, LastRunTime, LastTaskResult

# Verificar politica de contrasenas y bloqueo
net accounts

# Verificar politica de auditoria activa
auditpol /get /category:*

# Verificar estado de las cuentas Invitado y Administrador
net user guest
net user administrator

# Ver CSV historico (ultimas 30 ejecuciones)
Import-Csv C:\Logs\hardening-cuentas-historico.csv | Select -Last 30

Las siete tareas deben aparecer en estado Ready con LastTaskResult = 0. net accounts debe mostrar longitud mínima 12, bloqueo a 5 intentos y duración 30 min. Si en el CSV aparecen filas con CuentaNueva o Elevacion no reconocidas, investiga urgentemente.


⚠️ Recomendaciones previas a la ejecución del hardening de cuentas Windows

Aplicar correctamente este hardening requiere unas precauciones mínimas: el script modifica la política de seguridad local y, sin las verificaciones previas, podría dificultarte el acceso al equipo. Estas son las recomendaciones imprescindibles:

  • 💾 Haz una copia de seguridad del sistema o un punto de restauración antes de modificar la política de seguridad local
  • 🧪 Prueba en un entorno controlado (máquina virtual) antes de aplicar en el equipo de producción
  • ⚠️ No desactives la cuenta Administrador integrada si es la única con privilegios en el sistema (el script lo verifica automáticamente)
  • 🔑 Asegúrate de tener acceso alternativo con otra cuenta de administrador antes de ejecutar
  • 📋 Verifica el resultado tras la ejecución con net accounts y auditpol /get /category:*
  • 🔄 Las siete tareas programadas vigilan la configuración en cada arranque, logon, hora, desbloqueo, creación de cuenta y elevación; revisa el CSV semanalmente

✅ Checklist de verificación del hardening de cuentas Windows

Confirma cada punto tras ejecutar el script de hardening de cuentas Windows:

  • net accounts muestra longitud mínima de contraseña: 12 caracteres
  • net accounts muestra umbral de bloqueo: 5 intentos
  • net accounts muestra duración del bloqueo: 30 minutos
  • net accounts muestra historial de contraseñas: 5
  • net user guest muestra la cuenta como inactiva
  • net user administrator muestra la cuenta como inactiva (si se desactivó)
  • auditpol /get /category:* muestra "Success and Failure" en todas las categorías
  • ☑ El registro no contiene AutoAdminLogon con valor 1
  • ☑ Las siete tareas Hardening-Cuentas-* aparecen en estado Ready
  • ☑ Existe al menos una cuenta de administrador alternativa funcional
  • ☑ El log C:\Logs\hardening-cuentas.log registra la ejecución sin errores
  • ☑ El CSV C:\Logs\hardening-cuentas-historico.csv contiene la entrada de instalación inicial

🧠 Buenas prácticas adicionales más allá del hardening de cuentas Windows

El hardening de cuentas Windows es una capa fundamental, pero no la única. Para una postura de seguridad completa conviene combinarlo con medidas adicionales que cubran los flancos que por sí solo no puede proteger:

Complementa el hardening de cuentas Windows con estas medidas de seguridad adicionales: Activa el 2FA en todas las cuentas online · Usa un gestor de contraseñas para credenciales únicas · Mantén Windows actualizado con los parches del Patch Tuesday · Configura Windows Defender correctamente · Monitoriza filtraciones con Dark Web Monitoring · Activa la monitorización de logins Windows para detectar intentos anómalos.
  • 📱 Activa el 2FA en todas las cuentas online, el hardening protege el sistema local pero el 2FA protege el acceso remoto aunque las credenciales sean robadas en una brecha de datos
  • 🔑 Usa un gestor de contraseñas, genera y almacena contraseñas únicas de 16+ caracteres para cada servicio
  • 📊 Monitoriza el registro de eventos de seguridad, la política de auditoría activada en el paso 8 genera datos valiosos que solo tienen valor si se analizan regularmente
  • 🔒 Aplica el principio de mínimo privilegio, usa cuentas estándar para el uso diario y reserva la cuenta de administrador solo para tareas que lo requieran explícitamente; sin un usuario admin diario, los vectores de escalación de privilegios en Windows quedan bloqueados de raíz
  • 🕵️ Vigilancia activa de brechas de datos, si tus credenciales aparecen en una filtración, el atacante puede entrar con un login exitoso sin activar la política de bloqueo
  • 🪪 Adopta los 3 niveles de identidad digital como estrategia completa, el hardening cierra la puerta del equipo local pero tu correo, banca y redes viven fuera de él; alias por contexto, separación de cuentas críticas y plan de recuperación son las capas que convierten este script en parte de una defensa global, no en una isla

Sistema sin hardening vs con hardening de cuentas Windows

🆚 Sistema sin hardening vs con hardening de cuentas Windows

La diferencia entre un sistema con la configuración por defecto y uno protegido por un hardening de cuentas Windows correctamente aplicado se mide en superficie de ataque, trazabilidad y resistencia frente a las técnicas de ataque más comunes:

CaracterísticaSin hardening (configuración por defecto)Con hardening de cuentas Windows
Resistencia a fuerza bruta🔴 Ninguna; intentos ilimitados sin bloqueo🟢 Bloqueo automático tras 5 intentos fallidos
Resistencia a password spraying🔴 Ninguna; múltiples usuarios atacables🟢 Política de bloqueo corta la ventana de ataque
Cuentas innecesarias activas🔴 Invitado y Administrador predecible activos🟢 Desactivadas; superficie de ataque reducida
Política de contraseñas🔴 Sin longitud mínima; contraseñas vacías posibles🟢 Mínimo 12 caracteres, caducidad 90 días, historial 5
Inicio de sesión automático🔴 Posible; credenciales en el registro🟢 Desactivado; acceso físico requiere autenticación
Política de auditoría🔴 Sin registro de eventos de acceso🟢 Todos los eventos registrados; trazabilidad completa
Detección de cuenta nueva (4720)🔴 Ninguna; malware puede crear cuentas ocultas🟢 Alerta inmediata en el CSV histórico
Detección de elevación (4728/4732)🔴 Ninguna; escalación silenciosa posible🟢 Alerta reactiva al añadirse a Administrators
Persistencia tras actualizaciones🔴 La configuración se puede perder con un parche grande🟢 Siete tareas programadas reaplican el hardening de forma continua
Alineación con estándares🔴 No cumple CIS Benchmark L1 ni NIST SP 800-63B🟢 Alineado con CIS Benchmark L1 y NIST SP 800-63B
Recomendado

🏁 Conclusión

El hardening de cuentas Windows con PowerShell permite aplicar ocho medidas de la política de seguridad local en segundos, reduciendo drásticamente el riesgo de accesos no autorizados por fuerza bruta, password spraying o credential stuffing con credenciales filtradas en brechas de datos. Seguir los controles del CIS Benchmark nivel 1 y las directrices del NIST SP 800-63B convierte un sistema con configuración por defecto vulnerable en uno significativamente más resistente frente a los vectores de ataque más comunes, y deja la configuración aplicada de forma persistente.

Lo más valioso de este proceso es que el script se copia y ejecuta en menos de dos minutos, las protecciones son inmediatas y verificables con net accounts, y las siete tareas programadas garantizan que el hardening se mantenga aplicado automáticamente en cada arranque, logon, hora, desbloqueo, creación de cuenta, elevación de privilegios y auditoría semanal. Además, las tareas reactivas por eventos 4720 y 4728/4732 convierten este script en una solución de detección temprana ante creación de cuentas no autorizadas o escalaciones sospechosas, algo que hasta ahora solo ofrecían soluciones EDR empresariales.

  • 🔒 La política de bloqueo a 5 intentos es la medida con mayor impacto contra fuerza bruta y password spraying
  • 🔒 Desactiva la cuenta Invitado siempre; no tiene ningún uso legítimo en un equipo moderno
  • 🔒 La tarea de evento 4720 detecta creación de cuentas no autorizadas en el mismo instante en que ocurren
  • 🔒 La tarea de eventos 4728/4732 detecta escalación a Administrators, una técnica MITRE T1098 muy común en ataques avanzados
  • 🔒 Si el equipo tiene RDP o software de control remoto activo, completa el blindaje con nuestra guía de acceso remoto Windows seguro para cerrar el puerto 3389 y bloquear los vectores de fuerza bruta sobre el escritorio remoto
  • 🔒 Combina con el endurecimiento general de Windows 11 para una protección completa del sistema operativo más allá de las cuentas

Comparte este artículo sobre hardening de cuentas Windows con quien administre equipos Windows sin política de contraseñas ni bloqueo de cuentas activo. Un sistema sin la política de bloqueo por intentos es un objetivo trivial para cualquier script de fuerza bruta o de credential stuffing automatizado, y aplicar el hardening básico cierra ese vector en menos de dos minutos.


❓ Preguntas frecuentes sobre hardening de cuentas Windows

¿Es seguro ejecutar este script de hardening de cuentas Windows?

👉 Sí, si el hardening de cuentas Windows se ejecuta como administrador siguiendo las recomendaciones previas. Todos los comandos usan herramientas nativas de Windows documentadas oficialmente por Microsoft (net accounts, auditpol, reg add) y son completamente reversibles mediante el script de reversión incluido. Además, el script verifica automáticamente que existe al menos una cuenta admin alternativa antes de desactivar la cuenta Administrator integrada.

¿El hardening de cuentas Windows funciona en Windows 10 y Windows 11?

👉 Sí. El script de hardening de cuentas Windows es compatible con Windows 10 y Windows 11. Los comandos net accounts, auditpol y reg add son herramientas nativas disponibles en ambas versiones, así como el módulo ScheduledTasks de PowerShell utilizado para crear las siete tareas programadas.

¿Por qué 7 tareas programadas y no solo una?

👉 Cada tarea cubre un vector distinto: la de inicio restaura el hardening tras cada reboot; la de logon verifica tras cada inicio de sesión; la horaria vigila cambios no esperados de software; la de desbloqueo se dispara cuando vuelves a usar el equipo tras ausencia; la de NuevaCuenta (evento 4720) alerta al instante si se crea una cuenta; la de Elevación (eventos 4728/4732) avisa si alguien se añade al grupo Administrators; y la semanal genera un snapshot completo. Es defensa en profundidad: una sola tarea dejaría ventanas de oportunidad donde el atacante podría operar sin ser detectado.

¿Qué son los eventos 4720, 4728 y 4732?

👉 Son identificadores de eventos de seguridad del log Security de Windows: 4720 se registra cada vez que se crea una cuenta de usuario local, 4728 cuando se añade un miembro a un grupo global de seguridad (como Domain Admins) y 4732 cuando se añade a un grupo local (como Administrators). Son los tres eventos más críticos para detectar compromiso de cuentas: cualquier atacante que quiera mantener persistencia o escalar privilegios los dispara inevitablemente, y por eso forman parte del núcleo reactivo de este script.

¿Puede bloquearse mi acceso al sistema al aplicar el hardening de cuentas Windows?

👉 No de forma accidental. El script comprueba automáticamente cuántas cuentas de administrador activas hay antes de desactivar la cuenta Administrator integrada. Si solo hay una, omite ese paso y muestra un aviso. Aun así, se recomienda tener al menos una cuenta de administrador alternativa antes de ejecutar cualquier script que modifique la política de seguridad local.

¿Las 7 tareas del hardening de cuentas Windows ralentizan el equipo?

👉 No de forma perceptible. Cada ejecución dura menos de 5 segundos, se realiza en background como SYSTEM en modo oculto. El script es idempotente: comprueba cada configuración antes de modificarla y solo actúa si detecta desviación, por lo que las ejecuciones repetidas terminan en segundos con cero cambios. La carga combinada suma menos de 2 minutos de CPU al día. Las tareas reactivas por evento (4720, 4728/4732, 4801) solo se disparan cuando ocurre la acción correspondiente, no consumen recursos en reposo.

¿Con qué frecuencia debo revisar la configuración?

👉 Las tareas programadas se encargan de reaplicar el hardening de forma continua. Aun así, revisa manualmente el CSV C:\Logs\hardening-cuentas-historico.csv una vez a la semana para detectar cualquier entrada con CuentaNueva o Elevacion que no reconozcas. La tarea Hardening-Cuentas-Auditoria genera automáticamente un snapshot cada domingo a las 3 AM.

¿El hardening de cuentas Windows sustituye a un antivirus?

👉 No. Es una capa de seguridad específica para proteger las credenciales y la política de acceso del sistema. Debe combinarse con Windows Defender, parches de seguridad actualizados y buenas prácticas de gestión de contraseñas para una protección completa.

¿Qué diferencia hay entre el CIS Benchmark L1 y L2?

👉 El CIS Benchmark nivel 1 (L1) incluye controles de seguridad básicos recomendados para todos los sistemas: no degradan la funcionalidad normal y tienen alto impacto sobre la seguridad. El nivel 2 (L2) añade controles más restrictivos para entornos de alta seguridad que pueden afectar a la usabilidad. Este script aplica controles L1, adecuados tanto para equipos domésticos como corporativos.

¿Qué hago si el CSV muestra una cuenta nueva que no reconozco?

👉 Es una señal potencial de compromiso. Verifica inmediatamente con net user qué cuentas existen, compara con tu lista esperada y consulta Get-WinEvent -FilterHashtable @{LogName='Security';Id=4720} -MaxEvents 10 para ver quién la creó y desde dónde. Si la cuenta no es legítima: desactívala con net user NOMBRE /active:no, cambia las contraseñas de todas las cuentas admin, desconecta el equipo de la red, ejecuta un análisis completo con Windows Defender y Malwarebytes, y considera reinstalación limpia si hay indicadores adicionales de compromiso.

¿Cómo desactivo las tareas si quiero dejar de aplicar el hardening de cuentas Windows?

👉 Ejecuta el script de reversión incluido en esta guía: elimina las siete tareas (Inicio, Logon, Horaria, Desbloqueo, NuevaCuenta, Elevacion y Auditoria) y revierte todos los cambios en un solo paso. Si solo quieres desactivar una tarea concreta, abre el Programador de tareas (Win+R → taskschd.msc), localiza la tarea bajo Hardening-Cuentas-* y pulsa Deshabilitar.

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