Безопасность DB2 UDB, часть 5: функция аудита DB2

Одним из наименее известных, но очень мощных компонентов IBM® DB2® Universal Database™ для Linux®, UNIX® и Windows® (DB2 UDB), является функция аудита. Функция аудита представляет собой неоценимый ресурс для тех администраторов баз данных, которые понимают важность обеспечения безопасности и нуждаются в отслеживании с минимальными усилиями событий баз данных (неудачных попыток доступа, изменений объектов баз данных) и проверке идентичности пользователей. В этой статье вы познакомитесь с функцией аудита DB2, ее задачами; научитесь использовать и настраивать утилиту при помощи команды db2audit, а также получите ряд советов по эффективному использованию функции аудита.

Тед Дж. Вассерман (Ted J. Wasserman), консультант по базам данных, IBM

Тед Дж. Wasserman's photoТед Дж. Вассерман (Ted J. Wasserman) является консультантом по базам данных в лаборатории IBM в Силиконовой долине, г. Сан-Хосе, штат Калифорния. Тед работает в группе решения технических проблем деловых партнеров DB2 (Business Partner Technical Enablement), где специализируется на помощи деловым партнерам IBM в переносе их приложений и баз данных в DB2 UDB. Тед имеет степень магистра в области информационных технологий и степень бакалавра в области информационных технологий в Королевском университете (г. Кингстон, штат Онтарио, Канада).



09.03.2006

Введение

Функция аудита DB2 UDB – это важный инструмент безопасности в инструментарии администратора базы данных. Эта функция создает протокол аудита и предоставляет администратору базы данных возможность вести его для серий предварительно заданных событий базы данных. Она может протоколировать такие события базы данных, как проверка авторизации, управление объектами базы данных, управление безопасностью, системное администрирование и идентификация пользователей. В статье показано, как наиболее эффективно использовать эту функцию для отслеживания и исследования подозрительной системной активности.

Аудит работает на уровне экземпляра, это означает, что после запуска функция отслеживает активность для всех баз данных в этом экземпляре. Функция аудита может быть запущена и остановлена отдельно от базы данных. Например, если вы остановили экземпляр при помощи команды db2stop, функция аудита не завершается автоматически; ее следует остановить отдельно, выполнив команду db2audit stop. Настраивать и использовать функцию аудита могут только пользователи с полномочиями SYSADM (системного администратора). Описание уровня полномочий SYSADM и принципа назначения их группам пользователей см. в части 4 данной серии статей. Эту информацию также можно найти в документации DB2 UDB.

На рисунке 1 показана высокоуровневая диаграмма функции аудита и ее место в общей архитектуре СУБД DB2 UDB.

Рисунок 1. Функция аудита DB2 в архитектуре DB2 UDB
Функция аудита DB2 в архитектуре DB2 UDB

Описывающий синий овал на диаграмме представляет сервер базы данных DB2. Вписанный красный прямоугольник представляет экземпляр DB2. Как показано на рисунке, функция аудита работает на уровне экземпляра, обслуживая все базы данных этого экземпляра. Для настройки параметров аудита используется файл конфигурации.

После запуска функции аудита сгенерированные записи аудита записываются в буферную область, а затем переносятся на диск в файл аудита. По завершении периода аудита файл аудита может быть конвертирован из собственного "машинного" формата в пригодный для чтения текстовый файл. Записи аудита могут быть также по желанию загружены в таблицы DB2, благодаря чему администратор получает возможность запрашивать данные, используя SQL, и создавать настраиваемые отчеты.

Файлы, создаваемые функцией аудита, сохраняются и ведутся в папке безопасности экземпляра. На рисунке 2 показан пример содержимого этой папки на Windows-сервере для экземпляра под названием DB2.

Рисунок 2. Папка безопасности на Windows-сервере
Папка безопасности на Windows-сервере

В файле db2audit.cfg сохраняется информация о параметрах настройки функции аудита. Это двоичный файл, который следует изменять только с использованием синтаксиса командной строки db2audit. В файле db2audit.log сохраняются "машинные" записи аудита. Записи аудита могут быть извлечены из этого файла в текстовый файл, который в дальнейшем можно будет проанализировать. Файл db2audit.log не существует по умолчанию и не создается до тех пор, пока не будут сгенерированы записи аудита или не произойдет сброс буфера аудита. При создании нового экземпляра для этого файла устанавливаются разрешения "чтение/запись"; пользователям не рекомендуется изменять эти разрешения.

Существует два основных аспекта настройки функции аудита. Первый относится к настройке буферной области, а второй касается настройки типа событий, подлежащих аудиту. В следующих двух разделах более подробно рассматриваются эти настройки.


Настройка буфера аудита

Записи аудита перед сбросом на диск обычно пишутся в буферную область памяти. Размер буфера определяется параметром конфигурации администратора базы данных AUDIT_BUF_SZ. Этот параметр определяет количество страниц размером 4 К, которые отводятся под размещение буфера аудита. Выбор размера буфера может в значительной степени влиять на производительность, поскольку после начала аудита в протокол аудита может быть внесено много записей.

Если размер буфера установлен равным 0, происходит синхронная запись протокола, и буфер аудита не используется. В этой конфигурации событие, вызвавшее генерацию записи аудита, до возвращения статуса должно ожидать, пока запись аудита не будет перенесена на диск. Ожидание, связанное с каждой записью, вызывает снижение производительности DB2. Если размер буфера больше 0, записи аудита пишутся не синхронно. То есть, они остаются в буфере аудита до тех пор, пока не будут сброшены на диск. Во избежание продления периода буферизации DB2 регулярно выполняет принудительную запись протокола аудита. Буфер аудита можно сбросить также вручную при помощи команды сброса db2audit. При асинхронной записи протокола, событию, вызвавшему генерацию протокола аудита, не приходится ожидать возвращения статуса до завершения записи протокола аудита на диск.

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

update dbm cfg using audit_buf_sz 10
db2stop
db2start

Обратите внимание, что после обновления этих параметров вам следует перезагрузить экземпляр, чтобы изменение параметров возымело эффект.

Важный фактор, который следует принять во внимание, делая выбор между синхронным и асинхронным способом записи протокола - это последствия, которые могут произойти в случае ошибки администратора базы данных. Если ошибка случается при использовании асинхронной записи протокола, то несколько записей аудита могут быть потеряны, потому что перед записью на диск они находятся в буфере. Если ведется синхронная запись протокола, то может быть потеряна только одна запись, ведь ошибка может помешать, самое большее, записи одного события аудита.


Настройка охвата и статуса аудита

Функция аудита может отслеживать различные типы событий базы данных. Полезно рассмотреть эти типы событий до изучения точного синтаксиса команды db2audit, используемой для настройки функции.

В таблице 1 перечисляются различные типы событий базы данных, которые могут отслеживаться и описываться при генерации записи аудита. Слово в круглых скобках, которое следует за типом события - это соответствующее ключевое слово, которое используется в конфигурационном выражении команды db2audit.

Таблица 1. События базы данных, которые могут отслеживаться функцией аудита
Тип событияОписание
Аудит
(AUDIT)
  • Генерирует записи в том случае, если изменяются параметры аудита или осуществляется доступ к протоколу аудита.
Проверки авторизации
(CHECKING)
  • Генерирует записи в процессе проверки авторизации при попытке доступа или манипулирования объектами базы данных или функциями
Управление объектами
(OBJMAINT)
  • Генерирует записи при создании или удалении объектов базы данных
Обслуживание безопасности
(SECMAINT)
  • Генерирует записи при назначении или отзыве разрешений для объекта или базы данных, а также полномочий администратора DBADM
  • Записи также генерируются, если изменяются параметры конфигурации безопасности администратора базы данных SYSADM_GROUP, SYSCTRL_GROUP или SYSMAINT_GROUP
Администрирование системы
(SYSADMIN)
  • Генерирует записи при выполнении действий, требующих полномочий SYSADM, SYSMAINT или SYSCTRL
Идентификация пользователя
(VALIDATE)
  • Генерирует записи при аутентификации пользователей или извлечении системной информации, связанной с безопасностью
Содержание операции
(CONTEXT)
  • Генерирует записи, показывающие содержание операции при выполнении действий с базой данных
  • Эта категория позволяет лучше интерпретировать записи аудита. При использовании вместе с полем коррелятора протокола, группа событий отслеживается вплоть до отдельной операции, которая может предоставить необходимые для анализа результатов аудита сведения.

Например, если вам нужно выполнить аудит только подключений к базе данных и типа событий "системное администрирование", то при настройке функции вам нужно определить только типы событий VALIDATE и SYSADMIN.

Статус событий

После того, как вы выбрали нужный тип событий, подлежащих аудиту, вы можете также определить, какие события будут заноситься в протокол: только успешные, только неудачные либо и те, и другие. Запись успешных событий существенно увеличивает количество генерируемых записей, поэтому используйте эту опцию разумно.

Обработка ошибок

Вы можете также настроить способ обработки функцией аудита ошибок при помощи выражения ERRORTYPE команды db2audit. Можно выбрать один из двух вариантов: ошибки функции аудита возвращаются пользователю (AUDIT) или игнорируются (NORMAL). В первом случае все ошибки, включая те, которые происходят в самой функции аудита, обрабатываются DB2, и все отрицательные коды SQLCODE сообщаются приложению. Во втором случае любые ошибки, генерируемые функцией аудита, игнорируются, и приложению возвращаются только те коды SQLCODE, которые соответствуют ошибкам, связанным с выполнением операций.


Синтаксис команды db2audit

Теперь, когда вам известны различные типы событий, которые могут отслеживаться, а также параметры статуса и обработки ошибок, давайте рассмотрим синтаксис данной команды для настройки и использования функции аудита. В листинге 1 показан синтаксис команды db2audit, который используется для настройки и работы функции аудита.

Листинг 1. Синтаксис утилиты db2audit
>>-db2audit--+-configure--+-reset-------------------+--------------------------+-><
               |            '-| Audit Configuration |-'                          |
               +-describe--------------------------------------------------------+
               +-extract--| Audit Extraction |-----------------------------------+
               +-flush-----------------------------------------------------------+
               +-prune--+-all--------------------------------------------------+-+
               |        '-date--YYYYMMDDHH--+--------------------------------+-' |
               |                            '-pathname--Path_with_temp_space-'   |
               +-start-----------------------------------------------------------+
               '-stop------------------------------------------------------------'
  
  Audit Configuration:
  
  |--+-----------------------------+--+---------------------+----->
     '-scope--+-all--------------+-'  '-status--+-both----+-'
              | .-,------------. |              +-success-+
              | V              | |              '-failure-'
              '---+-audit----+-+-'
                  +-checking-+
                  +-objmaint-+
                  +-secmaint-+
                  +-sysadmin-+
                  +-validate-+
                  '-context--'
  
  >--+-----------------------+------------------------------------|
     '-errortype--+-audit--+-'
                  '-normal-'
  
  Audit Extraction:
  
  |--+-file--output-file---------------------+-------------------->
     '-delasc--+---------------------------+-'
               '-delimiter--load-delimiter-'
  
  >--+----------------------------+------------------------------->
     |           .-,------------. |
     |           V              | |
     '-category----+-audit----+-+-'
                   +-checking-+
                   +-objmaint-+
                   +-secmaint-+
                   +-sysadmin-+
                   +-validate-+
                   '-context--'
  
  >--+-------------------------+--+---------------------+---------|
     '-database--database-name-'  '-status--+-success-+-'
                                            '-failure-'

Чтобы лучше понять, как использовать синтаксис команды, в этой статье приводится несколько примеров. В первом примере требуется настроить функцию аудита на протоколирование только неудачных событий AUDIT и VALIDATE, используя алгоритм обработки ошибок NORMAL. Чтобы решить эту задачу, выполните следующую команду db2audit:

db2audit configure scope audit, validate status failure errortype normal

Чтобы настроить функцию аудита на отслеживание любых типов событий с протоколированием как успешных, так и неудачных попыток, а также использовать алгоритм AUDIT для обработки ошибок, выполните следующую команду db2audit:

db2audit configure scope all status both errortype audit

Для просмотра текущих параметров конфигурации и статуса воспользуйтесь следующей командой db2audit:

db2audit describe

Вывод этой команды показан в листинге 2:

Листинг 2. Вывод описываемой команды db2audit в среде Windows
C:\Program Files\IBM\SQLLIB\DB2\security>db2audit describe
DB2 AUDIT SETTINGS:

Audit active: "TRUE "
Log errors: "TRUE "
Log success: "FALSE "
Log audit events: "FALSE "
Log checking events: "TRUE "
Log object maintenance events: "FALSE "
Log security maintenance events: "FALSE "
Log system administrator events: "FALSE "
Log validate events: "FALSE "
Log context events: "FALSE "
Return SQLCA on audit error: "FALSE "

AUD0000I  Operation succeeded.

Изучая вывод, представленный в листинге 2, вы можете видеть, что события были внесены в протокол, независимо от того, была запущена функция аудита или нет. Чтобы сбросить текущие параметры конфигурации функции аудита и вернуть их к исходным значениям (SCORE включает все категории, кроме CONTEXT, STATUS равен FAILURE, значение ERRORTYPE - NORMAL, а функция аудита выключена –OFF), выполните следующую команду:

db2audit configure reset

Эта команда также создает новый файл конфигурации функции аудита, если оригинальный был утрачен или поврежден.

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

db2audit start

После того, как вы закончите действия аудита и захотите остановить функцию аудита, выполните следующую команду:

db2audit stop

Экспорт записей аудита

Записи аудита в файле db2audit.log хранятся в "машинном" формате. Вы можете извлечь все записи аудита из этого файла в текстовый файл, который затем можно будет проанализировать. Вы можете также выбрать вариант извлечения записей аудита в файлы ASCII с разделителями, которые затем можно загрузить в реляционные таблицы DB2 для анализа и запросов.

Перед извлечением записей аудита из файла db2audit.log, сбросьте любые оставшиеся в буфере файлы на диск, выполнив следующую команду:

db2audit flush

Пользовательская настройка места размещения файлов db2audit

Совет: Чтобы выяснить, каким образом можно контролировать место сохранения файлов аудита, обратитесь к технической записке по DB2 "How do I control where the db2audit files go? (Каким образом я могу контролировать место размещения файлов db2audit?)"

Чтобы извлечь записи из файла db2audit.log в текстовый файл, выполните следующую команду db2audit:

db2audit extract file c:\temp\audit_01_22_2006.aud

где "c:\temp\audit_01_22_2006.aud" – это путь и имя для выбранного файла вывода. Если вы не определили имя файла, записи записываются в файл db2audit.out в подкаталоге безопасности $INSTHOME/sqllib, где INSTHOME – это домашний каталог экземпляра. Если не задан каталог, файл вывода записывается в текущий рабочий каталог.

Чтобы извлечь записи из файла протокола db2audit.log в файл ASCII с разделителями, который впоследствии может быть загружен в реляционные таблицы DB2, выполните следующую команду db2audit:

db2audit extract delasc delimiter !

Вывод будет помещен в отдельные файлы (один файл для каждого типа события) в подкаталог безопасности каталога sqllib. Используются следующие имена файлов:

  • audit.del
  • checking.del
  • objmaint.del
  • secmaint.del
  • sysadmin.del
  • validate.del
  • context.de

Если в предыдущую команду вставить выражение DELIMITER, а затем указать новый разделитель полей (в данном случае восклицательный знак "!"), можно изменить разделитель полей по умолчанию для функции аудита (0хff) при извлечении данных из протокола аудита.

Вы также можете ограничить количество и тип извлекаемых записей аудита, определив соответственно выражения CATEGORY, DATABASE и STATUS. Выражение CATEGORY позволяет определить, какие категории событий аудита следует извлечь из протокола аудита. Если вы ничего не определите в этом выражении, все категории будут пригодны для извлечения. Выражение DATABASE позволяет ограничить извлечение записей определенной базой данных. Если вы ничего не определите в этом выражении, то записи аудита для всех баз данных экземпляра будут рассматриваться как пригодные для извлечения. Выражение STATUS позволяет определить, хотите ли вы извлечь успешные, неудачные или как успешные, так и неудачные события. Если вы ничего не определите в этом выражении, все записи будут рассматриваться как пригодные для извлечения.

Предположим, например, что вы хотите извлечь только записи о событиях типа AUDIT в файл формата ASCII с разделителем полей в виде символа восклицательного знака "!" . Предположим далее, что вы хотите извлечь только записи, относящиеся к базе данных SAMPLE, причем вас интересуют только события со статусом FAILURE. Для решения этой задачи выполните следующую команду db2audit:

db2audit extract delasc delimiter ! category audit database sample status failure

Важное исправление

До версии DB2 UDB V8.1 Fix Pak 10 фаза извлечения могла поглощать много ресурсов ЦПУ. Это было исправлено в пакете исправлений Fix Pak 10. Более подробно это описано в информации APAR .

Чтобы извлечь только события аудита SYSADMIN в обычный текстовый файл с названием audit.db2; причем только события, относящиеся к базе данных SAMPLE, включая события со статусом и SUCCESS, и FAILURE, выполните следующую команду db2audit:

db2audit extract file audit.db2 category sysadmin database sample

Удаление ненужных записей в файле db2audit.log

Файл протокола аудита (db2audit.log) может очень быстро разрастись. Периодически удалять из файла потерявшие актуальность записи - очень хорошая мысль. Удаление из протокола аудита тех записей, которые уже были извлечены в текстовый файл, предотвращает также повторное извлечение одних и тех же записей . Чтобы удалить ненужные записи в файле db2audit.log, выполните следующую команду db2audit:

db2audit prune date YYYYMMDDHH

где YYYYMMDDHH означает текущий год, месяц, день и час. Все записи вплоть до указанных даты и времени, будут удалены. Запишите эту дату и храните под рукой, если сохраняете записи аудита в таблицах DB2.

Чтобы удалить все записи, выполните следующую команду db2audit:

db2audit prune all

Формат записи аудита

Текстовый файл, получаемый в результате процесса извлечения, состоит из нескольких записей аудита, разделенных строкой символов пробела. В листинге 3 показан фрагмент записей аудита, которые были извлечены при помощи опции FILE.

Листинг 3. Фрагмент записей аудита, извлеченных при помощи опции FILE
timestamp=2006-02-06-11.54.52.443000;category=AUDIT;audit event=START;
  event correlator=0;event status=0;
  userid=tedwas;authid=TEDWAS;

timestamp=2006-02-06-11.55.14.664000;category=AUDIT;audit event=CONFIGURE;
  event correlator=0;event status=0;
  userid=tedwas;authid=TEDWAS;

timestamp=2006-02-06-11.55.19.371000;category=AUDIT;audit event=CONFIGURE;
  event correlator=0;event status=0;
  userid=tedwas;authid=TEDWAS;

timestamp=2006-02-06-11.55.30.718000;category=AUDIT;audit event=FLUSH;
  event correlator=0;event status=0;
  userid=tedwas;authid=TEDWAS;

Рассматривая эти записи, вы можете видеть, что пользователь 'TEDWAS' сначала запустил утилиту аудита, затем дважды изменил настройки, а в заключение сбросил буфер аудита. Все эти события произошли в один выделенный интервал времени, как показывает скученность значений в поле TIMESTAMP. По значению AUDIT в поле категории вы можете также заметить, что эти события относятся к типу событий AUDIT.

Листинг 4 демонстрирует фрагмент тех же записей, которые были извлечены из протокола аудита на этот раз при помощи опции DELASC с разделителем полей "точка с запятой (;)" Записи были взяты из файла audit.del, который был сгенерирован в процессе извлечения.

Листинг 4. Фрагмент записей аудита, извлеченных при помощи опции DELASC
;2006-02-06-11.54.52.443000;,;AUDIT;,;START;,0,0,;tedwas;,;TEDWAS;
;2006-02-06-11.55.14.664000;,;AUDIT;,;CONFIGURE;,0,0,;tedwas;,;TEDWAS;
;2006-02-06-11.55.19.371000;,;AUDIT;,;CONFIGURE;,0,0,;tedwas;,;TEDWAS;
;2006-02-06-11.55.30.718000;,;AUDIT;,;FLUSH;,0,0,;tedwas;,;TEDWAS;
;2006-02-06-11.56.04.346000;,;AUDIT;,;EXTRACT;,0,0,;tedwas;,;TEDWAS;

Обратите внимание, что в конце листинга 4 появляется дополнительная запись. Эта запись была сгенерирована, когда создавался текстовый файл по команде из листинга 3. Дополнительная запись была сгенерирована потому, что в момент извлечения функция аудита была настроена на протоколирование всех событий аудита.

В таблице 2 приведены значения всех полей записей аудита для событий типа AUDIT, представленных в листингах 3 и 4.

Таблица 2. Описание формата записей аудита для типа событий AUDIT
НазваниеФорматОписание
Метка времениCHAR(26)Дата и время события аудита.
КатегорияCHAR(8)Категория события аудита. Возможные значения: AUDIT.
Событие аудитаCHAR(32)Конкретное событие аудита. Возможные значения: CONFIGURE, DB2AUD, EXTRACT, FLUSH, PRUNE, START, STOP, and UPDATE_ADMIN_CFG.
Коррелятор событияINTEGERИдентификатор корреляции для аудируемой операции. Может использоваться для идентификации записей аудита, связанных с отдельным событием.
Статус событияINTEGERСтатус события аудита, представленный кодом SQLCODE, где:
  • Успешное событие >= 0
  • Неудачное событие < 0
Идентификатор пользователяVARCHAR (1024)Идентификатор пользователя во время события аудита.
Идентификатор авторизацииVARCHAR (128)Идентификатор авторизации во время события аудита.

Подробное описание раскладки записей аудита для других типов событий можно найти в документации DB2 UDB .


Загрузка извлеченных записей аудита в таблицы DB2

После того, как вы извлекли записи аудита в файлы ASCII с разделителем, вы можете загрузить файлы ASCII в таблицы DB2. Затем вы можете запустить для этой таблицы предложение SQL и выполнить расширенный анализ данных. Вы можете сначала создать таблицы, которые будут содержать данные аудита. Наилучший метод – создание таких таблиц в отдельной схеме, чтобы изолировать данные от неавторизованных пользователей, сохранив их для целей организации. О том, какие именно предложения CREATE TABLE следует использовать, можно прочитать в документации DB2 UDB .

После того, как вы создали необходимые таблицы, вы можете загрузить в них данные из файлов ASCII с разделителем, которые были созданы в процессе извлечения. Чтобы загрузить данные в таблицы, воспользуйтесь утилитой LOAD. Например, чтобы загрузить в таблицу AUDIT данные из соответствующего файла audit.del, созданного в процессе предыдущего извлечения, выполните следующую команду LOAD:

LOAD FROM audit.del OF del MODIFIED BY CHARDEL! INSERT INTO MYSCHEMA.AUDIT

где MYSCHEMA - это схема, в которой размещена ваша таблица аудита, а AUDIT – это имя таблицы. Обратите внимание на использование выражения MODIFIED BY CHARDEL! Поскольку при создании файла ASCII с разделителями, содержащего извлеченные данные, был использован разделитель полей, отличный от ожидаемого по умолчанию разделителя (запятая), утилита LOAD была предварительно настроена на другой разделитель.

Лучше всего удалить из таблицы, в которую вы загрузили данные, любые ненужные строки, чтобы убедиться в том, что впоследствии вы не загрузите в таблицу дублирующие строки. Файлы аудита с извлеченными данными могут содержать записи, которые были записаны уже после удаления ненужных записей из протокола аудита, такие записи следует удалить из таблицы, чтобы они не влияли на результаты анализа. Следующая команда удаляет из таблицы AUDIT те записи, которые имеют метку времени с большим значением, чем метка времени, использовавшаяся при удалении ненужных записей из файла протокола аудита.

DELETE FROM MYSCHEMA.audit WHERE TIMESTAMP > TIMESTAMP('YYYYMMDDHH0000')

где MYSCHEMA – это схема, в которой размещается таблица аудита, AUDIT – это имя таблицы, а YYYYMMDDHH0000 – значение, которое вы определили при удалении лишних записей из протокола аудита.

Таким же способом вы можете загрузить в таблицы данные для других типов событий. Поищите в документации по DB2 более подробную информацию о том, какие команды LOAD можно использовать.


Работа с данными аудита в таблицах DB2

Загрузка данных аудита в таблицы имеет много преимуществ. Конечно, вы могли бы написать программу для анализа содержимого текстовых файлов с извлеченными записями аудита; но если данные аудита размещены в реляционных таблицах, обычно гораздо проще и быстрее создать и выполнить запрос.

Предположим, вы настроили функцию аудита на аудит как успешных, так и неудачных попыток изменения конфигурации функции аудита. По истечении периода мониторинга вы сбрасываете буфер аудита, извлекаете записи аудита в файлы ASCII с разделителями, а затем загружаете эти файлы в таблицы DB2. Если, например, вы хотите запросить данные, чтобы увидеть пять идентификаторов пользователей, которые сделали больше всего неудачных попыток изменить конфигурацию функции аудита, вы можете выполнить следующий запрос:

SELECT userid, COUNT(*) AS count FROM MYSCHEMA.audit 
WHERE status < 0 AND event='CONFIGURE' 
GROUP BY userid ORDER BY count FETCH FIRST 5 ROWS ONLY

Вы можете также решить использовать программы извлечения данных для выявления закономерностей в данных аудита. Для этого вида анализа особенно рекомендуется семейство программных продуктов DB2 Intelligent Miner .


Обобщим полученные навыки

Теперь, когда вы научились настраивать и использовать функцию аудита, давайте рассмотрим пример, который подробно описывает весь процесс от начала до конца.

Предположим, что вы получили анонимное предостережение от одного из пользователей вашего приложения, о том, что пользователь с именем SAM в обеденный перерыв пытается получить доступ к объектам и таблицам базы данных, доступ к которым ему не разрешен. Вы принимаете решение понаблюдать за экземпляром DB2 во время обеденного перерыва на предмет выявления неудачных попыток проверки авторизации.

Вы начинаете с настройки функции аудита на аудит событий типа CHECKING, запись только неудачных попыток и использование алгоритма обработки ошибок NORMAL.

db2audit configure scope checking status failure errortype normal

Вы обеспечиваете асинхронное протоколирование аудита, устанавливая размер параметра администратора базы данных AUDIT_BUF_SZ на 40:

update dbm cfg using audit_buf_sz 40
db2stop
db2start

Вы ждете до 12 часов дня, а затем запускаете функцию аудита:

db2audit start

На протяжении периода аудита пользователь SAM переходит к серверу базы данных и выполняет вход в систему. Он открывает окно командной строки, подключается к базе данных SAMPLE и делает несколько неудачных попыток изменить оклады сотрудников в таблице EMPLOYEE. Он выполняет следующие предложения SQL:

connect to sample user sam using bad123boy
update tedwas.employee set salary = salary * 1.5

, получив в ответ сообщение об ошибке:

DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0551N  "SAM" does not have the privilege to perform operation "UPDATE" on
object "TEDWAS.EMPLOYEE".  SQLSTATE=42501

, показывающее, что он не имеет разрешения на обновление этой таблицы, он быстро выходит из системы сервера и уходит, думая, что никто ничего не заметил.

Проходит час, и вы решаете проверить содержание протокола аудита. Вы сбрасываете буфер аудита, чтобы убедиться в том, что все записи аудита, которые все еще находятся в буфере, были записаны на диск:

db2audit flush

Извлекаете записи из файла db2audit.log в файл ASCII с разделителями, используя в качестве символа разделителя полей точку с запятой, при этом выбираете только события CHECKING, имеющие статус FAILURE:

db2audit extract delasc delimiter ; category checking database sample status failure

Поскольку записи аудита теперь доступны в текстовом формате, вы решаете удалить ненужные записи из протокола аудита, чтобы сохранить его управляемым и предотвратить дублирование записей:

db2audit prune date 2006020613

У вас есть предварительно созданные для работы с данными аудита таблицы DB2, и вы загружаете извлеченные данные из файла checking.del в таблицу CHECKING при помощи следующей команды:

LOAD FROM checking.del OF del MODIFIED BY CHARDEL; INSERT INTO audit.checking

Чтобы избежать использования в анализе дубликатов записей, вы удаляете из таблицы CHECKING строки, значение метки времени которых превышает значение метки времени, соответствующей удалению лишних записей из протокола аудита:

DELETE FROM audit.checking WHERE TIMESTAMP > TIMESTAMP('20060206130000')

Вы стараетесь получить дополнительную информацию о неудачных попытках авторизации, запрашивая данные в таблице AUDIT.CHECKING:

SELECT category, event, appid, appname, userid, authid FROM audit.checking

Из результатов запроса, показанных в листинге 5, вы можете видеть, что была сгенерирована одна запись аудита для неудачной попытки обновления состояния.

Листинг 5. Результат запроса таблицы CHECKING
SELECT category, event, appid, appname, userid, authid FROM audit.checking


CATEGORY EVENT             APPID                    APPNAME           AUTHID
------------------------  -----------------------  ----------------  ------------
CHECKING CHECKING_OBJECT  *LOCAL.DB2.060206220334   db2bp.exe         SAM

1 record(s) selected.

Вы принимаете решение завершить анализ аудита на сегодня и остановить функцию аудита при помощи следующей команды (чтобы больше не генерировались записи аудита):

db2audit stop

Теперь, когда ваши подозрения подтвердились, вы хотите продолжить сбор доказательств, чтобы представить их руководству для принятия мер по исправлению ситуации.

Хотя этот сценарий развития событий очень прост, он был написан для того, чтобы провести вас через весь процесс. В этом случае анализ не представляет сложности. Его цель – подтверждение того, что пользователь SAM пытается изменить таблицы, изменять которые он не имеет права. Сложность анализа в вашем собственном окружении может значительно отличаться от описанной, в зависимости от того, что вы пытаетесь выяснить.


Заключение

Теперь вы можете чувствовать себя в своей тарелке при более глубоком изучении функции аудита и создании новых процессов и процедур аудита для вашей среды. Хотя ответный мониторинг непредвиденных событий необходим, проактивный аудит также должен стать важным компонентом вашего плана обеспечения безопасности.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=145867
ArticleTitle=Безопасность DB2 UDB, часть 5: функция аудита DB2
publish-date=03092006