Skip to content
Back to the learning center

How to investigate a security alert, question by question

The questions an analyst works through to decide whether an alert is a real attack, and how to keep the evidence so others can check the verdict.

Archive made by hand on linux04CriticalWhat made the archive?tar, started from a web user’s shellIs that normal for this machine?No: backups here run as another accountWhat happened just before?Files gathered into /tmp minutes earlierWhere did it connect next?Outbound to a host never seen beforeWhat does threat intel say?No reputation yet: first seen todayWhat it foundProcessContextFilesNetworkIntelVerdictReal attackConfidenceHigh, backed by 5 cited recordsRecommends: check linux04 and the web account. Your team decides.
Illustrated example, after our lab investigation. armor360 recommends; your team decides what to do.

Start with what raised it

Every investigation starts with the same question: why did this alert fire? An alert is a rule’s opinion that something matched a pattern. Before you can judge whether the pattern means harm, you need to know what the rule was looking for, which event matched, and how often that rule fires on an ordinary day.

Open the rule itself, not only the alert title. A title such as “Suspicious PowerShell” can cover a dozen different behaviours. The rule’s query tells you exactly what was seen: a command line, a file write, a network connection, a sign-in from a new place. Note the time of the triggering event as precisely as you can, because every later question is asked around that moment.

It also helps to know the rule’s history. A rule that fires many times a week on the same administrator’s scripts deserves a different first glance from one that has never fired before. History does not decide the case, but it tells you where to start looking.

Identify the machine and the person

Next, work out what the alert happened to. Which machine raised it, what operating system it runs, where it sits on the network and who looks after it. Then work out who was involved: the account that ran the process or signed in, whether it belongs to a person or a service, and what that account normally does.

This is where many alerts settle quickly. A backup job running as a service account at two in the morning looks alarming on its own and ordinary once you know the account’s purpose. A developer’s account opening a shell on a payroll server is the reverse: ordinary on its own, worth a closer look in context.

  • Host name, address and operating system
  • The owner or team responsible for the machine
  • The account involved, and whether it is a person or a service
  • What that account usually does, and when
  • Recent changes: new software, new access, a new owner

Look at what happened nearby

An alert is one event. The story is in the events around it. Search the minutes before and after the triggering event, on the same machine and for the same account. Which processes started? Which files were written? Which other machines did it talk to? Did the same account log on anywhere else?

Process ancestry is often the most telling part. Every process has a parent, and the chain of parents shows how the activity began. A command shell started by a web server, a script launched by an office document, or a tool run from a temporary folder by an unexpected parent are all signs that something reached the machine from outside. A command started by a known management agent, under its usual account, usually is not.

Look for other alerts on the same machine or account over the past few days too. A single odd event can be noise. Several odd events on one machine, each from a different rule, are much harder to explain away.

Check what is already known to be bad

Most alerts carry indicators: IP addresses, domain names, file hashes, web addresses. Look each one up in the threat intelligence you have, whether that is a shared feed, a sandbox report or an internal list of addresses you have seen before. A match on a known malicious address is strong evidence. A clean result is weaker evidence than it seems, because new attacker infrastructure has no history yet.

Treat reputation as one input among several. A known-bad file hash on a machine settles a lot. An unknown domain contacted on a regular schedule, with no business reason, can matter just as much even though no feed has flagged it.

Ask what the machine is for

The same activity means different things on different machines. A network scan from the security team’s test server is expected. The same scan from a till in a shop is not. Before you settle on a verdict, find out what the machine does for the business, which processes depend on it and how much harm a compromise would cause.

This context changes both the verdict and its urgency. A suspicious finding on a machine that runs end-of-day settlement needs a person to look at it now. The same finding on a lab machine due to be rebuilt can wait until morning. Writing this context down once, for every important system, saves each analyst from rediscovering it in the middle of the night.

Keep the evidence and write a verdict others can check

An investigation is only as good as its record. Keep each search you ran and what it returned, each lookup you made and the answer you got. When you write the verdict, point to the specific records that support it. Someone reading it later should be able to follow your reasoning without repeating your work.

A good verdict makes a clear call: real attack, suspicious, harmless, or not enough evidence to say. “Inconclusive” is an honest answer when the data is missing, as long as you say which data would settle it.

Write for the person who has to act on it, not only for other analysts. A manager deciding whether to take a server offline needs the risk in business terms, not a list of process identifiers.

  • The call, in plain words
  • How sure you are, and why
  • The records that support it, cited
  • Recommended next steps, and who should be told

A worked example from our lab

In our lab, MITRE Caldera, an adversary simulation tool, runs against a few Linux machines watched by Elastic Security. One of its agents ran a burst of reconnaissance commands on a machine called linux04, and Elastic raised an alert titled “Burst of reconnaissance commands”.

armor360 worked the alert through the questions above. It asked thirteen questions, read four data sources and kept twenty-two records as evidence. Looking at what ran nearby, it found a process named caldera-agent calling out over HTTP every five minutes, and tied the reconnaissance commands to it. The verdict was real attack, at 90% confidence, reached in 5 minutes 35 seconds. A person then reviewed it and decided what to do.

The point is not the speed. It is that every step was written down, so the person reviewing the verdict could check each claim against the record it came from.

How the agent reached its verdictFrom our lab
AlertMachineData sourcesQuestionsVerdictBurst of reconlinux04Asset infoHost alertsSearch eventsCheck indicatorsbackoffice, pscat, grepcaldera-agentpython3+ 9 moreReal attack, 90%
Our lab investigation of a hidden adversary-simulation agent: 4 data sources, 13 questions, 22 records kept, and a verdict of real attack at 90% confidence. The red path is what backs the verdict.

Questions people ask

How long should an alert investigation take?

It depends on the alert and the data you have. Many alerts can be settled in minutes once you know the machine, the account and the rule’s history. Others take hours because the evidence is spread across several systems or the data is incomplete.

A better question is whether the time goes on the right alerts. If most of an analyst’s day is spent on alerts that turn out to be harmless, the fix is usually better context and tuned rules, not faster typing. Recording how long each verdict takes shows you where the time goes.

What should I do if the data I need is missing?

Say so in the verdict. An honest “inconclusive, because endpoint logs from this machine were not arriving” is more useful than a guess. It tells the reader how much weight to put on the call, and it points to a gap that should be fixed.

Then find out why the data is missing. A machine that has gone quiet is worth a look in its own right, both as a gap in coverage and, now and then, as a sign that someone has tampered with its logging.

Is a clean threat intelligence result proof that an alert is harmless?

No. A clean result means that no source you checked has flagged that address, domain or file yet. Attackers often use new infrastructure precisely because it has no history.

Treat a match as strong evidence and a clean result as weak evidence. Look at behaviour as well: regular, automated connections to an address with no business purpose deserve attention whatever its reputation, and the pattern of activity on the machine often says more than any single lookup.

Who should review a verdict?

Ideally someone other than the person or system that wrote it, at least for verdicts that lead to action or close a case as harmless. A second reader catches assumptions the first one missed.

Over time, record where the reviewer agreed and where they changed the call. That record shows which kinds of alert are being judged well, and which need better rules, better context about the business or more training for the people reading them.

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

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