И последняя самая молодая утилита HostSentry. Представляет собой инструмент обнаружения вторжения основанный на технологии Login Anomaly Detection (LAD) который определяет подозрительное действия при входе в систему и позволяет быстро выявлять скомпрометированные пользовательские аккаунты и необычное поведение.
HostSentry включает динамическую базу данных и фактически изучает поведение входа в систему пользователя. Это поведение используется модульными сигнатурами, чтобы обнаружить необычные действия. Прошу обратить внимание на словосочетание «при входе в систему» если компьютер уже скомпрометирован и взломщик уже имеет легальный вход в систему здесь уже помочь будет трудно, а вот когда делаются первые
шаги применение HostSentry будет как к месту. При этом необходимо помнить, что обнаружив злоумышленик также может подменить утилиту.
При этом HostSentry определяет:
> необычные действия при входе в систему
> подозрительные домены с которых осуществляется вход
> подозрительные каталоги пользователей
> обнаруживает вмешательство в файлы истории команд и входа в систему
> неизвестные входы в систему
> имеет расширяемые модули сигнатур
Когда HostSentry находит проблему, то она регистрирует событие, в дальнейшем
планируется обеспечить дополнительно автоматически отключать учетную запись и выгонять уже зарегистрированного пользователя-нарушителя, блокировать IP-адрес компьютера нарушителя или удалять маршрут из маршрутной таблицы, но пока это все в
проекте. Программа полностью написана на объектно-ориентированом
интерпретируемом языке Python, в большинстве современных дистрибутивов он уже имеется если же нет, то первоначально необходимо его установить, взяв с домашней страницы http://www.python.org. После этого установка HostSentry проблем вызвать не
должна, просто распаковываем архив заходим в образовавшийся каталог и вводи make install, после чего все необходимые файлы будут просто перенесены в каталог /usr/local/abacus/hostsentry (на него указывает переменная INSTALLDIR в Makefile). В файле hostsentry.conf устанавливаются пути к модулям используемым утилитой, базам
данных необходимым для сбора информации, переменная WTMP_FILE должна указывать на wtmp файл (для Linux обычно /var/log/wtmp) и некоторым другим файлам о них ниже.
Единственная переменная на которую можно обратить внимание поначалу (остальные можно не трогать а оставить как есть, хотя базы данных я бы переместил в каталог /var, где и положено им быть) это WTMP_FORMAT, в которой устанавливается формат
сохранения информации об логинах. Вся проблема здесь в том что учет параметров входа в систему (Name, TTY, Time, Host) в различных реализациях Unix ведется по-разному, например имя хоста в BSD урезается до 16-32 байт, в RFC 1034 имя ограничено 256
символами, а в переменной MAXDNAME (arpa/nameser.h) имя узла ограничено 1024 символами. Это приводит к тому, что если нападавшим использовано длинное имя, то оно
наверняка урежется (подробности в README.wtmp). Так вот в WTMP_FORMAT и
устанавливается формат, чтобы обеспечить запись необходимых данных применительно к используемой системе (в простейшем случае необходимо будет раскомментировать соответствующую строчку, в будущем планируется максимально автоматизировать процесс). В файле hostsentry.modules описываются какие модули должны выполняться
при регистрации пользователя в системе и при logout’e. В большинстве случаев можно оставить как есть. При необходимости сменить очередность выполнения модулей их нужно просто переместить вверх/вниз. В файл hostsentry.ignore заносятся пользователи
которых не нужно отслеживать при помощи HostSentry, это может быть полезно например для пользователей типа «ftp», который обнаруживается в wtmp и вызывает большое количество ложных тревог из-за анонимного доступа (при этом все равно в базу данных
пользователь будет включен). Для этого нужно просто разместить исключаемых пользователей по одному в строке (и надо заглядывать в него периодически чтобы там root’a не оказалось). Файл hostsentry.action описывает действия которые должна предпринимать утилита, пока она только регистрирует залогинившихся пользователей.
Теперь можно и запускать (для автоматического старта вместе с системой нужно включить эту строку в файл rc.local).
# python hostsentry.py
При этом в файле /var/log/messages должны появиться такие строки.
Jun 8 18:26:42 grinder hostSentry[23306]: adminalert: HostSentry version 0.02 is initializing.
Jun 8 18:26:42 grinder hostSentry[23306]: adminalert: Send bug reports to
Jun 8 18:26:43 grinder hostSentry[23460]: adminalert: HostSentry is active and monitoring
logins.
После первого запуска образуются две базы данных: hostsentry.db содержащая записи обо всех пользователях которые регистрировались с тех пор пока HostSentry был в действии и hostsentry.tty.db об используемых (активных) терминалах. В пользовательской базе
данных хранятся объекты входа в систему пользователя, которые сформированы со следующей схемой:
> username — имя входящего в систему пользователя
> recordCreated — дата начала записи в Unix формате
> firstLogin — первый вход в систему для этого пользователя.
> trackLogins — список входов в систему этого пользователя (будет постоянно расти).
> validLoginDays — дни когда данному пользователю разрешено регистрироваться в
системе.
> validLoginHours — часы когда пользователю разрешено регистрироваться.
> adminDisabled — флаг указывающий но то что данная запись была отключена
администратором.
> securityDisabled — флаг указывающий на то что данный пользователь был лишен
возможности регистрироваться модулем программы.
> totalLogins — общее количество регистраций для данного пользователя.
> version — версия схемы базы данных.
База данных терминалов помогает HostSentry поддержать список активных подключений
и позволяет программе знать, когда пользователь регистрировался. Поскольку эти
данные не используются между включениями она обнуляется каждый раз при перезапуске
HostSentry. При этом отслежуются следующие элементы:
> tty — TTY с которого зарегистрировался пользователь.
> username — имя пользователя.
> loginStamp — уникальный timestamp для login.
> version — версия схемы базы данных.
В loginStamp заносится информация, необходимая для обработки компонентами
системы и формируется следующим образом:
loginIP@loginHostname@loginTTY@loginTime@logoutTime
Где:
LoginIP — IP-адрес пользователя при регистрации.
LoginHostname — имя хоста (полностью уточненное при помощи DNS).
LoginTTY — TTY пользователя.
LoginTime — время входа в систему в Unix формате.
LogoutTime — время выхода из системы в Unix формате.
Если попробовать теперь зарегистрироваться то дополнительно появится сообщение,
в котором указывается кто, когда, откуда и какие модули были выполнены.
Jun 8 18:30:19 grinder — sergej[1639]: LOGIN ON tty1 BY sergej
Jun 8 18:30:20 grinder hostSentry[23460]: securityalert: LOGIN User: sergej TTY: tty1 Host:
Jun 8 18:30:20 grinder hostSentry[23460]: securityalert: First time login for user: sergej
Jun 8 18:30:20 grinder hostSentry[23460]: securityalert: Action being taken for user: sergej
Jun 8 18:30:20 grinder hostSentry[23460]: securityalert: Module requesting action is:
moduleFirstLogin
Jun 8 18:30:20 grinder hostSentry[23460]: securityalert: Action complete for module:
moduleFirstLogin
Jun 8 18:30:21 grinder hostSentry[23460]: securityalert: Foreign domain login detected for user:
sergej from:
Jun 8 18:30:21 grinder hostSentry[23460]: securityalert: Action being taken for user: sergej
Jun 8 18:30:21 grinder hostSentry[23460]: securityalert: Module requesting action is:
moduleForeignDomain
Jun 8 18:30:21 grinder hostSentry[23460]: securityalert: Action complete for module:
moduleForeignDomain
При этом сообщение securityalert не пройдет еще и мимо Logcentry. Теперь
требуется некоторое время, чтобы детектор аномалий изучил то как пользователи обычно
действуют при входе в систему, постепенно количество сообщений будет уменьшаться, но
зато когда бухгалтер Вася Пупкин работавший обычно из соседнего офиса и не знающего вообще что такое Unix, попытается вдруг зарегистрироваться из Китая, то администратор будет предупрежден.
Список модулей применяемых в HostSentry:
> moduleFirstLogin — единственная цель этого модуля предупреждение администратора
когда пользователь входит в систему первый раз после запуска HostSentry т.е когда
пользователь ввел пароль и получил Unix shell. Может это и есть наш Вася Пупкин, а может и нет, во всяком случае администратору будет интересно узнать зачем бухгалтеру интерактивная оболочка.
> moduleForeignDomain — очень часто нападающие скомпроментировавшие какую-то учетную запись входят в систему с домена которому вообщем то, не чего делать на вашем компьютере. Если такой домен не перечислен в файле moduleForeignDomain.allow, то он причисляется к подозрительным и администратор получает предупреждение. Примечание: из-за ограничений в некоторых системах связаных с максимально хранимым именем хоста о чем говорилось выше, данный
модуль может давать противоречивые результаты, в этом случае скорее всего прийдется данный модуль отключить для информации загляните в файл utmp.h, заголовка ядра (в RedHat максимальное число 256, что является вполне достаточным).
> moduleRhostCheck — этот модуль проверяет пользовательский .rhosts файл при
выходе из системы и если в нем содержатся постановочные знаки (‘+’) это будет
зарегистрировано и администратору можно будет заняться исследованием
(использование r-сервисов плохая идея).
> moduleHistoryTruncated — модуль при регистрации проверяет файл историй
используемого командного интерпретатора прописанного в /etc/passwd (поддержаны
bash, csh и tcsh). Тревожный сигнал выдается если файл не существует или он
нулевого размера или это символическая ссылка на /dev/null.
> moduleOddDirnames — скорее вспомогательный модуль, проверяет домашний каталог
пользователя. Обычно хакеры пытаются скрыть свое пребывание в системе и
каталоги называют «.. » , «…». Вот это и пытается выяснить данный модуль.
> moduleMultipleLogins — все просто, если пользователь несколько раз одновременно
зарегистрировался на компьютере, то он уже скорее взломан и администратора об
этом предупредят
> moduleLoginLogout — просто регистрирует когда пользователь входи и выходит из системы.