Аудит учетных записей пользователей в Active Directory

Аудит учетных записей пользователей в Active Directory

Вместо предисловия
Поводом для появления данной статьи послужила информация, опубликованная в журнале Windows & .Net Magazine/RE №5 за 2003 год под названием "Утилита LDIF Directory Exchange", которая подсказала решения, которые можно было использовать для того, чтобы обеспечить необходимый уровень автоматизации при проведении аудита учетных записей пользователей в Active Directory. В статье было приведено описание основных возможностей двух утилит, 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_WOKR.CSV -b GUEST MICROSOFT *
-r "(&(objectClass=user)(! (objectClass=computer))(!(user AccountControl=514))(!(userAccountControl=66050)))"
-l "DN, memberOf, badPassword Time, lastLogon, logonCount, sAM AccountName, userAccountCon- trol, whenChanged, whenCreated"
Использование данной команды позволяет сохранить в файле наиболее интересную с точки зрения аудита информацию по действующим (незаблокированным) учетным записям пользователей.
В файл USER_WORK.CSV (параметр -f) будут записаны данные учетных записей пользователей домена. Программа будет производить обработку данных, которые должны быть доступны пользователю GUEST домена MICROSOFT, пароль для которого должен быть введен в процессе выполнения команды (параметр -b).
Из всех объектов LDAP-каталога будут отобраны только учетные записи пользователей, для которых в поле параметра userAccountControl отсутствует информация о блокировке учетной записи (параметр -r). В качестве логических операций для фильтра используются: "!" — логическое НЕТ, "&" — логическое И, "|" — логическое ИЛИ. В результате выполнения команды в CSV-файле будут сохранены данные полей, перечисленных в параметре -l (список наиболее интересных полей приведен в таблице 1).


Таблица 1.
Описание некоторых полей учетных записей LDAP-каталога

Название поля Пояснение Пример хранимых данных
DN Информация, идентифицирующая учетную запись в каталоге LDAP CN=BillGates,CN=Users, DC=Microsoft,DC=com
memberOf Информация о группах, к которым принадлежит учетная запись CN=DomainGuests,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

Примечание: Команда Net user некорректно обрабатывает данные поля pwdLastSet, а также некоторые значения времени. Для поля pwdLastSet в случае, если пароль не был задан, выводятся текущие дата и время. Для данных времени вместо значений вида 00:mm AM и 00:mm PM выводятся значения 12:mm AM и 12:mm PM соответственно.

Форматы представления данных даты и времени
Если вы были наблюдательны, то заметили, что в таблице 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 возможностей (макросы, функции).
На рисунках приведена информация CVS-файла сразу после проведения его загрузки в Microsoft Excel (рис.1) и после проведенных преобразований (рис.2). Примеры таких преобразований приведены ниже. Предлагаемые варианты преобразований не претендуют на логическую законченность, но могут являться той основной, с помощью которой за короткий срок может быть разработан необходимый механизм обработки под каждый конкретный случай.





Получение данных из структуры поля 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 User AccountControl 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 полностью поддерживают сценарии, что облегчает их использование администраторами.
И напоследок в качестве рекомендаций перечислим те нюансы, на которые следует обратить внимание при проведении анализа данных списка пользователей, которые могут указывать на существующие проблемы при использовании учетных записей:
• заблокированные учетные записи (после анализа последней даты регистрации могут быть удалены в случае, если необходимость в них отсутствует);
• данные учетной записи о том, что последняя регистрации в сети происходила три и более месяцев назад, могут указывать на то, что сотрудник, которому принадлежала учетная запись, уже уволен;
• если количество регистраций в сети для учетной записи равно нулю, а со времени ее создания прошло больше одного месяца, то это может говорить о том, что созданная учетная запись оказалась невостребованной;
• большое количество регистраций в сети может указывать на то, что учетная запись используется для входа в сеть не только владельцем.

Максим Костышин, Maxim_Kostyshin@mail.ru


Компьютерная газета. Статья была опубликована в номере 39 за 2003 год в рубрике безопасность :: разное

©1997-2024 Компьютерная газета