MALWAREBOX::ECOSYSTEM
Case walkthrough · MBX-2026-0xx · the ecosystem, end to end

One case through the whole machine, and a likely false flag coming apart.

A regional logistics provider is hit. The malware and the infrastructure both point (loudly) at a known actor we'll call RED. This page follows every Malwarebox component handing its piece to the next, until SOLBIT notices that only the cheap evidence blames RED. Watch the attribution scoreboard fill as you scroll.

Target clusterMB-ACTOR-0yyy
VictimEU logistics
Surface verdict"RED"loud, but cheap
Real questionIs RED real?
Signal trust: Surface: cheap, easy to fake Deep: expensive, hard to fake
The pipeline · 9 stations · scroll to follow the object
01
Observe
KRAKEN
Observation substrate
emits · Evidence
receives

Raw sightings from collection modules: a phishing lure, a malware sample, a cluster of freshly registered domains, one multilingual ransom note.

does

Ties each observation to the entity it concerns, with three timestamps and a source-side confidence. Nothing is interpreted yet: this is fact, not meaning.

emits · Evidence (immutable)
Evidence {
  evidence_id: "EVD-2026-0142",
  kind:        "campaign_artifact",
  occurred_at: "2026-01-22T03:11Z",
  confidence:  0.95,
  iim_refs:    [ "sample:9f3c…", "fqdn:…", "note:…" ]
}
No attribution signal yet; KRAKEN produces the evidence every other component reads.
sample → analysis
02
Analyze
Mantis
Malware analysis · in KRAKEN
emits · sample_analysis
receives

The binary Evidence from KRAKEN.

does

Static + dynamic analysis. Finds a commodity loader (copyable), code reuse with RED's toolkit, and Cyrillic strings pointing at RED. Rich evidence, but every bit of it is cheap to plant.

emits · feeds SOLBIT · T (Technical)
sample_analysis {
  sha256:     "9f3c4b…",
  family:     "commodity_loader",   // copyable
  code_reuse: [ "RED_toolkit" ],
  strings:    [ "<Cyrillic strings> → RED" ]
}
surface feeds SOLBIT · T · support 0.88 → RED
infrastructure → grammar
03
Structure
IIM
Infrastructure grammar
emits · IIM.chain / pattern
receives

The domain & hosting Evidence from KRAKEN.

does

Models the infrastructure as roles and relations (entry → redirector → staging → C2), and notes a registrar/TLD habit matching RED. The nodes are rentable; the pattern is the real tell.

emits · feeds SOLBIT · I (Infrastructure)
IIM.chain {
  shape:       entry → redirector → staging → c2,
  registrar:   "RED-like habits",
  pattern_ref: "MB-F-0317"
}
surface feeds SOLBIT · I · support 0.86 → RED
evidence → decisions
04
Fingerprint
Modus
Decision fingerprint
emits · Modus.profile
receives

Timing & behavioral Evidence, interpreted into versioned Decision Events.

does

Reads the operation as a staffed human enterprise: build & C2 activity cluster in UTC+7, holiday dips on a different calendar than RED, cleanup discipline matching cluster 0zzz. Hard to fake for months under pressure.

emits · feeds SOLBIT · O + B (deep)
DecisionEvent[] → Modus.profile {
  operation_hours: "UTC+7",        // ≠ RED
  holiday_dips:    "≠ RED calendar",
  tradecraft:      "≈ 0zzz, ≠ RED"
}
deep feeds SOLBIT · O 0.16 & B 0.22 · barely → RED
text-bearing artifacts → language
05
Read language
Lingua
Linguistic substrate · Modus's sibling
emits · Lingua.profile
receives

The ransom note (EN + RU + KO) and panel strings.

does

Source-pivot says the English is the original; the RU carries machine-translation tells. Exclusionary sieve: error pattern inconsistent with L1-Russian and L1-Korean, consistent with L1-Vietnamese, lining up with UTC+7. The note is operator-authored, so it's admissible.

emits · feeds SOLBIT · L (the hinge)
Lingua.profile {
  source_pivot:    "en",            // not ru
  exclude:         [ "≠ L1-Russian", "≠ L1-Korean" ],
  L1_distribution: { Vietnamese: 0.55, … },
  authorship:      "operator_authored",
  solbit_L: { locale: 0.70→RED [surface],
              idiolect: 0.15→RED [deep] }
}
hinge feeds SOLBIT · L · locale 0.70 (surface) idiolect 0.15 (deep)
six dimensions → one verdict
06
Attribute · the catch
SOLBIT
Attribution · anti-deception
emits · SOLBIT.verdict
receives

All six dimensions: T, I (surface) and S, O, B, L-idiolect (deep). It also computes Strategic: the victim serves no RED-sponsor objective.

does: the signature move

Instead of averaging, it splits the evidence by cost-to-fake and compares the two halves. Surface screams RED. Deep doesn't. That gap is not noise; it's the finding.

Surface-vs-deep divergence detector
Surface HIGH
Surface LOW
Deep HIGH
corroborated
quiet / clean
Deep LOW
◄ possible false flag
insufficient
emits · SOLBIT.verdict
SOLBIT.verdict {
  target:            "MB-ACTOR-0yyy",
  surface_consensus: "High",   // T, I → RED
  deep_consensus:    "Low",    // S,O,B,L.idiolect → not RED
  divergence_flag:   true,
  false_flag_assessment: "probable",   // a probability, not a fact
  tier: "T0", confidence: "Moderate",
  competing: [
    { "MB-ACTOR-0zzz": "T0 · Moderate" },   // likely hand
    { "RED": "T1 · Low, likely planted" }
  ],
  collection_gaps: [ "operational_timing", "linguistic_idiolect" ]
}
!

Likely false flag: an assessment, not a fact

The cheap signals (Technical, Infrastructure) appear planted to frame RED. The expensive signals (Operational, Behavioral, Strategic, idiolect) lean toward a UTC+7 / L1-Vietnamese cluster, probably the same hand as 0zzz. A naive sum would have shipped "RED, Moderate-High." SOLBIT instead surfaces the contradiction as a probability and routes the gaps back to collection.

the "who" → relevance
07
Relevance
MB-RM
Relevance mapper · now actor-aware
emits · MB-RM.ranking
receives

The verdict's assessed cluster: 0zzz, rather than RED.

does

Maps the defender's context (sector, geography, exposure) against the attributed actor. Attribution is what makes this ranking trustworthy; you can't prioritize against a ghost.

emits · MB-RM.ranking
MB-RM.ranking {
  defender:  { sector: "logistics", geo: "EU" },
  actor:     "MB-ACTOR-0zzz",      // the real one
  relevance: "High",
  rationale: "0zzz targets EU logistics; RED would not"
}
Relevance: who actually matters for this defender, now anchored to a real attribution.
relevant actor → defense
08
Prioritize
ACDP
Actor-centric defensive prioritization
emits · ACDP.controls
receives

The relevant, correctly-attributed actor 0zzz.

does

Ranks defensive controls by actor disruption (ADV), impact reduction (IRR), cost/complexity (CC) and detection-to-decision time (DDT), against the real tradecraft, not the decoy's.

emits · ACDP.controls
ACDP.controls (vs MB-ACTOR-0zzz) {
  rank_axes: [ ADV, IRR, CC, DDT ],
  top: [
    "kill staging-domain reuse path",
    "detect UTC+7 build cadence",
    "harden initial-access vector"
  ]
}
A justified, prioritized defensive plan, aimed at the actor that is really there.
gaps → tasking
09
Close the loop
Feedback
Loop closure
emits · KRAKEN.collection_tasks
receives

SOLBIT's collection_gaps: the evidence that would harden the verdict.

does

Turns gaps into concrete tasking for the next cycle: acquire more operational timing and linguistic idiolect to test the RED false-flag hypothesis and firm up the assessment. The system doesn't just answer; it asks better next time.

emits · back to KRAKEN
KRAKEN.collection_tasks {
  from:    "SOLBIT.collection_gaps",
  acquire: [ "operational_timing", "linguistic_idiolect" ],
  goal:    "harden 0zzz hypothesis · test the RED false-flag"
}
// → loops back to station 01 · next cycle
The loop closes: priority and attribution gaps become tomorrow's collection.

The whole point: structure beats the sum.

Every component did one job and handed a clean object to the next. The magic isn't any single tool; it's the wiring: cheap evidence and expensive evidence are kept separate, weighed by how hard they are to fake, and their disagreement is treated as a finding instead of being averaged away. Then the gaps flow back into collection, and the loop runs again.

KRAKEN.evidence → Mantis.analysis // T surface → REDIIM.chain // I surface → REDModus.profile // O·B deep → not REDLingua.profile // L deep → not REDSOLBIT.verdict // surface ⊥ deep = FALSE FLAG (likely)MB-RM.ranking // relevance of 0zzz (assessed)ACDP.controls // prioritized defenseKRAKEN.collection_tasks // next cycle ↻