<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[James Spiteri - Elastic Security Labs]]></title>
    <description><![CDATA[Trusted security news & research from the team at Elastic.]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[James Spiteri - Elastic Security Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte2c6b841aff36df4/6a88d9784acc96e3f324863d/security-labs-thumbnail.png</url>
      <link>https://www.elastic.co/security-labs/author/james-spiteri</link>
    </image>
    <link>https://www.elastic.co/security-labs/author/james-spiteri</link>
    <atom:link href="https://www.elastic.co/security-labs/rss/author/james-spiteri.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[en]]></language>
    <lastBuildDate>Tue, 22 Sep 2026 09:15:25 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Speeding APT Attack Confirmation with Attack Discovery, Workflows, and Agent Builder]]></title>
    <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: "<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>." Your CISO sends a Slack message: "Are we affected?"</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: "Malware with DLL Side-Loading Persistence." 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: "Already confirmed and triaged. The case is open. Here's the link."</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 id="thethreatchrysalisbackdoorbylotusblossom">The threat: Chrysalis backdoor by Lotus Blossom</h2>
<h3 id="threatactorprofile">Threat actor profile</h3>
<p>| Attribute | Details |
| :---- | :---- |
| <strong>Name</strong> | Lotus Blossom (aka Billbug, Raspberry Typhoon, Spring Dragon) |
| <strong>Origin</strong> | China (state-sponsored) |
| <strong>Active Since</strong> | 2009 |
| <strong>Motivation</strong> | Espionage |
| <strong>Target Sectors</strong> | Government, Telecom, Aviation, Critical Infrastructure, Media |
| <strong>Target Regions</strong> | Southeast Asia, Central America |</p>
<h3 id="campaignoverview">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 "Chrysalis" backdoor  </li>
<li><strong>Discovery:</strong> Rapid7 MDR team, published 2026-02-02</li>
</ul>
<h3 id="chrysalisbackdoorcapabilities">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 id="attackchain">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 id="mitreattckmapping">MITRE ATT&amp;CK mapping</h3>
<p>| Tactic | Technique | ID |
| :---- | :---- | :---- |
| Initial Access | Supply Chain Compromise | T1195.002 |
| Execution | User Execution | T1204.002 |
| Persistence | Windows Service | T1543.003 |
| Defense Evasion | DLL Side-Loading | T1574.002 |
| Command &amp; Control | DNS | T1071.004  |</p>
<h2 id="thechallengespeedvsaccuracy">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>. "Are we compromised?"</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 id="thesolutionattackdiscoveryworkflowsagentbuilder">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 id="agentsworkflowstwoentrypointsonecomposablearchitecture">Agents &amp; Workflows: Two entry points, one composable architecture</h3>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt98a6fa44038416a1/6a7d845033fa8abd131ff9c2/image7.png" alt="Diagram showing the composable relationship between Agents and Workflows" title="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 id="ourflow">Our Flow</h3>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfd64249fef405090/6a7d845333fa8a57e61ff9c6/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 id="step1attackdiscoverysurfacesthethreat">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 id="thealertqueueneedleinahaystack">The alert queue: Needle in a haystack</h3>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf33bc139026a0ead/6a7d845777b034f16e3fc693/image4.png" alt="Shows the raw Elastic Security alerts table with dozens of alerts across different rules, severities, hosts, and users." title="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 id="whatattackdiscoveryfound">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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3419279f4cf1ecb7/6a7d845a05b7b5615a188ba1/image6.png" alt="Shows the Attack Discovery showing a summary of the correlated attack" title="Shows the Attack Discovery showing a summary of the correlated attack" /></p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd7d0a0aa72598f1e/6a7d845d73d9bd0f3c29ac56/image11.png" alt="Shows the Attack Discovery view with the correlated attack: 5 alerts, all critical, tied to a host and user." title="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 id="step2scheduleddiscoverytriggerstheworkflow">Step 2: Scheduled discovery triggers the workflow</h2>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt464fa1ad1a84c3fe/6a7d845f5588ad3fa8ee4348/image2.png" alt="Shows Attack Discovery’s scheduling page where users can schedule attack discovery to run at desired intervals." title="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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf2eff3b790159397/6a7d84625588ad6992ee434e/image8.png" alt="Shows Attack Discovery schedule editor linked to specific workflows." title="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>"figure it out."</em></p>
<h3 id="workflowdefinition">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: "POST"
      path: "/api/agent_builder/converse"
      headers:
        kbn-xsrf: "true"
      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: "POST"
      path: "/api/agent_builder/converse"
      headers:
        kbn-xsrf: "true"
      body:
        conversation_id: "{{ steps.initial_analysis.output.conversation_id }}"
        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 id="whythisworkflowissoshort">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 id="underthehoodhowweextendedthethreathuntingagent">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 id="whatweadded">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>
<p>| Tool | Type | What It Does |
| :---- | :---- | :---- |
| <code>vt.hash.lookup</code> | Workflow (custom) | Analyze a file hash with VirusTotal |
| <code>check.on.call.schedule</code> | Workflow (custom) | Query the on-call schedule to find the current responder |
| <code>create.case</code> | Workflow (custom) | Create a case in Elastic Security |
| <code>create.channel</code> | Workflow (custom) | Create a Slack channel for incident coordination |
| <code>get.time</code> | Workflow (custom) | Get the current time for naming and timestamps |</p>
<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 id="theagentsreasoningchain">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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3db8631a1158e818/6a7d846533fa8ab5d41ff9ca/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." title="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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt555f1c1cfc1a92f0/6a8c63e940a18447e1ef4af4/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 id="whythismatters">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 id="step3automatedincidentresponse">Step 3: Automated incident response</h2>
<p>With high-confidence confirmation, the workflow automatically:</p>
<h3 id="1createsanincidentcase">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 id="2notifiesthesoc">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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc481915cd6e7e688/6a7d84685967e5a50d5da591/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." title="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 id="3enablesresponseactions">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 id="timetoconfirmationbeforeandafter">Time-to-confirmation: Before and after</h2>
<p>| Metric | Manual Process | Automated Pipeline |
| :---- | :---- | :---- |
| Alert Correlation | 30-60 minutes | Instant (Attack Discovery) |
| IOC Extraction | 15-30 minutes | Instant (Workflow) |
| VirusTotal Lookup | 10-15 minutes | 5 seconds (API) |
| Threat Intel Correlation | 30-60 minutes | 10 seconds (ES|QL Query) |
| Attack Attribution | 1-4 hours | 30 seconds (Agent Builder) |
| Incident Creation | 15-30 minutes | Instant (Workflow) |
| SOC Notification | 5-10 minutes | Instant (Connector) |
| <strong>Total Time</strong> | <strong>2-6 hours</strong> | <strong>&lt; 4 minutes</strong> |</p>
<hr />
<h2 id="theotherpathjustasktheagent">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 id="scenarioyoureadaboutthethreatfirst">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://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf94109eee5e4f6d0/6a7d846c437e0ffc56dd860a/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 id="whythischangesthegameforanalysts">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 "knows ES|QL and 47 index patterns" to "can describe what they're looking for."</p>
<h2 id="keytakeaways">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>
    <link>https://www.elastic.co/security-labs/blog/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder</link>
    <guid isPermaLink="false">speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder</guid>
    <category><![CDATA[AI & Automation]]></category>
    <dc:creator><![CDATA[James Spiteri,Dhrumil Patel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte8bc63dd59c64474/6a7d846f2541c4802860f98f/photo-edited-08.png" length="0" type="image/png"/>
    <pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Operation Bleeding Bear]]></title>
    <description><![CDATA[Elastic Security verifies new destructive malware targeting Ukraine: Operation Bleeding Bear]]></description>
    <content:encoded><![CDATA[<h2 id="keytakeaways">Key Takeaways</h2>
<ul>
<li>Elastic Security provides new analysis and insights into targeted campaign against Ukraine organizations with destructive malware reported over the weekend of Jan 15, 2022</li>
<li>Techniques observed include process hollowing, tampering with Windows Defender, using a Master Boot Record (MBR) wiper, and file corruptor component</li>
<li>Elastic Security prevents each stage of the described campaign using prebuilt endpoint protection features</li>
</ul>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd47726842e5370a3/6a7c8f95e3a219729999999f/operation-bleeding-bear-image16.jpg" alt="" /></p>
<h2 id="overview">Overview</h2>
<p>Over this past weekend (1/15/2022), Microsoft released details of a new <a href="https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/">campaign targeting Ukrainian government entities</a> and organizations with destructive malware. In a multi-staged attack, one malware component known as WhisperGate utilizes a wiping capability on the Master Boot Record (MBR), making any machine impacted inoperable after boot-up.</p>
<p>Within another stage, a file infector component is used to corrupt files in specific directories with specific file extensions. The elements used in this campaign lack the common characteristics of a ransomware compromise – in this case the adversary uses the same Bitcoin address for each victim and offers no sign of intent to decrypt the victim’s machine.</p>
<p>The Ukrainian National Cyber Security Coordination Center has been referring to this threat activity on its official <a href="https://twitter.com/ncsccUA/status/1482733473228013569?s=20">Twitter</a> and <a href="https://www.facebook.com/ncsccUA/posts/449966023412420">Facebook</a> accounts as Operation Bleeding Bear.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3cb5c4f2bc03cea2/6a7c8f985967e55c745d7783/operation-bleeding-bear-image12.jpg" alt="Translation: Update information on the cyber attack on January 13-14 on Ukrainian infrastructure. For a coordinated response report the incident: report@ncscc.gov.ua" title="Translation: Update information on the cyber attack on January 13-14 on Ukrainian infrastructure. For a coordinated response report the incident: report@ncscc.gov.ua" /></p>
<p><strong>Elastic users are fully protected</strong> from attacks like these through our advanced malware detection and Ransomware Protection capabilities in the platform. The Elastic Security team continues to monitor these events. This case highlights the importance of prevention when it’s up against ransomware and malware with destructive capabilities.</p>
<h3 id="stage1whispergatembrpayload">Stage 1: WhisperGate MBR payload</h3>
<p>The Master Boot Record (MBR) is software that executes stored start-up information and, most importantly, informs the system of the location of the bootable partition on disk that contains the user’s operating system. If tampered with, this can result in the system being inoperable – a common tactic for malware and ransomware campaigns over the years to interrupt operation of the infected system.</p>
<p>The stage 1 binary is named stage1.exe and has low complexity. A 8192 byte buffer containing the new MBR data that includes the ransom note is allocated on the stack. A file handle is retrieved from <strong>CreateFileW</strong> pointing to the first physical drive which represents the MBR. That file handle is then called by <strong>WriteFile</strong> which takes only 512 bytes from the buffer writing over the Master Boot Record.</p>
<h2 id="malwareanalysisbreakdownstages14">Malware analysis breakdown (Stages 1-4)</h2>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt40d81b144ecf2479/6a7c8f9b33fa8a109d1fcbdc/operation-bleeding-bear-image2.jpg" alt="" /></p>
<p>The host is subsequently rendered inoperable during the next boot-up sequence. Below is a screenshot showing the ransom note from an affected virtual machine.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbfb081c21a1e26fd/6a7c8f9d77b034031b3f981e/operation-bleeding-bear-image3.jpg" alt="" /></p>
<p>Contained within the ransom note are instructions soliciting payment to a bitcoin wallet address of <a href="https://www.blockchain.com/btc/address/1AVNM68gj6PGPFcJuftKATa4WLnzg8fpfv">1AVNM68gj6PGPFcJuftKATa4WLnzg8fpfv</a>. The wallet does not appear to have received funds from victims as of the publication of this post.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt64215d023b6f3e75/6a7c8fa08fc2d031e73e8b20/operation-bleeding-bear-image5.jpg" alt="" /></p>
<h3 id="stage23discorddownloaderandinjector">Stage 2/3: Discord downloader and injector</h3>
<p>Once the payload has gained a foothold, further destructive capabilities are facilitated by the stage 2 binary, called stage2.exe. This binary pulls down and launches a payload hosted via the Discord content delivery network, a <a href="https://www.riskiq.com/blog/external-threat-management/discord-cdn-abuse-malware/">recently</a> <a href="https://www.zscaler.com/blogs/security-research/discord-cdn-popular-choice-hosting-malicious-payloads">reported</a> approach which is increasingly being used by malicious actors.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt62f760184f3ad3b8/6a7c8fa3bd219801087524c5/operation-bleeding-bear-image1.jpg" alt="" /></p>
<p>The obfuscated .NET payload (described as Stage 3 below) is then executed in memory, setting off a number of events including:</p>
<ul>
<li>Writing and executing a VBS script that uses PowerShell to add a Windows Defender exclusion on the root directory (C:)</li>
</ul>
<pre><code>Writing and executing a VBS script

"C:\Windows\System32\WScript.exe""C:\Users\jim\AppData\Local\Temp\Nmddfrqqrbyjeygggda.vbs"
</code></pre>
<pre><code>Uses PowerShell to add a Windows Defender exclusion

powershell.exe Set-MpPreference -ExclusionPath 'C:\'
</code></pre>
<p><a href="https://www.nirsoft.net/utils/advanced_run.html">AdvancedRun</a>, a program used to run Windows applications with different settings, is then dropped to disk and executed in order to launch the Service Control Manager and stop the Windows Defender service (WinDefend).</p>
<pre><code>AdvancedRun is used to stop Windows Defender

"C:\Users\jim\AppData\Local\Temp\AdvancedRun.exe" /EXEFilename "C:\Windows\System32\sc.exe" `
  /WindowState 0 /CommandLine "stop WinDefend"  /StartDirectory "" /RunAs 8 /Run
</code></pre>
<p>AdvancedRun is used again when launching PowerShell to recursively delete the Windows Defender directory and its files.</p>
<pre><code>AdvancedRun deleting the Windows Defender directory

"C:\Users\jim\AppData\Local\Temp\AdvancedRun.exe" `
  /EXEFilename "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" /WindowState 0 `
  /CommandLine "rmdir 'C:\ProgramData\Microsoft\Windows Defender' -Recurse" `
  /StartDirectory "" /RunAs 8 /Run
</code></pre>
<p>Copies InstallUtil.exe is a command-line utility that allows users to install and uninstall server resources from the local machine into the user’s %TEMP% directory. This action leverages the file for <a href="https://www.elastic.co/blog/ten-process-injection-techniques-technical-survey-common-and-trending-process">process hollowing</a> by launching it in a suspended state.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta82f4eaa047fdbc8/6a7c8fa6fc63ab773c6471cf/operation-bleeding-bear-image14.jpg" alt="" /></p>
<p>It then proceeds to allocate memory (VirtualAllocEx , write the file corruptor payload (described as the Final Stage below) into memory (WriteProcessMemory), modify the thread entry point (SetThreadContext) to point to the file corruptor entry point, and start execution of the file corruptor (ResumeThread).</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt76b6958d657c2fa7/6a7c8fa93ce8e2217ecef975/operation-bleeding-bear-image8.jpg" alt="" /></p>
<h3 id="finalstagefilecorruptor">Final stage: File corruptor</h3>
<p>The final file corruptor payload is loaded in memory via process hollowing to the InstallUtil process. The file corruptor:</p>
<ul>
<li>Targets any local hard drives, attached USB drives, or mounted network shares</li>
<li>Scans directories for files matching internal hard-coded extension list (excluding the Windows folder)</li>
</ul>
<pre><code>.3DM .3DS .602 .7Z .ACCDB .AI .ARC .ASC .ASM .ASP .ASPX .BACKUP .BAK .BAT .BMP .BRD
.BZ .BZ2 .C .CGM .CLASS .CMD .CONFIG .CPP .CRT .CS .CSR .CSV .DB .DBF .DCH .DER .DIF
.DIP .DJVU.SH .DOC .DOCB .DOCM .DOCX .DOT .DOTM .DOTX .DWG .EDB .EML .FRM .GIF .GO
.GZ .H .HDD .HTM .HTML .HWP .IBD .INC .INI .ISO .JAR .JAVA .JPEG .JPG .JS .JSP .KDBX
.KEY .LAY .LAY6 .LDF .LOG .MAX .MDB .MDF .MML .MSG .MYD .MYI .NEF .NVRAM .ODB .ODG .ODP
.ODS .ODT .OGG .ONETOC2 .OST .OTG .OTP .OTS .OTT .P12 .PAQ .PAS .PDF .PEM .PFX .PHP .PHP3
.PHP4 .PHP5 .PHP6 .PHP7 .PHPS .PHTML .PL .PNG .POT .POTM .POTX .PPAM .PPK .PPS .PPSM .PPSX
.PPT .PPTM .PPTX .PS1 .PSD .PST .PY .RAR .RAW .RB .RTF .SAV .SCH .SHTML .SLDM .SLDX .SLK
.SLN .SNT .SQ3 .SQL .SQLITE3 .SQLITEDB .STC .STD .STI .STW .SUO .SVG .SXC .SXD .SXI .SXM
.SXW .TAR .TBK .TGZ .TIF .TIFF .TXT .UOP .UOT .VB .VBS .VCD .VDI .VHD .VMDK .VMEM .VMSD
.VMSN .VMSS .VMTM .VMTX .VMX .VMXF .VSD .VSDX .VSWP .WAR .WB2 .WK1 .WKS .XHTML .XLC .XLM
.XLS .XLSB .XLSM .XLSX .XLT .XLTM .XLTX .XLW .YML .ZIP
</code></pre>
<ul>
<li>Overwrites the start of each targeted file with 1MB of static data (byte 0xCC), regardless of file size</li>
<li>Renames each targeted file to a randomized extension</li>
<li>Deletes self with the command:</li>
</ul>
<pre><code>Overwriting, renaming, and deleting files

cmd.exe /min /C ping 111.111.111.111 -n 5 -w 10 &gt; Nul &amp; Del /f /q &lt;running process path&gt;
</code></pre>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdfe64d00516e3841/6a7c8facfc63ab71b56471d5/operation-bleeding-bear-image9.jpg" alt="" /></p>
<h2 id="mbrprotectionwithelasticsecurity">MBR protection with Elastic Security</h2>
<p>Changes to the MBR are particularly strong signals of anomalous and destructive activity typically associated with ransomware. To counteract this, Elastic security researchers built an MBR protection component based around these signals into our multi-layered ransomware protection feature.</p>
<p>When a process attempts to overwrite the contents of the MBR, the prewrite buffer and other associated process metadata will be analyzed inline before any changes are written to disk. If the activity is deemed malicious in nature, the process will either be terminated immediately (prevention mode) and / or an appropriate ransomware alert will be generated (prevention and detection modes) to allow security operators time to respond.</p>
<p>When configured in prevention mode, Elastic Security’s ransomware protection ensures that the integrity of the MBR is fully preserved, with no changes ever reaching disk thanks to the synchronous framework leveraged by the feature — effectively preventing the ransomware attack in their tracks as the offending process is terminated.</p>
<p>When WriteFile is invoked on PhysicalDrive0 on a host running Elastic Security with ransomware protection enabled, the pending change will immediately be analyzed and deemed malicious. Afterwards, the process will be terminated, the endpoint user will be alerted via a popup notification, and a ransomware prevention alert will be sent to and stored in Elasticsearch. The intended ransom note can be easily deciphered after Base64 decoding the contents of the prewrite buffer found in the alert within Kibana.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2e0082968342c3e1/6a7c8faf80ee38600860d36b/operation-bleeding-bear-image13.jpg" alt="" /></p>
<p>It is important to note that while this behaviour is detected by Elastic, it is not specific to this payload and rather the behaviour the payload is exhibiting. This increases our chance of being able to detect and prevent malicious behaviors, even when a static signature of the malware is not known. Threat actors find this kind of control more difficult to evade than traditional, signature-based detection and prevention approaches.</p>
<h2 id="observingwhispergateinelasticsecurity">Observing WhisperGate in Elastic Security</h2>
<p>By observing the process hash of the stage 1 dropper above (a196c6b8ffcb97ffb276d04f354696e2391311db3841ae16c8c9f56f36a38e92) via the process.hash function within Elastic Security, we can isolate the ransomware alert and analyze the blocked attempt at overwriting the MBR.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt511bbc1e8bda140e/6a7c8fb142a117356495637d/operation-bleeding-bear-image7.png" alt="" /></p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt59903c484bcd81e4/6a7c8fb4bd2198a5237524db/operation-bleeding-bear-image4.jpg" alt="" /></p>
<p>As we can see, the data is stored as a Base64 encoded string in Elasticsearch. Decoded, we can see the contents of the ransom note that would be displayed to the end user of an affected system.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb1a03adb9bc17ce6/6a7c8fb75967e5507c5d778b/operation-bleeding-bear-image6.png" alt="" /></p>
<h2 id="alertbreakdownanddefensiverecommendations">Alert breakdown and defensive recommendations</h2>
<p>The following alerts were triggered in Elastic Security during our investigations:</p>
<h3 id="endpointsecurityintegrationalerts">Endpoint Security Integration Alerts</h3>
<h4 id="stage1mbrwiper">Stage 1 - MBR Wiper</h4>
<p>(a196c6b8ffcb97ffb276d04f354696e2391311db3841ae16c8c9f56f36a38e92)</p>
<ul>
<li>Malware Prevention Alert</li>
<li>Ransomware Prevention Alert (MBR overwrite)</li>
</ul>
<h4 id="stage2downloader">Stage 2 - Downloader</h4>
<p>(dcbbae5a1c61dbbbb7dcd6dc5dd1eb1169f5329958d38b58c3fd9384081c9b78)</p>
<ul>
<li>Malware Prevention Alert</li>
</ul>
<h4 id="stage3stage4injectorfilecorruptor">Stage 3 + Stage 4 - Injector/File Corruptor</h4>
<p>(34CA75A8C190F20B8A7596AFEB255F2228CB2467BD210B2637965B61AC7EA907)</p>
<ul>
<li>Ransomware Prevention Alert (canary files)</li>
<li>Malicious Behaviour Prevention Alert - Binary Masquerading via Untrusted Path</li>
<li>Memory Threat Prevention Alert</li>
</ul>
<h3 id="prebuiltdetectionenginealerts">Prebuilt Detection Engine Alerts</h3>
<p>The following existing <a href="https://github.com/elastic/detection-rules">public detection rules</a> can also be used to detect some of the employed techniques:</p>
<ul>
<li><a href="https://github.com/elastic/detection-rules/blob/main/rules/windows/execution_suspicious_cmd_wmi.toml">Suspicious Execution via Windows Management Instrumentation (WMI)</a></li>
<li><a href="https://github.com/elastic/detection-rules/blob/main/rules/windows/defense_evasion_defender_exclusion_via_powershell.toml">Windows Defender Exclusions Added via PowerShell</a></li>
<li><a href="https://github.com/elastic/detection-rules/blob/main/rules/windows/command_and_control_common_webservices.toml">Connection to Commonly Abused Web Services</a></li>
<li><a href="https://github.com/elastic/detection-rules/blob/main/rules/windows/execution_from_unusual_directory.toml">Process Execution from an Unusual Directory</a></li>
<li><a href="https://github.com/elastic/detection-rules/blob/82ec6ac1eeb62a1383792719a1943b551264ed16/rules/windows/initial_access_script_executing_powershell.toml">Windows Script Executing PowerShell</a></li>
<li><a href="https://github.com/elastic/detection-rules/blob/ef7548f04c4341e0d1a172810330d59453f46a21/rules/windows/defense_evasion_disabling_windows_defender_powershell.toml">Disabling Windows Defender Security Settings via PowerShell</a></li>
</ul>
<h3 id="huntingqueries">Hunting queries</h3>
<p>Detect attempt to tamper with Windows defender settings via <a href="https://www.nirsoft.net/utils/advanced_run.html">NirSoft AdvancedRun</a> executed by <a href="https://www.virustotal.com/gui/file/923eb77b3c9e11d6c56052318c119c1a22d11ab71675e6b95d05eeb73d1accd6/community">the Stage 3 injector</a>:</p>
<pre><code>Detect attempts to tamper with Windows Defender

process where event.type == "start" and
process.pe.original_file_name == "AdvancedRun.exe" and
process.command_line :
   ("*rmdir*Windows Defender*Recurse*",
    "*stop WinDefend*")
</code></pre>
<p>Masquerade as InstallUtil via code injection:</p>
<pre><code>Identifies code injection with InstallUtil

process where event.type == "start" and
process.pe.original_file_name == "InstallUtil.exe" and
not process.executable : "?:\\Windows\\Microsoft.NET\\*"
</code></pre>
<h2 id="mitreattck">MITRE ATT&amp;CK</h2>
<ul>
<li><a href="https://attack.mitre.org/techniques/T1561/002/">T1561.002 - Disk Structure Wipe</a></li>
<li><a href="https://attack.mitre.org/techniques/T1562/001/">T1562.001 - Disable or Modify Tools</a></li>
<li><a href="https://attack.mitre.org/techniques/T1047/">T1047 - Windows Management Instrumentation</a></li>
<li><a href="https://attack.mitre.org/techniques/T1102/">T1102 - Web Service</a></li>
<li><a href="https://attack.mitre.org/techniques/T1055/">T1055 - Process Injection</a></li>
<li><a href="https://attack.mitre.org/techniques/T1027/">T1027 - Obfuscated Files or Information</a></li>
</ul>
<h2 id="summary">Summary</h2>
<p>These targeted attacks on Ukraine using destructive malware match a similar pattern observed in the past such as <a href="https://www.wired.com/story/notpetya-cyberattack-ukraine-russia-code-crashed-the-world/">NotPetya</a>. By leveraging different malware components to wipe machines and corrupt files, it’s apparent there was no intent to recover any funds, but likely a technique used to sow chaos and doubt into Ukraine’s stability.</p>
<p>As these events are still ongoing, we wanted to release some initial analysis and observations from our perspective. We also wanted to highlight the prevention capabilities of Elastic Security across each stage of this attack, available to everyone today.</p>
<p>Existing Elastic Security users can access these capabilities within the product. If you’re new to Elastic Security, take a look at our <a href="https://www.elastic.co/training/free#quick-starts">Quick Start guides</a> (bite-sized training videos to get you started quickly) or our <a href="https://www.elastic.co/training/free#fundamentals">free fundamentals training courses</a>. You can always get started with a <a href="https://cloud.elastic.co/registration?elektra=whats-new-elastic-security-7-16-blog">free 14-day trial of Elastic Cloud</a>.</p>
<h2 id="indicators">Indicators</h2>
<p>| Indicator                                                        | Type   | Note                         |
| ---------------------------------------------------------------- | ------ | ---------------------------- |
| a196c6b8ffcb97ffb276d04f354696e2391311db3841ae16c8c9f56f36a38e92 | SHA256 | Stage1.exe (MBR wiper)       |
| dcbbae5a1c61dbbbb7dcd6dc5dd1eb1169f5329958d38b58c3fd9384081c9b78 | SHA256 | Stage2.exe (Downloader)      |
| 923eb77b3c9e11d6c56052318c119c1a22d11ab71675e6b95d05eeb73d1accd6 | SHA256 | Stage3 (Injector - original) |
| 9ef7dbd3da51332a78eff19146d21c82957821e464e8133e9594a07d716d892d | SHA256 | Stage3 (Injector - fixed)    |
| 34CA75A8C190F20B8A7596AFEB255F2228CB2467BD210B2637965B61AC7EA907 | SHA256 | Stage4 (File Corruptor)      |</p>
<h2 id="artifacts">Artifacts</h2>
<p>Artifacts are also available for <a href="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc57bd32cdaea24f7/628e88d8b385dc5352428ffc/bleeding-bear-indicators.zip">download</a> in both ECS and STIX format in a combined zip bundle.</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/threat-command/operation-bleeding-bear</link>
    <guid isPermaLink="false">operation-bleeding-bear</guid>
    <category><![CDATA[Threat Intelligence]]></category>
    <dc:creator><![CDATA[Daniel Stepanic,James Spiteri,Joe Desimone,Mark Mager,Andrew Pease]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt47240820e968176e/6a7c8fbbe02fac681c5d0775/bleeding-bear.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 06 Dec 2022 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>