Перехват ICQ паролей Константин Клягин Xakep, номер #052, стр. 052-082-1 Стряпаем снифер на коленке Из достоверных источников поступила информация о том, что всеми любимая аська имеет довольно дырявую схему аутентификации и подключения к серверу. В отличие от других программ для быстрого общения, таких как MSN (.NET) Messenger и Yahoo! Messenger, использующих алгоритм MD5 для проверки пароля по контрольным суммам, в ICQ пароли передаются чуть ли не в открытую. Чему это учит молодых хулиганствующих сетевых маньяков? Ответ прост: пользуясь тем, что логин-информация передается при каждом подключении к центральному серваку, можно написать снифер, занимающийся автоматическим "выкусыванием" пароля из сетевого трафика. Об этом и пойдет сегодняшний разговор. Чтобы достичь нашей цели, будет вполне достаточно разобрать логин-пакет. Логично предположить, что только он и содержит нужное нам поле - пароль. Чтобы расшифровать структуру такого пакета, наряду с каким-нибудь ICQ-клиентом нам понадобится снифер. Конечно, для этих целей есть масса навороченных инструментов, с такой же неслабой процедурой инсталляции и мануалом на пару сотен страниц. Нам это не подходит. Зачем? Ведь для данной задачи сгодится самый что ни на есть стандартный, бытовой tcpdump. Утилита эта входит почти в каждый дистрибутив Linux и имеет достаточное количество всевозможных параметров, управляющих ее поведением. Снифим ICQ-пакеты Итак, имеется: роутер под каким-нибудь юниксом (у меня Linux) и виндовая машина с ICQ. Впрочем, совсем не обязательно иметь два разных компа. Настоящие сетевые хулиганы по достоинству оценили VMWare - фактически эмулятор компьютера, на котором "в окошке" можно запустить практически любую ОС. Так вот, здесь имеется инсталляция Linux, в ней запущен VMWare с Windows 98. Обе системы общаются по виртуальной TCP/IP сети, да и весь трафик проходит через Linux - как раз то, что нужно. Запускаем tcpdump из-под root: # tcpdump -X -s 65535 -i any -l 'dst host login.icq.com && src host vasya.ournet.int' | less Все это значит, что снифер будет выводить пакеты целиком (-s 65535 - максимальная длина), вместе с дампом hex (-X). Чтобы не заморачиваться, сетевой интерфейс - любой (-i any). Последний параметр - логическое выражение, определяющее фильтр для отображаемых пакетов. В нашем случае оно означает "показывать трафик, предназначенный машине login.icq.com, идущий от vasya.ournet.int". Последнее - имя машины с Windows. Можно поставить не хост, а просто IP-адрес. При незнании всего этого и полной уверенности в том, что никаких ICQ-клиентов в Сети больше нет, часть аргументов после "&&" можно опустить. С помощью "| less" (или "| more") будем смотреть вывод. Что же мы увидим? 12:37:11.598962 vasya.ournet.int.1057 > ibucp-vip-m.blue.aol.com.5190: S 19249:619249(0) win 8192 <mss 1460,nop,nop,sackOK> (DF) 0x0000 4500 0030 e600 4000 8006 9db6 c0a8 ae02 E..0..@......... 0x0010 400c c859 0421 1446 0009 72f1 0000 0000 @..Y.!.F..r..... 0x0020 7002 2000 60ad 0000 0204 05b4 0101 0402 p...`........... 12:37:11.978903 vasya.ournet.int.1057 > ibucp-vip-m.blue.aol.com.5190: . ack |