// AILA · modular AI security platform
Modular AI security platform. Python core (FastAPI + Typer CLI), PostgreSQL + pgvector, ARQ/Redis task queue, React + Vite + TypeScript shell. Four production modules: vulnerability (CVE/CWE scanning, distro-aware advisory resolution), forensics (DFIR over SSH — disk images, memory dumps, PCAPs, write-up generation), vr (graph-aware audit across 58+81 MCP tools with adversarial 3-persona deliberation, fuzz campaign proposals, exploit/PoC writer agent), malware (sample-centric reverse engineering with the same six-persona adversarial loop, tool surface locked to ida-headless-mcp-exp on port 18821).
VR engine: trailmark call graph (742k functions / 5M+ edges on firefox), GPU CSR adjacency for attack-surface and fuzzing-target ranking, Model2Vec + BM25 + RRF semble retrieval (3.4 GB pickle on firefox, ~9 s warm restore), IDA Hex-Rays + miasm IR for control-flow obfuscation and symbolic execution. Per-stage durable target ingestion with reaper; circuit breakers on MCP tool failures; survey-streak pivot to keep the agent reading source.
Malware module: six investigation kinds (triage / full_analysis / unpack_only / config_extract / yara_generate / family_attribution), deterministic four-stage C2 config extraction (locate loader → recover storage layout → apply layout → cross-validate), two-stage C2 hunt separating Stage 1 loader URLs from Stage 2 dropped-payload endpoints, chorus-veto outcome review at VETO_K=2, structured synthesis promoting family / capabilities / IOCs / detection guidance / next-actions. The bridge to ida-headless-mcp-exp adds nine defenses on top of the 81-tool catalog: auto-poll on status:pending (2 → 3 → 4.5 → 8 s, capped at 240 s); dead-arbiter fail-fast that returns a dead_worker_diagnostic naming SHA, heartbeat age, queue depth, and exact operator action; per-call dedup over 23 read-only actions with 300 s TTL; sub_<hex> / loc_<hex> / unk_<hex> → 0x<hex> rewrite across 17 address kwargs; encoding aliasing for the string family; pagination-noise drop; search_pattern enum coercion; status=None payload normalization; suppress set for tools that derail agents (classify_strings, search_source). Three new synchronous tools — list_strings / read_memory / get_string_at — read directly off the PE section table; on an 813 KB Delphi PE list_strings enumerates 10,254 printable strings vs classify_strings’s 19 bucketed entries. Operator surface: reset / force-re-enqueue / re-synthesize (tones operator|executive|technical|analyst|forensic; lengths brief|standard|exhaustive) / narrative writeup (tones blog|incident_report|thriller|academic|casual; lengths short ~1.5–2.5K, standard ~3.5–5.5K, long ~8–15K words; body.min_length=4000 enforced so the LLM cannot bail on an intro stub) / direct edit_outcome patches on draft outcomes.
github.com/project-lambda-zero/AILA