Разбор событий журнала вручную - процесс очень трудоемкий, требующий времени, поэтому некоторые администраторы предпочитают в него заглядывать не слишком часто. Это создает угрозу безопасности, поскольку иногда даже успешные попытки незаконного проникновения в систему остаются без внимания. В этой статье дан обзор нескольких бесплатных или самых дешевых средств, позволяющих архивировать, объединять и анализировать события в журналах безопасности системы (другие статьи по данной теме перечислены во врезке). Кроме того, я представлю читателям способ внесения событий в базу данных Microsoft Access для создания собственных отчетов в произвольной форме.
Копирование журналов
В статье «Защитим права администратора!», опубликованной в №2 (5) 2000 Windows 2000 Magazine/RE, уже говорилось, что журнал безопасности имеет ограниченный размер. Можно установить максимальный размер журнала и режим циклической перезаписи старых событий более новыми, однако в любом случае необходимо регулярно очищать журнал или перезаписывать устаревшие события. Для этого можно воспользоваться планировщиком заданий (например, службой NT Scheduler) и запускаемым из командной строки архиватором непосредственно перед ежедневным резервным копированием данных на ленту. Если сделать размер журнала таким, чтобы он вмещал среднее количество событий между двумя процедурами резервного копирования, то можно получить последовательный архив журнала безопасности, распределенный по всей ленте с резервными копиями.
Для автоматизации архивирования событий потребуется утилита, которая переписывает журналы в отдельный выходной файл. Ниже описаны четыре таких средства.
Dumpel. Эта утилита широко известна, поскольку она входит в состав Microsoft Windows NT Resource Kit. С ее помощью можно скопировать во внешний файл три журнала событий Windows NT - журнал безопасности, системный журнал и журнал приложений. При этом на события можно наложить фильтр по какому-либо критерию. Выходной файл имеет текстовый формат, каждая строка в нем заканчивается символом новой строки или перевода строки. Например, для записи журнала безопасности системы в файл sec_archive.txt следует набрать команду:
dumpel -l Security -f sec_archive.txt
К сожалению, при этом выходной файл не может иметь формат журналов Windows NT .evt для просмотра в Event Viewer, и в этом основной недостаток Dumpel. Зато можно указать символ-разделитель столбцов (запятая или знак табуляции), воспользовавшись соответственно параметрами «c» или «t». Понятно, что последнее позволяет импортировать такие файлы в базу данных Access, с помощью которой удобно строить собственные отчеты. Однако Dumpel записывает типы событий в различных форматах, что создает значительные неудобства при импорте в Access.
Рисунок 1. Поля описания для свободной формы события 528. |
Описание события строится на основе нескольких текстовых строк. Некоторые строки являются динамическими, например уникальные для каждого повторяющегося кода события. Другие строки - статические, например те поля, которые всегда одинаковы для событий с одинаковым кодом. Описания событий с разными кодами могут содержать различные комбинации таких строк. На Рисунке 1 приведен пример события с кодом 528. Windows NT хранит в журнале только динамические строки, например Administrator, DOMAIN (0x0,0x3779C), 7, User32, Negotiate и TECRA. Статические строки хранятся в отдельном стандартном файле сообщений, в нашем примере это строки Successful Logon:, User Name:, Domain:, Logon ID:, Logon Type:, Logon Process:, Authentication Package: и Workstation Name:. Программы, которые отображают содержимое журнала, например утилита Event Viewer, вынуждены объединять динамические и статические строки из двух источников. Это требование легко выполнимо для событий, записанных компонентами Windows NT, поскольку стандартный файл статических сообщений входит в состав любой системы. Затруднения возникают при попытке просмотреть журнал удаленной системы, где имеются события, записанные, скажем, драйвером или приложением, которые установлены только на данном компьютере, и файлы с их статическими сообщениями недоступны. В этом случае система выдаст предупреждение о недоступности полного текста сообщения, и будут показаны только динамические строки события. Это происходит, например, при просмотре событий Microsoft SQL Server в системе без установленного пакета SQL Enterprise Manager.
Потребность в архивировании журнала возникает, прежде всего, при хранении журналов сразу нескольких систем. Многие администраторы копируют все журналы с нескольких систем в общий каталог для архивирования. С помощью Dumpel можно сохранить журнал удаленной системы, если указать параметр -s и сетевое имя этой системы.
EventSave. Данную утилиту производства компании Frank Heyne Software можно бесплатно загрузить с сайта http://www.heysoft.de. Event Save позволяет скопировать все три журнала в формате .evt, чего так не хватало при работе с утилитой Dumpel. При этом можно централизованно хранить копии журналов разных систем в одном общем архиве. Программа учитывает, когда было зафиксировано событие, и сортирует события по времени, типу журнала, названию компьютера и месяцу. При этом журналы записываются в файлах с именем «год_месяц_компьютер_журнал». Например, при сохранении информации из журналов за декабрь 2000 г. EventSave создаст три файла: 2000_12_oraclesvr_security.evt, 2000_12_oraclesvr_system.evt и 2000_12_oraclesvr_application.evt. Если же файл с таким именем уже существует, то в него будут добавлены только новые события, что позволяет иметь единый файл, вне зависимости от частоты использования EventSave в течение месяца.
Для записи журналов всех систем, входящих в домен, следует указать ключ /A, а для сохранения журналов отдельной удаленной системы - ключ /C и название компьютера. Для записи журналов нескольких компьютеров нужно создать командный файл, который будет вызывать EventSave для каждого компьютера. Например, если нужно сохранить журналы с server2 на сетевом ресурсе eventlogs, который размещен на server1, следует выполнить команду:
eventsave server1eventlogs /Cserver2
Если не указать путь для размещения архивных копий, то EventSave поместит архивные файлы в текущем каталоге, а если не указать название удаленной системы, то программа сохранит журналы локальной системы.
Нельзя не упомянуть об одном свойстве EventSave: после сохранения событий в архив эта утилита всегда «очищает» журналы, вне зависимости от степени их заполнения. Если по какой-либо причине подобные журналы нужно хранить, следует воспользоваться программой EventCopy, которая делает все точно так же, только не «очищает» журналы от заархивированных событий. Для архивирования журналов и локального хранения событий за последний месяц можно настроить локальные журналы на хранение событий не более 30 дней и ежедневно выполнять архивирование событий в общее хранилище с помощью программы EventCopy. Кроме того, компания Frank Heyne Software поставляет продукт EventSave+, который позволяет выбрать конкретный журнал для архивирования каждой системы. Компания ведет гибкую ценовую политику в отношении EventCopy и EventSave+.
Все утилиты линии EventSave используют API протоколирования журналов для Win32, который способен сохранять данные только на локальном жестком диске. Для сохранения событий с удаленного компьютера EventSave обращается к системе с запросом на запись события журнала в каталог \%systemroot%system32 config. Затем EventSave обращается к этому каталогу через сеть и переписывает сохраненные данные в то место, которое было указано в качестве параметра для расположения архива. Для успешной работы EventSave на удаленной системе должна быть запущена служба NT Server, а если на удаленном компьютере был запрещен административный доступ к дискам через сеть, то приходится открыть доступ к системному каталогу и явно указывать путь к ресурсу для EventSave с помощью дополнительного ключа /S. Учетная запись, под которой запускается EventSave, должна иметь право на изменение \%systemroot%system32 config, на чтение раздела реестра HKEY_LOCAL_MACHINESYSTEM CurrentControlSetServicesEventLog, а также право Manage Auditing and Security Log в каждой системе, к которой производится обращение.
NTOLog. Эта утилита выпускается компанией NT OBJECTives. Ее можно бесплатно загрузить с http://www.ntobjectives.com/. Она также позволяет создавать резервные копии локальных и удаленных журналов в формате .evt, которые записываются в виде файлов с именами, построенными на основе времени архивирования ДД-ММ-ГГ-ЧЧ-ММ-СС с расширением .secbak, .sysbak и .appbak в зависимости от типа журнала. С помощью ключей /sec, /sys и /app можно сохранить соответственно журнал безопасности, системный журнал или журнал приложений. Например, команда
ntolog oraclesvr /sec,
выполненная 3 декабря 2000 г. в 10:02:32, создаст файл 03-12-00-10-02-32.secbak в каталоге C:winntsystem32config на сервере OracleSvr. Дополнительный ключ /c позволяет удалить из журнала только что сохраненные события.
NTOLog не позволяет указать место, где записаны скопированные события из журнала, выходные файлы всегда помещаются в каталог C:winntsystem32config архивируемой системы. Это ограничение может вызвать проблемы, если такого каталога в системе не окажется. Разработчики компании NT OBJECTives не торопятся усовершенствовать программу, поэтому некоторые администраторы вынуждены самостоятельно модифицировать ее с помощью двоичного редактора, заменяя злополучную строку C:winntsystem32config на другую. Хотя NTOLog и позволяет сохранять журналы, в этом продукте отсутствуют средства для автоматического сбора и упорядочивания выходных файлов для каждой системы. Чтобы поддерживать централизованный архив копий журналов с разных систем, к имени каждого файла следует добавлять название компьютера, а затем копировать все файлы в общий каталог. NTOLog удобен только для сохранения локальных журналов при очередном резервном копировании локальной системы. В более общих случаях, особенно для создания архива резервных копий журналов нескольких систем, предпочтительнее использовать утилиту EventSave, которая сохраняет набор файлов для каждого компьютера по месяцам.
ELDump. Бесплатная программа ELDump компании Jesper Lauritsen позволяет сохранять журналы в текстовом виде, причем она имеет больше возможностей, чем стандартная утилита Dumpel. ELDump можно загрузить по адресу: http://www.ibt.ku.dk/jesper/eldump/. Этот продукт особенно удобен для импорта журналов в базы данных Access или SQL Server. С его помощью можно просматривать .evt-файлы, сохраненные как самим ELDump, так и другими программами. Имеется возможность выбора тех событий, которые следует сохранять в выходном файле, например события за определенный период времени или с указанным кодом. При этом ELDump позволяет настраивать формат данных в выходном файле, включая форматы даты и времени.
Другой характерной особенностью является метод обработки записей произвольных событий. Чтобы решить описанную ранее проблему нестандартных событий, сгенерированных драйверами независимых производителелй или приложениями, ELDump использует файлы системных сообщений из той же системы, что и удаленные журналы.
Объединение журналов
В статье «Защитим права администратора!» отмечалось, что Windows NT поддерживает изолированные друг от друга журналы, которые не позволяют централизованно контролировать все события в сети, например отслеживать все неудачные попытки входа в систему. Если администратор следит за несколькими системами, то ему потребуется объединить журналы со всех систем в общий файл, который позволит получить представление обо всех событиях, происходивших в сети. Для создания такого файла в формате .evt можно воспользоваться программой MER (Merge Eventlog Records) компании Frank Heyne Software. Она поставляется владельцам зарегистрированных версий программы Report Event для Windows NT/2000. Программа MER способна объединять .evt-файлы, созданные EventSave, в единый выходной файл. Объединенный файл можно просматривать с помощью Event Viewer. В командной строке подстановочными символами задаются имена входных файлов, а также указывается название выходного файла. С помощью ключа /E можно указать перечень кодов сообщений через запятую и тем самым задать фильтр тех сообщений, которые нужно объединить в выходной файл. Например, для того, чтобы в текущем каталоге создать файл со всеми сообщениями о неудачных попытках входа в сеть (события с номерами 529 и 539) в мае 2000 г. на основе журналов безопасности всех сетевых компьютеров, нужно выполнить следующую команду:
mer C:events2000_05*security.evt Неудавшиеся_попытки_войти_в_сеть_в_мае _2000_года.evt /E529,539
Для создания единого файла со всеми зафиксированными системой безопасности событиями, которые хранятся в каталоге программы EventSave, можно задать следующую команду:
mer C:events*security.evt Объединенный_журнал_безопасности.evt
Выше я рассматривал вопросы сохранения и объединения журналов Windows NT в единый файл. Далее речь пойдет о средствах анализа, которые поддерживают различные шаблоны и способны прослеживать различные типы событий в таких файлах.
R528. Эта утилита позволяет проследить сеансы работы пользователей и таким образом выяснить, кто имел доступ к системе во время атаки, разделить обычные и необычные сеансы работы пользователей, а также выявить узкие места системы безопасности и попытки несанкционированного использования учетных записей. R528 просматривает события с кодами 528 (успешный вход в систему) и соответствующие им события с кодом 538 (завершение сеанса) в одном или нескольких .evt-файлах. Эти события были подробно описаны в статье «Контроль использования административных привилегий» в №4(7) журнала Windows 2000 Magazine/RE за 2000 г. Утилита представляет отчет, состоящий из нескольких частей (см. Рисунок 2).
В первой части приводятся данные о каждом сеансе - имя пользователя, название компьютера, на котором пользователь открыл сеанс, тип сеанса, его дата и время, а также дата и время завершения сеанса. К сожалению, Windows NT не всегда фиксирует события с кодом 538, т. е. событий 528 в журналах обычно больше, чем 538.
Во второй части приводится список несоответствий в сеансах пользователей. Важно отметить, что R528 показывает ту систему, в которую пользователь вошел, а не ту, из которой он обратился к другой системе. Так, например, при входе в локальную систему с учетной записью домена фиксируется событие открытия сеанса в локальном журнале безопасности рабочей станции Windows NT, а при обращении к сетевому ресурсу другого сервера событие записывается в журнал именно того сервера, на котором находится данный ресурс.
Утилиту R528 можно использовать для поиска сразу в нескольких файлах .evt, при этом будет создан единый отчет с разделителями в виде табуляций, запятых или символов «точка с запятой». Множество ключей позволяет варьировать вид и степень детализации отчета.
R529. Утилита R529 позволяет отслеживать события с кодом 529, т. е. отказ в доступе. В отчете, фрагмент которого представлен на Рисунке 3, перечисляются все неудачные попытки входа в систему, приводятся использовавшиеся при этом учетные записи, а также указана система, с которой пользователь пытался открыть сеанс и тип самого сеанса - локальный или сетевой. Кроме того, R529 пытается распознать заурядные отказы в доступе и спланированные атаки, причем за атаки принимаются неудавшиеся попытки войти в одну и ту же систему более одного раза в течение пяти минут с использованием одной и той же учетной записи. Если сразу после отказа в доступе встретится событие успешного входа, будет зафиксирована ошибка. Если успешный вход был произведен после серии неудачных попыток входа, то будет зафиксирован факт успешной атаки на систему с помощью подбора паролей. Во всех других случаях фиксируется неудавшаяся атака на систему. Конечно же используемый в утилите R529 метод выявления атак далек от совершенства, но он дает администратору возможность автоматически отсеять типичные ошибки пользователей, связанные с неверным вводом пароля. Два дополнительных раздела отчета R529 позволяют выявить компьютеры и учетные записи, с которыми связаны наиболее частые отказы в доступе.
Рисунок 4. Отчет NTLast. |
NTLast 1.6. Бесплатная утилита NTLast 1.6 компании NT OBJECTives также позволяет анализировать сеансы работы пользователей. Кроме того, NT OBJECTives поставляет коммерческий продукт NTLast 2.85. Конечный результат работы утилиты зависит от параметров в командной строке и напоминает UNIX-команду last. Ключ /n задает количество событий входа и выхода из системы в одном отчете. Ключи /s и /f позволяют выбрать соответственно только успешные и неуспешные попытки начать сеанс. Ключи /r и /i указывают на удаленный и интерактивный (т. е. локальный) сеансы. Если запрашивался вывод всех успешных сеансов, то NTLast постарается отыскать не только события входа в систему, но и соответствующие им события окончания сеанса, как показано на Рисунке 4. При этом NTLast работает так же, как R528.
Утилита NTLast с копиями журналов не работает, поэтому для анализа журнала удаленной системы с ее помощью приходится задавать ключ /m и указывать название удаленной системы. К примеру, для получения информации о 20 последних неудачных попытках обратиться к серверу OracleSvr нужно ввести следующую команду:
ntlast /m oraclesvr /f /r /n 20
R592. В статье «Анализируем журнал безопасности Windows NT» в №3(6) 2000 г. было рассказано, как использовать возможности аудита процессов, которые выполняются на рабочих станциях и серверах. Событие с кодом 592 фиксирует запущенный процесс, сохраняя его название, имя пользователя, выполнившего запуск, а также дату и время запуска. Событие 593 фиксирует завершение процесса. Соответствующие пары событий 592 и 593 напоминают события 528 и 538, которые относятся к сеансам работы пользователя. Утилита R592 также выпускается компанией Frank Heyne Software. Она позволяет выполнять поиск пар событий 592 и 593 в одном или нескольких журналах и создавать отчеты о том, кто, когда и как долго запускал те или иные процессы. Входные и выходной файлы задаются точно так же, как и в утилите R528. Анализ запускаемых процессов особенно важен для контроля деятельности пользователей на рабочих станциях, однако поскольку полный путь до запускаемого процесса не фиксируется, то опытный пользователь может запутать администратора, если просто переименует запускаемый модуль.
Средства для системного журнала
При использовании сервера удаленного доступа RAS могут предприниматься попытки атаки локальной сети организации извне. Утилита R20050 компании Frank Heyne Software составляет отчеты для RAS на основе системных событий RAS с кодами 20048 и 20050. Данная утилита очень похожа на R528 и R592.
Создание собственных отчетов
Упомянутые выше средства позволяют производить анализ журналов и формировать подробные отчеты. Однако все они имеют довольно узкую специализацию. При необходимости проанализировать другие события: например, доступ к файлам и объектам, использование своих полномочий пользователями, изменение учетных записей и проч., можно задействовать ELDump и Access и экспортировать журналы со всех компьютеров в общую базу данных Access. После этого можно будет создавать собственные отчеты о событиях в удобной для администратора форме. Комбинация ELDump и Access позволяет хранить такую базу на любом компьютере без искажения исходного текста любых зафиксированных событий.
Прежде всего, в Access следует создать таблицу, содержащую все стандартные поля, такие, как дата, время, код события, имя пользователя, источник, тип, категория, название компьютера и т. д. После этого необходимо добавить еще 20 или более текстовых полей с произвольными именами, например Строка1, Строка2 и т. д. Эти поля понадобятся для событий с длинными дополнительными текстовыми описаниями. Затем создается командный файл, который запускает ELDump и сохраняет все журналы безопасности в одном текстовом файле. Чтобы ограничить временной промежуток для копируемых событий, можно воспользоваться ключом -A. Например, ключ -A 24 означает необходимость обработки событий за последние 24 часа. При необходимости указания нескольких компьютеров можно многократно задавать ключ -s. Так, команда
eldump -s oraclesvr -s docsvr1 -s docsvr2 -A 24 -t -l sec > events.txt
сохранит в файле events.txt все события, зафиксированные за последние 24 часа в журналах безопасности серверов OracleSvr, DocSvr1 и DocSvr2 в текстовом виде с разделителями в виде знаков табуляции.
Теперь необходимо создать макрос, который будет автоматически импортировать текстовый файл в таблицу Access. Макрос будет запускаться из того же командного файла сразу после выполнения ELDump. После успешного импорта в таблицу файл можно удалить. Наконец, следует организовать автоматический запуск командного файла каждый день в одно и то же время. В результате этих операций в распоряжении администратора окажется база данных всех событий, зафиксированных в журналах безопасности сети. На основе этой базы данных можно составлять разнообразные отчеты, например ежедневный отчет о подозрительных событиях. Такие события можно отсортировать сначала по коду, а затем по названию компьютера. Такая база окажется полезной при анализе уязвимых мест и в некоторых других случаях. Если временной интервал указывается в часах, отдельные события могут дублироваться или пропадать, поэтому в начало командного файла можно вставить утилиту EventSave для копирования всех журналов, и лишь затем использовать ELDump для чтения только что заархивированных .evt-файлов.
Грамотная настройка архивирования журналов Windows NT требует времени, однако все старания окупятся даже при минимальном анализе журналов. Процедуры копирования и анализа событий предоставляют неограниченный простор для фантазий. Администратор, регулярно уделяющий внимание журналам Windows NT, чувствует себя куда спокойнее, поскольку всегда держит ситуацию под контролем.
ОБ АВТОРЕ
Рэнди Франклин Смит - президент компании Monterey Technology Group, занимающейся обучением и консалтингом в области защиты Windows NT. Связаться с ним можно по адресу: rsmith@montereytechgroup.com.
Предыдущие статьи, посвященные работе с журналом безопасности Windows NT, можно найти в вышедших ранее номерах Windows 2000 Magazine/RE:
«Защитим права администратора!» в №2(5) 2000
«Анализируем журнал безопасности Windows NT» в №3(6) 2000
«Контроль использования административных привилегий» в №4(7) 2000
или на Web-сайте журнала http://www.win2000mag.ru.