_)) > * _~ `;'__-' _ ____ | ) _ _____________________ ____ / / `` w w ____________________ ____ w w ________________AI_Goat______ ______________________________________ Presented by: rootcauz
Apprenez la sécurité de l'IA à travers une série de défis vulnérables LLM CTF. Pas d'inscription, pas de frais cloud, exécutez tout localement sur votre système.
De nombreuses entreprises ont commencé à créer des logiciels qui s'intègrent aux grands modèles de langage (LLM) d'IA en raison de la sortie de ChatGPT et d'autres moteurs. Cette explosion d'intérêt a conduit au développement rapide de systèmes qui réintroduisent d'anciennes vulnérabilités et imposent de nouvelles classes de menaces moins comprises. De nombreuses équipes de sécurité d'entreprise ne sont peut-être pas entièrement équipées pour gérer la sécurité LLM, car le domaine est encore en pleine maturité avec des outils et des ressources d'apprentissage.
J'ai développé AI Goat pour en savoir plus sur le développement LLM et les risques de sécurité auxquels les entreprises qui l'utilisent sont confrontées. Le format CTF est un excellent moyen pour les chercheurs en sécurité d'acquérir une expérience pratique et de découvrir comment ces systèmes sont vulnérables et peuvent être exploités. Merci de votre intérêt pour ce projet et j'espère que vous vous amuserez !
Le Top 10 OWASP pour les applications LLM est un excellent point de départ pour en savoir plus sur les menaces de sécurité et les mesures d'atténuation LLM. Je vous recommande de lire attentivement le document, car de nombreux concepts sont explorés dans AI Goat et il fournit un résumé impressionnant de ce à quoi vous serez confronté dans les défis.
N'oubliez pas qu'un moteur LLM intégré dans une application Web hébergée dans un environnement cloud sera soumis aux mêmes menaces de sécurité traditionnelles pour les applications cloud et Web. En plus de ces menaces traditionnelles, les projets LLM seront également soumis à la liste non exhaustive de menaces suivante :
Injection rapide
Gestion des sorties non sécurisées
Empoisonnement des données de formation
Déni de service
Chaîne d'approvisionnement
Problèmes d'autorisation
Fuite de données
Agence excessive
Dépendance excessive
Plugins non sécurisés
AI Goat utilise le Vicuna LLM dérivé du LLaMA de Meta et couplé aux données de réponse de ChatGPT. Lors de l'installation d'AI Goat, le binaire LLM est téléchargé depuis HuggingFace localement sur votre ordinateur. Ce binaire d’environ 8 Go est le moteur d’IA autour duquel les défis sont construits. Le binaire LLM prend essentiellement une « invite » d’entrée et donne une sortie, « réponse ». L'invite se compose de trois éléments concaténés dans une chaîne. Ces éléments sont : 1. Les instructions ; 2. Questionnement ; et 3. Réponse. L'élément Instructions comprend les règles décrites pour le LLM. Ils sont destinés à décrire au LLM comment il est censé se comporter. L'élément Question est l'endroit où la plupart des systèmes autorisent la saisie de l'utilisateur. Par exemple, le commentaire saisi dans un moteur de discussion serait placé dans l'élément Question. Enfin, la section Réponse prescrit que le LLM donne une réponse à la question.
Une image Docker prédéfinie, ai-base, contient toutes les bibliothèques nécessaires pour exécuter le LLM et les défis. Ce conteneur est téléchargé pendant le processus d'installation avec le binaire LLM. Une composition Docker qui lance chaque défi attache le binaire LLM, les fichiers de défi spécifiques et expose les ports TCP nécessaires pour terminer chaque défi. Consultez les sections d'installation et de configuration pour obtenir des instructions sur la mise en route.
Un conteneur CTFd facultatif a été préparé qui comprend chaque description de défi, astuces, catégorie et soumission de drapeau. L'image du conteneur est hébergée dans notre dockerhub et est appelée ai-ctfd à côté de l'image ai-base. Le conteneur ai-ctfd peut être lancé à partir de ai-goat.py et accessible à l'aide de votre navigateur.
git
sudo apt install git -y
python3
pip3
sudo apt install python3-pip -y
Docker
docker-composer
Utilisateur dans le groupe Docker
sudo usermod -aG docker $USER
reboot
8 Go d'espace disque
Mémoire système minimale de 16 Go avec au moins 8 Go dédiés au défi ; sinon les réponses LLM prennent trop de temps
Un amour pour la cybersécurité!
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
Cette section suppose que vous avez déjà suivi les étapes Installation
.
L'utilisation d'ai-ctfd vous fournit une liste de tous les défis et la soumission des drapeaux. C'est un excellent outil à utiliser par vous-même ou lors de l'hébergement d'un CTF. L'utiliser en tant qu'individu vous fournit une carte des défis et vous aide à suivre les défis que vous avez relevés. Il propose la soumission d'un drapeau pour confirmer la réussite du défi et peut fournir des indices qui vous poussent dans la bonne direction. Le conteneur peut également être lancé et hébergé sur un serveur interne où vous pouvez héberger votre propre CTF pour un groupe de passionnés de sécurité. La commande suivante lance ai-ctfd en arrière-plan et est accessible sur le port 8000 :
./ai-goat.py --run ctfd
Important : Une fois lancé, vous devez créer un utilisateur en enregistrant un compte utilisateur. Cette inscription reste locale sur le conteneur et ne nécessite pas de véritable adresse email.
Vous pouvez changer les drapeaux dans le code source des défis puis dans CTFD (ils doivent correspondre).
Après avoir cloné le dépôt, accédez à ai-goat/app/challenges/1/app.py
et modifiez l'indicateur dans la chaîne à la ligne 12.
Accédez ensuite à ai-goat/app/challenges/2/entrypoint.sh
et modifiez le drapeau sur la ligne 3.
Ensuite, vous devrez changer les drapeaux dans CTFD. Lancez CTFD ( ./ai-goat.py --run ctfd
et ouvrez le navigateur sur http://127.0.0.1:8000
), puis connectez-vous avec l'utilisateur root
en utilisant qVLv27Dsy5WuXRubjfII
comme mot de passe.
Une fois connecté, naviguez dans le panneau d'administration (barre de navigation supérieure) -> Défis (barre de navigation supérieure) -> sélectionnez un défi -> et appuyez sur le sous-onglet Drapeaux.
Modifiez l'indicateur de chaque défi CTFD pour qu'il corresponde à la même chaîne que celle que vous avez modifiée dans le code source.
Amusez-vous!
Consultez la section Challenges
pour une description de chaque défi ou reportez-vous à la page Web ai-ctfd de Step 1
. La commande suivante lance le premier défi :
./ai-goat.py --run 1
Le conteneur de défi se lancera en arrière-plan et fournira des instructions sur la façon d'interagir avec le défi. Chaque défi comporte un drapeau, qui est une chaîne entourée d'accolades. Par exemple : {eXampl3F!ag}
. Vous vérifiez le drapeau en soumettant le défi du sujet sur la page ai-ctfd.
Important : Parfois, les LLM constituent la valeur du drapeau, alors assurez-vous de vérifier le drapeau dans ai-ctfd ;)
Important : La réponse LLM peut prendre environ 30 secondes.
Les défis peuvent être relancés en réexécutant le défi. Exemple : ./ai-goat.py --run <CHALLENGE NUMBER>
. Cette commande redémarrera le conteneur s'il est déjà en cours d'exécution.
Vous pourriez par inadvertance polluer ou casser un conteneur de défi. Utilisez les commandes Docker pour arrêter les conteneurs si nécessaire. Pour lister les conteneurs : docker container ps
. Pour arrêter un conteneur : docker stop <CONTAINER NAME>
.
La branche principale contiendra toujours la dernière version. Les versions historiques seront conservées dans les succursales respectives. Instructions de mise à niveau :
cd ai-goat git pull pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
Important : ai-ctfd repartira effectivement de zéro, alors assurez-vous de créer un nouvel utilisateur et de soumettre/refaire à nouveau tous les défis précédents si vous le souhaitez.
Les attaques par injection rapide réussies incitent le LLM à répondre avec des informations qu'il n'est pas censé divulguer. Dans ce défi, un chatbot IA exécuté sur le port 9001 stocke le drapeau comme secret et a été invité à ne pas l'abandonner. Pouvez-vous convaincre ou tromper le robot pour qu'il vous donne le drapeau ?
./ai-goat.py -r 1
LLM01 : Injections rapides | LLM07 : Fuite de données
La sortie du système LLM ne doit pas être fiable, en particulier lorsque cette sortie est utilisée dans des opérations en aval telles que des commandes du système d'exploitation ou des appels réseau. Ce défi comporte un autre chatbot IA exécuté sur le port 9002 qui répond à une question de l'utilisateur et renvoie le titre d'un site Web. L'entrée de l'utilisateur est convertie en URL par le chatbot où elle est utilisée pour demander la source de ce site tout en extrayant le titre. À quoi d’autre ce chatbot pourrait-il avoir accès au réseau ?
./ai-goat.py -r 2
LLM02 : gestion des sorties non sécurisée
La dernière version est la branche principale. Vous pouvez trouver la version dans le fichier CHANGELOG.md
. Des branches sont créées pour chaque version respective.
Moteur CTF : CTFD
Illustration par : ejm97 sur ascii.co.uk
Technologie de conteneur IA :
Bibliothèque : lama-cpp-python
Grand modèle linguistique : Vicuna LLM