Onam

Attack Path Analysis

Attack Path Analysis connects individual security findings — misconfigurations, identity risks, network exposures, and vulnerabilities — into chains that reveal exactly how an attacker would move from an exposed entry point to your most critical assets. Rather than presenting a long list of disconnected findings, Onam builds a graph of your estate and searches it for the routes that actually reach something worth protecting.

This page explains how the graph is built and verified, how paths are found and ranked, how MITRE techniques are attached per hop, and how choke points tell you the one fix that severs the most paths.

The Attack Path view in the Onam console (demo account)
The Attack Path view in the Onam console (demo account)

How the graph is built

After every scan, the Attack Path engine rebuilds a graph database of your estate from the scan's results:

Nodes are every resource in the asset inventory — EC2 instances, S3 buckets, IAM roles, Lambda functions, RDS databases, Kubernetes pods, secrets, and the rest — carrying their properties, findings, and classification.

Edges are relationships that represent possible attacker movement. They are produced by catalog-driven edge derivers, each specialized in one kind of evidence:

  • IAM policy derivation — role assumption, PassRole, resource-policy access
  • Network exposure — internet-facing endpoints, load balancer chains
  • Security group rule matching — which sources can actually reach which ports
  • KMS and encryption relationships — who can decrypt what
  • CDR behavioral edges — movement actually observed in audit logs
  • Public-exposure classification — is-public on buckets, snapshots, images

The resulting edge types read like attacker verbs: CAN_ASSUME, CAN_REACH, CAN_READ_SECRET, CAN_READ_OBJECT, CAN_DECRYPT, CAN_INVOKE.

Edge verification

A candidate edge is not enough — a security group may permit traffic that IAM forbids, or a policy may grant access a network path never reaches. Every edge is marked CONFIRMED, BLOCKED or GAP from the evidence behind it. Only confirmed edges are walked, which is why the engine produces paths that can actually be taken instead of every theoretical route.

Path traversal

The engine runs BFS traversal from entry points toward crown jewels:

  • Entry points — the internet, admin and other identities, CI/CD, third parties, and other clouds, each with its own starting likelihood. Classification is catalog-driven, so new exposure patterns are added without code changes.
  • Crown jewels — data stores such as S3 buckets, RDS and DynamoDB, encryption keys, and other targets the catalog marks as high value. Stores that Data Security finds sensitive are flagged as crown jewels too.

Likelihood decays with every hop. Each path is then scored:

  • Likelihood × impact — the path's likelihood times the value of the crown jewel it reaches gives a 0–100 score and a severity
  • Controls — a WAF or MFA on the route lowers the score
  • Exploitability — a hop with a high-EPSS vulnerability raises it

Crown jewels also feed the Risk Quantification engine: a finding on a crown jewel gets a higher asset multiplier in its loss estimate.

Per-hop MITRE ATT&CK chains

Every hop in a path is tagged with the MITRE ATT&CK technique an attacker would use to take it, and the engine tracks capability accumulation along the path — what the attacker holds (credentials, network position, data access) after each hop. The result reads like a red-team narrative: entry, escalation, lateral movement, objective.

Graph elementMITRE technique
Public S3 bucket to IAM credential exposureT1552.005 — Cloud Instance Metadata API
IAM role to lateral movementT1078.004 — Valid Accounts: Cloud Accounts
EC2 to RDS network pathT1021 — Remote Services
Secrets Manager accessT1555 — Credentials from Password Stores
An identity escalation chain — one class of edges the graph traverses
An identity escalation chain — one class of edges the graph traverses

Choke points

Choke points are the resources that many attack paths share. Fixing one choke point blocks every path that runs through it. For each choke point, the engine records how many paths would be blocked if it were fixed, and every hop on a path carries its own remediation step. Findings on choke points also get a higher loss estimate in Risk Quantification. See Choke Points for the console view.

Remediate choke points before individual paths. One choke-point fix can close many paths at once — it is the highest-leverage action the platform can recommend.

Integration with other engines

EngineContribution to the graph
CSPMEntry-point misconfigurations, node-level findings
CIEMIdentity edges — assumption chains, permission graphs
Network SecurityReachability edges from effective exposure analysis
VulnerabilityCVE nodes enriched with EPSS and KEV
CDRBehavioral edges — movement actually observed in logs
Data SecurityCrown-jewel classification from data discovery
Risk QuantificationReads attack-path signals to raise the loss estimate of findings on paths

FAQ

When is the graph built? Automatically after every scan. The graph is rebuilt in full each time, so a route you have fixed is simply absent from the next result.

Do I need to tag crown jewels? No. Crown jewels come from the catalog of high-value targets and from data-security classification, so paths are found without any tagging.

Next steps