"Благими намерениями
дорога в Ад вымощена"
Стало пословицей.
Кратко смысл данной статьи можно выразить так: существующие службы (анонимных) почтовых пересылок ( часто называемых римейлингом или форвардингом) за счёт совместных недоработок открывают путь для тупейшей атаки на отказ произвольного почтового ящика/сервера с небольшими ресурсами и ... самих себя! Хуже всего то, что методика, описанная ниже, по силам и "чайнику"( правда, последнего потом, ещё можно найти). Кстати и сам автор специализируется совсем в другой области.
Атака описана на примере использования почтовых служб mail.ru, hotmail.ru и анонимного римейлера remailer@replay.com. Все имена (кроме анонима и хостов почтовых серверов) разумеется изменены. Атакуемый объект принадлежал лично автору.
Кто хорошо знаком с системами римейлинга/форвардинга может пропустить первые два раздела.
1. Первые нехорошие мысли (легальные)
На эту идею автор натолкнулся, используя бесплатные мейл-сервера для обеспечения рассылок почты по нескольким филиалам.
Проще говоря, я использовал систему пересылки почты сервера mail.ru, указывая в поле пересылки созданного почтового ящика e-mail'ы семи или восьми филиалов. Таким образом при рассылке 200 килобайтного письма экономился примерно 1 Mb трафика. Со временем число филиалов выросло, возникла необходимость объединить их в группы. Система рассылки стала иерархической, примерно такой:
group1@ ... пять адресов)
group2@ ... : ( три адреса)
group3@ ... : ( семь адресов)
all_group@ ... : (три_адреса: group1, group2, group3)
Возможность пересылки на несколько адресов сразу предлагают очень немного почтовых серверов, в частности mail.ru. Надо отметить также, что этот сервер сразу отказывался принимать список для пересылки, когда по ошибке в нём два раза повторялся один и тот же адрес. Более того, если адреса в группах пересекались, то всё равно отсылался лишь один экземпляр письма! Молодцы.
Естественно, начал мучить вопрос, а что будет, если подставить рекурсивную ссылку, например в адреса для какой-нибудь группы поставить адрес её самой или "all_group".
2. Вторые нехорошие мысли (наивные).
Почитав литературу, быстро убедился, что ничего не произойдёт, нормальные сервера пересылки вставляют в заголовок характерную строчку, позволяющую им избежать зацикливания, по схеме: А пересылает на Б, Б на А. При повторном получении того-же письма оно будет уничтожено, обычно без отсылки извещения.
Иначе открылась бы перспектива "случайно" загрузить сервера огромным количеством бессмысленной работы. Пусть, например, А пересылает на (B,C) B - на (A,C) C - (А, Б). Нетрудно увидеть, что эта схема приводит к экспоненциальному росту количества сообщений в системе. К счастью, думалось мне, подобное развитие событий исключено.
Прошёл примерно год ... Все чаще на наши адреса стал приходить спам, чьи авторы успешно пользовались анонимными почтовыми службами (типа remailer@replay.com, remailer@anon.egfa.org ) Сети для удаления первоначального адреса письма. Процедура совсем несложная: в заголовке (или начале письма ) пишете строку вида "Anon-To:адреса_получателей", и отсылаете письмо на remailer@replay.com . В указанные почтовые ящики придут письма с обрезанным заголовком.
3. Самые нехорошие мысли ( об уголовно-наказуемом ).
Постойте-ка, ведь использование анонимных римейлеров( дальше просто - анонимов), позволяет некоторое количество раз обойти ограничение на рекурсивную пересылку. Рассмотрим нашу последнюю схему: А пересылает на (B,C);
B - на (A,C); C - (А, Б).
В заголовок (начало) письма добавим N строк "Anon-To: A, B, C". A,B,C пусть пересылают на аноним (R) .
Теперь, если послать письмо на A, B или С, то пока R исчерпает все строки Anon-To, и в сети будет гулять 3**N (три в степени N) писем. Для N=100, это порядка 10**48 писем, что где-то на 20 порядков больше, чем число проходящих за день во всём Интернете. Вряд ли, какой сервер выдержит это. А ведь N может быть скажем равным 20, а адрес C - Вашим ( или Вашего врага, или postmaster@kavkaz.org ). С - получит около 2**21 ( двух миллионов) писем. Если в каждом будет 100 килобайт текста то "выход" составит 200 Gb. Что станет с его сервером и каналом?
4. Эксперимент
Впрочем, в этой схеме средний аноним накроется где-то на N>10 (они и так-то перегружены), но ведь никто не мешает написать более оптимальную схему, в которой основная нагрузка падает на форвардер.
Пример.
attack@post - атакуемый объект
Mail.ru, hotmail.ru - форвардеры. Второй форвардер необходим т.к. mail.ru не позволит продублировать адрес даже цепочкой внутренних пересылок, а hotmail.ru пересылает только на один адрес.
Аноним - remailer@replay.com
a_readr@mail.ru пересылает на remailer@replay.com, attack@post и tmp_atck@hotmail.ru [, tmp2_atck@hotmail.ru, tmp3_atck@hotmail.ru ...]
tmp_atck@hotmail.ru на attack@post
[tmp2_atck@hotmail.ru на attack@post
tmp3_atck@hotmail.ru на attack@post
...]
В начале письма N фрагментов:"
::
Anon-To: remailer@replay.com, a_readr@mail.ru
<пустая строка>
" ( самому себе аноним тоже отсылает).
Отсылаем письмо на a_readr@mail.ru. Всё!
При N=2 и без дополнительных адресов tmp2_atck , tmp3_atck, ... attack@post - получил 14 писем. С k дополнительными их было бы (2**N-1)*(2+k). Ещё более опасной формой атаки является случай, когда один из форвардеров указывает на несуществующий адрес реального почтового сервера, перегружая последний в целом. Впрочем, это бесконечная тема.
5. Мысли о будущем или как защититься.
Сразу оговорюсь, что в этой области не силён. Может кто-то и знает/придумает эффективный способ защиты. Пожалуйста поделитесь.
От большинства атак на отказ можно защититься грамотной конфигурацией сервера. Описанная же методика, в лучшем случае просто забьёт Ваш почтовый ящик или сервер. К сожалению, от нас здесь мало что зависит. Почти ничего. А вот авторы анонимов могут помочь. Обычным пользователям можно пользоваться почтой с ограниченным размером почтового ящика ( если у Вас ещё сохранились такие "старомодные" провайдеры). Скорее всего упадёт лишь Pop-сервер. Если местные провайдеры уже забыли о такой "услуге", попробуйте Web - почту типа @netscape.net, с ограниченным почтовым ящиком. Мне кажется, здесь аноним или форвард выйдет из строя гораздо раньше.
Можно, конечно поставить фильтр на известные анонимы или форвардеры, но ведь ими пользуются нормальные пользователи.
Анонимам же достаточно начать обрабатывать сразу все заголовки "Anon-To". Рост превратиться в линейный. Это тоже плохо, но уже совсем не смертельно. Ещё лучше обрабатывать только последнюю строчку переадресовки.
Разумеется, владельцам подобных анонимов были посланы соответствующие письма, но наверняка они затерялись в жалобах на спаммеров, да и римейлеров в Cети куда больше, чем может найти автор...
На 23 сентября 1999 г. пример ещё работал.
P.S. Пример специально построен на достаточно медленных или перегруженных серверах, чтобы их нельзя было эффективно использовать для атаки.