The M365 Attack Chain Is Not What You Think

Mirko PetersPodcasts9 minutes ago5 Views


1
00:00:00,000 –> 00:00:03,040
Officers stand by for mission briefing, red alert.

2
00:00:03,040 –> 00:00:05,880
MFA isn’t a shield on my watch.

3
00:00:05,880 –> 00:00:10,960
Stolen tokens, right past it, like cloaked ships through an open gate.

4
00:00:10,960 –> 00:00:12,600
Firewalls guard borders.

5
00:00:12,600 –> 00:00:14,680
But the breach doesn’t cross borders.

6
00:00:14,680 –> 00:00:16,320
It hijacks identity.

7
00:00:16,320 –> 00:00:17,960
Here’s our mission promise.

8
00:00:17,960 –> 00:00:21,440
We’ll map a real M365 tenant breach end to end.

9
00:00:21,440 –> 00:00:23,160
We start in the attackers cockpit.

10
00:00:23,160 –> 00:00:26,280
We end with detections and policy locks you can deploy today.

11
00:00:26,280 –> 00:00:30,360
We’ll track consent fishing, token theft and OAuth abuse.

12
00:00:30,360 –> 00:00:34,280
We’ll show the exact logs, the Sentinel analytics and the Entra controls.

13
00:00:34,280 –> 00:00:36,920
There’s one policy that breaks this chain.

14
00:00:36,920 –> 00:00:39,480
Stay sharp, threat, intel brief.

15
00:00:39,480 –> 00:00:42,880
What modern crews actually do, listen up officers.

16
00:00:42,880 –> 00:00:44,520
The intelligence picture is clear.

17
00:00:44,520 –> 00:00:46,520
The enemy doesn’t brute force doors.

18
00:00:46,520 –> 00:00:47,480
They borrow badges.

19
00:00:47,480 –> 00:00:49,920
They use commodity AETM fishing kits.

20
00:00:49,920 –> 00:00:52,600
Fishing as a service outfits run at scale.

21
00:00:52,600 –> 00:00:57,600
Malicious OAuth apps drift across tenants like multi-tenant gunships.

22
00:00:57,600 –> 00:01:00,040
The tooling is cheap, the effect is strategic.

23
00:01:00,040 –> 00:01:01,280
Their goal set is simple.

24
00:01:01,280 –> 00:01:06,920
Take the mailbox, siphon sharepoint, persist via app consent and tokens.

25
00:01:06,920 –> 00:01:11,840
With offline access, they keep refreshed tokens alive.

26
00:01:11,840 –> 00:01:15,240
With graph, they pull data quiet and headless.

27
00:01:15,240 –> 00:01:17,360
With mail rules, they blind your centuries.

28
00:01:17,360 –> 00:01:19,240
Why all defenses fail?

29
00:01:19,240 –> 00:01:22,520
MFA blocks passwords, not replayable sessions.

30
00:01:22,520 –> 00:01:26,600
Admin portals don’t show OAuth sprawl by default.

31
00:01:26,600 –> 00:01:31,160
Portals lull crews to sleep while service principles multiply in the dark.

32
00:01:31,160 –> 00:01:32,320
You see users.

33
00:01:32,320 –> 00:01:33,360
They use apps.

34
00:01:33,360 –> 00:01:35,120
You chase login failures.

35
00:01:35,120 –> 00:01:37,080
They replay cookies.

36
00:01:37,080 –> 00:01:39,000
Different war.

37
00:01:39,000 –> 00:01:41,280
Assume this terrain.

38
00:01:41,280 –> 00:01:43,760
Entra ID holds identity.

39
00:01:43,760 –> 00:01:46,520
Exchange online and sharepoint house the crown.

40
00:01:46,520 –> 00:01:49,920
Defender and Sentinel exist, but they’re under tuned.

41
00:01:49,920 –> 00:01:52,400
Telemetry flows, alerts don’t.

42
00:01:52,400 –> 00:01:54,520
That gap is where attackers live.

43
00:01:54,520 –> 00:01:57,520
Here are the artifacts that matter.

44
00:01:57,520 –> 00:02:02,400
Entra ID sign-in logs show authentication requirements satisfied.

45
00:02:02,400 –> 00:02:06,080
That phrase hides the heist when a stolen cookie glides in.

46
00:02:06,080 –> 00:02:11,280
Audit logs record consent to application, service, principle created,

47
00:02:11,280 –> 00:02:13,720
and app role assigned to.

48
00:02:13,720 –> 00:02:19,960
An exchange mailbox audit tracks inbox rule ads, external forwarding and folder moves.

49
00:02:19,960 –> 00:02:26,040
SharePoint and the unified audit log show file access and file downloaded

50
00:02:26,040 –> 00:02:31,200
with an app ID stamp app registrations and service principle updates

51
00:02:31,200 –> 00:02:33,440
mark credential drops and scope creep.

52
00:02:33,440 –> 00:02:36,280
The thing most people miss, you don’t just guard the login.

53
00:02:36,280 –> 00:02:40,360
You bind the token device binding and conditional access.

54
00:02:40,360 –> 00:02:42,360
Based on risk, cut the replay.

55
00:02:42,360 –> 00:02:44,920
That’s the shield, not another password policy.

56
00:02:44,920 –> 00:02:48,960
Token protection for exchange and share point makes a stolen cookie

57
00:02:48,960 –> 00:02:51,080
useless off device.

58
00:02:51,080 –> 00:02:57,320
Risk-based conditional access holds the session even when MFA already passed.

59
00:02:57,320 –> 00:03:03,920
Now the operational truth attackers run AATM reverse proxies to capture credentials

60
00:03:03,920 –> 00:03:05,880
and the session token in the same pass.

61
00:03:05,880 –> 00:03:08,600
They land a rogue multi tenant app.

62
00:03:08,600 –> 00:03:10,760
Scopes look harmless.

63
00:03:10,760 –> 00:03:12,200
User.

64
00:03:12,200 –> 00:03:13,200
Read mail.

65
00:03:13,200 –> 00:03:19,480
All read offline access but together they grant durable reach.

66
00:03:19,480 –> 00:03:21,040
They pivot to graph harvesting.

67
00:03:21,040 –> 00:03:23,360
They do it with no human logo in the loop.

68
00:03:23,360 –> 00:03:25,520
The mailbox becomes a data host.

69
00:03:25,520 –> 00:03:27,640
SharePoint becomes a quiet stream.

70
00:03:27,640 –> 00:03:31,680
No popups, no prompts, just API calls.

71
00:03:31,680 –> 00:03:34,240
Your telemetry grid must light up early.

72
00:03:34,240 –> 00:03:41,760
In Sentinel analytic rules should watch for consent by risky users or from unfamiliar IP

73
00:03:41,760 –> 00:03:43,080
ranges.

74
00:03:43,080 –> 00:03:48,880
New EBA in Defender flags, impossible travel and sudden session switches that match hijack

75
00:03:48,880 –> 00:03:50,400
patterns.

76
00:03:50,400 –> 00:03:54,720
Custom KQL can alert on a new service principle with high value scopes.

77
00:03:54,720 –> 00:03:57,680
That’s how we catch the ship as it declokes.

78
00:03:57,680 –> 00:04:01,000
But remember this crew, visibility without policy is theatre.

79
00:04:01,000 –> 00:04:04,240
If users can grant consent, you’ll lose ground.

80
00:04:04,240 –> 00:04:10,000
If tokens aren’t bound, the enemy will replay sessions from clean infrastructure.

81
00:04:10,000 –> 00:04:14,080
If your all-o-list is blank, every appid looks normal.

82
00:04:14,080 –> 00:04:20,840
Follow protocol, disable user consent, enforce admin workflow, turn on token protection where

83
00:04:20,840 –> 00:04:26,080
supported, segment conditional access by workload and device compliance, then your detections

84
00:04:26,080 –> 00:04:29,240
mean action, not after action reports.

85
00:04:29,240 –> 00:04:30,240
Hold the line.

86
00:04:30,240 –> 00:04:33,680
Initial access, consent phishing and token theft.

87
00:04:33,680 –> 00:04:35,160
Your mission coordinates.

88
00:04:35,160 –> 00:04:39,960
The breach starts with consent phishing plus AITM token theft, one click, no MFA prompt

89
00:04:39,960 –> 00:04:40,960
for access.

90
00:04:40,960 –> 00:04:42,240
That’s the play.

91
00:04:42,240 –> 00:04:43,440
Why this matters?

92
00:04:43,440 –> 00:04:47,760
If a user grants consent, an app gets scopes the user doesn’t understand.

93
00:04:47,760 –> 00:04:49,160
Mail.

94
00:04:49,160 –> 00:04:50,880
Read looks harmless.

95
00:04:50,880 –> 00:04:53,040
Offline access looks boring.

96
00:04:53,040 –> 00:04:57,440
Together they create durable reach that survives password resets.

97
00:04:57,440 –> 00:05:02,520
And with ITM the attacker steals the session cookie at the same time MFA already fired.

98
00:05:02,520 –> 00:05:05,600
The cookie replays clean, gate wide open.

99
00:05:05,600 –> 00:05:07,480
Here’s what the crews run.

100
00:05:07,480 –> 00:05:12,720
An adversary in the middle reverse proxy sits between the user and Microsoft.

101
00:05:12,720 –> 00:05:17,920
The email lure is standard, invoice, share request, payroll update.

102
00:05:17,920 –> 00:05:21,000
The link routes through the proxy, the user enters credentials.

103
00:05:21,000 –> 00:05:22,840
The proxy relates to Microsoft.

104
00:05:22,840 –> 00:05:23,920
MFA completes.

105
00:05:23,920 –> 00:05:26,560
The proxy captures the session token.

106
00:05:26,560 –> 00:05:31,120
At the same moment, a benign looking multi-tenant app asks for consent.

107
00:05:31,120 –> 00:05:34,800
The prompt says, read your mail and basic profile.

108
00:05:34,800 –> 00:05:38,440
The user approves, no alarm, no second factor.

109
00:05:38,440 –> 00:05:43,840
The attacker now holds two assets, a live cookie and a sanctioned service principle.

110
00:05:43,840 –> 00:05:45,800
Now the technique stack.

111
00:05:45,800 –> 00:05:50,920
First, consent grant to a malicious multi-tenant app.

112
00:05:50,920 –> 00:05:53,120
Scopes user.

113
00:05:53,120 –> 00:05:55,120
Read mail.

114
00:05:55,120 –> 00:05:57,280
Read offline access.

115
00:05:57,280 –> 00:05:59,880
The key is offline access.

116
00:05:59,880 –> 00:06:02,960
It authorizes refresh tokens for long sessions.

117
00:06:02,960 –> 00:06:06,360
Second, session token theft via the reverse proxy.

118
00:06:06,360 –> 00:06:09,000
The cookie gets replayed from a new device.

119
00:06:09,000 –> 00:06:10,960
No password, no prompt.

120
00:06:10,960 –> 00:06:14,960
Third, OUTH abuse through Microsoft Graph.

121
00:06:14,960 –> 00:06:17,960
The attacker queries mail and files headless.

122
00:06:17,960 –> 00:06:22,520
Harvest begins quiet, consistent API cadence, not human behavior.

123
00:06:22,520 –> 00:06:24,480
Let me show you exactly how we see it.

124
00:06:24,480 –> 00:06:29,320
In Entra ID audit, you’ll find consent to application.

125
00:06:29,320 –> 00:06:31,680
Then service principle created.

126
00:06:31,680 –> 00:06:34,280
Then app role assigned to.

127
00:06:34,280 –> 00:06:36,520
Those three mean the app landed.

128
00:06:36,520 –> 00:06:40,320
The service identity exists and scopes are active.

129
00:06:40,320 –> 00:06:43,040
In Entra ID, sign in logs.

130
00:06:43,040 –> 00:06:46,920
Look for authentication requirements satisfied.

131
00:06:46,920 –> 00:06:52,040
Tied to a new device or country within minutes of the user’s real login.

132
00:06:52,040 –> 00:06:54,080
That pattern screams cookie replay.

133
00:06:54,080 –> 00:06:55,760
In exchange mailbox audit.

134
00:06:55,760 –> 00:06:57,440
Watch for ad inbox rule.

135
00:06:57,440 –> 00:07:01,080
Ad inbox rule or SMTP forwarding settings.

136
00:07:01,080 –> 00:07:04,040
Often dropped right after consent to blind the user.

137
00:07:04,040 –> 00:07:10,000
In the unified audit log and SharePoint logs, file access and file downloaded events show

138
00:07:10,000 –> 00:07:13,200
an app ID, not Outlook or a browser.

139
00:07:13,200 –> 00:07:15,840
That app ID is the ghost doing the pulling.

140
00:07:15,840 –> 00:07:17,160
Detections to arm now.

141
00:07:17,160 –> 00:07:23,120
Incentenal, build an analytic that fires on consent to application when the requester

142
00:07:23,120 –> 00:07:26,880
is high value or the source IP is unfamiliar.

143
00:07:26,880 –> 00:07:29,680
Share it with a watch list of sanctioned app id.

144
00:07:29,680 –> 00:07:32,600
Anything outside that list gets priority one.

145
00:07:32,600 –> 00:07:36,960
Turn on UEBA for impossible travel and sudden session switching.

146
00:07:36,960 –> 00:07:40,200
Identity satisfied from one country than a second country.

147
00:07:40,200 –> 00:07:42,840
Minutes apart, same user agent string.

148
00:07:42,840 –> 00:07:44,360
That’s a hijack signature.

149
00:07:44,360 –> 00:07:48,880
Add custom KQL to flag new service principles with scopes like mail.

150
00:07:48,880 –> 00:07:51,160
Read right files read dot all.

151
00:07:51,160 –> 00:07:53,680
Sites read dot all.

152
00:07:53,680 –> 00:07:57,400
Or offline access when granted to non admins.

153
00:07:57,400 –> 00:07:59,160
Those scopes are the data hose.

154
00:07:59,160 –> 00:08:00,680
Now here’s where most people mess up.

155
00:08:00,680 –> 00:08:02,160
They leave user consent on.

156
00:08:02,160 –> 00:08:04,320
They trust that MFA blocks the fish.

157
00:08:04,320 –> 00:08:06,040
They don’t enable token protection.

158
00:08:06,040 –> 00:08:07,040
Result.

159
00:08:07,040 –> 00:08:09,640
The attacker asks the user for access.

160
00:08:09,640 –> 00:08:11,640
The organization never approved.

161
00:08:11,640 –> 00:08:15,640
And the stolen cookie lands on clean infrastructure, the tenant trusts.

162
00:08:15,640 –> 00:08:17,080
No control sees it as foreign.

163
00:08:17,080 –> 00:08:18,080
You get no prompt.

164
00:08:18,080 –> 00:08:19,080
You get no fail.

165
00:08:19,080 –> 00:08:20,080
You get no chance.

166
00:08:20,080 –> 00:08:21,080
The quick win.

167
00:08:21,080 –> 00:08:23,560
Disable user consent across the tenant.

168
00:08:23,560 –> 00:08:25,480
Build the admin consent workflow.

169
00:08:25,480 –> 00:08:28,040
Force all app requests through review.

170
00:08:28,040 –> 00:08:31,400
Second turn on token protection for exchange and share point.

171
00:08:31,400 –> 00:08:32,720
We’re available.

172
00:08:32,720 –> 00:08:34,720
Device bind those tokens.

173
00:08:34,720 –> 00:08:36,920
So replay from another machine.

174
00:08:36,920 –> 00:08:38,560
Dies at the gate.

175
00:08:38,560 –> 00:08:42,360
Third, enable sign in risk conditional access.

176
00:08:42,360 –> 00:08:45,960
If risk is medium or above, require step up or block.

177
00:08:45,960 –> 00:08:50,400
This stops a stolen cookie piggybacking from a new country.

178
00:08:50,400 –> 00:08:54,240
An example.

179
00:08:54,240 –> 00:09:00,840
In five minutes, sign in logs show requirements satisfied from two countries.

180
00:09:00,840 –> 00:09:07,320
Audit shows consent to application to a multi tenant app named Mail Optimizer.

181
00:09:07,320 –> 00:09:13,880
Unified audit shows file downloaded by that app ID from a share point sales site.

182
00:09:13,880 –> 00:09:23,560
Each mailbox audit shows a new inbox rule moving messages from security to RSS subscriptions.

183
00:09:23,560 –> 00:09:26,520
That’s the entire chain end to end on a single screen.

184
00:09:26,520 –> 00:09:28,720
Once you nail this picture, everything else clicks.

185
00:09:28,720 –> 00:09:30,240
The first battle is consent.

186
00:09:30,240 –> 00:09:31,960
The second is token replay.

187
00:09:31,960 –> 00:09:33,240
Shut those doors.

188
00:09:33,240 –> 00:09:35,360
And the rest of the chain starves.

189
00:09:35,360 –> 00:09:36,680
Hold the line.

190
00:09:36,680 –> 00:09:37,680
Persistence.

191
00:09:37,680 –> 00:09:40,920
Living off the land with OAuth and mail rules.

192
00:09:40,920 –> 00:09:42,440
Listen up officers.

193
00:09:42,440 –> 00:09:45,480
This consent lands and the cookie replace the enemy stops sprinting.

194
00:09:45,480 –> 00:09:46,480
They dig in.

195
00:09:46,480 –> 00:09:48,240
They turn access into residency.

196
00:09:48,240 –> 00:09:49,880
Password resets won’t save you now.

197
00:09:49,880 –> 00:09:51,520
App consent survives them.

198
00:09:51,520 –> 00:09:52,920
Refresh tokens renew them.

199
00:09:52,920 –> 00:09:55,120
They become service.

200
00:09:55,120 –> 00:09:56,120
Quiet.

201
00:09:56,120 –> 00:09:57,120
Durable.

202
00:09:57,120 –> 00:09:58,880
Hard to evict.

203
00:09:58,880 –> 00:10:00,600
Why this matters?

204
00:10:00,600 –> 00:10:05,160
If they keep offline access, they hold the refresh token that rotates forever until you

205
00:10:05,160 –> 00:10:06,480
revoke the grant.

206
00:10:06,480 –> 00:10:08,080
They don’t need the user again.

207
00:10:08,080 –> 00:10:09,320
They don’t need a prompt.

208
00:10:09,320 –> 00:10:13,880
The graph becomes their supply line.

209
00:10:13,880 –> 00:10:16,160
No one watches headless ships.

210
00:10:16,160 –> 00:10:17,160
Here’s the playbook.

211
00:10:17,160 –> 00:10:19,160
First, they protect the tap.

212
00:10:19,160 –> 00:10:26,200
Hidden inbox rules root anything from security, IT or Microsoft to a dead folder or delete

213
00:10:26,200 –> 00:10:27,200
on arrival.

214
00:10:27,200 –> 00:10:28,720
The user sees nothing.

215
00:10:28,720 –> 00:10:30,080
Second, they harden persistence.

216
00:10:30,080 –> 00:10:33,560
They add a second, benign looking multi-tenant app.

217
00:10:33,560 –> 00:10:34,560
Same scopes.

218
00:10:34,560 –> 00:10:35,560
Say for name.

219
00:10:35,560 –> 00:10:38,320
If you kill the first, the twin breathes life back in.

220
00:10:38,320 –> 00:10:40,640
Third, they upgrade scopes over time.

221
00:10:40,640 –> 00:10:44,120
From mail, read to mail, read right.

222
00:10:44,120 –> 00:10:48,840
From sites, read.all to files, read.all.

223
00:10:48,840 –> 00:10:49,840
Small changes.

224
00:10:49,840 –> 00:10:50,840
Big reach.

225
00:10:50,840 –> 00:10:52,560
Operational telemetry.

226
00:10:52,560 –> 00:10:55,280
In Entra audit, watch for update application.

227
00:10:55,280 –> 00:10:56,600
Add credentials.

228
00:10:56,600 –> 00:10:58,160
Key credential added.

229
00:10:58,160 –> 00:10:59,720
Password credential added.

230
00:10:59,720 –> 00:11:00,880
Those are key drops.

231
00:11:00,880 –> 00:11:04,640
Service principles getting new secrets mean hands on your lifeline.

232
00:11:04,640 –> 00:11:08,360
An app roller sign to scope creep appears as new roller signments.

233
00:11:08,360 –> 00:11:09,360
Mail.

234
00:11:09,360 –> 00:11:10,360
Read right.

235
00:11:10,360 –> 00:11:11,360
Sites.

236
00:11:11,360 –> 00:11:12,360
Read.

237
00:11:12,360 –> 00:11:13,880
To all.

238
00:11:13,880 –> 00:11:14,880
Files.

239
00:11:14,880 –> 00:11:15,880
Read.

240
00:11:15,880 –> 00:11:16,880
All.

241
00:11:16,880 –> 00:11:22,080
Each grant expands the blast radius.

242
00:11:22,080 –> 00:11:25,280
In exchange admin audit and mailbox audit.

243
00:11:25,280 –> 00:11:26,280
Set inbox rule.

244
00:11:26,280 –> 00:11:27,640
New inbox rule.

245
00:11:27,640 –> 00:11:30,160
And set mailbox with forwarding semtip address.

246
00:11:30,160 –> 00:11:32,400
Tell you the blindfold is on.

247
00:11:32,400 –> 00:11:35,800
Rules that redirect external are the ex fill highways.

248
00:11:35,800 –> 00:11:38,240
Let me show you exactly how to monitor it.

249
00:11:38,240 –> 00:11:42,920
In Sentinel build an analytic for inbox rules that forward externally and inbox rules that

250
00:11:42,920 –> 00:11:45,240
delete or move security mail.

251
00:11:45,240 –> 00:11:48,640
Use an allow list for approved forwarding domains.

252
00:11:48,640 –> 00:11:50,040
Everything else triggers.

253
00:11:50,040 –> 00:11:57,000
Pay that with defender, you eeba, to detect sudden spikes in graph calls by a new app id.

254
00:11:57,000 –> 00:11:58,160
Baseline per app.

255
00:11:58,160 –> 00:12:00,920
Alert when call volume jumps or hits odd hours.

256
00:12:00,920 –> 00:12:03,400
This reveals the quiet hose turning into a pump.

257
00:12:03,400 –> 00:12:05,120
Now here’s where most people mess up.

258
00:12:05,120 –> 00:12:06,480
They revoke a single token.

259
00:12:06,480 –> 00:12:07,600
They reset a password.

260
00:12:07,600 –> 00:12:08,800
They close the incident.

261
00:12:08,800 –> 00:12:10,880
The service principle keeps breathing.

262
00:12:10,880 –> 00:12:12,160
The refresh token renews.

263
00:12:12,160 –> 00:12:13,400
The twin app wakes up.

264
00:12:13,400 –> 00:12:14,840
Days later, files keep moving.

265
00:12:14,840 –> 00:12:16,440
The crew thinks it’s normal sink.

266
00:12:16,440 –> 00:12:17,440
It’s not.

267
00:12:17,440 –> 00:12:18,440
You didn’t cut the artery.

268
00:12:18,440 –> 00:12:19,880
You only scratched the skin.

269
00:12:19,880 –> 00:12:21,040
How to break it.

270
00:12:21,040 –> 00:12:22,040
Follow protocol.

271
00:12:22,040 –> 00:12:23,040
Step one.

272
00:12:23,040 –> 00:12:27,200
Revoke app consent for every malicious and suspicious app in entra.

273
00:12:27,200 –> 00:12:28,760
Remove the service principles.

274
00:12:28,760 –> 00:12:30,520
Kill the grants at the root.

275
00:12:30,520 –> 00:12:31,520
Step two.

276
00:12:31,520 –> 00:12:34,240
Invalidate refresh tokens.

277
00:12:34,240 –> 00:12:37,760
Tenant-wide for the affected identities.

278
00:12:37,760 –> 00:12:39,880
Force sign out.

279
00:12:39,880 –> 00:12:41,680
End active sessions.

280
00:12:41,680 –> 00:12:43,200
Step three.

281
00:12:43,200 –> 00:12:49,360
Rotate application secrets for any sanctioned app that touched the compromised accounts.

282
00:12:49,360 –> 00:12:51,240
Assume token leakage.

283
00:12:51,240 –> 00:12:52,720
Step four.

284
00:12:52,720 –> 00:12:55,520
Implement conditional access session controls.

285
00:12:55,520 –> 00:12:57,800
Block legacy refresh tokens.

286
00:12:57,800 –> 00:13:02,480
Set sign-in frequency to force re-evaluation on high-risk signals.

287
00:13:02,480 –> 00:13:07,120
Device by and tokens with token protection for exchange and sharepoint were supported.

288
00:13:07,120 –> 00:13:08,920
Replay dies at the gate.

289
00:13:08,920 –> 00:13:10,600
Quick lab to practice.

290
00:13:10,600 –> 00:13:14,280
Pull entra audit and search activity display.

291
00:13:14,280 –> 00:13:16,960
Name equals consent to application.

292
00:13:16,960 –> 00:13:18,360
Capture the app ID.

293
00:13:18,360 –> 00:13:24,040
Cross-map that app it to unified audit events for file access and file downloaded.

294
00:13:24,040 –> 00:13:27,080
You’ll see which sharepoint sites the app touched.

295
00:13:27,080 –> 00:13:33,800
First query exchange mailbox audit for new inbox rule and set inbox rule by that user in

296
00:13:33,800 –> 00:13:35,400
the same time frame.

297
00:13:35,400 –> 00:13:37,640
That alignment confirms blinding plus pull.

298
00:13:37,640 –> 00:13:41,240
Finally check app roll assigned to for that service principle.

299
00:13:41,240 –> 00:13:45,080
Any growth in scopes after day one is a persistence tell.

300
00:13:45,080 –> 00:13:47,800
Your countermeasures need structure.

301
00:13:47,800 –> 00:13:50,920
Build a Sentinel watch list of approved app IDs.

302
00:13:50,920 –> 00:13:52,640
Your sanctioned fleet.

303
00:13:52,640 –> 00:13:54,480
Alert on deviations.

304
00:13:54,480 –> 00:14:01,720
Set a playbook when consent to application fires an app ID not in watch list auto-revol grants

305
00:14:01,720 –> 00:14:06,240
disable the app notify the soc and open a ticket.

306
00:14:06,240 –> 00:14:10,840
Tie in defender for cloud apps or auth app governance to rate limit or block apps with

307
00:14:10,840 –> 00:14:13,520
high permissions and anomalous use.

308
00:14:13,520 –> 00:14:19,360
One system sees the other acts 12 time collapses to minutes but remember this policy first detection

309
00:14:19,360 –> 00:14:20,360
second.

310
00:14:20,360 –> 00:14:27,800
Disable user consent enforce admin workflow require compliant device for exchange and sharepoint

311
00:14:27,800 –> 00:14:33,200
external forwarding disabled by default with a narrow exception list then your telemetry

312
00:14:33,200 –> 00:14:36,080
becomes a weapon not a diary.

313
00:14:36,080 –> 00:14:42,360
Hold the line lateral movement from mailbox to share point to keys engineers the beach head

314
00:14:42,360 –> 00:14:48,560
is up now the crew pivots from a single mailbox they map the galaxy their target is data

315
00:14:48,560 –> 00:14:54,720
gravity share point male and the directory graph turns it all into a hose why this matters

316
00:14:54,720 –> 00:15:01,440
the mailbox is in tell it holds project names sight links vendors and leadership threads

317
00:15:01,440 –> 00:15:06,920
with that context the enemy charts where the crown lives share point libraries finance

318
00:15:06,920 –> 00:15:13,640
folders executive calendars from there they don’t guess they query here’s the movement

319
00:15:13,640 –> 00:15:18,520
pattern first they enumerate sites via graph with sites

320
00:15:18,520 –> 00:15:25,040
read all they query root then drives then lists they harvest site IDs and drive IDs they

321
00:15:25,040 –> 00:15:30,320
sample a few files to validate value if it pays the scale second they rate the mailbox

322
00:15:30,320 –> 00:15:37,840
for MFA reset paths and vendor conversations business email compromise rides these threads

323
00:15:37,840 –> 00:15:44,480
they inject replies change payment instructions and wait third they probe and draw with directory

324
00:15:44,480 –> 00:15:49,640
read scopes they list users groups and app role assignments they tag privileged users

325
00:15:49,640 –> 00:15:56,240
and shared mailboxes if scopes allow they grow to files read all or mail read right each

326
00:15:56,240 –> 00:16:01,240
inches strategic now the telemetry that gives them away in the unified audit log you’ll see

327
00:16:01,240 –> 00:16:07,240
file access and file downloaded with a single app it hitting many sites the pattern is

328
00:16:07,240 –> 00:16:14,320
a volume from one caller not many users in enter sign in a single app ID is tied to multiple

329
00:16:14,320 –> 00:16:21,560
high value users within hours cross entity correlation lights that up in exchange mailbox

330
00:16:21,560 –> 00:16:28,800
audit new inbox rule with redirect to or delete message appears near the X fill window

331
00:16:28,800 –> 00:16:34,680
forwarding to external SMTP addresses is the red flare listen up officers Sentinel and

332
00:16:34,680 –> 00:16:41,560
defender can box this in if we tune them you eBA should watch per app ID download volume

333
00:16:41,560 –> 00:16:48,400
per site and trigger on time of day deviations quiet service apps don’t pull 10,000 files

334
00:16:48,400 –> 00:16:55,280
at 2 a.m unless someone turned the tap built in analytic rule for high risk or scopes assigned

335
00:16:55,280 –> 00:17:02,480
to non admin users if male dot read right or files dot read don’t all lands on a standard

336
00:17:02,480 –> 00:17:09,640
user raise priority one pair a playbook when anomalous download volume by app it triggers block

337
00:17:09,640 –> 00:17:15,880
the app in entra revoke its grants and set the user session to sign out if defender for

338
00:17:15,880 –> 00:17:22,600
endpoint flags cookie theft tools on a device isolate the endpoint and correlate with identity

339
00:17:22,600 –> 00:17:29,040
events exfiltration trade craft is subtle they use graph batch API’s to group calls that

340
00:17:29,040 –> 00:17:35,080
smooth rates and dodges crude thresholds they throttle to mimics sync clients they exfiltrate

341
00:17:35,080 –> 00:17:41,280
to attacker cloud storage hosted in benign ranges so IP reputation stays clean they may

342
00:17:41,280 –> 00:17:46,280
hop through a vendor account in your tenant to blend further this is why baseline by

343
00:17:46,280 –> 00:17:53,080
app ID and site not raw counts context beats thresholds defense moves that work on my watch

344
00:17:53,080 –> 00:17:58,320
conditional access must segment by workload require compliant device for exchange and

345
00:17:58,320 –> 00:18:05,000
share point a headless apti to a random VM will fail block user consent tenant wide force

346
00:18:05,000 –> 00:18:12,400
admin workflow bind tokens with token protection for exchange and share point where supported

347
00:18:12,400 –> 00:18:18,200
now the replay dies and app calls must come from known posture dlp needs service principle

348
00:18:18,200 –> 00:18:24,920
awareness policies that only watch user agents miss graph apps enable external forwarding

349
00:18:24,920 –> 00:18:32,520
disabled by default then create a narrow allow list for domains that truly need it now the

350
00:18:32,520 –> 00:18:38,760
mistake that ruins everything teams allow broad scopes to low risk apps for convenience

351
00:18:38,760 –> 00:18:44,640
they also maintain a wide exception for external forwarding because vendors need it that’s an

352
00:18:44,640 –> 00:18:50,280
exfilt runway shut it build a proper exception request pipeline tie it to sentinel watchlists

353
00:18:50,280 –> 00:18:55,440
every exception becomes an entity you monitor harder let me show you exactly how to hunt

354
00:18:55,440 –> 00:19:01,400
this in sentinel query the unified audit log for office workload equals share point group

355
00:19:01,400 –> 00:19:08,000
by app ID count file downloaded over one hour windows and compare to the last 14 days app

356
00:19:08,000 –> 00:19:14,400
pits that spike without prior baseline are suspects next pull and trust sign ins where the

357
00:19:14,400 –> 00:19:22,840
same app ID access multiple users in 24 hours especially rolls tagged high value then correlate

358
00:19:22,840 –> 00:19:28,960
exchange mailbox audit for forwarding and delete rules within the same window that

359
00:19:28,960 –> 00:19:37,280
triad apps bike cross user access messaging blindfold is the lateral signature operational

360
00:19:37,280 –> 00:19:44,840
story fast a marketing manager account grants consent within hours unified audit shows

361
00:19:44,840 –> 00:19:54,000
a pd 9 f pulling 3000 files from three sites tied to sales and finance enter sign ins linked

362
00:19:54,000 –> 00:20:00,120
that apeed to four executives exchange shows a redirect rule on one execs mailbox to an

363
00:20:00,120 –> 00:20:07,160
external domain the playbook fires revokes the app removes rules forces signouts and isolates

364
00:20:07,160 –> 00:20:13,120
a device flagged for cookie theft tooling damage window under 20 minutes that’s the standard

365
00:20:13,120 –> 00:20:20,320
but remember this policy closest doors before detection rings bells lock consent bind tokens

366
00:20:20,320 –> 00:20:25,400
segment access by device compliance your telemetry then becomes early warning not a post

367
00:20:25,400 –> 00:20:33,160
mortem hold the line detection engineering playbooks KQL and unified response offices we

368
00:20:33,160 –> 00:20:40,120
compressed dwell time now return telemetry into automatic action seconds matter minutes decide

369
00:20:40,120 –> 00:20:50,080
impact follow protocol objective is simple convert key signals into playbooks that cut access

370
00:20:50,080 –> 00:20:58,360
blind the adversary an alert command no manual heroics just disciplined automation core playbooks

371
00:20:58,360 –> 00:21:06,920
in sentinel first trigger consent to application or new high risk or scope action set revoke

372
00:21:06,920 –> 00:21:13,440
all grants for that apeed disable the service principle notify s o c and open an incident

373
00:21:13,440 –> 00:21:19,880
with high severity add a step to comment the event back into entrust audit trail for chain

374
00:21:19,880 –> 00:21:26,880
of custody second trigger external forwarding rule created or inbox rule that deletes

375
00:21:26,880 –> 00:21:33,840
or moves messages from security senders action set remove the rule block external forwarding

376
00:21:33,840 –> 00:21:41,520
if not on allow list send the user a security brief and force user sign out across sessions

377
00:21:41,520 –> 00:21:50,600
third trigger anomalous download volume by a pd in share point or files read all surge action

378
00:21:50,600 –> 00:21:57,800
set block the app in entra revoke refresh tokens for affected users quarantine the user session

379
00:21:57,800 –> 00:22:03,960
and if defender for endpoint shows cookie theft tooling on any linked device isolate that

380
00:22:03,960 –> 00:22:11,840
endpoint one alert full cut your KQL hunting pack is your radar keep it lean keep it lethal

381
00:22:11,840 –> 00:22:19,040
entra audit focus audit logs where activity display name in consent to application add service

382
00:22:19,040 –> 00:22:28,280
principle credentials update application project time generated initiated by target resources

383
00:22:28,280 –> 00:22:39,040
result unified audit focus office activity where office workload in share point exchange

384
00:22:39,040 –> 00:22:49,280
summarize events count by pd office workload bin time generated one h join kind left

385
00:22:49,280 –> 00:22:58,080
untie allow listed apps on app it sign in focus sign in logs where authentication requirements

386
00:22:58,080 –> 00:23:08,000
exe satisfied summarize countries account location details country or region devices

387
00:23:08,000 –> 00:23:18,640
decount device detail device ID by user principle name bin time generated one h where countries

388
00:23:18,640 –> 00:23:26,000
one or devices one tie these to watch lists maintain three approved app it’s high value

389
00:23:26,000 –> 00:23:32,040
users allowed forwarding domains your analytics should cross check every alert against these

390
00:23:32,040 –> 00:23:39,680
lists to auto prioritize and act entra id policies that break the chain activate them

391
00:23:39,680 –> 00:23:45,600
disable user consent enforce the admin consent workflow require phishing resistant MFA like

392
00:23:45,600 –> 00:23:51,120
phydo 2 or windows hello for high value users turn on token protection for exchange and

393
00:23:51,120 –> 00:23:57,000
share point were available set sign in frequency for sensitive workloads and disable persistent

394
00:23:57,000 –> 00:24:03,320
browser sessions on risky profiles conditional access must require compliant device for exchange

395
00:24:03,320 –> 00:24:09,880
and share point access block sign in with medium or high risk these settings convert identity

396
00:24:09,880 –> 00:24:15,280
posture into a shield defender integrations complete the perimeter enable defender for

397
00:24:15,280 –> 00:24:22,000
cloud apps or op app governance it will surface high permission apps anomalous use and risky

398
00:24:22,000 –> 00:24:28,560
publisher patterns turn on alerts for high impact scopes mass downloads and unusual tenants

399
00:24:28,560 –> 00:24:35,840
per app spreads in defender for identity use lateral path insights tied to service principle

400
00:24:35,840 –> 00:24:42,160
activity links bikes and graph calls from new app it’s to identity anomalies when either

401
00:24:42,160 –> 00:24:49,200
fires let Sentinel own the response common gaps and fixes no app governance enable all

402
00:24:49,200 –> 00:24:55,920
all governance and approvals flat conditional access segment by workload user risk and device

403
00:24:55,920 –> 00:25:02,800
state no allow list deploy the app it watch list and enforce it in every analytic and playbook alerts

404
00:25:02,800 –> 00:25:09,920
without action waste time action without tuning causes noise we require both operational drill

405
00:25:09,920 –> 00:25:18,080
consent to application event lens for a non allow listed appied analytic fires playbook revokes

406
00:25:18,080 –> 00:25:25,360
grants disables the app forces signouts for the user and posts a briefing to sec ops in parallel

407
00:25:25,360 –> 00:25:34,000
a second analytic sees file downloaded surge tied to that appy the playbook blocks the app sign in

408
00:25:34,000 –> 00:25:41,600
revokes refresh tokens for all impacted users and opens a unified incident defender for endpoint

409
00:25:41,600 –> 00:25:47,760
flags a cookie theft tool on one machine isolation executes containment under five minutes

410
00:25:47,760 –> 00:25:54,640
that’s our standard before we close remember the hierarchy policy blocks detection reveals

411
00:25:54,640 –> 00:26:02,320
automation cuts hunting confirms reporting educates this order holds the line

412
00:26:02,880 –> 00:26:09,840
the one step breaker and your orders if you remember nothing else bind tokens and kill

413
00:26:09,840 –> 00:26:17,920
consent sprawl controls that act before attackers replay identity your orders disable user consent

414
00:26:17,920 –> 00:26:25,040
and enforce the admin workflow now turn on token protection and risk based conditional access

415
00:26:25,040 –> 00:26:31,360
with compliant device required for exchange and share point deploy Sentinel playbooks for consent

416
00:26:31,360 –> 00:26:38,240
events external forwarding and anomalous downloads tied to appied run the KQL hunts today

417
00:26:38,240 –> 00:26:44,960
purge unsanctioned apps and brief executive mailboxes with step up authentication hold the line





Source link

0 Votes: 0 Upvotes, 0 Downvotes (0 Points)

Leave a reply

Follow
Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...