Об этом проекте
SUNGLASSES — это open-source решение для локальной инспекции входных данных ИИ-агентов, описываемое в README как input firewall. Проект написан на Python и распространяется под лицензией MIT. Он сканирует контент до того, как агент начнёт с ним работать, и отчётирует о найденном, а не переписывает и не удаляет данные молча. Поддерживаются шесть типов медиа: текст, изображения, аудио, видео, PDF и QR-/штрих-коды. Сканирование изображений может использовать OCR, EXIF-метаданные и обнаружение скрытого текста; сканирование PDF читает текст страниц, метаданные и аннотации; глубокое сканирование аудио и видео опирается на speech-to-text и извлечение субтитров.
Сканер ориентирован на обнаружение prompt injection, exfiltration учётных данных, command injection, memory poisoning, social engineering, а также техник уклонения, таких как трюки с Unicode, RTL-обфускация, leetspeak, кодировка Base64 и замена homoglyph.
SUNGLASSES работает преимущественно с английским языком. В README указано, что полный набор правил — английский; для 13 языков есть ровно по два выделенных паттерна; для 7 языков доступна только ключевая часть; персидский и бенгальский указаны только как название без выделенных паттернов или ключевых слов. Нормализация не зависит от языка. Проект предупреждает, что нельзя ожидать паритета нераспространённых языков с английским, и отмечает, что более глубокое покрытие языками планировалось в версии v0.6+.
Установка осуществляется через pip: команда pip install sunglasses обеспечивает сканирование текста без дополнительных зависимостей; для изображений, PDF, QR-кодов, аудио и видео доступны extras media или all. CLI поддерживает команды scan, check, demo, info и report. Python API предоставляет SunglassesEngine для текста и SunglassesScanner для медиа. Другие варианты интеграции включают MCP-сервер, интеграции с LangChain и CrewAI, вывод SARIF 2.1.0 для CI, а также браузерное демо для текста, репозиториев GitHub и изображений.
CLI использует явную схему кодов выхода. 0 означает, что весь вход был прочитан и угроз не обнаружено. 1 — угроза найдена. 2 — ошибка использования или эксплуатации, в заданной области ничего не сканировалось. 3 — частичная инспекция: в прочитанной части угроз не было, но часть данных не удалось прочитать, например архив, аудиофайл без deep scan или ввод за пределами лимита размера. Приоритет: 1 > 3 > 2 > 0. В JSON-выводе отдельно указываются threat_found, inspection_complete и is_clean, а также truncated и extraction_complete. По умолчанию движок читает не более 1 МБ; при достижении этого лимита сканер сообщает о truncation и bytes_scanned, а не о ложночистом результате.
Фаервол версии v0.4 устанавливается как hook PreToolUse для Claude Code и описывается как best-effort: таймаут составляет 10 секунд, а хук, попавший в таймаут, не блокирует вызов. Он может фиксировать дескрипторы MCP-инструментов и проверять, не изменились ли они; блокировать секреты точного формата при вызовах инструментов, способных передать байты по сети; enforcing пользовательский policy file; а также писать receipts, содержащие SHA-256 входных данных инструмента, а не сами данные. Проект разделяет детерминированные факты, которые можно hard-block, и detections, которые эскалируются пользователю вместо автоблокировки. При сбое система работает open-fail и фиксирует незапроверенные вызовы. В README перечислены очевидные ограничения: pinning дескрипторов не является live-процессом; хук видит текст вызова инструмента, но не файлы за ним; one-liners через interpreter или сокет могут скрывать egress; lane WARN по умолчанию отключён.
Публикуемые производительность и benchmark включают 1 540 паттернов, 6 931 уникальных ключевых слова, 118 категорий атак, 17 техник нормализации и internal recall 64/64 на внутреннем наборе fixture. Benchmark в README использует 38 реальных атак на вход агента и 76 известных открытых README как negative samples, показывая precision 86,1%, recall 97,4%, F1 0,914, захват 30 из 30 атакKnown-shape и 7 из 8 новых семантических парафраз. Указывается, что единственный известный пропуск — это строка установки через pipe-to-shell, которая встречается и в чистых README, и что тестassertирует отсутствие ложного флага для неё. Фигуры задержки: около 0,7 мс для короткого входа, около 4,2 мс для типичной attack string, около 311 мс для реального README и устойчивая throughput примерно 26 КБ/с в один поток. В README отмечается, что эти данные регенерируются из внутрирепозиториумной корпусной выборки и что результаты зависят от оборудования.
Глубокое сканирование аудио и видео требует Whisper и FFmpeg, проект помечает такие медийные сканы как экспериментальные. Сканирование выполняется локально: в README заявлено отсутствие облачных сервисов, API-ключей и телеметрии для сканирования. Также указывается, что статический сканер не исполняет сканируемый контент, а команда pin запускает настроенные MCP-серверы только после согласия пользователя и отказывает в unattended-контекстах. Проект позиционируется как локальный фундаментальный слой, который можно использовать самостоятельно или совместно с cloud guardrail tools.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.