viernes, diciembre 03, 2010

Ultima Conexion ..........

No piensen que esta es la ultima conexion que hago, esta bien que hace tiempo no escriba en el blog y lo tenga un poco (bastante) abandonado, pero no habia encontrado algo interesante para publicar.

Ante una auditoria, necesitamos obtener para cada una de las cuentas del dominio, cuando fue la ultima conexion y validar tambien el estatus de la cuenta, si es que esta desabilitada, etc.

Este proceso tiene varios pasos, el primero de ellos es obtener la lista de los usuarios, esto lo podemos realizar de varias formas, usando algun programa ya hecho, usando scripts visual basic o power shell o usando algun comando que obtiene informacion de Active Directory. En esta ocasion, seleccione uno bien interesante y multiproposito: CSVDE

Este comando permite principalmente importar y exportar objetos en active directory, si quieres aprender mas sobre el puedes hacerlo en el siguiente link

Una vez seleccionado el comando esta la seleccion de los atributos que necesito, obtener una lista completa nos podria generar un archivo demasiado grande y engorroso de manipular, asi que mi lista reducida fue la siguiente: objectClass, userAccountControl, sAMAccountName, lastLogonTimestamp

objectClass me muestra el tipo de cuenta, me dice si la cuenta es user o computer.
userAccountControl me da el status de la cuenta mas adelante me explayo mas sobre este atributo.
sAMAccountName es el nombre de la cuenta.
lastLogonTimestamp es cuando fue la ultima conexion de la cuenta.

Este ultimo atributo, lastLogonTimestamp fue introducido en Windows Server 2003 para ayudar a identificar de forma mas certera los usuarios y equipos que se encuentran activos, cabe hacer notar que este datos tampoco es en tiempo real ya que la informacion debe ser actualizada por los demas domain controlers de la red pues a diferencia del atributo lastLogon, este es replicado.

El numero entregado por este atributo representa la intervalos de 100 nanosegundos transcurridos desde el 1ro de Enero de 1601, el codigo en vbs para transformar este numero a fecha es el siguiente:

set objLogon = objUser.Get("lastLogonTimestamp")
intLogonTime = objLogon.HighPart * (2^32) + objLogon.LowPart
intLogonTime = intLogonTime / (60 * 10000000)
intLogonTime = intLogonTime / 1440
WScript.Echo strADsPath & ";" & intLogonTime + #1/1/1601#

Si esa misma formula queremos usarla en excel usemos la siguiente:
Ingles: =IF(C2>0,C2/(8.64*10^11) - 109205,"")
Español: =SI(E2>0;E2/(8.64*10^11) - 109205;"")

ok! ya tenemos la lista de usuarios y tenemos el ultimo logon en formato de fecha :) nos esta faltando ahora saber si las cuentas estan desabilitadas o no o si ha expirado la password.

A traves del atributo userAccountControl podemos saber alguna informacion del estado de la cuenta, este atributo es una serie de bits que visualizamos como un numero en donde cada posicion representa una caracteristica que puede estar seteada en 1 o 0 el bit que en nuestro caso nos interesa es el segundo, ACCOUNTDISABLE, o sea, un usuario normal tendra el número 512 y si ese usuario esta desabilitado sera 514, si quieren saber mas detalle de este atributo pueden revisarlo en la siguiente link

Otro atributo que tambien nos puede ayudar y que nos indica si la cuenta esta con la password expirada o no es msDS-User-Account-Control-Computed pues el anterior aunque tiene la opcion de mostrar si tiene la password expirada no lo indica, para este caso, la columna representada por este atributo me mostrara un 8388608 que representa 0x800000 en hexadecimal y corresponde al status PASSWORD_EXPIRED

Bien, ya tengo identificados aquellos usuarios que no estan cumpliendo :)

Saludos!!

Isa

No hay comentarios.: