МАКСИМ КОСТЫШИН
Аудит учетных записей пользователей в Active Directory
Поводом для появления данной статьи послужила информация, опубликованная в журнале «Windows & .Net Magazine/RE» №5 за 2003 год под названием «Утилита LDIF Directory Exchange», подсказавшая решения, которые можно было использовать для того, чтобы обеспечить необходимый уровень автоматизации при проведении аудита учетных записей пользователей в Active Dircectory. В статье было приведено описание основных возможностей двух утилит Ldifde.exe и Csvde.exe, обеспечивающих добавление, изменение и удаление объектов Active Directory.
Информация, изложенная ниже, ориентирована на использование Windows-платформ и предназначена в основном для людей, отвечающих за вопросы компьютерной безопасности аудиторов, специализирующихся в данной области. Надеемся, что статья будет полезна и людям, профессионально занимающимся администрированием локальных сетей.
Постановка проблемных вопросов
В определенный момент времени наступает то критическое состояние для списка пользователей локальной сети предприятия, когда нежелание остановиться и провести анализ его содержимого может повлечь большие затраты и проблемы, нежели своевременное проведение работ по аудиту и устранению выявленных недостатков.
О чем идет речь? В организациях, где число сотрудников, работающих с компьютерной техникой, превышает 100 человек, администрированием занимаются, как правило, два-три сотрудника. Не все они, в силу различных обстоятельств, с достаточным педантизмом относятся к работе по внесению во вновь создаваемые учетные записи информации о владельцах. Кроме того, администраторы обычно не включены в список тех сотрудников, которым обязаны сообщать об увольнениях. Два этих обстоятельства являются основными причинами, из-за которых и происходит накопление учетных записей «мертвых душ».
Попробуем провести некоторую систематизацию наиболее значимых и очевидных проблем для списка пользователей Active Directory.
Во-первых, лишние записи в списке пользователей, которые могут быть:
- учетными записями уволенных сотрудников;
- учетными записями работающих сотрудников, которыми не пользуются и владельцы которых уже вряд ли помнят имена для входа в сеть (не говоря уже о паролях);
- учетными записями заблокированных пользователей, для которых администратор выполнил первый шаг перед удалением, но так и не закончил процедуру;
- учетными записями, созданными для тестирования, которые обычно имеют достаточно высокие привилегии, и которые администратор забыл удалить, после того как процесс тестирования был завершен.
Во-вторых, к недопустимым можно отнести те учетные записи, которые однозначно не идентифицируют владельца, т.е. дополнительная информация в которых не позволяет назвать человека, определить его должность и подразделение, выяснить, как с ним можно связаться (конечно же, речь здесь не идет о стандартных учетных записях типа «Администратор», «Administrator», «Guest», «Гость», и другие).
И в-третьих, выполнение требований политики безопасности предприятия подразумевает, что усилия и администраторов, и пользователей должны быть направлены на то, чтобы учетная запись использовалась только ее владельцем. То есть, если протокол выполнения операций работы с какой-либо из программ показал, что пользователь вошел под учетной записью Иванова Ивана Ивановича, то абсолютно нерационально будет тратить время на дополнительные разборки с ситуациями, когда выясняется, что учетной записью пользуются (из-за недостаточных знаний компьютера или обычной лени) все сотрудники отдела, в котором трудятся пять человек.
Обзор возможностей по работе с учетными записями
Попробуем перечислить те возможности, которые есть под руками у администратора для работы с учетными записями пользователей в Active Directory, и то, насколько они могут быть использованы для проведения аудита.
Оснастка Active Directory – пользователи и компьютеры (которую можно найти в разделе «Администрирование» на сервере). Замечательная возможность для добавления, редактирования свойств и удаления пользователей домена, но, к сожалению, достаточно бесполезная в вопросах проведения ревизии и аудита. К положительным моментам можно отнести возможность проведения экспорта списка пользователей, в который можно включить такие поля, как – «имя входа пользователя», «имя», «выводимое имя», «фамилия», «изменен». Отметим, что поле «изменен» показывает время и дату последних изменений для учетной записи администратором (производилась коррекция настроек) или владельцем (смена пароля).
Системная утилита Net.exe. С помощью этой утилиты вы можете обеспечить работу с данными конкретного пользователя (вариант вызова – «Net user») – получить дату и время последней регистрации в сети, а также определить, когда завершается срок действия пароля.
Программы-сканеры, задача которых заключается в сборе информации о состоянии локальной сети или конкретного компьютера. Среди наиболее интересных программ в плане получения информации о пользователях отметим CFI LANguard Network Security Scanner (ver 3.1.5). Она предоставляет возможность получения достаточно подробной информации об учетных записях, такой как дата и время последней регистрации; данные о том, когда пароль будет просрочен; количество регистраций пользователя в сети; значение индекса попыток входа с некорректным паролем. Кроме того, программа позволяет на основании данных двух сохраненных протоколов сканирования сформировать отчет о расхождениях и получить перечень заведенных и удаленных учетных записей. Справедливости ради отметим, что программа имеет существенные недостатки, особенно для русскоязычной категории пользователей, так как она некорректно обрабатывает русские названия (в именах и дополнительных параметрах учетных записей и пр.). Кроме того, отсутствует возможность сохранить в отдельном файле информацию о найденных расхождениях в списках учетных записей.
Перейдем теперь к рассмотрению утилит, которые, на наш взгляд, предоставляют возможность получения наиболее полной информации по пользователям – Ldifde.exe и Csvde.exe.
Первая утилита позволяет экспортировать данные из Active Directory в файл формата LDIF. Стандарт файла LDIF определен в рекомендациях RFC-2849 для импорта и экспорта данных из каталогов LDAP, таких как Active Directory. После экспорта данных можно использовать LDIF-файл для импорта тех же объектов в другой каталог LDAP.
Csvde.exe – утилита, аналогичная Ldifde.exe (параметры вызова идентичны), в которой используется другой формат хранения данных в текстовом файле – значения разделяются запятыми (CSV-формат). Данный формат поддерживается программой Microsoft Excel, понимающей файлы в CSV-формате, а также Microsoft Access.
Использование утилиты Csvde.exe
Для наглядности, вместо полного описания параметров работы с утилитой приведем пример, на основе которого можно построить запросы для всех необходимых для аудита случаев.
csvde -f USERS_WORK.CSV -b GUEST MICROSOFT *
-r "(&(objectClass=user)(!(objectClass=computer))(!(userAccountControl=514))(!(userAccountControl=66050)))"
-l "DN, memberOf, badPasswordTime, lastLogon, logonCount, sAMAccountName, userAccountControl, whenChanged, whenCreated"
Использование данной команды позволяет сохранить в файле наиболее интересную с точки зрения аудита информацию по действующим (не заблокированным) учетным записям пользователей.
В файл USER_WORK.CSV (параметр -f) будут записаны данные учетных записей пользователей домена. Программа будет производить обработку данных, которые должны быть доступны пользователю GUEST домена MICROSOFT, пароль для которого должен быть введен в процессе выполнения команды (параметр -b).
Из всех объектов LDAP-каталога будут отобраны только учетные записи пользователей, для которых в поле параметра userAccountControl отсутствует информация о блокировке учетной записи (параметр -r). В качестве логических операций для фильтра используются – «!» – логическое НЕТ, «&» – логическое И, «|» – логическое ИЛИ.
В результате выполнения команды в CSV-файле будут сохранены данные полей, перечисленных в параметре -l (список наиболее интересных полей приведен в таблице 1).
Примечание: команда «Net user» некорректно обрабатывает данные поля pwdLastSet, а также некоторые значения времени. Для поля pwdLastSet, в случае если пароль не был задан, выводятся текущие дата и время. Для данных времени вместо значений вида 00:mm AM и 00:mm PM выводятся значения 12:mm AM и 12:mm PM соответственно.
Таблица 1. Описание некоторых полей учетных записей LDAP-каталога
Название поля
|
Пояснение
|
Пример хранимых данных
|
DN
|
Информация, идентифицирующая учетную запись в каталоге LDAP
|
CN=Bill Gates,CN=Users,DC=Microsoft,DC=com
|
memberOf
|
Информация о группах, к которым принадлежит учетная запись
|
CN=Domain Guests,CN=Users,DC=Microsoft, DC=com;CN=Guests,CN=Builtin,DC=Microsoft, DC=com
|
lastLogon
|
Дата и время последнего входа
|
126340325381029632
|
badPasswordTime
|
Дата и время в последний раз был использован неправильный пароль
|
126334418756267552
|
pwdLastSet
|
Дата и время, когда был задан последний пароль
|
126318831197720512
|
accountExpires
|
Дата и время, устанавливающие окончание действия учетной записи
|
0
|
userAccountControl
|
Содержит несколько параметров учетной записи
|
66048
(0x10200 = DONT_EXPIRE_PASSWORD+NORMAL_ACCOUNT)
|
sAMAccountName
|
Имя, под которым происходит регистрация
|
Gates
|
whenChanged
|
Дата и время, когда происходили последние изменения в учетной записи
|
20010511052201.0Z
|
whenCreated
|
Дата и время, когда была создана учетная запись
|
20010511052201.0Z
|
logonCount
|
Количество регистраций
|
28
|
objectClass
|
Класс объекта учетной записи
|
user
|
Форматы представления данных даты и времени
Если вы были наблюдательны, то заметили, что в таблице 1 имеются два различных варианта представления значений даты и времени.
Если формат вида ГГГГММДДЧЧММСС.0Z (тип GeneralizedTime для ASN.1 кодирования), используемый для полей whenChanged, whenCreated по Гринвичу достаточно понятен, то параметры, такие как lastLogon, pwdLastSet, accountExpires, представляют информацию о дате и времени в 32-битном UNIX-формате, и содержат значения секунд, прошедших начиная с 1 января 1970 г., GMT. Для наглядности приведем некоторые значения, которые могут содержаться в файле выгруженных значений для параметров даты и времени в UNIX-формате:
126858492000000000 – соответствует 1.01.2003 00:00
127014876000000000 – соответствует 1.07.2003 00:00
127014912000000000 – соответствует 1.07.2003 01:00
Использование функций преобразований для данных CSV-формата
Информацию по учетным записям, которая выгружена с помощью команды, аналогичной, указанной в начале раздела «Использование утилиты Csvde.exe», можно попытаться загрузить в Microsoft Access, однако, в связи с тем, что программа некорректно обрабатывает символ-разделитель «,» в структурах типа «CN=Bill Gates,CN=Users, DC=Microsoft,DC=com», то лучше воспользоваться аналогичными возможностями программы Microsoft Excel (см. рис. 1). Далее, информацию для удобства использования можно обработать с помощью имеющихся в Microsoft Excel возможностей (макросы, функций).
Рисунок 1. Пример данных CSV-файла после экспорта в Microsoft Excel
На рисунках приведена информация CVS-файла сразу после проведения его загрузки в Microsoft Excel (рис. 1) и после проведенных преобразований (рис. 2). Примеры таких преобразований приведены ниже. Предлагаемые варианты преобразований не претендуют на логическую законченность, но могут являться той основой, с помощью которой за короткий срок может быть разработан необходимый механизм обработки под каждый конкретный случай.
Рисунок 2. Вид информации CSV-файла после преобразований с использованием возможностей Microsoft Excel
Получение данных из структуры поля DN
Для получения имени пользователя из структуры вида «…CN=Имя_пользователя,…» в ячейке A2, может быть использована следующая формула преобразования:
=ПСТР(A2;
НАЙТИ("CN=";A2)+3;
НАЙТИ(","; A2;
НАЙТИ( "CN="; A2 )+3
) - НАЙТИ("CN=";A2) -3
)
Для получения информации из структуры вида «…OU=Данные,…» в ячейке A2 может быть использована следующая формула преобразования:
=ЕСЛИ(ЕПУСТО("0"!A2);"";
ЕСЛИ(ЕОШИБКА(НАЙТИ("OU=";"0"!A2)); "USERS";
ПСТР( "0"!A2;
НАЙТИ("OU=";"0"!A2)+3;
НАЙТИ(","; "0"!A2;
НАЙТИ("OU=";"0"!A2)+3) –
НАЙТИ("OU=";"0"!A2) -3
)
)
)
Обработка данных даты и времени Unix-формата
Получение даты в формате ДД.ММ.ГГГГ на основании данных в Unix-формате предлагаем производить в два этапа. На первом этапе вычисляется количество дней, прошедших с 1 января 2003 г. На втором формируется строка даты в стандартном формате.
Для получения количества дней, прошедших с 1 января 2003 г., на основании данных в ячейке F2, заданных в Unix-формате даты и времени, может быть использована следующая формула преобразования:
= ЕСЛИ(
ЗНАЧЕН(ЛЕВСИМВ(F2;11))=0;
-1;
ОКРУГЛВНИЗ((ЗНАЧЕН(ЛЕВСИМВ(F2;11))- 12685849200)/24/3600; 0)
)
Полученное на первом этапе значение сдвига дней относительно 1 января 2003 г. (в ячейке E2) используется для формирования даты в стандартном формате.
=ЕСЛИ( E2=-1;
"Отсутствует";
СЦЕПИТЬ(
ДЕНЬ(ДАТАЗНАЧ("1/1/2003")+E2);
".";
МЕСЯЦ(ДАТАЗНАЧ("1/1/2003")+E2);
".";
ГОД(ДАТАЗНАЧ("1/1/2003")+E2)
)
Обработка данных даты и времени формата GeneralizedTime для ASN.1 кодирования
Преобразование числа в формате ГГГГММДДММСС.0Z в формат ДД.ММ.ГГГГ ЧЧ:ММ
=СЦЕПИТЬ(
ПСТР(N2;7;2); "."; ПСТР(N2;5;2); "."; ПСТР(N2;1;4); " ";
ПСТР(N2;9;2); ":"; ПСТР(N2;11;2)
)
Обработка значения поля userAccountControl о блокированности записи
Получение данных о состоянии учетной записи по значению поля userAccontControl, содержащемуся в ячейке G2:
=ЕСЛИ(ЕПУСТО(G2);"";
ЕСЛИ(ИЛИG2=514; G2=66050);"Заблокированная";"Действующая")
)
Подробные пояснения и описание формата хранения данных в поле userAccountControl можно найти в статье Microsoft «How to Use the UserAccountControl Flags to Manipulate User Account Properties» (http://support. microsoft.com/?kbid=305144). Отметим только, что если параметры учетной записи не заданы, то десятичное значение userAccountControl равно 512; десятичное значение для блокированной учетной записи при отсутствии других параметров – 514.
Заключение
В статье предложен достаточно простой метод получения данных для аудита учетных записей пользователей в Active Directory, не требующий специальных навыков и знаний языков программирования.
Отметим, что кроме изложенного метода может быть использован вариант, рекомендуемый Microsoft, предполагающий использование интерфейсов службы Active Directory (ADSI), которые предоставляют простой, мощный, объектно-ориентированный доступ к ресурсам Active Directory. Интерфейсы ADSI позволяют программистам и администраторам создавать программы каталога с использованием инструментальных средств высокого уровня, например, Microsoft Visual Basic, Java, C или Visual C++, не заботясь о различиях в пространствах имен. Интерфейсы ADSI полностью поддерживают сценарии, что облегчает их использование администраторами.
И напоследок, в качестве рекомендаций перечислим те нюансы, на которые следует обратить внимание при проведении анализа данных списка пользователей, которые могут указывать на существующие проблемы при использовании учетных записей:
- заблокированные учетные записи (после анализа последней даты регистрации могут быть удалены в случае, если необходимость в них отсутствует);
- данные учетной записи о том, что последняя регистрация в сети происходила три и более месяца назад, могут указывать на то, что сотрудник, которому принадлежала учетная запись, уже уволен;
- если количество регистраций в сети для учетной записи равно нулю, а со времени ее создание прошло свыше одного месяца, то это может говорить о том, что созданная учетная запись оказалась невостребованной;
- большое количество регистраций в сети может указывать на то, что учетная запись используется для входа в сеть не только владельцем.