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

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
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?
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:
| Riesgo sin hardening de cuentas Windows | Descripción técnica | Consecuencia | Técnica MITRE | Nivel |
|---|---|---|---|---|
| Sin política de contraseñas | Windows permite contraseñas vacías o de 1 carácter por defecto | Contraseñas débiles trivialmente rompibles por fuerza bruta | T1110 Brute Force | 🔴 Crítico |
| Sin política de bloqueo por intentos | Sin límite de intentos fallidos en el login | Ataques de diccionario y password spraying ilimitados | T1110 Brute Force | 🔴 Crítico |
| Cuenta Invitado activa | Cuenta sin contraseña disponible por defecto | Acceso anónimo al sistema sin autenticación | T1078 Valid Accounts | 🟠 Alto |
| Cuenta Administrador con nombre predecible | Nombre "Administrator" conocido por todos los atacantes | Objetivo prioritario de credential stuffing y fuerza bruta | T1078 Valid Accounts | 🟠 Alto |
| Autologon activo | Credenciales almacenadas en el registro de Windows en texto claro | Acceso físico sin autenticación; credenciales extraíbles del registro | T1552 Credentials in Registry | 🟠 Alto |
| Sin política de auditoría | Los eventos de inicio de sesión no se registran | Intrusiones y escalaciones de privilegios sin dejar rastro | T1562 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
Estas son las ocho medidas del hardening de cuentas Windows automatizadas en este script, ordenadas por orden de aplicación:
- 🔒 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)
- ⏱️ 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
- 🚫 Desactivar cuenta Invitado, elimina el acceso anónimo al sistema sin contraseña
- 🔑 Desactivar cuenta Administrador integrada, elimina el objetivo predecible de los atacantes con nombre conocido
- 🔄 Caducidad de contraseñas en usuarios existentes, fuerza la renovación periódica de credenciales en todas las cuentas
- 🧑💻 Auditar y listar cuentas administradoras activas, identifica y controla todas las cuentas con privilegios elevados en el sistema
- 🛑 Desactivar inicio de sesión automático (autologon), evita el acceso físico sin autenticación y protege las credenciales almacenadas en el registro
- 🔐 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.
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 tarea | Disparador | Frecuencia | Propósito |
|---|---|---|---|
Hardening-Cuentas-Inicio | Al iniciar Windows (-AtStartup) | Cada arranque del equipo | Reaplica política de contraseñas, bloqueo y auditoría por si una actualización de Windows ha revertido alguna configuración |
Hardening-Cuentas-Logon | Al 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-Horaria | Cada hora (-RepetitionInterval 1h) | 24 veces al día | Vigilancia continua: si un "tweaker" o debloater resetea net accounts o desactiva la auditoría, lo revierte en menos de una hora |
Hardening-Cuentas-Desbloqueo | Evento 4801 (desbloqueo de sesión) | Cada desbloqueo de sesión | Verifica el hardening tras desbloquear el equipo: momento típico de uso tras ausencia prolongada, cuando alguien podría haber manipulado el sistema |
Hardening-Cuentas-NuevaCuenta | Evento 4720 (creación de cuenta de usuario) | Cada cuenta nueva creada | Detecció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-Elevacion | Eventos 4728/4732 (miembro añadido a grupo privilegiado) | Cada elevación a grupo sensible | Detecció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-Auditoria | Semanal (-Weekly) | Una vez por semana | Informe completo de cuentas admin activas, cambios acumulados y verificación total de la política. Queda registrado en el CSV como snapshot histórico |
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
- 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. - Abre PowerShell como administrador: pulsa Windows, escribe
PowerShell, clic derecho sobre Windows PowerShell → Ejecutar como administrador. - Permite la ejecución de scripts:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass - Crea la carpeta de scripts del sistema:
New-Item -ItemType Directory -Path "C:\Scripts" -Force - Crea el archivo del script: pega el código en el Bloc de notas y guárdalo como
Hardening-Cuentas.ps1enC:\Scripts\(Tipo: Todos los archivos, no .txt). - Ejecuta el script por primera vez:
C:\Scripts\Hardening-Cuentas.ps1 - Verifica las siete tareas programadas:
Get-ScheduledTask -TaskName "Hardening-Cuentas-*" - Revisa el log y el CSV histórico:
C:\Logs\hardening-cuentas.logyC:\Logs\hardening-cuentas-historico.csv. - 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 | 🟢 No | El arranque del sistema no se ve afectado; las tareas se ejecutan tras el inicio |
| Reinicio / apagado | 🟢 No | No modifica el subsistema de apagado ni BCD |
| UEFI / arranque seguro | 🟢 No | No afecta BCD, Secure Boot ni particiones EFI |
| Banca online y plataformas web | 🟢 No | El 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ías | Las 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 min | Si te equivocas 5 veces, la cuenta se bloquea media hora |
| Carga de CPU (7 tareas) | 🟡 Mínima | Cada ejecución < 5 segundos; total < 2 min/día de CPU |
- 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)
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 Windows | Amenaza bloqueada | Técnica MITRE | Referencia oficial |
|---|---|---|---|
| Contraseñas de 12+ caracteres con historial | Fuerza bruta, ataque de diccionario y reutilización de contraseñas filtradas | T1110.001 | NIST SP 800-63B + CIS L1 |
| Política de bloqueo a los 5 intentos | Password spraying, credential stuffing y fuerza bruta automatizada | T1110.003 | Microsoft Learn + MITRE T1110 |
| Cuenta Invitado desactivada | Acceso anónimo al sistema sin credenciales (T1078) | T1078 | CIS Benchmark Windows 11 L1 |
| Cuenta Administrador integrada desactivada | Objetivo predecible de credential stuffing y fuerza bruta dirigida | T1078 | Microsoft Best Practices AD |
| Caducidad de contraseñas (90 días) | Uso prolongado de credenciales comprometidas en brecha de datos | T1078 | NIST SP 800-63B |
| Detección de creación de cuentas (4720) | Creación no autorizada de cuentas por malware o atacante | T1136.001 | Microsoft Security Events |
| Detección de elevación (4728/4732) | Adición no autorizada al grupo Administrators | T1098 | Microsoft Security Events |
| Autologon desactivado | Acceso físico sin autenticación y extracción de credenciales del registro | T1552 | CIS Benchmark L1 |
| Política de auditoría completa activa | Intrusiones y escalaciones de privilegios sin rastro | T1562 | auditpol, Microsoft Learn |
💡 ¿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 accountsyauditpol /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 accountsmuestra longitud mínima de contraseña: 12 caracteres - ☑
net accountsmuestra umbral de bloqueo: 5 intentos - ☑
net accountsmuestra duración del bloqueo: 30 minutos - ☑
net accountsmuestra historial de contraseñas: 5 - ☑
net user guestmuestra la cuenta como inactiva - ☑
net user administratormuestra la cuenta como inactiva (si se desactivó) - ☑
auditpol /get /category:*muestra "Success and Failure" en todas las categorías - ☑ El registro no contiene
AutoAdminLogoncon 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.logregistra la ejecución sin errores - ☑ El CSV
C:\Logs\hardening-cuentas-historico.csvcontiene 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:
- 📱 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
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ística | Sin 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.
Deja una respuesta