ADMIN

2023

11

2023-10-30T12:00:00

Backup und Recovery

PRAXIS

058

Open-Source-Tipp

Security-Enhanced Linux

KI

SELinux-Regeln mit ChatGPT erstellen

Zielführend

von Thorsten Scherf

Veröffentlicht in Ausgabe 11/2023 - PRAXIS

Komplexe Aufgabenstellungen werden immer mehr durch KI-Tools wie ChatGPT bearbeitet. Im Open-Source-Tipp diesen Monat schauen wir uns an, wie Sie mithilfe des bekannten Chatbots und dem Open-Source-Projekt gpt-engineer ganz einfach ein SELinux-Regelwerk entwickeln, ohne hierfür über spezifische Kenntnisse verfügen zu müssen.

Kaum ein Tag vergeht, ohne dass es Neuigkeiten auf dem Gebiet der Large-Language-Models (LLM) gibt. Solche Modelle setzen Deep-Learning-Methoden ein, um sehr große Informationsmengen zu verstehen, zusammenzufassen, zu generieren und auch Daten vorherzusagen. Sowohl die Eingabe als auch die Ausgabe findet dabei so statt, dass diese von Menschen leicht zu verarbeiten sind.
Zahlreiche unterschiedliche Modelle
Das wohl bekannteste LLM stammt von OpenAI [1] und hört auf den Namen "Generative Pre-trained Transformers" (GPT) und hat seine Berühmtheit durch den Einsatz im Chatbot ChatGPT [2] erlangt. Daneben gibt es noch eine Reihe weiterer LLMs. So setzt Google das Pathways Language Model (PaLM) [3] in seinem Chatbot Bard ein, Meta hingegen verwendet das Large-Language-Model Meta AI (LLaMA) [4] für die Integration in eigene Tools.
Die Kommunikation mit einem LLM erfolgt über sogenannte Prompts. Hierbei handelt es sich um eine konkrete Anweisung für das Sprachmodell. Diese sollte zunächst recht einfach gehalten, aber präzise sein. Im weiteren Verlauf der Unterhaltung mit dem LLM lässt sich der Prompt dann durch zusätzliche Angaben verfeinern, um bessere Antworten zu erhalten. Wenn Sie Software oder Konfigurationen für bestimmte Systemkomponenten mithilfe von ChatGPT entwickeln möchten, ist es wichtig, sehr detaillierte Anweisungen an das LLM zu senden. Je komplexer die Aufgabe ist, desto genauer müssen die einzelnen Prompts sein. Dies kann natürlich im Laufe der Zeit recht mühselig werden und je länger eine Sitzung mit ChatGPT dauert, desto höher ist die Chance, dass das LLM Teile der Unterhaltung auch wieder vergisst.
Kaum ein Tag vergeht, ohne dass es Neuigkeiten auf dem Gebiet der Large-Language-Models (LLM) gibt. Solche Modelle setzen Deep-Learning-Methoden ein, um sehr große Informationsmengen zu verstehen, zusammenzufassen, zu generieren und auch Daten vorherzusagen. Sowohl die Eingabe als auch die Ausgabe findet dabei so statt, dass diese von Menschen leicht zu verarbeiten sind.
Zahlreiche unterschiedliche Modelle
Das wohl bekannteste LLM stammt von OpenAI [1] und hört auf den Namen "Generative Pre-trained Transformers" (GPT) und hat seine Berühmtheit durch den Einsatz im Chatbot ChatGPT [2] erlangt. Daneben gibt es noch eine Reihe weiterer LLMs. So setzt Google das Pathways Language Model (PaLM) [3] in seinem Chatbot Bard ein, Meta hingegen verwendet das Large-Language-Model Meta AI (LLaMA) [4] für die Integration in eigene Tools.
Die Kommunikation mit einem LLM erfolgt über sogenannte Prompts. Hierbei handelt es sich um eine konkrete Anweisung für das Sprachmodell. Diese sollte zunächst recht einfach gehalten, aber präzise sein. Im weiteren Verlauf der Unterhaltung mit dem LLM lässt sich der Prompt dann durch zusätzliche Angaben verfeinern, um bessere Antworten zu erhalten. Wenn Sie Software oder Konfigurationen für bestimmte Systemkomponenten mithilfe von ChatGPT entwickeln möchten, ist es wichtig, sehr detaillierte Anweisungen an das LLM zu senden. Je komplexer die Aufgabe ist, desto genauer müssen die einzelnen Prompts sein. Dies kann natürlich im Laufe der Zeit recht mühselig werden und je länger eine Sitzung mit ChatGPT dauert, desto höher ist die Chance, dass das LLM Teile der Unterhaltung auch wieder vergisst.
Vorteile von GPT-4
Wie lange ChatGPT den Inhalt einer Unterhaltung im Speicher vorhält und kurzfristig darauf zurückgreifen kann, um einen Kontext zwischen den einzelnen Prompts herzustellen, hängt im Detail davon ab, welche GPT-Version zum Einsatz kommt. OpenAI bietet unterschiedliche Versionen für den Einsatz als Chatbot an. Das Model GPT-3.5 wurde mit Datensätzen bis September 2021 trainiert und kann sich bis zu 8000 Wörter merken. Die Version GPT-4 [5] hingegen kann bis zu 64.000 Wörter im Kurzzeitspeicher vorhalten.
Ganz allgemein bietet GPT-4 eine Menge weiterer Vorteile gegenüber GPT-3.5 oder noch älteren Modellen. So kann diese Version beispielsweise Daten von Webseiten beziehen, wenn Sie die URL als Teil eines Prompts mit übermitteln. Das aktuelle Model ist sogar in der Lage, Bilder zu verarbeiten und die Antwort darauf basierend zu erzeugen. Der Zugriff auf die aktuelle GPT-Version ist jedoch nicht kostenlos. OpenAI lässt sich diesen mit 20 US-Dollar im Monat bezahlen. Dies ändert sich wahrscheinlich, sobald eine neue GPT-Version zur Verfügung steht.
Prompts automatisch erzeugen
Das Open-Source-Projekt gpt-engineer [6] kann sowohl mit GPT-3.5, genauer gesagt einer Performance-optimierten Version namens gpt-3.5-turbo, als auch mit GPT-4 arbeiten. Letzteres kommt standardmäßig zum Einsatz und ist auch empfohlen, da Sie hiermit die besten Ergebnisse erzielen.
Die Software erlaubt es Ihnen, mit einem einzelnen Prompt eine komplette Codebasis oder Systemkonfiguration zu erzeugen. Damit geht es noch einen Schritt weiter als beispielsweise GitHub Copilot [7] oder ähnliche Tools, die bei der Programmierung unter die Arme greifen. Durch den Einsatz von gpt-engineer erhalten Sie ein Ergebnis, ohne auch nur eine einzelne Zeile Code selbst schreiben zu müssen – und das Ganze durch den Einsatz eines einzelnen Prompts.
Die Software stellt einige Fragen, um den Prompt zu verfeinern, und bereits nach kurzer Zeit erhalten Sie das gewünschte Ergebnis zurückgeliefert. Dieses können Sie bei Bedarf mithilfe von gpt-engineer weiter justieren, aber bereits das erste Ergebnis sollte eine lauffähige Software oder eine einsatzbereite Systemkonfiguration zur Verfügung stellen.
Installation und Setup
Die Software können Sie ganz einfach aus dem GitHub Repository heraus klonen und im Anschluss sämtliche Abhängigkeiten installieren:
git clone https://github.com/AntonOsika/gpt-engineer.git
cd gpt-engineer
pip install -e .
Kostenpflichtige API-Zugriffe
Bevor Sie gpt-engineer einsetzen, müssen Sie jedoch einen ChatGPT-API-Key erzeugen, da die Software über eine API mit dem OpenAI-Service kommuniziert. Nachdem Sie ein Konto auf der OpenAIWebseite angelegt haben, erzeugen Sie einen API-Schlüssel in den Benutzereinstellungen. Hierzu müssen Sie in Ihrem Account eine Kreditkarte hinterlegen, da der Zugriff auf die Schnittstelle kostenpflichtig ist. Das genaue Preismodell finden Sie unter [8], ungefähr können Sie mit Kosten ab drei US-Cent pro 1000 Tokens (Wörtern) rechnen.
Haben Sie einen API-Key erzeugt, können Sie diesen als Variable an gpt-engineer übergeben oder in der Datei ".env" hinterlegen:
export OPENAI_API_KEY=api_key
Im Ordner "projects" befindet sich ein Beispielprojekt. Es bietet sich an, dieses Projekt zu kopieren und dann in der Datei "prompt" die gewünschte Anweisung zu hinterlegen:
cp -r projects/example projects/selinux
Als Prompt übergeben wir in unserem Beispiel die Anweisung, dass gpt-engineer ein SELinux-Policy-Modul für den Apache-Webserver erzeugen soll und ebenfalls für das korrekte Labeling der Webserver-Dateien zuständig ist. Die Erfahrung hat gezeigt, dass Prompts in englischer Sprache immer noch bessere Ergebnisse erzielen als in Deutsch. Dies gilt insbesondere beim Einsatz des GPT-3.5 Modells:
Generate a SELINUX policy module for the Apache webserver running on Fedora. Use bash programming language. Webserver data is located in /srv/apache folder. Make sure that a policy module is generated and all files and directories have the correct SELinux label set.
Und schließlich rufen Sie gpt-engineer dann mit dem Namen des Projektordners als Argument auf: gpt-engineer projects/selinux. Die Software stellt dann noch einige Fragen, um den Prompt weiter zu verfeinern, jedoch sind die Antworten optional. Denken Sie daran, dass das Ergebnis besser wird, je genauer Sie den Prompt ausarbeiten. Das Resultat wird Ihnen nach kurzer Zeit auf dem Bildschirm ausgegeben und ebenfalls im Projekt-Unterordner "workspace" gespeichert:
ls projects/selinux/workspace/
all_output.txt apache_policy_module.te file_contexts main.sh README.md run.sh
Wie erwartet, hat gpt-engineer eine Datei mit den SELinux-Type-Enforcement-Regeln (apache_policy_module.te) und den Dateilabeln (file_contexts) angelegt. In der Datei "main.py" wird schließlich das Policy-Modul kompiliert und mittels semodule in den Speicher des Systems geladen sowie ein Labeling der Webserver-Dateien durchgeführt. Durch den Aufruf der Datei "run.sh" starten Sie den kompletten Vorgang:
# sh
  projects/selinux/workspace/run.sh.
Feedback geben
Über die Datei "feedback" können Sie nun selbiges an gpt-engineer übermitteln, um das Ergebnis zu erweitern oder Fehler zu beseitigen. Um beispielsweise eine passende Dokumentation für das SELinux-Policy-Modul zu generieren, geben Sie in der besagten Datei einfach die folgende Anweisung an:.
Provide some documentation for the policy module..
Rufen Sie nun erneut gpt-engineer auf, aber mit einer zusätzlichen Option:.
gpt-engineer --steps use_feedback projects/SELinux.
Im Anschluss erweitert die Software Ihr Projekt um die von Ihnen gewünschte Dokumentation..
Fazit
Das Beispiel in diesem Artikel hat gezeigt, wie einfach es mithilfe von gpt-engineer ist, Software oder Systemkonfigurationen zu erzeugen. Natürlich sind spezifische Kenntnisse im jeweiligen Bereich von Vorteil, gerade auch wenn es um das Anpassen der von gpt-engineers erzeugten Daten geht, jedoch sind diese nicht zwingend notwendig, um erste Ergebnisse zu erhalten.
(dr)
Link-Codes
[6] gpt-engineer GitHub Repository: https://github.com/AntonOsika/gpt-engineer
[8] ChatGPT-API-Preisliste: https://openai.com/pricing