Программа устанавливается достаточно просто. В конфигурационный файл /etc/inetd.conf нужно добавить строки, как показано в примере:
#
# Local testing counterintelligence
#
rexec stream tcp nowait root /etc/local/klaxon klaxon rexec
link stream tcp nowait root /etc/local/klaxon klaxon link
supdup stream tcp nowait root /etc/local/klaxon klaxon supdup
tftp dgram udp wait root /etc/local/klaxon klaxon tftp
Подразумевается, что программа установлена в директории /etc/local/klaxon. Описанные в конфигурационном файле сервисы перенаправляются на klaxon, и вы сможете контролировать, когда и кто пытался обратиться к ним. Реально эти сервисы не должны использоваться в системе, и соответствующий порт открывает программа klaxon, и если обращение все же было, то это, скорее всего, сканирование или даже попытка взлома. Просто так на неиспользуемый порт никто подключаться не будет.
Такой метод хорош тем, что, например, сервис rexec (удаленное выполнение команд) не нужен пользователям, и его очень часто ищут хакеры для проникновения в систему. Если с определенного адреса была попытка (пусть и неудачная) обратиться к rexec, можно взять на заметку это событие и этот IP и уделять ему больше внимания.
Я рекомендую установить klaxon в системе не более чем на 2–3 сервиса, потому что слишком большое количество портов вызовет подозрение у взломщика. К тому же, если klaxon возьмет на обслуживание более 5 портов, то многократное сканирование может отнять лишние ресурсы системы. Это создаст предпосылки для проведения успешной атаки отказа от обслуживания.
12.4.2. PortSentry
Раньше эта программа принадлежала компании Psionic, но сейчас ссылка www.psionic.com ведет на один из разделов компании Cisco, и утилиты там уже нет. Но в Интернете она еще осталась, и полный исходный код можно взять с сайта http://sourceforge.net/projects/sentrytools.
Так как программа поставляется в исходных кодах, то для ее установки требуется распаковка архива и компиляция. Это уже не должно у вас вызывать проблем.
Для разархивирования выполняем команду:
tar xzvf portsentry-1.2.tar.gz
В моем случае создалась директория portsentry_beta. У вас это имя может быть другим из-за несовпадения версии программы, возможно, изменившейся к моменту выхода книги. Имя каталога будет видно в процессе разархивирования, т.к. программа отображает на экране список файлов в виде каталог/имя файла.
Перейдите в созданный каталог с исходными кодами, чтобы выполнять команды в нем:
cd portsentry_beta
Теперь поговорим о компиляции. Программа PortSentry написана универсально и может работать в разных Unix-подобных системах, и помимо Linux это может быть Solaris, FreeBSD, OpenBSD и т.д. При компиляции вы должны явно указать, какая ОС у вас установлена:
make linux
Теперь собственно установка. По умолчанию файлы программы копируются в директорию /usr/local/psionic, но этим можно управлять, если в файле makefile поменять параметр INSTALLDIR. Если все устраивает, то выполняем команду:
make install
Затем нужно установить описанным для PortSentry способом программу Logcheck, поэтому приведу только команды:
tar xzvf logcheck-1.1.1.tar.gz
cd logcheck-1.1.1
make linux
make install
Эта программа по умолчанию устанавливается в директорию /usr/local/etc. Каталог также можно изменить, отредактировав параметр INSTALLDIR в файле makefile.
Все настройки программы PortSentry находятся в файле /usr/local/psionic/portsentry/prtsentry.conf. По умолчанию все закомментировано, и вам необходимо только открыть нужные строки.
Например, вы хотите, чтобы программа следила за определенными портами. На этот случай в конфигурационном файле подготовлены закомментированные записи для разных типов серверов. Выберите нижний и уберите в начале строки знак "#". Тем самым вы укажете порты для наблюдения:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,32770,32771,32772"
Помимо мониторинга в программе есть отличная способность — при выявлении попытки атаки конфигурировать Firewall на запрет любого трафика с компьютером, который пытался взломать систему. Но это тоже по умолчанию отключено, и чтобы воспользоваться этой возможностью, нужно убрать комментарий со строки, соответствующей вашему серверу.
Мы рассматриваем Linux, а в нем, чаще всего, используют Firewall ipchains. Для него нужна запись:
KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY -l"
Убедитесь только, что программа сетевого экрана установлена по указанному пути (/sbin/ipchains). Для этого можно выполнить команду поиска программы:
which ipchains
Если в вашей системе применяется iptables, то нужно использовать строку:
KILL_ROUTE="/usr/local/bin/iptables -I INPUT -s $TARGET$ -j DROP"
Я считаю возможность выявления атаки и автоматического конфигурирования сетевого экрана очень мощной. В то же время, любая программа может ошибиться и запретить доступ не тому, кому надо. Например, взломщик может имитировать атаку от имени другого пользователя (скажем, босса), и тогда PortSentry запретит шефу доступ к ресурсам сервера. А это уже не есть хорошо.
Я попытался в своей тестовой системе закидать сервер пакетами подключения к различным портам. При этом в качестве IP-отправителя подставлял чужие адреса, в результате чего сервер стал недоступным для них. Вы должны контролировать все, что прописывает в сетевом экране программа мониторинга, иначе хакер может забросать систему запросами так, что она запретит доступ для всех компьютеров вашей сети.
Для запуска программы мониторинга выполните команды:
/usr/local/psionic/portsentry/portsentry -atcp
/usr/local/psionic/portsentry/portsentry -audp
Первая команда запускает мониторинг TCP-портов, а вторая — заставит программу наблюдать за UDP-портами. Вся активность будет сохраняться в журнале, который можно проверить с помощью установленной нами ранее программы Logcheck. Я рекомендую поместить эту программу в задания, чтобы она выполнялась через определенные интервалы времени (не менее 15 минут) и сообщала администратору о событиях в системе.
Для начала желательно сконфигурировать программу Logcheck. Для этого откройте файл /usr/local/etc/logcheck.sh и добавьте в него следующую строку (если ее нет):
"mailto:[email protected]"
Здесь [email protected] — это ваш E-mail-адрес, на который нужно отправлять электронные сообщения с информацией о сохраненных программой PortSentry в журнале записях. Теперь остается только сделать так, чтобы сценарий /usr/local/etc/logcheck.sh выполнялся через определенные промежутки времени. Для этого подойдет программа crontab.
Для тестирования программы PortSentry я сконфигурировал ее, как показано выше, и запустил прослушивание портов. Сканер CyD NET Utils (http://www.cydsoft.com) показал только первые два открытых канала. Все остальные оказались для программы закрыты, хотя реально их больше двух. Я сел за клавиатуру своего Linux-сервера и выполнил команду cat /etc/hosts.deny, чтобы увидеть файл /etc/hosts.deny, который содержит IP-адреса всех компьютеров, которым запрещено подключаться к серверу.
На экране появилось содержимое этого файла, и последней строкой был IP-адрес компьютера, с которого я производил сканирование:
ALL: 192.168.77.10
Программа PortSentry среагировала достаточно быстро и эффективно, прописав в файл /etc/hosts.deny запрет использования любого сервиса с адреса 192.168.77.10. Больше я уже ничего сделать не мог. Единственный способ снова получить доступ — удаление строки из файла /etc/hosts.deny, показанной выше.
Нужно заметить, что некоторые порты могут использоваться достаточно часто, и программа будет думать, что это попытки взлома. К ним относятся ident (113) и NetBIOS-порты (139), и их лучше всего исключить из наблюдения. Для этого в конфигурационном файле /usr/local/psionic/portsentry/prtsentry.conf найдите строки ADVANCED_EXCLUDE_TCP (для TCP-портов) и ADVANCED_EXCLUDE_UDP (для UDP-портов) и добавьте нужные каналы в список. По умолчанию в программе исключены следующие порты:
ADVANCED_EXCLUDE_TCP="113,139"
ADVANCED_EXCLUDE_UDP="520,138,137,67"
Как видите, 113 и 139 порты по умолчанию уже исключаются из мониторинга.
12.4.3. LIDS
Пакет LIDS (Linux Intrusion Detection/Defence System, определение вторжения в Linux и система безопасности). Несмотря на то, что я не очень люблю использовать патчи ядра, этот заслуживает вашего внимания, потому что обладает большими возможностями и реально позволяет повысить безопасность системы.
Конфигурация и работа системы надежно защищены. Так. например, файлы настройки зашифрованы, и внести в них изменения достаточно сложно. Остановить работу LIDS также проблематично, потому что для этого необходимо знать пароль администратора системы.
Функция определения попыток сканирования — это самая малость, что может делать этот пакет. Кроме того, LIDS позволяет ограничить доступ к файлам на уровне программ, а не пользователей, тем самым расширяются возможности по управлению правами доступа и увеличивается общая безопасность. Например, командам ls, cat и текстовым редакторам можно категорически запретить работу с каталогом /etc. Таким образом, мы усложняем хакеру задачу по просмотру файла паролей /etc/passwd.