
Adaptix C2-Dienst-Plugin, das die LitterBox-Payload-Analyse über die Operator-Benutzeroberfläche steuert.

Pre-Flight-Payload-QA für Adaptix, unterstützt von LitterBox.
Cheshire ist ein Adaptix C2 Service Plugin, das den Adaptix-Client mit einer LitterBox-Sandbox verbindet. Von innerhalb der Adaptix-Oberfläche kann ein Operator eine beliebige Binärdatei auswählen, sie durch LitterBoxs vollständige Analyse-Kette (statisch + dynamisch + jedes erreichbare EDR-Profil) schicken und das Urteil in Echtzeit beobachten, ohne Adaptix verlassen zu müssen.
Der Name folgt der Linie der Projektmaskottchen:
| Aktion | LitterBox-Endpunkt(e) | Ergebnis |
|---|---|---|
| Payload hochladen | POST /upload | md5 + Dateimetadaten |
| Alle ausführen | POST /analyze/static/<md5> + /analyze/dynamic/<md5> + /analyze/edr/<profile>/<md5> (×N Profile) in parallelen Goroutinen | Statische, Dynamische, jedes EDR-Profil werden gefüllt, sobald jedes abgeschlossen ist |
| Nur statisch | /analyze/static/<md5> | YARA / CheckPlz / Stringnalyzer-Ergebnisse |
| Nur dynamisch | /analyze/dynamic/<md5> | YARA-mem / PE-Sieve / Moneta / Patriot / HSB / RedEdr-Ergebnisse |
| EDR (mehrere) | /analyze/edr/<profile>/<md5> pro Profil + Phase 2 Polling auf /api/results/edr/<profile>/<md5> | Profilbasierte Alarmtabelle + umfassende Alarmdetails (Grund, MITRE, API, Speicherbereich, Aufrufstack, endgültiges Benutzermodul, Prozess, Elternprozess, EDR-Antworten) |
| Bereinigung | DELETE /file/<md5> | Entfernt Upload- + Ergebnisordner + analysespezifische Verzeichnisse von LitterBox |
| Fleet-Prüfung | GET /health | Sandbox-Status, Scanner-Inventar, Erreichbarkeit des EDR-Agenten – steuert die EDR-Profile-Kontrollkästchen |
EDR Phase 2 Polling verwendet den adaptiven Rhythmus von LitterBox (2s Basis, ×1,5 Backoff bis zu 15s, wenn die Alarmzahl stabil ist, Rücksprung auf 2s bei Bewegung). Jeder Poll-Tick streamt ein progress-Ereignis an den Client, sodass der Live-Fortschrittsbalken die hochzählenden Alarmzahlen in Echtzeit anzeigen kann.
Cheshire/
├── README.md
├── setup_cheshire.sh deploy script
└── cheshire_service/
├── config.yaml service plugin manifest + litterbox_url
├── go.mod / go.sum
├── Makefile builds dist/service_cheshire.so
├── pl_main.go Go service plugin (HTTP client to LitterBox)
└── ax_config.axs AXScript UI (the dashboard dialog)
Das Go-Plugin ist ein zustandsloses HTTP-Relay zwischen Adaptix' TsServiceSendDataClient und LitterBox' REST-API. Die AXScript-Datei übernimmt die gesamte Darstellung – Urteilsbanner, Erkennungszusammenfassung, pro Scanner Unterregisterkarten, EDR-Alarmtabelle mit Klick-auf-Detail.
Cheshire benötigt eine laufende LitterBox-Instanz (siehe LitterBox-Repository für die Installation). Überprüfen Sie die Erreichbarkeit:
curl http://<litterbox-host>:1337/health
Bearbeiten Sie cheshire_service/config.yaml und setzen Sie litterbox_url:
extender_type: "service"
extender_file: "service_cheshire.so"
ax_file: "ax_config.axs"
service_name: "cheshire"
service_config: |
litterbox_url: "http://192.168.88.128:1337"
Fehlt litterbox_url, lädt das Plugin zwar, aber jeder Operator-Befehl gibt "Cheshire is not configured: set litterbox_url in service_config" zurück. Es gibt keine Fallback-Standardkonfiguration.
bash setup_cheshire.sh --ax /path/to/AdaptixC2
Dies:
AdaptixC2/AdaptixServer/extenders/cheshire_service/../extenders/cheshire_service zum Go-Workspace hinzu.service_cheshire.so über das Makefile..so + config.yaml + ax_config.axs nach AdaptixC2/dist/extenders/cheshire_service/.Fügen Sie eine Zeile in AdaptixC2/dist/profile.yaml unter Teamserver.extenders hinzu:
extenders:
- "extenders/cheshire_service/config.yaml"
...
pkill -f adaptixserver
cd AdaptixC2/dist
./adaptixserver -profile profile.yaml
Sie sollten [cheshire] Initialized — LitterBox at http://... im Server-Log sehen, gefolgt von [+] Service 'cheshire' loaded.
In der Menüleiste des Adaptix-Clients öffnet Cheshire → Test with Cheshire das Dashboard.
┌─ Payload ───────────────────────────────────────────────────────────────┐
│ [Browse...] /home/op/payloads/beacon.exe │
├─ EDR Profiles ──────────────────────────────────────────────────────────┤
│ ☑ Elastic Defend ● reachable elastic · WIN-VM01 · nightcity │
│ ☐ Fibratus ● not reachable fibratus │
├─ Dynamic Analysis Args ─────────────────────────────────────────────────┤
│ --quiet -p 4444 │
├─────────────────────────────────────────────────────────────────────────┤
│ [Run All] | [Static] [Dynamic] [EDR] | [Cleanup] Uploaded: ... │
├─────────────────────────────────────────────────────────────────────────┤
│ 🚫 DETECTED — 5 hit(s) across 2 Static, 1 Dynamic [CRITICAL] │
│ ✓ Static ✓ Dynamic 🔄 elastic (2) │
├─ Detection Summary ─────────────────────────────────────────────────────┤
│ Severity | Scanner | Detection | Detail │
│ CRITICAL | Static · CheckPlz | Trojan:Win64/... | offset 0x20EF │
│ CRITICAL | Static · YARA | mimikatz_strings | matched $sek... │
│ HIGH | Dynamic · PE-Sieve | 3 modifications | 3 IAT hooks │
│ ... │
├─ Static | Dynamic | EDR ────────────────────────────────────────────────┤
│ per-scanner sub-tabs with stat strip + bordered finding cards │
└─────────────────────────────────────────────────────────────────────────┘
⏳ LÄUFT — N Treffer bisher während ein geplanter Scanner in Bearbeitung ist.🚫 ERKANNT — N Treffer über X Static, Y Dynamic, Z EDR [maxSev] sobald jeder geplante Scanner einen Endzustand erreicht hat.✓ SAUBER — 0 kritische/hohe/mittlere Erkennungen nur wenn keine echten Treffer bei einem Scanner vorliegen. Informationssignale (NIEDRIG/INFO) werden separat vermerkt, nicht in der Überschrift.(Nur statisch) / (Dynamisch + EDR) usw. wird angehängt, wenn der Operator einen einzelnen Scanner anstatt Alle ausführen startet – das Urteil spiegelt ehrlich wider, was tatsächlich ausgeführt wurde.Aggregiert jede Erkennung über alle Scanner in einer sortierbaren Tabelle. Die Zeilen werden aus dem tatsächlichen JSON extrahiert, das LitterBox zurückgibt (keine generischen Faktor-Strings):
initial_threat + scan_results.detection_offsettotal_suspicious + Zählungen pro Indikatortotal_*-Anomaliezählungen (Private RWX → KRITISCH, usw.)level + type + erste 120 Zeichen von detailscategory === 'threat'Sortiert nach Schweregrad absteigend, dann nach Scanner-Name.
Wenn der Dialog geschlossen wird, wird die md5 des aktuellen Samples via DELETE /file/<md5> von LitterBox gelöscht. Es sammeln sich keine veralteten Samples zwischen den Einsätzen an.
Adaptix Client (Qt) ──┐
│ AXScript service_command("cheshire", "run_all", {...})
▼
Adaptix Server ──→ service_cheshire.so ──HTTP──→ LitterBox ──→ EDR VM
│ │ │
│ streams progress events Static / Dynamic │
│ + results back via scanners run on │
│ TsServiceSendDataClient the LitterBox host │
▼ │ │
Adaptix Client renders verdict, detection summary, │ EDR profile
progress strip, per-scanner detail panels. ▼ dispatches
/analyze/edr/<P>/<md5>
Phase 1: exec on EDR VM
Phase 2: poll Elastic
for alerts
Das Go-Service-Plugin führt jeden Scanner-Dispatch in einer eigenen Goroutine aus, sodass Alle ausführen Static + Dynamic + (ein POST pro EDR-Profil) alle parallel ausführt. Das AXScript-Dashboard aktualisiert live, während jede Goroutine progress- und Ergebnisereignisse zurückschickt.
Cheshire folgt den Konventionen von LitterBox / Adaptix. Details entnehmen Sie bitte den Lizenzen der übergeordneten Projekte.