Аудит учетных записей пользователей в 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-каталога
Форматы представления данных даты и времени Если вы были наблюдательны, то заметили, что в таблице 1 имеются два различных варианта представления значений даты и времени. Если формат вида ГГГГММДДЧЧММСС.0Z (тип GeneralizedTime для ASN.1-кодирования), используемый для полей whenChanged, whenCreated по Гринвичу достаточно понятен, то такие параметры, как lastLogon, pwdLastSet, accountExpires, представляют информацию о дате и времени в 32-битном UNIX-формате и содержат значения секунд, прошедших начиная с 1 января 1970 г., GMT. Для наглядности приведем некоторые значения, которые могут содержаться в файле выгруженных значений для параметров даты и времени в Unix-формате:126858492000000000 — соответствует 1.01.2003 00:00127014876000000000 — соответствует 1.07.2003 00:00127014912000000000 — соответствует 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;НАЙТИ( "CN CN …OU=Данные,…" в ячейке A2 может быть использована следующая формула преобразования:=ЕСЛИ(ЕПУСТО('0'!A2);"";ЕСЛИ(ЕОШИБКА(НАЙТИ("OU="; '0'!A2)); "USERS";ПСТР( '0'!A2;НАЙТИ("OU ,"; '0'!A2;НАЙТИ("OU OU Отсутствует";СЦЕПИТЬ(ДЕНЬ(ДАТАЗНАЧ("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 полностью поддерживают сценарии, что облегчает их использование администраторами.И напоследок в качестве рекомендаций перечислим те нюансы, на которые следует обратить внимание при проведении анализа данных списка пользователей, которые могут указывать на существующие проблемы при использовании учетных записей:• заблокированные учетные записи (после анализа последней даты регистрации могут быть удалены в случае, если необходимость в них отсутствует);• данные учетной записи о том, что последняя регистрации в сети происходила три и более месяцев назад, могут указывать на то, что сотрудник, которому принадлежала учетная запись, уже уволен;• если количество регистраций в сети для учетной записи равно нулю, а со времени ее создания прошло больше одного месяца, то это может говорить о том, что созданная учетная запись оказалась невостребованной;• большое количество регистраций в сети может указывать на то, что учетная запись используется для входа в сеть не только владельцем.
Компьютерная газета. Статья была опубликована в номере 39 за 2003 год в рубрике безопасность :: разное