Защита от хакеров корпоративных сетей. Коллектив авторов
(не забывая о проверке новых файлов). Но этот способ сложно реализовать, и он требует необоснованно больших затрат времени. Поэтому проанализируем несколько методов, которые могут облегчить эту работу.
Естественно, у читателя есть возможность сделать все вручную, но для этого потребуется затратить много усилий. Как уже говорилось, читатель может вручную сделать копии всего, что может быть изменено (все файлы на диске в директории или на всем диске), дождаться момента изменений и затем проверить, были ли изменены файлы.
Очевидно, что так можно сделать, но на это уйдет больше времени и труда, чем если бы читатель поступил по-другому. Хотя в отдельных случаях ручное сравнение – лучший способ исследования. Например, при исследовании реестра Windows (Windows Registry – иерархическая база данных, хранящая информацию о конфигурации компьютера и об аппаратном и программном обеспечении; организована в структуру поддеревьев с ключами и подключами) может получиться так, что на исследуемой машине не окажется инструментальных средств контроля нужной части реестра. В то же время утилита Regedit почти всегда доступна. Она позволяет экспортировать реестр Windows в текстовый файл. В других случаях, при необходимости отбора нескольких файлов среди ряда дополнительных, поиск различий на всем диске может оказаться предпочтительным для первоначальной локализации файла, представляющего интерес. Иногда метод грубой силы может оказаться привлекательнее тонких методов исследования, особенно если на их подготовку потребуется дополнительное время.
Один из методов поиска модифицированных файлов, позволяющих избежать копирования файлов, основан на использовании их атрибутов. К атрибутам файла относятся дата, время создания и модификации файла и разрешения работы с ним. Некоторые из них могут оказаться полезными для определения только что измененных файлов.
Ниже представлен уместный фрагмент кода файла ext2_fs.h инсталляции Red Hat 6.2 Linux:
/*
* Structure of an inode on the disk
*/
struct ext2_inode {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Creation time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
__u32 i_flags; /* File flags */
В большинстве UNIX-систем атрибуты файла описаны похожим способом. В их состав входят владелец, размер, несколько полей времени и даты, группа, счетчик связей этого файла, число используемых блоков диска и флаги файла (стандартные разрешения чтения, записи и выполнения файлов).
Какие атрибуты интересны для нас? В большинстве случаев это один из атрибутов времени и размер файла. Любой из них может быть определен переадресовыванием вывода команды ls – al в файл до и после наступления анализируемого события с последующим сравнением двух файлов, как это показано в следующем примере:
[elliptic@ellipse]$ diff /tmp/before