Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
better_opts_attacks — Marco de ataque para romper defensas contra la inyección de indicaciones basadas en ajuste fino (SecAlign, SecAlign++, StruQ) mediante ataques adversariales conscientes de la arquitectura en LLMs. | Kitploit
Herramientas/GitHubGitHub/nishitvp/better_opts_attacks
Frameworks de ExploitsAnálisis de VulnerabilidadesRed TeamingSeguridad de IAAtaque Adversario
GitHubnishitvp/better_opts_attacks

better_opts_attacks

Marco de ataque para romper defensas contra la inyección de indicaciones basadas en ajuste fino (SecAlign, SecAlign++, StruQ) mediante ataques adversariales conscientes de la arquitectura en LLMs.

Ver Repositorio
1133hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

¿Puedo tener su atención? Rompiendo defensas de inyección de prompts basadas en fine-tuning mediante ataques conscientes de la arquitectura

Este repositorio contiene el código para ejecutar los ataques ASTRA y ASTRA++ que rompen SecAlign++, SecAlign, StruQ. Este repositorio también contiene algunos ejemplos de ataques generados y registros de ataques.

Configuración

Clonar el repositorio

Esto clonará el repositorio junto con todos los submódulos en la ubicación correcta requerida.

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

Configurar el entorno de Python

El código no utiliza paquetes especiales de Python más allá del conjunto estándar de paquetes relacionados con LLM y Deep Learning. Para instalar los requisitos, ejecute

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

y esto debería instalar los paquetes necesarios en su entorno.

Descargar modelos

  1. Primero, descargue los modelos base de HuggingFace (algunos pueden estar restringidos, requiriendo que obtenga acceso desde 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. Descargue los adaptadores SecAlign y los modelos StruQ. Hay un script útil para descargar y extraer en el lugar correcto.

    root@kitploit:~
    python3 setup_scripts/download_models.py
    

    Cuando se ejecute desde la raíz del proyecto, este script debería descargar y extraer los modelos correctos en el lugar correcto. Para verificar, compruebe si secalign_refactored/secalign_models tiene tres carpetas huggyllama, meta-llama y mistralai que deberían contener los modelos correspondientes.

Ejecutando ASTRA para un adversario con conocimiento fuerte

Para ejecutar ASTRA para un adversario con conocimiento fuerte, el script clave es experiment.py. Este script tomará los 40 ejemplos del conjunto de datos AlpacaFarm, inyectará la carga útil Print exactly 'Hacked!' con la configuración especificada y ejecutará ASTRA junto con la línea base (GCG) controlando la inicialización (inicializado aleatoriamente), número de pases hacia adelante, iteraciones, etc.

El usuario puede controlar los siguientes parámetros estableciéndolos como parámetros de línea de comandos al llamar a experiment.py:

  1. --model-name: Los valores posibles son meta-llama, meta-llama-instruct, mistralai, mistralai-instruct, huggyllama.

  2. --defense: Los valores posibles son undefended, struq y secalign. El valor predeterminado es secalign. El parámetro --model-name junto con el parámetro --defense especifican de manera única el modelo específico que se está utilizando según la tabla a continuación.

    Todos los demás pares de --model-name y --defense no son válidos.

  3. --prefix-length: Longitud del prefijo adversarial a utilizar para una ejecución de evaluación determinada. El valor predeterminado es 5.

  4. --suffix-length: Longitud del sufijo adversarial a utilizar para una ejecución de evaluación determinada. El valor predeterminado es 20.

  5. --expt-folder-prefix: La ruta donde desea que se registren los registros de la ejecución del experimento.

Un comando completo podría verse algo así como:

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

Al ejecutar el comando anterior, el script distribuirá automáticamente la carga de trabajo de manera equitativa en diferentes subprocesos, cada uno de los cuales utilizará una GPU para calcular los ataques. Recomendamos ejecutar los ataques en GPUs con al menos 48 GB de memoria.

Cada subproceso registrará la transcripción completa de cada ejemplo que ataca en una subcarpeta separada de la ruta especificada en --expt-folder-prefix. Los registros se almacenan en un formato similar a una base de datos consultable que contiene objetos de Python (consulte el archivo utils/experiment_logger para más detalles). Cada transcripción registrada contendrá las secuencias de tokens, valores de pérdida y otros detalles importantes, como la configuración de inicialización durante la optimización, que se pueden recuperar más adelante.

Análisis (ASTRA)

Una vez que el experimento ASTRA completo haya finalizado, los registros generados se pueden analizar posteriormente utilizando el archivo analysis/analysis.ipynb. Simplemente copie y pegue el cuaderno Jupyter en la ruta --expt-folder-prefix, reemplace la ruta del modelo en el cuaderno con la ruta correcta del modelo y ejecute el cuaderno. Esto debería imprimir el número de éxitos de GCG y el número de éxitos de ASTRA en la última celda. (Nota: El script de análisis tarda un poco en ejecutarse porque genera las salidas en cada secuencia de tokens de entrada generada durante la optimización para cada ejemplo).

El cuaderno analysis.ipynb también contiene código auxiliar para trazar curvas de pérdida promedio y realizar más exploraciones con los registros generados.

Los scripts de análisis se han mantenido separados fundamentalmente para garantizar que la optimización en sí no se vea contaminada por el código de análisis posterior.

Ataques generados

También compartimos algunos ataques generados por ASTRA en el archivo comprimido ubicado en data/attacks_generated.zip. Concretamente, el archivo comprimido contiene 4 archivos, cada uno con 40 ejemplos de ataques generados por ASTRA, dos para cada una de las versiones defendidas por SecAlign de Mistral y Llama-3 respectivamente. Los archivos proporcionan ejemplos generados para un presupuesto de 20 y 25 tokens (en una configuración (0, 20) y (5, 20)). La inyección ya se ha colocado en el campo de entrada en las configuraciones.

Ejecutando ASTRA++ para un adversario con conocimiento débil

Para ejecutar ASTRA++ para un adversario con conocimiento débil, el script clave es experiment_universal.py. Este script tomará 10 ejemplos de entrenamiento del conjunto de datos AlpacaFarm, inyectará la carga útil Print exactly 'Hacked!' con la configuración de prefijo y sufijo especificada, y entrenará para obtener una inyección de prompt universal al final. El script también ejecuta la línea base, la versión universal de GCG después del entrenamiento de ASTRA++.

Al igual que el script experiment.py de la sección anterior, experiment_universal.py también toma los argumentos --model-name, --defense, --prefix-length, --suffix-length, --expt-folder-prefix.

Además de todos los modelos enumerados en la sección anterior sobre la ejecución de ASTRA, el script experiment_universal.py también acepta un modelo más, correspondiente a la defensa SecAlign++. Para entrenar en la defensa SecAlign++, pase el parámetro --model-name como secalign_refactored/secalign_models/Meta-SecAlign-8B y el parámetro --defense como meta_secalign.

Hay un argumento de línea de comandos adicional que este script acepta, que es --training-run, que corresponde a en qué conjunto de 10 ejemplos se realizará la ejecución de entrenamiento.

El resto de parámetros tienen la misma interpretación que antes.

Análisis (ASTRA++)

Una vez que el experimento ASTRA++ completo haya finalizado, los registros generados se pueden analizar posteriormente utilizando el archivo analysis/analysis_universal.ipynb. Como antes, copie y pegue el cuaderno Jupyter en la ruta --expt-folder-prefix, cargue el modelo correctamente (hay cierta complejidad debido a cómo se carga SecAlign++, pero eso se uniformizará en el futuro). Esto debería imprimir el número de éxitos de prueba de GCG y el número de éxitos de ASTRA junto con las mejores inyecciones de prompt universales logradas.

Ataques generados

Para ASTRA++, subimos las inyecciones de prompt universales generadas para el Llama-3.1-8B-Instruct defendido por SecAlign++ en el archivo data/universal_pis_secalign++.json junto con metadatos y la configuración en la que se generaron. Además, también subimos una transcripción de todos los ataques en todas las ejecuciones de entrenamiento de universalidad en data/final_result_logs.pkl (Prometemos que el pickle no contiene código malicioso :).

Cambios avanzados

Si bien los scripts anteriores ejecutarán los ataques ASTRA y ASTRA++ listos para usar, el código base permite configurar casi todos los parámetros que pueden afectar el ataque, como tamaños de conjuntos de datos de entrenamiento, umbrales elegidos, semillas aleatorias, configuraciones de inicialización, etc. Si tiene sugerencias interesantes, no dude en enviar una solicitud de extracción.

Contacto

Para cualquier consulta, informe de errores, detalles o aclaraciones, no dude en crear un issue en Github o enviar un correo electrónico a los autores.

Descargar herramienta
--model-name--defenseModelo cargado
meta-llama-instructsecalignAdaptadores SecAlign con Meta-Llama-3-8B-Instruct pre-ajustado por instrucciones
mistralai-instructsecalignAdaptadores SecAlign con Mistral-7B-Instruct-v0.1 pre-ajustado por instrucciones
meta-llamasecalignMeta-Llama-3-8B defendido por SecAlign (no pre-ajustado por instrucciones)
mistralaisecalignMistral-7B-Instruct-v0.1 defendido por SecAlign (no pre-ajustado por instrucciones)
huggyllamasecalignLlama-2-7B defendido por SecAlign (no pre-ajustado por instrucciones)
meta-llamastruqMeta-Llama-3-8B defendido por StruQ (no pre-ajustado por instrucciones)
mistralaistruqMistral-7B-v0.1 defendido por StruQ (no pre-ajustado por instrucciones)
huggyllamastruqLlama-2-7B defendido por StruQ (no pre-ajustado por instrucciones)
meta-llama-instructundefendedMeta-Llama-3-8B-Instruct sin defensa (crudo)
mistralai-instructundefendedMistral-7B-Instruct-v0.1 sin defensa (crudo)
meta-llamaundefendedMeta-Llama-3-8B sin defensa (crudo) (no pre-ajustado por instrucciones)
mistralaiundefendedMistral-7B-Instruct-v0.1 sin defensa (crudo) (no pre-ajustado por instrucciones)
huggyllamaundefendedLlama-2-7B sin defensa (crudo) (no pre-ajustado por instrucciones)