Este repositorio contiene una colección de scripts de PowerShell diseñados para automatizar la adecuación de equipos Windows 10 u 11 (independientes, que no formen parte de un dominio) al Esquema Nacional de Seguridad (ENS) y a la guía CCN-STIC-599AB23.
El proyecto permite:
- Comprobar si se cumplen los requisitos de seguridad.
- Aplicar de forma automática dichos requisitos, en función de un perfil seleccionado.
- Restaurar un estado previo de configuración, para revertir cambios en caso de incidencia.
Se trata de un proyecto modular, portátil y extensible, en el que cada política puede disponer de una lógica independiente.
Actualmente, los scripts solo trabajan con los mismos parámetros que comprueba la herramienta CLARA para elaborar el informe de cumplimiento.
La estructura se basa en un enfoque modular, con toda la lógica en la carpeta Modules/ salvo el script principal (Main.ps1), que actúa como punto de entrada.
-
Main.ps1: Script principal (entry point).
- Comprueba privilegios de administrador y eleva si es necesario.
- Inicializa configuración, directorios de logs y backups.
- Soporta ejecución no interactiva por parámetros (CLI) y reenvía los parámetros al elevar privilegios.
- Muestra el menú de acciones y, si procede, gestiona la selección del perfil.
- Llama a
Invoke-ProfiledeProfileExecutor.ps1para ejecutar la lógica.
-
Modules/: Carpeta que agrupa el resto de la lógica del proyecto:
- Config.ps1: Gestión del archivo de configuración (
config.jsonpor defecto), detección y sincronización con la estructura real. - PrintsAndLogs.ps1: Funciones de impresión y registro con formato homogéneo y colores (
Show-Info,Show-Error,Show-Success, etc.). - Utils.ps1: Funciones de utilidad, conversión y validación recursiva de objetos, guardado de archivos en disco (backups, info), etc.
- PolicyExecutor.ps1: Lógica genérica para ejecutar tipos de políticas predeterminados.
- ProfileExecutor.ps1: Orquesta la ejecución de perfiles completos recorriendo grupos y políticas.
- Templates.ps1: Plantillas para validar objetos (configuración y varios tipos de
PolicyMeta).
- Config.ps1: Gestión del archivo de configuración (
-
Profiles/: Carpeta que contiene todos los perfiles, sus grupos y sus políticas.
- Media_Estandar/, Alta_UsoOficial/, etc.: Carpetas de perfiles con subcarpetas de grupos (por ejemplo,
OP_ACC_4), que contienen los scripts de políticas (*.ps1).
El orden de ejecución lo define el manifestprofile.manifest.jsonde cada perfil.
- Media_Estandar/, Alta_UsoOficial/, etc.: Carpetas de perfiles con subcarpetas de grupos (por ejemplo,
-
Logs/: Directorio donde se almacenan:
- Archivos
.logcon los mensajes de ejecución. - Archivos
.jsoncon el estado final de la ejecución del perfil, sus grupos y sus políticas. - Archivos
.csvcon los resultados de la comprobación del sistema, en caso de que esté habilitado el guardado en la configuración.
- Archivos
-
Backups/: Directorio donde se almacenan copias de seguridad del sistema antes de aplicar cambios, organizadas por máquina y perfil.
-
Inicio (Main.ps1)
- Importa el resto de archivos.
- Comprueba privilegios de administrador y eleva si es necesario.
- Crea
$Global:Info. - Inicializa la configuración y los directorios de logs/backups, comparando configuración con la estructura real de archivos y mostrando discrepancias.
- Si se proporciona
-Action, se omite el menú y se ejecuta directamente la acción indicada; en caso contrario, se muestra el menú y se gestiona la selección del usuario.
-
Ejecución de perfiles y grupos
Main.ps1llama aInvoke-Profiledentro deProfileExecutor.ps1, que:- Inicializa todos los grupos y políticas definidos en el manifest.
- Realiza copias de respaldo si la acción es
Set. - Ejecuta la acción (
Test,SetoRestore) sobre todos los grupos y políticas. - Valida los resultados en iteraciones sucesivas hasta que todas las políticas estén correctamente aplicadas/restauradas o se alcance el máximo configurado (
MaxValidationIterations).
-
Flujo Test / Set / Restore
- En modo Test, se comprueba el estado de las políticas sin modificar el sistema.
- En modo Set, se aplican los cambios, creando backups previos, y se valida que los ajustes se apliquen correctamente con iteraciones.
- En modo Restore, se restauran los valores desde una copia de seguridad seleccionada y se valida que las políticas recuperen su valor original.
- En ejecución no interactiva:
- En Test/Set, si se pasa
-ProfileName, se omite la selección de perfil. - En Restore, si se pasa
-BackupName, se omite la selección de copia; con-Action RestoreLastse restaura automáticamente la más reciente.
- En Test/Set, si se pasa
-
Registro e impresión
- Todos los mensajes y resultados se registran en un archivo
.log. - El estado de ejecución general, perfiles, grupos y políticas se registra en un
.json. - En modo Test, los resultados pueden guardarse en
.csvsi está habilitado en la configuración. - Los mensajes en pantalla usan colores y un formato homogéneo.
- Todos los mensajes y resultados se registran en un archivo
- Descarga o clona este repositorio.
- Ejecuta
Main.ps1con PowerShell como Administrador (o deja que el script fuerce la elevación). - Selecciona la acción y el perfil a aplicar, o usa parámetros para ejecución no interactiva.
- Consulta las carpetas
LogsyBackupspara ver resultados y copias. - Revisa la salida en pantalla para seguir la ejecución.
Parámetros disponibles en Main.ps1:
-Action:Test,Set,RestoreoRestoreLast.-ProfileName: nombre de la carpeta de perfil enProfiles/.-BackupName: nombre exacto de la carpeta enBackups/<MachineId>/.-ConfigFile: ruta alternativa aconfig.json.-Quiet: evita la pausa final.
El orden lo define el archivo Profiles/<Perfil>/profile.manifest.json.
El manifest se sincroniza automáticamente: conserva el orden existente, añade nuevas entradas al final (orden alfabético entre nuevas) y elimina las que ya no existan.
- Crear carpeta de perfil en
Profiles/si es necesario. - Crear carpeta de grupo dentro del perfil.
- Añadir script
.ps1de la política dentro del grupo:- Si es un tipo soportado por
PolicyExecutor.ps1, definir solo el objeto$PolicyMeta. - Si es un tipo nuevo, usar tipo
Customen$PolicyMetae implementar funcionesInitialize-Policy,Test-Policy,Backup-Policy,Set-Policy,Restore-PolicyyAssert-Policy.
- Si es un tipo soportado por
- Asegurar que el nombre del archivo coincide con
$PolicyMeta.Name. - Añadir la política al manifest
profile.manifest.jsonpara definir su orden.