Cloud Security

    Nothing Ran. Everything Changed.

    There is a shape of cloud intrusion that produces no process, no binary and no command line. The attacker never runs code on anything you have an agent on. They make a series of authenticated API calls, each one permitted, and at the end of it a role has new permissions, a key exists that nobody created on purpose, and a copy of a disk is sitting in an account that is not yours. The endpoint has nothing to report, and it is right.

    2026-10-2112 min readCloud SecurityCDRAI SOCSpharaka Sphere

    An intrusion that executes nothing

    A cloud environment has two surfaces, and security programmes were built almost entirely for one of them. The data plane is where workloads run: the instances, the containers, the functions, the things an agent can be installed on. The control plane is the API that creates, configures and destroys all of it.

    An attacker who holds a credential with enough rights does not need the data plane at all. Creating an access key, attaching a policy, taking a snapshot of a volume and sharing it with another account are four API calls. None of them runs code anywhere you are watching, and all four are operations a platform engineer performs on an ordinary Tuesday.

    This is the uncomfortable part for anyone whose cloud security posture is an agent on every instance. The agent is working. It is reporting accurately that nothing executed. The intrusion happened in the layer above it, and it was logged, in a place most operations collect and almost nobody investigates.

    The endpoint agent is not failing here. It is correctly reporting that nothing happened on the endpoint, because nothing did.
    Two views of the same hourOne of them has nothing to report, and it is the one most security programmes are built on.
    The same intrusionWhat the endpoint sawWhat the control plane recordedCode executionNone. No process started, no binary was written, no script ran.None either. Every action was an authenticated API call.What changedNothing on any host under management.A role, a policy, a key, a snapshot and who it was shared with.Available evidenceA quiet agent, correctly reporting that nothing happened.One log line per call, with the principal, the service and the parameters.What it takes to see itNothing will help. There is no behaviour on the host to detect.Reading the sequence across services, because no single call is wrong.

    The logs are a different shape, and the detection has to be too

    Endpoint telemetry describes behaviour. A process started, it had a parent, it was launched with these arguments, it opened that file. The whole discipline of endpoint detection rests on those relationships, because the relationships are what make a lone event meaningful.

    Control plane audit logs describe intent. One line per API call: who the principal was, which service, which action, with what parameters, from what address, and whether it succeeded. There is no parent, no tree and no session beyond the credential that signed the request. A detection engineer coming from the endpoint world finds the fields they rely on simply absent.

    What replaces them is the principal and the order. The unit of analysis is not a process but an identity, and the evidence is not a single call but a sequence of them across services that are not otherwise related. Every rule written against a single cloud event is therefore either noisy or narrow, and usually both.

    • No process tree, so no parent to ask about.
    • No command line, so nothing to pattern match on.
    • No file hash, so no reputation lookup to lean on.
    • No session, only a credential, which may have been issued months ago.
    • No ordering, because each call is logged alone and the attack is the order they arrived in.
    What a control plane event gives you, and what it withholdsIt is a record of intent, not of behaviour, and the detection has to be built for that.
    HasThe principal, the service, the action, the parameters and the source address
    HasAn exact timestamp and whether the call succeeded or was denied
    LacksA process tree, a parent, a command line or a file hash
    LacksAny notion of a session beyond the credential that signed the request
    LacksSequence. Each call is logged alone, and the attack is the order they came in

    Blast radius is a permissions graph, not a network diagram

    In a data centre, what an intruder can reach is a routing question, and it is answered by firewalls and segments. Those are physical facts that a network engineer can draw. In a cloud environment reach is an identity question, and the answer is held in policy documents that nobody draws.

    Role chaining, trust policies, workload identity, resource-level policies and federation from an external directory all grant reach that has no network component. Two accounts with no route between them can be one API call apart, because the connection was never meant to be a route. It was meant to be a permission, and permissions are what the environment runs on.

    This is why a cloud incident so often turns out to be larger than it first looked. The first answer to what the attacker could reach is drawn from the network, and it is the wrong graph. The right graph is the one nobody has assembled, which is the set of principals this credential can become and what each of those can do.

    Reach is a permissions question, not a routing oneTwo accounts with no network path between them can still reach each other, by design.
    Role chainingOne role assumes another, which assumes a third
    Trust policiesWhat a role will accept an assumption request from
    Workload identityCredentials a machine holds because it is that machine
    Resource policiesAccess granted on the object rather than to the principal
    FederationAn external directory vouching for a principal that was never yours

    Five calls, and none of them is wrong

    The sequence is worth reading as a defender, because the thing to notice is that there is no moment in it where a rule should fire on its own.

    Enumerating your own permissions is something every automation framework does at startup. Assuming a second role is the mechanism roles exist for. Creating an access key is a self-service operation. Snapshotting a volume is a backup. Sharing a snapshot with another account is how a legitimate cross-account workflow moves data.

    The attack is the conjunction. One principal, in one short window, performing all five, in that order, when it has never performed any of them before. That statement can be detected. None of the five statements underneath it can.

    One control plane sequence, as it is loggedFive successful calls, each one ordinary, in an order no administrator would produce.
    Call 1EnumerateThe principal reads its own permissions and the roles it can assume. A read, and permitted.
    Call 2AssumeA second role is taken on, which is exactly what role chaining is for.
    Call 3PersistA long-lived access key is created for a principal nobody is watching.
    Call 4CopyA volume snapshot is taken. The data never moves and nothing is exfiltrated yet.
    Call 5ShareThe snapshot is shared with an account outside the organisation, which is a one-line policy change.

    Illustrative. The shape is composed from techniques named in MITRE ATT&CK for Cloud, not from a single incident.

    There is no travel time in the control plane

    On a network an attacker moves. Each hop to a new host takes an action, leaves a trace and costs time, which is the assumption underneath every metric the industry quotes about intrusion speed. Average breakout time for a criminal intrusion is 29 minutes, down from 98 minutes in 2021, and that number describes a world where getting somewhere else is work.

    A permission change has no equivalent. A policy attached in one call does not propagate and does not need to arrive anywhere. It is simply true at the next call, everywhere, at once. The gap between an attacker having limited rights and having broad ones is not a journey, it is an edit.

    The practical consequence is that the window for a cloud investigation is set by how fast the attacker can type, not by how far they have to go. An investigation queue measured in hours is not slightly behind in this environment. It is answering a question about a configuration that no longer exists.

    The provider's own alerts are a floor

    Every major platform ships a detection service, and they are worth switching on. They are good at the things a single event can carry: a call from an address with a known-bad reputation, a disabled logging configuration, credentials used from an unusual location.

    What none of them is positioned to do is reason across an estate that spans more than one platform, more than one account and more than one identity provider, which is the shape of almost every real environment. The organisation's identity provider is not the platform's. Half the workloads are somewhere else. The on-premises estate the attacker came from is not in the picture at all.

    Treating native detections as the floor and building the correlation above them is the only arrangement that survives a multi-platform estate. It is also the arrangement that lets an investigation follow a principal from a phished session, into the control plane and out to the data, which is the path the incident actually took.

    The investigation spans four places, and it is the same cost

    Answering a cloud alert honestly requires the control plane audit record, the identity provider that issued the credential, the workload the credential belongs to, and the data layer where the object actually lives. Each holds a quarter of the answer and none of them holds enough to close the ticket.

    Performed by hand this is the familiar work: five to twelve consoles, 60 to 90 minutes, and a queue that decides which alerts get this treatment and which get a glance. In an environment with no travel time, that triage is not a prioritisation decision. It is a coverage decision, made by the clock rather than by anybody.

    Run by agents, the same collection and correlation completes in 60 to 120 seconds and runs on every qualified alert rather than on the ones a shift reached. The analyst receives a timeline that already crosses the four domains, and spends their judgement on whether to revoke, which is the part that was always worth a person.

    The same four domains, and the same intervalA cloud alert is answered in the places the cloud keeps its evidence, and there are four of them.
    4 domainsControl plane, identity, workload and data layer, in one timeline
    60 to 90 minThe same investigation performed by hand, across five to twelve consoles
    60 to 120 secThe same investigation run by agents, on every qualified alert

    Intervals as published elsewhere on this site for manual and autonomous investigation.

    Containment is a different set of actions

    The instinct to isolate the host is useless here, because the attacker is not on a host. The actions that end a control plane intrusion are policy actions, and they have the same awkward property that identity containment has: each one leaves something behind that the next must clean up.

    Revoking a credential does not end sessions already issued from it. Detaching a policy does not undo a role the attacker can still assume by another path. Deleting a key does not remove the user it belonged to. And a snapshot that was shared out is already a copy somebody else controls, so removing the share stops the next read without retrieving the first one.

    That last point is worth sitting with, because it changes what speed is for. In this category, containment after the fact frequently cannot restore the position. The value of a minute-scale investigation is that it closes the gap before the copy is made, not that it cleans up faster afterwards.

    What actually ends a control plane intrusionStopping the workload does nothing. The attacker is not in the workload.
    01Revoke the credentialSessions issued before the revocation keep working until they expire, so the key and the session are two jobs.
    02Break the chainDetach the policy and amend the trust relationship that let one role become another.
    03Undo what was createdKeys, users, snapshots, shares and resource policies added during the window.
    04Check the copiesA snapshot shared out is already a copy. Removing the share does not retrieve it.

    What to ask of a cloud detection capability

    The questions that separate a capability from a dashboard are specific and are mostly about whether the evidence joins up.

    Most products will answer the first two well. The ones that matter are the last three, because they are the difference between watching a cloud estate and being able to investigate one.

    • Does it ingest control plane audit logs from every platform in use, not just the largest one?
    • Can it follow one principal across accounts, across platforms and back to the identity provider that issued the credential?
    • Does it reason over the sequence of calls, or alert on them individually?
    • Can it answer what this credential could reach, from the permissions graph rather than the network?
    • Does the response reach policies, keys, roles and resource shares, or does it stop at stopping an instance?

    The honest version

    Cloud security has spent a decade being described as a posture problem, and posture management is genuinely useful: finding the public bucket and the over-permissive role before anybody walks through them is cheaper than detecting it afterwards.

    But posture is about the shape of the environment at rest, and an intrusion is a thing that happens in it. A configuration that was correct this morning is not a defence against a principal that changed it this afternoon, and the change was a permitted API call made with a valid credential.

    What that leaves is detection, in a layer with no process trees, across an estate with no single platform, against a sequence where every individual step is legitimate. It is not a rule-writing problem, and it was never going to be solved by another agent on another instance.

    Questions

    Frequently asked questions

    What is cloud detection and response?

    The detection and investigation of intrusions in cloud environments, where much of the attack happens in the control plane rather than on a workload. Because the actions are authenticated API calls rather than executed code, there is no process, command line or file hash to match, so detection rests on the principal performing them and the sequence they arrive in.

    Why does endpoint detection not cover cloud intrusions?

    Because a control plane intrusion executes nothing on any host. Creating an access key, assuming a role, attaching a policy, snapshotting a volume and sharing it with another account are all API calls. An agent on every instance is working correctly when it reports that nothing happened, because nothing happened in the layer it watches.

    How do cloud audit logs differ from endpoint telemetry?

    Endpoint telemetry describes behaviour, with a process tree, a parent, a command line and file activity. Control plane logs describe intent: one line per API call carrying the principal, the service, the action, the parameters and whether it succeeded. There is no tree, no command line and no session beyond the credential, so a rule written against a single event is either noisy or narrow.

    Why is blast radius harder to establish in cloud?

    Because reach is granted by policy rather than by routing. Role chaining, trust policies, workload identity, resource-level policies and federation all create reach with no network component, so two accounts with no route between them can be one API call apart. The network diagram is the wrong graph, and the right one is rarely assembled in advance.

    Are the cloud provider's native detections enough?

    They are a floor worth switching on, and they are good at what a single event can carry. They are not positioned to reason across more than one platform, more than one account and an identity provider that is not theirs, which is the shape of most real estates. The correlation above them is what lets an investigation follow a principal from a phished session into the control plane and out to the data.

    What does containment look like for a control plane intrusion?

    Policy actions rather than host actions, and each leaves something for the next. Revoking a credential does not end sessions already issued from it, detaching a policy does not close another path to the same role, and a snapshot shared outside the organisation is already a copy that removing the share does not retrieve. That last point is why the value of a minute-scale investigation is closing the gap before the copy, not cleaning up faster after it.

    Next step

    See it running on your environment

    A walkthrough on your own estate, with your own detections, rather than a canned demo.

    See Spharaka Sphere