<?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[SOC - 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[SOC - 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/blog/category/soc</link>
    </image>
    <link>https://www.elastic.co/security-labs/blog/category/soc</link>
    <atom:link href="https://www.elastic.co/security-labs/rss/category/soc.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[en]]></language>
    <lastBuildDate>Tue, 15 Sep 2026 21:38:08 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Data access: the hidden cost of security vendor lock-in]]></title>
    <description><![CDATA[Getting data into a security platform is always easy; getting it back out is where vendors add cost, extra tooling, and latency, and it is the part of the evaluation most teams overlook.]]></description>
    <content:encoded><![CDATA[<p>Your security data is the most important asset in your SOC. Not the dashboards, not the detections, not the AI features on the roadmap slide. The data. And most vendors make you pay, wait, or license your way to getting it back out. Every investigation your analysts run, every model you train, every agent you deploy is only as good as the telemetry underneath it. So here is the question I want you to ask every vendor in your stack: if I want my data, right now, what does that take?</p><p>Most vendors cannot answer it cleanly. And the answer matters more than almost anything else on the RFP.</p><h2><strong>What open actually means</strong></h2><p>The industry has gotten comfortable treating “open” as a checkbox. Support an open schema, publish an API, sponsor a standard, done. But a standard tells you how data is shaped. It tells you nothing about whether you can actually get it. Open data means three things, and you need all three:</p><p><strong>It is yours, at no additional cost.</strong> You generated this telemetry. You paid to collect it, and you paid to store it. If your vendor charges you a second time to access it, that is not a data feature. That is a toll booth on your own driveway.</p><p><strong>It is all of your data.</strong> Not the alerts. Not a normalized summary. Not the tables the vendor decided are ready. The full-fidelity record because you cannot predict today which field matters in next year’s investigation.</p><p><strong>It is real time.</strong> This one used to be a nice-to-have. Not anymore. <a href="https://www.crowdstrike.com/en-us/global-threat-report/">CrowdStrike’s own 2026 Global Threat Report </a>clocked the average eCrime breakout time at 29 minutes, the fastest at 27 seconds, and one intrusion where exfiltration started four minutes after initial access. Attackers are moving faster too, using AI to shorten the gap between breaking in and doing real damage. If your telemetry arrives in batches, minutes apart, the attack can be over before your data shows up. You would not accept a smoke detector that checks for fire twice an hour.</p><p>When a vendor fails any of these three, they are not protecting your data. They are building an artificial moat with it. Ingestion is always frictionless. Egress is licensed, delayed, or degraded. That asymmetry is not an accident of engineering. It is the business model, and the industry has a name for it: lock-in.</p><h2><strong>What the documentation actually says</strong></h2><p>Don’t take our word for it. Every claim in this table links to the vendor’s own documentation. Read it yourself, and hold us to the same bar.</p><p><strong>Vendor</strong></p><p><strong>How you get your data out</strong></p><p><strong>Cost to access your data</strong></p><p><strong>Freshness</strong></p><p><strong>Fidelity</strong></p><p><strong>Openness</strong></p><p><strong>CrowdStrike</strong></p><p><a href="https://developer.crowdstrike.com/accomplish/stream-and-analyze-data/">Falcon Data Replicator</a>: batched file export to object storage</p><p><a href="https://www.crowdstrike.com/en-us/resources/data-sheets/falcon-data-replicator/">Licensed add-on</a></p><p>Bulk batches, not a live stream; <a href="https://www.crowdstrike.com/en-us/blog/crowdstrike-falcon-and-humio-leverage-all-your-fdr-data-in-one-place/">deleted after 7 days</a> for CrowdStrike managed-buckets</p><p>Raw telemetry is only available via FDR; the <a href="https://developer.crowdstrike.com/accomplish/stream-and-analyze-data/">event stream API</a> sends detections, not telemetry</p><p><strong>Restricted</strong></p><p><strong>Palo Alto Networks</strong></p><p>XSIAM <a href="https://cortex-docs.paloaltonetworks.com/cortex-xsiam/configure-cortex-xsiam/data-management/manage-event-forwarding">Event Forwarding</a>: batch files to a Palo Alto-managed bucket</p><p><a href="https://cortex-docs.paloaltonetworks.com/cortex-xsiam/learn-about-cortex-xsiam/cortex-xsiam-product-licenses">Two paid Event Forwarding add-ons</a>: GB and Endpoint</p><p><a href="https://cortex-docs.paloaltonetworks.com/cortex-xsiam/configure-cortex-xsiam/data-management/manage-event-forwarding">Batch; up to 2 hours to appear; kept 14 days</a></p><p>Endpoint and log data <a href="https://cortex-docs.paloaltonetworks.com/cortex-xsiam/learn-about-cortex-xsiam/cortex-xsiam-product-licenses">split across the two add-ons</a></p><p><strong>Restricted</strong></p><p><strong>Microsoft</strong></p><p>Defender <a href="https://learn.microsoft.com/en-us/defender-xdr/streaming-api">streaming API</a>; Sentinel <a href="https://learn.microsoft.com/en-us/azure/azure-monitor/logs/logs-data-export">data export</a></p><p>Streaming: pay Azure infra; <a href="https://learn.microsoft.com/en-us/azure/azure-monitor/logs/logs-data-export">Sentinel export billed per GB</a></p><p><a href="https://learn.microsoft.com/en-us/defender-xdr/api-overview">Real-time stream</a> (via Azure Event Hubs)</p><p><a href="https://learn.microsoft.com/en-us/defender-xdr/supported-event-types">Generally-available fields only</a>; Azure destinations only</p><p><strong>Partially open</strong></p><p><strong>Google</strong></p><p><a href="https://docs.cloud.google.com/chronicle/docs/reference/data-export-api-enhanced">Bulk export</a> to your storage, or a <a href="https://docs.cloud.google.com/chronicle/docs/reports/bigquery-export">continuous BigQuery feed</a></p><p>Export capped; <a href="https://docs.cloud.google.com/chronicle/docs/reports/bigquery-export">BigQuery billed by query</a></p><p><a href="https://docs.cloud.google.com/chronicle/docs/reports/bigquery-export">Live feed 5-10 min behind</a> (top tier only); raw export is point-in-time</p><p>Live feed is normalized only; no continuous raw path</p><p><strong>Limited</strong></p><p><strong>Splunk </strong></p><p><a href="https://help.splunk.com/en/splunk-cloud-platform/search/search-manual/9.3.2411/export-search-results/export-data-using-the-splunk-rest-api">Search/export REST API</a></p><p>Included</p><p>On-demand query via <a href="https://help.splunk.com/en/splunk-cloud-platform/search/search-manual/9.3.2411/export-search-results/export-data-using-the-splunk-rest-api">export data API</a>; data available near-real-time</p><p>Full events returned as structured JSON</p><p><strong>Open</strong></p><p><strong>Elastic</strong></p><p>REST APIs including <a href="https://www.elastic.co/docs/solutions/search/the-search-api">Search</a>, <a href="https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-open-point-in-time">Point in time</a> and <a href="https://www.elastic.co/docs/reference/query-languages/esql/esql-rest">ES|QL</a></p><p>No export license or per-query export fee; <a href="https://www.elastic.co/docs/deploy-manage/cloud-organization/billing/cloud-hosted-deployment-billing-dimensions">Elastic Cloud applies ordinary cloud data-transfer metering</a>, not an egress toll</p><p>On-demand query via API; data available to query <a href="https://www.elastic.co/docs/manage-data/data-store/near-real-time-search">as soon as it is indexed</a></p><p>Full raw and parsed events, returned as structured JSON</p><p><strong>Open</strong></p><p><em>This table reflects each vendor's public documentation as of September 2026.</em></p><p></p><p>A note on the ratings, because we want them to be defensible, not convenient. Open means all three tests pass: no added cost, full fidelity, and no batch window between the moment data arrives and the moment you can use it. Data you can query the moment it lands clears that bar; a scheduled batch measured in minutes or hours does not. Partially open means the vendor genuinely tries but with real constraints; credit to Microsoft for a true streaming path, even if it covers only generally-available fields and only lands in Azure. Limited means the data comes back, but late or in a form only the vendor can read. Restricted means access to your own telemetry is a paid product, a delayed batch, or both.</p><p>And since Elastic is on this list too, as an endpoint agent and a SIEM, hold us to the same bar. Our rating is about live access: APIs that return JSON, with no license between you and your own telemetry. On Elastic Cloud you pay ordinary data-transfer rates like any cloud service. What you never pay is a license to reach data that was already yours.</p><p>If any vendor believes we have mischaracterized their documentation, I genuinely want to hear it, and we will correct it.</p><h2><strong>So what does this actually cost you?</strong></h2><p>Here is what that comparison means when it really counts, in the middle of an incident. Detection you cannot act on in time is not detection. When your telemetry arrives in scheduled batches, a window opens between the alert and the evidence. Sometimes minutes, sometimes longer, and in that window the attack is live while your data is not yet in front of you. You paid to collect that telemetry. You paid to store it. And at the one moment it matters, it is still in transit. Or worse, it is not there at all because exporting it requires a separate license. That’s the difference between stopping an intrusion and reading about it afterward.</p><p>You do not create that gap during an incident. You inherit it at purchase. You already run a strong endpoint agent. It works, and you trust it. Now that same vendor offers to be your SIEM as well. One console, one relationship, one invoice. There is nothing wrong with one vendor doing both. We do both at Elastic. The question is what it costs you to change your mind. So look closely at what it takes to move that endpoint telemetry somewhere other than their own platform. Every vendor makes it easy to get data in. Getting it back out is something you buy, then wait for.</p><p>It is rarely just one handoff. Most security environments are heterogeneous by design, with each layer chosen because it is good at its own job. Modern attacks move across all of them, from a stolen identity to a cloud workload to an endpoint, and you only see the full chain if the data from each can meet in one place, quickly and without a toll. When a vendor makes its telemetry expensive or slow to share, it is not just charging you. It’s fragmenting the picture, and a fragmented picture is exactly where intrusions hide. The all-in-one pitch offers to solve that. But the fragmentation was manufactured: vendors made their data hard to move, then sold you the one console where it comes back together. So before convenience makes the decision for you, ask three questions, and make the vendor answer them in writing:</p><ul><li><p>Can I get all of my telemetry out, continuously, without buying a separate license to do it?</p></li><li><p>How long, exactly, from the moment an event happens to the moment it is usable in a system I chose?</p></li><li><p>On the day I add a different analytics engine, a data lake, or a new AI model, what breaks?</p></li></ul><p>If the honest answers are “extra cost,” “in batches,” and “quite a lot,” then you are not buying a SIEM. You are renting access to your own data. The point is not that these layers must stay separate. Plenty of teams consolidate for good reasons, and we sell both layers ourselves. The point is that the choice should stay yours: you can add the analytics platform you want, or leave the one you have, without paying a toll or waiting on a batch to get your own data. The only reason to accept less is that a vendor made leaving hard enough that staying felt like a decision. It was not a decision. It was the absence of one.</p><h2><strong>The strategic question</strong></h2><p>Your SIEM is not a tool you bought. It is where isolated alerts become an attack story, and where you go to find out what actually happened. The vendor holding it is a strategic dependency, whether you planned it that way or not.</p><p>So evaluate them like one. Put data portability on the RFP, not in the demo, and score it on two things: what it costs to move your telemetry somewhere else, and how much delay it adds.</p><p>Because you cannot build a real-time defense on a delayed copy of your own telemetry, and you should not have to buy your data back to try.</p><p>It is your data. Any vendor who makes that complicated has told you what kind of partner they intend to be.</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/siem-data-export-comparison</link>
    <guid isPermaLink="false">siem-data-export-comparison</guid>
    <category><![CDATA[Security Operations]]></category>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Mike Nichols,Jamie Hynds]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt194a2b93239a98c3/6a9a90363481c2bd668af9b3/2189.png" length="0" type="image/png"/>
    <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[SOC case management and detection rule history in Elastic Security]]></title>
    <description><![CDATA[Elastic Security now tracks every detection rule change with one-click rollback and makes case data queryable out of the box, so SOC teams get audit trails and reporting without configuring anything.]]></description>
    <content:encoded><![CDATA[<p>Elastic Security now tracks every change to a detection rule and lets you roll back to any previous version with one click. The same history log gives compliance teams a timestamped audit trail that's immutable and append-only. Case data is queryable across 3 global indices (down from 12 per space), so SOC managers can build dashboards on closure rates, assignment load, and case volume without configuring anything. A rebuilt template system gives analysts structured, investigation-specific fields at case creation, so the data feeding those dashboards is consistent from the start.</p>
<h2 id="detectionrulechangehistorywithoneclickrollback">Detection rule change history with one-click rollback</h2>
<p>Detection rules change constantly. Analysts add exceptions, engineers tune them, detection logic shifts to adapt to new threats. Until now, that history was gone the moment it happened. If a reliable rule stopped firing, there was no built-in way to see what changed, who changed it, or when, which is a debugging problem and a compliance problem in one.</p>
<p>In 9.5, Detection Rules History Management ships as GA. A History section on the rule details page shows a complete, chronological log of every saved rule state: who made the change, when, and the revision number. From there, you can preview any historical revision, compare it to the previous version, and restore it with a single click.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf5597d4f0572f733/6a7d8432437e0fab30dd8606/image7.png" alt="" /></p>
<p>The log is immutable and append-only, and it captures changes made through the UI or the API. Compliance teams get a defensible, timestamped audit trail for ISO 27001, SOC 2, and DORA standards without any manual export or configuration. Detection engineers get a real undo button: no custom scripts, no digging through audit logs.</p>
<p>See it in action. Kseniia Ignatovych demonstrates the rule history log, version comparison, and one-click rollback in the short video below.</p>

<h2 id="soccasemanagementtemplatesandcaseanalytics">SOC case management: templates and case analytics</h2>
<p>Cases are where investigations land, but the data inside them has rarely been reliable enough to learn from. Custom fields were limited in type and count. The same fields appeared on every case regardless of what the analyst was investigating. Building dashboards required manual index configuration that most teams never completed, so case data stayed useful in the moment and hard to aggregate at scale.</p>
<p>In 9.5, we rebuilt the template system to fix how data goes in and made cases queryable out of the box for everything downstream.</p>
<h3 id="investigationspecificcasetemplateswithcustomfields">Investigation-specific case templates with custom fields</h3>
<p>Admins can now define templates for specific investigation types. A "Compromised Account" case collects different information than a "Service Outage" case. Admins build templates using a YAML editor with an Actions menu helper and a live preview panel. Analysts pick the right template for their investigation, see only the fields that apply, and fill in what's actually relevant.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0ec9deb434d523ba/6a7d8435227b1c3d95595858/image1.png" alt="YAML editor for a “Compromised Account” template" title="YAML editor for a “Compromised Account” template" /></p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt30cc7194b87c8c4e/6a7d8438920130cccc352cb0/image5.png" alt="“Compromised Account” template applied to a case" title="“Compromised Account” template applied to a case" /></p>
<p>The previous cap of 10 templates was a ceiling for enterprise SOCs managing phishing, malware, insider threat, compliance audits, and more. That limit is gone, along with the cap on custom fields. Seven new field types are also now available, including: </p>
<ul>
<li>Checkboxes  </li>
<li>Radio buttons  </li>
<li>A user picker  </li>
<li>A date/time picker </li>
</ul>
<p>Any field can be marked required before case closure, so regulated teams can enforce that fields like "Root Cause" or "Closing Reason" get filled in before a case closes. A Field Library lets admins define reusable fields once and apply them across templates.</p>
<h3 id="queryablecaseanalyticsoneverydeployment">Queryable case analytics on every deployment</h3>
<p>Cases as Data, Elastic Security's case analytics feature, exposes case activity in dedicated analytics indices so teams can build dashboards tracking case volume, closure rates, time to close, and assignment load, rather than relying on the case UI alone.</p>
<p>We shipped Cases as Data as a tech preview in 9.2, but it required manual configuration, wasn't available on Serverless, and had a complex index structure that wasn't ready for broad adoption. In 9.5, it's GA, on by default, and available across every deployment type including Serverless.</p>
<p>The architecture is simpler, too:</p>
<p>|  | Before 9.5 | 9.5 GA |
| :---- | :---- | :---- |
| Index architecture | 12 indices per space | 3 global indices |
| Configuration | Manual setup required | Auto-provisioned |
| Serverless | Not available | Available |
| Data views | Manual creation | Pre-built Case Analytics view per space |</p>
<p>SOC managers, IR leads, and SRE teams can build case reporting on any deployment without manual index configuration.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6b8675da33cac83d/6a7d843b5967e5768d5da589/image4.png" alt="Pre-built Cases Analytics Data View showing a snippet of case data available for analysis" title="Pre-built Cases Analytics Data View showing a snippet of case data available for analysis" /></p>
<h2 id="getstartedwithdetectionrulehistoryandcaseanalytics">Get started with detection rule history and case analytics</h2>
<p>Detection engineers have been working without rule change history. SOC managers have been working without case data they can report on. Both change in 9.5. </p>
<p>Reliable change history and queryable case data are not the loudest features in a release. They are the groundwork the next wave of SOC automation depends on.</p>
<p>See the documentation for <a href="https://www.elastic.co/docs/solutions/security/detect-and-alert/view-rule-changes-history">Detection rule change history</a>, <a href="https://www.elastic.co/docs/explore-analyze/cases/manage-case-templates">Case Templates</a>, and <a href="https://www.elastic.co/docs/explore-analyze/cases/case-analytics">Case Analytics</a> to get started. Try the new capabilities on your deployment, or <a href="https://www.elastic.co/cloud/cloud-trial-overview/security">start a free trial</a>. Connect with us on <a href="https://join.slack.com/t/elasticstack/shared_invite/zt-2sgssfr0n-NhTOlSwHbaGH85tYfx6kGg">Elastic's community Slack</a> to share feedback or tell us what you are building and how we can help.</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/soc-case-management-detection-rule-history</link>
    <guid isPermaLink="false">soc-case-management-detection-rule-history</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Kseniia Ignatovych,Melissa Burpo]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1ec159b5996133b3/6a7d843eead8eca6b5ba7b7e/image3.png" length="0" type="image/png"/>
    <pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Your UEBA is lying to you: Why entity record quality decides everything]]></title>
    <description><![CDATA[Most entity analytics systems are confidently wrong. They track users who do not exist, generate risk scores built on noise, and call it behavioral analytics. Learn why the entities records you don't create matter as much as the ones you do and how a confidence-tiered model changes the game.]]></description>
    <content:encoded><![CDATA[<p>There's an uncomfortable truth in security analytics that nobody talks about at conferences: The quality of your detections, alerts, and investigations is only as good as the entity records that represent the users, hosts, and services in your environment.</p>
<p>Not the machine learning models. Not the anomaly detection algorithms. Not the risk scoring engine. The <em>entities</em>: the foundations to teach your system about the data and protect it.</p>
<p>Get the entities wrong, and everything downstream is contaminated, including AI. Your baselines are fiction. Your risk scores are noise. Your analysts are chasing ghosts. And the worst part? Most user and entity behavior analytics (UEBA) implementations get the entities wrong from day one. This blog explains why the entities you <em>don't</em> create matter and how a confidence-tiered model helps.</p>
<p>A note on terminology before we go further: in this piece we’ll distinguish between the real-world thing — a person, a host, a service — and the entity record Elastic Security creates to represent it. The argument that follows is about which records are worth creating, not about which things exist. We’ll use “entity record” when the distinction matters.</p>
<h2 id="oneusernamehundredsofidentities">One username, hundreds of identities</h2>
<p>Consider the simplest possible approach to creating a user entity record: Take a <code>user.name</code> field from an event log and call it an entity. A username like <code>deploy</code> appears in your telemetry, so you create a <code>deploy</code> entity record and start building a behavioral baseline.</p>
<p>The problem is immediate and severe. That <code>deploy</code> username might exist on 200 servers. It might be used by 12 engineers and a continuous integration and continuous deployment (CI/CD) pipeline. The behavioral baseline you're building is a smoothie blended from hundreds of different machines, used by different people, for completely different purposes. The system is treating a string match as an identity, barely one step above random.</p>
<p>When this entity record inevitably generates elevated risk scores, analysts investigate, only to discover that the "anomaly" was just a different engineer using the same shared account in a slightly different way. Multiply this across every common username in a large environment and you've built a system that generates investigative busywork at industrial scale.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta4511e63df7e9ea1/6a7d863fc2cc09e5442466f5/risk-table.png" alt="" /></p>
<p>The opposite mistake: An empty dashboard</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf8a5bc2932323a8e/6a7d86413ce8e22f2dcf26fe/risk-dashboard.png" alt="" /></p>
<p>Some security vendors recognize the problem and swing to the other extreme. They decide (correctly, in principle) that only identity-provider-backed entity records are trustworthy enough for behavioral analytics. If you can't tie an entity record to an authoritative account in a directory like Okta, Entra ID, or Active Directory, don't create one at all.</p>
<p>The engineering reasoning is defensible. The product experience is catastrophic.</p>
<p>A customer rolls out endpoint agents across their fleet, opens the security analytics dashboard, and sees nothing. Zero entities. The feature looks broken. The SOC analyst has no idea why no users are showing up, and worse, has no visibility into the activity happening on those endpoints right now. A purist entity data model has produced a blind spot. </p>
<h2 id="themissingmiddlehostscopedidentity">The missing middle: Host-scoped identity</h2>
<p>Most vendors building UEBA have historically picked between two unsatisfying defaults, bare usernames that blend everyone into noise, or IdP-only entities that leave most deployments with nothing. But without explicit governance over which signals come from which source, the noise still leaks through.What's missing is a middle layer: entities derived from endpoint telemetry that are tightly scoped enough to be meaningful but carefully governed enough to avoid the noise problem.</p>
<p>The instinct might be to simply pair a username with a host and call it an entity record. But without guardrails, this just moves the noise problem down one level. <code>deploy</code> on <code>prod-web-03</code> is still five engineers' blended activity. <code>root</code> on a shared bastion host is still everyone and no one. You've reduced the blast radius from "all servers" to "one server," but the behavioral baseline is still a fiction if the underlying account is shared, automated, or observed only through a failed brute-force attempt that never actually succeeded.</p>
<p>The real question isn't whether to create local host-scoped entity records. It's <em>which</em> host-scoped entity records are worth creating and with what governance over how they participate in risk scoring and identity resolution downstream.</p>
<h2 id="theelasticapproachtwokindsofentitiesgoverneddifferently">The Elastic approach: Two kinds of entities, governed differently</h2>
<p>One answer is to recognize that not all record sources are equal and to build that distinction into the architecture itself, governing how each record is created, enriched, scored, and resolved.</p>
<p>This is the approach Elastic Security takes. Instead of treating all entity records as interchangeable, the system draws a clear line between <strong>identity-provider-backed entities</strong> and <strong>endpoint-observed local host entities</strong> and governs each category differently under the hood.</p>
<p><strong>Identity-provider-backed entities</strong> are created only by authoritative identity systems: Okta, Entra ID, Google Workspace, Active Directory, and other identity-provider namespaces across identity and access management (IAM), cloud platforms, software as a service (SaaS), and privileged access management (PAM) systems. These entity records represent verified accounts in systems that own and manage those accounts. They get the full analytical treatment, that is, rich behavioral baselines, cross-platform enrichment from 120+ security integrations, and full participation in person-level risk scoring.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9cc53c92cf193f2c/6a7d86446693f850c666111e/entity-panel.png" alt="" /></p>
<p><strong>Endpoint-observed entities</strong> are created from endpoint telemetry: Your endpoint detection and response (EDR) agent observes <code>jdoe</code> active on a specific host and creates a host-scoped entity record tied to that local machine. These entity records are real and useful, but the system knows they carry less identity certainty, and it governs them accordingly. </p>
<p>Analysts don't need to think about any of this machinery. What they see is an entity store that's populated from day one with more accurate user entity records. The governance happens in the architecture so it doesn't have to happen in the analyst's head.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd7521418124d9690/6a7d864805b7b506d3188bf5/entities.png" alt="" /></p>
<p>(An endpoint-observed entity for sarah.chen active on her corporate MacBook. The entity name (sarah.chen\@CORP-MAC-SC-2024) uses the human-readable hostname for readability. The entity ID (user:sarah.chen\@b92f1e3a-7d4c-4a8b-9f2e-1c3d5e7f9012\@local) uses the machine's hardware UUID instead of its hostname — this is intentional. Hostnames change when a device is renamed or reimaged; the hardware UUID is permanent. The @local suffix identifies this as an endpoint-observed entity: it represents sarah.chen's activity on this specific machine, not sarah.chen as a verified identity across your organization.)</p>
<h2 id="fromfragmentedaccountstoaunifiedusergroupnbsp">From fragmented accounts to a Unified User Group. </h2>
<p>Even when you get entity record creation right, you’re still left with a fragmentation problem no amount of per-entity discipline can solve alone.</p>
<p>Consider John Doe in a large enterprise. He has an Okta account for SaaS access, an Entra ID account tied to his corporate laptop, and an Active Directory account for on-prem systems. Each is a legitimate, authoritative entity record by every standard described above, and yet they’re three separate records for the same human being, each with its own risk history, each generating signals in isolation.</p>
<p>When John’s Entra account shows a lateral movement indicator the same day his Okta account flags a suspicious login from an anomalous location, those signals may never connect. They exist as separate entities, investigated in isolation, by analysts who have no automated way to know they belong to the same person. The cross-surface campaign that entity analytics is supposed to catch hides in plain sight between identity providers.</p>
<p>Elastic Security solves this through automatic entity resolution: consolidating a user’s fragmented digital footprint across Okta, Entra ID, Active Directory, and more into a single unified identity. John Doe becomes a first-class citizen in the entity store: one primary record, all associated accounts grouped together, one aggregated risk score that reflects everything happening across every identity surface he touches. Resolution runs continuously as new integrations come online, without manual curation.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta31e28764908c987/6a7d864a6c6eac9ac8f11401/entity-sources.png" alt="" /></p>
<p>In the image above, we've created one entity record per user account and grouped them together, so when an analyst reviews the record, all related identities appear in one place.</p>
<h2 id="whatthischangesforanalysts">What this changes for analysts</h2>
<p>For the security operations center (SOC) analyst working a 2 a.m. alerted by their Elastic agentic workflow, these two architectural decisions (confidence-tiered entity governance and unified identity resolution) change the investigation fundamentally.</p>
<p>Instead of opening four separate entity cards for the same person, they open one. Cross-provider risk signals are aggregated into a single score, and attack narratives that span identity systems are visible as narratives, not as disconnected data points buried in separate views.</p>
<p>Compare this to investigating a bare deploy entity record with a risk score of 70 that’s actually an artifact of 12 people’s blended activity across 200 servers. One investigation leads somewhere. The other erodes trust in the entire capability, which is the real cost of noisy entity records. Not just the false positive itself, but the analyst who learns to ignore entity risk scores entirely.</p>
<h2 id="theentitiesrecordsyoudontcreate">The entities records you don't create</h2>
<p>Perhaps the most underappreciated aspect of entity analytics design is restraint. Every entity record you create has a cost: Compute for baselining, storage for history, analyst attention when it generates alerts, and potential for noise propagation into the broader analytical model.</p>
<p>The discipline to <em>not</em> create an entity record (to require a minimum evidence threshold) is what separates an entity analytics system that gets more useful over time from one that slowly drowns its operators in noise.</p>
<p>In practice, this means maintaining a configurable exclusion list for common service and shared accounts: <em>root</em>, <em>jenkins</em>, <em>deploy</em>, <em>postgres</em>, and others like them. These accounts exist on hundreds of machines, are used by automated processes and multiple humans interchangeably, and would produce baselines that mean nothing. Elastic Security ships a default list covering the most common offenders. Today the list operates at the username level — root is excluded uniformly regardless of which host it appears on — and is fixed. Future iterations will make it configurable, letting teams add their own environment-specific service accounts and, eventually, specify compound patterns that combine username and host. That would allow excluding root globally on shared infrastructure while still creating a host-scoped entity when that account appears on a personal workstation where the activity is attributable to a specific person. The architecture is already built for it: because endpoint-observed entities are keyed as <code>{user.name}@{host}</code>, compound rules are a coherent extension, not a redesign.</p>
<p>The higher-fidelity approach we've described directly mitigates the broader noise problem. When entity records are created from any username string in a log, your ML models end up baselining service accounts, typo'd logins, and shared kiosk accounts as if they were people — a 2 a.m. backup job looks anomalous against a human baseline, and a one-event typo'd login never accumulates enough data to baseline at all. When entity records are anchored to authoritative identity sources and resolved across their various login forms, the model learns patterns for actual humans doing actual work. Anomalies become meaningful because the baseline is meaningful.</p>
<p>The best entity analytics isn't the one that creates the most entities. It's the one that creates the <em>right</em> entities, governs them by what it actually knows about their source and scope, and builds its analytical investment proportionally. Everything else (risk scoring, behavioral baselines, entity resolution, anomaly detection, and AI skills) is downstream of that foundational decision. Get the entity records right, and the analytics follow. Get them wrong, and no amount of machine learning or AI can save you.</p>
<p><em>Entity analytics is available in Elastic Security.</em><a href="https://www.elastic.co/docs/solutions/security/advanced-entity-analytics/entity-store"> <em>Learn more about advanced entity analytics and how the entity store governs user entities.</em></a></p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/ueba-entity-record-quality-analytics</link>
    <guid isPermaLink="false">ueba-entity-record-quality-analytics</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Erik Huang,Mike Paquette]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0b8b55a6f64587d3/6a7d864e437e0f03f7dd8651/header.png" length="0" type="image/png"/>
    <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Know who to watch before the incident finds you]]></title>
    <description><![CDATA[Elastic Security v9.4 introduces Entity Analytics Watchlists, a way to codify what your team already knows about high-risk entities and feed that context directly into risk scoring, without custom pipelines or detection engineering overhead]]></description>
    <content:encoded><![CDATA[<p>Elastic Security v9.4 introduces Entity Analytics Watchlists, a new capability in the Entity Analytics suite that lets security teams create named, weighted lists of users, hosts, and services and feed that context directly into the platform's risk scoring pipeline. The gap this closes isn't awareness, as most security teams already know which entities deserve elevated scrutiny. The gap is that SIEMs have had no way to express that organizational knowledge as a risk signal. Watchlists do that without ES|QL, without pipeline configuration, and without a ticket to the detection engineering team.</p>
<h2 id="yourriskiestentitiesarealreadyknownyoursiemjustdoesntknowthat">Your riskiest entities are already known; your SIEM just doesn't know that</h2>
<p>Security teams aren't starting from a blank slate. You already know certain people, hosts, and services deserve elevated scrutiny: the privileged admin whose access was never revoked after a role change, the engineer on a performance improvement plan, the acquired company's infrastructure not yet fully onboarded, the contractors brought in for a sensitive new business initiative.</p>
<p>The gap has never been awareness. The gap is that your security information and event management (SIEM) has no way to express that organizational knowledge as a first-class risk signal. Behavioral detection fires on anomalies. Threat intel fires on known bad indicators. But neither captures the <strong>context your security and HR teams carry in their heads,</strong> and that context is exactly what insider threat programs are built on.</p>
<p>| 83% of organizations experienced at least one insider attack in the past year | $17.4M average annual cost of insider threat incidents in 2025 | 246 days average time to identify and contain a credentials-based breach |
| :---- | :---- | :---- |</p>
<p>Mature user and entity behavior analytics (UEBA) platforms allow some form of static lists or risk multipliers, but they're often rigid, buried in configuration, and disconnected from the analyst workflow. Security teams deserve something better: a purpose-built, first-class feature that lets them codify what they already know about their environment and to have that knowledge dynamically influence every risk calculation in the platform.</p>
<h2 id="introducingentityanalyticswatchlists">Introducing Entity Analytics Watchlists</h2>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b2990a84536f4d/6a7d800ab43770e6414d3f43/image2.png" alt="Watchlists panel" title="Dashboard titled “Entity analytics” with the Watchlists tab selected, showing a table of three watchlists (Privileged Users, Departing Employees, and Employee Extended Leave) with columns for number of entities, risk score weighting, source, last updated, and action icons. The page also includes controls for turning the feature on or off, clearing entity data, and creating a watchlist." />  </p>
<p>Watchlists are a new capability in Elastic Security's Entity analytics suite, arriving in the v9.4 release. They let security teams create named, described, rule-driven, or manually curated lists of users, hosts, services, or other entities and to attach configurable risk score weightings to every entity on each list.</p>
<blockquote>
  <p>Think of Entity Analytics Watchlists as the bridge between your organization's institutional knowledge and your security information and event management’s (SIEM's) risk engine. You already know who deserves a second look. Now your platform knows too.</p>
</blockquote>
<p>The term watchlist is a familiar concept in the industry, but Entity Analytics Watchlists go further. This isn't just a way to bookmark entities; it's a structured mechanism for injecting <strong>custom correlation factors</strong> directly into the risk scoring pipeline. Every entity that appears on a watchlist carries its membership as a weighted signal, compounded with alert activity, asset criticality, and behavioral anomalies to produce a single, prioritized risk score.</p>
<p>Take a concrete example: John Doe is a departing employee. He’s added to a "Departing Employees" Watchlist configured with an elevated risk weighting. He also owns a server on the "Critical Infrastructure" Watchlist. When John triggers an alert, for example, an unusual volume of file downloads, his risk score now compounds all three signals: the alert, the asset criticality, and both list memberships. The platform surfaces him far higher in the risk queue than it would for the same alert on an average employee. The analyst sees exactly why.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2573b82c45912d32/6a7d800ce3a219598699c6ee/image1.png" alt="Risk panel" title="Two‑panel dashboard showing “Employee Extended Leave risk levels” on the left with five risk categories and their numeric ranges, and “Risk contributions” on the right with contexts and alerts for the entity “ronaldostiedemann,” including contribution values, alert dates, rule names, and associated entities." /></p>
<h2 id="thelistsyoursecurityprogramalreadymaintains">The lists your security program already maintains</h2>
<p>Entity Analytics Watchlists are most powerful when they reflect the real-world risk categories your security, HR, and operations teams already track informally. Here are the most common starting points:</p>
<p>| 🚪  Departing employees On notice, performance improvement plans (PIPs), or offboarding: elevated exfiltration risk, regardless of whether an alert has fired. | 🔑  Privileged access users Admins and service account holders whose actions carry outsized blast radius. | 👑  Crown jewel hosts Critical infrastructure, IP repositories, and financial systems demanding tighter scrutiny. |
| :---- | :---- | :---- |
| <strong>🤝  Mergers and acquisitions / acquisition cohorts</strong> Newly onboarded entities where trust has not yet been fully established. | <strong>🚀  High-risk business initiatives</strong> Teams in sensitive new ventures, requiring extra monitoring during critical phases. | <strong>🛡️  Known-safe allow lists</strong> Dampen scores for verified low-risk entities, keeping analyst focus where it matters. |</p>
<h2 id="customcorrelationfinallywithouttheengineeringoverhead">Custom correlation, finally, without the engineering overhead</h2>
<p>Historically, bringing organizational context into a SIEM risk model has required significant custom engineering: lookup tables, enrichment pipelines, detection rule overrides, and constant maintenance as personnel and asset inventories change. For most security teams, that overhead means it simply doesn't get done. We remove that barrier entirely.<br />
An insider threat analyst can create a "Departing Employees" list in minutes, add a risk weighting, and immediately see that context reflected in the entity risk queue. No Elasticsearch Query Language (ES|QL) required. No pipeline configuration. No ticket to the detection engineering team. The organizational knowledge that was previously locked in spreadsheets, HR systems, or informal team awareness is now a first-class signal in the platform.</p>
<p>This is the ability to build risk correlations factors that simply haven't been possible anywhere else in the market and to do it without requiring detection engineering expertise.</p>
<p>For more mature teams, our custom watchlists also integrate cleanly with automated population, meaning that lists can be kept automatically current as conditions change or through APIs. An HR integration that marks an employee as departing can trigger list membership automatically; when they're fully offboarded, they're removed. The signal stays fresh without manual upkeep.</p>
<h2 id="cominginelasticsecurityv94">Coming in Elastic Security v9.4</h2>
<p>Entity Analytics Watchlists ship as a major roadmap item in the upcoming Elastic Security v9.4 release. They’re available to customers running Elastic Security with Entity analytics enabled.</p>
<p>If you're already using entity risk scoring and asset criticality, Entity Analytics Watchlists are the natural next step, layering your organization's operational context on top of the platform's behavioral and alert-based signals to produce the most accurate, prioritized risk picture possible.</p>
<p>We've heard from security teams across industries that this capability is one of the most anticipated additions to the UEBA toolkit. We can't wait to see what lists you build.</p>
<h2 id="frequentlyaskedquestions">Frequently Asked Questions</h2>
<p><strong>Q: How do I add organizational context to Elastic Security's risk scoring?</strong> A: In Elastic Security v9.4, you can inject organizational context into your risk scoring by utilizing Entity Analytics Watchlists, which allow you to ingest custom lists of high-value entities such as users, hosts, or services and assign them specific risk weightings. These watchlists function as dynamic correlation factors; when an entity on a watchlist appears in an alert, the system automatically compounds its risk score based on your pre-configured weights. This ensures that threats involving your most critical assets are prioritized instantly, transforming raw security data into an outcome-driven investigation queue that reflects your company's unique threat landscape.</p>
<p><strong>Q: How do I monitor high-risk employees in a SIEM without custom detection rules?</strong> A: Elastic Security Watchlists let you add entities like departing employees or privileged admins to a named list with an elevated risk weighting, with no ES|QL or pipeline configuration required. Their list membership is factored into risk scoring automatically alongside any alert activity.</p>
<p><strong>Q: How do insider threat programs integrate with SIEM risk scoring?</strong> A: Elastic Security's Entity Analytics Watchlists let insider threat and security operations teams codify existing risk knowledge — departing employees, privileged access holders, acquisition cohorts — and have that context automatically influence entity risk scores without requiring detection engineering involvement.</p>
<hr />
<p><em>Entity Analytics is available in Elastic Security. <a href="https://www.elastic.co/docs/solutions/security/advanced-entity-analytics/watchlists">Learn more about Entity Analytics Watchlists and how the entity store governs user entities.</a></em></p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/entity-analytics-watchlists</link>
    <guid isPermaLink="false">entity-analytics-watchlists</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Erik Huang,Jared Burgett]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0076a35a7fc8e02f/6a7d800f5588ad056aee42d0/entity-analytics-watchlists.webp" length="0" type="image/webp"/>
    <pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Streamlining the Security Analyst Experience]]></title>
    <description><![CDATA[Alert Triage, Investigation, and Response with Elastic's Agentic Security Operations Platform.]]></description>
    <content:encoded><![CDATA[<p>The term <strong>Agentic SOC (Security Operations Center)</strong> is one of the most popular concepts in security today. But what does it truly mean in practice, and how does Elastic Security approach this next evolution of security operations?</p>
<p>In simple terms, an Agentic SOC is a security operations center that has deployed AI Agents and corresponding AI Agent Skills to perform SOC-related workflows such as detection engineering, alert triage, incident investigation, escalation, response, and threat hunting. When these workflows are performed by AI agents, they’re often called “Agentic workflows.” These AI Agents and Skills may run natively in a security operations platform like SIEM, XDR, or security analytics, or they may be layered on top of legacy SIEM as an “AI SOC Agent” or “AI SOC analyst”, or they may even be run from an AI Coding Tool. </p>
<p>Regardless of how they are implemented, the shift to the Agentic SOC is not about AI replacing human analysts; it's about transforming how the SOC functions. To keep pace with rapidly evolving attackers, defenders must leverage AI and autonomous agents to respond as quickly as possible. At its core, an Agentic SOC is defined by how a security operations center uses <strong>AI and agents to protect against adversaries</strong>.</p>
<p>Let’s simplify a successful security operations center to three fundamental pillars, all of which the Agentic SOC significantly enhances:</p>
<ol>
<li><strong>Observe:</strong> The foundation of all security is centralized data—aggregating logs and events into one location, which is the core strength of a SIEM solution.  </li>
<li><strong>Detect:</strong> This involves deploying core protections like endpoint-based security (XDR, such as Elastic Defend) and security solution-focused detections (cloud, identity data). This technology drives the generation of high-quality alerts. Elastic, for example, ships over <a href="https://elastic.github.io/detection-rules-explorer/"><strong>1,700 pre-built rules</strong></a> for its SIEM by default, not including its XDR solution's endpoint rule library.  </li>
<li><strong>Act:</strong> This is the critical final stage of triaging, investigating, and acting on the generated alerts.</li>
</ol>
<h2 id="agenticsocinaction">Agentic SOC in Action</h2>
<p>Imagine this real-life scenario unfolding in your Security Operations Center using the Elastic security platform. It begins not with a siren, but with a simple, direct Slack notification. Building on our recent <a href="https://www.elastic.co/security-labs/speeding-apt-attack-discovery-confirmation-with-attack-discovery-workflows-and-agent-builder">blog</a> on Attack Discovery, Workflows, and Agent Builder, let's further examine how Elastic Security can help you respond to an active attack.</p>
<ol>
<li><strong>The Initial Alert and Immediate Action</strong><br />
Your security analyst receives an urgent notification in their team channel. This message isn't just a heads-up; it points directly to an observed, active attack. Crucially, the Elastic Agentic SOC has already taken decisive, pre-emptive action: a vulnerable host has been isolated from the network to contain the threat and limit potential damage. This was all powered by Elastic Workflows and Elastic Agent Builder processing realtime alert and attack data from Elastic.<br />
<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8ef1f1122b1021db/6a7d854a5967e5a8e65da5b3/image5.png" alt="Example analyst notification in Slack after the AI agent has performed initial triage." title="Example analyst notification in Slack after the AI agent has performed initial triage." />  </li>
<li><strong>The Centralized Case</strong><br />
The analyst's next step is a click away, moving from Slack directly to the centralized Case within Elastic that was created by the workflow. Elastic Case Management enables the SOC to coordinate the response and provides a single pane of glass into all aggregated critical information:  </li>
</ol>
<ul>
<li><p><strong>Attack Summary:</strong> A high-level overview detailing what has occurred using Attack Discovery.  </p></li>
<li><p><strong>Attached Alerts:</strong> The specific security alerts that triggered the initial observation.  </p></li>
<li><p><strong>Observables:</strong> A list of suspicious artifacts (IP addresses, file hashes, domains, etc.) collected from the event.  </p></li>
<li><p><strong>Attached Events:</strong> Non-alert events that, while not an alert themselves, provide critical context and are of further interest to the investigation.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt67359a276970e887/6a7d854dfc63ab762e64a026/image2.png" alt="" /></p></li>
</ul>
<ol>
<li><strong>Supporting the Investigation</strong><br />
To support the immediate findings, detailed <strong>Investigations</strong> are attached directly to the Case. These searches allow the analyst to visually and contextually step through the sequence of events leading up to, during, and immediately following the attack.<br />
The Elastic Case also provides instant context by highlighting <strong>Similar cases</strong>. By cross-referencing observables, the system identifies previous incidents involving the same entities or artifacts, providing a deeper understanding of the threat actor's history and potential motives.  </li>
<li><strong>The Path to Resolution</strong><br />
The agents don’t just catalog the past; it dictates the future. A clear set of <strong>Next steps and actions</strong> are outlined, with specific team members assigned for review and execution.</li>
</ol>
<p>The analyst then steps through a methodical process reviewing the automated analysis:</p>
<ol>
<li><strong>Reviewing Findings:</strong> Scrutinizing all aggregated data, alerts, and investigations.  </li>
<li><strong>Evidence Collection:</strong> Collecting any additional forensic evidence needed for a complete analysis.  </li>
<li><strong>Remediation:</strong> Executing manual or automated actions, such as deleting malicious files or killing persistent processes on the isolated host with Elastic Defend.  </li>
<li><strong>Final Release:</strong> Eventually, the host is safely released back to the network, but not before additional, targeted rules or policies are automatically applied to prevent a recurrence based on the lessons learned from this incident.<br />
In the Agentic SOC, the analyst moves seamlessly from a high-level alert to a comprehensive investigation to full remediation—all within a unified, intelligent workflow powered by Elastic.</li>
</ol>
<h2 id="elasticsecurityandcoresiemworkflows">Elastic Security and Core SIEM Workflows</h2>
<p>Before exploring advanced agentic workflows, it's essential to recognize that Elastic Security already provides a comprehensive suite of core capabilities crucial for modern security operations. This foundation begins with the ingestion of security-relevant data, which is automatically normalized to a common schema, ensuring consistency and ease of analysis. The platform offers Extended Detection and Response (XDR) capabilities via Elastic Defend, a robust detection engine built directly into the Elastic Stack, and sophisticated alert workflows that include built-in correlations to reduce noise and surface true threats.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte4187c1ba459f447/6a7d8550227b1c5bf6595890/image4.png" alt="" /></p>
<p>Elastic Security further differentiates itself by tightly integrating key operational functions. This includes entity-based threat hunting, machine learning for anomaly detection and behavior analysis, and comprehensive case management for tracking incidents. Finally, the platform provides end-to-end response and forensic capabilities, enabling security teams to move swiftly from initial alert to investigation and remediation, all within a unified, scalable platform.</p>
<h2 id="empoweringanalystswithagenticcapabilities">Empowering Analysts with Agentic Capabilities</h2>
<h3 id="aipoweredalerttriageandprioritization">AI-Powered Alert Triage and Prioritization</h3>
<p>The Elastic Security Solution integrates AI capabilities via <strong>Agent Builder</strong> to augment and make SOC operations truly agentic. This is where efficiency improvements are most keenly felt:</p>
<ul>
<li><strong>Conversational Triage:</strong> A built-in agent is readily available to Tier 1/2 analysts, allowing them to use conversational commands to query and prioritize open alerts (e.g., "What priority alerts should I review from the last 30 days?"). This is the first entry point for using AI to augment SOC operations.  </li>
<li><strong>LLM Agnostic Platform:</strong> A key differentiating feature of Elastic's <strong>Agent Builder</strong> is that it is <strong>LLM agnostic</strong>, allowing organizations to pick their preferred model, even locally running models for privacy or regulatory reasons.  </li>
<li><strong>Attack Discovery:</strong> This premier feature moves beyond basic triage. It uses LLM configurations to create <strong>higher-order attack detections</strong>, taking hundreds of open alerts and prioritizing them into a small, manageable subset of known attacks or incidents. This dramatically reduces the impact of alert fatigue.</li>
</ul>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfdc4cd6ef3ac26da/6a7d855363e9596e0773af1b/image3.png" alt="" /></p>
<h3 id="enrichedinvestigations">Enriched Investigations</h3>
<p>Once an attack or incident is found, the agent helps start the investigation:</p>
<ul>
<li><strong>Summarization and Enrichment:</strong> The agent can be used to summarize the attack, identify important artifacts, and conduct automated third-party enrichments (like checking VirusTotal). This tailored experience provides a full assessment, including an attack chain, threat intelligence information, related cases, entity risk scoring, and a full investigation guide.  </li>
<li><strong>Case Management:</strong> The agent can be instructed to take immediate action, such as generating a security case and notifying the team in Slack, all through simple conversational commands that execute pre-configured workflows.</li>
</ul>
<h3 id="automatedresponseandthreathunting">Automated Response and Threat Hunting</h3>
<p>The true power of the Agentic SOC is realized through action and automation that goes beyond simple conversation:</p>
<ul>
<li><p><strong>Workflows and SOAR-like Automation:</strong> Agents can reference and execute <strong>Workflows</strong>, Elastic's SOAR-like automation tool. These workflows allow analysts to take immediate, complex actions. For example, a command like "Please create a case for this attack, and notify my team in Slack" triggers multiple, pre-defined steps. Further critical response actions, such as <strong>isolating a host</strong>, can be executed with a single workflow action while the investigation continues.  </p></li>
<li><p><strong>AI-Assisted Threat Hunting:</strong> AI assists threat hunters by leveraging <strong>Entity Analytics</strong> and pre-built skills. The agent can be asked to find high-risk hosts and users to begin hunting, and then automatically generate specific ESQL queries (e.g., "Please tell me the most uncommon processes executed for each host") to uncover unusual or malicious activity.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt857cd03cbefa2cf7/6a7d855748511b665de7d3e7/image1.png" alt="" /></p></li>
</ul>
<h3 id="themandateofautomation">The Mandate of Automation</h3>
<p>For maximum effectiveness, all these steps,from alert triage and enrichment to case creation and host isolation,can be configured to run <strong>automatically</strong> as an Agentic Alert Triage workflow. This allows the system to solve problems as soon as they are discovered, setting up the human analyst in the loop with a consolidated case and all the necessary findings in a single pane of glass.</p>
<p>This approach delivers substantial <strong>efficiency improvements</strong>, making speed the single most important factor in a modern, Agentic SOC.</p>
<p>Elastic’s Agentic Security Operations Platform</p>
<p>Whether you use our UI, our agents, or your own, Elastic Security provides a strong open foundation for modern security operations. best-in-class data architecture, search, workflows, analytics, detection engineering content, and automation.</p>
<h2 id="gettingstarted">Getting started</h2>
<p><strong>Before you get started:</strong> AI coding agents operate with real credentials, real shell access, and often the full permissions of the user running them. When those agents are pointed at security workflows, the stakes are higher: you're handing an automated system access to detection logic, response actions, and sensitive telemetry. Every organization's risk profile is different. Before enabling AI-driven security workflows, evaluate what data the agent can access, what actions it can take, and what happens if it behaves unexpectedly</p>
<p>Don't have an Elasticsearch cluster yet? Start an <a href="https://cloud.elastic.co/registration">Elastic Cloud free trial</a>. It takes about a minute to get a fully configured environment.</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/streamlining-the-security-analyst-experience</link>
    <guid isPermaLink="false">streamlining-the-security-analyst-experience</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Paul Ewing]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd70ec2f45cf3fd8d/6a7d855a1967eab59f32d91c/streamlining-the-security-analyst-experience.jpg" length="0" type="image/jpeg"/>
    <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Automating detection tuning requests with Kibana cases]]></title>
    <description><![CDATA[Learn how to automate detection rule tuning requests in Elastic Security. This guide shows how to add custom fields to Cases, create a rule to detect tuning needs, and use a webhook to create a frictionless feedback loop between analysts and detection engineers.]]></description>
    <content:encoded><![CDATA[<h2 id="automatingdetectiontuningrequestswithelasticsecurity">Automating Detection Tuning Requests with Elastic Security</h2>
<p>At Elastic, the Infosec team is "Customer Zero”. We use the newest version of Elastic products extensively to secure our organization, which gives us unique insights into how to solve real-world security challenges. One of the ways we've improved Security Operations Center (SOC) efficiency is by creating a seamless, automated workflow that allows our analysts to open a detection tuning request directly from <a href="https://www.elastic.co/docs/explore-analyze/cases/manage-cases">Kibana Cases</a> with a single click. </p>
<p>In any SOC, the feedback loop between security analysts and detection engineers is crucial for maintaining a healthy and effective security posture. Analysts on the front lines are the first to see how detection rules perform in the real world. They know which alerts are valuable, which are noisy, and which could be improved with a bit of tuning. Alert fatigue from noisy alerts increases the risk of missing a true positive alert. Quickly tuning false positives is critical to responding to <em>true</em> positives. Capturing this alert feedback efficiently can be a challenge – manual processes, like sending emails, opening tickets, or direct messages can be inconsistent, time consuming, and hard to track.</p>
<p>With Elastic Security, an analyst can <a href="https://www.elastic.co/docs/solutions/security/detect-and-alert/add-detection-alerts-to-cases">attach alerts to a new or existing case</a> in Kibana, conduct their investigation, and with some customization and automation they can initiate a tuning request with a single click directly from <a href="https://www.elastic.co/docs/explore-analyze/cases/manage-cases">Kibana Cases</a>. This article will walk you through how we built this automation, and how you can implement a similar system to close the feedback loop and optimize your detection and response program.</p>
<h2 id="customfieldsinkibanacases">Custom Fields in Kibana Cases</h2>
<p><a href="https://www.elastic.co/docs/explore-analyze/cases/configure-case-settings#case-custom-fields%7CConfigure">Custom fields</a> are a key component of this automation within the <a href="https://www.elastic.co/docs/explore-analyze/cases/manage-cases">Kibana Cases</a>. Using these custom fields, we can capture the necessary information directly from the tool that the analysts are already using. These custom fields will appear on all new and existing cases, providing a clear and consistent way for analysts to flag a detection for review.</p>
<p>Note: The ability to add custom fields to cases was introduced in version 8.15. For more details, refer to the <a href="https://www.elastic.co/docs/explore-analyze/cases/configure-case-settings#case-custom-fields%7CConfigure">official Cases documentation</a>. </p>
<p>Every Kibana Case is a document stored in a dedicated Elasticsearch index: <code>.kibana_alerting_cases</code>. This means all your case data is available for querying, aggregation, and automation, just like any other data source in Elastic. Each case document contains a wealth of information, but a few fields are particularly useful for metrics and automation. The <code>cases.status</code> field tracks whether a case is open, in-progress, or closed, while <code>cases.created_at</code> and <code>cases.updated_at</code> provide timestamps crucial for calculating metrics like Mean Time to Resolution (MTTR). Fields like <code>cases.severity</code> and <code>cases.owner</code> allow you to slice and dice your metrics to see how the team is performing. Most importantly for this blog, the <code>cases.custom_fields</code> object contains an array of the custom fields you've configured. Runtime fields can be used to parse the array of custom fields, allowing you to build queries, dashboards, visualizations, and detection rules that trigger workflows.</p>
<p>Beyond tuning requests, custom fields are incredibly versatile for tracking metrics and enriching cases. For example, we have a "<strong>Complex Case</strong>" custom field to flag cases that take more than an hour to resolve, helping us identify rules that may need better investigation guides or automation to help reduce the investigation time. We also use custom fields like <strong>"Detection rule valid"</strong> and <strong>"True Positive Alert"</strong> to gather granular feedback on rule performance and fidelity, allowing us to build powerful dashboards in Kibana to visualize the operational effectiveness of our SOC.</p>
<p>If you have not already created a data view for the Cases information you will need to do that if you want to use runtime fields and data visualizations with your cases.</p>
<p><strong>Navigate to Index Patterns:</strong> In Kibana, go to Stack Management &gt; Data Views and click ‘create new data view’.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt15d76143d04f908c/6a7d7daedd26d286742a7206/image4.png" alt="" /></p>
<p>Configure the Data view to map the <code>.kibana_alerting_cases</code> system index. You will need to click the <strong>Allow hidden and system indices</strong> button to allow this. For the timestamp field I recommend using the <code>cases.updated_at</code> field so the cases are displayed by the most recent activity.  </p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2ae590a984a46a96/6a7d7db163e959c1ee73adfc/image3.png" alt="" /></p>
<h2 id="creatingcustomfields">Creating Custom fields</h2>
<p>There are two types of custom fields; <code>Text</code> fields for free-form input, or <code>Toggle</code> fields for simple yes/no feedback. For our Tuning Request automation, we use one of each. The text field is an optional field used to capture any additional feedback from the analyst, and the toggle field is used to trigger the automation.</p>
<p>In Kibana, go to Security &gt; Cases, then click on <strong>Settings</strong> in the top right. In the settings page you will see a <strong>Custom Fields</strong> section where you can add the new fields you want. The fields are displayed in the cases UI in alphabetical order so we prefix our fields with numbers to keep them in the order we want.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1b4d73a14fe43acc/6a7d7db45967e51dd75da485/image5.png" alt="" /></p>
<p>You can create the new custom fields, the Labels added in the UI are only for the analysts and are not stored in the cases index. These can be any value you want.  </p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9adbe14e7f146b6f/6a7d7db72f00b26bccefbe2a/image1.png" alt="" /></p>
<p><strong>Add Custom Fields:</strong> We need two fields for this workflow. </p>
<ul>
<li><p><strong>Field 1:</strong> Tuning Required Toggle  </p></li>
<li><p>This will be the button analysts click to initiate a tuning request.  </p>
<ul>
<li><strong>Label:</strong> <code>Open tuning request?</code>  </li>
<li><strong>Type:</strong> Toggle  </li>
<li><strong>Default Value:</strong> Off </li></ul></li>
<li><p><strong>Field 2:</strong> Tuning Request Details  </p>
<ul>
<li>This field allows the analyst to provide specific details about what needs to be changed, such as adding an exception, lowering the severity, or adjusting the query logic.  </li>
<li><strong>Name:</strong> <code>Tuning request detail</code>  </li>
<li><strong>Type:</strong> Text   </li></ul></li>
<li><p><strong>Default Value:</strong> Off </p></li>
</ul>
<h2 id="usingruntimefieldstomapthecustomfields">Using Runtime fields to map the custom fields</h2>
<p>A challenge when working with custom fields in Kibana Cases is that the <code>cases.custom_fields</code> field is mapped as an array of objects, where each object represents a custom field with its name and value. This structure makes it difficult to query for specific custom fields directly in KQL. For example, you can't simply use a query like <code>cases.custom_fields.open_tuning_request : "true"</code>. To overcome this, we can use <a href="https://www.elastic.co/docs/manage-data/data-store/mapping/runtime-fields">runtime fields</a> to parse and query the custom fields.</p>
<p>Runtime fields are fields that are evaluated at query time. They allow you to create new fields on the fly without having to reindex your data. We can define runtime fields on the <code>.kibana_alerting_cases</code> index to use a painless script to parse the <code>cases.custom_fields</code> array and extract the values we need into new, easily queryable fields.</p>
<p>For this workflow, we'll create two runtime fields that will map to the custom fields created above:<br />
*   <code>TuningRequired</code>: A boolean field that will be <code>true</code> if the "Open tuning request" toggle is on.<br />
*   <code>TuningDetail</code>: A text field that will contain the analyst's comments from the "Tuning request detail" field.</p>
<p>Before we can create the runtime fields, we first need to identify the unique ID (<code>key</code>) that Kibana assigns to each custom field. Currently, there isn't a straightforward way to view this ID in the UI. To find it, we used the following workaround:</p>
<ol>
<li><strong>Create the Fields.</strong> If you are using other custom fields you should create the custom fields one at a time to make it easier to identify the new field keys. If you only have the two fields mentioned above you can tell them apart using the <code>type</code> value which can be either text or toggle.  </li>
<li><strong>Create a new case.</strong> After adding the field, we created a test case in Kibana and added some data to the description field and toggled the tuning required field to true with all other custom fields set to false or blank.  </li>
<li><strong>Inspect the case document.</strong> We then navigated to Discover and queried the <code>.kibana_alerting_cases</code> index to find the document for the new case. By inspecting the <code>cases.customFields</code> array in the document's source, we could find the <code>key</code> associated with our new custom field. Save the values of the <code>key</code> fields to be used in the runtime scripts.</li>
</ol>
<p>The <code>cases.customFields</code> data is formatted like this:</p>
<pre><code>  [
    {
      "key": "4537b921-3ca4-4ff0-aa39-02dd6a3177bd",
      "type": "text",
      "value": "This alert is too noisy"
    },
    {
      "key": "cdf28896-c793-43d2-9384-99562e23a646",
      "type": "toggle",
      "value": true
    }
  ]
</code></pre>
<h3 id="creatingtheruntimefields">Creating the Runtime Fields</h3>
<p>You can add runtime fields through the Kibana UI or by using the Elasticsearch API in the Dev Tools console. If you have not already created a data view for the Cases information you will need to do that first.</p>
<p>While viewing the new Kibana Cases Data view click the ‘Add Field’ button to open the flyout menu to create a new runtime field.  </p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbc9479fdd0121b67/6a7d7dbade2315851ffd4d8f/image7.png" alt="" /></p>
<p>Enter the name of the field, in this example we are configuring <code>TuningRequired</code> as a new Boolean field type. Click the ‘Set Value’ toggle to configure this as a new Runtime field configured via a painless script. Update this painless script to replace <code>TUNING_REQUIRED_FIELD_KEY_UUID</code> with the <code>key</code> value from the Tuning Required custom field and paste it into the value field and save the new runtime field.</p>
<pre><code>...
    if (params._source.containsKey('cases') &amp;&amp;
    params._source.cases != null &amp;&amp;
    params._source.cases.containsKey('customFields') &amp;&amp;
    params._source.cases.customFields != null) 
{
  for (def cf : params._source.cases.customFields) {
    if (cf != null &amp;&amp;
        cf.containsKey('key') &amp;&amp;
        cf.key != null &amp;&amp;
        cf.key.contains('TUNING_REQUIRED_FIELD_KEY_UUID') &amp;&amp;
        cf.containsKey('value') &amp;&amp;
        cf.value != null) {
      emit(cf.value);
      break;
    }
  }
}
</code></pre>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb942fcf0a1462a73/6a7d7dbd77b0341d4b3fc5b8/image6.png" alt="" /></p>
<p>Repeat this process for the <code>TuningDetail</code> field, remember to use the <code>key</code> value from the text field in this field’s painless script. If you have any additional custom fields in your cases that you want to use for dashboards or metrics you can map those as well with this same process.   </p>
<p>If you control your cluster settings and data views ‘as code’ you can also add runtime fields to an index mapping using the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html">Update mapping API</a> from the Kibana Dev Tools console.</p>
<h2 id="automatingthetuningrequestcreation">Automating the tuning request creation</h2>
<p>We can trigger this automation in two ways: through a custom detection rule (that will create a new alert and send it to a connector when a case is updated with a tuning request) or via a scheduled external automation that queries the API. </p>
<p>This automation can be created using any automation platform such as Tines, Github Actions, or custom scripting. This is the logic we use for our automation:</p>
<h3 id="step1findanycasesrecentlytaggedastuningrequired">Step 1: Find any cases recently tagged as <code>TuningRequired</code></h3>
<p>You can use this elasticsearch query to find any cases that have been updated within the last hour where the <code>TuningRequired</code> field has been set to <code>true</code>. This query uses the <code>cases.updated_at</code> field as the time range. The runtime field mappings must be included in the API request to query the custom fields.</p>
<p>This query will return all of the case documents from the <code>.kibana_alerting_cases</code> index that have been updated in the last hour and the <code>TuningRequired</code> field has been set to <code>true</code></p>
<pre><code>POST /.kibana_alerting_cases/_search  
{  
  "query": {  
    "bool": {  
      "must": [],  
      "filter": [  
        {  
          "bool": {  
            "should": [  
              {  
                "match": {  
                  "TuningRequired": true  
                }  
              }  
            ],  
            "minimum_should_match": 1  
          }  
        },  
        {  
          "range": {  
            "cases.updated_at": {  
              "format": "strict_date_optional_time",  
              "gte": "now-1h",  
              "lte": "now"  
            }  
          }  
        }  
      ],  
      "should": [],  
      "must_not": []  
    }  
  },  
 "runtime_mappings": {  
   "TuningDetail": {  
     "type": "keyword",  
     "script": {  
       "source": "if (\nparams._source.containsKey('cases') &amp;&amp;\nparams._source.cases != null &amp;&amp;\nparams._source.cases.containsKey('customFields') &amp;&amp;\nparams._source.cases.customFields != null\n) {\nfor (def cf : params._source.cases.customFields) {\nif (\ncf != null &amp;&amp;\ncf.containsKey('key') &amp;&amp;\ncf.key != null &amp;&amp;\ncf.key.contains('6cadc70a-7d68-4531-9861-7d5bc24c4c1c') &amp;&amp;\ncf.containsKey('value') &amp;&amp;\ncf.value != null\n) {\nemit(cf.value);\nbreak;\n}\n}\n}"  
     }  
   },  
   "TuningRequired": {  
     "type": "boolean",  
     "script": {  
       "source": "if (\nparams._source.containsKey('cases') &amp;&amp;\nparams._source.cases != null &amp;&amp;\nparams._source.cases.containsKey('customFields') &amp;&amp;\nparams._source.cases.customFields != null\n) {\nfor (def cf : params._source.cases.customFields) {\nif (\ncf != null &amp;&amp;\ncf.containsKey('key') &amp;&amp;\ncf.key != null &amp;&amp;\ncf.key.contains('496e71f2-2bce-47a2-93a8-00db0de2d1b4') &amp;&amp;\ncf.containsKey('value') &amp;&amp;\ncf.value != null\n) {\nemit(cf.value);\nbreak;\n}\n}\n}"  
     }  
   }  
 },  
  "fields": [  
    "TuningDetail",  
    "TuningRequired"  
  ]  
}
</code></pre>
<p>Any time a field is changed or a comment is made in a case it will update the <code>updated_at</code> field to the current time. Because any update or comment added to a case will update this timestamp, it is possible to have a single case returned multiple times by this automation if it is run regularly while the case is being updated. Any automation processes leveraged for this should have a deduplication process to prevent processing the same case multiple times in this scenario.</p>
<h3 id="step2parsingeachcase">Step 2: Parsing each case</h3>
<p>Loop through each of the cases returned by the previous query to process them one at a time. Each document returned will contain the <code>fields</code> array with the values from the custom fields, as well as other useful fields. Parse each of the following fields and store them for future use:</p>
<ul>
<li>The <code>_id</code> field will have a format like <code>cases:{{case_ID}}</code>. The case ID is used for future API requests in the automation to add comments to the case or retrieve all alerts attached to the case.  </li>
<li><code>cases.title</code> is the title of the case  </li>
<li><code>cases.assignees</code> is who the case is assigned to  </li>
<li><code>cases.updated_by</code> is the last person to update the case, this is often the person submitting the tuning request and can be useful for knowing who to contact for more information.  </li>
<li><code>cases.tags</code> can be useful if you are using tags to sort or identify your cases.</li>
</ul>
<h3 id="step3retrievingthealertsattachedtothecase">Step 3: Retrieving the alerts attached to the case</h3>
<p>For each case you will want to know which alerts are attached to the case so you know which alerts need to be tuned. This can be done using the <a href="https://www.elastic.co/docs/api/doc/kibana/operation/operation-getcasealertsdefaultspace">cases API</a> with the <code>_id</code> field for the case.</p>
<p><code>/api/cases/{caseId}/alerts</code></p>
<p>This query will return an array of all alert <code>id</code> values that are attached to the case. Using this ID value you can query the <code>.siem-signals*</code> elasticsearch index to find the full information about each alert attached to the case that needs tuning. </p>
<pre><code>POST /.siem-signals-*/_search  
{  
 "size": 1,  
 "query": {  
   "bool": {  
     "must": [],  
     "filter": [  
       {  
         "bool": {  
           "should": [  
             {  
               "match": {  
                 "_id": "{{alert_id}}"  
               }  
             }  
           ],  
           "minimum_should_match": 1  
         }  
       },  
       {  
         "range": {  
           "@timestamp": {  
             "format": "strict_date_optional_time",  
             "gte": "now-30d",  
             "lte": "now"  
           }  
         }  
       }  
     ],  
     "should": [],  
     "must_not": []  
   }  
 }  
}
</code></pre>
<p>From the results of this query you can extract information about the alert such as the name and creation date, along with any other information that could help for tuning such as the <code>user.name</code> or <code>process.name</code> fields. Because a case can have many alerts attached to it you will want to deduplicate the alerts by the <code>signal.rule.name</code> value.</p>
<h3 id="step4openingatuningrequest">Step 4: Opening a tuning request.</h3>
<p>This step is dependent on the ticketing system you use in your environment. Our team uses github issues to track tuning requests and slack for notifications, but this could also be done with any ticketing or project management system that supports automation. </p>
<p>This is the logic flow we use for our automation using both Github and Slack to track tuning requests:</p>
<ul>
<li>Using the name of the alert we search for any existing open tuning requests.   </li>
<li>If an existing tuning request exists we update that request with the details from the case and the new request  </li>
<li>If no existing request exists we open a new tuning request issue and attach the information  </li>
<li>We then send a slack notification to the Detection engineering team’s slack channel containing a link to the tuning request, a link to the case, and details about the request and alert.  </li>
<li>We then use the <a href="https://www.elastic.co/docs/api/doc/kibana/operation/operation-addcasecommentdefaultspace">Cases API</a> to add a comment to the original case with a link to the tuning request issue   </li>
<li><strong>Optional AI Agent</strong>: We are starting to experiment with the use of AI Agents to analyze the alert and case information and then provide even better context with the tuning request, potentially even recommending the changes to make to the detection rules.</li>
</ul>
<p>The final result from this automation is that our SOC Analysts can create a detailed detection tuning request ticket with a single click from their case. We have seen a dramatic increase in the reduction of false positives and the overall efficiency of our detection rules because of this automation.</p>
<h2 id="conclusion">Conclusion</h2>
<p>By using Kibana Cases with custom fields and integrating with automation platforms, you can optimize many of your manual processes. This automated workflow reduces the manual overhead associated with collecting analyst feedback, ensuring that valuable analyst insights are quickly translated into actionable improvements in detection rules. The result is a more efficient, accurate, and resilient SOC that can adapt rapidly to emerging threats and reduce alert fatigue.</p>
<p>Ready to optimize your SOC's efficiency and improve your detection posture? Explore Elastic Security and start building your own automated tuning request workflows today!</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/automating-detection-tuning-requests-with-kibana-cases</link>
    <guid isPermaLink="false">automating-detection-tuning-requests-with-kibana-cases</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Aaron Jewitt]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1562355f73e47665/6a7d7dc0e88c65a9af0088ea/Security_Labs_Images_10.jpg" length="0" type="image/jpeg"/>
    <pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[TOR Exit Node Monitoring Overview]]></title>
    <description><![CDATA[Learn how to monitor your enterprise for TOR exit node activity.]]></description>
    <content:encoded><![CDATA[<h2 id="whymonitoringfortorexitnodeactivitymatters">Why Monitoring for TOR Exit Node Activity Matters</h2>
<p>In today’s complex cybersecurity landscape, one of the most overlooked but critical elements in proactive threat detection is monitoring for TOR (The Onion Router) exit node activity. TOR enables anonymous communication, and while it serves legitimate privacy interests, it also provides cover for cybercriminals, malware campaigns, and data exfiltration.</p>
<h2 id="whataretorexitnodes">What Are TOR Exit Nodes?</h2>
<p>TOR exit nodes are the final relay points in the TOR network where encrypted traffic exits to the open internet. If a user browses the web anonymously via TOR, the website or service they access will see the IP address of the exit node, not the user's actual IP address.</p>
<p>In other words, any network traffic originating from a TOR exit node is untraceable to its source without cooperation from the TOR network, which is unlikely by design.</p>
<h2 id="whyshouldyoucare">Why Should You Care?</h2>
<p>While not all TOR activity is malicious, a substantial amount of malicious traffic uses TOR to mask its origin. Here’s why it matters:</p>
<ol>
<li><p><strong>Anonymized Reconnaissance:</strong> Attackers often perform scans and probes from TOR exit nodes. If someone is mapping your infrastructure using TOR, they may be preparing for a breach attempt while remaining anonymous.</p></li>
<li><p><strong>Command and Control (C2) Channels:</strong> Many malware families use TOR for C2 communications, making it hard to trace the infected endpoint back to its controller.</p></li>
<li><p><strong>Data Exfiltration:</strong> TOR is a common channel for exfiltrating sensitive data out of an organization. If sensitive files are being uploaded to external endpoints via TOR, you may already be compromised.</p></li>
<li><p><strong>Compliance Risks:</strong> Some industries (e.g., healthcare, finance) require strict data handling and access controls. Allowing or ignoring TOR-originated traffic could violate these policies or industry regulations.</p></li>
</ol>
<p>You should look for any interactions between TOR exit nodes and:</p>
<ul>
<li>host.ip  </li>
<li>server.ip  </li>
<li>destination.ip  </li>
<li>source.ip  </li>
<li>client.ip</li>
</ul>
<p>This can occur in logs from firewalls, DNS, proxies, endpoint agents, cloud access logs, and more.</p>
<h2 id="howtomonitorfortorexitnodes">How to Monitor for TOR Exit Nodes</h2>
<p>In order to collect, monitor, alert, and report on TOR Exit Node activity, we must first create a few components, namely, we will create an index template and an ingest pipeline. We will then hit the TOR API endpoint every 1 hour to request the most recent detailed information. </p>
<p>If you would like to learn more about options for monitoring TOR, you may read about them <a href="https://metrics.torproject.org/onionoo.html">here</a>. If you would like to know more about the TOR Project in general, you may read about it <a href="https://www.torproject.org/">here</a>.</p>
<h3 id="ingestpipeline">Ingest Pipeline</h3>
<p>First, let’s create an Ingest Pipeline that will accomplish the last bit of parsing our data before it is written to an index. In DevTools, simply apply the following: there are descriptions for each processor; should you want to know more about what each does and its associated condition, if present.</p>
<p>Here is what your screen may look like:<br />
<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt53a19a562dfc3a98/6a7d861433fa8a16071ffa10/image4.png" alt="" /></p>
<p>You may find the ingest pipeline on <a href="https://ela.st/tor-node-ingest-pipeline">GitHub</a>.</p>
<h3 id="indextemplate">Index Template</h3>
<p>Next, we need to create our index template to ensure our fields are correctly mapped.</p>
<p>Still in DevTools, submit the following request just as you completed with the ingest pipeline.  You may find the index template via <a href="https://ela.st/tor-node-index-template">this link</a> on GitHub.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7505fbff3b5aa374/6a7d861796b5a695168786d9/image9.png" alt="" /></p>
<p>Notice the priority of the index template; we set this to a much higher number so that this template will take precedence over the default logs-*-* template. While you will notice in the following steps that we set the ingest pipeline in our configuration for data collection, we may also apply it here as a safeguard to ensure data is written through this pipeline.</p>
<h3 id="elasticagentpolicy">Elastic-Agent Policy</h3>
<p>With these two items loaded, we may now navigate to Fleet and select the “agent policy” we want to install our integration to.</p>
<p>On the policy you wish to install the TOR collection to, simply click “Add integration”.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt991130710947dd94/6a7d861a3ce8e27784cf26f4/image13.png" alt="" /></p>
<p>Select “Custom” from the left-hand category list, then click “Custom API”.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbae93850aded379f/6a7d861d05b7b53f6b188bef/image10.png" alt="" /></p>
<p>Click the blue “Add Custom API” button on your top right.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfa4b47efbc166d93/6a7d862096b5a6adf38786df/image12.png" alt="" /></p>
<p>You may title your Integration anything you like; however, I will be using “TOR Node Activity” in this example.</p>
<p>Fill in the following fields:</p>
<p>Dataset name:<br />
<code>ti_tor.node_activity</code></p>
<p>Ingest Pipeline:<br />
<code>logs-ti_tor.node_activity</code></p>
<p>Request URL:<br />
<code>https://onionoo.torproject.org/details?fields=exit_addresses,nickname,fingerprint,running,as_name,verified_host_names,unverified_host_names,or_addresses,last_seen,last_changed_address_or_port,first_seen,hibernating,last_restarted,bandwidth_rate,bandwidth_burst,observed_bandwidth,flags,version,version_status,advertised_bandwidth,platform,recommended_version,contact</code></p>
<p>Request Interval:<br />
<code>60m</code></p>
<p>Request HTTP Method:<br />
<code>GET</code></p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt13d268c7eca4075d/6a7d862373d9bdd59e29acae/image2.png" alt="" /></p>
<p>Response Split:<br />
<code>target: body.relays</code></p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2293bbd436bc73cb/6a7d86262f00b2350aefbf80/image6.png" alt="" /></p>
<p>You will then need to click to expand the “&gt; Advanced options” and scroll down a bit more.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7877efd92ecc93a4/6a7d8629e02fac6a995d3598/image3.png" alt="" /></p>
<p>You may find the necessary processor snippet to copy at GitHub <a href="https://ela.st/tor-node-elastic-agent-processors">here</a>.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte20cb7390d3c11e7/6a7d862b3cab1c8c7f0e1a92/image1.png" alt="" /></p>
<p>You may now click the “Save and continue” button and in a few minutes you will have TOR node activity available in your logs-* index!  </p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5aac9df060d797e7/6a7d862e63e9593ef973af37/image5.png" alt="" /></p>
<h3 id="filebeatinstallationoption">Filebeat Installation Option</h3>
<p>If you are not using Elastic-Agent and wish to ingest via Filebeat, that’s cool too! Instead of using the steps above, simply leverage the following “filebeat.inputs:” which will use the exact same ingest pipeline and index template as above!  Simply copy and paste the <a href="https://ela.st/tor-node-filebeat-input">input section</a> into your filebeat.yml file, you will still need to add an output section.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdc223edf18f0fb03/6a7d86313ce8e248a7cf26f8/image11.png" alt="" /></p>
<h2 id="reviewingyourdata">Reviewing your data</h2>
<p>Now that you've completed the configuration of the ingest pipeline and the agent integration, you can see the TOR nodes in the Discover view. From here, you can create rules, visualizations, dashboards, etc., to help keep tabs on how TOR is being used on your network.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4823b2a32962cdbe/6a7d8634c2e914f1db013d3d/image14.png" alt="" /></p>
<h2 id="whatcanyoudonext">What can you do next?</h2>
<p>The beautiful thing about the naming convention for this index, is that it will automatically function with your Threat Intel IP Address Indicator Match rule available in the Elastic SIEM.  </p>
<p>However, you may want to make your own rule using some of the wealth of information that is provided with this integration; particularly depending on the type of node observed environment. Since there was a considerable amount of geo-based data enriched with this index, now would be an excellent time to check out some of the map features within Kibana.  </p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1c240616d4fc81cc/6a7d863777b03410be3fc6f3/image8.png" alt="" /></p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/tor-exit-node-monitoring</link>
    <guid isPermaLink="false">tor-exit-node-monitoring</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Peter Titov]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5a7745b8316b03fb/6a7d863a96b5a618228786e3/Security_Labs_Images_9.jpg" length="0" type="image/jpeg"/>
    <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elastic Security opens public detection rules repo]]></title>
    <description><![CDATA[Elastic Security has opened its detection rules repository to the world. We will develop rules in the open alongside the community, and we’re welcoming your community-driven detections. This is an opportunity to share collective security knowledge.]]></description>
    <content:encoded><![CDATA[<p>At Elastic, we believe in the <a href="https://www.elastic.co/about/why-open-source">power of open source</a> and understand the importance of community. By putting the community first, we ensure that we create the best possible product for our users. With Elastic Security, <a href="https://www.elastic.co/security">two of our core objectives</a> are to <em>stop threats at scale</em> and <em>arm every analyst</em>. Today, we’re opening up a new GitHub repository, <a href="https://github.com/elastic/detection-rules">elastic/detection-rules</a>, to work alongside the security community, stopping threats at a greater scale.</p>
<p>The release of the <a href="https://www.elastic.co/blog/elastic-siem-detections">detection engine</a> in Elastic Security brought <a href="https://www.elastic.co/security/automated-threat-protection">automated threat detection</a> to the Elastic Stack. Since the initial launch of the detection engine, the Elastic Security Intelligence &amp; Analytics team has added 50+ additional rules, increasing the visibility of attacker techniques on Linux, macOS, and Windows operating systems. As we continue to expand coverage, you’ll see increased breadth in detections, covering new domains such as cloud services and user behavior.</p>
<p>Over the past few releases, we used an internal repository to manage rules for the detection engine. We’ve iteratively improved our testing procedures by adding automated tests for new contributions that validate Kibana Query Language (KQL) syntax, schema usage, and other metadata. Our rule development has matured, so we can move fast <em>without</em> breaking things.</p>
<p>By opening up our <a href="https://github.com/elastic/detection-rules">elastic/detection-rules</a> GitHub repository, Elastic Security will develop rules in the open alongside the community, and we’re welcoming your community-driven detections. This is an opportunity for all of us to share our collective knowledge, learn from each other, and make an impact by working together.</p>
<h2 id="whatsinthisnewrepository">What’s in this new repository?</h2>
<p>In the <a href="https://github.com/elastic/detection-rules">elastic/detection-rules</a> GitHub repository, you can find rules written for Elastic Security, with coverage for many <a href="https://attack.mitre.org/">MITRE ATT&amp;CK</a>® techniques. Our current rule logic is primarily written in <a href="https://www.elastic.co/guide/en/kibana/master/kuery-query.html">KQL</a>, and by leveraging the <a href="https://www.elastic.co/guide/en/ecs/current/index.html">Elastic Common Schema (ECS)</a>, we only need to write rules once. By using the defined fields and categories in ECS, rules automatically work with Beats logs and other data sources that map properly to ECS.</p>
<p>Within the <a href="https://github.com/elastic/detection-rules/tree/main/rules">rules/</a> folder, rules are stored in TOML files and are grouped by platform. We tried to keep it simple with a flat hierarchy so that it’s easier to find and add new rules. If you’re looking for Windows-only rules, navigate to <a href="https://github.com/elastic/detection-rules/tree/main/rules/windows">rules/windows</a>. If you’re still struggling to find a rule or want to search across rules, you can use our CLI by running the command python -m detection_rules rule-search, which will show the files that have matching metadata.</p>
<p>Every rule contains several fields of metadata in addition to the query itself. This captures information like the title, description, noise level, ATT&amp;CK mappings, tags, and the scheduling interval. We have a few additional fields to aid analysts performing triage, describing known false positives or helpful steps for an investigation. For more information on the metadata that pertains to rules, see the <a href="https://www.elastic.co/guide/en/siem/guide/current/rules-ui-create.html#create-rule-ui">Kibana rule creation guide</a> or our <a href="https://github.com/elastic/detection-rules/blob/main/CONTRIBUTING.md#rule-metadata">summary of rule metadata</a> in the contribution guide.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltec263444d3bb017e/6a7d7f9e1967eac01a32d86b/detection-rules-repo-blog-msbuild.png" alt="detection-rules-repo-blog-msbuild.png" title="detection-rules-repo-blog-msbuild.png" /></p>
<p>Preview of the file behind the “MsBuild Making Network Connections” rule</p>
<h2 id="howdotheserulesgettomydetectionengine">How do these rules get to my detection engine?</h2>
<p>If you’re using our <a href="https://www.elastic.co/cloud/">Elastic Cloud managed service</a> or the default distribution of the Elastic Stack software that includes the <a href="https://www.elastic.co/subscriptions">full set of free features</a>, you’ll get the latest rules the first time you navigate to the detection engine. When you upgrade, the detection engine recognizes that rules were added or changed and <a href="https://www.elastic.co/guide/en/siem/guide/current/rules-ui-create.html#load-prebuilt-rules">prompts</a> you to decide whether you want those rules upgraded. Follow the steps after upgrading and you’ll get the latest copy of the rules.</p>
<p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1a5ad5841d9cef77/6a7d7fa16c6eaca1bdf1133a/detection-rules-repo-blog-msbuild-network-connections.png" alt="detection-rules-repo-blog-msbuild-network-connections.png" title="detection-rules-repo-blog-msbuild-network-connections.png" /></p>
<p>The same rule — “MsBuild Making Network Connections” — loaded in the detection engine</p>
<h2 id="whowillusethisrepository">Who will use this repository?</h2>
<p>This repository is where the Elastic Security Intelligence &amp; Analytics team will develop rules, create issues, manage pull requests, and target releases. By making the repo public, we’re inviting all external contributors into this workflow. This will give contributors visibility into our development process and a clear path for rules to be released with the detection engine.</p>
<p>When you’re ready to contribute, please sign Elastic's <a href="https://www.elastic.co/contributor-agreement">contributor license agreement (CLA)</a>. This is standard for all Elastic GitHub repositories, and it means that we freely can distribute your code to Elastic users.</p>
<h2 id="howdoweapproachthreatdetection">How do we approach threat detection?</h2>
<p>In general, we tend to prefer detections that focus on adversary behaviors. This usually means that we focus on ATT&amp;CK techniques. This might mean more research and effort is needed to figure out how a technique works before creating a rule. But by taking this approach, we do a better job detecting and stopping the attacks of today and tomorrow, instead of just the attacks of yesterday.</p>
<p>Taking a behavioral approach also means we need various types of rules. Some might detect atomic events, others may require aggregating multiple events or looking for deviances above a threshold. With <a href="https://eql.readthedocs.io">Event Query Language (EQL)</a>, we will be able to write rules that look for sequences of behavior that span multiple events.</p>
<p>Of course, we understand that sometimes a technique can be hard for all users to detect behaviorally. In that case, by all means, feel free to add a rule that is more signature-like in nature and written towards a specific behavior or tool.</p>
<p>For a longer discussion on what makes a mature detection, read about the philosophy <a href="https://github.com/elastic/detection-rules/tree/main/PHILOSOPHY.md">of the detection rules repository</a>.</p>
<h2 id="whydoweneedanewrepository">Why do we need a new repository?</h2>
<p>If you’ve shared public rules before, you’re probably aware of other well-known GitHub repositories, like the <a href="https://github.com/mitre-attack/car">Cyber Analytics Repository (CAR)</a> by MITRE, <a href="https://github.com/Neo23x0/sigma">Sigma</a>, or even the <a href="https://eqllib.readthedocs.io">EQL Analytics Library</a> based on Elastic’s EQL. You might be wondering: <em>Why do we need another repository? Why not use the ones that already exist?</em></p>
<p>Unsurprisingly, the best answer to this question starts with another question: <em>Why do the other repositories exist?</em> Both CAR and Sigma are purposefully agnostic of language or platform, and sometimes data source. On the other hand, the EQL Analytics Library was written with a specific language in mind.</p>
<p>With our new detection rules repository, we’re trying to serve a slightly different purpose. Our goal is to give users of Elastic Security the best possible detections that work across various data sources. We use ECS as the great equalizer of schemas, making it possible to write a rule once that applies to multiple data sources.</p>
<p>Since the Elastic Stack supports multiple languages, our rules should reflect that. Query languages are typically developed to solve different types of problems, and we shouldn’t constrain rule developers to a single language if another does the job better. We currently have <a href="https://www.elastic.co/guide/en/kibana/master/kuery-query.html">KQL</a> and <a href="https://www.elastic.co/guide/en/kibana/current/lucene-query.html">Lucene</a> rules, along with rules that use <a href="https://www.elastic.co/guide/en/machine-learning/6.8/ml-jobs.html">machine learning anomaly detection</a> jobs in the repository. We’re <a href="https://github.com/elastic/elasticsearch/issues/49581">working hard</a> to bring <a href="https://eql.readthedocs.io">EQL</a> to the Elastic Stack and into our repository.</p>
<p>We can also ensure best practices are being followed for optimal Elasticsearch performance. For example, searching for process.path:*\\cmd.exe requires performing a wildcard check, which is more costly than a simple keyword check. Instead of searches containing leading wildcards, we can recommend using process.name:cmd.exe, which will result in better performance and the most accurate results. On a similar note, ECS also contains the field process.args, which is a parsed version of process.command_line. We recommend using the parsed field instead, because it gives us better performance and means that we are much less prone to <a href="https://github.com/elastic/detection-rules/blob/main/PHILOSOPHY.md#does-a-rule-have-trivial-evasions">trivial whitespace or quotation-based evasions</a>. Win-win.</p>
<h2 id="caniaddrulesfromanotherrepository">Can I add rules from another repository?</h2>
<p>Within your own environment, you’re welcome to add rules to your own detection engine as long as your Kibana role has the right permissions. If you want to add rules to the <a href="https://github.com/elastic/detection-rules">elastic/detection-rules</a> repository, the answer is an unsurprising: <a href="https://www.elastic.co/blog/it-depends"><em>It depends…</em></a><em>.</em> As long as a rule can be sublicensed under the Elastic License, this is fair game. Most of the time, the requirements are fairly straightforward — retain the original authors in the rule.author array, and update the NOTICE.txt file accordingly to give attribution to the original authors. We don’t want to take credit for someone else’s work, so please help us be thorough!</p>
<p>For more information on how we approach licensing in the repository, check the <a href="https://github.com/elastic/detection-rules#licensing">Licensing</a> section of the README.</p>
<h2 id="howdoicontribute">How do I contribute?</h2>
<p>Eager to share your rule logic? Hop on over to <a href="https://github.com/elastic/detection-rules">elastic/detection-rules</a> on GitHub. We have detailed instructions there for navigating the repository, forking and cloning, and creating a rule. We include a command line tool for bulk editing the files and to make creating new rules easier. When you’re ready to add a new rule to the repository, run python -m detection_rules create-rule, and you’ll be prompted for the required metadata. We recommend using the CLI when possible, because it reduces copy-and-paste errors that happen when reusing contents from a TOML file from another rule or template.</p>
<p>When your rule is in a good state, you can run the command python -m detection_rules test to locally perform unit tests, which validate syntax, schema usage, etc. Then, create the pull request and someone on the Intelligence &amp; Analytics team will review the contribution. If we request any changes, we’ll work with you to make the recommended changes.</p>
<p>If you have a good idea for a rule, but want to collaborate with us on the idea or get feedback, feel free to create a <a href="https://github.com/elastic/detection-rules/issues/new/choose">New Rule</a> issue. We look forward to helping and brainstorming with you!</p>
<p>For more information, check out the <a href="https://github.com/elastic/detection-rules/tree/main/CONTRIBUTING.md">contribution</a> guide.</p>
<h2 id="whatsnext">What’s next?</h2>
<p>Welcome to our new rules repository and workflow! Your contributions are encouraged, and we look forward to seeing your name in the rule.author field. The detection rules repository will continue to evolve along with the rest of Elastic Security, and we’re excited for what’s next.</p>
<p>If you want to track the development of EQL in the stack, subscribe to this <a href="https://github.com/elastic/elasticsearch/issues/49581">GitHub issue</a>. Or take a peek at the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/master/eql.html">ongoing documentation</a> to watch what the Elasticsearch team is up to.</p>
<p>If you have any feedback or questions writing rules or navigating our new <a href="https://github.com/elastic/detection-rules">detection rules</a> GitHub repository, please <a href="https://github.com/elastic/detection-rules/issues/new/choose">create an issue</a> in GitHub, reach out on the <a href="https://discuss.elastic.co/c/security">discussion forum</a> with the <em>detection-rules</em> tag, or find us in the <em>#detection-rules</em> channel of the <a href="http://ela.st/slack">Elastic Slack Community</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/security-labs/blog/elastic-security-opens-public-detection-rules-repo</link>
    <guid isPermaLink="false">elastic-security-opens-public-detection-rules-repo</guid>
    <category><![CDATA[SOC]]></category>
    <dc:creator><![CDATA[Ross Wolf,Elastic Security Intelligence & Analytics Team]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf9adba0b8e94dc90/6a7d7fa405b7b55855188b14/blog-thumb-gears-steel.jpg" length="0" type="image/jpeg"/>
    <pubDate>Fri, 20 May 2022 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>