_)) > * _~ `;'__-' _ ____ | ) _ _____________________ ____ / / `` w w ____________________ ____ w w ________________AI_Goat______ ______________________________________ Presented by: rootcauz
Aprenda la seguridad de la IA a través de una serie de desafíos vulnerables de LLM CTF. Sin registros ni tarifas de nube, ejecute todo localmente en su sistema.
Muchas empresas han comenzado a crear software que se integra con modelos de lenguaje grande (LLM) de IA debido al lanzamiento de ChatGPT y otros motores. Esta explosión de interés ha llevado al rápido desarrollo de sistemas que reintroducen viejas vulnerabilidades e imponen nuevas clases de amenazas menos comprendidas. Es posible que muchos equipos de seguridad de empresas no estén completamente equipados y se ocupen de la seguridad de LLM, ya que el campo aún está madurando con herramientas y recursos de aprendizaje.
Desarrollé AI Goat para aprender sobre el desarrollo de LLM y los riesgos de seguridad que enfrentan las empresas que lo usan. El formato CTF es una excelente manera para que los investigadores de seguridad adquieran experiencia práctica y aprendan cómo estos sistemas son vulnerables y pueden explotarse. ¡Gracias por tu interés en este proyecto y espero que te diviertas!
El OWASP Top 10 para aplicaciones LLM es un excelente lugar para comenzar a aprender sobre las amenazas y mitigaciones de seguridad de LLM. Le recomiendo que lea el documento detenidamente, ya que muchos de los conceptos se exploran en AI Goat y proporciona un resumen impresionante de lo que enfrentará en los desafíos.
Recuerde, un motor LLM incluido en una aplicación web alojada en un entorno de nube estará sujeto a las mismas amenazas de seguridad tradicionales de la nube y de las aplicaciones web. Además de estas amenazas tradicionales, los proyectos de LLM también estarán sujetos a la siguiente lista no exhaustiva de amenazas:
Inyección inmediata
Manejo de salida inseguro
Envenenamiento de datos de entrenamiento
Denegación de servicio
Cadena de suministro
Problemas de permisos
Fuga de datos
Agencia excesiva
Dependencia excesiva
Complementos inseguros
AI Goat utiliza Vicuna LLM que derivó de LLaMA de Meta y se combinó con los datos de respuesta de ChatGPT. Al instalar AI Goat, el binario LLM se descarga desde HuggingFace localmente en su computadora. Este binario de aproximadamente 8 GB es el motor de inteligencia artificial en torno al cual se construyen los desafíos. El binario LLM esencialmente toma un "mensaje" de entrada y proporciona una "respuesta" de salida. El mensaje consta de tres elementos concatenados en una cadena. Estos elementos son: 1. Instrucciones; 2. Pregunta; y 3. Respuesta. El elemento Instrucciones consta de las reglas descritas para el LLM. Están destinados a describir al LLM cómo se supone que debe comportarse. El elemento Pregunta es donde la mayoría de los sistemas permiten la entrada del usuario. Por ejemplo, el comentario ingresado en un motor de chat se colocaría en el elemento Pregunta. Por último, la sección Respuesta prescribe que el LLM dé una respuesta a la pregunta.
Una imagen de Docker prediseñadas, ai-base, tiene todas las bibliotecas necesarias para ejecutar el LLM y los desafíos. Este contenedor se descarga durante el proceso de instalación junto con el binario LLM. Una ventana acoplable que inicia cada desafío adjunta el binario LLM, los archivos de desafío específicos y expone los puertos TCP necesarios para completar cada desafío. Consulte las secciones de instalación y configuración para obtener instrucciones sobre cómo comenzar.
Se ha preparado un contenedor CTFd opcional que incluye la descripción de cada desafío, sugerencias, categoría y envío de banderas. La imagen del contenedor está alojada en nuestro Dockerhub y se llama ai-ctfd junto con la imagen ai-base. El contenedor ai-ctfd se puede iniciar desde ai-goat.py y acceder a él mediante su navegador.
git
sudo apt install git -y
python3
pip3
sudo apt install python3-pip -y
Estibador
docker-componer
Usuario en grupo acoplable
sudo usermod -aG docker $USER
reboot
8 GB de espacio en disco
Memoria del sistema mínima de 16 GB con al menos 8 GB dedicados al desafío; de lo contrario, las respuestas del LLM tardan demasiado
¡Un amor por la ciberseguridad!
git clone https://github.com/dhammon/ai-goat cd ai-goat pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
Esta sección espera que ya haya seguido los pasos Installation
.
El uso de ai-ctfd le proporciona una lista de todos los desafíos y el envío de banderas. Es una gran herramienta para usarla usted mismo o cuando organice un CTF. Usarlo de forma individual le proporciona un mapa de los desafíos y le ayuda a realizar un seguimiento de los desafíos que ha completado. Ofrece envío de indicadores para confirmar la finalización del desafío y puede proporcionar sugerencias que le indiquen la dirección correcta. El contenedor también se puede iniciar y alojar en un servidor interno donde puede alojar su propio CTF para un grupo de entusiastas de la seguridad. El siguiente comando inicia ai-ctfd en segundo plano y se puede acceder a él en el puerto 8000:
./ai-goat.py --run ctfd
Importante: Una vez iniciado, debe crear un usuario registrando una cuenta de usuario. Este registro permanece local en el contenedor y no requiere una dirección de correo electrónico real.
Puede cambiar las banderas dentro del código fuente de los desafíos y luego en CTFD (deben coincidir).
Después de clonar el repositorio, navegue hasta ai-goat/app/challenges/1/app.py
y cambie la bandera en la cadena en la línea 12.
Luego navegue hasta ai-goat/app/challenges/2/entrypoint.sh
y cambie la bandera en la línea 3.
A continuación necesitarás cambiar las banderas en CTFD. Inicie CTFD ( ./ai-goat.py --run ctfd
y abra el navegador en http://127.0.0.1:8000
) y luego inicie sesión con el usuario root
usando qVLv27Dsy5WuXRubjfII
como contraseña.
Una vez que haya iniciado sesión, navegue por el panel de administración (barra de navegación superior) -> Desafíos (barra de navegación superior) -> seleccione un desafío -> y presione la subpestaña Banderas.
Cambie la bandera de cada desafío CTFD para que coincida con la misma cadena que cambió en el código fuente.
¡Divertirse!
Consulte la sección Challenges
para obtener una descripción de cada desafío o consulte la página web de ai-ctfd desde Step 1
. El siguiente comando lanza el primer desafío:
./ai-goat.py --run 1
El contenedor del desafío se iniciará en segundo plano y proporcionará instrucciones sobre cómo interactuar con el desafío. Cada desafío tiene una bandera, que es una cuerda rodeada de llaves. Por ejemplo: {eXampl3F!ag}
. Verifica la bandera mediante el envío al desafío del sujeto en la página ai-ctfd.
Importante: a veces, los LLM componen el valor del indicador, así que asegúrese de verificar el indicador en ai-ctfd;)
Importante: la respuesta de LLM puede tardar aproximadamente 30 segundos
Los desafíos se pueden reiniciar volviendo a ejecutar el desafío. Ejemplo: ./ai-goat.py --run <CHALLENGE NUMBER>
. Este comando reiniciará el contenedor si ya se está ejecutando.
Podrías contaminar o romper sin darte cuenta un contenedor de prueba. Utilice los comandos de Docker para detener los contenedores si es necesario. Para enumerar contenedores: docker container ps
. Para detener un contenedor: docker stop <CONTAINER NAME>
.
La rama principal siempre contendrá la última versión. Las versiones históricas se mantendrán en las respectivas sucursales. Instrucciones de actualización:
cd ai-goat git pull pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
Importante: ai-ctfd comenzará efectivamente desde cero, así que asegúrese de crear un nuevo usuario y volver a enviar/rehacer cualquier desafío anterior si lo desea.
Los ataques de inyección rápida exitosos influyen en el LLM para que responda con información que no pretende divulgar. En este desafío, un chatbot de IA que se ejecuta en el puerto 9001 almacena la bandera como un secreto y se le ha pedido que no la abandone. ¿Podrás convencer o engañar al robot para que te dé la bandera?
./ai-goat.py -r 1
LLM01: Inyecciones inmediatas | LLM07: Fuga de datos
No se debe confiar en la salida del sistema LLM, especialmente cuando esa salida se utiliza en operaciones posteriores, como comandos del sistema operativo o llamadas de red. Este desafío tiene otro chatbot de IA ejecutándose en el puerto 9002 que responde a la pregunta de un usuario y devuelve el título de un sitio web. El chatbot convierte la entrada del usuario en una URL donde se utiliza para solicitar la fuente de ese sitio mientras se extrae el título. ¿A qué más podría tener acceso a la red este chatbot?
./ai-goat.py -r 2
LLM02: Manejo de salida inseguro
La última versión es la rama principal. Puede encontrar la versión en el archivo CHANGELOG.md
. Se crean ramas para cada versión respectiva.
Motor CTF: CTFD
Arte por: ejm97 en ascii.co.uk
Tecnología de contenedores de IA:
Biblioteca: llama-cpp-python
Modelo de lenguaje grande: Vicuña LLM