Repository navigation
feat: REP-054 internal data staging fan-in and SCEN-004 staging to exfil - #116
Merged
Merged
Conversation
Fourth entry under the catalog's tactic-gap rule and the first under Collection (T1074.002, UC-029), built behind the launch gate by the owner's decision. Many distinct internal sources push accepted tcp/445 sessions onto one staging host from the workstation pool inside the window, out-heavy, the mirror of REP-052's topology. The foil is the same fan-in onto a backup server in the server pool, so the destination's asset role is the only separating feature, and the catalog says that standalone nothing else distinguishes staging from backup. SCEN-004 composes the fan-in with REP-005's off-hours exfil. Under pinning the staging host is the victim and the exfil leaves from it, so the chain's analytic is the phase transition. The advisory now measures that join (staging_pivot_stage_indices) and only claims it when a later stage carries the victim as source. It could not ship as a scenario first: no existing technique produced the fan-in. Guards in tests/test_rep054_staging_fanin.py over 20 seeds at 3 presets plus SCEN-004 over three seeds. Positive controls: a foil destination from the workstation pool failed the role guard, a foil pinned at eight sources failed the count parity guard, the advisory with its pivot removed failed the SCEN-004 guard. No vendor profile changed; a fanin diagram glyph is added. Co-Authored-By: Claude Mythos 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NtL63gY2LQZtZwgNwDM8vs
4 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The fourth item of the ranked backlog in
docs/catalog-review-2026-10-07.md, built by the owner's decision and behind the launch gate inCLAUDE.md, which is unchanged. Cut frommainafter #115 merged.It could not ship as a scenario first. The backlog said "could ship as SCEN-004 first", but no existing technique produces many sources converging on one host, so the fan-in technique is the prerequisite and the scenario is what adds the egress follow. Both are here.
REP-054, internal data staging fan-in (Collection, T1074.002; UC-029). The first entry under Collection, which carried nothing. Many distinct internal sources (the target pool) push accepted tcp/445 sessions onto one staging host from the workstation pool inside the window: 6 to 12 sources at low, 15 to 30 at medium, 40 to 80 at high, with 1 to 4 sessions each. Each session is out-heavy with acknowledgements at 1 to 5 percent of the payload. It is the mirror of REP-052's topology.
dst,dptandprotoare held;src, bytes, duration, time and session id vary.The foil is a nightly backup fan-in onto a backup server in the server pool: same source count range from the same pool, same sessions per source, same byte and duration draws, same irregular timing. The destination's asset role is the only separating feature. The catalog says plainly that standalone, nothing distinguishes staging from backup except where the data lands, and that the egress is what SCEN-004 adds.
SCEN-004, staging fan-in to bulk exfil. REP-054 at medium, then REP-005 at high in the next off-hours window. Under scenario pinning the staging host is the victim (REP-054 draws it from the workstation pool, which pinning narrows to the victim) and REP-005 leaves from the same host. The chain's analytic is the phase transition, not either stage's volume.
The advisory measures that join rather than assuming it.
staging_pivot_stage_indiceslists a stage the victim dominates as destination when a later stage carries the victim as source. The through-line names it ("dominant dst in stage 0 before it becomes a source") and the correlation section states that the host that collected the data becomes the host that sends it. A chain with the fan-in alone carries no pivot, which a guard asserts.Honesty on the anchor. No peer-reviewed network-flow detector for staging fan-in is cited. The entry's transferability note says so: its anchor is the ATT&CK technique, incident reporting marked
[Unverified], and the round-3 topology argument. The byte ranges are a design choice marked[Inference].No vendor profile changed. The push is the existing
traffic:forwardaccept on all three vendors. Afanindiagram glyph is added because the fan-out glyph points the wrong way and the inbound glyph shows external probes.Verification
tests/test_rep054_staging_fanin.py, 129 cases: structure of both streams over 20 seeds at 3 presets (one destination, sources from the target pool, counts inside the preset ranges, sessions per source inside the range, tcp/445 accept, ack ratio inside the stated band, every session closing inside the window), the attack's destination in the workstation pool, the foil's in the server pool, timing parity, pooled parity on source count, session count, log bytes, ratio and duration, rendering on all three vendors,--durationkeeping the count, the ceiling binding the count, SCEN-004 joining the fan-in to the exfil on the victim across three seeds with the advisory naming the pivot, and the pivot absent when the chain has no later victim-sourced stage.10.20.30.131not in the server pool);staging_pivot_stage_indicesempty against[0]).tests/test_foil_parity.pyruns its common checks on REP-054 automatically; green.tests/test_duration.pycovers it by parameter; green. Catalog, contract, README-sync, controls, detection-metadata and web API suites green with the counts at 30.ruff,black --check,mypy replicantclean. Frontend: 254 tests green (the diagram coverage test now includes REP-054 and thefaninglyph),tsc -bclean.Documentation impact
replicant/data/technique-catalog.yaml: the entry, the header count, the tactic tally (Collection 1), the scenario note underdistributions.replicant/data/scenario-catalog.yaml: SCEN-004 with a comment on why the join is the phase transition.replicant/data/detection-contracts.yaml: REP-054 contract (distinct sources per destination and port; pushed bytes; temporal span; destination role as the only separable feature).README.md: catalog row, the three count statements (29 to 30), and a SCEN-004 example in the scenario section.docs/catalog-review-2026-10-07.md: dated implementation note on backlog item 4, including why it could not ship as a scenario first and the three positive controls.docs/phase4-scenario-composition-design.md: dated implementation note that the fourth chain's join is a phase transition and how the advisory measures it.CHANGELOG.mdUnreleased,CLAUDE.mddated implementation note (Phase 4's "three curated chains" is now four).Unaffected: the three vendor CEF references (no new field or record),
docs/run-manifest.md(no manifest field changed; the pivot lives in the advisory's coverage data, not the manifest), the web UI beyond the glyph (scenario support is deferred there by design, checked by the manual UAT row CHAIN-16).Maintained documentation changed alongside the behavior, or unaffected surfaces are explained above.
CHANGELOG.mdrecords the operator-visible change.Historical decision records were preserved or received a dated addendum.
Documentation claims were checked against the implemented behavior.
Scope boundary
[Unverified].CLAUDE.mdis unchanged.🤖 Generated with Claude Code
https://claude.ai/code/session_01NtL63gY2LQZtZwgNwDM8vs
Generated by Claude Code