Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
12.3.2. bastille Проект bastille (bastille-linux.sourceforge.net) существует уже давно и создан специалистами по безопасности Linux. Разработчики собирались написать свою версию ОС, которая будет более безопасной, но, видимо, не рассчитали свои силы. Глядя на bastille, так и хочется сказать: "Жаль!!!" К сожалению, и проект bastille ими заброшен: при заходе на сайт можно увидеть много- обещающую надпись о том, что релиз программы будет выпущен 14 января 2008 года. Однако программа все равно остается полезной. Программа проверяет систему и выдает отчет, из которого вы можете узнать о найденных слабостях в ОС, и если пожелаете, то bastille автоматически примет необходимые меры по устранению уязвимости. Работа программы настолько проста и удобна, что я даже не буду ее описы- вать . В отличие от подобных средств, bastille может работать не только в тек- стовом , но и в графическом режиме. Для установки программы можно вос- пользоваться архивом RPM или скомпилировать файлы из исходного кода. 12.4. Выявление атак Хороший администратор должен сделать все, чтобы убить попытку атаки на свою систему еще в зародыше. Давайте вспомним, с чего начинается взлом системы ? Конечно, со сбора информации об интересующем компьютере или сервере способами, рассмотренными в самом начале книги. Хакер пытается узнать о системе все, что только можно, а администратор должен сделать так, чтобы осложнить этот процесс или запутать взломщика. Самый простой и один из наиболее информативных методов — сканирование портов . Чтобы выяснить, кто, когда и откуда произвел попытку проникнове- ния , необходимо отлавливать любые нестандартные события портов. Конеч- но же, вручную это сделать сложно, поэтому лучше запастись хорошей про- граммой Средства автоматического выявления атак достаточно хороши, но не всег- да приемлемы. Например, если ваш сервер популярен, то количество ска- нирований в день будет довольно большим. Я думаю, что такие узлы как www.yahoo.com или www.microsoft.com сканируют тысячи, а то и миллио- ны раз в день, и на каждую попытку обращать внимание бесполезно. А самое главное , автоматическое выявление атак требует ресурсов, а иногда и нема- лых . Если попытаться протоколировать каждое сканирование, то злоумыш- ленник может направить на ваш сервер пакеты, имитирующие атаки, и тогда вся вычислительная мощь сервера уйдет на выявление этих наскоков. Полу- Мониторинг системы 369 чится классический отказ от обслуживания (DoS), потому что сервер уже не сможет обрабатывать запросы клиентов. Но если у вас локальный сервер в организации или просто домашний компь- ютер в небольшой сети, то определение любителей сканирования поможет заведомо предотвратить взлом. Еще один недостаток автоматического определения атак — вы сами не смо- жете воспользоваться утилитами сканирования безопасности своих серверов, потому что это будет воспринято как нападение. Когда вы сами сканируете систему , то обязательно отключайте программы обнаружения атак, иначе ваши действия не принесут результата. 12.4.1. Klaxon Самой простой и эффективной является утилита Klaxon (www.eng.auburn.edu/ users/doug/second.html). Она следит за неиспользуемыми системой портами и при обращении на них пытается определить всю возможную информацию о сканирующем IP-адресе и сохранить ее в журнале. Программа устанавливается достаточно просто. В конфигурационный файл /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, можно взять на заметку этот адрес и уделять ему больше внимания. Глава 12 370 Я рекомендую установить Klaxon в системе не более чем на 2—3 сервиса, потому что слишком большое количество открытых портов вызовет подозре- ние у взломщика. Просто эти порты должны быть заманчивыми, то есть при- надлежать к популярным сервисам. К тому же, если Klaxon возьмет на об- служивание более 5 портов, то многократное сканирование отнимет лишние ресурсы системы. Это создаст предпосылки для проведения успешной атаки отказа от обслуживания. 12.4.2. PortSentry Эта программа была написана компанией Psionic, но сейчас ссылка www.psionic.com ведет на один из разделов компании Cisco, и утилиты там уже нет. Но в Интернете она еще осталась, и полный исходный код можно взять с сайта sourceforge.net/projects/sentrytools. Так как программа поставляется в исходных кодах, то для ее установки требуется распаковка архива и компиляция. Это уже не должно у вас вызывать проблем. Для разархивирования выполняем команду: tar xzvf portsentry-1.2.tar.gz В моем случае создалась директория portsentry_beta. У вас это имя может быть другим, если версия программы изменится к моменту выхода книги. Имя каталога будет видно в процессе разархивирования, так как программа tar отображает на экране список файлов в виде каталог/имя файла Перейдите в созданный каталог с исходными кодами, чтобы выполнять команды в нем: cd portsentry_beta Теперь поговорим о компиляции. Программа PortSentry написана универ- сально и может работать в разных UNIX-подобных системах: помимо Linux это может быть Solaris, FreeBSD, OpenBSD и т. д. При компиляции вы долж- ны явно указать, какая ОС у вас установлена: make linux При установке по умолчанию файлы программы копируются в директорию /usr/local/psionic, но этим можно управлять, если в файле makefile поменять параметр INSTALLDIR . Если все устраивает, то выполняем команду: make install Затем нужно установить программу logcheck, поэтому приведу только команды: tar xzvf logcheck-1.1.1.tar.gz cd logcheck-1.1.1 make linux make install Мониторинг системы 371 Эта программа по умолчанию устанавливается в директорию /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, а в нем чаще всего используют экран ipchains. Для него нужна запись: KILL_ROUTE="/sbin/ipchains -I input -s $TARGET$ -j DENY –l" Убедитесь только, что программа сетевого экрана установлена по указанному пути (/sbin/ipchains). Для этого можно выполнить команду поиска программы: which ipchains Я считаю возможность выявления атаки и автоматического конфигурирования сетевого экрана очень мощной. В то же время любая программа может оши- биться и запретить доступ не тому, кому надо. Например, взломщик может имитировать атаку от имени другого пользователя (скажем, босса), и тогда PortSentry запретит шефу доступ к ресурсам сервера. А это уже не есть хорошо. Я попытался в своей тестовой системе закидать сервер пакетами подключе- ния к различным портам. При этом в качестве IP-адреса отправителя я под- ставлял чужие адреса, в результате чего сервер стал недоступным для них. Вы должны контролировать все настройки сетевого экрана, которые делает программа мониторинга, иначе хакер может забросать систему запросами так , что она запретит доступ для всех компьютеров вашей сети. Для запуска программы мониторинга выполните команды: /usr/local/psionic/portsentry/portsentry -atcp /usr/local/psionic/portsentry/portsentry -audp Первая команда запускает мониторинг TCP-портов, а вторая — заставит программу наблюдать за UDP-портами. Вся активность будет сохраняться Глава 12 372 в журнале, который можно проверить с помощью программы Logcheck, опи- санной далее в разд. 12.6.4. Я рекомендую поместить эту программу в зада- ния , чтобы она выполнялась через определенные интервалы времени (не ме- нее 15 минут) и сообщала администратору о событиях в системе. Но перед этим желательно программу Logcheck правильно настроить. Для этого откройте файл /usr/local/etc/logcheck.sh и добавьте в него следующую строку (если ее нет): "mailto:SYSADMIN=admin@server.com" Здесь admin@server.com — это адрес E-mail, на который будут отправляться электронные сообщения с информацией о сохраненных программой PortSen- try в журнале записях. Теперь остается только сделать так, чтобы сценарий /usr/local/etc/logcheck.sh выполнялся через определенные промежутки време- ни . Для этого подойдет программа crontab. Для тестирования программы PortSentry я сконфигурировал все настройки программы PortSentry, как показано выше, и запустил сканирование портов. CyD NET Utils (www.cydsoft.com) показал только первые два открытых канала . Все остальные оказались для программы закрыты, хотя реально их больше 2. Я сел за клавиатуру своего 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 по умолчанию уже исключаются из мониторинга. Мониторинг системы 373 12.4.3. LIDS Пакет LIDS (Linux Intrusion Detection/Defence System, определение вторже- ния в Linux и система безопасности). Несмотря на то, что я не очень люблю использовать патчи ядра, этот заслуживает вашего внимания, потому что обладает большими возможностями и реально позволяет повысить безо- пасность системы. При использовании LIDS конфигурация и работа системы надежно защи- щены . Так, например, файлы настройки зашифрованы, и внести в них изменения достаточно сложно. Остановить работу LIDS также проблема- тично , потому что для этого необходимо знать пароль администратора сис- темы Функция определения попыток сканирования — это самая малость из того, что может делать этот пакет. Также LIDS позволяет ограничить доступ к файлам на уровне программ, а не пользователей, тем самым расширяя воз- можности по управлению правами доступа и увеличивается общая безопас- ность . Например, командам ls , cat и текстовым редакторам можно категори- чески запретить работу с каталогом /etc. Этим мы усложним хакеру задачу по просмотру файла паролей /etc/passwd. Установка LIDS не из простых, потому что требуется инсталляция патча на исходные коды и перекомпиляция ядра Linux. И вот тут на первый план выходит неудобство патча — при его обновлении нет гарантии, что он бу- дет работать верно или не нарушит работу ядра. Исходные коды могут быть испорчены, и компиляция станет невозможной. При выходе новой версии ядра приходится на тестовой машине проверять его работу и уста- навливать все на свой страх и риск. А если не обновлять ядро, то нет уве- ренности , что в дальнейшем оно будет удовлетворять новым требованиям безопасности Более подробную информацию по работе пакета LIDS вы можете узнать на официальном сайте www.lids.org. 12.5. Журналирование В Linux работает одновременно сразу несколько журналов, и по содержа- щейся в них информации можно узнать много интересного. По ним вы смо- жете вычислить хакера и увидеть, когда он проник в систему и много других любопытных вещей. Так как это один из инструментов обеспечения безопас- ности , мы рассмотрим журналы достаточно подробно. Это позволит вам лучше контролировать свои владения. Глава 12 374 12.5.1. Основные команды Информация о текущих пользователях системы сохраняется в файле /var/run/utmp. Если попытаться посмотреть его содержимое, например, коман- дой cat , то ничего хорошего нашему взору не откроется. Этот журнал хранит данные не в текстовом, а бинарном виде, и получение информации возможно только с помощью специализированных программ (команд). who Команда who позволяет узнать, кто сейчас зарегистрирован в системе и сколько времени он в ней находится. Информация достается из файла /var/run/utmp. Введите эту команду, и на экране появится список примерно следующего вида: robert tty1 Dec 8 10:15 root tty2 Dec 8 11:07 Из этого списка становится ясно, что пользователь robert работает за первым терминалом ( tty1 ) и вошел в систему 8 декабря в 10 часов 15 минут, а через 52 минуты со второго терминала вошел пользователь root. Большинство хакеров при входе в систему выполняют эту команду, чтобы выяснить , есть ли сейчас в системе администратор. Если пользователь root присутствует , то начинающие хакеры часто уходят, так как опасаются, что их знаний не хватит, чтобы остаться незамеченными. При этом, вероятно, потом они вернутся. Это еще одна причина, по которой администратор не должен входить в сис- тему под учетной записью root. Лучше всего работать как простой пользо- ватель , а когда не хватает прав, то переключаться на привилегированного. На такой случай я создал учетную запись, для которой установил UID равным нулю . Она позволяет получить доступ ко всей системе, и при этом имеет имя отличное от root, и не вызовет подозрений, когда я буду работать. Так что в моей системе никогда нельзя увидеть пользователя root. users Эта команда позволяет вытащить из журнала /var/run/utmp список всех поль- зователей , которые сейчас зарегистрированы в системе. В журнале /var/run/utmp информация хранится временно, только на момент присутствия пользователя. Когда он выходит из системы, соответствующая запись удаляется. После этого выяснить, кто и когда работал, можно только по журналу /var/log/wtmp. Это также бинарный файл, поэтому его содержи- мое можно увидеть с помощью специализированных программ. Мониторинг системы 375 last Команда позволяет выяснить, когда и сколько времени определенный поль- зователь находился в системе. В качестве параметра передается интересую- щее имя. Например, следующая директива отображает время входа и про- должительность нахождения в системе пользователя robert: last robert Выполнив команду, вы увидите на экране примерно следующий список: robert tty1 Thu Dec 2 12:17 — 12:50 (00:33) По этой записи можно понять, что robert находился за терминалом ( tty1 ), зашел в систему 2 декабря на 33 минуты (с 12:17 до 12:50). Если пользова- тель работал не локально, а через сеть, то будет отображена информация о хосте, с которого входили в систему. Если выполнить эту команду для себя, то может вывалиться такой список, что читать его будет невозможно, потому что вы достаточно часто работаете в системе. Чтобы ограничить выводимые данные, можно указать ключ –n и количество отображаемых строк. Например, следующая команда выдаст информацию о последних пяти входах: last –n 5 robert lastlog Если выполнить команду lastlog , то она выведет на экран перечень всех пользователей с датами их последнего подключения к системе. Пример ре- зультата ее выполнения можно увидеть в листинге 12.1. Листинг 12.1. Результат выполнения команды lastlog Username Port From Latest root ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** shutdown **Never logged in** halt **Never logged in** mail **Never logged in** news **Never logged in** uucp **Never logged in** operator **Never logged in** Глава 12 376 games **Never logged in** gopher **Never logged in** ftp **Never logged in** nobody **Never logged in** vcsa **Never logged in** mailnull **Never logged in** rpm **Never logged in** xfs **Never logged in** apache **Never logged in** ntp **Never logged in** rpc **Never logged in** gdm **Never logged in** rpcuser **Never logged in** nscd **Never logged in** ident **Never logged in** radvd **Never logged in** squid **Never logged in** mysql **Never logged in** flenov ftpd2022 192.168.77.10 Mon Feb 21 12:05:06 +0300 2005 named **Never logged in** robert tty1 Mon Feb 21 12:10:47 +0300 2005 Список состоит из четырех колонок: имя пользователя из файла /etc/passwd; порт или терминал, на который происходило подключение; адрес компьютера, если вход был по сети; время входа. С помощью lastlog удобно контролировать системные записи. У них дата последнего входа должна быть **Never logged in** , потому что под ними нельзя войти в систему (в качестве командной оболочки установлены /bin/false, /dev/null, /sbin/nologin и др.). Если вы заметили, что кто-либо про- ник в систему через одну из этих учетных записей, то это значит, что хакер использует ее, изменив настройки. Простая замена командной оболочки в файле /etc/passwd может открыть хакеру потайную дверь, и администратор не заметит этой трансформации. Но после выполнения команды lastlog все неявное становится явным. Обращайте внимание на тип подключения и адрес. Если что-то вызывает по- дозрение , то можно выявить атаку на этапе ее созревания. |