Skip to content
Back to blog

Twelve alerts, one attack: a lab story

In our lab, 12 alerts from 5 rules turned out to be one attack on one Linux machine. How armor360 joined them into a single campaign, and why that matters.

Traditional SOCOne analyst, in arrival orderLooked atPort scan from a printerHarmlessLocal accounts listedSuspiciousBackup copied filesNewArchive made by handNewAdmin logon at 02:10NewScript fetched a fileNewFiles staged in /tmpNewUpdate agent beaconNewNew cron entryNewDNS to new domainNewOutbound to rare hostNewFailed logons, then oneNew+ 6 more waiting10 waitingWith armor360Each one looked into as it landsSorted for your teamProcessNetworkUserIntelPort scan from a printerHarmlessLocal accounts listedSuspiciousBackup copied filesAuthorisedArchive made by handReal attackAdmin logon at 02:10AuthorisedScript fetched a fileSuspiciousFiles staged in /tmpReal attackUpdate agent beaconHarmlessNew cron entrySuspiciousDNS to new domainHarmlessOutbound to rare hostReal attackFailed logons, then oneHarmless+ 7 more, all looked into0 waiting
Illustrated example: the same twelve overnight alerts, read by one analyst, and looked into by armor360. People still decide what to do.

Twelve tickets, one story

When an attacker gets onto a machine, they rarely do one thing. They look around, find out who they are and what the machine can reach, and then start gathering what they came for. Each of those steps can trip a different detection rule, so one intrusion can arrive as a dozen separate alerts. Read one at a time, each may look minor. Read together, they are an attack.

That is the everyday problem campaign joining solves. Alert queues are organised by alert, because that is how detection rules produce them. Attacks are organised by intent, because that is how attackers work. Somebody has to bridge the two, and in most teams that somebody is a tired analyst who happens to remember seeing the same host name an hour earlier.

This post follows a real example from our own lab, not from a customer. Twelve alerts from five rules fired on a single Linux machine. armor360 joined them into one campaign, ran from discovery to collection, and showed it to a person as one picture rather than twelve tickets.

What ran in our lab

Our test lab has a handful of Linux machines watched by Elastic Security. We use MITRE Caldera, an open adversary-simulation tool, to behave like an attacker on them. On a machine called linux04, a Caldera agent ran a series of commands that a real intruder might run after getting in.

One of the first alerts was “Burst of reconnaissance commands”. armor360 investigated it the way an analyst would. It asked 13 questions, read 4 data sources and kept 22 records as evidence. Among them, it found a process called “caldera-agent” calling out over HTTP every five minutes, and regular python3 runs under a back-office user that matched the reconnaissance. Its verdict was Real attack, at 90% confidence, in 5 minutes 35 seconds.

That investigation answered the question “is this alert real?”. The campaign answers a bigger one: “what is this attacker doing on our machine, and how far have they got?”.

A lab is a good place to test this because we know the truth. We know which commands Caldera ran and when, so we can check whether the alerts were joined correctly and whether anything unrelated was pulled in. In production that certainty is rare, which is why we test here first.

The point of this post is not the numbers. It is how a set of scattered alerts becomes one account of what an attacker did, and why that account is so much easier for a person to act on.

The verdict on the first alert from linux04, with the panel a person uses to agree with it or change it.
The verdict on the first alert from linux04, with the panel a person uses to agree with it or change it.

How alerts become one campaign

Joining alerts is the work an experienced analyst does in their head when they notice that the same machine keeps coming up. The clues are the ones you would expect: the same machine, the same accounts, processes started by the same parent, and activity close together in time. When the clues line up, the alerts are treated as one attack rather than a coincidence.

Each alert is then placed on the attacker’s path using MITRE ATT&CK tactics, the public framework that names the stages of an intrusion. On linux04, the twelve alerts ran from discovery, where an attacker learns about the system and its users, to collection, where they gather data of interest. Seeing that the activity had reached collection matters: it says the attacker had moved past looking around and had started gathering what they came for.

The joining does not depend on any one rule being perfect. Five different rules fired, written for different behaviours. None of them was written to describe “an attack on linux04”, yet together they did.

Joining also has to avoid the opposite mistake: pulling unrelated alerts into the same story because they share a busy machine. A server that runs many jobs will raise alerts for many reasons. That is why the clues are weighed together rather than one at a time, and why a person can still look at each alert in the campaign and see why it is there.

Time matters as well. Activity on the same machine spread over weeks may be two separate events. Activity within the same few hours, by the same account, through the same chain of processes, almost never is. In our lab the twelve alerts sat close together on one machine, tied to the agent’s regular beacon.

What the one picture shows

The campaign page puts the whole attack on one screen. A person reading it does not have to open twelve alerts and assemble the story; it is already assembled, with each alert still there to open if they want the detail.

In our lab the picture told a clear story. The agent arrived, called home on a regular schedule, looked around the machine and its users, and moved on to gathering data. A person could see in one read that this was not an administrator having a busy afternoon. The regular five-minute beacon, the back-office account running python3 and the progression across ATT&CK stages together make a pattern that no single alert shows.

  • The stages in order, from the first to the latest, mapped to ATT&CK tactics.
  • The machines and accounts the activity touched.
  • How long the activity has been running.
  • Which business processes it puts at risk, from the context given at set-up.
  • One coordinated plan, where each step waits for a person’s approval.
The campaign from our lab: twelve alerts from five rules, one attack on linux04, its stages in order.
The campaign from our lab: twelve alerts from five rules, one attack on linux04, its stages in order.

Why one picture beats twelve tickets

Twelve tickets invite twelve separate decisions, possibly by different people on different shifts. One of them might close a low-severity discovery alert as routine admin work while another is still looking at the collection alert. Nobody is wrong on their own ticket, and the attack is missed between them.

The severity of an attack is also more than the sum of its alerts. A single command that lists users is ordinary. The same command, followed by a scheduled beacon and then data gathering on the same machine, is not. Only the joined view shows that progression.

Finally, the response has to be coordinated. If one person resets an account while the attacker’s agent is still running on the machine, the attacker may simply carry on, or notice and change approach. One plan for the whole campaign, approved step by step, avoids people working against each other.

It also changes the conversation with the rest of the business. “We had twelve alerts on linux04” means little to anyone outside security. “An attacker reached a machine that serves the back office, looked around and had started gathering data; here is the plan, step by step, for your approval” is a sentence a manager can act on.

Where armor360 fits

This was a controlled simulation in our lab with a known attacker, so it shows how campaign joining works rather than how it performs everywhere. Real environments are noisier, which is why a person reviews every campaign and verdict.

armor360 joins alerts that belong to the same attack into one campaign and recommends a plan. It takes no response actions; people approve each step and carry it out.

More from Product

See where your team’s time goes. Then decide.

Start a free pilot on your own alerts, or put in your own numbers first.