_)) > * _~ `;'__-' _ ____ | ) _ _____________________ ____ / / `` w w ____________________ ____ w w ________________AI_Goat______ ______________________________________ Presented by: rootcauz
Lernen Sie KI-Sicherheit durch eine Reihe anfälliger LLM-CTF-Herausforderungen. Keine Anmeldungen, keine Cloud-Gebühren, führen Sie alles lokal auf Ihrem System aus.
Viele Unternehmen haben aufgrund der Veröffentlichung von ChatGPT und anderen Engines damit begonnen, Software zu entwickeln, die sich in KI-große Sprachmodelle (LLMs) integrieren lässt. Dieser explosionsartige Anstieg des Interesses hat zu rasanten Entwicklungssystemen geführt, die alte Schwachstellen wieder einführen und neue Klassen weniger verstandener Bedrohungen auferlegen. Viele Sicherheitsteams in Unternehmen sind möglicherweise nicht vollständig für den Umgang mit LLM-Sicherheit gerüstet, da der Bereich mit Tools und Lernressourcen immer noch ausgereift ist.
Ich habe AI Goat entwickelt, um mehr über die LLM-Entwicklung und die Sicherheitsrisiken zu erfahren, denen Unternehmen ausgesetzt sind, die sie verwenden. Das CTF-Format ist eine großartige Möglichkeit für Sicherheitsforscher, praktische Erfahrungen zu sammeln und zu erfahren, wie anfällig diese Systeme sind und ausgenutzt werden können. Vielen Dank für Ihr Interesse an diesem Projekt und ich wünsche Ihnen viel Spaß!
Die OWASP Top 10 für LLM-Anwendungen sind ein großartiger Ort, um sich über LLM-Sicherheitsbedrohungen und -minderungen zu informieren. Ich empfehle Ihnen, das Dokument gründlich durchzulesen, da viele der Konzepte in AI Goat untersucht werden und es eine hervorragende Zusammenfassung dessen bietet, was Sie bei den Herausforderungen erwarten werden.
Denken Sie daran, dass eine LLM-Engine, die in eine in einer Cloud-Umgebung gehostete Webanwendung eingebettet ist, denselben herkömmlichen Sicherheitsbedrohungen für Cloud- und Webanwendungen ausgesetzt ist. Zusätzlich zu diesen herkömmlichen Bedrohungen sind LLM-Projekte auch der folgenden nicht umfassenden Liste von Bedrohungen ausgesetzt:
Schnelle Injektion
Unsichere Ausgabeverarbeitung
Trainingsdatenvergiftung
Denial-of-Service
Lieferkette
Berechtigungsprobleme
Datenleck
Übermäßige Agentur
Übermäßiges Vertrauen
Unsichere Plugins
AI Goat verwendet das Vicuna LLM, das von Metas LLaMA abgeleitet und mit den Antwortdaten von ChatGPT gekoppelt ist. Bei der Installation von AI Goat wird die LLM-Binärdatei von HuggingFace lokal auf Ihren Computer heruntergeladen. Diese etwa 8 GB große Binärdatei ist die KI-Engine, auf der die Herausforderungen basieren. Die LLM-Binärdatei nimmt im Wesentlichen eine Eingabeaufforderung entgegen und gibt eine Ausgabe, eine „Antwort“, aus. Die Eingabeaufforderung besteht aus drei Elementen, die in einer Zeichenfolge miteinander verkettet sind. Diese Elemente sind: 1. Anweisungen; 2. Frage; und 3. Antwort. Das Element „Anweisungen“ besteht aus den beschriebenen Regeln für das LLM. Sie sollen dem LLM beschreiben, wie er sich verhalten soll. Im Frageelement erlauben die meisten Systeme Benutzereingaben. Beispielsweise würde der in eine Chat-Engine eingegebene Kommentar im Frageelement platziert. Schließlich schreibt der Abschnitt „Antwort“ vor, dass der LLM eine Antwort auf die Frage geben muss.
Ein vorgefertigtes Docker-Image, ai-base, verfügt über alle Bibliotheken, die zum Ausführen des LLM und der Herausforderungen erforderlich sind. Dieser Container wird während des Installationsprozesses zusammen mit der LLM-Binärdatei heruntergeladen. Ein Docker-Compose, der jede Challenge startet, hängt die LLM-Binärdatei und bestimmte Challenge-Dateien an und stellt TCP-Ports bereit, die zum Abschließen jeder Challenge erforderlich sind. Anweisungen für die ersten Schritte finden Sie in den Abschnitten „Installation“ und „Setup“.
Es wurde ein optionaler CTFd-Container vorbereitet, der jede Challenge-Beschreibung, Hinweise, Kategorie und Flag-Übermittlung enthält. Das Container-Image wird in unserem Dockerhub gehostet und wird zusammen mit dem ai-base-Image als ai-ctfd aufgerufen. Der ai-ctfd-Container kann über ai-goat.py gestartet und über Ihren Browser aufgerufen werden.
Idiot
sudo apt install git -y
Python3
pip3
sudo apt install python3-pip -y
Docker
Docker-Compose
Benutzer in der Docker-Gruppe
sudo usermod -aG docker $USER
reboot
8 GB Festplattenspeicher
Mindestens 16 GB Systemspeicher, davon mindestens 8 GB für die Herausforderung reserviert; Andernfalls dauern LLM-Antworten zu lange
Eine Liebe zur Cybersicherheit!
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
In diesem Abschnitt wird davon ausgegangen, dass Sie die Installation
bereits ausgeführt haben.
Mit ai-ctfd erhalten Sie eine Liste aller Herausforderungen und die Einreichung von Flaggen. Es ist ein großartiges Tool, das Sie selbst oder beim Hosten eines CTF verwenden können. Wenn Sie es als Einzelperson verwenden, erhalten Sie eine Karte der Herausforderungen und können nachverfolgen, welche Herausforderungen Sie gemeistert haben. Es bietet die Übermittlung von Flaggen zur Bestätigung des Abschlusses der Herausforderung und kann Hinweise geben, die Sie in die richtige Richtung lenken. Der Container kann auch auf einem internen Server gestartet und gehostet werden, wo Sie Ihr eigenes CTF für eine Gruppe von Sicherheitsbegeisterten hosten können. Der folgende Befehl startet ai-ctfd im Hintergrund und kann über Port 8000 aufgerufen werden:
./ai-goat.py --run ctfd
Wichtig: Nach dem Start müssen Sie einen Benutzer erstellen und ein Benutzerkonto registrieren. Diese Registrierung bleibt lokal im Container und erfordert keine echte E-Mail-Adresse.
Sie können die Flags im Quellcode der Herausforderungen und dann in CTFD ändern (sie müssen übereinstimmen).
Nachdem Sie das Repo geklont haben, navigieren Sie zu ai-goat/app/challenges/1/app.py
und ändern Sie das Flag in der Zeichenfolge in Zeile 12.
Navigieren Sie dann zu ai-goat/app/challenges/2/entrypoint.sh
und ändern Sie die Flagge in Zeile 3.
Als nächstes müssen Sie die Flags in CTFD ändern. Starten Sie CTFD ( ./ai-goat.py --run ctfd
und öffnen Sie den Browser für http://127.0.0.1:8000
) und melden Sie sich dann mit dem root
-Benutzer mit qVLv27Dsy5WuXRubjfII
als Passwort an.
Navigieren Sie nach der Anmeldung durch das Admin-Panel (obere Navigationsleiste) -> Herausforderungen (obere Navigationsleiste) -> wählen Sie eine Herausforderung aus -> und klicken Sie auf die Unterregisterkarte „Flaggen“.
Ändern Sie das Flag für jede CTFD-Herausforderung, damit es mit derselben Zeichenfolge übereinstimmt, die Sie im Quellcode geändert haben.
Viel Spaß!
Eine Beschreibung der einzelnen Herausforderungen finden Sie im Abschnitt „ Challenges
“ oder auf der ai-ctfd-Webseite ab Step 1
. Der folgende Befehl startet die erste Herausforderung:
./ai-goat.py --run 1
Der Herausforderungscontainer wird im Hintergrund gestartet und enthält Anweisungen zur Interaktion mit der Herausforderung. Jede Herausforderung hat eine Flagge, eine von geschweiften Klammern umgebene Schnur. Zum Beispiel: {eXampl3F!ag}
. Sie überprüfen die Flagge, indem Sie sich der Betreffherausforderung auf der ai-ctfd-Seite stellen.
Wichtig: Manchmal bilden LLMs den Flag-Wert, also stellen Sie sicher, dass Sie das Flag in ai-ctfd überprüfen ;)
Wichtig: Die LLM-Antwort kann etwa 30 Sekunden dauern
Herausforderungen können neu gestartet werden, indem die Herausforderung erneut ausgeführt wird. Beispiel: ./ai-goat.py --run <CHALLENGE NUMBER>
. Dieser Befehl startet den Container neu, wenn er bereits ausgeführt wird.
Sie könnten versehentlich einen Testbehälter verschmutzen oder zerbrechen. Verwenden Sie Docker-Befehle, um Container bei Bedarf zu stoppen. So listen Sie Container auf: docker container ps
. So stoppen Sie einen Container: docker stop <CONTAINER NAME>
.
Der Hauptzweig enthält immer die neueste Version. Historische Versionen werden in den jeweiligen Zweigstellen gepflegt. Upgrade-Anweisungen:
cd ai-goat git pull pip3 install -r requirements.txt chmod +x ai-goat.py ./ai-goat.py --install
Wichtig: ai-ctfd beginnt effektiv von vorne. Stellen Sie daher sicher, dass Sie einen neuen Benutzer erstellen und bei Bedarf alle vorherigen Herausforderungen erneut einreichen/wiederholen.
Erfolgreiche Prompt-Injection-Angriffe veranlassen das LLM, mit Informationen zu reagieren, die es nicht preisgeben soll. Bei dieser Herausforderung speichert ein KI-Chatbot, der auf Port 9001 läuft, die Flagge als Geheimnis und wurde aufgefordert, sie nicht preiszugeben. Können Sie den Bot überzeugen oder dazu verleiten, Ihnen die Flagge zu geben?
./ai-goat.py -r 1
LLM01: Sofortige Injektionen | LLM07: Datenleck
Der Ausgabe des LLM-Systems sollte nicht vertraut werden, insbesondere wenn diese Ausgabe in nachgelagerten Vorgängen wie Betriebssystembefehlen oder Netzwerkaufrufen verwendet wird. Bei dieser Herausforderung läuft ein weiterer KI-Chatbot auf Port 9002, der eine Benutzerfrage entgegennimmt und den Titel einer Website zurückgibt. Die Benutzereingabe wird vom Chatbot in eine URL umgewandelt, wo sie beim Kopieren des Titels zum Anfordern der Quelle dieser Website verwendet wird. Worauf könnte dieser Chatbot sonst noch Netzwerkzugriff haben?
./ai-goat.py -r 2
LLM02: Unsichere Ausgabeverarbeitung
Die neueste Version ist der Hauptzweig. Die Version finden Sie in der Datei CHANGELOG.md
. Für die jeweilige Version werden Zweige erstellt.
CTF-Engine: CTFD
Kunst von: ejm97 auf ascii.co.uk
KI-Container-Technologie:
Bibliothek: llama-cpp-python
Großes Sprachmodell: Vicuna LLM