Identificar y gestionar cuentas locales no utilizadas en sistemas Windows

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

Obtén acceso

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.

Categorías:

Quizá también te interese…

×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón “Acepto” que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona “tal cual” y “según disponibilidad”, sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).