Взаимодействие с 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-сессию для Netcat и передали что-то на вход, а после нажатия клавиши Enter Netcat немедленно закончил работу, проверьте, не занят ли используемый вами UDP-порт.
Это отличный способ убедится в том, что удаленные 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-демона не имеют никакого значения.
Совет. Если вы страдаете от такого рода атак, то большинство используемых в настоящее время syslog-демонов имеют опцию командной строки (FreeBSD использует -a) для ограничения хостов, которые могут посылать сообщения. Вместо того чтобы получать сообщения от хоста, внесенного в такой список, syslog будет их игнорировать. Однако, поскольку Netcat может без труда подменить IP-адреса и в этом случае, то атакующий может воспользоваться разрешенным IP-адресом из вашего списка и использовать его в качестве обратного адреса. Блокирование входящего syslog-трафика с использованием брандмауэра следует в данном случае считать наилучшим решением.