Si eres un profesional de TI o un proveedor de servicios gestionados (MSP), el concepto de cuentas locales no utilizadas te resultará familiar. En pocas palabras, las cuentas locales no utilizadas son cuentas que no se han utilizado durante un período de tiempo, a menudo definido por la política de una organización. Estas cuentas locales no utilizadas, aparentemente inofensivas, pueden suponer en realidad un importante riesgo para la seguridad, ya que sirven de puerta trasera para que los atacantes obtengan acceso no autorizado a un sistema. Hoy veremos un script PowerShell diseñado para identificar y gestionar estas posibles brechas de seguridad.
El script para gestionar cuentas locales no utilizadas: un análisis en detalle
El script Test-UnusedLocalAccounts.ps1 funciona con PowerShell 5.1 y ofrece un enfoque simplificado para la gestión de cuentas no utilizadas. Comienza su operación verificando si el comando Get-LocalUser está disponible en tu sistema. Esto es fundamental, ya que toda la funcionalidad se basa en este comando. Una vez confirmado, el script recorre todas las cuentas locales para identificar aquellas que no han registrado ninguna actividad durante un número determinado de días (30 días por defecto). ¿La guinda del pastel? El script muestra una lista ordenada de estas cuentas no utilizadas directamente en la consola.
El script: script de condición para cuentas locales no utilizadas en Windows
#Requires -Version 5.1 <# .SYNOPSIS Condition script for unused local account on windows .DESCRIPTION Condition script for unused local account on windows .EXAMPLE -Days 30 Checks for accounts that have not logged in for more than 30 days .EXAMPLE PS C:> Test-UnusedLocalAccounts.ps1 -Days 30 Checks for accounts that have not logged in for more than 30 days .OUTPUTS None .NOTES Minimum supported OS: Windows 10, 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 ( [Parameter()] [int] $Days = 30 ) begin { function Test-StringEmpty { param([string]$Text) # Returns true if string is empty, null, or whitespace process { [string]::IsNullOrEmpty($Text) -or [string]::IsNullOrWhiteSpace($Text) } } if (-not $(Test-StringEmpty -Text $env:Days)) { $Days = $env:Days } } process { # Check if Get-LocalUser is available on this system if (-not $(Get-Command -Name "Get-LocalUser" -ErrorAction SilentlyContinue)) { Write-Error "The command Get-LocalUser is not available on this system." exit 2 } $UnusedAccounts = Get-LocalUser | Where-Object { ($(Test-StringEmpty -Text $_.LastLogon) -or $_.LastLogon -le (Get-Date).AddDays(-$Days)) -and $_.Enabled } | Select-Object Name, LastLogon | ForEach-Object { [PSCustomObject]@{ Name = $_.Name LastLogon = $_.LastLogon } } if ($UnusedAccounts) { Write-Host "Accounts that have not logged in for the past $Days days:" $UnusedAccounts | ForEach-Object { Write-Host "$($_.Name): $($_.LastLogon)" } exit 1 } exit 0 } end { $ScriptVariables = @( [PSCustomObject]@{ name = "Days" calculatedName = "days" required = $false defaultValue = [PSCustomObject]@{ type = "TEXT" value = "30" } valueType = "TEXT" valueList = $null description = "Accounts older than this number in days." } ) }
Accede a más de 300 scripts en el Dojo de NinjaOne
Principales ventajas: más allá de lo básico
Seguridad
Como ya hemos mencionado, las cuentas locales no utilizadas suelen quedar sin vigilancia, convirtiéndose en posibles puntos de entrada para los ciberdelincuentes. Este script ayuda a identificar proactivamente estas cuentas.
Eficacia
Identificar las cuentas locales no utilizadas podría llevar horas de trabajo manual, pero con este script sólo te llevará unos minutos. La eficiencia es clave, especialmente para los MSP que supervisan cuentas de múltiples clientes.
Flexibilidad
No estás atrapado con un periodo de 30 días, sino que puedes personalizar el marco de tiempo en función de tus políticas organizativas.
Funciones ampliadas
Aunque identificar las cuentas no utilizadas es fundamental, actuar en función de esta información es igualmente importante. El script también puede configurarse para exportar los resultados a un archivo o enviar una notificación por correo electrónico cuando se descubran cuentas no utilizadas. Esto mejora tu capacidad para hacer un seguimiento y gestionar estas cuentas con eficacia.
Cómo utilizarlo
Para desplegar el script, introduce el siguiente comando:
También podría interesarte este post: Cómo desactivar una cuenta local en Windows con PowerShell.
NinjaOne: amplía tu arsenal
Aunque nuestro script PowerShell es una herramienta muy valiosa, es sólo una pieza más del puzle. Plataformas como NinjaOne ofrecen un enfoque más completo, permitiéndote gestionar no sólo las cuentas locales no utilizadas, sino todo tu ecosistema de TI. NinjaOne puede incluso ejecutar scripts como Test-UnusedLocalAccounts.ps1 a través de múltiples sistemas simultáneamente.
Observaciones finales
En el gran esquema de la ciberseguridad, cada granito de arena cuenta. Las cuentas locales no utilizadas en sistemas Windows pueden parecer triviales, pero podrían convertirse en tu talón de Aquiles si no las abordas. El script Test-UnusedLocalAccounts.ps1 es una solución sólida y automatizada para este aspecto de la gestión del sistema que a menudo se pasa por alto. Y cuando se combina con plataformas como NinjaOne y otras herramientas, los profesionales de TI y los MSP disponen de un amplio conjunto de herramientas para garantizar que sus redes no se vean comprometidas.
Así que ya sabes: equípate con las herramientas y los conocimientots adecuados para proteger eficazmente tu entorno de TI. Manténte al día con este espacio para descubrir más soluciones de TI para empresas.