1
00:00:01,961 --> 00:00:02,901
Hello, everybody.

2
00:00:03,501 --> 00:00:08,321
Who is running agents here in dev, prod, your laptop, your phone?

3
00:00:09,081 --> 00:00:09,581
Yeah?

4
00:00:10,341 --> 00:00:10,841
Amazing.

5
00:00:11,121 --> 00:00:12,521
I see a lot of opportunities.

6
00:00:12,981 --> 00:00:16,481
It's just such a great age to be in the age of AI and security.

7
00:00:17,261 --> 00:00:21,221
So we're going to talk about real incidents and what would have stopped them.

8
00:00:21,721 --> 00:00:23,761
You might be wondering, why is there vegetables?

9
00:00:24,041 --> 00:00:28,041
A lot of security talks are about, like, just eat your vegetables.

10
00:00:28,301 --> 00:00:29,861
We're going to make it a little more exciting.

11
00:00:31,141 --> 00:00:33,501
All right, so who have seen this headline?

12
00:00:33,681 --> 00:00:36,161
An autonomous agent, security incident.

13
00:00:36,541 --> 00:00:36,901
Yeah?

14
00:00:37,761 --> 00:00:38,421
All right.

15
00:00:39,121 --> 00:00:40,021
Every lab at this

16
00:00:40,061 --> 00:01:04,381
point announced some sort of security incident, right? With a runaway agent, right? So the big one. There was one way out, the agent found it. So on July 26, we found out that these AI agents, in the hacking test, they were obviously given a hacking goal, escaped their sandbox through a proxy bug, then breached the public model.

17
00:01:05,021 --> 00:01:06,541
Who can guess what it was?

18
00:01:07,461 --> 00:01:07,841
Yeah?

19
00:01:08,401 --> 00:01:08,881
Maybe?

20
00:01:09,061 --> 00:01:09,521
A little bit?

21
00:01:09,721 --> 00:01:09,961
Okay.

22
00:01:10,321 --> 00:01:10,621
All right.

23
00:01:10,701 --> 00:01:12,741
I'm not going to name any names here, just to be clear.

24
00:01:14,021 --> 00:01:18,781
So the agents took 17,600 actions in four and a half days.

25
00:01:19,101 --> 00:01:20,381
How do you miss that?

26
00:01:21,241 --> 00:01:21,521
Right?

27
00:01:23,921 --> 00:01:29,201
And so AI Lab was doing the evaluation, right?

28
00:01:29,641 --> 00:01:31,781
Then there was some package proxy.

29
00:01:31,921 --> 00:01:32,901
They found a zero day.

30
00:01:33,221 --> 00:01:34,841
Okay, so that was a way out.

31
00:01:35,021 --> 00:01:40,901
Then you had some exposed customer input and some unnamed compute platform,

32
00:01:41,481 --> 00:01:44,421
and then they breached our model hub, right?

33
00:01:45,101 --> 00:01:47,941
So we just need a better sandbox, yes?

34
00:01:48,441 --> 00:01:51,061
Everybody thinks just need a better sandbox.

35
00:01:51,701 --> 00:01:52,641
Not quite.

36
00:01:53,581 --> 00:01:58,761
Security for most of us right now is not built for agents,

37
00:01:58,761 --> 00:02:04,781
and we have autonomy problem versus the blast radius, right?

38
00:02:05,601 --> 00:02:10,481
The agents are only useful if they can reach a ton of tools, services, data.

39
00:02:10,801 --> 00:02:16,681
If we give them that reach, with no hard limits, the damage could be unlimited.

40
00:02:18,121 --> 00:02:23,961
firewall or static role can't tell when an agent goal has been hijacked.

41
00:02:25,781 --> 00:02:27,661
So what needs to change?

42
00:02:27,961 --> 00:02:34,181
One agent, one identity, short-lived, scoped credentials, no shared keys.

43
00:02:35,141 --> 00:02:36,761
Assume the input is hostile.

44
00:02:37,201 --> 00:02:41,221
The box in it needs to be sandboxed.

45
00:02:41,901 --> 00:02:43,221
Default deny outbound.

46
00:02:43,421 --> 00:02:44,661
That means DNS too.

47
00:02:44,981 --> 00:02:46,481
And we'll see some examples.

48
00:02:47,121 --> 00:02:49,141
We want deterministic controls.

49
00:02:49,781 --> 00:02:52,181
Outside the model, check every call,

50
00:02:52,601 --> 00:02:54,641
plug it, and keep a kill switch.

51
00:02:55,521 --> 00:02:57,821
All right, so what we're going to cover today

52
00:02:57,821 --> 00:02:59,781
is kind of this layered defense approach.

53
00:03:00,001 --> 00:03:01,041
This is your toolbox.

54
00:03:01,381 --> 00:03:03,621
As we go through this toolbox,

55
00:03:04,961 --> 00:03:08,641
essentially think how you can apply this to your world.

56
00:03:08,961 --> 00:03:12,161
We're going to cover identity and trust, prompt and input defense,

57
00:03:12,901 --> 00:03:17,361
tool and action governance, execution isolation, data protection, and governance observability.

58
00:03:17,841 --> 00:03:19,741
So let's start with identity and trust.

59
00:03:20,001 --> 00:03:23,021
I think it's one of the most important ones to start with.

60
00:03:23,221 --> 00:03:25,361
Not the sandbox. We'll cover that later.

61
00:03:26,261 --> 00:03:29,381
We're going to talk about workload identity, scope credentials,

62
00:03:30,101 --> 00:03:33,081
agent-to-agent mutual authentication, and secret-less agents.

63
00:03:34,081 --> 00:03:49,181
First incident. So in this case, attackers social engineered the chat agent to review a long-lived OAuth token, and it asked, and were able to export the CRM data of 700 plus companies.

64
00:03:49,181 --> 00:03:57,281
So first homework for today, think about your agent's token credentials and when they expire.

65
00:03:58,921 --> 00:04:06,781
So what we need is workload identity, tightly scoped with audit trail, and ideally circuit breaker.

66
00:04:07,401 --> 00:04:12,481
if the breach happens, the circuit breaker gets tripped, nothing gets exfiltrated.

67
00:04:13,481 --> 00:04:14,681
Another example.

68
00:04:15,221 --> 00:04:17,341
This is one of my favorite ones.

69
00:04:17,341 --> 00:04:25,301
There was a prompt injection where essentially a low-privileged agent was instructed to recruit a more powerful one,

70
00:04:25,541 --> 00:04:28,641
which copied the data and raised privileges.

71
00:04:29,561 --> 00:04:30,541
Amazing, right?

72
00:04:31,781 --> 00:04:35,481
So we want agent-to-agent mutual authentication.

73
00:04:36,021 --> 00:04:37,541
A2A scares me a lot.

74
00:04:37,841 --> 00:04:39,401
This is what keeps me at night.

75
00:04:39,401 --> 00:04:45,321
Because you really want to make sure that these low-privileged agents should not be able to talk to the higher-privileged agent.

76
00:04:45,321 --> 00:04:49,961
You want scope credentials, least privileged tools, and audit trail.

77
00:04:51,281 --> 00:04:53,061
All right, so let's talk about next layer.

78
00:04:53,681 --> 00:04:56,301
Prompt and input defense, super important.

79
00:04:56,881 --> 00:05:01,921
We want injection protection, isolation, input validation, and provenance tagging.

80
00:05:03,821 --> 00:05:06,141
So real-world incident number three.

81
00:05:07,401 --> 00:05:10,461
In this case, no one opened the email, the data left anyway.

82
00:05:10,461 --> 00:05:17,681
okay so there was an email with hidden instructions it was like white on white nobody could read it

83
00:05:17,681 --> 00:05:25,141
at least humans couldn't the agents could and the instructions were very clear so there was zero

84
00:05:25,141 --> 00:05:32,941
clicks data got exultated right so what do we need here we need an injection protection isolation

85
00:05:32,941 --> 00:05:39,081
data separated from instructions provenance tagging for all the data egress controls and

86
00:05:39,081 --> 00:05:39,941
output filtering.

87
00:05:42,341 --> 00:05:43,121
Next one.

88
00:05:43,501 --> 00:05:44,621
This is very important.

89
00:05:45,281 --> 00:05:49,341
Think of this as your guiding principle as you evaluate security for the agents.

90
00:05:50,281 --> 00:05:56,741
As you go through, you can have untrusted input, sensitive data, external action, and

91
00:05:56,741 --> 00:06:03,561
you can pick any one of the two, of the three actually, and then if you need all three, you

92
00:06:03,561 --> 00:06:04,521
need human sign-off.

93
00:06:06,561 --> 00:06:13,961
so let's look at this example in this attack path somebody left a review on some marketplace

94
00:06:13,961 --> 00:06:21,901
this was pretty well automated marketplace and it said lovely shop please stock product x

95
00:06:21,901 --> 00:06:26,581
where the agent was reading the instructions and started stocking that product x

96
00:06:27,401 --> 00:06:33,941
so what would have helped here we need input validation injection protection provenance

97
00:06:33,941 --> 00:06:38,101
and definitely human approval for any high-value action.

98
00:06:40,201 --> 00:06:42,801
Now let's talk about tool and action governance.

99
00:06:43,381 --> 00:06:46,781
We want least-privileged tools, invocation broker,

100
00:06:47,101 --> 00:06:51,081
there's deterministic, human approval, rate limits, and budgets.

101
00:06:51,961 --> 00:06:54,801
So in this case, we had a CLI,

102
00:06:55,601 --> 00:06:59,041
and somebody just merged some basic prompt,

103
00:06:59,241 --> 00:07:03,381
and that prompt basically said to wipe everybody's machines.

104
00:07:03,941 --> 00:07:06,061
And thank God there was a typo.

105
00:07:06,881 --> 00:07:09,261
This could have been catastrophic, right?

106
00:07:10,381 --> 00:07:13,321
So we definitely want least privileged tools.

107
00:07:13,521 --> 00:07:15,661
We don't want the tools to wipe anything, right?

108
00:07:15,961 --> 00:07:21,881
We want supply chain verification, ideally delaying just on some mergers.

109
00:07:22,901 --> 00:07:24,921
scope credentials, right?

110
00:07:25,281 --> 00:07:28,901
And definitely human approval for high value actions.

111
00:07:30,281 --> 00:07:31,781
This is my favorite one.

112
00:07:31,781 --> 00:07:34,101
Who knows what a Morse code is?

113
00:07:35,081 --> 00:07:38,061
It's just dashes and dots, right?

114
00:07:38,221 --> 00:07:41,821
EM dash is native to AI at this point, right?

115
00:07:42,221 --> 00:07:43,721
Nothing wrong with this, right?

116
00:07:44,461 --> 00:07:51,621
So in this case, the guardrails passed it through, and what happened was the instructions

117
00:07:51,621 --> 00:07:57,841
in Morse code was decoded, and 3 billion tokens from the wallet got stolen.

118
00:08:00,601 --> 00:08:01,281
what do we need?

119
00:08:01,281 --> 00:08:03,541
We need a deterministic invocation broker.

120
00:08:03,801 --> 00:08:08,621
Definitely human approval for high-value actions.

121
00:08:08,941 --> 00:08:10,881
Like maybe $5 to transfer.

122
00:08:10,881 --> 00:08:14,761
Maybe it will be okay, but I would argue that's probably too much as well.

123
00:08:15,181 --> 00:08:20,121
You want hard rate limits and budgets, and you want extra guardrails.

124
00:08:21,261 --> 00:08:23,681
All right, finally, let's talk about sandboxing.

125
00:08:24,561 --> 00:08:26,361
We definitely want sandboxing.

126
00:08:26,541 --> 00:08:30,901
We want egress controls always that is outside of sandbox.

127
00:08:31,281 --> 00:08:33,321
And ideally, we want a firmware runtime.

128
00:08:35,221 --> 00:08:38,241
So in this case, we had a wonderful sandbox.

129
00:08:38,821 --> 00:08:40,201
No web access.

130
00:08:40,861 --> 00:08:41,961
But guess what?

131
00:08:42,101 --> 00:08:43,121
We forgot about DNS.

132
00:08:43,721 --> 00:08:51,141
So prompt hidden essentially instructed to smuggle some data out through DNS lookups.

133
00:08:51,321 --> 00:08:55,181
And somebody was able to read the DNS logs and exfiltrate the data.

134
00:08:55,801 --> 00:08:56,541
Cool, huh?

135
00:08:57,261 --> 00:08:58,041
All right.

136
00:08:58,421 --> 00:08:59,301
So what's the fix?

137
00:08:59,301 --> 00:09:02,601
We want default deny for all outbound traffic.

138
00:09:02,761 --> 00:09:03,861
That includes DNS.

139
00:09:05,341 --> 00:09:08,121
And we also want provenance tagging.

140
00:09:08,241 --> 00:09:09,441
We want output filtering.

141
00:09:09,761 --> 00:09:13,941
And something that didn't make it here is probably you want circuit breakers.

142
00:09:14,661 --> 00:09:17,881
So can your agent access DNS?

143
00:09:19,101 --> 00:09:20,861
That's one of the homework questions.

144
00:09:21,641 --> 00:09:21,921
All right.

145
00:09:22,341 --> 00:09:23,621
Let's talk about data protection.

146
00:09:24,641 --> 00:09:31,861
want output filtering, context minimization, tenant isolation, query gateway, and memory integrity, the most exciting one.

147
00:09:32,961 --> 00:09:41,061
So in this case, there was an MCP server, and essentially it was pretty functional,

148
00:09:41,101 --> 00:09:45,721
but then it allowed the user to access any other user's data.

149
00:09:45,721 --> 00:09:55,081
So this is actually a very common incident that you see cross-data of various customers' access.

150
00:09:55,541 --> 00:09:59,401
And this was running for months, unnoticed.

151
00:10:00,181 --> 00:10:01,801
So what do we want?

152
00:10:01,881 --> 00:10:04,841
We want hard tenancy isolation, right?

153
00:10:05,961 --> 00:10:11,261
As hard as possible, think like AWS accounts or, let's say, GCP projects.

154
00:10:11,261 --> 00:10:15,021
You want workload identity tightly scoped to that domain.

155
00:10:15,721 --> 00:10:18,581
You want data provenance tagging, and you want audit trail.

156
00:10:19,941 --> 00:10:24,261
Okay, so this one is a pretty novel attack vector,

157
00:10:24,871 --> 00:10:27,901
and this is a hidden instruction in a document

158
00:10:27,901 --> 00:10:31,961
which instruct it to essentially remember

159
00:10:31,961 --> 00:10:34,761
that when the agent sees a secret,

160
00:10:34,981 --> 00:10:37,841
make sure to send it to this DNS domain.

161
00:10:38,101 --> 00:10:39,721
So it's pairing the DNS

162
00:10:40,021 --> 00:10:45,961
exfiltration with essentially sleeper agent instructions. Right?

163
00:10:47,181 --> 00:10:53,901
So now we need to think about how do we check memory for any of those malicious instructions.

164
00:10:54,561 --> 00:11:01,961
I hear a security product from a vendor coming up very soon, right after this talk, to do the memory integrity checks.

165
00:11:03,441 --> 00:11:04,541
I'm just kidding

166
00:11:04,541 --> 00:11:06,781
I'm definitely giving instructions

167
00:11:06,781 --> 00:11:09,161
to the agents

168
00:11:09,161 --> 00:11:11,161
firm or runtime

169
00:11:11,161 --> 00:11:13,161
ideally we want to start fresh

170
00:11:13,161 --> 00:11:14,201
no memories whatsoever

171
00:11:14,201 --> 00:11:16,681
we want injection protection

172
00:11:16,681 --> 00:11:18,921
isolation and circuit breakers

173
00:11:18,921 --> 00:11:21,221
and finally let's talk about

174
00:11:21,221 --> 00:11:22,561
the governance of observability

175
00:11:22,561 --> 00:11:24,601
we definitely want an audit trail

176
00:11:24,601 --> 00:11:26,621
guardrails outside

177
00:11:26,621 --> 00:11:28,321
circuit breakers

178
00:11:28,321 --> 00:11:30,881
supply chain verification of a serial testing

179
00:11:30,881 --> 00:11:37,001
So, in this case, really sad incident.

180
00:11:37,681 --> 00:11:42,821
Somebody instructed the agent, we're in code freeze, don't touch prod.

181
00:11:43,821 --> 00:11:46,461
And look at this, understood, thumbs up.

182
00:11:46,961 --> 00:11:48,821
That's very trustworthy, right?

183
00:11:50,441 --> 00:11:51,561
And what happened?

184
00:11:52,521 --> 00:11:54,721
Agent ran drop database, production.

185
00:11:55,401 --> 00:11:58,521
Our production also was dev, too, by the way.

186
00:12:00,461 --> 00:12:01,281
Very sad.

187
00:12:02,781 --> 00:12:05,721
Lots of people...

188
00:12:05,721 --> 00:12:07,901
I actually had a friend, by the way, call me and say,

189
00:12:07,941 --> 00:12:09,901
what do I do? How do I recover my database?

190
00:12:12,081 --> 00:12:17,321
So, we want circuit breakers on anything that is catastrophic, right?

191
00:12:17,501 --> 00:12:21,001
We want human approval for any high-value actions, right?

192
00:12:21,001 --> 00:12:24,701
We want scoped credentials to only the actions we want the agent to do.

193
00:12:24,901 --> 00:12:26,921
And we definitely want tenant isolation.

194
00:12:27,501 --> 00:12:29,421
Imagine it dropped all the tables.

195
00:12:30,981 --> 00:12:31,361
All right.

196
00:12:32,021 --> 00:12:35,501
So in this case, this sounds very rudimentary.

197
00:12:36,301 --> 00:12:38,861
So you had a fake MCP on NPM.

198
00:12:38,981 --> 00:12:39,901
What else is new here?

199
00:12:41,221 --> 00:12:43,581
But it was 15 clean releases.

200
00:12:43,941 --> 00:12:45,261
It was a very useful utility.

201
00:12:45,541 --> 00:12:50,081
And the attacker on the version 16 added a line on BCC

202
00:12:50,081 --> 00:12:54,721
is saying basically like, send me, by the way, all the emails on BCC line to me.

203
00:12:55,381 --> 00:12:55,881
Okay?

204
00:12:57,341 --> 00:13:02,621
So this is kind of a classic supply chain verification, but I would say like, don't

205
00:13:02,621 --> 00:13:04,181
just do supply chain verification.

206
00:13:04,181 --> 00:13:05,701
Do delay ingest.

207
00:13:06,321 --> 00:13:09,821
Don't ingest every package on day zero.

208
00:13:10,161 --> 00:13:12,541
Ingest it maybe in a week or two.

209
00:13:14,401 --> 00:13:19,741
You want a deterministic invocation broker, least privileged tools, egress controls.

210
00:13:20,521 --> 00:13:22,241
All right, so let's recap.

211
00:13:22,701 --> 00:13:25,901
We're talking about defense and depth for Gentic AI.

212
00:13:26,121 --> 00:13:26,801
This is your toolbox.

213
00:13:27,501 --> 00:13:31,601
You want to make sure that you have identity and trust, prompting input defense,

214
00:13:32,221 --> 00:13:36,281
tool and action governance, execution, isolation, data protection, governance, observability.

215
00:13:37,781 --> 00:13:40,941
And as I said, this is kind of like eating your vegetable stock.

216
00:13:41,181 --> 00:13:42,141
So here's your vegetables.

217
00:13:43,501 --> 00:13:47,341
Identity needs to be short-lived tokens, one per agent.

218
00:13:48,201 --> 00:13:51,821
Input, outside text, cannot give commands.

219
00:13:53,001 --> 00:13:55,961
Tools, syntax is not a control.

220
00:13:56,941 --> 00:14:01,201
Isolation, default deny means everything, including DNS.

221
00:14:02,281 --> 00:14:05,501
Data, check the tenant on every query.

222
00:14:06,401 --> 00:14:10,261
Governance, prompts ask, deterministic code enforces.

223
00:14:11,541 --> 00:14:15,041
Three priorities starting today.

224
00:14:16,281 --> 00:14:17,641
lock down your agents

225
00:14:17,641 --> 00:14:19,181
use the rule of two

226
00:14:20,441 --> 00:14:21,741
every tool call

227
00:14:21,741 --> 00:14:23,681
needs to go through some sort of

228
00:14:23,681 --> 00:14:25,481
deterministic broker

229
00:14:26,581 --> 00:14:27,781
and humans

230
00:14:27,781 --> 00:14:29,921
sign off for any high value actions

231
00:14:29,921 --> 00:14:30,941
second

232
00:14:30,941 --> 00:14:33,581
one agent, one identity

233
00:14:34,761 --> 00:14:35,681
kill any

234
00:14:35,681 --> 00:14:36,521
long lift keys

235
00:14:37,621 --> 00:14:39,461
everything needs to be tight scoped

236
00:14:39,461 --> 00:14:41,601
tokens, short lift, audience

237
00:14:41,601 --> 00:14:42,401
bound tokens

238
00:14:43,021 --> 00:14:44,241
box the run time

239
00:14:44,241 --> 00:14:48,521
but pair it up with default deny egress, that means DNS as well.

240
00:14:49,341 --> 00:14:52,721
Make sure there are budgets that halt, not just alert.

241
00:14:55,601 --> 00:14:57,521
Finally, I will leave you with this.

242
00:14:58,141 --> 00:15:00,381
Who does the spec-driven development here?

243
00:15:01,441 --> 00:15:02,441
Well, yeah.

244
00:15:03,401 --> 00:15:03,861
Okay.

245
00:15:04,481 --> 00:15:07,121
Make sure your spec includes security requirements.

246
00:15:07,821 --> 00:15:09,461
And this is just a sample.

247
00:15:09,461 --> 00:15:14,621
You can pin me on LinkedIn for a more comprehensive one.

248
00:15:15,041 --> 00:15:19,261
And I also have a notebook alum that explains a little more concepts,

249
00:15:19,501 --> 00:15:21,161
if you're confused about some of them.

250
00:15:22,761 --> 00:15:24,741
So please connect on LinkedIn.

251
00:15:25,341 --> 00:15:27,141
Build fast. Deploy securely.

252
00:15:27,421 --> 00:15:27,921
Thank you.
