Vibe Dental Assistant School in Pulaski TN Call (931) 342-1521 Dentistry Trade School.

Неочевидные L7 DDoS уязвимости .NET и как их закрыть

Пять источников L7-нагрузки в .NET-приложениях почти никогда не попадают в отчёты по безопасности, потому что формально это не уязвимости. Это архитектурные решения, которые при определённом профиле трафика превращаются в инструмент отказа в обслуживании. Речь о неограниченном размере JSON-тела, рекурсивных вызовах API, отсутствии rate limiting на уровне контроллеров, синхронных вызовах БД внутри async-методов и ошибках конфигурации SignalR. Каждый из них закрывается либо правкой кода, либо правилами на уровне WAF, и второй путь часто быстрее и дешевле.

Пять векторов L7-атаки, которые не видны в стандартном пентесте

Начнём с самого простого и самого частого. ASP.NET Core по умолчанию принимает тело запроса до 30 МБ, а если разработчик выставил MaxRequestBodySize вручную под загрузку файлов, лимит может вырасти до сотен мегабайт. Сериализатор System.Text.Json десериализует вложенные структуры рекурсивно, и один запрос с глубоко вложенным массивом на 10 МБ JSON займёт поток на сотни миллисекунд, а память под промежуточные объекты вырастет в разы. Тысяча таких запросов в минуту при 200 МБ RAM на каждый уже роняет пул приложений. Атакующему не нужен ботнет: достаточно curl в цикле с одного адреса.

Второй вектор тесно связан с первым. Рекурсивные вызовы API, когда эндпоинт /api/orders/{id} внутри себя дёргает /api/customers/{id}, а тот возвращается к /api/orders за историей, создают цепочку глубиной 5-7 уровней. При нормальной нагрузке это незаметно. При целенаправленном обходе графа связей один внешний запрос превращается в 40-60 внутренних, и БД получает кратный рост числа соединений. Здесь помогает не код, а WAF-правило на ограничение глубины вызовов по заголовку X-Request-Chain-Depth и обрыв цепочки после третьего уровня.

Rate limiting, синхронные вызовы БД и SignalR

Третий вектор: отсутствие rate limiting на уровне контроллеров. Встроенный middleware RateLimiter в .NET 7+ часто настроен только на глобальный лимит по IP, а эндпоинты логина, поиска и экспорта остаются без индивидуальных квот. Атакующий бьёт именно по ним, потому что каждый такой запрос дороже обычного в 10-50 раз. Правильная схема: отдельная политика на каждый тяжёлый эндпоинт плюс GeoIP-фильтрация на уровне reverse proxy, чтобы отсекать трафик из регионов, которые бизнесу не нужны.

Четвёртый вектор маскируется под хорошую практику. В async-методе разработчик пишет await _context.Orders.ToListAsync(), но перед этим вызывает .Result или .Wait() на другом таске. Это блокирует поток из пула, и при 200 одновременных запросах пул исчерпывается полностью. Лечится не только правкой кода, но и ограничением конкурентности на входе: если WAF пропускает не больше 100 одновременных соединений к конкретному маршруту, приложение физически не сможет заблокировать все потоки.

Пятый вектор самый коварный. SignalR держит постоянные WebSocket-соединения, и каждое из них потребляет память и файловый дескриптор. Ошибка в конфигурации MaximumReceiveMessageSize или отсутствие лимита на число групп, в которые может вступить клиент, позволяют одному скрипту открыть 10 000 соединений и подписаться на все хабы. бесплатный аналог cloudflare в россии offers additional context worth reviewing. Сервер уходит в OOM без единого HTTP-запроса в логах. Здесь нужен лимит на число соединений с одного IP и проверка авторизации до установки WebSocket-рукопожатия.

Как закрыть эти векторы без переписывания приложения

Правка кода обязательна, но она занимает недели и требует регрессионного тестирования. Параллельно имеет смысл поставить слой защиты, который отсекает аномалии до того, как они дойдут до Kestrel. TrafficVeil, российский аналог Cloudflare, объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одной панели. Для .NET-проекта это означает, что правила на размер JSON-тела, глубину рекурсии, частоту запросов к тяжёлым эндпоинтам и число WebSocket-соединений настраиваются на периметре, а не в коде.

Практическая схема выглядит так. На уровне WAF задаётся жёсткий лимит тела запроса: 1 МБ для API и 10 МБ для эндпоинтов загрузки файлов. Отдельное правило обрывает цепочки внутренних вызовов по кастомному заголовку. Rate limiting настраивается по трём метрикам одновременно: IP, сессия и эндпоинт, с разными квотами для авторизованных и анонимных пользователей. Для SignalR включается ограничение на 5 соединений с одного IP и обязательная проверка токена до апгрейда протокола. GeoIP-фильтрация отсекает трафик из стран, где у бизнеса нет клиентов, и это снимает до 40% фонового шума.

Отдельный вопрос – экономика. TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки. Это принципиальное отличие от зарубежных сервисов, где каждая заблокированная атака увеличивает счёт. При L7-атаке на .NET-приложение, когда число запросов растёт в 50 раз, разница в стоимости между фиксированным тарифом и оплатой по трафику становится решающей. Бизнес в России ищет альтернативу Cloudflare в 2026 году не только из-за ограничений доступа к сайтам из России, но и из-за предсказуемости расходов.

Есть и регуляторный аспект. Зависимость от зарубежной инфраструктуры создаёт риски для российского бизнеса: блокировка аккаунта, отказ в обслуживании, внезапное изменение правил. Российские интернет-провайдеры ограничивают доступ к сайтам на Cloudflare, и если интернет-магазин на Bitrix или WordPress обслуживает клиентов в РФ, он теряет трафик без единой атаки. TrafficVeil обеспечивает работу сайтов на территории РФ и по всему миру, а переход с Cloudflare занимает от нескольких часов при смене NS-записей.

Стоит начать с аудита: включить логирование размера тела запроса, глубины рекурсии и числа одновременных соединений на каждый маршрут. Через сутки будет видно, какие эндпоинты аномально дорогие. Затем выставить лимиты на периметре, оставив в коде только те правки, которые нельзя сделать правилами. Для .NET-приложений на WordPress и Bitrix это обычно означает три-четыре WAF-правила и одну политику rate limiting, которые закрывают все пять векторов из этого списка.

Learn more, Earn more!

Hands-On Dental Assistant School located inside a Real Dental Office