<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>XDR on Nicola Suter</title><link>https://nicolasuter.ch/tags/xdr/</link><description>Recent content in XDR on Nicola Suter</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><copyright>© 2026 Nicola Suter</copyright><lastBuildDate>Sun, 24 May 2026 12:00:03 +0000</lastBuildDate><atom:link href="https://nicolasuter.ch/tags/xdr/rss.xml" rel="self" type="application/rss+xml"/><item><title>Manage Microsoft Sentinel Table Tiers and Retention as Code with Bicep</title><link>https://nicolasuter.ch/sentinel-table-retention-bicep/</link><pubDate>Sun, 24 May 2026 12:00:03 +0000</pubDate><guid>https://nicolasuter.ch/sentinel-table-retention-bicep/</guid><description>&lt;p&gt;Managing Microsoft Sentinel table retention and tiers is typically done through scripts or the portal, but neither approach fits well into an infrastructure-as-code workflow and it can be difficult to maintain tables at scale. While exploring the Log Analytics Bicep resource provider, I came across the &lt;code&gt;Microsoft.OperationalInsights/workspaces/tables&lt;/code&gt; resource type&lt;cite&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/cite&gt;, which makes it possible to manage table tier and retention declaratively with Bicep: version-controlled, reviewable, and reproducible across environments.&lt;/p&gt;
&lt;p&gt;For each table we typically want to control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Table tier&lt;/strong&gt;: Analytics or Data Lake (Auxiliary)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive retention&lt;/strong&gt;: the hot, queryable period&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total retention&lt;/strong&gt;: the overall retention period of the table&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="Table Settings"
 width="1670"
 height="1172"
 src="https://nicolasuter.ch/sentinel-table-retention-bicep/table-settings_hu_94023cc300a6c6fb.png"
 srcset="https://nicolasuter.ch/sentinel-table-retention-bicep/table-settings_hu_94023cc300a6c6fb.png 800w, https://nicolasuter.ch/sentinel-table-retention-bicep/table-settings_hu_6435ce0747b7b6f8.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://nicolasuter.ch/sentinel-table-retention-bicep/table-settings.png"&gt;&lt;figcaption&gt;Typical Table Configuration Settings&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Managing the total retention per table is necessary whenever you want to keep logs longer than the 90-day default to satisfy logging or compliance requirements. Since there is no workspace-level default for total retention, it has to be configured table by table, a perfect fit for a declarative approach.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Identify tables with recent ingestion
 &lt;div id="identify-tables-with-recent-ingestion" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#identify-tables-with-recent-ingestion" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;To identify &amp;lsquo;active&amp;rsquo; tables, both a KQL- and API-based approach exist.&lt;/p&gt;

&lt;h3 class="relative group"&gt;KQL
 &lt;div id="kql" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#kql" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;The following KQL query lists tables that have received data in the last 90 days along with their current tier, which is helpful when deciding what to put under Bicep management:&lt;/p&gt;</description></item><item><title>Finally native SOAR in Sentinel?</title><link>https://nicolasuter.ch/sentinel-native-soar/</link><pubDate>Mon, 11 May 2026 06:00:03 +0000</pubDate><guid>https://nicolasuter.ch/sentinel-native-soar/</guid><description>&lt;p&gt;The Microsoft Sentinel SOAR playbook generator has mostly flown under the radar since it entered public preview, so let&amp;rsquo;s look at what it can do and whether it can replace Logic Apps with something more native.
In SecOps conversations, I often hear the same view: Logic Apps are fine, but if you already script or code, they can feel like overhead rather than a productivity boost. Many MSSPs also rely on more flexible tooling such as Azure Functions or compiled code for incident automation.&lt;/p&gt;
&lt;p&gt;The new Sentinel playbook generator feels more native for Defender XDR and Sentinel integration, and it adds AI on top. Let&amp;rsquo;s see whether that actually helps.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Playbook Generator in Action
 &lt;div id="playbook-generator-in-action" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#playbook-generator-in-action" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;You can find the playbook generator in the Unified Security Operations Platform (USOP) under the Sentinel automation blade, via the &amp;lsquo;Playbook Generator ✨&amp;rsquo; option.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Wizard"
 src="https://nicolasuter.ch/content/images/2026/sentinel-soar/create-playbook.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;It opens a Visual Studio Code or GitHub Codespaces-style editor with &lt;a href="https://cline.bot/" target="_blank" rel="noreferrer"&gt;Cline&lt;/a&gt; preinstalled for building Python playbooks.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Editor"
 src="https://nicolasuter.ch/content/images/2026/sentinel-soar/editor.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;Creating a playbook with natural language is straightforward. Cline uses a plan-and-act flow: you describe what you want, then it tests and builds the playbook.&lt;/p&gt;
&lt;p&gt;For my initial tests, I used the following prompt:&lt;/p&gt;</description></item><item><title>Don't let Entra ID Protection miss your next breach!</title><link>https://nicolasuter.ch/entra-id-protection-stop-account-breach/</link><pubDate>Sun, 22 Mar 2026 10:00:03 +0000</pubDate><guid>https://nicolasuter.ch/entra-id-protection-stop-account-breach/</guid><description>&lt;p&gt;All too often, my baseVISION (IR) colleagues and I find compromised cloud accounts where many security &amp;lsquo;signals&amp;rsquo; were missed—both from a prevention and detection perspective. In this blog post, I want to share some motivation and tips to help you adopt Entra ID Protection risk-based Conditional Access policies to increase your tenant&amp;rsquo;s security posture, and ensure you don&amp;rsquo;t miss the next obvious account breach.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Real-world motivation
 &lt;div id="real-world-motivation" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#real-world-motivation" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Anyone who has seen an AiTM campaign in the wild will probably notice the following details from the Entra ID sign-in logs of a compromised account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ResourceDisplayName: &lt;code&gt;OfficeHome&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;UserAgent: &lt;code&gt;axios/1.13.2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Entra ID Protection - High - AiTM"
 src="https://nicolasuter.ch/content/images/2026/eidp/id-protection-high.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;The problem? Even though Entra ID Protection flagged the sign-in as &amp;lsquo;High&amp;rsquo; risk, the user could still sign in because MFA automatically remediated the sign-in risk (&lt;code&gt;userPassedMfaDrivenByRiskBasedPolicy&lt;/code&gt;).&lt;/p&gt;

&lt;h3 class="relative group"&gt;The bummer?
 &lt;div id="the-bummer" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-bummer" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Report Only ID Protection Policy"
 src="https://nicolasuter.ch/content/images/2026/eidp/id-protection-report-only.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;The environment had a Conditional Access policy in place that would have blocked users with high sign-in risk, but the policy was only in &lt;em&gt;report-only&lt;/em&gt; mode, so the user could sign in without any issues.&lt;/p&gt;</description></item><item><title>CEO impersonation with Microsoft Booking</title><link>https://nicolasuter.ch/microsoft-booking-phish/</link><pubDate>Wed, 18 Mar 2026 20:00:03 +0000</pubDate><guid>https://nicolasuter.ch/microsoft-booking-phish/</guid><description>&lt;p&gt;Recently I observed an interesting behavior after setting up a Microsoft Booking page. After creating the booking page, I suddenly got an e-mail to an automatically created mail alias with the same name as the booking page. This made me curious and I wanted to understand the behavior behind this, and if this could be abused by attackers to impersonate users in Exchange online. In this blog post, I want to share my findings and some tips on how to detect and prevent this kind of abuse in your environment.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Microsoft Booking
 &lt;div id="microsoft-booking" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#microsoft-booking" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Microsoft describes the Bookings capabilities as part of Microsoft 365:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;A simpler way to organize schedules and manage appointments.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Microsoft Booking"
 src="https://nicolasuter.ch/content/images/2026/bookingp/bookings-landing.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;Booking pages can be either of type &amp;lsquo;personal&amp;rsquo; or &amp;lsquo;shared&amp;rsquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Personal booking pages provide a handy option for users to create their own booking page, which is automatically linked to their calendar and allows others to book appointments with them. This is a great feature for users who want to share their availability and allow others to easily schedule meetings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The shared booking pages allow teams to provide a booking experience for services hosted by a team and come with a special mailbox and calendar.&lt;/p&gt;</description></item><item><title>Defender XDR Unified Detections Meet Sentinel Data Lake</title><link>https://nicolasuter.ch/defender-xdr-unified-detections-sentinel-data-lake/</link><pubDate>Tue, 24 Feb 2026 22:00:03 +0000</pubDate><guid>https://nicolasuter.ch/defender-xdr-unified-detections-sentinel-data-lake/</guid><description>&lt;p&gt;With the Unified Security Operations Platform (USOP), Microsoft introduces Unified Detections - a single detection framework spanning both Sentinel and Defender XDR data. Pair this with native Sentinel Data Lake ingestion for XDR tables, and you have a compelling cost-optimization story. But is it ready for prime time? Let&amp;rsquo;s dive into the capabilities, current limitations, and what it means for your detection strategy.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Architecture Overview
 &lt;div id="architecture-overview" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#architecture-overview" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;Previous Detection Architecture
 &lt;div id="previous-detection-architecture" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#previous-detection-architecture" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;In the &amp;lsquo;previous&amp;rsquo; architecture, detections were created and managed separately for Microsoft Sentinel and Microsoft Defender XDR. This often led to overhead in terms of &amp;lsquo;where to create the detection&amp;rsquo;. Let&amp;rsquo;s take the use-case of IoC (Indicators of Compromise) based detections. Previously, if a security team wanted to create a detection based on IoCs imported via TAXII into Sentinel and the &lt;code&gt;DeviceNetworkEvents&lt;/code&gt; table, they would need to ingest the &lt;code&gt;DeviceNetworkEvents&lt;/code&gt; data into Sentinel as well and create the detection rule there. Furthermore, many MSSPs leveraged this pattern to create custom detections for their customers across Defender Advanced Hunting Data.&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="Existing Detection Architecture"
 src="https://nicolasuter.ch/content/images/2026/unifieddetections/arch_prev.png"
 &gt;&lt;/figure&gt;
&lt;p&gt;As part of the USOP onboarding, the following effects come into play, marked with an asterisk above:&lt;/p&gt;</description></item></channel></rss>