Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
better_opts_attacks — Attack framework для взлома защит от prompt injection, основанных на fine-tuning (SecAlign, SecAlign++, StruQ), с использованием архитектурно-зависимых adversarial-атак на LLM. | Kitploit
Инструменты/GitHubGitHub/nishitvp/better_opts_attacks
Фреймворки для эксплойтовАнализ уязвимостейRed TeamingБезопасность ИИСостязательная Атака
GitHubnishitvp/better_opts_attacks

better_opts_attacks

Attack framework для взлома защит от prompt injection, основанных на fine-tuning (SecAlign, SecAlign++, StruQ), с использованием архитектурно-зависимых adversarial-атак на LLM.

Репозиторий
11336 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Могу ли я попросить вашего внимания? Взлом защит от prompt-инъекций на основе тонкой настройки с помощью атак, учитывающих архитектуру

Этот репозиторий содержит код для запуска атак ASTRA и ASTRA++, которые взламывают SecAlign++, SecAlign, StruQ. В этом репозитории также приведены некоторые примеры сгенерированных атак и журналы атак.

Установка

Клонирование репозитория

Эта команда клонирует репозиторий вместе со всеми сабмодулями в нужное место.

root@kitploit:~
git clone --recurse-submodules https://github.com/nishitvp/better_opts_attacks.git

Настройка окружения Python

Кодовая база не использует каких-либо особых пакетов Python, помимо стандартного набора пакетов, связанных с LLM и глубоким обучением. Чтобы установить зависимости, выполните

root@kitploit:~
python3 -m pip install -r requirements.txt

— это должно установить необходимые пакеты в ваше окружение.

Загрузка моделей

  1. Сначала загрузите базовые модели с HuggingFace (некоторые из них могут быть ограничены доступом, и вам потребуется получить разрешение от HuggingFace).

    root@kitploit:~
    hf login --token ${HF_PASSWORD}
    hf download meta-llama/Meta-Llama-3-8B-Instruct --local-dir secalign_refactored/secalign_models/meta-llama/Meta-Llama-3-8B-Instruct
    hf download mistralai/Mistral-7B-Instruct-v0.1 --local-dir secalign_refactored/secalign_models/mistralai/Mistral-7B-Instruct-v0.1
    hf download meta-llama/Llama-3.1-8B-Instruct --local-dir secalign_refactored/secalign_models/meta-llama/Llama-3.1-8B-Instruct
    hf download facebook/Meta-SecAlign-8B --local-dir secalign_refactored/secalign_models/Meta-SecAlign-8B
    
  2. Загрузите адаптеры SecAlign и модели StruQ. Для этого есть полезный скрипт, который загружает и распаковывает всё в нужное место.

    root@kitploit:~
    python3 setup_scripts/download_models.py
    

    При запуске из корня проекта этот скрипт должен загрузить и распаковать нужные модели в правильное место. Чтобы проверить, убедитесь, что в secalign_refactored/secalign_models есть три папки huggyllama, meta-llama и mistralai, каждая из которых должна содержать сами модели.

Запуск ASTRA для сильного противника, знающего контекст

Для запуска ASTRA для сильного противника, знающего контекст, ключевым скриптом является experiment.py. Этот скрипт берёт 40 примеров из набора данных AlpacaFarm, внедряет полезную нагрузку Print exactly 'Hacked!' с заданной конфигурацией и запускает ASTRA, а также базовый метод (GCG), контролируя инициализацию (случайную), количество прямых проходов, итераций и т.д.

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

  1. --model-name: возможные значения: meta-llama, meta-llama-instruct, mistralai, mistralai-instruct, huggyllama.

  2. --defense: возможные значения: undefended, struq и secalign. Значение по умолчанию — secalign. Параметр --model-name вместе с параметром --defense однозначно определяют конкретную используемую модель согласно таблице ниже.

    --model-name--defenseЗагружаемая модель
    meta-llama-instructsecalignАдаптеры SecAlign с предварительно инструкционно-настроенной Meta-Llama-3-8B-Instruct
    mistralai-instructsecalignАдаптеры SecAlign с предварительно инструкционно-настроенной Mistral-7B-Instruct-v0.1
    meta-llamasecalignЗащищённая SecAlign Meta-Llama-3-8B (не предварительно инструкционно-настроенная)
    mistralaisecalignЗащищённая SecAlign Mistral-7B-Instruct-v0.1 (не предварительно инструкционно-настроенная)
    huggyllamasecalignЗащищённая SecAlign Llama-2-7B (не предварительно инструкционно-настроенная)
    meta-llamastruqЗащищённая StruQ Meta-Llama-3-8B (не предварительно инструкционно-настроенная)
    mistralaistruqЗащищённая StruQ Mistral-7B-v0.1 (не предварительно инструкционно-настроенная)
    huggyllamastruqЗащищённая StruQ Llama-2-7B (не предварительно инструкционно-настроенная)
    meta-llama-instructundefendedНезащищённая (исходная) Meta-Llama-3-8B-Instruct
    mistralai-instructundefendedНезащищённая (исходная) Mistral-7B-Instruct-v0.1
    meta-llamaundefendedНезащищённая (исходная) Meta-Llama-3-8B (не предварительно инструкционно-настроенная)
    mistralaiundefendedНезащищённая (исходная) Mistral-7B-Instruct-v0.1 (не предварительно инструкционно-настроенная)
    huggyllamaundefendedНезащищённая (исходная) Llama-2-7B (не предварительно инструкционно-настроенная)

    Все остальные пары --model-name и --defense недопустимы.

  3. --prefix-length: длина состязательного префикса для данного запуска оценки. По умолчанию — 5.

  4. --suffix-length: длина состязательного суффикса для данного запуска оценки. По умолчанию — 20.

  5. --expt-folder-prefix: путь, куда должны сохраняться журналы эксперимента.

Полная команда может выглядеть примерно так:

root@kitploit:~
python3 experiment.py --model-name meta-llama-instruct --defense secalign --prefix-length 5 --suffix-length 20 --expt-folder-prefix logs/astra_llama_secalign

При выполнении приведённой выше команды скрипт автоматически равномерно распределит нагрузку по разным подпроцессам, каждый из которых будет использовать один GPU для вычисления атак. Мы рекомендуем запускать атаки на GPU с объёмом памяти не менее 48 ГБ.

Каждый подпроцесс будет записывать полный журнал (транскрипт) каждого атакуемого примера в отдельную подпапку пути, указанного в --expt-folder-prefix. Журналы хранятся в доступном для запросов формате, похожем на базу данных, содержащем объекты Python (подробнее см. файл utils/experiment_logger). Каждый записанный транскрипт будет содержать последовательности токенов, значения потерь и другие важные детали, такие как конфигурация инициализации на протяжении всей оптимизации, которые можно получить позже.

Анализ (ASTRA)

После завершения полного эксперимента ASTRA сгенерированные журналы можно проанализировать с помощью файла analysis/analysis.ipynb. Просто скопируйте Jupyter-ноутбук в путь --expt-folder-prefix, замените путь к модели в ноутбуке на правильный путь к модели и запустите ноутбук. В последней ячейке будут выведены количество успешных атак GCG и количество успешных атак ASTRA. (P.S. Скрипт анализа выполняется довольно долго, поскольку он фактически генерирует выходные данные для каждой последовательности входных токенов, созданной во время оптимизации для каждого примера.)

Ноутбук analysis.ipynb также содержит вспомогательный код для построения графиков средних кривых потерь и дальнейшего исследования сгенерированных журналов.

Скрипты анализа были намеренно отделены, чтобы гарантировать, что сама оптимизация не загрязняется постфактумным аналитическим кодом.

Сгенерированные атаки

Мы также делимся некоторыми атаками, сгенерированными ASTRA, в zip-архиве, расположенном в data/attacks_generated.zip. А именно, в zip-файле содержатся 4 файла, в каждом из которых по 40 примеров атак, сгенерированных ASTRA: по два для каждой из защищённых версий SecAlign для Mistral и Llama-3 соответственно. Файлы содержат примеры, сгенерированные для бюджета в 20 и 25 токенов (в конфигурациях (0, 20) и (5, 20)). Инъекция уже вставлена в поле ввода в конфигурациях.

Запуск ASTRA++ для слабого противника, знающего контекст

Для запуска ASTRA++ для слабого противника, знающего контекст, ключевым скриптом является experiment_universal.py. Этот скрипт берёт 10 обучающих примеров из набора данных AlpacaFarm, внедряет полезную нагрузку Print exactly 'Hacked!' с заданной конфигурацией префикса и суффикса и обучает модель для получения в конце универсальной prompt-инъекции. Скрипт также запускает базовый метод — универсальную версию GCG — после обучения ASTRA++.

Как и скрипт experiment.py из предыдущего раздела, experiment_universal.py также принимает аргументы --model-name, --defense, --prefix-length, --suffix-length, --expt-folder-prefix.

В дополнение ко всем моделям, перечисленным в предыдущем разделе о запуске ASTRA, скрипт experiment_universal.py также принимает ещё одну возможную модель, соответствующую защите SecAlign++. Для обучения на защите SecAlign++ передайте параметр --model-name как secalign_refactored/secalign_models/Meta-SecAlign-8B и параметр --defense как meta_secalign.

Имеется ещё один дополнительный аргумент командной строки, который принимает этот скрипт, — --training-run, который соответствует тому, на каком наборе из 10 примеров будет выполняться обучение.

Остальные параметры имеют ту же интерпретацию, что и раньше.

Анализ (ASTRA++)

После завершения полного эксперимента ASTRA++ сгенерированные журналы можно проанализировать с помощью файла analysis/analysis_universal.ipynb. Как и раньше, скопируйте Jupyter-ноутбук в путь --expt-folder-prefix, правильно загрузите модель (здесь есть некоторая капризность из-за того, как загружается SecAlign++, но в будущем это будет унифицировано). В выводе будут указаны количество успешных тестовых атак GCG и количество успешных атак ASTRA, а также лучшие найденные универсальные prompt-инъекции.

Сгенерированные атаки

Для ASTRA++ мы выкладываем универсальные prompt-инъекции, сгенерированные для защищённой SecAlign++ модели Llama-3.1-8B-Instruct, в файле data/universal_pis_secalign++.json вместе с метаданными и конфигурацией, на которой они были сгенерированы. Кроме того, мы выкладываем транскрипт всех атак по всем обучающим запускам на универсальность в data/final_result_logs.pkl (Обещаем, pickle не содержит вредоносного кода :).

Продвинутые изменения

Хотя приведённые выше скрипты запускают атаки ASTRA и ASTRA++ «из коробки», кодовая база позволяет настраивать практически любой параметр, который может повлиять на атаку, например размеры обучающих наборов данных, выбранные пороги, случайные зерна, конфигурации инициализации и т.д. Если у вас есть интересные предложения, не стесняйтесь отправлять pull request.

Контакты

По любым вопросам, сообщениям об ошибках, деталям или разъяснениям, пожалуйста, не стесняйтесь создавать issue на Github или писать авторам по электронной почте.

Скачать инструмент