Technische deep-dive · 2026-05-25

Process DNA: hoe een SHA256-hash van /proc/<pid>/exe een aanvaller verrast

Klassieke EDR kijkt naar gedrag. Process DNA kijkt naar wat een proces is — een hash van de binary op disk. Hoe het werkt, wat het detecteert en wat niet.

Een klassieke intrusion-detectie-regel kijkt naar gedrag: ongewone network-calls, afwijkende CPU-pieken, verdachte cron-entries. Dat werkt — tot een aanvaller een binary vervangt die al draait. De service heet nog steeds nginx. De PID is dezelfde. Het alert vuurt niet.

Process DNA fingerprinting pakt het probleem anders aan: niet wat een process doet, maar wat het is.

Hoe de agent de hash berekent

Bij elke inventory-cyclus (standaard elke 60 seconden) itereert de monsys-agent over alle processen in /proc:

for pid in /proc/[0-9]*/exe; do
    sha256sum $(readlink -f "$pid") 2>/dev/null
done

In de Rust-implementatie gaat dat via std::fs::read_link + sha2::Sha256. De hash wordt berekend over de werkelijke binary op disk — niet over het geheugen van het draaiende proces, want dat zou een aanvaller te makkelijk kunnen manipuleren.

Het resultaat per top-process (alles met RSS > configureerbare drempel, standaard 50 MB):

{
  "pid": 1842,
  "name": "nginx",
  "exe_path": "/usr/sbin/nginx",
  "exe_sha256": "a3f2c1...",
  "observed_at": "2026-05-25T09:14:02Z"
}

TOFU: Trust on First Use

Bij de eerste keer dat de agent een binary ziet, slaat de hub de hash op als baseline. Dat is het TOFU-model (Trust on First Use): we vertrouwen wat er al draait op het moment van installatie, en alarmeren bij afwijking daarna.

Voordeel: geen whitelist onderhouden. Nadeel: als de agent geïnstalleerd wordt nadat een aanvaller al een binary heeft vervangen, zit de kwaadaardige hash in de baseline. Dat is een bewust geaccepteerde trade-off — deploy de agent vroeg, idealiter in je provisioning-pipeline.

Het false-positive probleem: auto-updates

Stel: nginx wordt geüpgraded via apt upgrade. De binary op disk verandert. De hash matcht niet meer met de baseline. Zonder extra logica: Critical alert op elke packagemanager-update.

monsys lost dit op via de manifest-aware rebaseline. De hub houdt een release-manifest bij per package/binary. Wanneer een nieuwe hash binnenkomt:

  1. Hub checkt of de hash voorkomt in het manifest voor de huidige packageversie van die agent.
  2. Zo ja: automatische rebaseline, geen alert.
  3. Zo nee: Critical alert — binary veranderde zonder bekende package-update.

Het manifest wordt gevuld vanuit twee bronnen:

# package-inventory event triggert manifest-lookup
apt_package: nginx 1.25.4-1
→ hub: fetch known_hashes for nginx@1.25.4-1 from manifest_store
→ match found: rebaseline silently

Wat Process DNA detecteert dat EDR niet ziet

Standaard EDR-tools draaien als user-space daemon of kernel-module op de host. Ze zien process-events via netlink of eBPF. Maar in een hypervisor-geïsoleerde VM — zoals Claude Cowork of elke cloud-sandbox — zijn die tools blind voor wat er binnen de VM-boundary gebeurt.

De monsys-agent draait binnen de VM. De hash-berekening gebeurt lokaal op de host. Alleen het geaggregeerde signaal (hash + metadata) gaat upstream naar de hub — geen raw binary content, geen loglijnen.

Aanvalsscenario's die Process DNA detecteert:

Supply-chain compromise — Een npm-package wordt gepubliceerd met een kwaadaardige postinstall die een system-binary overschrijft. De binary-naam is hetzelfde, maar de SHA256 is nieuw en staat niet in het manifest. Alert binnen de volgende inventory-cyclus (max 60 seconden).

Living-off-the-land — Een aanvaller vervangt /usr/bin/curl door een gepatchte versie die credentials exfiltreert maar verder normaal werkt. Process DNA traps het op het moment dat de nieuwe binary voor het eerst als top-process verschijnt.

Fileless met disk-component — Pure in-memory attacks zijn niet zichtbaar voor Process DNA (daarvoor zijn honeypots de aanvullende laag). Maar zodra een payload iets op disk schrijft en uitvoert, staat het geregistreerd.

De laterale-bewegings-correlatie

Process DNA-events worden gecombineerd met de rest van de SMART-correlatie-pipeline. Het meest relevante voorbeeld: een verdachte binary-wijziging op server A, gevolgd door een succesvolle SSH-login van server A naar server B binnen 5 minuten.

De LateralMovementWorker (cadence: 60s) JOINt:

SELECT
    pd.agent_id      AS source_agent,
    pd.exe_path,
    pd.exe_sha256,
    ae.target_agent_id,
    ae.auth_user,
    ae.observed_at   AS ssh_at
FROM process_dna_alerts pd
JOIN auth_events ae
    ON ae.src_ip = (SELECT ip FROM agents WHERE id = pd.agent_id)
    AND ae.observed_at BETWEEN pd.observed_at - INTERVAL '5 min'
                            AND pd.observed_at + INTERVAL '5 min'
    AND ae.success = true
WHERE pd.baseline_match = false
  AND pd.tenant_id = $1

Resultaat: één detection-event met MITRE-tags T1078 (Valid Accounts) + T1036 (Masquerading), met een directe link tussen de binary-swap en de laterale beweging.

Operationeel: wat je in het dashboard ziet

Wanneer Process DNA een afwijking detecteert, verschijnt een Critical alert met:

Via de AI Explain-knop (lokale llama3.1:8b) krijg je een leesbare samenvatting:

"Binary /usr/sbin/sshd heeft een onbekende SHA256. Geen overeenkomende package-update gevonden in de inventory. Dit kan wijzen op een gecompromitteerde OpenSSH-installatie. Aanbevolen actie: vergelijk de hash via sha256sum /usr/sbin/sshd op de server, check de package-provenance via dpkg -V openssh-server, en overweeg IsolateNetwork via Emergency Actions."

Beperkingen — eerlijk benoemen

Process DNA werkt niet op:

Voor de eerste twee categorieën zijn honeypot canaries de aanvullende detectielaag: een aanvaller die in-memory een canary-pad leest, triggert alsnog een alert.

Samengevat

Traditionele EDR (extern)Process DNA (monsys)
Zichtbaarheid in VM-sandbox✗ (hypervisor-boundary)✓ (draait binnen VM)
Binary-swap detectieGedragsgebaseerd (traag)Hash-vergelijking (< 60s)
False-positives op updatesn.v.t.Onderdrukt via manifest
Correlatie met laterale bewegingSiloGeïntegreerd (LateralMovementWorker)
OverheadKernel-module / agent~5 MB Rust binary, < 1% CPU

Process DNA is geen vervanging van een full EDR-stack voor organisaties met een dedicated SOC. Het is een laag die werkt waar EDR blind is — binnen de VM-boundary — en die correleert met de rest van de pijplijn zonder dat je een apart platform nodig hebt.


Wil je het zelf testen? Installeer de agent op een server, wacht op de eerste inventory-cyclus, en vervang daarna een binary handmatig. De alert verschijnt binnen 60 seconden. Eerste vijf servers zijn gratis: monsys.ai/nl/signup.

Terug naar blog