Показать сообщение отдельно

  #3  
Старый 07.07.2008, 21:35
Solide Snake
Moderator - Level 7
Регистрация: 28.04.2007
Сообщений: 547
Провел на форуме:
5516499

Репутация: 3702


Отправить сообщение для Solide Snake с помощью ICQ
По умолчанию

Обнаружение и нейтрализация атак


Наравне с задачей защиты системы от взлома стоит и задача своевременного обнаружения атаки и уменьшения ущерба от взлома. Ущерб, и способы его уменьшения зависят больше от функций, выполняемых системой, поэтому какие-то рекомендации, кроме набившей уже оскомину "делайте резервные копии", дать сложно. А вот обнаружение атаки на разных стадиях - дело вполне алгоритмируемое.

Одним из первых инструментов хакера при атаке на систему является сканер портов - некая программа, пытающаяся подключиться к удаленной системе по множеству известных ей протоколов для выяснения дальнейших возможных путей взлома. Функции этих программ могут быть весьма продвинутыми, а могут ограничиваться и последовательным перебором всех портов протоколов TCP и UDP, но в любом случае процесс сканирования портов можно засечь и принять соответствующие меры. Понятно, что постоянно сидеть и следить за системой администратор не будет, поэтому существуют программные средства, способные самомтоятельно засекать такие атаки, и отбивать их. Одна из таких программ - portsentry.

Установить PortSentry можно из набора портов - /usr/ports/security/portsentry (для установки программы подключитесь к сети Интернет, перейдите в этот каталог, и введите команду make install - программа будет скачана с сайта производителя и автоматически установлена в системе). После установки программы ее необходимо будет сконфигурировать, отредактировав файл /usr/local/etc/portsentry.conf.
Для начала нужно составить списки портов, попытка подключения к которым будет расцениваться, как криминал. Для этого нужно создать собственные строки TCP_PORTS и UDP_PORTS, или воспользоваться одной из имеющихся. Естественно, в список "криминальных" портов не следует включать те, на которых в Вашей системе существуют "легальные" сервисы. После создания списка "криминальных" портов необходимо настроить действие, предпринимаемое portsentry для отбивания атаки. Если в вашей системе установлен файрвол, то найдите и раскомментируйте (удалите начальный значек '#' ) строку:

Код:
KILL_ROUTE="/sbin/ipfw add 1 deny all from $TARGET$:255.255.255.255 to any"
При данной настройке portsentry запретит прохождение любых пакетов с атакующего хоста добавлением правила в файрвол. Если файрвол на вашей машине не установлен - найдите и раскомментируйте строчку:

Код:
KILL_ROUTE="route add -net $TARGET$ -netmask 255.255.255.255 127.0.0.1 -blackhole"
При данной настройке пакеты от атакующего хоста по-прежнему смогут достигать Вашего сервера, но ответные пакеты будут направлены в "черную дыру" (blackhole), и уничтожены. Это почти так-же эффективно, как и запрещение входящих пакетов с помощью firewall, но не помогает от DoS-атак.

Внимание! После перезагрузки все добавленные в файрвол правила, и добавленные в таблицу роутинга маршруты будут забыты, поэтому хакер опять сможет получить доступ к Вашей машине до первой попытки сделать что-либо запрещенное. Если Ваш сервер перезагружется достаточно часто - напишите собственный скрипт, который будет не только вносить правило в firewall, но и приписывать его к файлу настройки firewall, исполняемому при загруке системы.

К сожалению, в поставке portsentry пока не идет скрипт автоматической загрузки программы при старте системы, поэтому Вам самостоятельно придется создать файл /usr/local/etc/rc.d/portsentry.sh со следующим содержимым:

Код:
#!/bin/sh
PSENTRY="/usr/local/bin/portsentry"

case "$1" in
start)
${PSENTRY} -tcp
${PSENTRY} -udp
echo " PortSentry "
;;
stop)
killall portsentry
;;
*)
echo " "
echo "start or stop parameter required."
echo " "
;;
esac
После установки portsentry будьте крайне осторожны при администрировании сервера через сеть - при неверных действия Вы можете оказаться отключенным.

Следующая полезная утилита - tripwire, которую Вы можете установить из /usr/ports/security/tripwire. Не забудьте обновить дерево портов - из того порта, что идет вместе с FreeBSD 4.7 tripwire не устанавливается (по крайней мере, на моей машине не установилось). Самый простой вариант обновления - скачать содержимое каталога ftp4.ru.freebsd.org/pub/FreeBSD/ports/ports-stable/security/tripwire к себе в /usr/ports/security/tripwire. Более сложный, но гораздо более правильный метод - использовать CVSUpdate, но это отдельная большая тема.

Эта утилита (tripwire) предназначена для отслеживания состояния системных файлов. Хакер, проникший в систему, скорее всего попытается оставить для себя "закладки на будущее" - программы, или настройки стандартых программ, обеспечивающие хакеру более простые способы добраться до системы в следующий раз. Таких мин может быть раскидано достаточно много, в расчете на то, что администратор сервера, заметив взлом, найдет не все закладки. Tripwire облегчает поиск таких закладок, сообщая администратору о всех изменениях в потенциально опасных каталогах и файлах.

В процессе установки tripwire создаст базу данных, в которую будут занесены сведения о всех системных и конфигурационных фалйх. База по умолчанию создается в каталоге /var/db/tripwire, но в этом случае хакер может ее изменить после установки "закладок", поэтому базу желательно хранить на защищенной от записи дискете. Для этого при установке tripware надо использовать команду make install TRIPEWIRE_FLOPPY=YES. При этом, естественно, в дисководе должна находиться чистая форматированная дискета. Если на машине установлено много всякого барахла - база на дискету может и не влезть. В этом случае Вам придется самому переписать ее, например, на CDRW: если система настроена и стабильно работает, то изменения в системные файлы вносятся не часто, и перенос базы tripwire на внешние носители не будет слишком обременительным.

Информация в базе содержится в зашифрованном виде, поэтому при установке tripwire попросит Вас придумать два пароля - одним будут закодированы настройки, а другим сама база. Пароли забывать не стоит - могут пригодиться при изменении настроек и "принятия к сведению" легальных изменений в файловой системе.

При создании базы tripwire начнет ругаться на отсутствие у Вас некоторых каталогов вроде /usr/tmp и т.п. Самое обидное, что эта же ругань будет и в ежедневных отчетах. Поэтому придется немного поизучать настройку tripwire. Самый главный файл настройки - /usr/local/etc/tripwire/twpol.txt. Это обычный текстовый файл, в котором описано, какие файлы надо проверять, и с какой степенью придирчивости это делать. Файл логически состоит из двух частей: общие настройки и правила проверки. В общих настроках прописываются пути к основным файлам tripwire, и задаются символические имена для уровней "придирчивости". Список правил - это собственно и есть указания, какие каталоги проверять. Правило состоит из заголовка и тела. Заголовок имеет следующий вид:

Код:
(
rulename = "Root's home",
severity = $(SIG_HI),
emailto="admin@host.domain"
)
, где rulename - название правила, severity - уровень "придирчивости", emailto - кому сообщать о происшествиях. Строки emailto приходится к каждому правилу добавлять вручную. Тело правила выглядит следующим образом:

Код:
{
/.profile -> $(SEC_CRIT) ;
/.cshrc -> $(SEC_CRIT) ;
/.forward -> $(SEC_CRIT) ;
/root -> $(SEC_CRIT) (recurse = true) ;
!/root/.history ;
!/root/.bash_history ;
}
Тело правила представляет из себя список каталогов с необязательным указанием изменения уровня "придирчивости" и способа обработки. Также возможно исключение некоторых файлов или подкаталогов из проверяемого списка. В данном примере из списка проверки исключаются файлы истории команд, изменение которых бесполезно отслеживать, т.к. они происходят при любых действиях пользователя root. Впрочем, если Вы не собираетесь в обозримом будущем работать под этой учетной записью, их можно не исключать из списка - их изменение будет сигналом о том, что кто-то таки работал под этим логином.

twpol.txt не используется при работе tripwire напрямую. Используется его зашифрованная версия, получить которую из текстового файла можно следующим образом:

Код:
/usr/local/sbin/twadmin -m P /usr/local/etc/tripwire/twpol.txt
при этом Вам придется ввести пароль. Сам текстовый файл с настройкой политики желательно тоже хранить в недоступном хакеру месте (на дискете в ящике стола), т.к. по этому файлу он сможет вычислить области с меньшей параноидальностью проверки.

Если Вы произвели какие-то изменения в системе, и не хотите, чтобы tripwire каждый день о них рассказывал - переинициализируйте базу командой /usr/local/sbin/tripwire --update (для обновления базы) или /usr/local/sbin/tripwire --init для создания базы "с нуля". Естественно, понадобится пароль - иначе хакер тоже сможет изменить базу.

Неплохо так-же переместить все относящиеся к tripwire файлы куда-нибудь в глубины файловой системы, например /usr/src/sys/libkern/patch/7.40, чтобы уменьшить вероятность обнаружения хакером нашей системы слежения, но при этом все-равно останется "след" - где-то должен сидеть автоматический запуск tripwire с некоторой периодичностью. Стандартный способ запуска - добавить в /etc/crontab строчку:

Код:
15 6 * * * root /usr/local/sbin/tripwire --check --silent --email-report
для запуска проверки каждый день в 6:15 утра, но это будет слишком быстро вычислено хакером. Более замороченным способом будет вставка вызова tripwire в какой-нибудь другой регулярно запускаемый служебный скрипт (например, подсчет статистики), достаточно сложный и неинтересный, чтобы хакеру хотелось в нем копаться, либо внесение изменения в код какого-либо постоянно исполняемого системой демона (благо исходные коды есть почти для всех программ). Переименование всех файлов tripwire во что-нибудь более безобидное тоже пойдет на пользу - тупой перебор всех каталогов на поиск слова tripwire не принесет хакеру желаемого результата.

Если предприняты меры по "прятанью" tripwire от глаз хакера, придется так-же выполнить make clean в каталоге /usr/ports/security/tripwire и удалить /usr/ports/distfiles/tripwire* для сокрытия следов сборки и установки tripwire. Правда, после этого останутся еще следы в протоколе работы почтовой системы, т.к. доставка администратору сообщений от tripwire должна быть регулярной, но tripwire можно настроить и для использвания внешнего почтового сервера. После этого можно быть уже относительно спокойным за скрытность работы tripwire. Конечно, останется еще вероятность того, что хакер будет работать в системе одновременно с работой tripwire, засечет какой-то чрезмерно активный процесс, и найдет наш замаскированный tripwire по этой ниточке, но с этим ничего не сделаешь (разве что поставить второй сервер специально для tripwire, и проверять диски через сеть), но вероятность такого обнаружения довольно мала.

Настройка tripewire - дело достаточно тонкое, т.к. неправильно настроенная tripewire засыпет Вас ложными сообщениями о неполадках в системе, в то время как настоящие нарушения могут быть пропущены. К сожалению, действительно хорошего руководства на русском языке в Интернете обнаружить не удалось, а насчет достаточности собственного опыта для написания действительно толкового полного руководства я не уверен. Тем не менее рекомендую почитать:
Цитата:
'http://bog.pp.ru/work/tripwire.html/'
'http://tcb.spb.ru/other/docum/linuxsos/ch12_1.html/'
а так-же все, что найдет yandex и google по этому поводу. Возможно, из моего рассказа что-то осталось непонятным - надеюсь, в этих статьях Вы сможете найти ответ на интересующие Вас вопросы по установке и первоначальному конфигурированию.

На этом предлагаю закончить экскурсию в сумасшедший дом по отделению параноиков, и в следующей главе обсудить настройку firewall'а - вещи, полезной как в плане безопасности, так и для тонкой настройки работы сервера доступа.

(с) Kuzmich