
Сервисный плагин Adaptix C2, управляющий анализом полезной нагрузки LitterBox из интерфейса оператора.

Предполётная проверка пейлоада для Adaptix на базе LitterBox.
Cheshire — это сервисный плагин C2 для Adaptix, который связывает клиент Adaptix с песочницей LitterBox. Не покидая интерфейс Adaptix, оператор может выбрать любой бинарный файл, отправить его на полный конвейер анализа LitterBox (статический + динамический + все доступные EDR-профили) и наблюдать, как вердикт появляется на экране, оставаясь всё время в Adaptix.
Название продолжает линию талисманов проекта:
| Действие | Эндпоинты LitterBox | Результат |
|---|---|---|
| Загрузка пейлоада | POST /upload | md5 + метаданные файла |
| Run All | POST /analyze/static/<md5> + /analyze/dynamic/<md5> + /analyze/edr/<profile>/<md5> (×N профилей) параллельными горутинами | Static, Dynamic и каждый EDR-профиль заполняются по мере завершения |
| Только Static | /analyze/static/<md5> | Результаты YARA / CheckPlz / Stringnalyzer |
| Только Dynamic | /analyze/dynamic/<md5> | Результаты YARA-mem / PE-Sieve / Moneta / Patriot / HSB / RedEdr |
| EDR (несколько профилей) | /analyze/edr/<profile>/<md5> для каждого профиля + опрос Phase 2 на /api/results/edr/<profile>/<md5> | Таблица алертов по каждому профилю + подробные сведения об алерте (причина, MITRE, API, область памяти, стек вызовов, конечный пользовательский модуль, процесс, родительский процесс, ответы EDR) |
| Очистка | DELETE /file/<md5> | Удаляет загрузку, папки результатов и каталоги анализа по каждому образцу из LitterBox |
| Проверка фермы | GET /health | Статус песочницы, перечень сканеров, доступность EDR-агентов — управляет чекбоксами EDR Profiles |
Опрос EDR Phase 2 использует адаптивный ритм LitterBox (база 2 с,
множитель ×1.5 до 15 с, когда число алертов стабильно, и возврат к 2 с при
изменениях). Каждый такт опроса передаёт клиенту событие progress, поэтому
живая полоса прогресса показывает, как счётчики алертов растут в реальном
времени.
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)
Go-плагин — это HTTP-ретранслятор без сохранения состояния между
TsServiceSendDataClient Adaptix и REST API LitterBox. Файл AXScript отвечает
за весь рендеринг: баннер вердикта, сводку обнаружений, подвкладки по каждому
сканеру и таблицу EDR-алертов с переходом к деталям по клику.
Cheshire требует запущенного экземпляра LitterBox (см. репозиторий LitterBox по установке). Проверьте доступность:
curl http://<litterbox-host>:1337/health
Отредактируйте cheshire_service/config.yaml и укажите 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"
Если litterbox_url не указан, плагин загружается, но каждая команда
оператора возвращает "Cheshire is not configured: set litterbox_url in service_config".
Запасного значения по умолчанию нет.
bash setup_cheshire.sh --ax /path/to/AdaptixC2
Этот скрипт:
AdaptixC2/AdaptixServer/extenders/cheshire_service/../extenders/cheshire_service в Go workspace.service_cheshire.so через Makefile..so + config.yaml + ax_config.axs в
AdaptixC2/dist/extenders/cheshire_service/.Добавьте строку в AdaptixC2/dist/profile.yaml в раздел
Teamserver.extenders:
extenders:
- "extenders/cheshire_service/config.yaml"
...
pkill -f adaptixserver
cd AdaptixC2/dist
./adaptixserver -profile profile.yaml
В логе сервера вы должны увидеть [cheshire] Initialized — LitterBox at http://...,
а затем [+] Service 'cheshire' loaded.
В строке меню клиента Adaptix пункт Cheshire → Test with Cheshire открывает панель управления.
┌─ 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 │
└─────────────────────────────────────────────────────────────────────────┘
⏳ RUNNING — N hit(s) so far — пока любой запланированный сканер ещё работает.🚫 DETECTED — N hit(s) across X Static, Y Dynamic, Z EDR [maxSev] — как только
каждый запланированный сканер перейдёт в конечное состояние.✓ CLEAN — 0 critical/high/medium detections — только если ни на одном сканере
нет реальных срабатываний. Информационные сигналы (LOW/INFO) отмечаются отдельно,
а не в заголовке.(Static only) / (Dynamic + EDR) и т.п. добавляется, когда оператор запускает
отдельный сканер вместо Run All: вердикт честно отражает, что именно было выполнено.Собирает все обнаружения со всех сканеров в одну сортируемую таблицу. Строки извлекаются из фактического JSON, который возвращает LitterBox (а не из обобщённых строк факторов):
initial_threat + scan_results.detection_offsettotal_suspicious + количество по каждому индикаторуtotal_* (Private RWX → CRITICAL и т.д.)level + type + первые 120 символов detailscategory === 'threat'Сортировка по убыванию серьёзности, затем по имени сканера.
При закрытии диалога md5 текущего образца удаляется из LitterBox через
DELETE /file/<md5>. Между заданиями не накапливаются устаревшие образцы.
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
Go-плагин запускает каждую отправку сканера в отдельной горутине, поэтому
Run All выполняет Static + Dynamic + (по одному POST на каждый EDR-профиль)
параллельно. Панель AXScript обновляется в реальном времени по мере того,
как каждая горутина передаёт обратно события progress и результаты.
Cheshire следует соглашениям LitterBox / Adaptix. Подробности см. в лицензиях родительских проектов.