Представление о файлах политики Tripwire
Файлы политики определяют для Tripwire, что следует и чего не следует искать. Обычно это шифрованные файлы в двоичном формате, но вы можете воспользоваться командой twadmin -m p current- policy.txt, чтобы сохранить текущий двоичный файл политики в текстовом формате и отредактировать его. Синтаксис текстового файла может оказаться весьма сложным для понимания. Он содержит определения переменных и определения правил. Каждое правило содержит две главные части: имя файла или директории и маску свойств. Ниже приведена часть примера файла политики.
/bin/login -> $(SEC_CRIT) ; /bin/ls -> $(SEC_CRIT) ; /bin/mail -> $(SEC_CRIT) ; /bin/more -> $(SEC_CRIT) ; /bin/mt -> $(SEC_CRIT) ; /bin/mv -> $(SEC_CRIT) ;
Обратите внимание, как имя файла или имя объекта отделяется от маски свойств символом -. SEC_CRIT представляет собой переменную, определенную в начале файла, которая задает разрешенную маску свойств. Обратите также внимание, что каждое правило завершается точкой с запятой (;).
Разрешенная маска свойств. Маски Tripwire управляют тем, какие свойства проверяются в каждом файле. Свойства, обозначенные знаком (+), проверяются, обозначенные знаком (-) - нет. Свойства, которые не обозначены соответствующим знаком, предположительно могут быть проверены. В этом случае все свойства, которые не включены в командную строку, игнорируются. В таблице 12.2 показаны описания каждого свойства.
a | Последнее время доступа. |
b | Блоки с выделенной памятью. |
c | Создать/изменить время. |
d | Устройство ID, на котором находится inode. |
g | Групповой ID владельца файла. |
i | Номер inode. |
l | Файл с разрешенным увеличением размера (хорош для чего-либо из /var/log). |
m | Модификация отмены времени. |
n | Контрольный счет inode (число связей). |
p | Разрешение на чтение/запись/исполнение файла и режима (setuid, setgid). |
r | Указание inode на устройство ID (для устройств только /dev). |
s | Размер файла. |
t | Тип файла (текстовый, данных, исполнимый). |
u | Пользовательский ID владельца файла. |
C | Шифрованная строка по методу CRC32. |
H | Шифрованная строка по методу Haval. |
M | Шифрованная строка по методу MD5. |
S | Шифрованная строка по методу SHA/SHS. |
Например, выполняя команду tripwire -m c -i "p,s,u", мы сообщаем Tripwire, что необходимо выполнить интегральную оценку для всех файлов, но при этом игнорировать все изменения полномочий доступа, размеров файлов или пользовательских идентификаторов владельцев файлов.
Если вы хотите произвести проверку содержимого шифрованной строки MD5, размера файла, полномочий доступа и пользователя/группы владельца файла, то нужно воспользоваться командой:
/home/myfile -> Mspug
Эту команду также можно написать так:
/home/myfile -> +Mspug-abcdilmnrtCHS
Чтобы сделать жизнь проще, Tripwire поставляется с несколькими заранее заданными переменными, которые можно использовать для определения маски свойств. Они приведены в таблице 12.3.
Вы также можете задать свою собственную маску свойств в файле политики. Помните, что переменная SEC_CRIT, о которой мы упоминали в начале этого раздела, представляет собой маску свойств и определяется следующим образом:
SEC_CRIT = $(IgnoreNone)-SHa
Любые правила, которые используют маску свойств SEC_CRIT, будут проверять все свойства, за исключением SHA hash, Haval hash и времени последнего доступа к файлу.
ReadOnly | +pinugtsdbmCM-rlacSH | Следит за полномочиями, inode, ссылками на inode, правом владения, типом файлов, размером файлов, устройством ID, используемыми блоками, модификацией отметок времени, а также ненужной информацией CRC32 и MD5. Хороша для файлов, которые не должны изменяться. |
Dynamic | +pinugtd-srlbamcCMSH | Следит за разрешениями, inode, ссылками на inode, правом владения, типом файлов, устройством ID. Не следит за размером, отметками времени или ненужной информацией. |
Growing | +pinugtdl-srbamcCMSH | Следит за тем же, что и Dynamic, но проверяет, что этот файл только увеличивается. Если файл внезапно становится меньше, то Tripwire привлечет ваше внимание. Хороша для файлов протоколов. |
Device | +pugsdr-intlbamcCMSH | Следит за разрешениями, правом владения, размером файлов, устройством ID и устройствами, на которые указывает inode. Хороша для файлов устройств. |
IgnoreAll | -pinugtsdrlbamcCMSH | Следит только за наличием файла, а не его свойствами. |
IgnoreNone | +pinugtsdrlbamcCMSH | Следит за всеми свойствами файла. |
Некоторые правила с использованием переменной маски свойств можно посмотреть здесь:
/var/log/messages -> $(Growing); /dev/fd0 -> $(Device); /home/jdoe/.netscape -> $(IgnoreAll); /etc/inetd.conf -> $(ReadOnly);
Атрибуты правил. Атрибуты правил могут относиться к отдельным правилам или группам правил, как это показано в таблице 12.4.
rulename | Присваивает имя правилу или группе правил. Помогает в подразделении ваших правил и упрощает понимание при просмотре резюме отчетов по проверке целостности. |
emailto | Если проверка на целостность Tripwire проводится с опцией -email-report, то где бы правило с этим признаком не запускалось, будет послан e-mail на заданный список e-mail-адресов. Несколько e-mail-адресов должны быть разделены точкой с запятой и заключены в двойные кавычки. |
severity | Задает уровень строгости правила или группы правил. Значения могут варьироваться от 0 до 1000000. Это позволяет использовать Tripwire для сканирования только на определенный уровень серьезности нарушения правил. Вы можете задать значащие имена переменных для уровней строгости (т.е. medium=50). |
recurse | Сообщает Tripwire, должен ли он сканировать все вложенные директории в директории (значение true), или он не должен сканировать ни в каких вложенных директориях (значение false), или же он должен сканировать только на определенную глубину вложенных директорий (числовое значение). |
/var/log/messages -> $(Growing) (rulename = Log, severity = 10); /etc -> $(ReadOnly) (rulename = Etc, recurse = 2); (rulename = Bin, severity = 100, recurse = false, emailto="root;bob@home") { /bin/cat -> $(IgnoreNone)-SHa ; /bin/date -> $(IgnoreNone)-SHa ; /bin/dd -> $(IgnoreNone)-SHa ; /bin/df -> $(IgnoreNone)-SHa ; }
Мы создали правило с названием "Log" с уровнем опасности 10 для файла /var/log/messages. Правило использует маску свойств Growing, которая показывает, что Tripwire проверяет такие свойства, как владельца файла, полномочия доступа и изменение размера. Правило "Etc" использует рекурсивный атрибут, чтобы указать программе на необходимость в процессе интегральной оценки просматривать файловую систему только на глубину двух директорий и использовать маску свойств ReadOnly. Правило "Bin" объединяет несколько тестов с уровнем опасности 100. Правила тестирования для четырех важных Unix-приложений для проверки изменений всех свойств за исключением SHA-строки, Haval-строки и времени последнего доступа. Если любой из этих тестов обнаружит изменение свойств, то по адресу пользователя root и bob@home будут посланы уведомления по электронной почте.
Совет. Помните флаг -R для режима интегральной оценки (-mc)? Вы можете включить этот параметр, чтобы обозначить необходимость использования только конкретных правил. К примеру, команда tripwire -m c -R Bin может быть использована в случае, если необходимо выполнить проверку по правилу "Bin".
Специальные правила: точки останова. Если вы хотите сканировать директории, но пропускать отдельные файлы, то можете использовать специальные правила, которые называются точками останова (stop points), чтобы игнорировать эти файлы. Точки останова представляют собой просто имена файлов или директорий, следующие за восклицательным знаком:
/etc -> $(ReadOnly); !/etc/dhcpd.leases; !/etc/motd;
Это правило говорит о необходимости убедиться, что в директории /etc все файлы имеют свойства "только для чтения", за исключением файлов /etc/dhcpd.leases и /etc/motd.
Директивы. Наконец, файл политики может содержать директивы, которые позволяют вам распечатывать диагностические сообщения в случае, когда при проверке достигнуты определенные разделы файла политики, или осуществляется проверка определенных свойств хоста.
Смысл в том, что один и тот же файл политики может быть использован на различных платформах и операционных системах. Это полезно, когда вы обдумываете преимущества коммерческой версии Tripwire, которая кратко обсуждается в разделе "Реализация: коммерческая версия". Доступные директивы перечислены ниже.
- @@section. Начинает новый раздел файла. Эта директива может сопровождаться аргументами: FS, NTFS или NTREG. Unix-версия Tripwire игнорирует разделы файла NTFS или NTREG, что позволяет вам использовать один файл политики для всей вашей сети. Если после директивы не задано никаких аргументов, предполагается значение FS. Нет необходимости определять конец раздела, поскольку Tripwire просто просматривает файл в поисках следующей директивы и интерпретирует ее, как конец предыдущего раздела.
- @@ifhost, @@else, @@endif. Эти директивы можно использовать для определения специфических для хоста разделов файла. В отличие от директив разделов, директивы ifhost требуют, чтобы предложение было завершено директивой endif. Это позволяет вам запускать правила только для конкретного хоста в группе хостов, воспользовавшись примерно такой командой:
@@ifhost originix || badman # define rules for only hosts originix and badman here @@endif
- @@print, @@error. Эти директивы используются для вывода отладочных сообщений из файла политики. Директория @@print просто печатает на стандартный вывод, а директива @@error осуществляет печать в случае ненормального завершения работы программы. Следующий пример указывает Tripwire выдать сообщение в случае, если будет сделана попытка проверки хоста cauliflower, поскольку для этого хоста не предусмотрено никаких правил проверки:
@@ifhost cauliflower @@error "We haven't written any policy rules for host cauliflower yet" @@endif
- @@end. Эта директива обозначает конец файла политики. Достигнув этой точки, Tripwire прекращает считывание файла.
Использование нового файла политики. После того как вы модифицировали или создали новый файл политики (назовем его newpolicy.txt), воспользуйтесь командой tripwire -m p newpolicy.txt, чтобы дать возможность программе использовать новый файл политики и, соответственно, обновить базу данных.