NETCAT и CRYPTCAT
Взаимодействие с UDP-службами
Мы уже упоминали, что иногда Netcat используется в качестве слегка улучшенного Telnet-клиента. Несмотря на то, что многие вещи, которые делаются с помощью Netcat (вроде общения напрямую с HTTP-сервером), можно выполнять и с помощью telnet, у него есть некоторые ограничения, которых нет у Netcat. Во-первых, telnet не может корректно передавать двоичную информацию. Некоторые такие данные интерпретируются telnet, как команды. Следовательно, telnet не может корректно передавать поток данных транспортного уровня. Во-вторых, telnet закрывает соединение, как только он встретит во входном потоке символ EOF. Netcat может оставаться открытым до тех пор, пока соединение не будет закрыто извне, что часто используется для написания скриптов инициирующих соединение для ожидания большого объема передаваемых данных, которые посылаются одной строкой. Однако, вероятно наилучшей возможностью Netcat, по сравнению с telnet, является его способность взаимодействовать по протоколу UDP.
Рискнем запустить демона для ведения системного журнала на вашей Unix-машине - хорошо? Если он сконфигурирован для получения сообщений от других хостов в сети, то вы увидите что-то на 514 UDP-порту, если воспользуетесь командой netstat -a -n. (Если не можете, посмотрите соответствующие man -страницы, чтобы узнать, как запустить syslog в сетевом режиме).
Один из способов определить, принимает ли syslog UDP-пакеты, это попробовать следующую команду и посмотреть, что будет отражаться в журнале.
[root@originix nc]# echo "<0> I can speak syslog" | ./nc -u 192.168.1.100 514 Message from syslog@originix ar Tue Feb 12 06:07:48 2002 : originix I can speak syslog punt! [root@originix nc]#
Символы <0> указывают на наивысший уровень журнализации, kern.emerg, гарантирующий, что это сообщение должно быть записано где-то в системе (см. файл /etc/syslog.conf, чтобы точно знать, где). И если вы проверите журнал сообщений ядра, то сможете увидеть что-то вроде этого:
Feb 12 06:00:22 originix kernel: Symbols mathc kernel version 2.2.12. Feb 12 06:00:22 originix kernel: Load 18 symbols from 5 modules. Feb 12 06:00:22 originix I can speak syslog
Это отличный способ убедится в том, что удаленные UDP-серверы работают. И если кто-то запустит syslog с неограниченными правами, он откроет себя для весьма простых атак, с помощью которых можно заполнить все свободное дисковое пространство, занять всю полосу пропускания и полностью исчерпать ресурс центрального процессора.
[root@originix nc]# yes "<20>blahblahblahblahblah" | nc -s 10.0.0.1 -u targethost 514
Команда yes выводит строку (представленную в командной строке) еще и еще до тех пор, пока процесс не будет снят. Таким образом, можно затопить системный журнал на атакуемом хосте потоком бессмысленной чепухи "blahblahblahblahblah". Атакующий может также использовать липовый IP-адрес (-s 10.0.0.1), поскольку ответы syslog-демона не имеют никакого значения.
Создайте друга: подмена IP-адресов
Подмена IP-адресов сродни волшебству. Вы можете часто слышать, - "Как мы можем знать, настоящий ли этот IP-адрес? Что, если он подменил его?" На самом деле, подменить IP-адрес не так-то легко.
Возможно, следует перефразировать сказанное. Подмена IP-адресов - дело простое. Брандмауэры, которые осуществляют маскировку или трансляцию сетевых адресов ( NAT ), подменяют IP-адреса на постоянной основе. Эти устройства могут получать пакеты от внутренних IP-адресов, заменять исходные IP-адреса в пакетах на свой собственный адрес, посылать их вовне и отменять модификацию, когда получают данные назад извне. Таким образом менять содержание исходных IP-адресов в IP-пакетах достаточно просто. Что на самом деле сложно, так это иметь возможность получать ответ, посланный на подменный IP-адрес.
В Netcat есть опция -s, позволяющая определить тот IP-адрес, который нужно. Некто имеет возможность начать сканирование портов и использовать опцию -s, подстроив дело так, будто сканирование ведет компания Microsoft или Федеральное Бюро Расследований. Проблема возникает, однако, если вы в действительности хотите получить ответ от сканируемых портов на реальный IP-адрес. Поскольку исследуемый хост получает запросы от фирмы Microsoft, к примеру, он будет посылать уведомления о получении на тот же IP-адрес Microsoft. IP, конечно, не имеет представления, о чем сообщает ему исследуемый хост и пошлет ему отказ в соединении. Как добиться возврата информации на реальный IP-адрес, не опасаясь попасться?
Помочь взломать машину может также опция, определяющая порядок маршрутизации. Порядок маршрутизации позволяет сетевым приложениям определить маршрут, по которому вы хотели бы достичь конечной точки.
Порядку маршрутизации присущи две вещи: строгость и неопределенность. Строгость порядка маршрутизации означает, что в пакете должны определяться все закоулки определенного маршрута до конечного хоста. Некоторые маршрутизаторы и сетевые устройства пока позволяют строгий порядок маршрутизации, а некоторые должны позволять неопределенный порядок маршрутизации. Неопределенный порядок маршрутизации сообщает маршрутизаторам и сетевым устройствам, что они могут определять маршрут до конечной точки самостоятельно, но при этом пакеты обязательно должны пройти через определенный набор маршрутизаторов на пути к конечной точке. Это представляет определенную опасность, поскольку позволяет взломщику пересылать пакеты через машину, которую он контролирует (возможно, это машина изменяет IP-адреса входящих пакетов на что-нибудь еще). Когда ответ возвращается, он проходит по тому же самому нестрогому маршруту и приходит обратно через ту же машину (которая восстанавливает истинный IP-адрес). Благодаря этому способу задания порядка маршрутизации, возникает возможность атакующему подменить IP-адрес и при этом получить ответ от атакуемой машины. Большинство маршрутизаторов игнорируют параметры порядка маршрутизации, но не все. Опция -g Netcat позволяет определить до 8 точек, которые должен пройти пакет до того момента, как попадет в конечную точку. К примеру, команда
nc -g 10.10.4.5 -g 10.10.5.8 -g 10.10.7.4 -g 10.10.9.9 10.10.9.50 23
определяет telnet соединение по 23 порту с адресом 10.10.9.50, но если опция порядка маршрутизации включена на промежуточных маршрутизаторах, то трафик будет принудительно маршрутизироваться через четыре указанных адреса, прежде чем достигнет конечной точки. Если мы попытаемся выполнить команду
nc -g 10.10.4.5 -g 10.10.5.8 -g 10.10.7.4 -g 10.10.9.9 -G 12 10.10.9.50 23
, то определим точку для прохода трафика с использованием параметра -G. Параметр -G устанавливает значение в n байт (в данном случае двенадцать), и поскольку IP-адреса занимают каждый по 4 байта, точка входа устанавливается на адрес 10.10.7.4. Таким образом, на пути к машине 10.10.9.50, трафик должен пройти только через последние две машины (так как в соответствии с установками мы уже пропустили первые две). Тем не менее, на обратном пути пакет должен пройти через все четыре машины.
Если ваши маршрутизаторы и сетевые устройства не могут быть настроены так, чтобы игнорировать заданный порядок маршрутизации, следует надеяться, что ваша система обнаружения вторжений ( IDS ) сохранит вас от них (коротко IDS мы рассмотрим в лекции ""Анализаторы сетевых потоков (Sniffer)"" ). Любой, кто может запустить анализатор трафика вроде Ethereal, может легко обнаружить факт использования задания порядка маршрутизации, поскольку раздел параметров в IP-заголовке будет больше обычного, и IP-адреса в списке маршрутизации будут хорошо видны, если воспользоваться ASCII-декодером. Если это важно для системного администратора, он может проследить хозяина каждого IP-адреса в списке, чтобы найти преступника.