Как правильно внедрить систему предотвращения вторжений без потери производительности.
Алексей Егоров, главный архитектор стратегических проектов по информационной безопасности, Positive Technologies
Включили IPS на файрволе, а производительность просела на 60%? Добро пожаловать в клуб! История про то, как маркетинговые 99% детекта превращаются в реальные головные боли, знакома каждому сетевому инженеру. Сегодня разберём, что творится внутри системы предотвращения вторжений, почему она так безжалостно пожирает ресурсы и главное — как сделать так, чтобы IPS работала на вас, а не против.
Забудьте про абстрактные схемы из презентаций вендоров. Поговорим конкретно: какие правила читает движок, что проверяет в потоке и почему одна неаккуратная сигнатура может положить весь продакшен.
NGFW пропускает трафик по своим политикам, а IPS параллельно сверяет содержимое с сигнатурами и выполняет указанное в них действие. Звучит просто, но дьявол кроется в деталях. IPS обрабатывает поток пошагово: видит протокол и направление, восстанавливает контекст сессии и сверяет полезную нагрузку с предикатами сигнатуры. При совпадении — действует ровно так, как сказано в правиле.
Сигнатура — это точное описание признаков нежелательной активности, которое даёт системе формальный критерий: «это похоже на атаку, пора реагировать». Думайте о ней как о рецепте: чёткие ингредиенты, пропорции и последовательность действий. Только вместо борща получаем детект угрозы.
Открытые движки Snort и Suricata задали синтаксис де-факто. Даже когда вендор пишет собственный IPS, ему удобнее поддерживать «snort/suricata-язык», чтобы аналитики могли быстро формировать качественные правила. От качества формулировок зависит не только охват техник, но и производительность — чем умнее условие, тем меньше ложных совпадений в продакшене.
В реальных продуктах часто используют собственный движок, но синтаксис оставляют совместимым — это снижает порог входа для экспертов, которые пишут и сопровождают правила. Как говорится, зачем изобретать велосипед, когда можно просто сделать его быстрее?
Чтобы понять, как IPS принимает решения, разберём реальную сигнатуру для детекта активности Sliver C2 — кросс-платформенного фреймворка для red team операций:
alert http any any -> any any (sid:10008548; rev:3; msg:"TOOLS [PTsecurity] Sliver C2 HTTP Polling (English)"; classtype:attack-feature; flow:established, from_server; http.header; content:"Content-Type|3A| text/plain|3B| charset=utf-8|0d 0a|"; nocase; content:!"Content-Encoding"; nocase; http.response_body; pcre:"/^(?:[A-Z]{2,20}\s?){40,}$/Q"; flowbits:isset, Sliver.HTTP.Encoders; threshold:type limit, track by_src, count 1, seconds 300; metadata:updated_at 2025_03_20; metadata:att_ck TA0011-T1071.001, attack_target client; reference:url,github.com/BishopFox/sliver;)
1. Тип трафика: HTTP на любых адресах и портах — правило не привязано к конкретным узлам
http any any -> any any
2. Состояние соединения: анализируются ответы при установленной сессии, то есть трафик от сервера
flow:established, from_server
3. HTTP-заголовки:
http.header; content:"Content-Type|3A| text/plain|3B| charset=utf-8|0d 0a|"; nocase;
content:!"Content-Encoding"; nocase;
4. Тело ответа: длинная «россыпь» слов из заглавных букв — маркер специфического кодирования команд
http.response_body; pcre:"/^(?:[A-Z]{2,20}\s?){40,}$/Q";
5. Контекст: ранее установленный flowbit подтверждает, что мы уже видели характерный этап обмена этого C2
flowbits:isset, Sliver.HTTP.Encoders;
Антиспам-ограничение: не чаще одного совпадения в 300 секунд по источнику
threshold:type limit, track by_src, count 1, seconds 300;
Привязка к MITRE ATT&CK: помогает отнести событие к правильной тактике и технике:
Правило рассчитано на HTTP-ответы без компрессии, где вместо обычных данных — длинные цепочки «слов» из заглавных букв. Такой паттерн отражает передачу команд/данных в рамках Sliver C2 через веб-трафик. Условие с flowbits гарантирует, что это не случайная строка, а продолжение распознанного обмена.
В итоге правило ловит управляемые сессии фреймворка Sliver, не трогая нормальные ответы. Важная деталь — привязка к ранее установленному контексту: без соответствующего флага правило не сработает, что снижает шум.
Вот HTTP-обмен, на который сработает наша сигнатура:
GET /bundle/bundle/app.js?q=2819b7413 HTTP/1.1
Host: 10.158.3.2
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4019.462 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Language: en-US,en;q=0.9
Cookie: AWSALBCORS=6653bcb1366c9410c0e122b604fc0ccc
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip
HTTP/1.1 200 OK
Date: Tue, 19 Sep 2023 19:30:30 GMT
Content-Length: 597
Content-Type: text/plain; charset=utf-8
BITTEREST THINGUMAJIG AUTOMATING AEROMETERS BOLL FIRETHORNS TIMIDITY ADROIT BOIL HOLOENZYME CHILIADAL SABERLIKE ALLOSTERIES INCIDENTALS TASKING UNFREED RIOJAS LESSENS CINEPHILE WEATHERGLASSES FOLD LANDLESSNESS BYLINES SATORIS SISSIES SUBOPTIMIZATION SUBMUCOSAL PEAKEDNESSES ANATOMICAL ANIMALIZED BIBLICISTS COUNTERMARCHING CYMA MITOCHONDRIAL ENSORCELLED BOUSED RECOMMENDING COLUMNEA COMPELLING VENTUROUSNESSES JILT OUTTELLS GANTRY BOMBARDMENT STULTIFICATIONS EGRESS REVERBERATION ARGILLITES CATCHWORDS REHEARSING OUTLIVED RATANIES DEERSTALKER DECAPITATES INARGUABLE MALODOROUS DROPSONDES TOLIDINES
Когда контекст совпадений выстроен, IPS выполняет действие из правила - здесь это действие alert. При смене режима на блокирующий важно сначала проверить поведение в журналировании, затем переводить те же сигнатуры в блокировку на контролируемых сегментах.
Сигнатуры поддерживают базовый набор действий движка, и понимать их семантику критично для правильной политики:
Частый вопрос: чем IPS отличается от потокового антивируса, если оба «на сигнатурах»? Пространством видимости и уровнем модели OSI. IPS работает на 3/4/7 уровнях, анализируя весь поток, а потоковый антивирус сфокусирован на объектах прикладного уровня.
В реальности они дополняют друг друга: хостовый агент закрывает то, что сетевой экран не видит, а NGFW с IPS и песочницей снимает риски ещё до попадания файла на узел. Хостовый антивирус к тому же не влияет на полосу пропускания межсетевого экрана, поэтому для стойкости разумно использовать эшелонированную схему.
Синтаксис «как у Suricata» встречается повсеместно: в правиле всегда зафиксированы направление, протокол и искомый контент, а также параметры поиска (смещения, глубина, окно). Цена удобства — производительность: включение IPS у большинства производителей по даташитам заметно урезает паспортную полосу (порядка 60–70%), потому что движок выполняет глубокий разбор пакетов, восстанавливает сессии и применяет крупные наборы условий.
Производительность проседает по честной причине: DPI разбирает каждый пакет, восстанавливает сессию, анализирует заголовки и полезную нагрузку на протоколах HTTP/HTTPS/DNS/FTP и др., а потом гоняет всё через большие множества правил. Чем шире и «тяжелее» набор сигнатур и чем глубже анализ (много PCRE, flowbits, декодеров), тем выше стоимость обработки.
Поэтому использование IPS с настройками «по умолчанию» (когда включены все доступные правила без разбора) почти всегда приводит к падению сквозной скорости — и к разочарованию. Количество правил само по себе не равно качеству: куда важнее их релевантность вашим сервисам и точно сформулированные условия срабатывания. Под условиями срабатывания понимаются предикаты — логические выражения в сигнатуре, которые определяют, при каких именно обстоятельствах правило должно сработать. Например, проверка конкретного содержимого в HTTP-заголовках, анализ определённых байтовых последовательностей в полезной нагрузке или сочетание нескольких факторов одновременно. Чем точнее сформулированы эти условия, тем меньше ложных срабатываний и выше общая производительность системы.
Контроль приложений (Application Control) добавляет IPS контекст: по поведенческим признакам и TLS-фингерпринтам движок понимает источник трафика и применяет релевантные сигнатуры — меньше лишних проверок и выше точность детекта. Это помогает корректно распознавать «приложения поверх TLS» (вроде Skype over HTTPS или Telegram MTProto), где одних портов/адресов недостаточно.
На пике нагрузки важно, как устроена логика работы NGFW. В некоторых системах IPS выключают, чтобы сохранить доступность. В других — как в PT NGFW — проверки на действующих сессиях не останавливаются, а просто перестают открываться новые, чтобы атака не прошла под шумок. Такой подход уменьшает окно для злоумышленника, который мог бы попытаться перегрузить устройство DDoS-ом и пройти дальше при выключенном движке.
«Сделаем быстро и без просадки» — заманчиво, но бесполезно, если сигнатуры поверхностные. Качество IPS меряют в двух плоскостях: руками и с помощью специализированных средств. Эталон — сочетать оба метода и проверять не только факт детекта, но и влияние на производительность.
Ручной подход — заведомо уязвимые сервисы, Metasploit, эксперимент с ICMP-туннелем — даёт прозрачный результат и ценную отладку компенсирующих мер, но требует времени и аккуратности. Плюс этого пути — максимально приближённая к реальности проверка, где видно, как IPS ведёт себя на конкретных протоколах и полезных нагрузок вашей инфраструктуры.
Сканеры автоматизируют рутину и хорошо закрывают стадию разведки из MITRE ATT&CK (адреса, порты, сервисы), но не претендуют на полноту по всем тактикам/техникам/процедурам.
Результаты нужно уметь интерпретировать. Полезно фиксировать, какие именно этапы «цепляет» IPS и почему: это облегчает настройку правил и харденинга после тестов.
Многие вендоры NGFW тестируют IPS на IXIA: экран подключают двумя интерфейсами и гоняют поток со «страйками» — наборами атак, подобранных по актуальности, сервисам и CVSS. Смысл есть только тогда, когда страйки совпадают с реальными сервисами вашей инфраструктуры.
Итог дают в одной цифре — catch rate, доле отражённых атак. Цифру легко «надуть» сигнатурами, заточенными под синтетику: на бумаге 99–100%, в живом трафике — шум, ложные срабатывания и сожжённый CPU. Из-за дефицита экспертизы синтетика нередко становится единственным мерилом, хотя рынку нужна общая, прозрачная методика оценки NGFW.
Плохо написанные правила либо режут легитимный трафик, либо тормозят железо, и администратор их просто отключит — устойчивость упадёт. Ответственность за качество лежит на вендоре: экспертные центры, разбор реальных инцидентов, «экономные» и точные сигнатуры.
В реальности всё, что мешает продакшену, чаще всего сначала отключают «временно», а потом об этом попросту забывают. Так нередко и заканчивается история IPS — печальный, но типичный сценарий.
Чтобы этого не случилось, важно понимать, как именно движок проверяет поток у разных вендоров. В целом встречаются два подхода:
В обоих случаях нельзя забывать об обновлениях. База правил регулярно меняется, и после очередной выгрузки нагрузка на устройство может подрасти — если новые или переработанные сигнатуры сделаны неаккуратно. А может и не измениться вовсе — всё упирается в качество экспертизы поставщика.
Когда сеть меняется — появляются новые сервисы, подсети и доступы — важно не «убить» перегретый межсетевой экран при включении IPS на новом сегменте. Рабочая схема простая: зеркалировать весь трафик с интерфейсов через ответвители, а шифрованный — с NGFW через сетевой брокер в NTA; на брокере обязательно исключать шифрованный поток.
Это даёт возможность заранее изучить трафик новых сегментов, увидеть, какие сигнатуры срабатывают, и осознанно добавить нужные в набор IPS у соответствующего правила NGFW.
Если NTA нет, включите полный набор сигнатур в режиме alert, отследите ложные срабатывания на легитимный трафик, затем переведите безопасные правила в drop/reject. На границах критичных сегментов IPS заметно повышает защищённость, а гранулярные политики доступа по геолокации, TCP/UDP-портам, приложениям и пользователям сужают поверхность атаки и мешают латеральному перемещению.
NGFW остаётся ключевым элементом сетевой архитектуры и инструментом реагирования — выбирайте и эксплуатируйте его аккуратно. В сухом остатке: сигнатуры — это код вашей безопасности. Чем качественнее они написаны, чем аккуратнее подобран набор и чем прозрачнее процесс валидации, тем тише спят пользователи и тем спокойнее живёт ваш NGFW.
Помните: красивые цифры в презентациях вендоров — это одно, а реальная работа в продакшене — совсем другое. Тестируйте, настраивайте постепенно и не забывайте, что IPS — это не панацея, а важная часть эшелонированной защиты. Правильно настроенная система может стать вашим надёжным щитом, а плохо настроенная — головной болью на долгие месяцы.