Alguns administradores de rede, tem como prática renomear o usuário Administrador do domínio com o intuito de aumentar a segurança contra ataques. Porém é uma falsa impressão de segurança já que é possível localizar o Administrador do domínio mesmo que ele tenha sido renomeado ou movido entre as OUs do domínio. Como isto é possível? veremos a seguir.
Quando um objeto é criado no Active Directory é atribuído a este objeto um identificador único chamado de SID (Security Identifier), mesmo renomeado ou movendo o objeto o SID é preservado. Como o usuário Administrador do domínio é o primeiro usuário a ser criado no momento em que o servidor é promovido a Domain Controller, ele sempre irá ter o SID terminando em 500. Há um artigo da Microsoft descrito abaixo com maiores detalhes sobre a atribuição do SID.
Customizamos um script VBScript capaz de consultar os SIDs dos usuários do domínio e identificar o usuário que possui o SID terminando com 500 (o Administrador do domínio), retornando informações como seu nome, logon, caminho LDAP e se a conta está habilitada ou não. Como estamos trabalhando apenas com consulta LDAP não é necessário ser membro de um grupo com permissões de segurança especificas para obter o retorno, basta ter uma conta com o acesso mais simples no domínio (Domain Users).
Well-known security identifiers in Windows operating systems
Salve o script abaixo como AD_GetAdmin.vbs e execute.
'******************************************************
'* Autor: Maikon Demacq
'* Versão: 1.0'* Última Modificação: 14/09/2010
'*
'* Este script contempla:
'* Localiza o Administrador do Dominio e retorna
'* informações da conta
'*
'* Sintaxe:
'* Cscript AD_GetAdmin.vbs Parâmetros
'******************************************************
On Error Resume Next
Main
Sub Main
Const ADS_UF_ACCOUNTDISABLE = 2
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("defaultNamingContext")
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection
strBase = "<LDAP://" & strDNSDomain & ">"
strFilter = "(objectCategory=user)"
strAttributes = "distinguishedName,cn,sAMAccountName,userAccountControl,objectSID"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 100
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
Do Until adoRecordset.EOF
strHexSid = OctetToHexStr(adoRecordset.Fields("objectSid").Value)
strDecSid = HexStrToDecStr(strHexSid)
If Right(strDecSid,4) = "-500" Then
strUAC = adoRecordset.Fields("userAccountControl").Value
If strUAC AND ADS_UF_ACCOUNTDISABLE Then
strACC = "Disable"
Else
strACC = "Enable"
End If
strCN = adoRecordset.Fields("cn").Value
strSAM = adoRecordset.Fields("sAMAccountName").Value
strDN = adoRecordset.Fields("distinguishedName").value
Wscript.Echo "User Account: " & strCN & vbcrlf & "Logon Account: " & strSAM & vbcrlf & "Account Status: " & strACC & vbcrlf & "DN: " & strDN & vbcrlf & "SID: " & strDecSid
strFlag = 1
End If
If strFlag = 1 Then
Wscript.Quit(0)
End If
adoRecordset.MoveNext
Loop
adoRecordset.Close
adoConnection.Close
End Sub
Function OctetToHexStr(arrbytOctet)
Dim k
OctetToHexStr = ""
For k = 1 To Lenb(arrbytOctet)
OctetToHexStr = OctetToHexStr & Right("0" & Hex(Ascb(Midb(arrbytOctet, k, 1))), 2)
Next
End Function
Function HexStrToDecStr(strSid)
Dim arrbytSid, lngTemp, j
ReDim arrbytSid(Len(strSid)/2 - 1)
For j = 0 To UBound(arrbytSid)
arrbytSid(j) = CInt("&H" & Mid(strSid, 2*j + 1, 2))
Next
HexStrToDecStr = "S-" & arrbytSid(0) & "-" & arrbytSid(1) & "-" & arrbytSid(8)
lngTemp = arrbytSid(15)
lngTemp = lngTemp * 256 + arrbytSid(14)
lngTemp = lngTemp * 256 + arrbytSid(13)
lngTemp = lngTemp * 256 + arrbytSid(12)
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
lngTemp = arrbytSid(19)
lngTemp = lngTemp * 256 + arrbytSid(18)
lngTemp = lngTemp * 256 + arrbytSid(17)
lngTemp = lngTemp * 256 + arrbytSid(16)
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
lngTemp = arrbytSid(23)
lngTemp = lngTemp * 256 + arrbytSid(22)
lngTemp = lngTemp * 256 + arrbytSid(21)
lngTemp = lngTemp * 256 + arrbytSid(20)
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
lngTemp = arrbytSid(25)
lngTemp = lngTemp * 256 + arrbytSid(24)
HexStrToDecStr = HexStrToDecStr & "-" & CStr(lngTemp)
End Function
Nenhum comentário:
Postar um comentário