Pivot points
في هذه الصفحة
Give Signal the incident's indicators - a file, a hash, an address, an account - and it tells you whether this host holds any of them, and where.
A pivot point
"pivots": [
{"type": "file", "value": "C:\\Users\\Public\\svc.exe", "context": "the implant on WS-CHARLIE"},
{"type": "hash", "value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},
{"type": "address", "value": "203.0.113.9", "context": "the staging server"},
{"type": "domain", "value": "secure-docs-login.top", "context": "the phishing mail"},
{"type": "account", "value": "CORP\\svc_backup", "context": "used from the staging server"},
{"type": "registry_key", "value": "HKLM\\SOFTWARE\\Evil", "context": "the implant's configuration"}
]
The context - where the pivot point came from - is optional, but every hit carries it, so give it.
How the search works
Scope reads nothing of its own. It is handed every record the other modules read - shadow copies included - and matches each pivot against what the record names, normalised the way Signal names entities: a path's case, quotes and %SystemRoot%; an account by SID or name; an address in its canonical form.
Then it checks directly what no record may name: a full file path on disk, and a registry key.
Pivot types
Type | Matched against |
|---|---|
| A name: every program and file a record names, in any folder. A full path: the whole path, also checked on disk. |
| Only the disk now: a full path, no wildcard. An IoC sweep of the current state - a file that was there and is gone is not found. |
| The hashes Signal computes: running processes' executables, the programs of auto-starts, services and tasks, programs with connections, downloads still on disk; and Sysmon's process creations. |
| A SID, or |
| Every address a record names. |
| Every host name a record names, and its subdomains. |
| Part of the URLs of downloads, visits, BITS jobs, extension updates, web requests. |
| A service's key name. |
| A task's path, or its name in any folder. |
| Part of a command line, an auto-start command or a PowerShell script (4 characters at least). |
| The auto-start entries' keys (the key or below); also checked directly, except |
| The remote access tools' own IDs, this host's and its peers'. |
| A browser extension's ID. |
The result
Each pivot found is one SCOPE-PIVOT-HIT signal (critical): its occurrences are every record and direct check that holds it. The Scope module's pivots table has one row per pivot: found or "no - not in what this run read", where, what its direct check found, and which kinds of record were searched.
Try it yourself
-
Make a pivot of your own
Write a profile with one pivot:
{"type": "file", "value": "notepad.exe", "context": "lab"}. -
Open Notepad
Leave it running.
-
Run with the profile
signal live -all -profile lab.json -o .\ -
Read the hit
Find SCOPE-PIVOT-HIT: which records held
notepad.exe? The running process, Prefetch, perhaps a process creation if auditing is on.
Next
Baselines and suppressions: tell Signal what your organisation runs on purpose.