Эффективный мониторинг событий с помощью двух инструментов.

.

Аудит использования POP3/IMAP

Для данной статьи была выбрана проблема аудита POP3/IMAP в Microsoft Exchange Server. Этот сценарий может быть полезен, если нужно запретить использование POP3/IMAP по причинам безопасности, или защитить POP3/IMAP с применением Secure Password Authentication или Secure Sockets Layer (SSL).

Прежде, чем использовать LogParser для извлечения каких-либо данных из журнала событий, необходимо выбрать объект поиска. Например, соединения IMAP/POP3 записывают событие с ID 1010 в журнал приложений, и LogParser будет настроен для извлечения этих данных. Отслеживая событие с ID 1010, можно узнать, кто использует каждый протокол, и предпринять соответствующие действия. Определение пользователя приложений - важный первый шаг к их безопасности.

Извлечение данных с помощью LogParser

LogParser экспортирует целевые данные из журнала событий Windows в текстовый файл. Используя синтаксис языка SQL, можно извлечь только нужные поля из событий POP3 и IMAP4, а затем использовать потоки ввода-вывода для анализа данных. Рассмотрим команду целиком, а затем разделим ее на составные части.

logparser -i evt "SELECT
TimeGenerated,SourceName,
EventID,Message FROM
Application WHERE EventID
=1010 AND TimeGenerated > SUB
(SYSTEM_TIMESTAMP(),
TIMESTAMP( '08', 'dd' ) )" -
q | grep 1010 | sed -r
"{s/Client //; s/suc.{0,}
box // ; s/. For.{0,}$//"}|
cscript mail.js admin@mydomain
.com -s "Pop3/ IMAP Users" -
smtp smtp.mydomain.local -p

Сначала указывается команда LogParser. Ключ -i evt назначает журнал событий для ввода. Этот необязательный ключ обеспечивает точное указание источника данных. Затем следует инструкция SQL, в которой предложение SELECT определяет поля, возвращаемые в ответ на запрос. Команда

logparser -h -i:evt

напоминает, что журнал событий содержит поля EventLog, RecordNumber, TimeGenerated, TimeWritten, EventID, EventType, EventTypeName,EventCategory, SourceName, Strings, ComputerName, SID и Message. В данном примере требуются только поля TimeGenerated, SourceName, EventID и Message, поэтому предложение SELECT имеет соответствующий вид.

События безопасности выбранных приложений могут находиться в журналах событий Security, Application или System. Каждое приложение сохраняет события по-разному. Важно идентифицировать все возможные источники собранной информации. В данном случае соединения IMAP/POP3 создают события с ID 1010 в журнале событий Application, поэтому для поиска нужных событий используется инструкция Select с предложениями FROM и WHERE.

В дело вступает Grep

Прежде, чем направить результаты команды LogParser в другие инструменты, следует убедиться, что получены нужные данные, отобразив их в консоли (Экран 1). Объем данных очень велик, поэтому их следует очистить. В данном примере, тело сообщения длинное. В идеале, нужно извлечь только имя пользователя (например, joe@blackstatic.com) и, может быть, адрес клиента. Сделать это можно с помощью инструмента командной строки Grep.


Экран 1. Необработанный вывод LogParser.

Grep позволяет легко удалить строки данных, которые не содержат собственно событий. Для этого следует направить вывод LogParser в команду Grep и отыскать события с ID 1010. Чистка данных начинается с команды, которая удаляет заголовки и подстрочники:

logparser -i evt "select
TimeGenerated,SourceName,Event
ID,Message FROM application
where EventID=1010 OR EventID=
101 7" -q | grep 1010

Очистка с использованием Sed

На Экране 1 показан большой объем избыточных данных. Их полезно удалить, чтобы получить только уникальные данные, относящиеся к событию. С помощью утилиты Sed можно исключить из сообщения все данные, кроме адреса клиента и имени пользователя. После беглого просмотра выясняется, что определив совпадения с помощью инструмента, можно без труда удалить некоторые строки (например, заменить их пустым значением):

  • Удалить слово "Client" и следующий за ним пробел;
  • Удалить строку текста, которая начинается с "successfully" и заканчивается словом "mailbox", а также лишние предшествующие и последующие пробелы;
  • Удалить текст, который следует за именем почтового ящика, начиная с точки, за которой следуют слова "For more information ..."

При поиске совпадений с помощью Sed не имеют значения конкретные поисковые строки. Например, можно искать "mailbox", или даже "box". Важно лишь выбрать строку с достаточным числом символов, чтобы Sed нашел строку в нужном месте, и ни в каком другом.

Теперь следует представить эти совпадения в виде регулярных выражений. Самое сложное регулярное выражение - последнее, в котором удаляется завершающий фрагмент идентификатора сообщения, чтобы избавиться от текста "For more information" и окружающих его знаков препинания. Регулярное выражение

"s/. For.{0,}$//"

соответствует тексту, который начинается с ". For" и продолжается до конца строки (обозначенного символом $). Вместо этого фрагмента вставляется пустота, и фактически текст удаляется. Точка (.) - символ обобщения, поэтому необходимо предварить его обратной косой чертой (). Кроме того, поскольку среди искомых символов есть пробел, всю команду следует заключить в кавычки.

Два других регулярных выражения просты. Вывод одной команды Sed можно направить в другую, но элегантнее объединить замены с помощью скобок, разделяя их точками с запятой:

sed -r "{s/Client //;
s/suc.{0,}box // ; s/.
For.{0,}$//"}

В результате применения полной команды получается гораздо более компактный вывод (Экран 2).


Экран 2. Тот же вывод после чистки с использованием утилиты Sed.

Автоматизация

После того, как из выходных данных выделена полезная информация, можно настроить команду на еженедельный запуск с последующей передачей результатов администратору. Во-первых, LogParser настраивается на извлечение данных только за последнюю неделю. Для этого следует изменить предложение WHERE, чтобы инструкция SELECT отыскивала значения TimeGenerated, возраст которых меньше одной недели:

WHERE TimeGenerated >
SUB(SYSTEM_
TIMESTAMP(), TIMESTAMP( '08',
'dd' ) )

Данная функция возвращает любые события, более новые (с большим значением), чем текущее время минус (SUB) 8 дней (dd). После этого нужно открыть Панель управления и создать новое плановое задание, запустив утилиту Scheduled Tasks и выбрав пункт Add Scheduled Task. Всю команду следует сохранить в пакетном файле, указав, что он запускается один раз в неделю.

Наконец, следует отредактирвоать пакетный файл, чтобы пересылать результаты администратору. Можно составить собственный почтовый сценарий с использованием объектов Collaboration Data Objects (CDO) для генерации почтового сообщения, или применить такой инструмент, как Blat, который автоматически передает SMTP-сообщение с помощью команды Win32. В собственном сценарии следует предусмотреть параметр для приема данных из потока, чтобы направлять вывод в сценарий.

Настройка на конкретное применение

В статье приведен один пример выделения полезных данных о типичном событии и их экспорта в другую систему. Даже если на предприятии не используется POP3/IMAP, этот сценарий легко изменить для любого важного события.

Джефф Феллинг (jeff@blackstatic.com) - редактор Windows IT Security и директор по информационной безопасности и проектированию инфраструктуры компании aQuantive. Он автор книги "IT Administrator's Top 10 Introductory Scripts for Windows" (издательство Charles River Media).