none
account locked RRS feed

  • Domanda

  • Salve a tutti vorrei chiedervi un aiuto,

    purtroppo in azineda abbiamo beccato il confiker,

    ora il problema è che mi si bloccano gli utenti continuamante, ricordo che c'era uno script che schedulato permetteva di sbloccare gli  account (nel frattempo che proviamo a rimuverlo), c'è qualcuno che saprebbe dirmi dove cercarlo...

    grazie

    martedì 19 ottobre 2010 07:36

Risposte

  •  

    ASSOLUTAMENTE DA USARE IN CSCRIPT e NON IN WSCRIPT. (lancialo da cmd con "cscript nomevbs", non farci doppio click) Altrimenti mostra un popup per ogni utente che sblocca, anzichè una lista.

     

    Comunque, una cosa che non ti hanno detto: DEVI AGGIORNARE WINDOWS SU TUTTE LE MACCHINE PER PREVENIRE LA REINFEZIONE. Inoltre sappi che il conficker fa bruteforcing della pw di admin di dominio con tutte le macchine infette in grid-computing.

    QUINDI DEVI CAMBIARE TALE PASSWORD CON UNA MOLTO COMPLESSA, almeno finchè non hai risolto la pulizia dei PC.

    Ciao.

     

    ----

    Option Explicit

    Dim objRootDSE, strDNSDomain, objShell, lngBiasKey, lngBias, k
    Dim objDomain, objDuration, lngHigh, lngLow, lngDuration
    Dim adoCommand, adoConnection, adoRecordset
    Dim strBase, strFilter, strAttributes, strQuery
    Dim strUserDN, dtmLockOut, lngSeconds, str64Bit

    ' Retrieve DNS domain name.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")

    ' Obtain local Time Zone bias from local machine registry.
    Set objShell = CreateObject("Wscript.Shell")
    lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
        & "TimeZoneInformation\ActiveTimeBias")
    If (UCase(TypeName(lngBiasKey)) = "LONG") Then
        lngBias = lngBiasKey
    ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
        lngBias = 0
        For k = 0 To UBound(lngBiasKey)
            lngBias = lngBias + (lngBiasKey(k) * 256^k)
        Next
    End If
    Set objShell = Nothing

    ' Retrieve domain lockout duration policy.
    Set objDomain = GetObject("LDAP://" & strDNSDomain)
    Set objDuration = objDomain.lockoutDuration
    lngHigh = objDuration.HighPart
    lngLow = objDuration.LowPart
    If (lngHigh = 0 And lngLow = 0) Then
        ' There is no domain lockout duration policy.
        ' Locked out accounts remain locked out until reset.
        ' Any user with value of lockoutTime greater than 0
        ' is locked out.
        str64Bit = "1"
    Else
        ' Account for error in IADsLargeInteger property methods.
        If (lngLow < 0) Then
            lngHigh = lngHigh + 1
        End If
        ' Convert to minutes.
        lngDuration = lngHigh * (2^32) + lngLow
        lngDuration = -lngDuration/(60 * 10000000)

        ' Determine critical time in the past. Any accounts
        ' locked out after this time will still be locked out,
        ' unless the account has been reset (in which case the
        ' value of the lockoutTime attribute will be 0).
        ' Any accounts locked out before this time will no
        ' longer be locked out.
        ' Trap error if lockoutDuration -1 (2^63 - 1).
        On Error Resume Next
        dtmLockout = DateAdd("n", -lngDuration, Now())
        If (Err.Number <> 0) Then
            On Error GoTo 0
            ' There is no domain lockout duration policy.
            ' Locked out accounts remain locked out until reset.
            ' Any user with value of lockoutTime greater than 0
            ' is locked out.
            str64Bit = "1"
        Else
            On Error GoTo 0
            ' Convert to UTC.
            dtmLockout = DateAdd("n", lngBias, dtmLockout)

            ' Find number of seconds since 1/1/1601.
            lngSeconds = DateDiff("s", #1/1/1601#, dtmLockout)

            ' Convert to 100-nanosecond intervals. This is the
            ' equivalent Integer8 value (for this time zone).
            str64Bit = CStr(lngSeconds) & "0000000"
        End If
    End If
    Set objDuration = Nothing
    Set objDomain = Nothing

    ' Use ADO to search Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open = "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection

    ' Search entire domain.
    strBase = "<LDAP://" & strDNSDomain & ">"
    ' Filter on all user objects that are still locked out.
    strFilter = "(&(objectCategory=person)(objectClass=user)(lockoutTime>=" _
        & str64Bit & "))"
    ' Comma delimited list of attribute values to retrieve.
    strAttributes = "distinguishedName"
    ' Construct the LDAP syntax query.
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

    ' Run the query.
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 60
    adoCommand.Properties("Cache Results") = False

    Set adoRecordset = adoCommand.Execute

    ' Enumerate the resulting recordset and display
    ' names of all locked out users.
    Wscript.Echo "Locked out users:"
    Do Until adoRecordset.EOF
        strUserDN = adoRecordset.Fields("distinguishedName").Value
        Wscript.Echo strUserDN
        Set objUser = GetObject ("LDAP://" & strUserDN)
        objUser.IsAccountLocked = False
        objUser.SetInfo
        adoRecordset.MoveNext
    Loop

    ' Clean up.
    adoRecordset.Close
    adoConnection.Close

     

     

     

    Già usato sul campo e funzionante... :-)

    credits: Hilltop Lab web site - http://www.rlmueller.net

    Ciao!


    Diego Castelli - MCSA 2003, MCP ISA 2004, MCTS Forefront. ITA: Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 19 ottobre 2010 10:10

Tutte le risposte

  • C'e una fix di symantec, ma anche malware removal di microsoft dovrebbe andare.

    Isola tutte le macchine, parti in modalità provvisoria, passa la fix ed installa la kb relativa, a quel punto puoi rimettere in rete.
    http://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx


    Roberto Pallucchini
    *** Please mark as Answer, if this reply helps you***
    *** Per favore Suggerisci come risposta, se la risposta ti è stata di aiuto***
    martedì 19 ottobre 2010 08:20
  • ciao, grazie per l'attenzione,

    il mio problema al momneto è tamponare le richieste continue degli utenti, nel frattempo che operiamo nella rimozione del malware.

    ricordo di uno script che ci permetteva di disabilitare gli account

    martedì 19 ottobre 2010 08:26
  •  

    ASSOLUTAMENTE DA USARE IN CSCRIPT e NON IN WSCRIPT. (lancialo da cmd con "cscript nomevbs", non farci doppio click) Altrimenti mostra un popup per ogni utente che sblocca, anzichè una lista.

     

    Comunque, una cosa che non ti hanno detto: DEVI AGGIORNARE WINDOWS SU TUTTE LE MACCHINE PER PREVENIRE LA REINFEZIONE. Inoltre sappi che il conficker fa bruteforcing della pw di admin di dominio con tutte le macchine infette in grid-computing.

    QUINDI DEVI CAMBIARE TALE PASSWORD CON UNA MOLTO COMPLESSA, almeno finchè non hai risolto la pulizia dei PC.

    Ciao.

     

    ----

    Option Explicit

    Dim objRootDSE, strDNSDomain, objShell, lngBiasKey, lngBias, k
    Dim objDomain, objDuration, lngHigh, lngLow, lngDuration
    Dim adoCommand, adoConnection, adoRecordset
    Dim strBase, strFilter, strAttributes, strQuery
    Dim strUserDN, dtmLockOut, lngSeconds, str64Bit

    ' Retrieve DNS domain name.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")

    ' Obtain local Time Zone bias from local machine registry.
    Set objShell = CreateObject("Wscript.Shell")
    lngBiasKey = objShell.RegRead("HKLM\System\CurrentControlSet\Control\" _
        & "TimeZoneInformation\ActiveTimeBias")
    If (UCase(TypeName(lngBiasKey)) = "LONG") Then
        lngBias = lngBiasKey
    ElseIf (UCase(TypeName(lngBiasKey)) = "VARIANT()") Then
        lngBias = 0
        For k = 0 To UBound(lngBiasKey)
            lngBias = lngBias + (lngBiasKey(k) * 256^k)
        Next
    End If
    Set objShell = Nothing

    ' Retrieve domain lockout duration policy.
    Set objDomain = GetObject("LDAP://" & strDNSDomain)
    Set objDuration = objDomain.lockoutDuration
    lngHigh = objDuration.HighPart
    lngLow = objDuration.LowPart
    If (lngHigh = 0 And lngLow = 0) Then
        ' There is no domain lockout duration policy.
        ' Locked out accounts remain locked out until reset.
        ' Any user with value of lockoutTime greater than 0
        ' is locked out.
        str64Bit = "1"
    Else
        ' Account for error in IADsLargeInteger property methods.
        If (lngLow < 0) Then
            lngHigh = lngHigh + 1
        End If
        ' Convert to minutes.
        lngDuration = lngHigh * (2^32) + lngLow
        lngDuration = -lngDuration/(60 * 10000000)

        ' Determine critical time in the past. Any accounts
        ' locked out after this time will still be locked out,
        ' unless the account has been reset (in which case the
        ' value of the lockoutTime attribute will be 0).
        ' Any accounts locked out before this time will no
        ' longer be locked out.
        ' Trap error if lockoutDuration -1 (2^63 - 1).
        On Error Resume Next
        dtmLockout = DateAdd("n", -lngDuration, Now())
        If (Err.Number <> 0) Then
            On Error GoTo 0
            ' There is no domain lockout duration policy.
            ' Locked out accounts remain locked out until reset.
            ' Any user with value of lockoutTime greater than 0
            ' is locked out.
            str64Bit = "1"
        Else
            On Error GoTo 0
            ' Convert to UTC.
            dtmLockout = DateAdd("n", lngBias, dtmLockout)

            ' Find number of seconds since 1/1/1601.
            lngSeconds = DateDiff("s", #1/1/1601#, dtmLockout)

            ' Convert to 100-nanosecond intervals. This is the
            ' equivalent Integer8 value (for this time zone).
            str64Bit = CStr(lngSeconds) & "0000000"
        End If
    End If
    Set objDuration = Nothing
    Set objDomain = Nothing

    ' Use ADO to search Active Directory.
    Set adoCommand = CreateObject("ADODB.Command")
    Set adoConnection = CreateObject("ADODB.Connection")
    adoConnection.Provider = "ADsDSOObject"
    adoConnection.Open = "Active Directory Provider"
    adoCommand.ActiveConnection = adoConnection

    ' Search entire domain.
    strBase = "<LDAP://" & strDNSDomain & ">"
    ' Filter on all user objects that are still locked out.
    strFilter = "(&(objectCategory=person)(objectClass=user)(lockoutTime>=" _
        & str64Bit & "))"
    ' Comma delimited list of attribute values to retrieve.
    strAttributes = "distinguishedName"
    ' Construct the LDAP syntax query.
    strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"

    ' Run the query.
    adoCommand.CommandText = strQuery
    adoCommand.Properties("Page Size") = 100
    adoCommand.Properties("Timeout") = 60
    adoCommand.Properties("Cache Results") = False

    Set adoRecordset = adoCommand.Execute

    ' Enumerate the resulting recordset and display
    ' names of all locked out users.
    Wscript.Echo "Locked out users:"
    Do Until adoRecordset.EOF
        strUserDN = adoRecordset.Fields("distinguishedName").Value
        Wscript.Echo strUserDN
        Set objUser = GetObject ("LDAP://" & strUserDN)
        objUser.IsAccountLocked = False
        objUser.SetInfo
        adoRecordset.MoveNext
    Loop

    ' Clean up.
    adoRecordset.Close
    adoConnection.Close

     

     

     

    Già usato sul campo e funzionante... :-)

    credits: Hilltop Lab web site - http://www.rlmueller.net

    Ciao!


    Diego Castelli - MCSA 2003, MCP ISA 2004, MCTS Forefront. ITA: Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 19 ottobre 2010 10:10
  • Ciao, grazie..per il file...

    sto provando a lancialrlo ma mi da errore

    microsoft vbscript runtime error: varaible is undefined:

    'abjUser'
    martedì 19 ottobre 2010 10:49
  • Ho l'impressione che tu abbia fatto male il copia / incolla dello script.

    abjUser non è previsto.

    C'è (correttamente) objUser

    Set objUser = GetObject ("LDAP://" & strUserDN)
        objUser.IsAccountLocked = False
        objUser.SetInfo

    Dovresti verificare...


    Fabrizio Volpe
    MCSE (NT4)(2000)(2003) - MCSA (2003)
    MCTS (SQL 2005)(Exchange 2007)(Windows 2008)
    Fortinet Certified Network Security Professional (FCNSP)
    Fabrizio[_dot_]Volpe[_at_]GMX[_dot_]com
    martedì 19 ottobre 2010 13:36