Раздел: Документация
0 ... 53 54 55 56 57 58 59 ... 102 брандмаузерами, стоящими на магистральных Интернет-канатах, владельцы торых посчитали, что лучше слегка ограничить своих пользователей в працК°" чем нести моральную ответственность за поддержание всякой заразы. Одн- в отношении червей, распространяющихся через стандартные порты поцуп ных сетевых служб, этот прием не срабатывает, и брандмаузер беспрепятствен но пропускает голову червя внутрь корпоративной сети (рис. 5.1). Рис. 5.1. Распределение интенсивности атак на различные порты по регионам Но забросить shell-код на вражескую территорию - это только половина дача. Как минимум, еще потребуется протащить через все межсетевые заслоны основное тело червя (то есть хвост), а как максимум - установить терминальный backdoor shell, предоставляющий атакующему возможность удаленного управления захваченной системой. Может ли брандмаузер этому противостоять? Если он находится на одном узле с атакуемым сервером и shell-код исполняется с наивысшими привилегиями, то атакующий может делать с брандмаузером все, что ему только заблагорассудится, том числе и изменять его конфигурацию на более демократичную. Этот случай настолько прост, что его даже неинтересно рассматривать. Давайте лучше исходить из того, что брандмаузер и атакуемый сервис расположены на различных узлах, причем сам брандмаузер правильно сконфигурирован и лишен каких бы то ни было уязвимостей. Самое простое (и самое естественное!) — поручить shell-коду открыть на атакованном узле новый, заведомо никем не использованный порт (например, порт 666), и терпеливо ждать подключений с удаленного узла, осуществляющее засылку основного вирусного кода. Правда, если администратор системы "1 полный лох, все входящие соединения на все непубличные порты будут без*2 лостно отсекаться брандмаузером. Однако атакующий может схитрить и пер нести серверную часть червя на удаленный узел, ожидающий подключений стороны shell-кода. Исходящие соединения блокируются далеко не на вс брандмаузерах, хотя в принципе такая возможность у администратора есть. Н грамотно спроектированный червь не может позволить себе закладываться н , может и чего не может брандмаузер 177 рнльдяйство и попустительство администраторов. Вместо установки ново-Р p/IP-соединения он должен уметь пользоваться уже существующим — тем через которое и была осуществлена засылка его головы. В этом случае бран-v3ep будет бессилен что-либо сделать, так как с его точки зрения все будет ь1гаядеть ажурно. Откуда же ему, бедолаге, знать, что вполне безобидное с виду и легальным образом установленное TCP/IP-соединение обрабатывает отнюдь не сервер, а непосредственно сам shell-код, поселившийся в адресном пространстве последнего? Существует несколько путей захвата ранее установленного ТСР/1Р-соедине-ния (если кто раньше читал мои статьи, датированные годом эдак 1998, то там я называл это «передачей данных в потоке уже существующего ТСР/1Р-соеди-нения», но этот термин не прижился). Первое и самое глупое — обратиться к переменной дескриптора сокета по фиксированным адресам, специфичным для данного сервера, которые атакующий может получить путем его дизассембли-ровання. Такой способ не выдерживает никакой критики и здесь он не рассматривается (тем не менее знать о его существовании будет все-таки полезно). Уж лучше прибегнуть к грубой силе, перебирая все возможные дескрипторы сокетов один за другим и тем или иным образом определяя, какой из них заведует «нашим» TCP/IP-соединением. Поскольку в операционных системах семейства UNIX н Windows 9x/NT дескрипторы сокетов представляют собой вполне упорядоченные и небольшие но величине целочисленные значения (обычно заключенные в интервале от 0 до 255), их перебор займет совсем немного времени. Как вариант можно повторно использовать адрес, сделав re-bind на открытый уязвимым сервером порт. Тогда все последующие подключения к атакованному узлу будут обрабатываться отнюдь не прежним владельцем порта, а непосредственно самим shell-кодом (неплохое средство перехвата секретного трафика, а?). Как вариант — червь может прибить атакуемый процесс, автоматически осво-°ождая все отрытые им порты и дескрипторы. Тогда повторное открытие уязвимого порта не вызовет никаких протестов со стороны операционных системы. Менее агрессивный червь не будет ничего захватывать, никого убивать н вообще что-либо трогать. Он просто переведет систему в «неразборчивый» Режим, прослушивая весь проходящий трафик, с которым атакующий передаст Ставшийся хвост (кстати говоря, такая связь называется «пейджиноговой»). ВнИМАНИЕ — Никакой, даже самый совершенный и правильно сконфигурированный брандмаузер не защитит вашу сеть (и уж тем более — домашний компьютер) ни от червей, ни от опытных хакеров. Это, разумеется, не означает, что брандмаузер совершенно бесполезен, но убедительно доказывает, что приобретение брандмаузера еще не отменяет необходимости регулярной установки свежих заплаток. И на закуску: если ICMP-нротокол хотя бы частично разрешен (чтобы пользо--тели внешней сети не доставали администратора глупыми вопросами, по-емУ умирает tracert и не разботает ping), shell-код может запросто обернуть УСТАНАВЛИВАЕМ СОЕДИНЕНИЕ С УДАЛЕННЫМ УЗЛОМ Сейчас мы рассмотрим пять наиболее популярных способов установки TCP/ IP-соединения с атакуемым узлом, два из которых легко блокируются бранд-маузерами, а оставшиеся три представляют собой серьезную и практически неразрешимую проблему. Для осуществления всех описываемых в главе экспериментов вам понадобится: •утилита netcat, которую легко найти в Интернете и которая у каждого администратора всегда должна быть под рукой; •локальная сеть, состоящая как минимум из одного компьютера; •любой симпатичный вам брандмаузер; •операционная система типа Windows 2000 или выше (все описываемые технологии прекрасно работают и на UNIX, но исходные тексты демонстрационных примеров ориентированы именно на Windows). Итак... BIND EXPLOIT, ИЛИ «ДЕТСКАЯ» АТАКА Идея открыть на атакованном сервере новый порт может «осенить» разве чго начинающего хакера, не имеющего реального опыта программирования соке тов и не представляющего насколько этот способ нежизнеспособен и уязвим. Тем не менее многие черви именно так и распространяются, поэтому имееТ смысл поговорить об этом поподробнее (рис. 5.2). Программная реализация серверной части shell-кода совершенно тривиальна н в своем каноническом виде состоит из следующей последовательности темных вызовов: socket ► bind ► listen ► accept, организованных приблизител следующим образом (листинг 5.1). Листинг 5.1. Ключевой фрагмент shell-кода, открывающего на атакуемом сервере новый порт #define HACKERSJWf666// пор*, который эксплоит будет сгу®в I/ шаг I: создаем сокет if Г О socket = socket (AF INFT. S0CK STREAM. С» < 0) return -1: // шаг 2: связываем сокег с локальным адресом свой хвост ICMP-пакетами! В самом крайнем случае червь может послать свое тело и в обычном электронном письме (конечно, при условии, что ему удастся зарегистрировать на почтовом сервере новый ящик или похитить пароли одного или нескольких пользователей, что при наличии sniffera не является проблемой). 0 ... 53 54 55 56 57 58 59 ... 102
|