Поговорим о маскарадингеАндрей Комаров (komarov@itdefence.ru) Хакер, номер #111, стр. 111-026-1 Как замаскировать свой серверВероятность вторжения должна быть минимальной! Именно этот принцип преследует любой администратор, когда проектирует сеть. Каждый специалист имеет свой взгляд на то, как это должно быть реализовано, и будет увлеченно рассказывать, какую IPS/IDS-систему выбрать, каким образом настроить демоны логирования и как усилить защиту от брутфорса. Но в одном они сойдутся наверняка: если грамотно замаскировать свою систему, не дать взломщику ее проанализировать, то взломать ее будет ой как сложно! В современном мире информационной безопасности особое значение придается так называемому «маскарадингу» системы. По определению, маскарадинг является способом скрытия данных, или методом выдачи ложных данных взамен истинных. В контексте компьютерной тематики это может быть все что угодно, например действия, связанные с подменой баннеров сервисов. Старый добрый скан портовКлассический портскан состоит из трех этапов: установление соединения сокета, посылка в сокет некоторого количества информации, прослушивание ответа. Такой метод часто называют TCP Connect. Эффективно? Да! Но что мешает администратору установить ложный ответ сервиса? Да ничего! Некоторые из подобных приемов подмены были приведены в статье «Серверное подполье». Анализ баннеров, полученных в ответ на попытку подключения, называется «лотерейным исследованием». И несмотря на то что он является наиболее распространенным методом сканирования и, как правило, дает хорошие результаты, в ходе использования нужно обязательно учитывать следующее:
Боремся со сканом портовТеперь немного теории, а именно основ TCP/IP-стека. На этапе установления TCP-соединения на каждый пакет SYN высылаются пакеты SYN+ACK, после чего обмен окончательно закрепляется ACK-флагом. Разработчики сканеров отлично представляют себе механизм установления соединения и используют его для поиска открытых портов. Такой подход называется TCP-сканированием и используется в наиболее популярных разработках самых авторитетных кодеров. Процедура дает отличные результаты, но имеет один серьезный недостаток. Банальным перехватом параметра peer-name на сервере можно засечь того, кто подключался к объекту сокета! Получается, что наши действия по изучению сервера могут быть легко обнаружены. Безусловно, существуют и более незаметные техники сканирования портов. Например, SYN-сканирование. Этот метод часто называют «полуоткрытым» сканированием, поскольку при этом полное TCP-соединение с портом сканируемой машины не устанавливается. Сканер посылает SYN-пакет, как бы намереваясь открыть настоящее соединение, и ожидает ответа. Наличие флагов SYN|ACK в ответе указывает на то, что порт удаленной машины открыт и прослушивается. Флаг RST в ответе означает обратное. Но несмотря на то что прямого соединения не происходит, мы все равно передаем пакеты на удаленную машину, а значит, их можно отследить! Например, посредством прослушивания собственных сетевых интерфейсов на базе RAW-доступа. Apr 1 18:36:01 666.66.666.66:1093 -> 111.11.11.49:21 SYN Apr 1 18:36:01 666.66.666.66:1094 -> 111.11.11.49:22 SYN Apr 1 18:36:01 666.66.666.66:1095 -> 111.11.11.49:23 SYN Apr 1 18:36:01 666.66.666.66:1096 -> 111.11.11.49:25 SYN Apr 1 18:36:01 666.66.666.66:1097 -> 111.11.11.49:42 SYN То же самое в той или иной мере относится и к другим видам сканирования. Кроме волны запросов можно заметить последовательность пакетов, в каждом из которых порт назначения увеличивается на единицу. И даже несмотря на то, что в некоторых сканерах реализована техника рандомизации (подключение к портам происходит случайно), это все равно можно отследить. В известном сканере NMAP для усложнения вычисления источника сканирования существуют флаги -S и -D (decoy) (+-P0), позволяющие спуфить источник и добавлять туда несколько машин. Это не скрывает сканирования, но обманывает системы IDS. Кстати говоря, stealth-сканированием SYN-скан называется только по той причине, что не все системы журналирования пишут лог запросов и только. И это отнюдь не означает, что их невозможно отследить! По определению, RAW – это формат данных, не имеющих четкой спецификации. Действительно, нам все равно, какой поток трафика мы будем анализировать, - при желании мы зададим его структуру самостоятельно. С учетом этого можно выделить несколько утилит, используемых для выявления сканирования портов. ScanlogdОдна из наиболее сбалансированных систем обнаружения сканирования хоста от разработчика Openwall. Может взаимодействовать с рядом библиотек захвата (libndis, libpcap). Но обращаться к одной из них требуется не всегда, поскольку тот же Linux имеет свой raw socket interface, позволяющий прослушивать трафик самостоятельно. У Scanlogd существует также портированная версия для Windows. PSADНазвание говорит само за себя. Это набор утилит, написанных на С и Perl, предназначенных не только для журналирования сканирования, но и противодействию ему путем использования обращений к iptables. Более того, PSAD содержит модуль опознания атакующего, который по значениям TTL, IP id, TOS и TCP window выдаст информацию об атакующем. PkdumpОбнаружение TCP/UDP-видов сканирования. Astaro PortScan DetectionПрототип творения Solar Designer. Ведет журнал подключений путем взаимодействия с syslog. Все эти средства относятся к системам PSAD (PortScan Atack Detection). В литературе нередко можно встретить тезис о том, что сканирование портов является атакой, хотя оно лишь позволяет выявить защитные механизмы на системе или их отсутствие. RAW-снифинг использует практически каждая вторая host-based IDS-система. Например, работа Snort c включенным плагином PortScan Plugin (freshmeat.net/projects/pscan-plugin) состоит только в анализе логов. Поэтому нет ничего удивительного в том, что известнейшая система обнаружения вторжений является одновременно и пакетным снифером. PSAD использует два критерия для того, чтобы определить сканирование:
Неудачи Fingerprint'аОдной из сторон маскарадинга является уход от возможности сканирования портов путям урезания особых видов трафика. Вот лишь несколько приемов, которые можно использовать: Боремся с XMAS-сканированием: -A INPUT –p tcp –m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG –j DROP Боремся с NULL-сканированием: -A INPUT –p tcp –m tcp –-tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP Боремся с TCP connect() и SYN-cканом: -A INPUT –p tcp –m tcp –-tcp-flags FIN,SYN FIN,SYN –j DROP Боремся с FIN-сканированием: -A INPUT –p tcp –m tcp –-tcp-flags FIN,ACK FIN-j DROP Другая важная задача маскарадинга состоит в сокрытии версии операционной системы от удаленного анализа (OS Fingerprinting). Все утилиты, владеющие этим приемом, как правило, применяют следующие техники: 1. Активное сканирование, в ходе которого отправляется пакет, получается ответ и производится его анализ. Сканер, к примеру, может проанализировать ответ сервера на запрос ICMP Echo Request, изучив время жизни пакета и ряд других специфических параметров. Собственно, самым популярным инструментом подобного рода является PING, который основан на использовании протокола Internet Control Message Protocol и к тому же высылает TTL. По логике вещей, основным противодействием многих администраторов является «урезание» такого трафика. При прохождении пакета через один маршрутизатор (хоп) время жизни пакета уменьшается на то количество времени, которое пакет «пробыл в маршрутизаторе», но так как это время чрезвычайно мало и вряд ли может превышать 1 секунду, то именно это число берут за среднюю величину убыли. А поскольку на разных узлах количество хопов может быть различно, TTL может сравнительно отличаться от перечисленных эталонных значений. 2. Пассивное сканирование не подразумевает отправку пакетов. Вместо этого один из интерфейсов переводится в прослушивающий режим, а сканер извлекает из собранных данных те значения, которые посылает удаленная машина при явном обращении к ней. Изменение параметров TTL/Window Size/MTU так или иначе влияет только на изменение характеристик стека, при этом сканеру отдается ложная информация. Иногда это может привести к неправильному функционированию рабочей станции, поэтому надо следить, чтобы введенные значения были корректны. Особенно внимательно стоит относиться к MTU - параметру, определяющему размер (в байтах) единицы информации, которая может быть передана на канальном уровне коммуникационного протокола. Для разных сетей этот параметр различен (в сетях x25 он самый маленький и составляет 128 байт, а в Ethernet – уже 1500 байт). RPC на службе взломщикаК большому сожалению, существуют способы определения ОС и по другим признакам. Например, RPC-разведка. Так, небезызвестная утилита Rpcdump позволяет администратору опрашивать интересующие его устройства и определять, готовы ли они к «общению» средствами указанного протокола, причем опрос выполняется с помощью этого же протокола. Эта программа неоценима в ситуациях, когда надо выяснить причины неисправности удаленных систем, переставших реагировать на запросы. Утилита предусматривает использование как низкоуровневых сетевых протоколов, таких как TCP, UDP, IPX и SPX, так и протоколов более высоких сеансового и прикладного уровней: NetBIOS over TCP/IP (NetBT), Net-BEUI, Microsoft Message Queue Services (MSMQ), а также именованных каналов (named pipes). С помощью программы Rpcdump можно определить, через какие порты удаленный сервер готов принимать сигналы и какие порты обеспечивают прохождение трафика сквозь средства сетевой защиты. Утилита входит в Resourse Server Kit. А ответы различных серверов на RPC-запросов уже давно изучены. Стоит упомянуть важнейшее расширение iptables – Tappit, представляющее собой жестокое средство для наказания скрипткидисов. Злодей, попытавшийся открыть подключение с портом-ловушкой, будет принудительно «прикован» к нему в течение определенного тайм-аута. Разорвать соединение с таким узлом не удастся, что непременно отразится на системных ресурсах атакующего, но ни в коем случае не доверенной системы. Делается такое зависание путем установления параметра Window Size в ноль. Пример эмуляции Windows-служб для маскировки и одновременной атаки: ptables -A INPUT -p tcp -m tcp -m mport \ --dports 135,139,1025 -j TARPIT При обращении на эти порты, сразу же будет оказано противодействие. Подобный прием, замечу, зачастую используют для защиты от распределенных атак. Обрати вниманиеНадо понимать, что сканеры безопасности создаются исключительно в законопослушных целях - для мониторинга сети и поиска ее слабых мест. Не надо нарушать закон и использовать их во вред. Это наказуемо! INFOПримеры работы с pf для организации защиты от определения ОС узла ты можешь найти в статье Александра Гончарова «Защита FreeBSD от OS Fingerprinting с использованием PF firewall» (opennet.ru/base/sec/freebsd_fingerprint.txt.html). DVDВсе упомянутые в статье утилиты ты найдешь на нашем диске. |