TILLSHIELD · TILLTELL

Every attack has a tell.

GA

TillTell is the detection engine inside TillShield. Every Till product already keeps a server-side record of who did what: sign-ins and second factors in TillAuth, keys and roles in the workspace, secret reads in TillSecrets, pushes and protection changes in TillForge, backup deletions in TillArk, and the edge decisions TillGate makes. TillTell puts those records on one stream and reads them with a library of rules, each tied to a MITRE ATT&CK technique. Nothing to install, nothing to ship: it runs on the workspace you already have.

01The stream

What TillTell sees

Each product writes an event with the same shape: who (a user, a service or an unknown caller, with the address and country when known), did what (an action such as auth.login_failed or secret.reveal), to what, with what outcome. Two fields matter for trust:

  • trust is server when a Till service recorded the event itself and client when an app SDK or the endpoint agent reported it. Most library rules demand server evidence; a rule that would revoke or block never fires on a client-reported record.
  • drill marks traffic from a labelled exercise. Drill findings prove a rule sees the pattern; they never alert and never count toward a rule’s record.

Events are kept for detection and hunting for the workspace’s retention tier: 30, 90 or 400 days. Change it under Shield → Settings → TillTell; it applies to events recorded from then on.

02The library

The rules that ship

Every rule names the ATT&CK technique it covers, the false positives to expect, a playbook it would suggest, and fixtures that must both fire and stay quiet before it ships. Some rules match one event; others correlate a burst, an order of events, a count of distinct values or a first-time value per account. The library today holds 62 rules:

RuleFires onATT&CK
tell-account-brute-forcePassword guessing against one accountT1110.001
tell-admin-role-grantedOwner or admin role grantedT1098
tell-backup-mass-deleteSeveral backups deleted by one personT1490
tell-backup-retention-cutBackup retention shortened by a personT1490
tell-branch-protection-droppedBranch protection removedT1685
tell-cert-pinning-waveCertificate pinning failing across many sessionsT1638
tell-cred-stuffingCredential stuffing from one addressT1110.004
tell-credential-burstMany new keys or tokens from one actorT1098.001
tell-device-compromisedApp running on a rooted or jailbroken deviceT1404
tell-edge-block-stormOne address blocked at the edge again and againT1499.003
tell-history-rewriteRepository history rewrittenT1565.001
tell-host-account-createdLocal account created on a hostT1136.001
tell-host-admin-group-addAccount added to an admin group on a hostT1098
tell-host-agent-silentEndpoint agent went silentT1685
tell-host-autostart-addedNew autostart entry on a hostT1547.001, T1543.001, T1547.015, T1546.004, T1037.004
tell-host-defense-disabledHost protection turned offT1685, T1685.001, T1686
tell-host-download-and-runScript downloaded and run in one commandT1105, T1059.004, T1059.001
tell-host-encoded-powershellPowerShell given an encoded commandT1059.001, T1027.010
tell-host-isolation-liftedHost isolation lifted on the hostT1685
tell-host-kernel-moduleKernel module loaded after bootT1547.006
tell-host-log-clearedSecurity log cleared on a hostT1685.005, T1685.006
tell-host-lsass-readProcess read the memory of lsassT1003.001
tell-host-malware-detectedMalware detected on a hostT1204.002
tell-host-preload-hijackLibrary preloaded into every processT1574.006
tell-host-proxy-executionWindows system binary used to run remote codeT1218.005, T1218.010, T1218.011
tell-host-remote-admin-loginRemote login as root or AdministratorT1078.003
tell-host-reverse-shellReverse shell startedT1059.004
tell-host-scheduled-jobNew scheduled job on a hostT1053.003, T1053.005
tell-host-service-installedNew system service on a hostT1543.002, T1543.003, T1543.004
tell-host-ssh-brute-forcePassword guessing against a hostT1110.001
tell-host-ssh-key-addedSSH key added to an account on a hostT1098.004
tell-host-web-shellWeb server started a shellT1505.003
tell-insider-detection-weakenedSeveral detections turned down by one personT1685
tell-insider-guardrail-offWorkspace approvals or required two-factor turned offT1685, T1556.006
tell-insider-mass-cloneOne person cloned many repositoriesT1213.003
tell-insider-mirror-host-then-pushMirror host allowed, then a push mirror set upT1567.001
tell-insider-push-mirrorRepository set to push to an outside hostT1567.001
tell-insider-repo-delete-burstOne person deleted several repositoriesT1485
tell-insider-repo-made-publicPrivate repository made publicT1567
tell-insider-repos-erasedRepository encryption key destroyedT1485
tell-insider-secret-mass-deleteOne person deleted many secretsT1485
tell-insider-secret-new-projectSecrets read from a project the person has not usedT1555
tell-insider-secret-reveal-burstOne person revealed many secret valuesT1555
tell-login-new-countrySign-in from a country not seen for this accountT1078
tell-mfa-fatigueRepeated MFA failures on one accountT1621
tell-mfa-removedSecond factor removed from an accountT1556.006
tell-password-then-mfa-removedPassword changed, then second factor removedT1098
tell-scim-mass-deprovisionMany accounts removed through SCIMT1531
tell-secret-allowlistedSecret let into a repositoryT1552.001
tell-secret-exportSecrets or data exported out of the platformT1567
tell-secret-in-historySecret in a repository's historyT1552.001
tell-secret-mass-readMany distinct secrets read by one actorT1552
tell-secret-push-burstRepeated pushes refused for secretsT1552.001
tell-service-mints-credentialService credential created another credentialT1098.001
tell-service-new-actionService credential doing something newT1078.004
tell-service-new-environmentService credential reading a new environmentT1555
tell-session-theftSession theft detectedT1539
tell-signin-flagged-addressSign-in from an address other workspaces flaggedT1078
tell-signin-tor-exitSign-in from a Tor exit relayT1090.003
tell-sso-trust-changedSingle sign-on configuration changedT1484.002
tell-till-credential-in-codeTillDev credential found in codeT1552.001
tell-token-refused-burstCredential refused repeatedlyT1550.001

Open any rule on the rules page or with tilldev shield tell rules show to read its YAML, its fixtures and its record in your workspace. The tell-host- rules read events from the endpoint agent; the tell-insider- and tell-service- rules watch your own members and credentials, and Insider risk ranks who set them off.

Rules of your own

A workspace can add up to 100 rules of its own, in the same format, held to the same tests, and run on the same stream. Write one from scratch, or copy a library rule and tune it, then try it on your recent events before it runs. See Writing TillTell rules.

03Lifecycle

Stages: a rule earns its way

Every rule is at one of four stages in your workspace. New library rules and new workspace rules start in shadow.

StageWhat the rule may do
draftNothing is recorded. Leaving draft needs the rule’s fixtures to pass.
shadowFindings are recorded on the TillTell page and never alert. Watch it here first.
advisoryFindings are recorded, alert, and open or join an incident; the rule suggests nothing.
liveFindings alert, open or join an incident, and carry the rule’s suggested playbook.

Owners and admins move rules up. The system only ever moves a rule down, and only for one reason: too many false positives. When 20% or more of the last 20 triaged findings were judged false positive or benign (once at least 10 have been triaged), the rule falls back to shadow and the move is written to the workspace audit log with the numbers behind it.

Unattended playbooks

A live rule may run its playbook without a person once it has earned it: 30 or more triaged findings, 5% or fewer false positives, and none in the last 10. Even then two humans stand in the way: the workspace switch under Shield → Settings → TillTell must be on, and an owner or admin confirms automation for that rule. A demotion clears the confirmation. Both thresholds can be overridden per workspace and per rule through the API.

04Verdicts

Triage feeds the lifecycle

Every finding takes a verdict from any member of the workspace. Verdicts are appended, never edited, so a rule’s record is a history nobody can tidy up after the fact.

VerdictMeansEffect
true_positiveAn attack or a policy breach.The finding stays open as triaged; counts for the rule.
false_positiveThe rule was wrong.The finding closes; counts against the rule.
benignMatched as written, nothing hostile.The finding closes; counts against the rule as noise.
duplicateAlready covered by another finding.The finding closes; no signal either way.
Drill findings
Findings from a labelled drill cannot be triaged and never enter the arithmetic. They exist to show the rule saw the exercise.
05Coverage

The ATT&CK map, scored honestly

Shield → TillTell → Coverage lays out the MITRE ATT&CK Enterprise and Mobile matrices by tactic and scores every technique against the rules running in your workspace. A rule counts once it is out of draft; a draft runs nowhere, so it covers nothing.

CellWhat it claims
No ruleNo library or workspace rule is tagged with this technique, or every rule that is sits in draft.
Some sub-techniquesThe technique has no rule of its own, but rules cover some of its sub-techniques.
RuleA running rule is tagged with it, or rules cover every sub-technique. The rule exists; nothing yet shows it fires.
Proven by drillA defense drill replayed the rule’s own test through TillTell and the rule fired, within the last 90 days and for the rule version running now. The only strong claim the map makes, dated.

Prove a rule with a defense drill under Shield → TillDrill. Changing the rule takes its proof away until it is drilled again.

What your sources can see

ATT&CK says which kinds of records each technique is detected from. TillTell checks that against the Till products that have written to your security stream in the last 90 days. Techniques none of them can see are faded rather than counted as gaps, and the ones they can see with no running rule are listed as gaps, each naming the Till product whose records would make it visible. Techniques only a host can show, such as process execution and persistence, stay faded until the endpoint agent reports from your hosts: the map never claims what the stream cannot observe.

Incidents no rule saw

A technique also carries the number of real incidents from the last 180 days that were resolved with it and had no TillTell finding in them. That is the rule backlog laid on the map: detection you needed and did not have.

Catalogue
The map is pinned to ATT&CK v19.2 (Enterprise and Mobile). A newer release reaches TillTell only after every library rule’s tags resolve against it. MITRE’s notice is printed beneath the map and on the attributions page.
06CLI and API

From the terminal

bash
# what fired, newest first (open findings by default)
tilldev shield tell findings
tilldev shield tell findings --rule tell-cred-stuffing --stage live --json

# read one, with its record and evidence, then judge it
tilldev shield tell finding <id>
tilldev shield tell verdict <id> fp --note "shared office egress during a password reset"
tilldev shield tell escalate <id>          # open an incident from it, or show the one it is in

# the library and your own rules as your workspace runs them
tilldev shield tell rules ls
tilldev shield tell rules show tell-secret-mass-read
tilldev shield tell rules stage tell-cred-stuffing advisory --reason "two weeks clean in shadow"
tilldev shield tell rules automate tell-cred-stuffing

# rules of your own: check, try on recent events, save
tilldev shield tell rules validate rule.yaml
tilldev shield tell rules backtest rule.yaml --hours 72
tilldev shield tell rules create rule.yaml

# the ATT&CK map, and the techniques you can see but don't cover
tilldev shield tell coverage
tilldev shield tell coverage --domain mobile
tilldev shield tell coverage --gaps

# retention and the unattended-playbook switch
tilldev shield tell settings
tilldev shield tell settings set --retention long --automation

The same operations are on the HTTP API under /api/shield/tell/…, documented in the API reference. Stage changes, automation confirmations, verdicts, settings changes and every change to a workspace rule land in the workspace audit log.