Эффективный мониторинг событий с помощью двух инструментов.
.
Аудит использования 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).