Una cuenta huérfana es una cuenta habilitada cuyo dueño ya no está, o de la que nadie puede decir de quién es. La persona se fue de la empresa y su usuario sigue activo en algún sistema. O es una cuenta de servicio que creó alguien que ya no trabaja ahí, y hoy nadie se anima a tocarla porque no sabe qué se rompe.
Es uno de los hallazgos que más aparece cuando audito un entorno, y uno de los que un auditor encuentra más rápido: le alcanza con cruzar la lista de bajas de RR.HH. contra el directorio. Acá va cómo buscarlas vos primero y qué hacer cuando aparecen.
Huérfana e inactiva no son lo mismo
Se mezclan seguido, y conviene separarlas porque se buscan distinto. Una cuenta inactiva es la que no se usa hace tiempo; el dueño puede seguir en la empresa (alguien de licencia, una cuenta de emergencia). Una cuenta huérfana es la que no tiene un dueño vigente, se use o no.
La huérfana que además se usa es la peor de las combinaciones. Tiene credenciales válidas, actividad que parece normal y nadie que la reconozca como propia si algo raro pasa con ella.
De dónde salen
Casi siempre de una baja que no llegó a todos lados. RR.HH. avisa tarde, o avisa por mail. Se deshabilita la cuenta de Active Directory, pero la aplicación con usuarios locales queda afuera porque no está integrada a nada. También salen de contratistas a los que nadie les puso fecha de fin, de cuentas de prueba que se crearon para un proyecto y quedaron, y de cuentas de servicio sin un responsable asignado.
Por eso las normas lo miran. ISO 27001:2022 lo cubre en los controles 5.16 (gestión de identidades) y 5.18 (derechos de acceso), que piden que los accesos se quiten cuando ya no corresponden y que eso quede registrado.
Cómo encontrarlas
1. Cruzar contra la fuente de verdad
El método más directo: exportar las cuentas de cada sistema y cruzarlas contra la nómina activa de RR.HH. Toda cuenta personal que no matchea con un empleado o contratista vigente es candidata. Para que el cruce funcione hace falta un identificador común (legajo, número de empleado, mail corporativo) guardado en las cuentas. Si ese dato no está, encontrarlo ya es el primer hallazgo.
2. Buscar señales en Active Directory
En AD hay atributos que ayudan a sospechar aunque no tengas el cruce armado. Las cuentas habilitadas que no inician sesión hace 90 días:
# Límite de inactividad: hoy menos 90 días, en formato FILETIME
$limite = (Get-Date).AddDays(-90).ToFileTimeUtc()
# Usuarios habilitados (bit 2 de userAccountControl apagado) sin logon desde el límite
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(lastLogonTimestamp<=$limite))" `
-Properties lastLogonTimestamp, manager, description |
Select-Object SamAccountName, manager, description,
@{n='UltimoLogon'; e={[DateTime]::FromFileTimeUtc($_.lastLogonTimestamp)}}
Y las que nunca iniciaron sesión, que no tienen lastLogonTimestamp:
(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(!(lastLogonTimestamp=*)))
Conviene sumarle una condición sobre whenCreated para no traer las cuentas que
se crearon ayer para alguien que todavía no empezó. Si no querés calcular FILETIME a mano,
el conversor de timestamps de AD que armé te genera
ambos filtros con los días que le pidas. Search-ADAccount -AccountInactive
también sirve para una primera pasada rápida.
Dos aclaraciones. La primera: lastLogonTimestamp puede estar atrasado hasta
unas dos semanas por cómo se replica, así que sirve para umbrales de meses; para contar días es demasiado impreciso.
La segunda: una cuenta inactiva todavía no es huérfana. Esta búsqueda da candidatas, y
cada una se confirma con RR.HH. o con el jefe que figura en manager.
3. Preguntar de quién es cada cuenta que no es de una persona
Cuentas de servicio, de aplicaciones, compartidas, de proveedores. Para cada una tiene que haber una persona responsable con nombre y apellido. Las que tienen el campo de responsable vacío, o con alguien que ya se fue, son las huérfanas más delicadas, porque suelen tener permisos altos y contraseñas que no vencen.
Qué hacer cuando aparecen
Borrar de una es tentador y casi siempre es un error. Si una cuenta de servicio sin dueño resulta que sostenía un proceso nocturno, te enterás a las 3 de la mañana. Lo que hago es deshabilitarla, moverla a una OU de cuarentena, dejar anotado por qué y cuándo, y esperar un tiempo acordado antes de eliminarla. Si alguien reclama, aparece el dueño; si nadie reclama, se borra con respaldo.
A las cuentas que sí se necesitan les asigno un responsable antes de cerrar el hallazgo. Y cada huérfana encontrada vale como pista: si salió de una baja que no se propagó, el problema real está en el proceso de bajas, y limpiar cuentas sin arreglar eso es secar el piso con la canilla abierta.
Cómo evitar que vuelvan
La solución de fondo es que la baja salga de RR.HH. y se propague sola a todos los
sistemas, que es justamente lo que resuelve una herramienta de gobierno de identidades
(IGA) cuando está bien conectada a la fuente de verdad. Mientras eso no esté, ayuda mucho
ponerle fecha de vencimiento (accountExpires) a toda cuenta de contratista,
exigir un responsable para cualquier cuenta que no sea de una persona, y meter estas
cuentas en las
recertificaciones de
accesos periódicas.
Si nunca hiciste el cruce, empezá por ahí: una exportación de AD, la nómina de RR.HH. y una tarde. Lo que salga de ese primer cruce te va a mostrar bastante bien por dónde se está escapando el proceso de bajas.