Prioritizing Defense in an AI-Accelerated Threat Landscape

Anuradha
October 13, 2026 19 mins to read
Prioritizing Defense in an AI-Accelerated Threat Landscape – Cloud Diary

CLOUD DIARY

AZURE · MICROSOFT 365 · SECURITY

● REAL CASES · REAL SETTINGS

Prioritizing defense in an
AI-accelerated threat landscape

Five real attacks on Microsoft 365 and Azure from the last two years, and the exact settings in your tenant that would have stopped them.

48hrs

is about how long an exposed cloud asset lasts before it gets hit

54%

of people clicked AI-written phishing. Normal phishing got 12%

97%

of identity attacks still start with a stolen or guessed password

99%

of identity attacks get blocked once MFA is turned on

source · Microsoft Digital Defense Report

#Microsoft365 #Azure #EntraID #ConditionalAccess

✍️ Anuradha · real incidents, the settings that stop them, and queries you can run today

what changed

The attacks are old. The speed is new.

When I went through the incidents in this post, I expected to find clever new techniques. I mostly didn't. A forgotten account with no MFA. A phishing page that copies the session. A fake meeting invite. A phone call to the help desk. A sync server nobody was watching.

What AI changed is the cost. A good phishing email used to take time and good English. Now it takes seconds, in any language. Scanning for weak spots used to take patience. Now it runs on its own, and an exposed cloud asset can be hit within about two days.

So the goal isn't to chase every new AI threat. It's to close the same few doors faster than the attackers can find them.

the good news

Almost every fix in this post is a setting you already have a license for in Entra ID, Defender or Azure.

The hard part is applying it to every account and every subscription, with no exceptions left behind.

how an attack moves

Five steps of an attack, and what stops each one

how a typical attack moves todayRecontargets pickedautomaticallyminutesPhishingAI-written lure,54% click rateminutesCredentialvalid login —looks normalhoursCloud movetokens, apps,misconfighoursExtortiondata stolenand encrypted≤48 hrswhat blocks each stepAttack surfaceinventory + patchPhishing-resistant MFAblocks >99%Conditional Accessrisk-based, no legacy authDefender for Cloudposture + detectionTested recoveryisolated backups

↔ scroll sideways on mobile · red shows the attacker, green shows the control that blocks that step

Keep this picture in mind for the cases below. Each one broke in at a different step, and each one would have been stopped by the green box under it.

real incidents

Five real attacks, and how to block them in your tenant

For each one: what actually happened, where AI makes it worse, and the settings to change. The grey path under each step shows where to find it.

01 Identity January 2024

A forgotten test account opened senior leaders' inboxes

Midnight Blizzard vs Microsoft

What happened

Russian state hackers ran a slow password spray from residential IP addresses, so the traffic looked like normal home users.

They found an old, non-production test account with no MFA. From there they took over a legacy test OAuth app that still had high permissions in the corporate tenant.

They used it to grant themselves full mailbox access in Exchange Online and read email from senior leadership.

Where AI makes it worse

Finding forgotten accounts and guessing weak passwords is exactly the kind of boring, repetitive work that AI tools now do at scale. Every old test tenant, lab account and unused app is on someone's list.

Protect your tenant

1

MFA for every account, including test and lab tenants. Only your two break-glass accounts get an exclusion.

Entra admin center → Conditional Access → Policies
2

Stop users from consenting to apps on their own. Turn on the admin consent workflow so requests come to you.

Entra → Enterprise apps → Consent and permissions
3

Review apps that have application permissions to mail, files or the directory. Remove the ones nobody owns.

Entra → Enterprise apps → Permissions · Defender → App governance
4

Turn on sign-in risk policies so password spray patterns get blocked or challenged.

Entra → ID Protection → Risk policies

Source: Microsoft guidance via Infosecurity Magazine

02 Phishing · MFA bypass 2023 – March 2026

Phishing kits that steal the session, not the password

Tycoon 2FA, plus an AI-written phishing campaign

What happened

Tycoon 2FA sat between the user and the real Microsoft 365 sign-in page. The user typed the password and approved MFA as normal. The kit copied the session cookie and the attacker reused it from their own machine.

Microsoft says it was linked to compromised accounts at nearly 100,000 organizations. It was rented on Telegram for about $120. Microsoft and Europol took it down in March 2026, and reports say it came back soon after.

In August 2025 Microsoft also caught a phishing campaign whose hidden code looked like it was written by an AI model. It was buried inside an SVG file that pretended to be a PDF.

Where AI makes it worse

AI writes better lures in any language and generates new code for each campaign, so content filters have less to match on. Push approvals and SMS codes don't help here at all, because the user really did approve the sign-in.

Protect your tenant

1

Require phishing-resistant MFA (passkeys, Windows Hello, FIDO2 keys). Start with admins and finance, then everyone.

Conditional Access → Grant → Require authentication strength
2

Require a compliant or hybrid-joined device for Microsoft 365. A stolen cookie on the attacker's laptop then fails.

Conditional Access → Grant → Require compliant device
3

Add token protection for Exchange, SharePoint and Teams on Windows. It is GA for native apps and binds the token to the device.

Conditional Access → Session → Require token protection
4

Turn on Safe Links with time-of-click checks and zero-hour auto purge. Use the Strict preset for executives.

Defender portal → Email & collaboration → Policies
5

When an account is hit, revoke all sessions. A password reset alone leaves the stolen cookie working.

Entra → Users → Revoke sessions

Source: Tycoon2FA takedown, BleepingComputer · Microsoft: AI vs AI

03 Phishing · Device code August 2024 – February 2025

A fake Teams invite that asked for a code

Storm-2372

What happened

The attackers first built trust over WhatsApp, Signal or Teams while pretending to be someone important. Then they sent a Teams meeting invite with a code in it.

The victim typed the code into a real Microsoft sign-in page. That is the device code flow, made for smart TVs and meeting room devices. It handed the attacker a valid token for the victim's mailbox, with no password needed.

Later they registered devices in Entra ID to keep their access. Targets included government, defense, IT, telecom, health and energy organizations, including in the Middle East.

Where AI makes it worse

Building a believable fake identity and keeping a conversation going for days used to take real effort. AI makes it cheap to run many of these conversations at once.

Protect your tenant

1

Block the device code flow with Conditional Access. Run it in report-only mode first and exclude only the meeting room devices that really need it.

Conditional Access → Conditions → Authentication flows → Device code flow
2

Check who uses device code today before you block it.

Entra → Sign-in logs → filter Authentication protocol = Device code
3

Restrict who can register or join devices to Entra ID, and alert on new device registrations.

Entra → Devices → Device settings

Source: Microsoft report via BleepingComputer · Microsoft Learn: authentication flows

04 Help desk April 2025

One phone call to the help desk cost about £300 million

Marks & Spencer (linked to Scattered Spider)

What happened

An attacker pretended to be an M&S employee and asked the outsourced IT help desk to reset a password. The help desk did it.

A week later ransomware hit the company's VMware hosts. Online orders stopped for 46 days and customer data was stolen.

M&S estimated around £300m off its operating profit. No exploit was needed for the first step. Just a convincing call.

Where AI makes it worse

Voice cloning tools can copy someone's voice from a short clip, and the answers to the usual security questions are often on LinkedIn. A help desk that checks identity by phone alone is now an easy target.

Protect your tenant

1

Don't reset passwords or MFA based on a phone call alone. Verify identity first, for example with Entra Verified ID and Face Check, then issue a Temporary Access Pass.

Entra → Verified ID · Authentication methods → Temporary Access Pass
2

Use separate, cloud-only admin accounts that the normal help desk cannot reset.

Entra → Roles & admins · Administrative units
3

Give admin rights only when needed, with approval and a time limit.

Entra → Privileged Identity Management
4

Alert when a new MFA method is added to an admin account. That is usually the first thing an attacker does.

Sentinel / Defender → custom detection on AuditLogs

Source: Incident summary, Trusona · Retail Systems: M&S ends TCS help desk contract

05 Azure · Ransomware August 2025

Ransomware that deleted the Azure backups first

Storm-0501

What happened

The group started on-premises and got domain admin. They then reached the Entra Connect sync server and used it to look into the cloud tenant.

They found a synced, non-human account with Global Admin and no MFA. They reset its password on-premises, it synced to the cloud, and now they owned the tenant.

They added their own tenant as a trusted federated domain as a backdoor, took control of Azure resources, copied the data out, and then mass-deleted resources and backups so the victim couldn't recover. The ransom demand came over Teams.

Where AI makes it worse

Attackers move from on-premises to cloud faster when they can script the discovery. The weak spots are the same every time: sync servers, admin accounts without MFA, and backups that an admin can delete.

Protect your tenant

1

Treat the Entra Connect server like a domain controller. Keep it patched, update to 2.5.3.0 or later, and turn on TPM.

Entra Connect → upgrade · server hardening
2

Never sync admin accounts from on-premises. Admins should be cloud-only, with phishing-resistant MFA.

Entra → Roles & admins → review role members
3

Alert on 'elevate access' in Azure. It is rare, and it gives the user control over every subscription.

Sentinel → AuditLogs, category AzureRBACRoleManagementElevateAccess
4

Make backups impossible to delete: locked immutability, always-on soft delete and multi-user authorization. That is the 'Excellent' security level.

Business Continuity Center → Security levels

Source: Microsoft report via The Hacker News · Microsoft Learn: backup security levels

the order I'd follow

Putting it in order

You can't fix everything at once. This is the order I'd use, based on how much each step blocks from the cases above.

P0
FIRST
30 DAYS

Close the front door

Goes straight after cases 01, 02 and 03. Mostly Conditional Access settings and cleanup.

🔑 MFA everywhere, stronger for admins

MFA for every account with no forgotten exceptions. Phishing-resistant authentication strength for admins, finance and executives.

🚪 Block legacy auth and device code

Two Conditional Access policies. Use report-only mode for a week, then turn them on.

🧹 Clean up forgotten accounts and apps

Test accounts, old tenants, apps with mail permissions. Turn off user consent.

🧯 Lock your backups

Immutable vault, always-on soft delete and multi-user authorization. Then test one restore.

P1
BY
60 DAYS

Limit the damage

Covers cases 04 and 05, where the attacker already got one foot inside.

⏱️ PIM for every admin role

No standing Global Admin. Approval and a time limit for the rest.

☁️ Cloud-only admins

Stop syncing privileged accounts from on-premises. Harden the Entra Connect server.

📞 A help desk process that can't be talked around

Verified ID check, then a Temporary Access Pass. No resets based on a phone call alone.

💻 Device-bound sessions

Compliant device requirement and token protection, so a stolen cookie is useless elsewhere.

P2
BY
90 DAYS

See it when it happens

Assume something gets through. These make sure you notice in minutes, not weeks.

📡 Send Entra logs to Sentinel

Sign-in and audit logs in a workspace, so the queries below can run as alerts.

🚨 Alert on the rare stuff

New MFA methods on admins, elevate access, new app consents, mass deletions in Azure.

🛡️ Defender for Cloud posture

Find public storage, open management ports and attack paths before someone else does.

🧪 Practise the response

Time how long it takes to revoke a user's sessions and restore one server.

effort against reward

Start with the top-left corner

EFFORT / COST →RISK REDUCED →DO THIS FIRSTplan and fundquick housekeepinglaterPhishing-resistant MFAIsolated, tested backupsConditional Access baselineRehearsed IR playbooksAsset + exposure inventoryKill legacy authDefender for Cloud postureAI + data governancePIM for privileged rolesToken / session monitoringPost-quantum inventory

positions give a rough idea, not exact measurements

The controls that cut the most risk are also the cheapest and the least exciting. Most of the top-left corner is a few Conditional Access policies and some cleanup.

check your own tenant

Seven queries to run today

Each one maps back to a case above. The first five need Entra sign-in and audit logs sent to a Log Analytics workspace or Sentinel. The last two run in Azure Resource Graph Explorer with no setup.

01 Who still signs in with legacy protocols? Log Analytics · SigninLogs ›

Anything listed here skips Conditional Access. Fix or block each one before you enforce the block tenant-wide.

SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| where ClientAppUsed !in ("Browser", "Mobile Apps and Desktop clients")
| summarize SignIns = count(), LastSeen = max(TimeGenerated)
    by UserPrincipalName, ClientAppUsed, AppDisplayName
| order by SignIns desc
02 Who used the device code flow? Log Analytics · SigninLogs ›

Run this before you block device code flow. Sign-ins from unmanaged devices are the ones to look at first.

SigninLogs
| where TimeGenerated > ago(30d)
| where ResultType == 0
| where AuthenticationProtocol == "deviceCode"
| extend Managed = isnotempty(tostring(DeviceDetail.deviceId))
| project TimeGenerated, UserPrincipalName, AppDisplayName,
          IPAddress, Location, Managed
| order by TimeGenerated desc
03 Which apps got consent recently? Log Analytics · AuditLogs ›

Look for apps you don't recognise, or apps that asked for mail or file access.

AuditLogs
| where TimeGenerated > ago(30d)
| where OperationName == "Consent to application"
| extend User = tostring(InitiatedBy.user.userPrincipalName),
         App  = tostring(TargetResources[0].displayName)
| project TimeGenerated, User, App, Result
| order by TimeGenerated desc
04 Who added a new MFA method? Log Analytics · AuditLogs ›

After a help desk reset or a session theft, attackers usually register their own MFA method. Check these against your admin list.

AuditLogs
| where TimeGenerated > ago(14d)
| where OperationName in ("User registered security info",
                          "User registered all required security info")
| extend User = tostring(TargetResources[0].userPrincipalName),
         IP   = tostring(InitiatedBy.user.ipAddress)
| project TimeGenerated, User, OperationName, IP, Result
| order by TimeGenerated desc
05 Did anyone use 'elevate access' in Azure? Log Analytics · AuditLogs ›

This gives User Access Administrator on every subscription. In most tenants it should almost never show up.

AuditLogs
| where TimeGenerated > ago(90d)
| where Category == "AzureRBACRoleManagementElevateAccess"
| extend Actor = tostring(InitiatedBy.user.userPrincipalName),
         IP    = tostring(InitiatedBy.user.ipAddress)
| project TimeGenerated, OperationName, Actor, IP, Result
06 Can your backups be deleted? Azure Resource Graph ›

You want immutability 'Locked' and soft delete 'AlwaysON'. Anything else can be wiped by a stolen admin account.

resources
| where type =~ "microsoft.recoveryservices/vaults"
| extend Immutability = tostring(properties.securitySettings.immutabilitySettings.state),
         SoftDelete   = tostring(properties.securitySettings.softDeleteSettings.softDeleteState)
| project name, resourceGroup, subscriptionId, Immutability, SoftDelete
| order by Immutability asc
07 Which storage accounts are open to the internet? Azure Resource Graph ›

Exposed storage gets found within days. Check anything that allows public blob access or public network access.

resources
| where type =~ "microsoft.storage/storageaccounts"
| extend PublicBlob    = tobool(properties.allowBlobPublicAccess),
         PublicNetwork = tostring(properties.publicNetworkAccess)
| where PublicBlob == true or PublicNetwork != "Disabled"
| project name, resourceGroup, subscriptionId, PublicBlob, PublicNetwork

Tip: once a query gives you useful results, save it as a Sentinel analytics rule so it runs on its own.

a two-minute check

How does your tenant look?

Only tick what is fully done today, not what's planned.

Your result shows up here…

if you only do one thing

Find every account that can still sign in without MFA, especially admin accounts, synced service accounts and old test accounts. That one gap was the way in for cases 01 and 05. The authentication methods report in Entra shows it in a few minutes.

📚 Sources and further reading

Case details come from Microsoft Threat Intelligence reports and public reporting linked under each case. Diagrams were drawn for this post with the official Azure icon set.

#Microsoft365 #Azure #EntraID #ConditionalAccess #Sentinel #ZeroTrust #PhishingResistantMFA #CloudSecurity

Leave a comment

Your email address will not be published. Required fields are marked *

Share