Zum Hauptinhalt springen

AMPLEC - 2: Grundlagen des Projekts

·469 Wörter·3 min·
Amplec Ai Llm Malware Post
Inhaltsverzeichnis

Dies ist der zweite Beitrag in einer Serie über AMPLEC, mein aktuellstes Projekt. Weitere Details zu AMPLEC sowie frühere Beiträge sind hier zu finden.

Das Warum hinter dem Projekt wird in Teil 1 behandelt, Warum sollte ich das haben wollen?.

Kommen wir direkt zur Sache:

Allgemeine Struktur
#

Das Projekt ist abhängig vom Zugriff auf ein LLM (Large Language Model) und den Zugriff auf eine API der Malware-Analyse-Pipeline (hier KARTON).

flowchart TD A[Malware Analyse-Pipeline] B[LLM] C[AMPLEC] A -->|Analyse- ergebnisse| C B -->|Antwort: Text / FunctionCall| C C -->|Prompt & Daten| B C -->|Analyse- anfrage| A

Das LLM wird verwendet, um

  1. schöne Antworten für die Nutzer zu generieren, einschließlich aller anzuzeigenden Daten;
  2. mittels FunctionCall Daten aus der Malware-Analyse-Pipeline (KARTON) abzurufen, um diese anzeigen zu können.

Die eigentliche Magie steckt jedoch im core-Modul von AMPLEC. Dieses Modul ist zuständig für:

  1. Prompting des LLMs mit den darzustellenden Daten;
  2. Bereitstellung des FunctionCall für das LLM;
  3. Vorverarbeitung, Bereinigung, Naturalisation und Anreicherung der Daten aus der Malware-Analyse-Pipeline (KARTON).

Datenfluss
#

Zur Veranschaulichung des Ablaufs zeige ich hier den Datenfluss - von der Malware-Analyse in KARTON bis zur finalen Antwort an die Nutzer:innen.

flowchart TD A[Malware Analyse-Pipeline] B[AMPLEC] C[LLM] D[Nutzer] A -->|Analyse- ergebnisse| B B -->|Ergebnis des FunctionCall| C C -->|FunctionCall| B C -->|Antwort| D C -->|Prompt| D

Datenverarbeitung
#

Innerhalb von AMPLEC durchlaufen die Daten die folgende Schritte:

  1. Abruf der Daten aus der Pipeline (KARTON).
  2. Vorverarbeitung und Bereinigung:
    • Entfernen unnötiger Informationen
    • Formatierung
    • Nachladen weiterer Teile, welche lediglich in referenzierter Form im initialen Ergebnis vorlagen
  3. Naturalisation (näher erläutere ich das im nächsten Beitrag) - Umwandlung von strukturierten Analysergebnissen in natürliche Sprache.
  4. Anreicherung durch zusätzliche Informationen, z. B.:
    • Namen und Beschreibungen von TTPs (Tactics Techniques Procedures) -> aktuell
    • Kontext wie Scores oder Tags zu IoCs (Hashes, URLs usw.) -> geplant
  5. Bereitstellung der Daten für das LLM via FunctionCall.
  6. Generierung der Antwort für die Nutzer durch das LLM.

Tech-Stack
#

Im folgenden will ich darauf eingehen, womit dieses Projekt entwickelt wurde.

Sprache & Frameworks
#

AMPLEC ist vollständig in Python 3.12 geschrieben. Für LLM-Interaktion inkl. Tool-Calling (aka FunctionCalling) kommt LangChain zum Einsatz. Die Core-API wird mit Flask betrieben und durch den WSGI-Server Waitress ausgespielt. Die UI funktioniert mit Streamlit, einem Framework welches die Entwicklung von interaktiver Weboberflächen rein in Python erlaubt.

LLM-Back-Ends
#

Während der Entwicklung habe ich verschiedene LLMs getestet. Kommerzielle Modelle wie ChatGPT lieferten bessere Resultate, dennoch brauchte ich ein leichtgewichtiges Open-Source-Modell, das lokal performant läuft. Die Wahl fiel nach statistischer Evaluation auf llama3.2:3b.

Malware-Pipeline-Interface
#

Die genutzte Malware-Analyse-Pipeline ist KARTON (entwickelt vom CERT Polska). Wir betreiben jedoch keine unveränderte Instanz: Ergebnisse jeder Analyse werden bei uns einzeln in ElasticSearch gespeichert und über eine eigens gebaute API zusammengeführt. AMPLEC greift auf genau diese API zu um die Analyseergebnisse zu erhalten. Nun ist diese Modifikation nicht Teil des Projekts selbst, allerdings ist sie notwendig für dessen Funktion.