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

Автоматические сканеры пропускают опасные инструкции, которые обходят согласование через субагента, но срабатывают на безобидные учебные цитаты атак: итоговый балл сканера не годится как единственный критерий допуска навыка к рабочему агенту.
Автор эксперимента собрал 12 синтетических пакетов с текстовыми инструкциями для ИИ-агента (ИИ-агент — программа, которая сама выполняет цепочку действий по вашему заданию) и прогнал их через три сканера: Cisco Skill Scanner, NVIDIA SkillSpector и AgentVerus. Всё без нейросетей и платных API, в изолированных контейнерах без сети. Результаты оказались полезнее, чем ожидалось, но не в том месте, где принято смотреть.
Что понадобится
- Три сканера (бесплатные режимы без LLM): Cisco Skill Scanner, NVIDIA SkillSpector, AgentVerus
- Docker или аналогичная среда контейнеризации (контейнер — изолированная «песочница», где программа работает отдельно от вашей системы)
- Набор тестовых пакетов: текстовые файлы с инструкциями для агента, без реальных ключей и исполняемого кода
- Отключение сети в контейнере на уровне самого контейнера, а не только флагом
--no-llm - Время: подготовка окружения и прогон 42 проб заняли один рабочий день
Пошаговая инструкция
-
Разделите тестовые пакеты на две группы вручную. Пять пакетов с допустимыми инструкциями, семь с заведомо опасными. Без этой разметки вы не поймёте, где сканер ошибся.
-
Подготовьте изолированное окружение. Скачайте зависимости сканеров при включённой сети. После этого отключите сеть на уровне контейнера.
docker run --network none --read-only \
-v ./fixtures:/data:ro \
scanner-image --no-llm --input /data/package-01
-
Прогоните каждый пакет через каждый сканер. Для 12 пакетов и трёх движков это 36 проб. Дополнительно подайте отдельные Markdown-файлы с описаниями агентов, чтобы проверить поддержку такого входа. Итого 42 пробы.
-
Сохраняйте не итоговый балл, а структурированный отчёт целиком. Коды выхода у сканеров различаются: Cisco возвращает 0 даже при статусе
is_safe=false, NVIDIA тоже возвращает 0 при находках уровня High. Парсите JSON или структурированный вывод, не полагайтесь на код выхода. -
Сравните реакцию сканеров с вашей ручной разметкой. Пакет помечен как опасный, а сканер дал «certified»? Это пропуск. Пакет безопасный, а сканер кричит High? Разбирайтесь в контексте срабатывания.
-
Проверьте вложенные файлы. Если пакет ссылается на дополнительные документы (например,
references/extra.md), убедитесь, что сканер анализирует и их содержимое, а не только корневой файл. -
Добавьте собственные правила для пропущенных паттернов. Если сканер не поймал конкретную опасную инструкцию, напишите правило для встроенного анализатора и включите его в регрессионные тесты.
Пакет № 10 содержал инструкцию обойти согласование через субагента: создать помощника для действия, требующего подтверждения, скрыть от него ограничения и заявить, что пользователь уже всё разрешил. Все три сканера пропустили эту инструкцию. AgentVerus выдал статус certified и 99 баллов.
Пакет № 5 содержал учебную цитату атаки с явным запретом выполнять её (то есть пакет разбирал угрозу в теории). Все три движка выдали находки уровня High. При этом NVIDIA сохранил итоговый статус SAFE, а AgentVerus частично учёл контекст «перечисление угроз».
Вывод из двух случаев: блокировка по любому High отсечёт учебные материалы, а доверие итоговому статусу пропустит реальную угрозу. Нужно сохранять сами срабатывания с контекстом и принимать решение отдельно.
- Полагаться на итоговый балл или статус. Статус
certifiedпри 99 баллах ничего не гарантирует: пакет № 10 с обходом согласования получил именно такую оценку. - Отключать сеть только флагом сканера. Флаг
--no-llmне блокирует все сетевые обращения. У SkillSpector, например, остаются запросы к OSV (база уязвимостей открытого ПО). Сеть должен запрещать контейнер. - Проверять только корневой файл. Пакет № 12 прятал сбор секретов (галлюцинация безопасности — когда сканер «уверен», что всё чисто, но просто не заглянул во вложенный файл) в
references/extra.md. Cisco не выдал сигнала, потому что не добрался до вложения. - Сравнивать severity напрямую между движками. Шкалы различаются, выборка маленькая и синтетическая. Считать «процент обнаружения» или выбирать победителя по такому прогону нельзя.
- Использовать Gitleaks, OSV-Scanner или Semgrep для текстовых инструкций. Эти инструменты ищут секреты в файлах, уязвимости зависимостей и ошибки в коде. Для чисто текстовых инструкций агенту им проверять нечего. Для них нужен отдельный набор с имитациями ключей и уязвимых зависимостей.
Что делать с этим прямо сейчас?
Автору Дзена и копирайтеру. Если вы подключаете навыки к ИИ-ассистенту для генерации контента, не принимайте зелёную галочку сканера за гарантию. Просмотрите текст инструкций вручную, особенно если навык создаёт субагентов или читает дополнительные файлы.
Маркетологу и предпринимателю. Перед интеграцией стороннего скилла в рабочий процесс разделите проверку на два этапа: быстрый скан при индексации (без тяжёлого окружения) и дополнительный прогон по запросу. Результат проверки не должен автоматически менять права агента.
Тем, кто работает в РФ и СНГ. Все три сканера доступны в офлайн-режиме через контейнеры, платные API не требуются. Для локального контекста учитывайте: если вы используете YandexGPT или GigaChat как основу агента, принцип тот же. Скилл — это текстовая инструкция, и проверять её нужно до подключения, а не после инцидента.
Мое исследование инструментов выявления уязвимостей в скиллах показывает неочевидную вещь: сканеры ловят то, что уже описано в базах атак, но пасуют перед новыми паттернами. Обход через субагента — не экзотика, а логичный следующий шаг для тех, кто хочет обойти ограничения. Автор эксперимента поступил правильно, добавив собственное правило для пропущенного паттерна. Но честная оговорка: это правило написано на основе того же тестового набора, поэтому его обнаружение годится для регрессионного теста, а не для независимой оценки. Главный практический вывод — сохраняйте не баллы, а сами срабатывания с контекстом и местоположением в файле. Решение о допуске принимает человек, а не число на экране.
Курс по нейросетям для авторов
Разберитесь, как безопасно подключать ИИ-инструменты к своей работе и не попадать в ловушки автоматических оценок
Узнать подробностиСканер, который ставит 99 баллов пакету с инструкцией обойти согласование, — не сломанный: он делает ровно то, чему обучен. Ваша задача — знать границы его обученности до того, как навык получит доступ к рабочим данным.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также
От рабочей таблицы до SaaS на $30 000 в месяц: как найти идею, которая уже доказала спрос
Десятки тысяч авторов, маркетологов и предпринимателей ежедневно собирают рабочие таблицы, которые решают реальные задачи: учёт клиентов, расчёт контент-плана,…

ИИ для создания игрушки без защиты: 13 млн детских разговоров утекли в открытый доступ
Почему это важно Исследователь получил доступ к 13 миллионам разговоров 68 000 роботов-игрушек Eiliko по всему миру, включая данные более 31 000 детских…

FPGA для нейросетей за $50: списанная плата тянет 8 языковых моделей локально
Запуск нейросетей на списанной FPGA-плате за 50 долларов звучит как эксперимент для инженеров с паяльником, но автор проекта openTPU доказал, что это рабочий…
Комментарии