Аудит учетных записей пользователей в 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=Bill Gates,CN=Users, DC=Microsoft,DC=com
memberOf
Информация о группах, к которым принадлежит учетная запись
Дата и время, когда происходили последние изменения в учетной
записи
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-формате даты
и времени, может быть использована следующая формула преобразования:
Полученное на первом этапе
значение сдвига дней относительно 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 полностью поддерживают сценарии, что
облегчает их использование администраторами. И напоследок в качестве
рекомендаций перечислим те нюансы, на которые следует обратить внимание при
проведении анализа данных списка пользователей, которые могут указывать на
существующие проблемы при использовании учетных записей: • заблокированные
учетные записи (после анализа последней даты регистрации могут быть удалены в
случае, если необходимость в них отсутствует); • данные учетной записи о
том, что последняя регистрации в сети происходила три и более месяцев назад,
могут указывать на то, что сотрудник, которому принадлежала учетная запись,
уже уволен; • если количество регистраций в сети для учетной записи равно
нулю, а со времени ее создания прошло больше одного месяца, то это может
говорить о том, что созданная учетная запись оказалась невостребованной; •
большое количество регистраций в сети может указывать на то, что учетная
запись используется для входа в сеть не только владельцем.