<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Elastic Security Labs - Articles by Dhrumil Patel</title>
        <link>https://www.elastic.co/security-labs</link>
        <description>Trusted security news &amp; research from the team at Elastic.</description>
        <lastBuildDate>Tue, 21 Jul 2026 08:52:42 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Elastic Security Labs - Articles by Dhrumil Patel</title>
            <url>https://www.elastic.co/security-labs/assets/security-labs-thumbnail.png</url>
            <link>https://www.elastic.co/security-labs</link>
        </image>
        <copyright>© 2026. elasticsearch B.V. All Rights Reserved</copyright>
        <item>
            <title><![CDATA[One agent, the right skills: Elastic Security 9.4 brings domain expertise on demand to every SOC workflow]]></title>
            <link>https://www.elastic.co/security-labs/skills-elastic-security-9-4</link>
            <guid>skills-elastic-security-9-4</guid>
            <pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Elastic Security 9.4 introduces skills, modular AI capabilities that teach the Elastic AI Agent how to detect, investigate, and hunt like a specialist. This is how they work, and why they matter for the SOC.]]></description>
            <content:encoded><![CDATA[<p>Three things land on you at once: Attack Discovery correlated 12 alerts into a credential-harvesting campaign overnight, your team just onboarded a new fleet of macOS endpoints and needs detection rules for LOLBin abuse, and a risk score spike on a service account just crossed the critical threshold.</p>
<p>In most security operations centers (SOCs), that's three different people, three different workflows, and a morning spent context-switching. In Elastic Security 9.4, it's one conversation.</p>
<p>You open the Elastic AI Agent and start working. The agent doesn't try to handle everything with one giant prompt. Instead, it activates the right <strong>skill</strong> for each task, loading specialized instructions, selected tools, and domain context only when needed. Detection Rule Edit writes your Elasticsearch Query Language (ES|QL) rule. Alert Analysis triages the campaign. Threat Hunting chases the service account. Each skill focuses on one job. Together, they cover the full pipeline.</p>
<p>In this article, we'll walk through the architecture, what each skill does, and how they work together in real scenarios.</p>
<h2>The problem: AI assistants that know a little about everything</h2>
<p>Most AI assistants are monolithic. One system prompt tries to cover detection, investigation, response, entity analysis, and threat hunting all at once. This creates two problems that compound as capabilities grow.</p>
<p><strong>Context window dilution.</strong> Every instruction, every tool description, every example takes up tokens. When the prompt tries to cover every SOC workflow, the model has less room for the actual data it needs to reason about: your alerts, your entities, your logs. As you add more capabilities, the quality of each one degrades.</p>
<p><strong>Jack-of-all-trades performance.</strong> A prompt that covers everything handles nothing with depth. Ask it to write a detection rule, and it produces something generic. Ask it to investigate an entity, and it misses the nuance of the risk score composition. The model knows a little about many things but lacks the specialized knowledge that makes the output useful.</p>
<p>The industry response has been to build separate agents for separate tasks: a detection agent, a hunting agent, a triage agent. But that fragments the experience. Analysts have to know which agent to use, switch between them, and manually pass context from one to another. The AI becomes a tool-switching exercise rather than a productivity gain.</p>
<p>We needed an architecture that scales to dozens of capabilities without diluting any of them, and without forcing analysts to manage multiple agents.</p>
<h2>The solution: Skills</h2>
<p><img src="https://www.elastic.co/security-labs/assets/images/skills-elastic-security-9-4/elastic-security-skills.png" alt="" /></p>
<p><em>Skills</em> are a well-established pattern in AI agent architecture, a way to give a generalist model specialized capabilities on demand. In our implementation, a skill is a package of three things: a system prompt tuned for a specific SOC workflow, a curated set of tools selected for the task, and referenced domain content. The concept isn't new. What's new is applying it to security operations with depth: Each skill encodes the reasoning patterns, query templates, and domain knowledge that experienced analysts use daily.</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/skills-elastic-security-9-4/anatomy-elastic-security-skills.png" alt="" /></p>
<p>The architecture rests on three ideas.</p>
<p><strong>Each skill does one job well.</strong> The Threat Hunting skill knows how to formulate hypotheses, iterate on ES|QL queries, identify anomalies, and document findings. It doesn't know how to edit detection rules. That's not a limitation; it's the point. Because each skill focuses on a single intent, it can include richer instructions, better examples, and more precise tool configurations than a monolithic prompt ever could.</p>
<p><strong>Skills work together.</strong> When Alert Analysis encounters a high-risk entity, it references the <a href="https://www.elastic.co/security-labs/entity-analytics-agent-builder">Entity Analytics skill</a> for deeper profiling. When Threat Hunting finds a suspicious binary, it can hand off to the detection pipeline. Multi-step investigations happen without requiring the analyst to orchestrate each handoff.</p>
<p><strong>Nothing loads until it's needed.</strong> Skills activate on demand, not all at once. The agent's context window stays lean as the total number of capabilities grows. You can add a new skill without degrading any existing one, because each operates in its own focused context.</p>
<p>At a glance, the following image shows a skill in action:</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/skills-elastic-security-9-4/agent-reasoning-steps.png" alt="Agent reasoning steps loading in multiple skills based on the user’s request." /></p>
<h2>Five skills for the security operations pipeline</h2>
<p>Elastic Security 9.4 ships five skills that span the core SOC workflows: detection, triage, hunting, entity analysis, and anomaly investigation.</p>
<table>
<thead>
<tr>
<th>Skill</th>
<th>Domain</th>
<th>What it does</th>
<th>Example prompt</th>
</tr>
</thead>
<tbody>
<tr>
<td>Detection Rule Edit</td>
<td>Detection engineering</td>
<td>Creates and edits detection rules from natural language, maps to MITRE ATT&amp;CK, validates queries</td>
<td>Write a rule to detect DLL sideloading via unsigned DLLs loaded by signed binaries.</td>
</tr>
<tr>
<td>Alert Analysis</td>
<td>Alert triage</td>
<td>Triages alerts, finds related alerts by shared entities, enriches with threat intelligence and risk scores</td>
<td>Analyze alert 82a1f, is this related to the credential-harvesting campaign?</td>
</tr>
<tr>
<td>Threat Hunting</td>
<td>Proactive hunting</td>
<td>Runs hypothesis-driven hunts with iterative querying, embedded query templates for common tactics, techniques, and procedures (TTPs)</td>
<td>Hunt for lateral movement from the compromised host in the last 7 days.</td>
</tr>
<tr>
<td>Entity Analytics</td>
<td>Entity investigation</td>
<td>Profiles entities from the Entity Store: risk scores, behaviors, asset criticality, relationships</td>
<td>Show me the riskiest users this week and what's driving their scores.</td>
</tr>
<tr>
<td>Security ML Jobs</td>
<td>Anomaly investigation</td>
<td>Investigates anomalies from Security ML jobs, correlates with entity context</td>
<td>What anomalies are associated with svc-backup-prod?</td>
</tr>
</tbody>
</table>
<p>Three scenarios show how these skills work in practice.</p>
<h3>Scenario 1: Writing a detection rule for macOS LOLBin abuse</h3>
<p>Your team just onboarded a fleet of macOS endpoints. You have solid detection coverage for Windows living-off-the-land binaries but almost nothing for macOS equivalents. Attackers routinely abuse built-in macOS utilities, like <code>osascript</code>, <code>curl</code>, <code>openssl</code>, and <code>sqlite3</code>, to execute payloads, exfiltrate data, and access credential stores without triggering basic malware detection. You need rules for these, and you need them before the next red team exercise.</p>
<p>You open the Elastic AI Agent and type: <em>Create an ES|QL detection rule for macOS LOLBin abuse. Look for suspicious use of built-in macOS utilities, like osascript, curl, openssl, and sqlite3, being spawned by unexpected parent processes.</em></p>
<p><img src="https://www.elastic.co/security-labs/assets/images/skills-elastic-security-9-4/siem-rule.png" alt="" /></p>
<p>The <a href="https://www.elastic.co/security-labs/ai-esql-detection-rule-creation"><strong>Detection Rule Edit</strong></a> skill activates:</p>
<ul>
<li>
<p>The skill uses <code>platform.core.generate_esql</code>to draft an ES|QL query targeting <code>logs-endpoint.events.process-*</code>, filtering for known macOS LOLBins spawned by unusual parent processes (for example, <code>osascript</code> launched by a web browser, or <code>url</code> invoked by a shell script running from <code>/tmp</code>).</p>
</li>
<li>
<p>It maps the rule to MITRE ATT&amp;CK: <strong>T1059.002, AppleScript</strong>, and <strong>T1105, Ingress Tool Transfer</strong> under the Execution and Command and Control tactics.</p>
</li>
<li>
<p>The skill calls <code>security.security_labs_search</code> to check whether Elastic Security Labs has published research on macOS LOLBin techniques, pulling relevant context into the rule's investigation guide.</p>
</li>
<li>
<p>It generates the complete rule definition (name, description, severity, risk score, tags, MITRE mapping, schedule, and the validated ES|QL query) and presents it as an editable rule attachment in the conversation.</p>
</li>
</ul>
<p>You review the query, tune the parent-process allow list to exclude your IT team's legitimate automation scripts, and save. The rule is live. Total time: under five minutes.</p>
<p>Without the skill, this process means switching to the detection rules UI, manually writing ES|QL against the correct indices, researching which macOS utilities qualify as LOLBins, looking up the right MITRE technique IDs, and hoping you haven't missed an edge case. That's 30–60 minutes for an experienced detection engineer, longer for someone less familiar with the macOS process hierarchy.</p>
<h3>Scenario 2: Attack Discovery surfaces a campaign</h3>
<p>Overnight, Attack Discovery correlated 12 alerts across three hosts and two users into a single narrative: <em>Credential harvesting via browser credential store access and suspicious authentication patterns.</em> The discovery is sitting in your queue when you arrive.</p>
<p>You click into the agent and ask: <em>Analyze the credential-harvesting discovery. Are these alerts true positives? What's the blast radius?</em></p>
<p><strong>Alert Analysis</strong> goes first. It fetches the correlated alerts using <code>security.alerts</code>, pulling the full alert details: rule names, severities, MITRE techniques, affected entities. Then it uses its inline tool <code>security.alert-analysis.get-related-alerts</code> to find additional alerts sharing entities with the correlated set. It discovers four additional alerts involving the same user (j.martinez) from the past 48 hours, alerts that weren't part of the credential-harvesting campaign pattern but are relevant to the broader investigation of this user's activity. These are failed authentication attempts against a different service, suggesting the attacker is testing stolen credentials across systems.</p>
<p>Next, it queries <code>security.security_labs_search</code> to check whether the observed TTPs match known threat actor playbooks. It finds a match: The technique chain (credential store access → lateral authentication → service enumeration) aligns with a published Elastic Security Labs report on a commodity access broker toolkit.</p>
<p>Finally, it calls <code>security.entity_risk_score</code> to assess the involved entities. <code>j.martinez</code> has a risk score of 87 (critical), already elevated before this campaign due to prior anomalous VPN activity.</p>
<p>The triage is done: true positive, high confidence, expanding blast radius. But you want deeper entity context. What else has <code>j.martinez</code> been doing?</p>
<p>The <strong>Entity Analytics</strong> skill picks up. Using <code>security.get_entity</code>, it pulls the full entity profile: risk score history over 90 days, contributing risk inputs (the current campaign plus two prior anomaly detections), asset criticality (the account has admin access to three production databases), and behavioral patterns. The profile shows that `j.martinez's risk score has increased by 34 points in the last week, well above the significant-change threshold.</p>
<p>You now have the full picture: confirmed campaign, expanding scope, high-value target, and historical context. You ask the agent to create a case with all findings attached. It compiles alert evidence, entity profile, threat intel matches, and recommended containment actions into a single case.</p>
<h3>Scenario 3: An anomaly leads to a hunt</h3>
<p>While reviewing the morning's anomalies, the Security ML jobs flagged unusual behavior on <code>svc-backup-prod</code>, a service account that normally runs scheduled backup jobs between 2:00 and 4:00 a.m. The anomaly: large outbound data transfers at 11:00 p.m., well outside the normal window, to an IP address the account has never contacted before.</p>
<p>You ask: <em>Investigate the anomalies on svc-backup-prod. What's happening?</em></p>
<p>The <strong>Security ML Jobs</strong> skill starts by calling <code>find.security.ml.jobs</code> to find the relevant ML jobs and anomaly indices, in this case jobs monitoring network traffic patterns and data exfiltration signals. It generates and executes an ES|QL query against `.ml-anomalies-*<code>, filtering for </code>svc-backup-prod` records above the anomaly score threshold. The results show three anomalous sessions over the past week, each with increasing data volume: 2 GB, then 8 GB, and then 23 GB.</p>
<p>Since Entity Store v2 is enabled, the skill extracts the entity's unique identifier and calls <code>security.get_entity</code> to pull the full entity profile. It reveals that <code>svc-backup-prod</code> was recently granted access to a new file share containing customer PII, and its asset criticality is classified as <code>extreme_impact</code>.</p>
<p>The anomaly data is concerning, but you need to dig deeper. You type: <em>Hunt for all network activity from svc-backup-prod to external IPs in the last 30 days. Compare against baseline.</em></p>
<p>The <strong>Threat Hunting</strong> skill takes over. Using <code>platform.core.generate_esql</code> and <code>platform.core.execute_esql</code>, it iteratively builds queries against <code>logs-endpoint.events.network-*</code>:</p>
<ul>
<li>
<p>First pass: Aggregate all outbound connections by destination IP, ordered by total bytes transferred. The results confirm that the flagged IP (<code>198.51.100.47</code>) accounts for 33 GB of outbound traffic, all within the past 10 days. None before that.</p>
</li>
<li>
<p>Second pass: Check the destination IP against DNS resolution patterns. The IP resolves to a recently registered domain (<code>storage-sync-cdn.cloud</code>) with a registrar commonly associated with bulletproof hosting.</p>
</li>
<li>
<p>Third pass: Correlate with process telemetry. The connections originate from a process (<code>rsync</code>) that <code>svc-backup-prod</code> normally uses, but it's connecting to an unauthorized destination. The attacker is using a legitimate tool for exfiltration, making rule-based detection difficult.</p>
</li>
</ul>
<p>The hunt confirms a data exfiltration campaign using living-off-the-land techniques. The Threat Hunting skill documents the hypothesis, queries, and evidence trail. You create a case with containment recommendations: Isolate the host, rotate the service account credentials, and block the destination IP at the network perimeter.</p>
<p>Three skills. One conversation. From anomaly to confirmed exfiltration in minutes, not hours.</p>
<h2>Under the hood: How skills are built</h2>
<p>Each skill is defined as a <code>SkillType</code>, a structured object that bundles everything the agent needs for a specific domain:</p>
<ul>
<li>
<p><strong>System prompt</strong> (<code>content</code>): The core instructions. This is where domain expertise lives. The Threat Hunting skill, for example, includes a complete hunting process (formulate hypothesis → identify data sources → explore iteratively → identify anomalies → search for IOCs → document findings) with embedded ES|QL templates for common patterns, like lateral movement detection and C2 beaconing analysis.</p>
</li>
<li>
<p><strong>Registry tools</strong> (<code>getRegistryTools</code>): The set of platform and security tools the skill can invoke. Each skill gets only the tools it needs. Alert Analysis gets <code>security.alerts</code>, <code>security.security_labs_search</code>, and <code>security.entity_risk_score</code>. Threat Hunting gets <code>platform.core.generate_esql</code>, <code>platform.core.execute_esql</code>, <code>platform.core.search</code>, and <code>platform.core.cases</code>. No skill has access to tools it doesn't need.</p>
</li>
<li>
<p><strong>Inline tools</strong> (<code>getInlineTools</code>): Skill-specific tools that only exist within that skill's context. Alert Analysis defines <code>security.alert-analysis.get-related-alerts</code>, a tool that finds alerts sharing entities with a given alert. This tool doesn't exist outside the Alert Analysis skill because no other workflow needs it.</p>
</li>
<li>
<p><strong>Referenced content</strong> (<code>referencedContent</code>): Named chunks of domain knowledge that the skill can pull in when needed. The Threat Hunting skill includes embedded ES|QL query templates for lateral movement, C2 beaconing, brute force detection, and rare process execution. These are ready-made patterns that the agent adapts to the specific investigation.</p>
</li>
</ul>
<p>Because each skill is self-contained, adding a new one (for incident response automation or binary analysis, say) doesn't touch any existing skill. Each operates independently, with its own prompt, its own tools, and its own domain knowledge</p>
<h2>Skills in the Agentic SOC</h2>
<p>If you read our <a href="https://www.elastic.co/security-labs/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder">previous post on Attack Discovery, Workflows, and Elastic Agent Builder</a>, you'll recognize the pattern. In that post, we extended the Threat Hunting Agent with five custom workflow tools (VirusTotal lookups, on-call schedule checks, case creation, Slack channel creation, and time retrieval) to build an automated triage pipeline for advanced persistent threat–level (APT-level) threats.</p>
<p>Skills are the productized evolution of that approach. Instead of requiring each SOC team to build custom agents and wire up individual tools, Elastic Security now ships domain expertise out of the box. The five skills in 9.4 cover the workflows that every SOC runs daily (detection, triage, hunting, entity analysis, and anomaly investigation) with the same composable, tool-backed architecture.</p>
<p>Skills also integrate directly with the rest of the <a href="https://www.elastic.co/blog/ai-cybersecurity-arms-race-agentic-soc">Agentic SOC</a> stack:</p>
<ul>
<li>
<p><strong>Attack Discovery</strong> generates alerts that can trigger Workflows, which invoke the agent. The agent activates Alert Analysis, Entity Analytics, or Threat Hunting, depending on what the discovery requires.</p>
</li>
<li>
<p><strong>Workflows</strong> provide the execution layer, both scripted automation and AI-augmented reasoning. A Workflow can run deterministic actions, like case creation, host isolation, and notification, but it can also invoke the Elastic AI Agent as a step, triggering skill-based reasoning mid-pipeline. This means a single Workflow can isolate a host (scripted), then ask the agent to triage the related alerts using Alert Analysis (AI-driven), and then escalate to Slack (scripted), combining reliability with intelligence.</p>
</li>
<li>
<p><strong>Custom tools and Model Context Protocol (MCP)</strong> remain fully available. Skills don't replace customization. They complement it. Teams can still add workflow-backed tools, connect external MCP servers, and extend the agent for their environment-specific needs.</p>
</li>
</ul>
<p>Security users also benefit from three platform skills that ship alongside the security-specific ones.</p>
<ul>
<li>
<p><strong>Dashboard Management</strong> lets analysts build and update Kibana dashboards through conversation. After completing the exfiltration investigation in Scenario 3, you could ask the agent: <em>Create a dashboard showing outbound data transfer volume by service account over the last 30 days, with a breakdown by destination IP.</em> The skill generates the visualizations and presents them as an editable attachment, so you go from investigation findings to a shareable executive briefing without switching tools.</p>
</li>
<li>
<p><strong>Workflow Authoring</strong> (available as an experimental capability) helps teams write and modify workflow YAML through the agent. Instead of hand-authoring a triage Workflow from scratch, you could ask: <em>Create a workflow that triggers on critical-severity alerts, runs the alert through the AI agent for triage, and creates a Slack channel if it's confirmed as a true positive.</em> The skill generates the YAML definition, validates it, and lets you review before deploying. This turns Workflow creation from a manual authoring task into a conversation.</p>
</li>
<li>
<p><strong>Graph Creation</strong> lets analysts visualize entity relationships and attack paths through conversation. After the Alert Analysis skill identifies that j.martinez's compromised credentials were used across three hosts, you could ask: <em>Create a graph showing the relationship between j.martinez, the affected hosts, and the credential-harvesting alerts.</em> The skill generates an interactive node-link visualization showing how entities connect, making it easier to brief stakeholders on attack scope and lateral movement paths.</p>
</li>
</ul>
<p>The pieces form a layered system: Attack Discovery surfaces threats, skills provide domain expertise for analysis, Workflows execute the response, and platform skills help you build the dashboards, graphic representation, and automation that tie it all together.</p>
<h2>Key takeaways</h2>
<ul>
<li>
<p><strong>Skills are the unit of AI expertise in the SOC.</strong> Each skill packages domain knowledge, curated tools, and specialized instructions for a single workflow: detection, triage, hunting, entity analysis, or anomaly investigation.</p>
</li>
<li>
<p><strong>One agent, not five.</strong> Analysts don't switch between agents. The Elastic AI Agent activates the right skill based on the task, keeping the experience unified and the context connected.</p>
</li>
<li>
<p><strong>Composable by design.</strong> Skills reference each other. Alert Analysis hands off to Entity Analytics for deeper profiling. Threat Hunting builds on ML anomaly findings. Investigations flow naturally across skills without manual context transfer.</p>
</li>
<li>
<p><strong>Efficient at scale.</strong> Skills load on demand. Adding new skills doesn't degrade existing ones. Each operates in its own focused context window, so quality improves as capabilities grow.</p>
</li>
<li>
<p><strong>Built on the Agentic SOC stack.</strong> Skills work with Attack Discovery, Workflows, and custom tools. They make the automation pipeline richer by giving the agent deeper domain expertise at every step.</p>
</li>
<li>
<p><strong>Extensible.</strong> The five out-of-the-box skills ship with 9.4, but the architecture supports custom skills. Teams can build skills tailored to their environment, their data sources, and their SOC processes.</p>
</li>
</ul>
<h2>Get started</h2>
<p>Skills ship as part of Elastic Security 9.4. They're available out of the box in the Elastic AI Agent with no configuration required. Open a conversation, ask a security question, and the agent activates the right skill.</p>
<p>To learn more, see the <a href="https://www.elastic.co/docs/explore-analyze/ai-features/elastic-agent-builder">Elastic AI Agent documentation</a> and the <a href="https://www.elastic.co/docs/release-notes/security">Elastic Security 9.4 release notes</a>.</p>
]]></content:encoded>
            <category>security-labs</category>
            <enclosure url="https://www.elastic.co/security-labs/assets/images/skills-elastic-security-9-4/cover.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Speeding APT Attack Confirmation with Attack Discovery, Workflows, and Agent Builder]]></title>
            <link>https://www.elastic.co/security-labs/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder</link>
            <guid>speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder</guid>
            <pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[This article walks through how Elastic Security's Attack Discovery, combined with Workflows and Agent Builder, can automatically detect, correlate, and confirm APT-level attacks like Chrysalis while reducing analyst response time from hours to minutes.]]></description>
            <content:encoded><![CDATA[<p><strong>9:15 AM: The Non-Event</strong> - A headline breaks: &quot;<a href="https://www.rapid7.com/blog/post/tr-chrysalis-backdoor-dive-into-lotus-blossoms-toolkit/">Chrysalis Backdoor: A Deep Dive into Lotus Blossom</a>.&quot; Your CISO sends a Slack message: &quot;Are we affected?&quot;</p>
<p>In a traditional SOC, you’re about to lose your entire morning to a manual scramble - sifting through dozens of alerts, writing queries, manually checking VirusTotal, and pivoting across index patterns to build a timeline hoping you don’t miss something.</p>
<p>But in an Agentic SOC, the work is already done. Attack Discovery, running on its hourly schedule, had already correlated 5 critical alerts out of 30+ into a single attack narrative: &quot;Malware with DLL Side-Loading Persistence.&quot; That discovery automatically triggered a workflow, which handed the findings to an agent. The agent used its tools and verified the malware hash on VirusTotal, searched your logs with ES|QL, checked the on-call schedule, created a case, and spun up a Slack incident channel with the on-call analyst already added, and also generated a CISO-ready summary — all before you sat down for coffee.</p>
<p>You reply to your CISO: &quot;Already confirmed and triaged. The case is open. Here's the link.&quot;</p>
<p>This post explains how we built that pipeline: the integration of <a href="https://www.elastic.co/security/ai">Attack Discovery</a>, <a href="https://www.elastic.co/elasticsearch/workflows">Workflows</a>, and <a href="https://www.elastic.co/elasticsearch/agent-builder">Agent Builder</a>.</p>
<h2>The threat: Chrysalis backdoor by Lotus Blossom</h2>
<h3>Threat actor profile</h3>
<table>
<thead>
<tr>
<th align="left">Attribute</th>
<th align="left">Details</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><strong>Name</strong></td>
<td align="left">Lotus Blossom (aka Billbug, Raspberry Typhoon, Spring Dragon)</td>
</tr>
<tr>
<td align="left"><strong>Origin</strong></td>
<td align="left">China (state-sponsored)</td>
</tr>
<tr>
<td align="left"><strong>Active Since</strong></td>
<td align="left">2009</td>
</tr>
<tr>
<td align="left"><strong>Motivation</strong></td>
<td align="left">Espionage</td>
</tr>
<tr>
<td align="left"><strong>Target Sectors</strong></td>
<td align="left">Government, Telecom, Aviation, Critical Infrastructure, Media</td>
</tr>
<tr>
<td align="left"><strong>Target Regions</strong></td>
<td align="left">Southeast Asia, Central America</td>
</tr>
</tbody>
</table>
<h3>Campaign overview</h3>
<p>Lotus Blossom executed a <strong>supply chain compromise</strong> of Notepad++ update infrastructure:</p>
<ul>
<li><strong>Attack Window:</strong> June 2025 – December 2025 (~6 months)</li>
<li><strong>Vector:</strong> Hijacked Notepad++ update mechanism (WinGUp)</li>
<li><strong>Method:</strong> Selective redirection of targeted users to malicious update servers</li>
<li><strong>Payload:</strong> Previously undocumented &quot;Chrysalis&quot; backdoor</li>
<li><strong>Discovery:</strong> Rapid7 MDR team, published 2026-02-02</li>
</ul>
<h3>Chrysalis backdoor capabilities</h3>
<p>The Chrysalis backdoor is a sophisticated, feature-rich implant:</p>
<ul>
<li>Custom encryption (LCG, FNV-1a hashing, MurmurHash)</li>
<li>Reflective DLL loading</li>
<li>API hashing for evasion</li>
<li>DLL sideloading via legitimate Bitdefender binary (<code>BluetoothService.exe</code>)</li>
<li>Full remote access capabilities</li>
<li>Persistent Windows service installation</li>
</ul>
<h3>Attack chain</h3>
<pre><code>[1] INITIAL ACCESS
    └── User executes malicious NSIS installer from Desktop
              ↓
[2] EXECUTION
    └── Installer drops files to hidden AppData folder
        ├── BluetoothService.exe (legitimate binary)
        └── log.dll (malicious Chrysalis loader)
              ↓
[3] PERSISTENCE
    └── BluetoothService.exe registered as Windows service
        └── Runs under SYSTEM context
              ↓
[4] DEFENSE EVASION
    └── DLL sideloading via legitimate signed binary
              ↓
[5] COMMAND &amp; CONTROL
    └── DNS beacon to api[.]skycloudcenter[.]com ✅ CONFIRMED
</code></pre>
<h3>MITRE ATT&amp;CK mapping</h3>
<table>
<thead>
<tr>
<th align="left">Tactic</th>
<th align="left">Technique</th>
<th align="left">ID</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Initial Access</td>
<td align="left">Supply Chain Compromise</td>
<td align="left">T1195.002</td>
</tr>
<tr>
<td align="left">Execution</td>
<td align="left">User Execution</td>
<td align="left">T1204.002</td>
</tr>
<tr>
<td align="left">Persistence</td>
<td align="left">Windows Service</td>
<td align="left">T1543.003</td>
</tr>
<tr>
<td align="left">Defense Evasion</td>
<td align="left">DLL Side-Loading</td>
<td align="left">T1574.002</td>
</tr>
<tr>
<td align="left">Command &amp; Control</td>
<td align="left">DNS</td>
<td align="left">T1071.004</td>
</tr>
</tbody>
</table>
<h2>The Challenge: Speed vs. Accuracy</h2>
<p>When threat intelligence drops on a nation-state APT campaign, SOC teams face a brutal trade-off:</p>
<p><strong>Speed:</strong> Executives want answers <em>now</em>. &quot;Are we compromised?&quot;</p>
<p><strong>Accuracy:</strong> Analysts need time to hunt, correlate, and confirm before making the call.</p>
<p>Traditional workflows require analysts to:</p>
<ol>
<li>Determine the scope of analysis and relevant search criteria</li>
<li>Manually search for IOCs across multiple data sources</li>
<li>Correlate alerts that may span days or weeks</li>
<li>Validate findings against threat intelligence</li>
<li>Build the attack timeline</li>
<li>Escalate with confidence</li>
</ol>
<p>This process takes <strong>hours to days</strong>, during which an active attacker may exfiltrate data or move laterally.</p>
<h2>The Solution: Attack Discovery + Workflows + Agent Builder</h2>
<p>Elastic Security's AI-powered automation stack transforms this workflow from manual hunting to <strong>automated confirmation</strong>. But before we dive into the specific setup, it's worth understanding how the building blocks fit together.</p>
<h3>Agents &amp; Workflows: Two entry points, one composable architecture</h3>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image7.png" alt="Diagram showing the composable relationship between Agents and Workflows" /></p>
<p>Agent Builder gives you two primitives that work together:</p>
<ul>
<li><a href="https://www.elastic.co/docs/explore-analyze/ai-features/elastic-agent-builder"><strong>Agents</strong></a> are the intelligence layer. They reason about a task, decide which tools to call, and adapt based on what they find. An agent can call search tools, MCP tools, and critically - <strong>workflows as tools</strong>.</li>
<li><a href="https://www.elastic.co/docs/explore-analyze/workflows"><strong>Workflows</strong></a> are the structure layer. They're deterministic pipelines: steps run in order, reliably and repeatably. Any step in a workflow can optionally be an <strong>agent step</strong>, giving it the ability to reason mid-pipeline.</li>
</ul>
<p>The two are fully composable. A workflow can invoke an agent. An agent can call a workflow. An agent step inside a workflow can call another workflow. Every connection is optional allowing you to mix and match based on what the problem demands.</p>
<p>This is what makes the architecture powerful: <strong>agents reason and decide; workflows execute and coordinate</strong>. For our Chrysalis attack scenario, we used both.</p>
<h3>Our Flow</h3>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image10.png" alt="" /></p>
<p><strong>The Flow:</strong></p>
<ol>
<li><strong>Many Alerts</strong> → Attack Discovery correlates disparate alerts into a single attack narrative</li>
<li><strong>Attack Discovery</strong> → Generates an alert that triggers the workflow</li>
<li><strong>Workflow</strong> → Invokes Agent Builder to analyze the attack discovery findings</li>
<li><strong>Agent Builder</strong> → Calls enrichment workflows (VirusTotal, Threat Intel, ES|QL queries)</li>
<li><strong>Agent Builder Calls a Workflow</strong> → Agent builder continues with incident response actions calling on workflow as a tool (case actions, isolate host, notify team)</li>
</ol>
<h2>Step 1: Attack Discovery surfaces the threat</h2>
<p>Attack Discovery uses LLMs to analyze security alerts and identify attack patterns. Unlike traditional alert grouping, it understands the <strong>semantic relationships</strong> between alerts.</p>
<h3>The alert queue: Needle in a haystack</h3>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image4.png" alt="Shows the raw Elastic Security alerts table with dozens of alerts across different rules, severities, hosts, and users." /></p>
<p>Here's reality for a SOC analyst. You open the alerts page and see dozens of alerts across multiple hosts, users, and rules, combination of, mixed severities, mixed types, many of them noise.</p>
<p>Dozens of alerts. Multiple rules firing. Severity levels ranging from low to critical. Some are the Chrysalis attack. Some are unrelated Windows Defender events. Some are SIEM change detections from a completely different workflow. It’s difficult to find the coordinated attack in this wall of noise.</p>
<h3>What Attack Discovery found</h3>
<p>Attack Discovery analyzed all of these alerts and identified <strong>5 alerts</strong> that belonged to a single coordinated attack - pulling them out of the noise and correlating them into one narrative:</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image6.png" alt="Shows the Attack Discovery showing a summary of the correlated attack" /></p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image11.png" alt="Shows the Attack Discovery view with the correlated attack: 5 alerts, all critical, tied to a host and user." /></p>
<p>Instead of presenting 5 individual alerts, Attack Discovery correlated them into a single discovery:</p>
<p><strong>Malware with DLL Side-Loading Persistence</strong></p>
<p>Malicious executable on <code>srv-win-defend-01</code> escalated to persistence via <code>BluetoothService.exe</code> with DLL side-loading</p>
<ul>
<li><strong>Host:</strong> srv-win-defend-01</li>
<li><strong>User:</strong> james_spiteri</li>
<li><strong>Severity:</strong> Critical</li>
<li><strong>Attack Chain:</strong> Initial Access → Execution → Persistence → Defense Evasion → C2</li>
</ul>
<p>Attack Discovery also:</p>
<ul>
<li>Mapped alerts to MITRE ATT&amp;CK tactics</li>
<li>Identified the DLL sideloading technique</li>
<li>Flagged the suspicious persistence mechanism</li>
<li>Highlighted the C2 network indicator</li>
</ul>
<h2>Step 2: Scheduled discovery triggers the workflow</h2>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image2.png" alt="Shows Attack Discovery’s scheduling page where users can schedule attack discovery to run at desired intervals." /></p>
<p>Attack Discovery doesn't require an analyst to click a button. We configured it to run on an <a href="https://www.elastic.co/docs/api/doc/serverless/operation/operation-createattackdiscoveryschedules"><strong>hourly schedule</strong></a>, continuously analyzing the latest alerts for coordinated attacks.</p>
<p>When our hourly run kicked off, it ingested all alerts from the last hour including the Chrysalis-related alerts buried among routine detections and surfaced the DLL side-loading attack as a discovery.</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image8.png" alt="Shows Attack Discovery schedule editor linked to specific workflows." /></p>
<p>Linking a workflow as an action step from attack discovery means every time Attack Discovery finds a coordinated attack, it automatically fires the workflow..</p>
<p>But here's what makes this approach different from traditional SOAR playbooks: the workflow doesn't script out every step. It hands the entire attack discovery to Agent Builder and says <em>&quot;figure it out.&quot;</em></p>
<h3>Workflow definition</h3>
<p>This is the real workflow we used consisting of two steps, that's it:</p>
<pre><code>name: Auto Triage AD
description: &gt;-
  Demonstrates the application of AI agents and workflows 
  to enable agentic alert triaging.
enabled: true
tags:
  - Example
  - Agentic Workflow

triggers:
  - type: alert                          # Fires when Attack Discovery generates an alert

steps:
  # Step 1: Hand the attack discovery to the agent with clear instructions
  - name: initial_analysis
    type: kibana.request
    with:
      method: &quot;POST&quot;
      path: &quot;/api/agent_builder/converse&quot;
      headers:
        kbn-xsrf: &quot;true&quot;
      body:
        agent_id: &lt;your-agent-id&gt;        # Your custom Hunting Agent
        input: |
          Confirm the attack by searching for behaviour in the logs 
          (all logs which are relevant), always leverage security labs tools, 
          always leverage virustotal if file hashes are available. 
          If this is a true positive, create a case with all the relevant content too.

          {{event|json}}

          Create a slack channel for this incident, check who's on call, 
          add them to it, and send a formatted message with what's happening 
          and next steps. If this is a true positive, create a case with all 
          the relevant content too - add a button to the slack message linking 
          to the case, and another button leading to the result of the attack. 
          Lastly, include a button that will take me to this agent conversation, 
          just replace the conversation ID with the actual one from this conversation 
          (https://&lt;your-kibana-url&gt;/app/agent_builder/conversations/&lt;conversation-id&gt;)

          Change the attack discovery status to acknowledged, or, 
          if false positives, close it.
    timeout: 10m
    on-failure:
      retry:
        max-attempts: 3

  # Step 2: Follow up to catch anything that didn't complete
  - name: followup_analysis
    type: kibana.request
    with:
      method: &quot;POST&quot;
      path: &quot;/api/agent_builder/converse&quot;
      headers:
        kbn-xsrf: &quot;true&quot;
      body:
        conversation_id: &quot;{{ steps.initial_analysis.output.conversation_id }}&quot;
        agent_id: &lt;your-agent-id&gt;
        input: |
          Complete any previous steps which might not have ran successfully. 
          Just in case, the conversation ID is 
          {{ steps.initial_analysis.output.conversation_id }}
    timeout: 10m
    on-failure:
      retry:
        max-attempts: 3
</code></pre>
<h3>Why this workflow is so short</h3>
<p>The entire automation is <strong>two steps</strong>:</p>
<ol>
<li><strong><code>initial_analysis</code></strong>: Send the attack discovery to Agent Builder with natural language instructions describing what you want done</li>
<li><strong><code>followup_analysis</code></strong>: A failsafe that resumes the same conversation and asks the agent to verify all tasks were completed. Because agents call multiple tools in sequence and any individual tool call could time out or hit a transient error, this step ensures nothing falls through the cracks.</li>
</ol>
<p>This is the fundamental shift: <strong>the workflow is the trigger and the safety net; the agent is the brain</strong>.</p>
<h2>Under the hood: How we extended the Threat Hunting Agent</h2>
<p>Before we continue with the results, it's worth pausing on what made this possible. One of Agent Builder's most powerful capabilities is that you can <strong>extend existing agents</strong> with additional tools. Rather than building from scratch, we took the default <strong>Threat Hunting Agent</strong> and added custom workflow-backed tools to give it the specific capabilities this scenario required.</p>
<h3>What we added</h3>
<p>Agent Builder ships with built-in platform tools like <code>platform.core.generate_esql</code> and <code>platform.core.product_documentation</code>. But the real power comes from adding your own. We extended the Threat Hunting Agent with tools across several categories:</p>
<table>
<thead>
<tr>
<th align="left">Tool</th>
<th align="left">Type</th>
<th align="left">What It Does</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>vt.hash.lookup</code></td>
<td align="left">Workflow (custom)</td>
<td align="left">Analyze a file hash with VirusTotal</td>
</tr>
<tr>
<td align="left"><code>check.on.call.schedule</code></td>
<td align="left">Workflow (custom)</td>
<td align="left">Query the on-call schedule to find the current responder</td>
</tr>
<tr>
<td align="left"><code>create.case</code></td>
<td align="left">Workflow (custom)</td>
<td align="left">Create a case in Elastic Security</td>
</tr>
<tr>
<td align="left"><code>create.channel</code></td>
<td align="left">Workflow (custom)</td>
<td align="left">Create a Slack channel for incident coordination</td>
</tr>
<tr>
<td align="left"><code>get.time</code></td>
<td align="left">Workflow (custom)</td>
<td align="left">Get the current time for naming and timestamps</td>
</tr>
</tbody>
</table>
<p>Five custom tools. That's all it took to turn the default Hunting Agent into automatically verifying malware, searching logs, finding the on-call responder, creating a case, and spinning up an incident channel - all expediting the time to detect a potential threat.</p>
<h3>The Agent's reasoning chain</h3>
<p>Here's what's remarkable: given the Attack Discovery context, the agent automatically decided which tools to call and in what order. No human scripted these steps.</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image1.png" alt="Shows the agent's reasoning chain: starting with VirusTotal lookup on the file hash, then generating an ES|QL query to search endpoint logs for the affected host, user, and malicious processes. Demonstrates autonomous tool selection." /></p>
<p><strong>Step 1: VirusTotal Lookup</strong>: <code>vt.hash.lookup</code></p>
<ul>
<li>The agent's first move: verify the malware hash.</li>
</ul>
<p><strong>Step 2: Generate ES|QL Query</strong>: <code>platform.core.generate_esql</code></p>
<ul>
<li>With malware confirmed, the agent searched for all related activity.</li>
</ul>
<p><strong>Step 3: Product Documentation</strong>: <code>platform.core.product_documentation</code></p>
<ul>
<li>The agent referenced Elastic Security docs to generate remediation commands for the Response Console.!</li>
</ul>
<p><a href="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image3.png">Reasoning steps showing which tools were called in sequence for transparency</a></p>
<p><em>Shows the additional reasoning chain: referencing product documentation, then checking the on-call schedule information before creating a case with all relevant information and notifying the analyst on call over Slack.</em></p>
<p><strong>Step 4: Check current time:</strong> <code>get.time</code></p>
<p><strong>Step 5: Check On-Call Schedule</strong>: <code>check.on.call.schedule</code></p>
<ul>
<li>The agent ran an ES|QL query against the <code>on-call-schedule</code> index to find the current responder:</li>
</ul>
<p><strong>Step 6: Create Case</strong>: <code>create.case</code></p>
<p><strong>Step 7: Create Slack Channel</strong>: <code>create.channel</code></p>
<h3>Why this matters</h3>
<p>The agent wasn't following a script. It <strong>reasoned</strong> about the situation and decided:</p>
<ol>
<li>First, verify the malware is real (VirusTotal)</li>
<li>Then, understand the impact (ES|QL log search)</li>
<li>Then, figure out how to remediate (product documentation)</li>
<li>Then, find the right person to respond (on-call schedule)</li>
<li>Then, create tracking artifacts (case)</li>
<li>Finally, coordinate the team (Slack channel)</li>
</ol>
<p>This is the difference between a workflow (which follows a fixed sequence) and an agent (which reasons about what to do next). The workflow triggered the agent; the agent figured out the rest.</p>
<h2>Step 3: Automated incident response</h2>
<p>With high-confidence confirmation, the workflow automatically:</p>
<h3>1. Creates an incident Case</h3>
<p>A structured case is created with all relevant evidence attached:</p>
<ul>
<li>Attack Discovery findings</li>
<li>VirusTotal analysis results</li>
<li>Threat intelligence matches</li>
<li>Agent Builder analysis</li>
<li>Recommended response actions</li>
</ul>
<h3>2. Notifies the SOC</h3>
<p>A Slack message is sent to the right channel informing analysts of the critical incident.</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image5.png" alt="Shows the actual Slack channel with the Incident Bot  posting the full attack summary, malware details, attack chain, MITRE ATT&amp;CK mapping, and immediate next steps." /></p>
<h3>3. Enables Response Actions</h3>
<p>The workflow can optionally trigger automated response actions:</p>
<ul>
<li><strong>Host Isolation:</strong> Isolate <code>srv-win-defend-01</code> via Elastic Defend</li>
<li><strong>User Suspension:</strong> Disable <code>james_spiteri</code> in Active Directory</li>
<li><strong>Network Block:</strong> Push C2 domain to firewall blocklist</li>
<li><strong>IOC Sweep:</strong> Launch fleet-wide scan for Chrysalis indicators</li>
</ul>
<hr />
<h2>Time-to-confirmation: Before and after</h2>
<table>
<thead>
<tr>
<th align="left">Metric</th>
<th align="left">Manual Process</th>
<th align="left">Automated Pipeline</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Alert Correlation</td>
<td align="left">30-60 minutes</td>
<td align="left">Instant (Attack Discovery)</td>
</tr>
<tr>
<td align="left">IOC Extraction</td>
<td align="left">15-30 minutes</td>
<td align="left">Instant (Workflow)</td>
</tr>
<tr>
<td align="left">VirusTotal Lookup</td>
<td align="left">10-15 minutes</td>
<td align="left">5 seconds (API)</td>
</tr>
<tr>
<td align="left">Threat Intel Correlation</td>
<td align="left">30-60 minutes</td>
<td align="left">10 seconds (ES</td>
</tr>
<tr>
<td align="left">Attack Attribution</td>
<td align="left">1-4 hours</td>
<td align="left">30 seconds (Agent Builder)</td>
</tr>
<tr>
<td align="left">Incident Creation</td>
<td align="left">15-30 minutes</td>
<td align="left">Instant (Workflow)</td>
</tr>
<tr>
<td align="left">SOC Notification</td>
<td align="left">5-10 minutes</td>
<td align="left">Instant (Connector)</td>
</tr>
<tr>
<td align="left"><strong>Total Time</strong></td>
<td align="left"><strong>2-6 hours</strong></td>
<td align="left"><strong>&lt; 4 minutes</strong></td>
</tr>
</tbody>
</table>
<hr />
<h2>The other path: Just ask the Agent</h2>
<p>Everything above describes the <strong>automated</strong> pipeline - Attack Discovery finds the threat, the workflow fires, the agent triages it, and the right analyst(s) gets notified.</p>
<p>But there's another equally powerful way to use this: go directly to Agent Builder and ask it in plain English.</p>
<h3>Scenario: You read about the threat first</h3>
<p>Imagine you're scrolling through your threat intel feeds and see Rapid7's blog post about the Chrysalis backdoor. You just want to know: <em>are we compromised?</em></p>
<p><img src="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/image9.png" alt="" /></p>
<p>That's it. The same agent with the same tools does the rest:</p>
<ol>
<li>Reads the threat report using the <code>web.search</code> tool to pull IOCs and TTPs from the Rapid7 blog</li>
<li>Generates ES|QL queries to hunt for Chrysalis indicators across your file, network, and process event logs</li>
<li>Checks VirusTotal for any matching file hashes found in your environment</li>
<li>Produces a CISO-ready summary with findings, confidence level, and recommended actions</li>
</ol>
<p>The agent calls the same tools it would in the automated pipeline. The difference is the entry point: instead of a scheduled Attack Discovery triggering a workflow, you triggered the agent with a question.</p>
<h3>Why this changes the game for analysts</h3>
<p>This is the part that's easy to overlook but profoundly important: <strong>the analyst didn't need to know a single query language, index pattern, or tool name</strong>.</p>
<p>They didn't write ES|QL. They didn’t need to remember where their different data lives. They didn't need to remember the VirusTotal API syntax or figure out which threat intel index to query.</p>
<p>They asked a question in natural language. The agent figured out the rest including which indices to search, which queries to write, which tools to call, and how to synthesize the results.</p>
<p>For a junior analyst who joined the team last month, this is transformative. For a senior analyst who's been doing this for a decade, it's hours of their life back. For a CISO who wants a status update, it's a question away.</p>
<p>The barrier to effective threat hunting just dropped from &quot;knows ES|QL and 47 index patterns&quot; to &quot;can describe what they're looking for.&quot;</p>
<h2>Key takeaways</h2>
<ol>
<li><strong>Attack Discovery on a schedule means you don't miss attacks</strong> - it continuously analyzes your alerts, so coordinated threats get surfaced even when no one is watching the queue.</li>
<li><strong>Workflows</strong> orchestrate the response, triggering on discoveries, invoking agents, executing actions.</li>
<li><strong>Agent Builder lets you build or extend agents for your needs</strong> - whether you start from scratch or add custom tools to an existing agent, you shape the capabilities to match your environment.</li>
<li><strong>Agents reason, workflows execute</strong> - the agent autonomously decided to call VirusTotal, search logs, check the on-call schedule, and create a Slack channel. No human scripted that sequence.</li>
<li><strong>Two entry points, same power</strong> - the automated pipeline and the chat interface use the same agent and the same tools. Whether a scheduled discovery triggers it or an analyst asks a question, the outcome is the same.</li>
<li><strong>Natural language is the new query language</strong> - analysts don't need to know ES|QL, index patterns, or API syntax. They describe what they're looking for, and the agent handles the rest.</li>
</ol>
<p>The Chrysalis backdoor campaign demonstrates why this matters. When nation-state actors can compromise your supply chain and establish persistence in 4 seconds, you need defenses that can match that speed - whether that's an automated pipeline running while you sleep, or a direct conversation with an agent when you're the first to spot the threat.</p>
]]></content:encoded>
            <category>security-labs</category>
            <enclosure url="https://www.elastic.co/security-labs/assets/images/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder/photo-edited-08.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[From Alert Fatigue to Agentic Response: How Workflows and Agent Builder Close the Loop]]></title>
            <link>https://www.elastic.co/security-labs/from-alert-fatigue-to-agentic-response</link>
            <guid>from-alert-fatigue-to-agentic-response</guid>
            <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Attempting to chase individual alerts is a losing strategy. To succeed, we have to move beyond simple automation scripts and into the era of Agentic AI.]]></description>
            <content:encoded><![CDATA[<p>SOC leaders face a daily battle against basic math that doesn’t add up. Data volumes are growing exponentially, attack surfaces are expanding globally, yet your team’s capacity remains linear. You cannot hire your way out of this problem.</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/from-alert-fatigue-to-agentic-response/image2.png" alt="Line chart demonstrating exponential increase in data, alerts, insights and linear increase in human capacity" /></p>
<p>Attempting to chase individual alerts is a losing strategy. To succeed, we have to move beyond simple automation scripts and into the era of Agentic AI.</p>
<p>At Elastic, we view the modern security operation as an operational nervous system. It needs Senses (the data foundation to see everything), a Brain 🧠(AI driven analytics to find the signal in the noise), and Hands 🙌(Workflows to execute actions and drive outcomes).</p>
<p><img src="https://www.elastic.co/security-labs/assets/images/from-alert-fatigue-to-agentic-response/image1.png" alt="" /></p>
<p>With the introduction of Agent Builder and Elastic Workflows, we are unifying these elements. We aren't just giving you a chatbot; we are giving you the ability to construct an autonomous SOC where agents reason over data and workflows execute sophisticated actions—bidirectionally.</p>
<p>Here is how these two powerful engines work together to transform your security operations.</p>
<h2>The Power of &quot;Brain&quot; and &quot;Hands&quot; Working Together</h2>
<p>To understand why this combination is significant, we must differentiate their roles.</p>
<ul>
<li><strong>Elastic Workflows (The Hands):</strong> These are deterministic. They are perfect for rigid, repeatable processes—&quot;If X happens, create a Jira ticket, ping Slack, and isolate the host.&quot; They provide structure, auditability, and reliability.</li>
<li><strong>Agent Builder (The Brain):</strong> Agents are probabilistic and reasoning-based. They perceive the environment, plan a sequence of steps, and adapt. An agent can look at a vague threat report and decide <em>which</em> queries to run to find evidence.</li>
</ul>
<p><strong>The magic happens when they interact:</strong> Previously, you had to choose between a rigid playbook or a manual investigation. Now, <strong>Workflows can invoke Agents</strong> to perform complex analysis during an automation loop, and <strong>Agents can invoke Workflows</strong> as tools to perform reliable, heavy-lifting actions during a chat.</p>
<h2>What This Isn't</h2>
<p>Let's be clear: this isn't about replacing your analysts. It's about removing the toil that keeps them from doing the work that actually matters - the creative, adversarial thinking that no model can replicate. The goal is to shift your team from being reactive log-chasers to proactive threat hunters. The agent handles the grunt work; your people handle the judgment calls.</p>
<h2>Use Case: Automated Triage at Alert Time</h2>
<p><em>From Alert to Analysis without Human Intervention</em></p>
<p><img src="https://www.elastic.co/security-labs/assets/images/from-alert-fatigue-to-agentic-response/image6.png" alt="" /></p>
<p>Let’s look at a real-world scenario involving a ransomware attack (ex: <em>BlackCat/ALPHV</em> - a ransomware-as-a-service operation). In a traditional setup, an alert fires, and an analyst spends 30 minutes gathering logs, checking virus totals, and writing a summary.</p>
<p>With Elastic, this entire triage phase is automated before the analyst opens their laptop, reducing mean-time-to-triage from 30 minutes to under 2 minutes.</p>
<p><strong>The Workflow:</strong></p>
<ol>
<li><strong>Trigger:</strong> <strong>Attack Discovery</strong> runs on a schedule and correlates 15 disparate alerts into a single, high-fidelity Attack Chain.</li>
<li><strong>Workflow Step (Enrichment):</strong> The workflow is triggered automatically and loops through every entity involved—hosts, users, file hashes. It runs a lookup against threat intel sources like VirusTotal.</li>
<li><strong>Workflow Step (Invoke Agent):</strong> The workflow passes this bundle of data to a specific <strong>&quot;Triage Agent.&quot;</strong></li>
<li><strong>Agent Execution:</strong> The agent doesn't just copy-paste data. It <em>reasons</em> over the attack chain, compares it against the MITRE ATT&amp;CK framework, correlates related logs, and generates a human-readable investigation summary tailored for a Tier 2 analyst.</li>
<li><strong>Outcome:</strong> The workflow posts this AI-generated analysis directly into a new Case, complete with severity scoring, deep dive investigation, root cause analysis, and recommended next steps.</li>
</ol>
<p><strong>User Impact:</strong> The analyst starts their day reviewing a fully contextualized case, not chasing raw logs.</p>
<h2>Use Case: The &quot;Human-in-the-Loop&quot; Investigation</h2>
<p><em>Turning Natural Language into Deterministic Action</em></p>
<p>Once an analyst is investigating, they often need to perform administrative tasks that break their flow like finding out who is on-call, setting up war rooms, or notifying leadership.</p>
<p>In Elastic Security, the analyst stays in the chat interface. Because we allow you to define Workflows as <strong>Tools</strong> for your agents, the analyst can simply ask the agent to handle the logistics.</p>
<p><strong>The Workflow:</strong></p>
<ol>
<li><strong>Analyst Prompt:</strong> <em>&quot;We have a confirmed incident. Who is on call? Please create a Slack channel for this incident and invite them.&quot;</em></li>
<li><strong>Agent Reasoning:</strong> The agent recognizes the intent matches a &quot;Incident Response Setup&quot; workflow tool you have pre-configured.</li>
<li><strong>Workflow Execution:</strong>
<ul>
<li>Step 1: Queries the PagerDuty integration to find the on-call engineer.</li>
<li>Step 2: Calls the Slack API to create a channel named <code>#incident-[id]</code>.</li>
<li>Step 3: Posts the initial case summary into that channel.</li>
</ul>
</li>
<li><strong>Outcome:</strong> The agent confirms to the analyst: <em>&quot;I have created channel #incident-982 and added Jane Doe (On-Call) to the channel.&quot;</em></li>
</ol>
<h2>Use Case: Guided Remediation and Containment</h2>
<p><em>Precision Response at Speed</em></p>
<p>When it is time to contain a threat, speed is critical, but so is safety. You don't want an LLM &quot;hallucinating&quot; an API call to a firewall. This is where the Agent + Workflow combination shines for safety.</p>
<p><strong>The Workflow:</strong></p>
<ol>
<li><strong>Analyst Prompt:</strong> <em>&quot;Isolate the host involved in the BlackCat alert.&quot;</em></li>
<li><strong>Agent Reasoning:</strong> The agent identifies the <code>host123</code> host from the context of the investigation. It creates a plan to invoke the &quot;Host Isolation&quot; workflow.</li>
<li><strong>Decision Point:</strong> The Agent presents the plan to the user: <em>&quot;I am about to trigger the 'Isolate Host' workflow for host123 via Elastic Defend.&quot;</em></li>
<li><strong>Workflow Execution:</strong> The deterministic workflow executes the isolation command via Elastic Defend (XDR), ensuring the action is logged and performed exactly as defined by your engineering team.</li>
<li><strong>Outcome:</strong> The host is isolated immediately.</li>
</ol>
<p><strong>User Impact:</strong> You get the ease of natural language interaction with the safety and audit trails of hard-coded automation.</p>
<p>We are moving away from a world where you have to choose between flexible AI chat and rigid SOAR playbooks. The future is an Autonomous SOC where the two are inextricably linked.</p>
<p>By using Agent Builder to create custom agents that understand your specific environment (using RAG with your own data) and equipping them with Elastic Workflows as tools, you effectively multiply your team's capacity and scale expertise. You are not just deploying a chatbot; you are deploying a virtual team member that knows your runbooks, respects your permissions, and works 24/7.</p>
<p>For more detailed information on getting started with Agent Builder read this <a href="https://www.elastic.co/search-labs/blog/ai-agent-builder-elasticsearch">blog</a>.</p>
<p>Agent Builder and Workflows are available now as a tech preview. Get started with an <a href="https://cloud.elastic.co/registration">Elastic Cloud Trial</a>, and check out the documentation for Agent Builder <a href="https://www.elastic.co/docs/solutions/search/elastic-agent-builder">here</a>, and Workflows <a href="https://cloud.elastic.co/registration">here</a>.</p>
]]></content:encoded>
            <category>security-labs</category>
            <enclosure url="https://www.elastic.co/security-labs/assets/images/from-alert-fatigue-to-agentic-response/photo-edited-03.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>