
Plugin de servicio de Adaptix C2 que impulsa el análisis de payload de LitterBox desde la UI del operador.

QA de payload previas al vuelo para Adaptix, potenciado por LitterBox.
Cheshire es un complemento de servicio de Adaptix C2 que conecta el cliente de Adaptix con un sandbox LitterBox. Desde la interfaz de usuario de Adaptix, un operador puede seleccionar cualquier binario, enviarlo a través de la cadena completa de análisis de LitterBox (estático + dinámico + cada perfil de EDR alcanzable) y ver el veredicto materializarse sin salir de Adaptix.
El nombre sigue la línea de las mascotas del proyecto:
| Acción | Punto(s) final(es) de LitterBox | Resultado |
|---|---|---|
| Cargar payload | POST /upload | md5 + metadatos del archivo |
| Ejecutar todo | POST /analyze/static/<md5> + /analyze/dynamic/<md5> + /analyze/edr/<profile>/<md5> (×N profiles) en gorutinas paralelas | Estático, Dinámico, cada perfil de EDR poblado a medida que se completa |
| Solo estático | /analyze/static/<md5> | Hallazgos de YARA / CheckPlz / Stringnalyzer |
| Solo dinámico | /analyze/dynamic/<md5> | Hallazgos de YARA-mem / PE-Sieve / Moneta / Patriot / HSB / RedEdr |
| EDR (múltiple) | /analyze/edr/<profile>/<md5> por perfil + sondeo Fase 2 en /api/results/edr/<profile>/<md5> | Tabla de alertas por perfil + detalle completo de alerta (razón, MITRE, API, región de memoria, pila de llamadas, módulo de usuario final, proceso, padre, respuestas de EDR) |
| Limpiar | DELETE /file/<md5> | Elimina la carga + carpetas de resultados + directorios de análisis por muestra de LitterBox |
| Sonda de flota | GET /health | Estado del sandbox, inventario de escáneres, accesibilidad del agente EDR — controla las casillas de verificación de Perfiles EDR |
El sondeo de la Fase 2 de EDR utiliza la cadencia adaptativa de LitterBox (base 2s, retroceso ×1.5 hasta 15s cuando el recuento de alertas es estable, vuelve a 2s ante movimiento). Cada tick de sondeo transmite un evento progress al cliente para que la barra de progreso en vivo pueda mostrar los recuentos de alertas aumentando en tiempo real.
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)
El complemento Go es un relé HTTP sin estado entre TsServiceSendDataClient de Adaptix y la API REST de LitterBox. El archivo AXScript se encarga de toda la representación: banner de veredicto, resumen de detección, subpestañas por escáner, tabla de alertas de EDR con clic para detalle.
Cheshire requiere una instancia de LitterBox en ejecución (consulte el repositorio de LitterBox para la instalación). Confirme la accesibilidad:
curl http://<litterbox-host>:1337/health
Edite cheshire_service/config.yaml y establezca 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"
Si falta litterbox_url, el complemento se carga pero cada comando del operador devuelve "Cheshire is not configured: set litterbox_url in service_config". No hay un valor predeterminado de respaldo.
bash setup_cheshire.sh --ax /path/to/AdaptixC2
Esto:
AdaptixC2/AdaptixServer/extenders/cheshire_service/../extenders/cheshire_service al espacio de trabajo de Go.service_cheshire.so mediante el Makefile..so compilado + config.yaml + ax_config.axs en AdaptixC2/dist/extenders/cheshire_service/.Agregue una línea a AdaptixC2/dist/profile.yaml debajo de Teamserver.extenders:
extenders:
- "extenders/cheshire_service/config.yaml"
...
pkill -f adaptixserver
cd AdaptixC2/dist
./adaptixserver -profile profile.yaml
Debería ver [cheshire] Initialized — LitterBox at http://... en el registro del servidor, seguido de [+] Service 'cheshire' loaded.
En la barra de menú del cliente de Adaptix, Cheshire → Test with Cheshire abre el panel.
┌─ Payload ───────────────────────────────────────────────────────────────┐
│ [Browse...] /home/op/payloads/beacon.exe │
├─ Perfiles EDR ──────────────────────────────────────────────────────────┤
│ ☑ Elastic Defend ● reachable elastic · WIN-VM01 · nightcity │
│ ☐ Fibratus ● not reachable fibratus │
├─ Argumentos de análisis dinámico ────────────────────────────────────────┤
│ --quiet -p 4444 │
├─────────────────────────────────────────────────────────────────────────┤
│ [Ejecutar todo] | [Estático] [Dinámico] [EDR] | [Limpiar] Cargado: ... │
├─────────────────────────────────────────────────────────────────────────┤
│ 🚫 DETECTADO — 5 detecciones en 2 Estático, 1 Dinámico [CRÍTICO] │
│ ✓ Estático ✓ Dinámico 🔄 elastic (2) │
├─ Resumen de detección ────────────────────────────────────────────────┤
│ Gravedad | Escáner | Detección | Detalle │
│ CRÍTICO | Static · CheckPlz | Trojan:Win64/... | offset 0x20EF │
│ CRÍTICO | Static · YARA | mimikatz_strings | matched $sek... │
│ ALTO | Dynamic · PE-Sieve | 3 modifications | 3 IAT hooks │
│ ... │
├─ Estático | Dinámico | EDR ────────────────────────────────────────────┤
│ subpestañas por escáner con barra de estadísticas + tarjetas de hallazgos con bordes │
└─────────────────────────────────────────────────────────────────────────┘
⏳ EN EJECUCIÓN — N detecciones hasta ahora mientras cualquier escáner programado esté en vuelo.🚫 DETECTADO — N detecciones en X Estático, Y Dinámico, Z EDR [maxSev] una vez que cada escáner programado alcanza un estado terminal.✓ LIMPIO — 0 detecciones críticas/altas/medias solo si no hay detecciones reales en ningún escáner. Las señales informativas (BAJO/INFO) se indican por separado, no en el titular.(Solo estático) / (Dinámico + EDR) etc. se agrega cuando el operador ejecuta un escáner individual en lugar de Ejecutar todo: el veredicto refleja honestamente lo que realmente se ejecutó.Agrega todas las detecciones de todos los escáneres en una tabla ordenable. Las filas se extraen del JSON real que devuelve LitterBox (no cadenas de factores genéricos):
initial_threat + scan_results.detection_offsettotal_suspicious + conteos por indicadortotal_* no cero de Moneta (Private RWX → CRÍTICO, etc.)level + type + primeros 120 caracteres de detailscategory === 'threat'Ordenado por gravedad descendente, luego por nombre del escáner.
Cuando se cierra el diálogo, el md5 de la muestra actual se elimina de LitterBox mediante DELETE /file/<md5>. No se acumulan muestras obsoletas entre operaciones.
Cliente Adaptix (Qt) ──┐
│ AXScript service_command("cheshire", "run_all", {...})
▼
Servidor Adaptix ──→ service_cheshire.so ──HTTP──→ LitterBox ──→ VM EDR
│ │ │
│ transmite eventos de progreso Estático / Dinámico │
│ + resultados de vuelta mediante escáneres se ejecutan │
│ TsServiceSendDataClient en el host de LitterBox │
▼ │ │
Cliente Adaptix renderiza veredicto, resumen de detección,│ despachos de perfil EDR
barra de progreso, paneles de detalle por escáner. ▼ │
/analyze/edr/<P>/<md5>
Fase 1: ejecución en VM EDR
Fase 2: sondeo de Elastic
para alertas
El complemento de servicio Go ejecuta cada envío de escáner en su propia gorutina, por lo que Ejecutar todo emite Estático + Dinámico + (un POST por perfil EDR) todo en paralelo. El panel de AXScript se actualiza en vivo a medida que cada gorutina transmite eventos de progress y resultados.
Cheshire sigue las convenciones de LitterBox / Adaptix. Consulte las licencias de los proyectos padre para más detalles.