1062

DDoS атаки по России. Расследование атаки на наш проект

Привет!

Решил рассказать как мы расследовали DDoS атаку на свой проект. Это не реклама моего проекта, просто хочу поделиться тем, как это работает. Так что упоминать что за проект не буду. Возможно, механика этой атаки поможет кому-то справиться с атакой на его проект.

Думаю, многим Пикабушникам может быть не известно что такое DDoS атака или они представляют это примерно. Ну если вы не айтишник, конечно. Расскажу просто и понятно: смысл атаки в том, чтобы закидать сервер (сайт) ненужными запросами, чтобы он просто физически не успевал отвечать на все запросы и в итоге был недоступен. Обычно это делается с множества зараженных устройств, которые в один момент вместе начинают делать запросы, а их хозяева об этом даже и не знают. 

Зачем это делают? Ну, так можно "уронить" сайт конкурента и получить преимущество. Ведь пользователи не будут ждать, пока сайт оживет, они уйдут к конкуренту. А того, кто заказал атаку потом фиг найдешь. Атакуют то устройства, что заражены, а не сам заказчик.

А еще это могут делать, чтобы предотвратить распространение или нераспространение информации. Именно по этому многие СМИ в России попали под атаки. Те, кто вообще ничего не пишет про известные действия, либо те, кто высказывается "за".

Вернемся к теме. В один момент мы заметили, что сайт сильно тормозит и даже иногда недоступен. Стали разбираться. Оказалось, что на сайт приходит больше 2 миллионов запросов в день на адреса типа https://сайт/?CszXcMgwhNGzq3YfY. Буковки после знака "?" всегда разные.

Угу, значит атакующие решили не просто открывать сайт, а еще и с уникальным адресом, чтобы наша кэш-система (а это специальная такая штука, которая позволяет не выполнять код на сервере каждый раз, а, если ничего не меняется, просто отдавать сразу готовую страницу), постоянно пропускала запрос и сервер был сильнее нагружен ненужными вычислениями.

Стали изучать логи доступа и обнаружили, что трафик идет со многих сайтов. В интернете есть такая клевая штука как HTTP referer, это такой специальный заголовок в запросе на сайт, который рассказывает ему с какого сайта пришел запрос. Сайты заражаются каждый день и добавляются, но на текущий момент - вот список этих сайтов (конкретно сегодня я не проверял все, может какие то уже и вылечили):



Лучше не открывайте их, это просто для информации! Если вы можете как то связаться с администрациями этих сайтов, то сообщите им, пожалуйста, что их взломали и заразили.


5sfer .com
vituo .by
d-d-d .spb .ru
language .az
priboi .news
proputeshestvie .ru
gzocm .ru
picworld .ru
gelengizer .ru
ilike .guru
lnvistnik .com .ua
vsfedotov .com
prosvetlenie .pro
eraofunity .world
propestit .ru
jantrish .com
imda .uz
criminology-center .org
navremy .ru
csedu .ru
obu4alka .ru
autotopik .ru
линуксблог .рф
graj .by
sn-portal .ru
coinspaidmedia .com
yanva .ru
subcultures .wiki
bibl20 .ru
gazeta-vestnik .com .ua
media-zvezda .ru
krutomama .ru
vlg-34 .ru
Как я заметил, сайты построены на системе WordPress, так что следите за своими сайтами на этой CMS, если у вас такие есть. Видимо, там есть неопубликованные уязвимости.

Зайдя на сайты и посмотрев что там происходит мы не ожидали, что сайты открываются и через минуту зависает браузер.  Стали изучать код и нашли сам скрипт вируса. Он без всяких ограничений в бесконечном цикле бомбордирует запросами множество сайтов самых разных СМИ и блогов России. Но списка сайтов для атаки нет нигде в коде.

Изучая скрипт мы нашли адрес сайта, с которого берется список сайтов, на которые нужно слать запросы. Вот он: aHR0cHM6Ly9qcXVlcnkuZnJhMS5kaWdpdGFsb2NlYW5zcGFjZXMuY29tL2pxdWVyeS5qc29u

Айтишники могли сразу понять что это такое. Для тех, кто не понял, поясню. Это закодированный через алгоритм Base64 адрес сайта. Можно расшифровать например тут base64decode.org.

Но я расшифрую для вас: https://jquery.fra1.digitaloceanspaces.com/jquery.json

Адрес притворяется популярной библиотекой у разработчиков jquery, в надежде на то, что его не заметят или, как минимум, не сразу найдут. Если открыть ссылку, то там нас встречает еще один непонятный для не айтишников текст. (Открыть можно, там нет ничего страшного).


Там закодированные в том же Base64 адреса сайтов, на которые нужно вести атаку.

Надеюсь, этот пост поможет в отражении атаки тем, кто тоже есть в списке атакуемых сайтов, если по каким-то причинам им так и не удалось справиться с атакой. Что конкретно с этим всем делать администраторы и сами прекрасно знают.)

Спасибо за внимание!

UPD: вставил пробелы в списке зараженных сайтов, чтоб редактор сам не превращал их в ссылки. Этот список для того, чтоб, если есть контакты с владельцами, им могли сообщить о проблеме, а не для того, чтоб посещать эти сайты.


Владельцам облака, который содержит список для атаки ботнета был отправлен запрос на эту тему в специальную форму на сайте. На текущий момент (24 апреля 2022 г.) ответа не поступало.

Правила сообщества

Обязательно к прочтению для авторов:

1. Если вы добавляете пост, утверждающий об утечке данных или наличии дыр в системе, предоставьте ссылку на источники или технически подкованное расследование. Посты из разряда "Какой-то банк слил данные, потому что мне звонили мошенники" будут выноситься в общую ленту.
2. Все вопросы "Как обезопасить сервер\приложение\устройство" - в лигу "Компьютер это просто".

Обязательно к прочтению для всех:

Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.


Запрещены политические holy wars.

По решению модератора или администратора сообщества пользователь будет забанен за:

1. Флуд и оскорбление пользователя, в т.ч. провокация спора, флуда, холивара (высказывание без аргументации о конкретной применимости конкретного решения в конкретной ситуации), требование уже данного ответа, распространение сведений порочащих честь и репутацию, принижающих квалификацию оппонента, переходы на личности.

2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.

3. За обвинение в киберпреступной деятельности.

4. За нарушение прочих Правил Пикабу.

66
DELETED
Автор поста оценил этот комментарий

Как то не завершенно выглядит, хостеру хоть сообщили что у него центр управления ботнета хостится?

раскрыть ветку (1)
30
Автор поста оценил этот комментарий
Да, отправили запрос. Он не отвечает
показать ответы
2
DELETED
Автор поста оценил этот комментарий

А можно ли эти ддос атаки перенаправлять на эти заражённые сайты? Чтобы эти машины имели меньше ресурсов на спам

раскрыть ветку (1)
8
Автор поста оценил этот комментарий

Ддосить в ответ как то подло. Эти ребята же не виноваты, ну только в том, что они не уследили за своей безопасностью на сайте. Да и подделать запрос достаточно легко, то есть прислать запрос с сайта А, но написать, что он пришел с сайта Б.

Но чисто технически это возможно. Только вот сам скрипт вируса не обрабатывает ответ от сервера, соответственно, редирект (переброс) на другое место не пройдет. То есть в итоге запросы надо делать со своего сервера, а это совсем не нужно.

Я думаю, было бы гораздо надежнее перенаправлять запросы на сам список сайтов для ддоса, чтобы никто не мог его получить, однако, поскольку там статичная страница, чтоб положить такое, надо гораздо больше запросов делать. Думаю вряд ли пара миллионов запросов в сутки положит статику. И сервер там, я думаю, заранее готов к подобной ответочке.

Автор поста оценил этот комментарий

Такое: https://сайт/?CszXcMgwhNGzq3YfY можно порезать regex-ом.

@DurovPozvonit, не выкладывайте, на будущее, список вирусованных сайтов.
@moderator, подотрите список сайтов. На них, по моему, майнер или еще какая то злобная дичь сидит, которая намертво браузер убивает. Может, конечно, дело в слабой виртуалке, но это явно не нормально.

раскрыть ветку (1)
9
Автор поста оценил этот комментарий

Я список выложил, чтоб кто-нибудь мог сообщить владельцам о проблеме. Я на многих сайтах не нашел никакой обратной связи. Майнера там нет, там просто спамят запросами и по этому виснет браузер.

Про регулярку верно. Так и сделали. Просто я описал саму схему, а не то, что с этим делать

показать ответы
Автор поста оценил этот комментарий

Так что упоминать что за проект не буду.

Итого пять упоминаний в первом же абзаце и названии. То есть в каждом предложении))))

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
Ну название то не сказал))))
29
DELETED
Автор поста оценил этот комментарий
Нужно написать скрипт, что бы на всех их запросы сервер отвечал по пикабушному: идите на хуй!
раскрыть ветку (1)
8
Автор поста оценил этот комментарий

Можно и так. Но этого никто не увидит к сожалению)

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Иногда надо быть не программистом, а бизнесменом. Заплатить за то, чтобы профи сделали свою работу и не дать проекту простаивать. Я программер, но лучше заплачу денег, чем буду месяц бороться с ддос и потеряю клиентов 🙃

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Так кто сказал, что мы боролись месяц то.) Там работы на 15 минут. Любое дело, по мне, должно приносить деньги в первую очередь. Если я знаю как сделать что-то и у меня есть на это время, зачем мне тратить лишние деньги на это и при этом получать еще одну зависимость от другого сервиса и следовательно дополнительную риски?) Я вполне могу себе позволить потратить несколько раз в год 15 минут, и считаю, что это лучше чем увеличивать траты на заметный процент в месяц, да еще и на простой фильтр трафика, а не полноценных специалистов. То же самое, кстати, даст любой бесплатный режим на специальных сервисах. Тот же cloudflare с активной кнопкой under attack
показать ответы
Автор поста оценил этот комментарий

а есть почитать сайты как грамотно на различных уровнях выстраивать защиту от вломов, дудосов? времена неспокойные будут длиться очень долго, так как сша сошли с ума...

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Я думаю по запросу "Как защититься от DDoS" в поисковике найдется достаточно информации для начала.)

2
Автор поста оценил этот комментарий

А вообще интересно, конечно, не знал как делается http ddos. Помню когда изучал сетевое программирование, изучил как делать tcp ddos (syn flood), но такой вид, насколько знаю, сейчас очень легко отражается (по крайне мере умеренный ddos из пару тыщ машин).

Конечно, способ достаточно очевидный, но вот скажем захотел бы я стать кул хацкером и начать ддосить всех подряд, то я бы подумал, что такой способ слишком простой и вряд ли применяется в жизни, а оно вон как всё.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Ну тогда еще один интересный факт: сайты могут заменить на что угодно, что имеет доступ в интернет. Телефоны, компьютеры, всякие "умные" устройства, те же часы или "умные" лампочки, увлажнители и так далее. Можно даже с холодильника, если он подключается к интернету.

показать ответы
0
Автор поста оценил этот комментарий

Запросы идут с фронтэнда. В сайты встроен js скрипт, который это делает.

@moderator, а нельзя снять активность с приведённых ссылок? Чтобы получился текст, как в домене с рф? А то юзеры Пикабу знатно посодействуют ддосу.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Вставил пробелы в ссылки, думаю, это поможет :)

Автор поста оценил этот комментарий

А как же балансер на nginx с редисом? Большая часть запросов вообще не дойдёт до сервера приложений.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Мы не на столько большие, чтобы заводить балансер с редисом. У нас в сутки бывает по 800 человек, в пике тысяч 8. Хватает и так ресурсов на все. Ну и сайт старый, сейчас занимаемся созданием нового, там редис предусмотрен
показать ответы
19
DELETED
Автор поста оценил этот комментарий

HTTP referer тоже подделывается. Чтобы запрос более "человечным" выглядел.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Верно. Но на этих сайтах есть сам скрипт, который делает запросы. Понятное дело, что это блочится не по рефереру
5
DELETED
Автор поста оценил этот комментарий

а вот клиенты увидеть нет-нет, да смогут.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий
Так это же реквест внутри браузера. Там скрипт даже ответ не обрабатывает..
показать ответы
0
Автор поста оценил этот комментарий

А можно для начинающих рассказать про регулярные выражения?

1. Какое выражение использовали для защиты?

2. Что отвечает сервер, когда адрес не подходит под регулярку? Он же все равно занят ответом 404 или он игнорирует запросы? Как это вообще работает?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Ну например nginx умеет отвечать код 444. То есть "Закрыл соединение без ответа". Однако, в некоторых случаях браузеры могут на такое послать еще один запрос и опять.. и опять.. А здесь достаточно и 403 ответить, то есть "Доступ запрещен". Этот код здесь подходит лучше чем 404. И на это много ресурсов не тратится.

На счет регулярных выражений - вот здесь regex101.com - есть справа снизу описание что значит каждый символ в выражении. Выражение пишется под конкретные нужды в зависимости от того, что требуется. Можно так же вставить в поле урлы, которые должны баниться,  или нужный текст для поиска, написать выражение и проверить подходит ли оно к ним.

1
Автор поста оценил этот комментарий

как защитились то не  написал.


механизм понятен - пользователь зашёл, на своей тачке выполнил скрипт, запрос полетел в жертву. как жертве то защищатсья? запросы то валидные.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Статья и была про то как устроена текущая атака. Но как тут уже писали, такое отражать достаточно просто. Достаточно регулярки, которая банит левые запросы и все)

Автор поста оценил этот комментарий

а что если ПОВЕСИТЬ скрипт определяющий время интервалов через сколько идёт запросы и если идёт меньше чем через ххх милисекунд то такой запрос ставить в очередь low приорити и если атаки не прекращаются сразу ставить в черный список и далее сигнал "тех поддежке себе, хостерам" что идёт дудос?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
А что в черный список отправлять?) все ip разные. UA разные и их легко подделать. Только урл можно регулярной пресечь сразу. Это и так уже сделано
показать ответы
5
Автор поста оценил этот комментарий

Я надеюсь, на вашем сайте есть разные адреса для запросов разного типа, и адреса вида https://сайт/?.... отвечают только за показ главной страницы? Если это так, просто настройте кеширование в нжинксе по-человечески, чтобы ключ кеширования был минимальным и не содержал строку параметров. Или содержал только те параметры, которые действительно используются для этого адреса. Если проблема была в том, что у вас слишком большая нагрузка на бэк-енд пошла (а не в том, например, что атакующие сожрали всю ширину сетевого канала), то глядишь вы такую атаку и замечать перестанете...

Вариант №2 - если у вас уже есть список зараженных сайтов, можно просто блокировать запросы которые с них приходят, и ничего не отдавать (профит от варианта с кешем - не забиваете сеть никому не нужным трафиком). Возможно, в nginx есть уже какая-то приблуда для подобных трюков, не интересовался. Если нет - пишется в пару строк на lua под lua-nginx-module. Удачи.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Да мы уже все сделали. Это просто пост с описанием того как работает текущая атака, а не как от нее защищаться. Спасибо)
1
Автор поста оценил этот комментарий

@DurovPozvonit,

1. Поясните, скрипты на этих сайтах через компы посетителей запросы кидают? Или запросы идут с самого бэк-энда?

2. Если на заражённых сайтах есть зашифрованная ссылка на список, значит где-то рядом и ключ дешифровки лежит? В чём тогда смысл, пресечь беглый анализ?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Запросы идут с фронтэнда. В сайты встроен js скрипт, который это делает.

Расшифровывать с ключами ничего не надо. Функция bbase64 сама без ключей превращает это в нормальный вид.
показать ответы
0
Автор поста оценил этот комментарий

У вас на проекте используется WAF? Не увидел в статье. А какой именно?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

В статье просто описание текущей атаки, а не процесс защиты от нее или описание вообще как это делается. WAF встроенный в CF)

0
DELETED
Автор поста оценил этот комментарий

Проект проекту рознь. Веб сервис на api на claudflare как я понимаю не повесить.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я не пробовал, но видел специальные настройки для апи в панели управления клауда. Так что, думаю, можно

0
Автор поста оценил этот комментарий

Расскажи это мне, у меня 8-10 лет один сайт по приколу на wp, 30-100к посещений в месяц. Ботов и не считаю.

Блок админки даёт невозможность что либо записать. Все плагины именно в одном месте находятся. Ставишь блок на запись и все равно есть там у тебя  уязвимости или нет.

Правда постить неудобно: с начало нужно снести блок, потом запостить, потом вернуть блок обратно.

А долбят сайт так что моё почтение. Раз по 100 за день, не меньше.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Это говорит лишь о том, что вы внимательно относитесь к своей системе. Я имел ввиду, что надо защищать не только админку но и плагины и другие места сайта
0
Автор поста оценил этот комментарий

Достаточно 1 час почитать в инет и нормально сделать htacess и блокирнуть свою админку на wp.

Но это так сложно...

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

В некоторых случаях не важно заблокирована админка или нет. Иногда попадаются уязвимости в плагинах. Достаточно найти нужный на сайте и расположение его скрипта, а потом к этому скрипту передать в нужном виде запрос. В некоторых случаях можно и прям в корневой каталог запрос посылать.

Так что закрыть админку, переместить ее в другое место, сделать мега сложный пароль или даже дополнительную авторизацию (по файлу-ключу, 2fa любой или еще чего) ну и что-то подобное далеко не панацея от всего.)

Водрпресс достаточно удобная штука, если тебе надо дешево и быстро сделать сайт. Однако, из-за множества сторонних плагинов, открытого исходного кода и самой архитектуры CMS - это далеко не самый безопасный вариант, надо очень внимательно относиться ко всему там внутри

показать ответы
0
DELETED
Автор поста оценил этот комментарий

А разве сейчас на уровне хостинга не вешают разные антиддосы с ограничением по нагрузке и по IP?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Вешают. За дополнительную плату. Но это можно и самому сделать бесплатно во многих случаях. Уж в такой то атаке точно)

показать ответы
0
Автор поста оценил этот комментарий

Кстати, поздравляю с адским рейтингом :)

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Какой ужас. Срочно нужен еще один голос! )))
0
Автор поста оценил этот комментарий

Это хорошо, тогда успешной защиты вам в дальнейшем. И, надеюсь, вы дорастете до девопсов, которые будут вместо вас от этого страдать.

Напоследок спрошу, у вас ip адрес сервака нигде не светится? Может сабдомены провисают где то, или в ответе на почтовые письма заголовки содержать могут.
Есть еще dns history, которая радостно сообщит, где кто насрал бывал

Один из легких способов узнать реальный IP адрес сервера

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо)) Нет не светится по идее. Из поддоменов только www, он cname на клауде. Да и вот мы как раз переехали на новый адрес с hezner, недавно, потому что его теперь не оплатить просто так. Так что даже если раньше где-то светился, теперь уже другой. Но за ссылку спасибо, изучу проверю на всякий случай.
показать ответы
0
Автор поста оценил этот комментарий

У вас в nginx настроен limit_req_zone? Это, конечно, не манна небесная, особо не спасет от DDoS атак, но поможет сохранять на плаву работоспособность самого сервера.

Если нет, то вот прекрасная статья: https://habr.com/ru/company/southbridge/blog/329876/

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, я тоже ее читал. Такая настройка есть, спасибо)

показать ответы
0
Автор поста оценил этот комментарий

Понятно. А вы, как я понимаю, бэкендер?

Скорее всего, у вас для сайта типичная связка используется nginx + php-fpm, верно?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Верно. Я на работе работаю бэкэндером. Ну и этот проект ведется еще года с 2012, так что некоторые вещи про девопс тоже знаю. К сожалению сам сайт писал не я, мы использовали цмс и просто натянули дизайн, который нам когда-то давно понравился. Сейчас переписываю с новым дизайном на symfony + vue. И да, именно такая связка сейчас используется

показать ответы
0
Автор поста оценил этот комментарий

Хм, возможно, конкретно ваш случай мог с помощью CF за счет настроек WAF и rate limite rules отбиться от атаки. Но да, когда прод лежит, тут не до размышлений, что лучше поможет. Здесь самый лучший вариант - активация under attack.

У вас devops инженеры есть в штате?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Внутри WAF можно использовать Google re2 регулярные выражения. Правда я только вчера узнал, что они существуют и пока не разобрался чем они отличаются от обычных. Так что заблочил на стороне nginx регулярной обычной и на CF через реферер, чтоб часть запросов отсекалась на стороне CF. Как разберусь как написать регулярку re2, так добавлю ее вместо того, что есть.
показать ответы
0
Автор поста оценил этот комментарий

Хм, возможно, конкретно ваш случай мог с помощью CF за счет настроек WAF и rate limite rules отбиться от атаки. Но да, когда прод лежит, тут не до размышлений, что лучше поможет. Здесь самый лучший вариант - активация under attack.

У вас devops инженеры есть в штате?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
У нас есть только я с технической стороны. На девопсов денег не хватит
показать ответы
0
Автор поста оценил этот комментарий

Не знаю, какая у вас конкретно защита настроена, но я могу в пример привести cloudflare, который максимально юзер френдли и своей могущей кнопкой under attack очень хорошо фильтрует DDoS атаки.

А вот если взять Cloudfront - там да, без мануала и бутылки водки сложновато.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Именно cloudflare у нас и стоит. Кнопка действительно хорошо помогает, чтоб сайт в принципе не падал. А так же вычищает рефереры из приходящих на сайт и сайты метрики типа лайвинтернета или Яндекс метрики считают переходы на сайт типа как "неопойми откуда".

Соответственно, рекламодатели менее охотно хотят работать с сайтом, поскольку не знают откуда там трафик. (Я не очень понимаю, почему им это на столько важно, видимо, есть причины). А для сайта с небольшой посещаемостью это крайне важно для выживаемости.

показать ответы
0
Автор поста оценил этот комментарий

А проект вообще защищен каким либо cloudflare\cloudfront?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, подобная защита присутствует. Но надо понимать, что без правильной настройки она практически бесполезна, разве что реальный ip сервера скрывает и кеширует данные. Да и настраивать надо под каждый конкретный случай специфически.

показать ответы
0
Автор поста оценил этот комментарий
Всего 2 сайта?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Где два? На сервере злоумышленника штук 40 сайтов у меня выдает.. На каждую новую строчку - новый сайт.

2
Автор поста оценил этот комментарий
Хммм, а в base64 закодировано прям так, без шифрования? Школота балуется?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Вполне может быть )