En el intrincado mundo de las TI, mantener la integridad del sistema es de suma importancia. Un componente fundamental del sistema operativo Windows es el archivo BootConfig. Monitorizar los cambios en este archivo es crucial para que los administradores de sistemas y los profesionales de TI garanticen la seguridad y estabilidad del sistema. Esta guía profundiza en un script de PowerShell que comprueba si se han producido modificaciones en el archivo BootConfig, ofreciendo un enfoque proactivo para la gestión del sistema.
Antecedentes
El archivo BootConfig en Windows es un elemento fundacional que contiene datos de configuración de arranque y dicta cómo se inicia el sistema, qué versiones del SO cargar y otros parámetros de arranque. Dado su papel en el proceso de arranque, cualquier cambio no autorizado o inesperado puede provocar fallos o vulnerabilidades en el sistema, lo que lo convierte en un objetivo privilegiado para los actores maliciosos o el malware. Para los profesionales de TI y los proveedores de servicios gestionados (MSP), disponer de una herramienta capaz de detectar estos cambios tiene un valor incalculable, ayudando a la gestión proactiva del sistema y al análisis forense en caso de brechas de seguridad.
El script para monitorizar los cambios en el archivo BootConfig
#Requires -Version 5.1 <# .SYNOPSIS Checks if the BootConfig file was modified from last run. .DESCRIPTION Checks if the BootConfig file was modified from last run. On first run this will not produce an error, but will create a cache file for later comparison. .EXAMPLE No parameters needed. .OUTPUTS None .NOTES Minimum OS Architecture Supported: Windows 10, Windows Server 2016 Release Notes: Initial Release By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use. Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA). #> [CmdletBinding()] param ( # Path and file where the cache file will be saved for comparison [string] $CachePath = "C:ProgramDataNinjaRMMAgentscriptingTest-BootConfig.clixml" ) begin { function Test-IsElevated { $id = [System.Security.Principal.WindowsIdentity]::GetCurrent() $p = New-Object System.Security.Principal.WindowsPrincipal($id) $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator) } } process { if (-not (Test-IsElevated)) { Write-Error -Message "Access Denied. Please run with Administrator privileges." exit 1 } # Get content and create hash of BootConfig file $BootConfigContent = bcdedit.exe /enum $Stream = [IO.MemoryStream]::new([byte[]][char[]]"$BootConfigContent") $BootConfigHash = Get-FileHash -InputStream $Stream -Algorithm SHA256 $Current = [PSCustomObject]@{ Content = $BootConfigContent Hash = $BootConfigHash } # Check if this is first run or not if ($(Test-Path -Path $CachePath)) { # Compare last content and hash $Cache = Import-Clixml -Path $CachePath $ContentDifference = Compare-Object -ReferenceObject $Cache.Content -DifferenceObject $Current.Content -CaseSensitive $HashDifference = $Cache.Hash -like $Current.Hash $Current | Export-Clixml -Path $CachePath -Force -Confirm:$false if (-not $HashDifference) { Write-Host "BootConfig file has changed since last run!" Write-Host "" $ContentDifference | ForEach-Object { if ($_.SideIndicator -like '=>') { Write-Host "Added: $($_.InputObject)" } elseif ($_.SideIndicator -like '<=') { Write-Host "Removed: $($_.InputObject)" } } exit 1 } } else { Write-Host "First run, saving comparison cache file." $Current | Export-Clixml -Path $CachePath -Force -Confirm:$false } exit 0 } end {}
Accede a este script y a cientos más en el Dojo de NinjaOne
Desglose detallado
El script proporcionado es un script PowerShell meticulosamente diseñado para supervisar las modificaciones en el archivo BootConfig desde su última ejecución. Aquí tienes un desglose paso a paso más detallado:
- Requisitos previos: el script requiere PowerShell versión 5.1.
- Control de la elevación de los permisos: antes de iniciar su función principal, el script comprueba si se ejecuta con privilegios de administrador, esenciales para acceder a determinados archivos y comandos del sistema.
- Hashing de BootConfig: usando el comando bcdedit.exe /enum, el script obtiene el contenido de BootConfig. Seguidamente, crea un hash SHA256 de este contenido, que sirve como identificador único para ese contenido específico.
- Comparación de cachés: a continuación, el script busca un archivo de caché previamente guardado. Si existe, el script compara el contenido y hash actual de BootConfig con la versión en caché.
- Salida: si se detectan diferencias, el script proporciona una salida detallada de los cambios, especificando lo que se ha añadido o eliminado. Si es la primera vez que se ejecuta el script, guarda los datos actuales de BootConfig para futuras comparaciones.
Posibles casos de uso
- Comprobaciones rutinarias del sistema: los profesionales de TI como Alex pueden desplegar este script en los servidores de la empresa para realizar comprobaciones rutinarias y asegurarse de que no se han producido cambios no autorizados.
- Instalación post-software: después de instalar software nuevo o actualizaciones, se puede ejecutar el script para verificar que el archivo BootConfig permanece inalterado, lo que garantiza que el software no ha alterado los datos críticos de arranque.
- Cambios en la configuración del sistema: antes y después de realizar cambios significativos en la configuración del sistema, el script puede utilizarse para garantizar que la integridad del archivo BootConfig permanece intacta.
Comparaciones
Aunque existen herramientas y software de terceros que ofrecen funciones de monitorización del sistema, la ventaja de este script reside en su sencillez y especificidad. Es ligero, fácil de desplegar y se centra únicamente en el archivo BootConfig, lo que garantiza una comprobación específica y eficaz.
Preguntas frecuentes
- P: ¿Este script puede ejecutarse en versiones anteriores de Windows?
R: El script es compatible con Windows 10, Windows Server 2016 y versiones más recientes. - P: ¿Qué ocurre si el archivo BootConfig no se modifica?
R: El script simplemente sale sin ninguna alerta, indicando que no ha habido cambios desde la última ejecución.
Implicaciones para la seguridad
Detectar cambios en el archivo BootConfig no sólo tiene que ver con la estabilidad del sistema, sino también con la seguridad. Los cambios no autorizados podrían indicar una posible infracción o actividad de malware. Al monitorizar este archivo, los profesionales de TI pueden adoptar una actitud proactiva frente a posibles amenazas.
Recomendaciones
- Asegúrate de ejecutar el script con privilegios de administrador para garantizar resultados precisos.
- Programa la ejecución del script a intervalos regulares para una supervisión continua.
- Guarda copias de seguridad del archivo BootConfig para restaurarlo rápidamente en caso de cambios no autorizados.
Reflexiones finales
En el ámbito de la seguridad informática y la gestión de sistemas, herramientas como NinjaOne ofrecen soluciones completas para diversos retos. La supervisión de archivos críticos del sistema, como el archivo BootConfig de Windows, es una prueba de la importancia de la gestión proactiva del sistema. Con scripts como el que acabamos de ver, los profesionales de TI pueden garantizar la integridad del sistema, reforzar la seguridad y mantener la eficacia operativa.
He aquí algunos recursos adicionales que pueden resultarte útiles:
- El archivo BootConfig en Windows: https://learn.microsoft.com/es-es/windows-server/administration/windows-commands/bcdedit
- Tutorial sobre los scripts de PowerShell: https://learn.microsoft.com/es-es/powershell/scripting/overview?view=powershell-7.4