1
00:00:00,000 --> 00:00:09,624
*preroll music*

2
00:00:09,624 --> 00:00:11,789
Herald: So, welcome everybody,

3
00:00:11,789 --> 00:00:14,429
the next talk is under the topic

4
00:00:14,429 --> 00:00:18,550
"shoplifting", uh, "shopshifting", sorry.
*laughter*

5
00:00:18,550 --> 00:00:20,480
Shoplifting is something completely different,

6
00:00:20,480 --> 00:00:23,279
it has nothing to do with shopshifting,

7
00:00:23,279 --> 00:00:25,250
the outcome is the same.

8
00:00:25,250 --> 00:00:26,779
*laughter*

9
00:00:26,779 --> 00:00:29,410
And I present to you Karsten Nohl,

10
00:00:29,410 --> 00:00:33,330
Fabian Bräunlein, and Dexter from Berlin

11
00:00:33,330 --> 00:00:35,570
Some of you may have already seen

12
00:00:35,570 --> 00:00:38,230
the one only other face here,

13
00:00:38,230 --> 00:00:40,550
and you may have heard of things like

14
00:00:40,550 --> 00:00:44,140
the Mifare RFID problems that we had,

15
00:00:44,140 --> 00:00:48,120
the gsm sim card hacks,
and things like BadUSB

16
00:00:48,120 --> 00:00:50,120
and these people and people around them

17
00:00:50,120 --> 00:00:52,510
are all responsible for that.

18
00:00:52,510 --> 00:00:55,520
So, give them a warm applause, and...

19
00:00:55,520 --> 00:01:04,630
*applause*
stage is yours!

20
00:01:04,630 --> 00:01:06,740
Nohl: Thank you very much.

21
00:01:06,740 --> 00:01:09,580
It's great to be back,
looking at yet another technology

22
00:01:09,580 --> 00:01:13,540
and searching for
security vulnerabilities.

23
00:01:13,540 --> 00:01:15,750
We focus our research on technologies

24
00:01:15,750 --> 00:01:19,300
that most of us use on a daily basis,

25
00:01:19,300 --> 00:01:21,780
that are typically outdated,

26
00:01:21,780 --> 00:01:24,970
very widely deployed, and insecure.

27
00:01:24,970 --> 00:01:26,680
Took us many years to finally come around

28
00:01:26,680 --> 00:01:28,650
to look at payment protocols,

29
00:01:28,650 --> 00:01:31,810
which we'll be discussing today.

30
00:01:31,810 --> 00:01:33,640
In part, it took so long because

31
00:01:33,640 --> 00:01:37,220
we just didn't think
we would find anything.

32
00:01:37,220 --> 00:01:41,350
After all, some of the best people
in our industry work at banks,

33
00:01:41,350 --> 00:01:45,600
and banks have among the most
developed risk management.

34
00:01:45,600 --> 00:01:49,390
So, at least in my experience,

35
00:01:49,390 --> 00:01:53,420
banks are good at reacting
to security evolution.

36
00:01:53,420 --> 00:01:56,430
That's what I thought up until
maybe the middle of this year,

37
00:01:56,430 --> 00:01:58,020
when we started this research

38
00:01:58,020 --> 00:02:01,909
and we're here now today to take
this preconception away

39
00:02:01,909 --> 00:02:04,270
from whoever may still be

40
00:02:04,270 --> 00:02:05,850
suffering from this illusion that

41
00:02:05,850 --> 00:02:09,389
banks actually do keep
their systems very secure,

42
00:02:09,389 --> 00:02:11,090
at least we found in two cases,

43
00:02:11,090 --> 00:02:14,209
two very widely deployed protocols,

44
00:02:14,209 --> 00:02:17,579
that there's gaping holes and have been
for a couple of years.

45
00:02:17,579 --> 00:02:20,739
Both of these protocols are
involved in payment,

46
00:02:20,739 --> 00:02:22,159
that is if you go into a store

47
00:02:22,159 --> 00:02:23,659
and you pay with a card,

48
00:02:23,659 --> 00:02:25,260
those protocols are invoked,

49
00:02:25,260 --> 00:02:26,659
at least in Germany,

50
00:02:26,659 --> 00:02:30,749
and protocols are called ZVT and Poseidon.

51
00:02:30,749 --> 00:02:33,430
They're used for very different purposes,

52
00:02:33,430 --> 00:02:36,930
but they both terminate at
a payment terminal.

53
00:02:36,930 --> 00:02:39,480
The one protocol ZVT is spoken between

54
00:02:39,480 --> 00:02:42,049
a cashier station and
this payment terminal,

55
00:02:42,049 --> 00:02:44,450
so somebody would scan some items

56
00:02:44,450 --> 00:02:47,459
or type in some amount
into this cashier station,

57
00:02:47,459 --> 00:02:49,529
and then say, "now please pay",

58
00:02:49,529 --> 00:02:52,499
and a command is sent to
the payment terminal,

59
00:02:52,499 --> 00:02:53,919
which then requests a card,

60
00:02:53,919 --> 00:02:55,959
and perhaps a pin number,

61
00:02:55,959 --> 00:02:58,459
for most transactions in Germany,

62
00:02:58,459 --> 00:03:01,209
and then in turns invokes another protocol

63
00:03:01,209 --> 00:03:04,609
that this payment terminal speaks with
a payment processor.

64
00:03:04,609 --> 00:03:06,989
That's a service provider that connects

65
00:03:06,989 --> 00:03:09,359
these terminals to banks,

66
00:03:09,359 --> 00:03:13,579
and basically facilitates
the actual payment.

67
00:03:13,579 --> 00:03:15,519
And then the payment processor
or the bank,

68
00:03:15,519 --> 00:03:18,549
they validate the account details
and so forth,

69
00:03:18,549 --> 00:03:19,680
they send a confirmation,

70
00:03:19,680 --> 00:03:22,359
and that confirmation again over ZVT

71
00:03:22,359 --> 00:03:25,560
is sent back to the cashier station.

72
00:03:25,560 --> 00:03:29,019
That is, in a nutshell, how
a payment transaction works.

73
00:03:29,019 --> 00:03:32,069
So it's based on two protocols,

74
00:03:32,069 --> 00:03:35,129
both of them fairly old,

75
00:03:35,129 --> 00:03:39,059
and probably by virtue of being so old,

76
00:03:39,059 --> 00:03:40,909
very widely deployed.

77
00:03:40,909 --> 00:03:43,249
In Germany, you will hardly find anything

78
00:03:43,249 --> 00:03:46,489
other than these two protocols being used.

79
00:03:46,489 --> 00:03:47,949
We'll look at an international angle

80
00:03:47,949 --> 00:03:50,329
towards the end of the talk,

81
00:03:50,329 --> 00:03:51,519
just a short summary,

82
00:03:51,519 --> 00:03:53,529
most of these problems will probably exist

83
00:03:53,529 --> 00:03:57,599
in most other countries as well.

84
00:03:57,599 --> 00:04:01,230
So let's in turn look at ZVT
and then Poseidon

85
00:04:01,230 --> 00:04:04,139
to identify their security issues.

86
00:04:04,139 --> 00:04:05,299
Starting with ZVT,

87
00:04:05,299 --> 00:04:07,079
this is again the protocol that's spoken

88
00:04:07,079 --> 00:04:11,309
in the shop, between a cashier station
and a terminal,

89
00:04:11,309 --> 00:04:14,760
but in almost all cases,
over a network connection.

90
00:04:14,760 --> 00:04:17,048
Very old systems would use
a serial cable,

91
00:04:17,048 --> 00:04:19,690
but today a network is used.

92
00:04:19,690 --> 00:04:22,300
So assuming that a fraudster

93
00:04:22,300 --> 00:04:24,819
somehow can get access to a local network,

94
00:04:24,819 --> 00:04:26,509
by plugging into some open ports,

95
00:04:26,509 --> 00:04:28,810
or by even being a customer at your hotel

96
00:04:28,810 --> 00:04:33,830
and just being connected to the same wifi
as your cashier system,

97
00:04:33,830 --> 00:04:35,930
what can this attacker do?

98
00:04:35,930 --> 00:04:37,860
Let's start with something simple

99
00:04:37,860 --> 00:04:42,699
that doesn't even really
require any hacking.

100
00:04:42,699 --> 00:04:44,479
In this case, somebody wants to steal

101
00:04:44,479 --> 00:04:47,870
the magnetic stripe details of the card.

102
00:04:47,870 --> 00:04:48,870
So the way that it should work

103
00:04:48,870 --> 00:04:51,729
is that the cashier station
sends a command

104
00:04:51,729 --> 00:04:52,599
to the payment terminal,

105
00:04:52,599 --> 00:04:53,879
and then gets a confirmation back

106
00:04:53,879 --> 00:04:55,960
after some processing.

107
00:04:55,960 --> 00:04:57,710
Now what the attacker does in this case

108
00:04:57,710 --> 00:05:01,069
is get in between those two,

109
00:05:01,069 --> 00:05:02,780
in their connection.

110
00:05:02,780 --> 00:05:05,400
Through, just traditional ARP spoofing.

111
00:05:05,400 --> 00:05:07,259
So, you proxy the connection

112
00:05:07,259 --> 00:05:11,439
between the cashier station
and the payment terminal,

113
00:05:11,439 --> 00:05:13,539
sitting in the local network again.

114
00:05:13,539 --> 00:05:16,129
We'll look at Internet-wide attacks

115
00:05:16,129 --> 00:05:17,539
in a few minutes, but for now

116
00:05:17,539 --> 00:05:19,610
we're talking about inside the shop,

117
00:05:19,610 --> 00:05:22,639
or in wifi range of that shop.

118
00:05:22,639 --> 00:05:23,879
So you ARP spoof

119
00:05:23,879 --> 00:05:28,180
and you receive that authorisation request

120
00:05:28,180 --> 00:05:29,960
that's supposed to be sent to
the payment terminal.

121
00:05:29,960 --> 00:05:31,840
What the cashier station basically says,

122
00:05:31,840 --> 00:05:32,919
"There's a customer here,

123
00:05:32,919 --> 00:05:34,780
the customer wants to pay something,

124
00:05:34,780 --> 00:05:36,509
please authorise the payment."

125
00:05:36,509 --> 00:05:39,539
Right? We take that command

126
00:05:39,539 --> 00:05:40,680
and do not forward it,

127
00:05:40,680 --> 00:05:42,229
but instead send another command,

128
00:05:42,229 --> 00:05:45,550
which basically says, "read a card".

129
00:05:45,550 --> 00:05:47,949
So the terminal will then display

130
00:05:47,949 --> 00:05:49,159
what the customer expects,

131
00:05:49,159 --> 00:05:50,569
"please insert a card",

132
00:05:50,569 --> 00:05:54,680
customer does so, and the
magnetic stripe information is read,

133
00:05:54,680 --> 00:05:57,900
and sent back over the network
to the attacker.

134
00:05:57,900 --> 00:06:00,599
No transaction has been done yet.

135
00:06:00,599 --> 00:06:05,340
Immediately following
these magnetic stripe details,

136
00:06:05,340 --> 00:06:06,280
the attacker would then send

137
00:06:06,280 --> 00:06:09,769
an actual authorisation request message

138
00:06:09,769 --> 00:06:12,750
supplying the magnetic stripe info.

139
00:06:12,750 --> 00:06:15,069
So, instead of asking for a card,

140
00:06:15,069 --> 00:06:16,949
the payment terminal just takes
this magstripe now,

141
00:06:16,949 --> 00:06:20,240
and goes through the transaction.

142
00:06:20,240 --> 00:06:21,270
So two things happen.

143
00:06:21,270 --> 00:06:24,900
First, the attacker did receive
a copy of the magstripe,

144
00:06:24,900 --> 00:06:26,780
second, the actual transaction,

145
00:06:26,780 --> 00:06:28,960
the intended transaction did go through.

146
00:06:28,960 --> 00:06:31,120
So neither the customer nor the merchant

147
00:06:31,120 --> 00:06:32,780
sees any different.

148
00:06:32,780 --> 00:06:35,900
But the attacker does have
a copy of the magstripe now.

149
00:06:35,900 --> 00:06:38,030
And then, countries where
magstripe is enough,

150
00:06:38,030 --> 00:06:40,879
let's say US, prior to chip-and-pin,

151
00:06:40,879 --> 00:06:44,469
this is enough to completely
clone the card.

152
00:06:44,469 --> 00:06:46,930
Fortunately, most other countries

153
00:06:46,930 --> 00:06:49,099
do require pin numbers,

154
00:06:49,099 --> 00:06:52,699
making this attack ineffective.

155
00:06:52,699 --> 00:06:55,360
But perhaps motivating
a slightly improved attack.

156
00:06:55,360 --> 00:06:57,979
So, let's say the fraudster wanted

157
00:06:57,979 --> 00:07:00,069
to also steal the pin number remotely.

158
00:07:00,069 --> 00:07:02,139
Right? Magstripe and pin number,

159
00:07:02,139 --> 00:07:06,979
that's really all you need
to pay in Germany, say.

160
00:07:06,979 --> 00:07:09,930
So the way pin transactions are
supposed to work,

161
00:07:09,930 --> 00:07:12,229
they are much more secure,

162
00:07:12,229 --> 00:07:14,099
well, they're secured at all,

163
00:07:14,099 --> 00:07:16,050
versus magstripe, which isn't secure,

164
00:07:16,050 --> 00:07:17,520
so the top part of this slide

165
00:07:17,520 --> 00:07:23,690
shows how a pin transaction is
supposed to work.

166
00:07:23,690 --> 00:07:28,680
Again, over ZVT, the cashier desk

167
00:07:28,680 --> 00:07:32,240
or whatever's speaking
to the terminal in the store,

168
00:07:32,240 --> 00:07:34,020
sends an authorisation request

169
00:07:34,020 --> 00:07:35,469
this time specifically saying

170
00:07:35,469 --> 00:07:37,560
"do require pin number"

171
00:07:37,560 --> 00:07:39,830
or perhaps that is even configured
in the terminal,

172
00:07:39,830 --> 00:07:42,199
to always require pin number.

173
00:07:42,199 --> 00:07:44,449
Either way, inside the terminal,

174
00:07:44,449 --> 00:07:46,460
all the security magic happens now.

175
00:07:46,460 --> 00:07:49,020
There's different components
of the terminal.

176
00:07:49,020 --> 00:07:52,699
There's a main CPU that does
all the network communication,

177
00:07:52,699 --> 00:07:55,300
both ZVT and Poseidon,

178
00:07:55,300 --> 00:07:56,849
which is supposed to be somewhat secure

179
00:07:56,849 --> 00:07:59,409
but really isn't, as, by the way,

180
00:07:59,409 --> 00:08:01,020
some research a couple of years has shown,

181
00:08:01,020 --> 00:08:02,610
that specifically looked at the security

182
00:08:02,610 --> 00:08:04,370
of one of these terminals,

183
00:08:04,370 --> 00:08:05,509
but that's not the topic of today,

184
00:08:05,509 --> 00:08:09,090
we're looking at the standard's security.

185
00:08:09,090 --> 00:08:10,289
So inside this terminal,

186
00:08:10,289 --> 00:08:14,439
there's also a hardware
security module, an HSM,

187
00:08:14,439 --> 00:08:18,360
and that HSM does all the heavy lifting

188
00:08:18,360 --> 00:08:21,449
when it comes to
cryptographic keys and so forth.

189
00:08:21,449 --> 00:08:23,249
The HSM is also directly connected

190
00:08:23,249 --> 00:08:28,199
to the display and the pin pad
of the machine.

191
00:08:28,199 --> 00:08:31,090
So you tell the HSM, inside the terminal,

192
00:08:31,090 --> 00:08:32,809
"do a pin transaction",

193
00:08:32,809 --> 00:08:34,240
it shows something on the display,

194
00:08:34,240 --> 00:08:36,830
"enter pin", it receives the input,

195
00:08:36,830 --> 00:08:39,220
and instead of giving out the pin number

196
00:08:39,220 --> 00:08:41,530
to the less secure side of the terminal

197
00:08:41,530 --> 00:08:45,130
it encrypts it with a key that only
the payment processor

198
00:08:45,130 --> 00:08:46,540
is supposed to have.

199
00:08:46,540 --> 00:08:49,210
So, the main CPU,

200
00:08:49,210 --> 00:08:51,540
or anybody really outside of the HSM,

201
00:08:51,540 --> 00:08:53,280
does not see the pin number.

202
00:08:53,280 --> 00:08:56,690
That's how things are supposed to work.

203
00:08:56,690 --> 00:08:58,780
Now, the lower part of the slide

204
00:08:58,780 --> 00:09:01,070
develops an attack idea with one catch,

205
00:09:01,070 --> 00:09:03,460
we'll resolve that in a minute though.

206
00:09:03,460 --> 00:09:06,400
This attack here would use
a different message

207
00:09:06,400 --> 00:09:08,800
to actually receive the pin number.

208
00:09:08,800 --> 00:09:11,890
So instead of saying,
"do a pin transaction",

209
00:09:11,890 --> 00:09:16,500
it would just say "display some text
and give me the input".

210
00:09:16,500 --> 00:09:17,780
That would work beautifully, right,

211
00:09:17,780 --> 00:09:20,790
so you display the text
"give me the pin number"

212
00:09:20,790 --> 00:09:24,910
and whatever's typed in,
you get that input.

213
00:09:24,910 --> 00:09:27,230
This very flexible functionality

214
00:09:27,230 --> 00:09:29,270
we don't really know what it's
ever used for,

215
00:09:29,270 --> 00:09:30,510
we've never seen it,

216
00:09:30,510 --> 00:09:33,100
but we're suspecting it's used
for things like,

217
00:09:33,100 --> 00:09:36,060
asking customers for their zip code
or something, right?

218
00:09:36,060 --> 00:09:40,150
Type something in and
send it over the network.

219
00:09:40,150 --> 00:09:41,200
And we've partly never seen this

220
00:09:41,200 --> 00:09:42,740
because it really can't be used,

221
00:09:42,740 --> 00:09:45,120
these messages need to be signed.

222
00:09:45,120 --> 00:09:45,900
We don't know who's supposed

223
00:09:45,900 --> 00:09:47,430
to sign these messages,

224
00:09:47,430 --> 00:09:49,010
we've tried to find a person

225
00:09:49,010 --> 00:09:50,890
but nobody feels responsible.

226
00:09:50,890 --> 00:09:53,450
So there's some functionality
in the standard here

227
00:09:53,450 --> 00:09:55,880
that's never used and
nobody knows how to use it.

228
00:09:55,880 --> 00:09:58,020
The use of this cryptographic signature

229
00:09:58,020 --> 00:10:01,930
on the slide called message
authentication code, MAC,

230
00:10:01,930 --> 00:10:03,670
that's required and it's actually

231
00:10:03,670 --> 00:10:05,340
checked by the HSM.

232
00:10:05,340 --> 00:10:09,620
So if you want to do your "please
enter zip code" scheme

233
00:10:09,620 --> 00:10:10,680
across all your stores,

234
00:10:10,680 --> 00:10:12,590
you've got to get your message signed,

235
00:10:12,590 --> 00:10:15,110
and that signed message then
works across all terminals.

236
00:10:15,110 --> 00:10:19,870
And if we want our "please enter
pin number" message to be shown,

237
00:10:19,870 --> 00:10:21,270
we've got to get to sign,

238
00:10:21,270 --> 00:10:24,310
or find some way to sign this ourselves

239
00:10:24,310 --> 00:10:26,180
and no entering the real hacking

240
00:10:26,180 --> 00:10:29,840
so I'm handing over to Fabian

241
00:10:29,840 --> 00:10:31,940
who did almost all this research,

242
00:10:31,940 --> 00:10:35,810
so that was just my attempt to introduce
these two guys here.

243
00:10:35,810 --> 00:10:37,530
Bräunlein: Thank you.

244
00:10:37,530 --> 00:10:43,650
*applause*

245
00:10:43,650 --> 00:10:46,030
Alright, so, to find valid MACs

246
00:10:46,030 --> 00:10:47,340
for arbitrary texts,

247
00:10:47,340 --> 00:10:50,900
we exploited a time-based
side-channel vulnerability

248
00:10:50,900 --> 00:10:53,980
within one HSM implementation.

249
00:10:53,980 --> 00:10:55,880
So, for those to work reliably,

250
00:10:55,880 --> 00:10:57,740
we had to have the ability to

251
00:10:57,740 --> 00:11:01,160
send messages directly to the HSM.

252
00:11:01,160 --> 00:11:03,120
To accomplish that, we used

253
00:11:03,120 --> 00:11:08,500
an active JTAG interface we found
for the main CPU on the PCP,

254
00:11:08,500 --> 00:11:11,370
and loaded our custom assembly program.

255
00:11:11,370 --> 00:11:14,780
What this wanted was just sending messages

256
00:11:14,780 --> 00:11:18,800
with our texts and some MACs to the HSM,

257
00:11:18,800 --> 00:11:22,600
and stop the time that
it needs to respond.

258
00:11:22,600 --> 00:11:26,930
So, we are doing that and are trying
every single possibility,

259
00:11:26,930 --> 00:11:31,220
every single value for the first byte
of this 8-byte MAC.

260
00:11:31,220 --> 00:11:33,180
When you do that, you will see that...

261
00:11:33,180 --> 00:11:35,270
so, that's a bit oversimplified,

262
00:11:35,270 --> 00:11:36,710
but you will get the gist.

263
00:11:36,710 --> 00:11:40,070
You will see that for
one particular value,

264
00:11:40,070 --> 00:11:42,500
the HSM needs a bit longer to respond,

265
00:11:42,500 --> 00:11:46,520
so like, just 5 CPU cycles within the HSM.

266
00:11:46,520 --> 00:11:51,450
Now you already have the first byte
of this 8-byte MAC,

267
00:11:51,450 --> 00:11:55,380
you can set this and do the same thing
for the second one.

268
00:11:55,380 --> 00:11:58,120
So, why does that work?

269
00:11:58,120 --> 00:12:01,830
This works because they use
a symmetric key

270
00:12:01,830 --> 00:12:03,680
for the calculation of the MAC

271
00:12:03,680 --> 00:12:05,330
within the HSM.

272
00:12:05,330 --> 00:12:07,370
There is a key that the payment
processor has,

273
00:12:07,370 --> 00:12:09,320
and this is stored inside the HSM,

274
00:12:09,320 --> 00:12:14,920
which is able to calculate
the correct MAC for any text.

275
00:12:14,920 --> 00:12:15,860
And what happens next,

276
00:12:15,860 --> 00:12:17,800
so this is the first minor issue

277
00:12:17,800 --> 00:12:20,810
because you should use
asymmetric cryptography.

278
00:12:20,810 --> 00:12:22,260
The next thing is,

279
00:12:22,260 --> 00:12:25,370
that the comparison
between the correct MAC

280
00:12:25,370 --> 00:12:28,560
that has been calculated within the HSM,

281
00:12:28,560 --> 00:12:32,040
and the MAC we have input through
this display text message,

282
00:12:32,040 --> 00:12:34,730
is compared byte by byte.

283
00:12:34,730 --> 00:12:37,080
So it checks if the first byte
of the input message

284
00:12:37,080 --> 00:12:39,500
matches the first byte of the correct MAC

285
00:12:39,500 --> 00:12:40,440
and if it doesn't match,

286
00:12:40,440 --> 00:12:42,100
it will return immediately,

287
00:12:42,100 --> 00:12:45,640
if it matches, it will try to compare
the second byte,

288
00:12:45,640 --> 00:12:47,160
and if that doesn't match
it will return immediately,

289
00:12:47,160 --> 00:12:51,250
so, this time it needs to check
one more byte,

290
00:12:51,250 --> 00:12:52,760
we can measure,

291
00:12:52,760 --> 00:12:55,140
with some more work.

292
00:12:55,140 --> 00:12:58,190
So, with this thing,

293
00:12:58,190 --> 00:13:01,920
with the correct MAC for the
"please enter pin" screen,

294
00:13:01,920 --> 00:13:04,220
we can give you a quick demonstration

295
00:13:04,220 --> 00:13:06,170
of how this works in real life.

296
00:13:06,170 --> 00:13:09,330
And for that we would need the GoPro...

297
00:13:09,330 --> 00:13:15,540
that you already have.

298
00:13:15,540 --> 00:13:17,400
Ah, the GoPro, yeah.

299
00:13:17,400 --> 00:13:20,080
*laughter*

300
00:13:20,080 --> 00:13:24,240
So, this is the setup here.

301
00:13:24,240 --> 00:13:27,810
Here we need the computer with
the green text on the black terminal.

302
00:13:27,810 --> 00:13:30,870
Alright. Here we have a normal
cashier register,

303
00:13:30,870 --> 00:13:33,250
it's some Windows XP software running,

304
00:13:33,250 --> 00:13:35,880
here we have the actual payment terminal,

305
00:13:35,880 --> 00:13:40,750
these two are connected through
this Fritz box standing here,

306
00:13:40,750 --> 00:13:43,440
just some normal internal home network.

307
00:13:43,440 --> 00:13:47,300
Now, there's also another
participant in the setup,

308
00:13:47,300 --> 00:13:49,560
which is the attacker,

309
00:13:49,560 --> 00:13:51,530
in this case I'm connected via LAN,

310
00:13:51,530 --> 00:13:52,630
but you could also be connected

311
00:13:52,630 --> 00:13:56,310
by wifi in the car outside
in the street and so on,

312
00:13:56,310 --> 00:13:58,580
so what we have running here

313
00:13:58,580 --> 00:14:01,310
is the attacker software.

314
00:14:01,310 --> 00:14:03,080
When we will introduce now,

315
00:14:03,080 --> 00:14:04,830
initiate a payment,

316
00:14:04,830 --> 00:14:06,020
through this cashier register,

317
00:14:06,020 --> 00:14:07,920
the attacker as a man in the middle

318
00:14:07,920 --> 00:14:09,560
between these two devices

319
00:14:09,560 --> 00:14:11,500
will simply drop this message

320
00:14:11,500 --> 00:14:17,750
and replace it with
the first "read card" message.

321
00:14:17,750 --> 00:14:22,930
We will pay with the card.

322
00:14:22,930 --> 00:14:25,230
Yeah, alright.

323
00:14:25,230 --> 00:14:27,180
Please insert the card.

324
00:14:27,180 --> 00:14:30,510
Now, yeah, here we can also see,

325
00:14:30,510 --> 00:14:32,950
we can already see the card data.

326
00:14:32,950 --> 00:14:35,020
Partially censored for our own safety.

327
00:14:35,020 --> 00:14:37,100
*laughter*

328
00:14:37,100 --> 00:14:39,190
And, here's "enter the pin" already,

329
00:14:39,190 --> 00:14:40,820
so what you have seen,

330
00:14:40,820 --> 00:14:43,290
it was a bit fast, but what you have seen

331
00:14:43,290 --> 00:14:46,500
was, the pin he has entered appeared here

332
00:14:46,500 --> 00:14:47,750
as soon as he entered it,

333
00:14:47,750 --> 00:14:50,490
because it wasn't
the real pin entry screen,

334
00:14:50,490 --> 00:14:52,720
it was just our fake pin entry screen.

335
00:14:52,720 --> 00:14:56,440
I hope you have seen,
that you saw that on the terminal.

336
00:14:56,440 --> 00:14:59,090
That's the first demo, that's
how we steal the pin number.

337
00:14:59,090 --> 00:15:10,540
*applause*

338
00:15:10,540 --> 00:15:15,250
Dexter: Alright. Zweite demo.

339
00:15:15,250 --> 00:15:18,070
Nohl: The terminal printed out
your receipt, though.

340
00:15:18,070 --> 00:15:20,420
Gives out the attack a little bit, right?

341
00:15:20,420 --> 00:15:23,730
Can we show this receipt?

342
00:15:23,730 --> 00:15:26,860
GoPro, while you're here.

343
00:15:26,860 --> 00:15:29,750
So, this line and then
in the normal transaction,

344
00:15:29,750 --> 00:15:30,690
when you enter pin number,

345
00:15:30,690 --> 00:15:32,290
is supposed to say Girocard,

346
00:15:32,290 --> 00:15:36,080
and instead does now say ELV offline,

347
00:15:36,080 --> 00:15:37,890
so in some cases it's actually apparent,

348
00:15:37,890 --> 00:15:41,070
but who actually pays attention
to these details, right?

349
00:15:41,070 --> 00:15:42,590
Bräunlein: RIght. In addition to this,

350
00:15:42,590 --> 00:15:44,630
this means that the transaction

351
00:15:44,630 --> 00:15:47,510
has gone through with "Lastschrift" without the pin,

352
00:15:47,510 --> 00:15:50,310
however we can also choose our attack

353
00:15:50,310 --> 00:15:52,870
to simply fail the first time,

354
00:15:52,870 --> 00:15:54,650
so it says, like, "system failure"

355
00:15:54,650 --> 00:15:55,670
or "pin incorrect",

356
00:15:55,670 --> 00:15:57,620
and we'll do a second transaction,

357
00:15:57,620 --> 00:15:59,120
again with pin authorisation,

358
00:15:59,120 --> 00:16:01,220
that's fine, or in bigger setups,

359
00:16:01,220 --> 00:16:03,930
it's not the terminal
that prints the receipt,

360
00:16:03,930 --> 00:16:07,380
but an external printer that's
connected to the cashier register,

361
00:16:07,380 --> 00:16:10,620
and for that to work, the terminal
again has to send

362
00:16:10,620 --> 00:16:14,200
the receipt line by line to
the cashier register,

363
00:16:14,200 --> 00:16:16,690
again without any encryption
or authentication,

364
00:16:16,690 --> 00:16:20,100
so we can simply replace the line
with Girocard, or drop some lines,

365
00:16:20,100 --> 00:16:23,190
and do whatever we want.

366
00:16:23,190 --> 00:16:24,350
Nohl: Very cool.

367
00:16:24,350 --> 00:16:27,610
So, that was an attack
against the customer,

368
00:16:27,610 --> 00:16:29,540
that is, pretty much everybody here,

369
00:16:29,540 --> 00:16:34,490
unless you really only ever pay with cash.

370
00:16:34,490 --> 00:16:36,150
There's some other attacks

371
00:16:36,150 --> 00:16:38,530
that target merchants instead,

372
00:16:38,530 --> 00:16:40,520
so everybody who operates
one of these terminals,

373
00:16:40,520 --> 00:16:42,750
and, according to the banks,

374
00:16:42,750 --> 00:16:46,750
there's 770 thousand such
terminals in operation

375
00:16:46,750 --> 00:16:47,640
today in Germany,

376
00:16:47,640 --> 00:16:49,610
so I guess at this point in time,

377
00:16:49,610 --> 00:16:52,130
everybody, even the tiniest of shops,

378
00:16:52,130 --> 00:16:54,400
will accept cashless payment,

379
00:16:54,400 --> 00:16:57,940
so, let's look at that next.

380
00:16:57,940 --> 00:16:59,620
Bräunlein: So, for the next attack,

381
00:16:59,620 --> 00:17:03,170
we are trying to get all the money

382
00:17:03,170 --> 00:17:05,290
that's been transferred on this terminal

383
00:17:05,290 --> 00:17:07,820
to our own bank account.

384
00:17:07,820 --> 00:17:11,689
Again, we assume we have local
access to the network,

385
00:17:11,689 --> 00:17:13,689
but this time we won't try to become

386
00:17:13,689 --> 00:17:17,069
man in the middle between
the cashier register and the terminal,

387
00:17:17,069 --> 00:17:19,999
but between the terminal and the Internet,

388
00:17:19,999 --> 00:17:23,730
in this case the payment processor.

389
00:17:23,730 --> 00:17:25,560
By ARP spoofing again.

390
00:17:25,560 --> 00:17:28,820
So ZVT includes a message,

391
00:17:28,820 --> 00:17:31,450
and defines this message
in the specification

392
00:17:31,450 --> 00:17:32,980
to reset the terminal ID,

393
00:17:32,980 --> 00:17:35,990
which is basically the identifier

394
00:17:35,990 --> 00:17:38,120
that says to which bank account

395
00:17:38,120 --> 00:17:40,370
the terminal is linked to.

396
00:17:40,370 --> 00:17:42,910
We can reset and set this again

397
00:17:42,910 --> 00:17:48,100
with password, more on
that we will show later.

398
00:17:48,100 --> 00:17:51,650
If we have set this, we will now

399
00:17:51,650 --> 00:17:56,460
tell the terminal to initiate
an extended diagnose to the backend again.

400
00:17:56,460 --> 00:17:59,900
So we tell it via the ZVT protocol

401
00:17:59,900 --> 00:18:03,940
to initiate a message on
the Poseidon protocol.

402
00:18:03,940 --> 00:18:05,540
We need that because,

403
00:18:05,540 --> 00:18:08,190
when we reset the terminal ID,

404
00:18:08,190 --> 00:18:10,280
the terminal will get reconfigured

405
00:18:10,280 --> 00:18:13,740
for the attacker terminal ID,
so for my one.

406
00:18:13,740 --> 00:18:15,780
And this also means that
the merchant banner,

407
00:18:15,780 --> 00:18:17,960
so in German it's the Händler-Logo,

408
00:18:17,960 --> 00:18:20,980
the thing that's printed on the top
of every receipt,

409
00:18:20,980 --> 00:18:22,310
this would also be my one,

410
00:18:22,310 --> 00:18:23,110
the attacker's one,

411
00:18:23,110 --> 00:18:24,610
but we don't want that.

412
00:18:24,610 --> 00:18:27,370
So we tell the terminal to make
another transaction,

413
00:18:27,370 --> 00:18:29,050
another extended diagnose,

414
00:18:29,050 --> 00:18:31,290
we will simply pass that
through to the backend

415
00:18:31,290 --> 00:18:32,750
as a man in the middle,

416
00:18:32,750 --> 00:18:37,770
and the response includes some limits
for offline electronic cash and so on,

417
00:18:37,770 --> 00:18:39,400
and also the merchant banner.

418
00:18:39,400 --> 00:18:41,250
And this, again, we can simply swap,

419
00:18:41,250 --> 00:18:44,030
we can swap with the original one,

420
00:18:44,030 --> 00:18:49,560
and so no one will get
that this ID actually occurred,

421
00:18:49,560 --> 00:18:56,030
and this is again possible because
no authentication is implemented here.

422
00:18:56,030 --> 00:18:58,390
Now for the actual transaction.

423
00:18:58,390 --> 00:19:00,870
If the backend port is already
the correct one,

424
00:19:00,870 --> 00:19:03,970
we can simply pass all the messages through.

425
00:19:03,970 --> 00:19:07,370
So, the backend port is,

426
00:19:07,370 --> 00:19:08,680
each payment processor has

427
00:19:08,680 --> 00:19:11,350
that one IP address responding
for all the terminals.

428
00:19:11,350 --> 00:19:12,900
However, for load-balancing reasons

429
00:19:12,900 --> 00:19:14,850
or something like that,

430
00:19:14,850 --> 00:19:17,270
they have like 100 different ports,

431
00:19:17,270 --> 00:19:20,570
each port responsible
for 50 thousand terminals,

432
00:19:20,570 --> 00:19:25,790
but each terminal can only be managed
by one specific port.

433
00:19:25,790 --> 00:19:27,110
So if this port already matches,

434
00:19:27,110 --> 00:19:28,820
we can simply pass through,

435
00:19:28,820 --> 00:19:31,340
every payment done by this terminal

436
00:19:31,340 --> 00:19:35,030
will now result in some more money
in our bank account.

437
00:19:35,030 --> 00:19:36,560
If this one doesn't match,

438
00:19:36,560 --> 00:19:38,060
we as a man in the middle can simply

439
00:19:38,060 --> 00:19:42,180
redirect the messages to
the correct backend parameters.

440
00:19:42,180 --> 00:19:45,300
And, again, let's see it in action.

441
00:19:53,070 --> 00:19:56,020
So what we have here is a terminal,

442
00:19:56,020 --> 00:19:59,790
we have configured it
to be configured as another merchant,

443
00:19:59,790 --> 00:20:03,340
you will see in the end which one it was.

444
00:20:03,340 --> 00:20:05,970
Again we have the attacker's PC

445
00:20:05,970 --> 00:20:15,660
that's running the malicious
software, and...

446
00:20:15,660 --> 00:20:18,550
now we will issue the registration,

447
00:20:18,550 --> 00:20:20,640
just that we are able to send ZVT messages

448
00:20:20,640 --> 00:20:23,300
to the terminal.

449
00:20:23,300 --> 00:20:25,360
And now we will reset the terminal ID

450
00:20:25,360 --> 00:20:27,010
from the one that's correctly set

451
00:20:27,010 --> 00:20:28,309
to our own one,

452
00:20:28,309 --> 00:20:31,410
the one we have got from our contract

453
00:20:31,410 --> 00:20:34,309
with the payment processor.

454
00:20:34,309 --> 00:20:36,550
We are setting this terminal ID.

455
00:20:42,240 --> 00:20:46,540
And now the terminal already
gets its new configuration,

456
00:20:46,540 --> 00:20:50,490
encrypted, as you will see.

457
00:20:50,490 --> 00:20:54,060
But it receives it.

458
00:20:54,060 --> 00:20:56,160
Nohl: So this is all happening with

459
00:20:56,160 --> 00:20:59,260
real terminals for real transactions,

460
00:20:59,260 --> 00:21:02,120
so, whoever is watching this at the bank,

461
00:21:02,120 --> 00:21:04,550
thank you for not blocking us yet.

462
00:21:04,550 --> 00:21:14,320
*laughter, applause*

463
00:21:14,320 --> 00:21:16,740
Bräunlein: But we use the 3G network,

464
00:21:16,740 --> 00:21:21,490
so in case they block
the IP address range here.

465
00:21:21,490 --> 00:21:25,160
Alright, so, normally this thing,

466
00:21:25,160 --> 00:21:26,800
you recognise that this would have been

467
00:21:26,800 --> 00:21:29,730
printed on the terminal itself.

468
00:21:29,730 --> 00:21:31,500
And we can see now,

469
00:21:31,500 --> 00:21:33,740
this terminal now prints as

470
00:21:33,740 --> 00:21:36,050
belonging to srlabs,

471
00:21:36,050 --> 00:21:38,850
normally this would be
the full terminal ID,

472
00:21:38,850 --> 00:21:40,820
that we censored a bit,

473
00:21:40,820 --> 00:21:43,760
and you can see this is
the whole configuration,

474
00:21:43,760 --> 00:21:46,490
and it's also configured to be able to

475
00:21:46,490 --> 00:21:49,860
issue prepaid cards.

476
00:21:49,860 --> 00:21:51,880
Normally this would be printed
on the terminal,

477
00:21:51,880 --> 00:21:54,620
but because that would be pretty uncool,

478
00:21:54,620 --> 00:21:56,520
because then you would recognise it,

479
00:21:56,520 --> 00:22:02,040
we transferred all the output
to our own notebook.

480
00:22:02,040 --> 00:22:04,880
Now we will start the man
in the middle server

481
00:22:04,880 --> 00:22:09,030
for this last part, exchanging
the terminal banner.

482
00:22:09,030 --> 00:22:14,350
We will change the logo.

483
00:22:14,350 --> 00:22:19,170
And we will now issue a demo transaction,

484
00:22:19,170 --> 00:22:21,900
so just like the cashier
register software did,

485
00:22:21,900 --> 00:22:25,480
we will now issue a transaction,

486
00:22:25,480 --> 00:22:31,100
and, as you will see, this terminal
now belongs to...

487
00:22:31,100 --> 00:22:33,550
or still belongs to...

488
00:22:33,550 --> 00:22:38,490
Can you see that?

489
00:22:38,490 --> 00:22:40,530
Put it on the table, yeah.

490
00:22:48,130 --> 00:23:01,790
*laughter, applause*

491
00:23:01,790 --> 00:23:06,240
Nohl: Can we switch back to the slides?

492
00:23:06,240 --> 00:23:08,540
Thank you.

493
00:23:08,540 --> 00:23:10,220
So that's how we steal money

494
00:23:10,220 --> 00:23:12,309
from an actual merchant,

495
00:23:12,309 --> 00:23:13,720
while in the store.

496
00:23:13,720 --> 00:23:15,590
That'd perhaps be the first catch,

497
00:23:15,590 --> 00:23:16,940
that you have to be in the store,

498
00:23:16,940 --> 00:23:20,850
the second catch, as probably the
ones following along noted,

499
00:23:20,850 --> 00:23:24,180
is, the attacker also needs
to be merchant here,

500
00:23:24,180 --> 00:23:27,840
you just change from money going
to one merchant account,

501
00:23:27,840 --> 00:23:29,920
from that to going to another
merchant account,

502
00:23:29,920 --> 00:23:32,870
but you need to be registered
as a merchant somehow, right?

503
00:23:32,870 --> 00:23:33,940
There may a catch,

504
00:23:33,940 --> 00:23:35,690
I don't know how well
set up criminals are,

505
00:23:35,690 --> 00:23:37,720
with actual businesses,

506
00:23:37,720 --> 00:23:40,750
but the next attack we're going to show

507
00:23:40,750 --> 00:23:42,510
does not come with this catch,

508
00:23:42,510 --> 00:23:44,720
it does not require you to be in the store

509
00:23:44,720 --> 00:23:48,960
and does not require you to have
anything preconfigured

510
00:23:48,960 --> 00:23:52,630
and this is an attack on
the Poseidon protocol.

511
00:23:52,630 --> 00:23:53,770
Remember, that's the protocol

512
00:23:53,770 --> 00:23:55,750
spoken between the terminal

513
00:23:55,750 --> 00:23:58,960
and the payment processor, right?

514
00:23:58,960 --> 00:23:59,950
Take it away.

515
00:23:59,950 --> 00:24:03,070
Bräunlein: Alright! So, now
for the third attack.

516
00:24:03,070 --> 00:24:05,980
In that case, what we are
taking a specific look at

517
00:24:05,980 --> 00:24:09,190
is the initialisation routine of Poseidon.

518
00:24:09,190 --> 00:24:10,350
This part is normally done

519
00:24:10,350 --> 00:24:11,880
at the payment processor,

520
00:24:11,880 --> 00:24:15,290
when you get your terminal preconfigured.

521
00:24:15,290 --> 00:24:16,390
Here's done this configuration

522
00:24:16,390 --> 00:24:20,410
to assign your terminal
to your bank account,

523
00:24:20,410 --> 00:24:22,420
to make this match.

524
00:24:22,420 --> 00:24:24,130
And how is this done?

525
00:24:24,130 --> 00:24:28,090
The terminal sends a Poseidon
initialisation routine,

526
00:24:28,090 --> 00:24:29,480
with the terminal ID,

527
00:24:29,480 --> 00:24:32,030
to the backend.

528
00:24:32,030 --> 00:24:37,130
The backend then will get
the configuration for that terminal ID,

529
00:24:37,130 --> 00:24:40,420
send it to the payment terminal,

530
00:24:40,420 --> 00:24:42,220
in an encrypted way.

531
00:24:42,220 --> 00:24:43,820
Symmetrically encrypted

532
00:24:43,820 --> 00:24:48,580
with a key only within the HSM
and the payment processor has.

533
00:24:48,580 --> 00:24:49,880
So far, so good.

534
00:24:49,880 --> 00:24:53,500
That's the normal pre-shared
key thing that we know.

535
00:24:53,500 --> 00:24:56,510
However, what we have found
is that this key,

536
00:24:56,510 --> 00:24:57,990
this exact same key,

537
00:24:57,990 --> 00:25:00,330
is used not in only one terminal,

538
00:25:00,330 --> 00:25:02,679
but in many, many terminals.

539
00:25:02,679 --> 00:25:05,230
So what is left of this authentication?

540
00:25:05,230 --> 00:25:08,860
It's just a username, the terminal ID.

541
00:25:08,860 --> 00:25:14,070
And this username is public,
as you will see.

542
00:25:14,070 --> 00:25:18,330
So, the idea now is to have
our own terminal,

543
00:25:18,330 --> 00:25:19,770
that we got from eBay,

544
00:25:19,770 --> 00:25:22,740
we got like 3 of them for 7 euros,

545
00:25:22,740 --> 00:25:24,580
including shipping cost.

546
00:25:24,580 --> 00:25:27,590
*laughter*

547
00:25:27,590 --> 00:25:29,250
And configure our terminal

548
00:25:29,250 --> 00:25:33,480
to act like just some random terminal,

549
00:25:33,480 --> 00:25:34,640
somewhere for example in Bonn,

550
00:25:34,640 --> 00:25:38,550
the mouse shop, as we have demonstrated.

551
00:25:38,550 --> 00:25:42,870
At that point, I almost feel like
apologising because,

552
00:25:42,870 --> 00:25:45,929
for this hack, no actual
hacking is involved,

553
00:25:45,929 --> 00:25:50,890
it's just... it's just broken
in that case.

554
00:25:50,890 --> 00:25:53,530
You will see.

555
00:25:53,530 --> 00:25:55,640
So, you just need a few parameters

556
00:25:55,640 --> 00:25:58,410
to configure your terminal
as another one.

557
00:25:58,410 --> 00:26:01,520
And this is at first the server's
management password

558
00:26:01,520 --> 00:26:03,750
only server technicians should have.

559
00:26:03,750 --> 00:26:07,020
The second one is the
terminal ID of your victim,

560
00:26:07,020 --> 00:26:10,830
and the last one is the backend port

561
00:26:10,830 --> 00:26:12,900
that is responsible for managing

562
00:26:12,900 --> 00:26:16,360
your victim's terminal ID.

563
00:26:16,360 --> 00:26:18,460
So the first one. How do we get that?

564
00:26:18,460 --> 00:26:21,230
You will simply google
and find it on the Internet

565
00:26:21,230 --> 00:26:23,530
in some internal documents.

566
00:26:23,530 --> 00:26:34,500
*laughter, applause, hooting*

567
00:26:34,500 --> 00:26:36,910
This one is the same across all terminals

568
00:26:36,910 --> 00:26:38,290
of one payment processor,

569
00:26:38,290 --> 00:26:41,009
so, completely independent of the model,

570
00:26:41,009 --> 00:26:43,770
every terminal you got
from the same payment processor,

571
00:26:43,770 --> 00:26:44,850
the same password.

572
00:26:44,850 --> 00:26:46,530
So the second one, the terminal ID.

573
00:26:46,530 --> 00:26:48,000
As you have already seen,

574
00:26:48,000 --> 00:26:50,240
you can find it on every receipt.

575
00:26:50,240 --> 00:26:53,570
And you can guess them
as they're assigned incrementally.

576
00:26:53,570 --> 00:26:54,480
*applause*

577
00:26:54,480 --> 00:27:02,580
Second one.
*applause*

578
00:27:02,580 --> 00:27:05,220
And, for the last one, there are like

579
00:27:05,220 --> 00:27:07,690
100 different possibilities,

580
00:27:07,690 --> 00:27:08,950
so just try them all,

581
00:27:08,950 --> 00:27:11,059
and see which one of these 100 ports

582
00:27:11,059 --> 00:27:13,960
doesn't answer with a message saying
"I don't know you",

583
00:27:13,960 --> 00:27:15,309
but with a merchant banner.

584
00:27:15,309 --> 00:27:18,750
So have all three things set,

585
00:27:18,750 --> 00:27:23,710
let's demonstrate it.

586
00:27:23,710 --> 00:27:26,110
So, for this demonstration,

587
00:27:26,110 --> 00:27:28,730
we've already told you we don't have to be

588
00:27:28,730 --> 00:27:30,140
on the same network,

589
00:27:30,140 --> 00:27:33,740
so this is the terminal here for CCC

590
00:27:33,740 --> 00:27:34,690
that we have shown you,

591
00:27:34,690 --> 00:27:37,170
we will simply disconnect that,

592
00:27:37,170 --> 00:27:39,220
it's not on the same network.

593
00:27:39,220 --> 00:27:42,440
What we have here is a terminal

594
00:27:42,440 --> 00:27:43,950
without any terminal ID,

595
00:27:43,950 --> 00:27:47,760
we just set that into factory reset.

596
00:27:47,760 --> 00:27:50,340
This is how you would get it from eBay,

597
00:27:50,340 --> 00:27:51,690
if the seller did a good job

598
00:27:51,690 --> 00:27:53,539
and put it
in factory reset.

599
00:27:53,539 --> 00:27:56,770
*laughter*

600
00:27:56,770 --> 00:28:01,788
Alright, the service password, hmm.

601
00:28:10,468 --> 00:28:18,580
*laughter*

602
00:28:18,580 --> 00:28:24,651
*laughter, applause*

603
00:28:27,570 --> 00:28:29,770
*Bräunlein shrieks*

604
00:28:36,990 --> 00:28:40,089
*laughter*

605
00:28:44,030 --> 00:28:46,590
Good. Aha, no cameras, good.

606
00:28:58,770 --> 00:29:01,920
Alright. We've entered the terminal ID,

607
00:29:01,920 --> 00:29:07,100
the backend port is already correct.

608
00:29:07,100 --> 00:29:11,179
And we will issue an extended diagnose

609
00:29:11,179 --> 00:29:14,284
to get the new configuration.

610
00:29:28,719 --> 00:29:32,840
Nohl: And once you're registered,

611
00:29:32,840 --> 00:29:34,870
what can you actually do

612
00:29:34,870 --> 00:29:38,490
to that victim merchant?

613
00:29:38,490 --> 00:29:42,179
Bräunlein: We will show
the prepaid top-up,

614
00:29:42,179 --> 00:29:44,799
so if the victim merchant

615
00:29:44,799 --> 00:29:49,880
has the prepaid feature activated,

616
00:29:49,880 --> 00:29:51,240
we will have it activated as well,

617
00:29:51,240 --> 00:29:54,049
because we are the victim's terminal.

618
00:29:54,049 --> 00:29:59,200
So what we can do is simply
print and print prepaid top-ups

619
00:29:59,200 --> 00:30:01,559
and for example call
our own premium number

620
00:30:01,559 --> 00:30:02,860
to make it actual money,

621
00:30:02,860 --> 00:30:04,450
or try to sell it.

622
00:30:04,450 --> 00:30:06,210
So let's try that.

623
00:30:06,210 --> 00:30:11,350
So... O2, maybe. 15 euros is enough.

624
00:30:11,350 --> 00:30:14,113
Of course, we paid in cash.

625
00:30:25,430 --> 00:30:37,000
*applause*

626
00:30:37,000 --> 00:30:39,980
Nohl: Does anybody actually
use O2 prepaid?

627
00:30:39,980 --> 00:30:41,350
*laughter*

628
00:30:41,350 --> 00:30:53,450
No? Well, I'm sure somebody
will find this useful.

629
00:30:53,450 --> 00:31:06,910
*laughter*
*applause*

630
00:31:06,910 --> 00:31:09,160
Bräunlein: We will also shortly
demonstrate the second way

631
00:31:09,160 --> 00:31:11,630
to get money, and this is simply

632
00:31:11,630 --> 00:31:14,730
to transfer ourselves some money.

633
00:31:14,730 --> 00:31:16,750
*laughter*

634
00:31:16,750 --> 00:31:19,320
Nohl: So there's a feature called refund,

635
00:31:19,320 --> 00:31:21,070
but it's completely independent

636
00:31:21,070 --> 00:31:22,460
from previous transactions,

637
00:31:22,460 --> 00:31:25,890
so a "refund" is a transaction
with a negative value.

638
00:31:25,890 --> 00:31:27,469
You can do this to any bank account.

639
00:31:27,469 --> 00:31:28,410
Bräunlein: So...

640
00:31:28,410 --> 00:31:33,302
*laughter*

641
00:31:33,302 --> 00:31:35,020
100? Yeah, 100 sounds good.

642
00:31:35,020 --> 00:31:38,063
*laughter*

643
00:31:45,727 --> 00:32:06,820
*applause*

644
00:32:06,820 --> 00:32:07,409
Ach!

645
00:32:07,409 --> 00:32:12,279
*laughter*

646
00:32:12,279 --> 00:32:14,390
Nohl: Can we go back to the slides?

647
00:32:14,390 --> 00:32:17,300
*laughter*

648
00:32:17,300 --> 00:32:20,650
Alright, that was pretty fast,

649
00:32:20,650 --> 00:32:24,409
so let's summarise what just happened.

650
00:32:24,409 --> 00:32:25,840
Somewhere in Germany there's a terminal

651
00:32:25,840 --> 00:32:28,090
configured with a certain terminal ID,

652
00:32:28,090 --> 00:32:29,950
and that terminal ID says,

653
00:32:29,950 --> 00:32:32,030
this terminal belongs
to a certain merchant.

654
00:32:32,030 --> 00:32:35,140
So everything, every money
that's put into that terminal

655
00:32:35,140 --> 00:32:36,429
goes to that merchant's account,

656
00:32:36,429 --> 00:32:37,870
and everything that's paid
with that terminal

657
00:32:37,870 --> 00:32:39,580
comes out from that account.

658
00:32:39,580 --> 00:32:41,309
Now here's a second terminal,

659
00:32:41,309 --> 00:32:42,840
and we configured that second terminal

660
00:32:42,840 --> 00:32:46,660
to the same terminal ID.

661
00:32:46,660 --> 00:32:48,480
And it goes through
a cryptographic process

662
00:32:48,480 --> 00:32:51,780
by which it registers itself
with the backend.

663
00:32:51,780 --> 00:32:54,870
This leaves the original terminal
completely working,

664
00:32:54,870 --> 00:32:56,840
so the merchant still do in the shop,

665
00:32:56,840 --> 00:32:57,929
whatever he wants,

666
00:32:57,929 --> 00:32:59,130
but there's a second terminal,

667
00:32:59,130 --> 00:33:01,690
a complete clone of the first one,

668
00:33:01,690 --> 00:33:03,640
that now can do the exact same things.

669
00:33:03,640 --> 00:33:06,080
If we were to send money
into that terminal,

670
00:33:06,080 --> 00:33:07,460
the merchant would get the money,

671
00:33:07,460 --> 00:33:10,250
but if we do refunds or sim card top-up

672
00:33:10,250 --> 00:33:11,380
from that terminal,

673
00:33:11,380 --> 00:33:14,480
the money comes out from
that merchant's account.

674
00:33:14,480 --> 00:33:16,660
Right? Very straightforward.

675
00:33:16,660 --> 00:33:17,700
You saw what it took.

676
00:33:17,700 --> 00:33:21,780
Three little numbers, all of which
are easy to find, right?

677
00:33:21,780 --> 00:33:24,360
Based on a terminal that
we purchased on eBay.

678
00:33:24,360 --> 00:33:26,240
Now what's the maximum scale of fraud

679
00:33:26,240 --> 00:33:28,970
that somebody could take this towards?

680
00:33:28,970 --> 00:33:32,940
First of all you don't have to
do this manually on your terminal.

681
00:33:32,940 --> 00:33:35,899
Everything we just did,
you can do over ZVT,

682
00:33:35,899 --> 00:33:37,480
so you can script this.

683
00:33:37,480 --> 00:33:39,100
And it's attractive to script it

684
00:33:39,100 --> 00:33:43,179
if you had a long list of
valid terminal IDs.

685
00:33:43,179 --> 00:33:45,880
Now we should note that these
are assigned incrementally,

686
00:33:45,880 --> 00:33:47,780
so if you know one terminal ID...

687
00:33:47,780 --> 00:33:48,969
*laughter*

688
00:33:48,969 --> 00:33:50,590
If you know one terminal ID,

689
00:33:50,590 --> 00:33:52,210
you know hundreds of thousands

690
00:33:52,210 --> 00:33:54,490
of valid terminal IDs.

691
00:33:54,490 --> 00:33:59,450
Right? So, you register
your terminal over ZVT,

692
00:33:59,450 --> 00:34:01,049
with one merchant at a time,

693
00:34:01,049 --> 00:34:02,710
go through a long succession,

694
00:34:02,710 --> 00:34:04,830
thousands, tens of thousands,

695
00:34:04,830 --> 00:34:07,910
and send refunds or print top-up money

696
00:34:07,910 --> 00:34:10,690
from every single account.

697
00:34:10,690 --> 00:34:13,748
In Germany, through
this Poseidon protocol,

698
00:34:13,748 --> 00:34:15,609
probably you take this to
other countries too.

699
00:34:15,609 --> 00:34:20,759
Poseidon is one dialect of a more
internationally spoken ISO standard,

700
00:34:20,759 --> 00:34:24,539
so, chances are this works
in other countries as well.

701
00:34:24,539 --> 00:34:30,179
So this could really be
a pretty large fraud scheme

702
00:34:30,179 --> 00:34:32,559
that fortunately hasn't occurred yet,

703
00:34:32,559 --> 00:34:35,179
and there's still time to fix it.

704
00:34:35,179 --> 00:34:39,709
*laughter*
Again, those people at the banks, right?

705
00:34:39,709 --> 00:34:50,029
*applause*

706
00:34:50,029 --> 00:34:53,259
Summarising over the 3 attacks
we've seen so far.

707
00:34:53,259 --> 00:34:56,319
So there's two protocols in Germany

708
00:34:56,319 --> 00:34:57,479
that are used for payments.

709
00:34:57,479 --> 00:34:59,640
Both of them are severely broken,

710
00:34:59,640 --> 00:35:01,829
and that affects customers,

711
00:35:01,829 --> 00:35:03,039
mostly in the store,

712
00:35:03,039 --> 00:35:05,150
by stealing their pin numbers
and magstripes,

713
00:35:05,150 --> 00:35:06,950
they affect merchants,

714
00:35:06,950 --> 00:35:09,099
in the store or even over the Internet,

715
00:35:09,099 --> 00:35:11,450
we've tried this Poseidon attack over tor,

716
00:35:11,450 --> 00:35:12,560
works beautifully.

717
00:35:12,560 --> 00:35:21,270
*laughter, applause*

718
00:35:21,270 --> 00:35:25,130
And, coincidentally, these protocols

719
00:35:25,130 --> 00:35:27,430
of course were designed
completely independently

720
00:35:27,430 --> 00:35:28,329
from one another,

721
00:35:28,329 --> 00:35:30,069
they're both vulnerable because of

722
00:35:30,069 --> 00:35:31,369
the same root cause.

723
00:35:31,369 --> 00:35:34,710
They share secret keys across terminals.

724
00:35:34,710 --> 00:35:36,369
You saw in the ZVT case

725
00:35:36,369 --> 00:35:38,930
that we needed to sign a message,

726
00:35:38,930 --> 00:35:41,799
that sign message was valid across
all the different terminals

727
00:35:41,799 --> 00:35:44,420
because they all have the same
signing key in them.

728
00:35:44,420 --> 00:35:46,670
We saw in Poseidon that we could just

729
00:35:46,670 --> 00:35:49,669
register one terminal as another one

730
00:35:49,669 --> 00:35:52,279
with all of them actually
properly authenticated

731
00:35:52,279 --> 00:35:54,309
to the backend cryptographically,

732
00:35:54,309 --> 00:35:56,200
all of which with the same key, though,

733
00:35:56,200 --> 00:35:57,670
so they're not distinguishable.

734
00:35:57,670 --> 00:36:02,390
It's secure as long as every
terminal is in good hands,

735
00:36:02,390 --> 00:36:05,319
which of course is a silly assumption

736
00:36:05,319 --> 00:36:07,759
in a scheme like that.

737
00:36:07,759 --> 00:36:12,410
So, each of these protocols
is severely broken,

738
00:36:12,410 --> 00:36:17,130
and we should have just stopped
our research here, but...

739
00:36:17,130 --> 00:36:18,410
*laughter*

740
00:36:18,410 --> 00:36:20,069
We wanted to get those keys,

741
00:36:20,069 --> 00:36:22,450
and Dexter wouldn't be here with us today

742
00:36:22,450 --> 00:36:25,170
if there weren't some hardware hacking involved.

743
00:36:25,170 --> 00:36:27,020
So we snuck in a few weeks

744
00:36:27,020 --> 00:36:29,470
of actual hardware hacking,

745
00:36:29,470 --> 00:36:32,609
and Dex is going to tell you what he did.

746
00:36:32,609 --> 00:36:40,779
*applause*

747
00:36:40,779 --> 00:36:44,650
Dexter: Okay, well, you know,

748
00:36:44,650 --> 00:36:49,499
yeah, let's go.

749
00:36:49,499 --> 00:36:55,260
Yeah, let's talk about the HSM,

750
00:36:55,260 --> 00:36:57,760
with the HSM module,

751
00:36:57,760 --> 00:37:00,699
this is our research, so,

752
00:37:00,699 --> 00:37:02,849
the HSM module is where the magic happens,

753
00:37:02,849 --> 00:37:07,789
so let's see, the grey box
you see on the picture above,

754
00:37:07,789 --> 00:37:10,509
that's the HSM module,

755
00:37:10,509 --> 00:37:12,430
and this is basically
a smartcard on steroids,

756
00:37:12,430 --> 00:37:14,170
so it has a display directly connected,

757
00:37:14,170 --> 00:37:16,749
there's a keypad connected,

758
00:37:16,749 --> 00:37:20,730
and it processes all the sensitive data.

759
00:37:20,730 --> 00:37:23,789
Of course, you want to have this area

760
00:37:23,789 --> 00:37:25,370
at least of the terminal write-protected,

761
00:37:25,370 --> 00:37:28,279
so you want to have it separate
from the application processor

762
00:37:28,279 --> 00:37:33,490
where the insecure stuff happens.

763
00:37:33,490 --> 00:37:36,210
There are a couple of protection measures,

764
00:37:36,210 --> 00:37:39,440
for example, one important characteristic

765
00:37:39,440 --> 00:37:42,670
is that the static RAM, the SRAM,

766
00:37:42,670 --> 00:37:45,549
that holds the secret keys,

767
00:37:45,549 --> 00:37:46,869
is battery backed-up,

768
00:37:46,869 --> 00:37:50,729
so if the battery dies, you lose the keys,

769
00:37:50,729 --> 00:37:54,249
and that's because it's simpler

770
00:37:54,249 --> 00:37:56,539
to erase a battery backed-up SRAM,

771
00:37:56,539 --> 00:37:59,980
you just shut down the power.

772
00:37:59,980 --> 00:38:10,050
Around the module is a couple of switches,

773
00:38:10,050 --> 00:38:12,099
and if an attacker unscrews the case

774
00:38:12,099 --> 00:38:13,210
it will lift the switches

775
00:38:13,210 --> 00:38:15,159
and then it trips the tamper protection

776
00:38:15,159 --> 00:38:18,290
and... but that's no problem,

777
00:38:18,290 --> 00:38:19,650
that's easy to defeat.

778
00:38:19,650 --> 00:38:24,539
There's a more elaborate
protection measure as well,

779
00:38:24,539 --> 00:38:28,999
so there's a mesh underneath this cap,

780
00:38:28,999 --> 00:38:33,339
there's a thin metallised mesh

781
00:38:33,339 --> 00:38:44,180
that is printed to the
inner surface of the HSM cap

782
00:38:44,180 --> 00:38:45,819
and if an attacker would drill or cut

783
00:38:45,819 --> 00:38:47,809
or even rip off the cap,

784
00:38:47,809 --> 00:38:52,619
then you would trip the tamper
protection of course.

785
00:38:52,619 --> 00:38:54,579
We found an exploitable
mechanical weakness

786
00:38:54,579 --> 00:38:56,160
in this particular implementation,

787
00:38:56,160 --> 00:38:59,970
we found it on these terminals there,

788
00:38:59,970 --> 00:39:01,309
if you look carefully at the picture

789
00:39:01,309 --> 00:39:02,849
you'll see on the right cap,

790
00:39:02,849 --> 00:39:03,789
you'll see in the corners,

791
00:39:03,789 --> 00:39:05,809
you'll see these little dents.

792
00:39:05,809 --> 00:39:12,970
That's where the mesh is electrically
connected to the underlying PCB,

793
00:39:12,970 --> 00:39:16,239
so there it's connected
to the secret insides

794
00:39:16,239 --> 00:39:20,959
that measure, continually
monitor the mesh,

795
00:39:20,959 --> 00:39:23,970
continuous monitoring, unlike smartcards,

796
00:39:23,970 --> 00:39:25,579
where you don't have
a continuous monitoring,

797
00:39:25,579 --> 00:39:28,890
if they're off, they're off,
but this is always on.

798
00:39:28,890 --> 00:39:30,519
And yeah, it's a problem,

799
00:39:30,519 --> 00:39:33,899
the connection is only
in the four corners,

800
00:39:33,899 --> 00:39:35,809
not at the sides.

801
00:39:35,809 --> 00:39:38,920
So at the sides, there is a possibility

802
00:39:38,920 --> 00:39:42,339
to enter the edges in the confined space

803
00:39:42,339 --> 00:39:46,729
with some metallic piece or something,

804
00:39:46,729 --> 00:39:49,220
and furthermore, this cap,

805
00:39:49,220 --> 00:39:51,140
during the manufacturing process,

806
00:39:51,140 --> 00:39:52,700
this is glued on top of the PCB

807
00:39:52,700 --> 00:39:54,670
with a slightly rubbery glue,

808
00:39:54,670 --> 00:39:57,400
and this glue leaves a small slot,

809
00:39:57,400 --> 00:39:59,779
and we thought of...

810
00:39:59,779 --> 00:40:04,299
how can we try to push something under it?

811
00:40:04,299 --> 00:40:07,650
And probably defeat the tamper protection.

812
00:40:07,650 --> 00:40:10,809
And we found something
from doctors, basically,

813
00:40:10,809 --> 00:40:13,859
that's a syringe needle we flattened
with a pair of pliers,

814
00:40:13,859 --> 00:40:16,849
and indeed we managed to push that

815
00:40:16,849 --> 00:40:18,239
underneath the cap,

816
00:40:18,239 --> 00:40:19,630
underneath the mesh,

817
00:40:19,630 --> 00:40:22,249
and right into the HSM.

818
00:40:22,249 --> 00:40:23,519
And we made an experimentation,

819
00:40:23,519 --> 00:40:25,109
we found a weak spot,

820
00:40:25,109 --> 00:40:28,749
in our case it was just the power supply
of the tamper protection

821
00:40:28,749 --> 00:40:30,930
we need to short out to ground,

822
00:40:30,930 --> 00:40:33,099
so then it's defeated, then it's off.

823
00:40:33,099 --> 00:40:35,880
And then we can safely open the mesh,

824
00:40:35,880 --> 00:40:39,439
you see the grounding clip
on the left side.

825
00:40:39,439 --> 00:40:46,859
That's the short-circuit of
the tamper protection detection circuit.

826
00:40:46,859 --> 00:40:50,239
And we used a soldering iron to cut it,

827
00:40:50,239 --> 00:40:53,910
because we wanted to avoid
any vibrations of course,

828
00:40:53,910 --> 00:40:56,039
this is a delicate task,

829
00:40:56,039 --> 00:40:58,539
and then you have...

830
00:40:58,539 --> 00:41:00,319
then the fruits are exposed,

831
00:41:00,319 --> 00:41:02,499
you have physical access to the flash,

832
00:41:02,499 --> 00:41:05,410
to the SRAM, to the microcontroller,

833
00:41:05,410 --> 00:41:06,269
even to the JTAG,

834
00:41:06,269 --> 00:41:08,279
and in case JTAG doesn't work,

835
00:41:08,279 --> 00:41:10,450
and you're only interested in the flash,

836
00:41:10,450 --> 00:41:12,989
there are ways to do it.

837
00:41:12,989 --> 00:41:16,990
That's how we did it the first time.

838
00:41:16,990 --> 00:41:22,810
So, here we have attached
the JTAG interface to the HSM,

839
00:41:22,810 --> 00:41:24,779
and the HSM is still alive,

840
00:41:24,779 --> 00:41:25,779
we have a terminal right there,

841
00:41:25,779 --> 00:41:28,430
you can look, the HSM's, bleargh,

842
00:41:28,430 --> 00:41:30,230
kind of working,

843
00:41:30,230 --> 00:41:35,579
and you can do all sorts of things,

844
00:41:35,579 --> 00:41:36,910
you can of course debug,

845
00:41:36,910 --> 00:41:38,269
you can do experiments,

846
00:41:38,269 --> 00:41:39,640
reverse-engineer stuff,

847
00:41:39,640 --> 00:41:41,539
and you can also dump the RAM

848
00:41:41,539 --> 00:41:42,989
and the RAM, the SRAM,

849
00:41:42,989 --> 00:41:44,349
might contain some secrets,

850
00:41:44,349 --> 00:41:46,489
in our case we did a little experiment,

851
00:41:46,489 --> 00:41:50,019
we tried to use the HSM
module as an oracle,

852
00:41:50,019 --> 00:41:51,499
as you have seen before, you need

853
00:41:51,499 --> 00:41:54,119
some MACs, the message
authentication code

854
00:41:54,119 --> 00:41:57,549
for the pin entry screen,

855
00:41:57,549 --> 00:41:59,130
the fake screen you've probably seen

856
00:41:59,130 --> 00:42:02,779
in the image that said that was
protected with such a MAC.

857
00:42:02,779 --> 00:42:05,259
What you just do,

858
00:42:05,259 --> 00:42:07,199
the text string you want to have signed,

859
00:42:07,199 --> 00:42:08,900
you send it to the HSM,

860
00:42:08,900 --> 00:42:10,359
with an obviously wrong MAC,

861
00:42:10,359 --> 00:42:13,640
that's the 41 41 here, you know that,

862
00:42:13,640 --> 00:42:15,380
that's the wrong MAC,

863
00:42:15,380 --> 00:42:17,369
doesn't matter which value that is,

864
00:42:17,369 --> 00:42:18,749
you just send it in,

865
00:42:18,749 --> 00:42:20,729
and then the blue stuff you see there

866
00:42:20,729 --> 00:42:23,729
is the text we want to have signed,

867
00:42:23,729 --> 00:42:27,460
and then, the HSM just happily
compares the two

868
00:42:27,460 --> 00:42:30,040
and says, error, doesn't match,

869
00:42:30,040 --> 00:42:32,339
but no problem, we just hold CCPU

870
00:42:32,339 --> 00:42:33,830
via JTAG dumps the RAM,

871
00:42:33,830 --> 00:42:35,289
we just look up the correct MAC,

872
00:42:35,289 --> 00:42:37,309
that's it then.

873
00:42:37,309 --> 00:42:38,190
*applause*

874
00:42:38,190 --> 00:42:46,710
Yeah, so much for the...
*applause*

875
00:42:46,710 --> 00:42:50,809
so much for the not-so-secure
hardware security module,

876
00:42:50,809 --> 00:42:56,349
and now let's go back to Karsten here.

877
00:42:56,349 --> 00:42:58,079
Nohl: Thanks. Yeah, good job.

878
00:42:58,079 --> 00:43:05,500
*applause*

879
00:43:05,500 --> 00:43:08,349
Yeah, just a bit of hardware hacking fun.

880
00:43:08,349 --> 00:43:11,339
This wasn't actually
necessary for anything,

881
00:43:11,339 --> 00:43:16,119
but I think it is important

882
00:43:16,119 --> 00:43:17,450
to note that it is possible,

883
00:43:17,450 --> 00:43:20,359
to drive one key point home.

884
00:43:20,359 --> 00:43:22,229
So, in this next chapter,

885
00:43:22,229 --> 00:43:25,630
we'll talk about what would
actually need to change

886
00:43:25,630 --> 00:43:27,819
for these protocols to be secure,

887
00:43:27,819 --> 00:43:29,049
and one thing that can not happen

888
00:43:29,049 --> 00:43:31,589
is for them to again bury some secret key

889
00:43:31,589 --> 00:43:33,829
in some "security" module

890
00:43:33,829 --> 00:43:36,569
that they give hundreds of
thousands of copies out.

891
00:43:36,569 --> 00:43:38,249
HSMs and generally the idea

892
00:43:38,249 --> 00:43:39,950
of security by obscurity

893
00:43:39,950 --> 00:43:45,049
is broken and we need
a better approach here.

894
00:43:45,049 --> 00:43:47,219
What exactly do we need, though?

895
00:43:47,219 --> 00:43:49,279
Let's first revisit why
these two protocols

896
00:43:49,279 --> 00:43:51,359
are so severely broken.

897
00:43:51,359 --> 00:43:53,009
As I said earlier, both of them

898
00:43:53,009 --> 00:43:55,969
have the issues of keys that are spread

899
00:43:55,969 --> 00:43:58,999
over a very large population of terminals,

900
00:43:58,999 --> 00:44:00,150
some of which may be secure,

901
00:44:00,150 --> 00:44:02,049
others are very insecure,

902
00:44:02,049 --> 00:44:05,690
like this ancient model
that we are looking at here.

903
00:44:05,690 --> 00:44:07,479
The weakest link of the system

904
00:44:07,479 --> 00:44:09,140
then obviously determines

905
00:44:09,140 --> 00:44:13,190
the protection of these system-wide keys.

906
00:44:13,190 --> 00:44:14,099
These system-wide keys,

907
00:44:14,099 --> 00:44:15,460
they play out very differently

908
00:44:15,460 --> 00:44:17,700
in these two protocols here, though.

909
00:44:17,700 --> 00:44:21,880
Remember in ZVT, there's a MAC,
a message signature,

910
00:44:21,880 --> 00:44:23,769
which can actually be made very secure

911
00:44:23,769 --> 00:44:25,660
even this system-wide key

912
00:44:25,660 --> 00:44:28,599
as long as you're using pubic-key crypto.

913
00:44:28,599 --> 00:44:30,680
If only one person can sign messages,

914
00:44:30,680 --> 00:44:31,900
it's fine for everybody to have

915
00:44:31,900 --> 00:44:34,960
the same public key
to verify the messages.

916
00:44:34,960 --> 00:44:37,380
Now, in this case, these terminals

917
00:44:37,380 --> 00:44:39,650
I guess, when they were designed,

918
00:44:39,650 --> 00:44:41,390
they didn't hear about
this great invention

919
00:44:41,390 --> 00:44:44,229
of asymmetric cryptography,

920
00:44:44,229 --> 00:44:46,670
and they're using symmetric signatures,

921
00:44:46,670 --> 00:44:48,460
so the signing key is distributed

922
00:44:48,460 --> 00:44:51,499
in 700-some thousand copies,

923
00:44:51,499 --> 00:44:53,619
throughout Germany.

924
00:44:53,619 --> 00:44:55,180
Amplifying the problem
and further of course

925
00:44:55,180 --> 00:44:59,599
amplifying by putting them in shady HSMs

926
00:44:59,599 --> 00:45:03,489
that are, well, not just vulnerable
to Dexter-style hacking,

927
00:45:03,489 --> 00:45:06,539
but to simple timing
side-channel attacks.

928
00:45:06,539 --> 00:45:10,200
Right? On the Poseidon side of things,

929
00:45:10,200 --> 00:45:11,410
it's a little bit cleaner,

930
00:45:11,410 --> 00:45:13,640
we're not talking about
cryptographic signatures here,

931
00:45:13,640 --> 00:45:16,029
but about authentication,

932
00:45:16,029 --> 00:45:18,749
and look at these as
online banking, right,

933
00:45:18,749 --> 00:45:20,029
each of these terminals is kind of like

934
00:45:20,029 --> 00:45:23,479
an online banking login
to a merchant account,

935
00:45:23,479 --> 00:45:26,809
and if they're all using
similar usernames,

936
00:45:26,809 --> 00:45:29,420
and everybody uses the exact
same password,

937
00:45:29,420 --> 00:45:30,779
cryptographic key in this case,

938
00:45:30,779 --> 00:45:32,789
this cannot possibly be secure,

939
00:45:32,789 --> 00:45:35,390
this cannot be fixed
with public-key crypto,

940
00:45:35,390 --> 00:45:37,400
as long as everybody uses the same,

941
00:45:37,400 --> 00:45:39,809
in that case then, digital certificate,

942
00:45:39,809 --> 00:45:42,719
this is not going to be secure either.

943
00:45:42,719 --> 00:45:44,029
In both these cases though,

944
00:45:44,029 --> 00:45:48,069
we need more individual keys.

945
00:45:48,069 --> 00:45:51,009
As at least a mid-term goal, right?

946
00:45:51,009 --> 00:45:54,619
Fortunately, these protocols
do have a provision

947
00:45:54,619 --> 00:45:56,930
to distribute a new key to a terminal

948
00:45:56,930 --> 00:45:58,829
and this mechanism could be used

949
00:45:58,829 --> 00:46:00,369
to give a different key

950
00:46:00,369 --> 00:46:02,059
to every single terminal.

951
00:46:02,059 --> 00:46:05,479
So, the road ahead should be clear,

952
00:46:05,479 --> 00:46:07,670
some of the backend systems probably
need to be adapted

953
00:46:07,670 --> 00:46:10,499
to work with individual keys per terminal,

954
00:46:10,499 --> 00:46:13,930
it's already clear how we would
get out of this mess:

955
00:46:13,930 --> 00:46:16,570
give a different key to
every single terminal.

956
00:46:16,570 --> 00:46:18,499
That not going to save us
in the long run

957
00:46:18,499 --> 00:46:22,749
when people start attacking
the HSM chips again individually

958
00:46:22,749 --> 00:46:25,579
and then defrauding
these merchants individually,

959
00:46:25,579 --> 00:46:28,950
but it would at least get rid
of the possibility

960
00:46:28,950 --> 00:46:31,979
of very scalable fraud

961
00:46:31,979 --> 00:46:34,869
against tens of thousands,
hundreds of thousands

962
00:46:34,869 --> 00:46:37,710
of merchants or consumers, in this case.

963
00:46:37,710 --> 00:46:40,460
So. The long-term goal is clear,
better protocol,

964
00:46:40,460 --> 00:46:43,160
the mid-term goal needs to be

965
00:46:43,160 --> 00:46:45,249
individual keys for each
of these terminals,

966
00:46:45,249 --> 00:46:48,150
and the short-term goal
could be things like,

967
00:46:48,150 --> 00:46:51,529
switch off functionality
that you don't actually need.

968
00:46:51,529 --> 00:46:54,079
How many shops do need to
print sim card top-ups?

969
00:46:54,079 --> 00:46:55,690
Certainly not every hotel

970
00:46:55,690 --> 00:46:58,660
and other establishments.

971
00:46:58,660 --> 00:47:02,279
How many stores do really need
to refund through a card?

972
00:47:02,279 --> 00:47:03,989
Right, maybe you just do refund in cash

973
00:47:03,989 --> 00:47:06,739
and switch off that functionality too.

974
00:47:06,739 --> 00:47:09,539
Similarly, in ZVT, how many merchants

975
00:47:09,539 --> 00:47:10,779
actually want a terminal

976
00:47:10,779 --> 00:47:14,160
to be reconfigurable over a network,

977
00:47:14,160 --> 00:47:17,119
with no confirmation whatsoever
on the terminal?

978
00:47:17,119 --> 00:47:19,930
Perhaps a little "is this okay?" message,

979
00:47:19,930 --> 00:47:21,430
and somebody has to press a button

980
00:47:21,430 --> 00:47:23,619
would already fix a lot of this.

981
00:47:23,619 --> 00:47:26,059
So, switch off what's not necessary,

982
00:47:26,059 --> 00:47:28,769
and detect suspicious behaviour,

983
00:47:28,769 --> 00:47:30,529
you can read faster than I can speak,

984
00:47:30,529 --> 00:47:32,140
you probably already
went through this list,

985
00:47:32,140 --> 00:47:34,789
so I'll save you that.

986
00:47:34,789 --> 00:47:36,109
I promised a couple of times

987
00:47:36,109 --> 00:47:38,229
a more international perspective on this,

988
00:47:38,229 --> 00:47:39,609
everything we discussed so far

989
00:47:39,609 --> 00:47:44,430
is focused on Germany and
some neighbouring countries,

990
00:47:44,430 --> 00:47:47,160
depending on which of
these protocols it is,

991
00:47:47,160 --> 00:47:49,630
but we suspect very similar issues

992
00:47:49,630 --> 00:47:52,979
to exist in most other countries.

993
00:47:52,979 --> 00:47:55,829
The ZVT alternative that's used
more internationally

994
00:47:55,829 --> 00:47:59,539
is called OPI, the open
payment initiative,

995
00:47:59,539 --> 00:48:01,809
and that is a much newer protocol,

996
00:48:01,809 --> 00:48:04,509
that still does not have
any encryption though.

997
00:48:04,509 --> 00:48:06,209
Whoever thought, in 2003,

998
00:48:06,209 --> 00:48:08,269
to specify a payment protocol

999
00:48:08,269 --> 00:48:10,589
and not to add in encryption,

1000
00:48:10,589 --> 00:48:11,859
please send me an email,

1001
00:48:11,859 --> 00:48:14,739
I'm curious.

1002
00:48:14,739 --> 00:48:18,890
They did however do the,
what would seem smart thing

1003
00:48:18,890 --> 00:48:22,469
of leaving out functionality
that nobody needs anyway,

1004
00:48:22,469 --> 00:48:24,579
and in fact functionality
that we're exploiting,

1005
00:48:24,579 --> 00:48:27,719
like remote manageability
of these terminals.

1006
00:48:27,719 --> 00:48:29,819
Though the few instances of OPI

1007
00:48:29,819 --> 00:48:31,709
we have found in Germany, however,

1008
00:48:31,709 --> 00:48:33,769
they reintroduce that functionality

1009
00:48:33,769 --> 00:48:35,319
as custom extensions,

1010
00:48:35,319 --> 00:48:38,039
so apparently the terminal manufacturers,

1011
00:48:38,039 --> 00:48:42,589
they find it very useful to have
remote manageability,

1012
00:48:42,589 --> 00:48:45,640
and if the protocol doesn't
give it to them,

1013
00:48:45,640 --> 00:48:48,459
they will reintroduce it as an extension.

1014
00:48:48,459 --> 00:48:50,859
So, exact same level of vulnerability,

1015
00:48:50,859 --> 00:48:53,819
in those few instances that we looked at.

1016
00:48:53,819 --> 00:48:56,819
Of course, the research community at large

1017
00:48:56,819 --> 00:49:01,199
is needed to verify this
in different countries

1018
00:49:01,199 --> 00:49:05,289
and just with a little of wireshark
on the wire,

1019
00:49:05,289 --> 00:49:08,519
you typically can.

1020
00:49:08,519 --> 00:49:10,119
Similarly for Poseidon,

1021
00:49:10,119 --> 00:49:12,089
as I said earlier,
this is just one dialect

1022
00:49:12,089 --> 00:49:17,279
of an ISO standard that originally
came from MasterCard and Visa,

1023
00:49:17,279 --> 00:49:20,859
so this the suggested payment
backend protocol

1024
00:49:20,859 --> 00:49:23,700
pretty much worldwide,

1025
00:49:23,700 --> 00:49:26,849
and we have seen
encryption in some cases,

1026
00:49:26,849 --> 00:49:28,170
no encryption in others,

1027
00:49:28,170 --> 00:49:29,569
it doesn't matter though,

1028
00:49:29,569 --> 00:49:31,359
remember the attack actually goes through

1029
00:49:31,359 --> 00:49:33,650
a full cycle of authentication,

1030
00:49:33,650 --> 00:49:35,430
it establishes all keys well,

1031
00:49:35,430 --> 00:49:37,049
it does all of this correctly,

1032
00:49:37,049 --> 00:49:39,579
but everybody has the same key.

1033
00:49:39,579 --> 00:49:41,630
What we are yet to see is a protocol

1034
00:49:41,630 --> 00:49:43,249
by which you could exchange keys

1035
00:49:43,249 --> 00:49:44,690
with these individual terminals,

1036
00:49:44,690 --> 00:49:47,690
either put a key in or
find which key it's using

1037
00:49:47,690 --> 00:49:50,249
to establish individual keys.

1038
00:49:50,249 --> 00:49:52,069
If anybody has more information on that,

1039
00:49:52,069 --> 00:49:54,130
definitely look us up,

1040
00:49:54,130 --> 00:49:56,390
but as far as we're informed,

1041
00:49:56,390 --> 00:49:59,499
there isn't a single instance where
this ISO protocol

1042
00:49:59,499 --> 00:50:03,670
actually is used with a meaningful
key management protocol

1043
00:50:03,670 --> 00:50:06,859
and where this would at least

1044
00:50:06,859 --> 00:50:08,959
have the foundation to be secure.

1045
00:50:08,959 --> 00:50:12,729
But again, you, the international
research community,

1046
00:50:12,729 --> 00:50:16,579
over to you for looking at this
in your countries.

1047
00:50:16,579 --> 00:50:19,299
That was that.

1048
00:50:19,299 --> 00:50:24,099
To quickly conclude, two protocols

1049
00:50:24,099 --> 00:50:27,030
used for payment in Germany,

1050
00:50:27,030 --> 00:50:29,419
both of them to be considered insecure,

1051
00:50:29,419 --> 00:50:31,699
and very outdated,

1052
00:50:31,699 --> 00:50:33,160
they both have the same root cause,

1053
00:50:33,160 --> 00:50:35,099
something that fortunately
can quickly be fixed,

1054
00:50:35,099 --> 00:50:37,529
so there is time to improve the system

1055
00:50:37,529 --> 00:50:40,229
before actual fraud hits,

1056
00:50:40,229 --> 00:50:41,930
we as a research community

1057
00:50:41,930 --> 00:50:43,140
should keep up to pressure

1058
00:50:43,140 --> 00:50:45,359
for them to actually do that,

1059
00:50:45,359 --> 00:50:46,569
but we as customers,

1060
00:50:46,569 --> 00:50:48,880
we should not believe them anymore

1061
00:50:48,880 --> 00:50:52,609
when they say "you must have
given your pin number to somebody,

1062
00:50:52,609 --> 00:50:56,470
hence this fraudulent transaction
on your account".

1063
00:50:56,470 --> 00:50:58,440
There've been a number of cases like that

1064
00:50:58,440 --> 00:51:00,279
in Germany this year,

1065
00:51:00,279 --> 00:51:02,190
and I think it's time to show them

1066
00:51:02,190 --> 00:51:05,519
who's really responsible for
the security vulnerabilities,

1067
00:51:05,519 --> 00:51:09,259
and for leaving them open
for so many years.

1068
00:51:09,259 --> 00:51:10,573
Thank you very much.

1069
00:51:10,573 --> 00:51:34,040
*applause*

1070
00:51:34,040 --> 00:51:35,969
Herald: We have 7 minutes for Q&A.

1071
00:51:35,969 --> 00:51:37,130
Thanks to our speakers again

1072
00:51:37,130 --> 00:51:41,009
for a only theoretical threat
on the payment systems, of course,

1073
00:51:41,009 --> 00:51:45,069
strictly lab environment,
as the press wrote,

1074
00:51:45,069 --> 00:51:48,319
please leave quickly and quietly
through the side doors now

1075
00:51:48,319 --> 00:51:50,839
so we have 5 minutes of Q&A.

1076
00:51:50,839 --> 00:51:52,869
And, mike 2 starts.

1077
00:51:52,869 --> 00:51:54,770
Q: How did you handle
the question of disclosure,

1078
00:51:54,770 --> 00:51:56,429
so did you do full disclosure,

1079
00:51:56,429 --> 00:51:57,329
responsible disclosure,

1080
00:51:57,329 --> 00:52:01,299
how much time did you give them?

1081
00:52:01,299 --> 00:52:04,959
Nohl: We went through responsible
disclosure I guess,

1082
00:52:04,959 --> 00:52:07,130
meaning that we in detail tried to explain

1083
00:52:07,130 --> 00:52:09,279
all of these attacks to an audience

1084
00:52:09,279 --> 00:52:15,899
that we thought could fix this,
about a month ago. Right.

1085
00:52:15,899 --> 00:52:17,719
Q: And have you seen any reaction to that?

1086
00:52:17,719 --> 00:52:19,599
Like, have they tried fixing it?

1087
00:52:19,599 --> 00:52:22,170
Nohl: I'm sure somebody's working on a fix,

1088
00:52:22,170 --> 00:52:26,499
but nobody would tell me.

1089
00:52:26,499 --> 00:52:29,519
Herald: Okay, and we have one
question from the Internet.

1090
00:52:29,519 --> 00:52:32,059
Signal angel: So, can you say if there's an easy fix

1091
00:52:32,059 --> 00:52:37,800
like just flashing a new firmware
into all terminals?

1092
00:52:37,800 --> 00:52:39,790
Bräunlein: Like, flashing firmware
to all terminals?

1093
00:52:39,790 --> 00:52:42,289
Nohl: It's an easy fix.

1094
00:52:42,289 --> 00:52:44,950
Bräunlein: Yeah, you have shown the fixes.

1095
00:52:44,950 --> 00:52:47,759
These are, the difference
between this research

1096
00:52:47,759 --> 00:52:49,930
and the research done 3 years before

1097
00:52:49,930 --> 00:52:53,749
is that this are now
flaws in the protocol,

1098
00:52:53,749 --> 00:52:55,769
so these need new protocols,

1099
00:52:55,769 --> 00:52:59,629
new versions and new... yeah. That's it.

1100
00:52:59,629 --> 00:53:01,989
So these are no implementation
flaws right now.

1101
00:53:01,989 --> 00:53:04,059
Q: But would you have to
scrap all terminals

1102
00:53:04,059 --> 00:53:08,479
and buy or construct new ones?

1103
00:53:08,479 --> 00:53:10,589
Nohl: I think the honest answer is

1104
00:53:10,589 --> 00:53:13,959
that criminals are slow too,

1105
00:53:13,959 --> 00:53:17,779
so this will have to be
a somewhat longer journey

1106
00:53:17,779 --> 00:53:21,019
in which we first replace
these system-wide keys

1107
00:53:21,019 --> 00:53:22,130
by individual keys,

1108
00:53:22,130 --> 00:53:24,160
that would already help tremendously

1109
00:53:24,160 --> 00:53:26,269
in making it less attractive

1110
00:53:26,269 --> 00:53:28,700
to do these types of attack,

1111
00:53:28,700 --> 00:53:31,079
but then in the meantime
work on better protocols

1112
00:53:31,079 --> 00:53:33,739
so we don't keep finding ourselves
in this situation

1113
00:53:33,739 --> 00:53:36,599
where it would take years
to fix protocols,

1114
00:53:36,599 --> 00:53:39,539
well let's use those years
ahead of us to do that.

1115
00:53:39,539 --> 00:53:40,480
Q: Thanks.

1116
00:53:40,480 --> 00:53:42,680
Herald: Okay. Microphone 8, please.

1117
00:53:42,680 --> 00:53:44,589
Q: How many tries did it take

1118
00:53:44,589 --> 00:53:46,709
to clone the keys of the terminal,

1119
00:53:46,709 --> 00:53:48,489
how many boxes did you have to blow?

1120
00:53:48,489 --> 00:53:50,609
*Nohl laughs*

1121
00:53:50,609 --> 00:53:52,539
Dexter: 3 or so.

1122
00:53:52,539 --> 00:53:53,539
Nohl: Yeah.

1123
00:53:53,539 --> 00:53:57,979
Dexter: I mean the first one was
surprisingly an immediate success,

1124
00:53:57,979 --> 00:54:01,729
we managed to withdraw the SRAM
without destroying it,

1125
00:54:01,729 --> 00:54:03,589
second one, we broke immediately,

1126
00:54:03,589 --> 00:54:06,529
and the third one had issues,

1127
00:54:06,529 --> 00:54:09,399
but we managed to fix it.

1128
00:54:09,399 --> 00:54:14,009
Q: So you didn't wipe any keys
bypassing the mesh?

1129
00:54:14,009 --> 00:54:16,369
Dexter: I didn't understand
acoustically, sorry.

1130
00:54:16,369 --> 00:54:17,819
Q: When you're bypassing the mesh,

1131
00:54:17,819 --> 00:54:19,539
you got that the first try?

1132
00:54:19,539 --> 00:54:20,940
Bräunlein: Yeah, I tried it the first time.

1133
00:54:20,940 --> 00:54:21,440
Q: Wow.

1134
00:54:21,440 --> 00:54:22,690
Bräunlein: So like, I think...

1135
00:54:22,690 --> 00:54:23,200
Dexter: Yeah.

1136
00:54:23,200 --> 00:54:24,489
Bräunlein: Bit of preparation,

1137
00:54:24,489 --> 00:54:26,609
and then one hour of actual work.

1138
00:54:26,609 --> 00:54:28,150
Nohl: Well, he destroyed
the first terminal

1139
00:54:28,150 --> 00:54:30,829
but for just looking at
how it's built, right?

1140
00:54:30,829 --> 00:54:33,119
Dexter: Yeah, he knew how it was made up

1141
00:54:33,119 --> 00:54:36,489
because we took a few apart before,
of course.

1142
00:54:36,489 --> 00:54:39,160
But not with intention to do that,

1143
00:54:39,160 --> 00:54:40,150
just because they broke,

1144
00:54:40,150 --> 00:54:41,259
and then we took it apart

1145
00:54:41,259 --> 00:54:43,529
to look up, to read out the flash,

1146
00:54:43,529 --> 00:54:45,109
this bug bonded thingy

1147
00:54:45,109 --> 00:54:46,989
that was one of the very first ones,

1148
00:54:46,989 --> 00:54:49,169
that broke.

1149
00:54:49,169 --> 00:54:52,240
Herald: Okay, microphone 7, please.

1150
00:54:52,240 --> 00:54:54,140
Q: Would you please briefly describe

1151
00:54:54,140 --> 00:54:56,699
what will do the terminal in case,

1152
00:54:56,699 --> 00:55:00,339
if some transaction wasn't
processed by the bank,

1153
00:55:00,339 --> 00:55:02,619
what kind of information it will store

1154
00:55:02,619 --> 00:55:06,210
in the memory and how long?

1155
00:55:06,210 --> 00:55:08,059
Bräunlein: It will store the error.

1156
00:55:08,059 --> 00:55:10,449
Nohl: I don't think the terminal
stores anything,

1157
00:55:10,449 --> 00:55:11,789
it's pretty much stateless.

1158
00:55:11,789 --> 00:55:14,769
It receives a command,

1159
00:55:14,769 --> 00:55:16,209
looks up its configuration,

1160
00:55:16,209 --> 00:55:17,390
like terminal ID,

1161
00:55:17,390 --> 00:55:19,989
it pushes it down to HSM to get signed

1162
00:55:19,989 --> 00:55:21,249
or get a pin number,

1163
00:55:21,249 --> 00:55:22,959
pushes it over Poseidon,

1164
00:55:22,959 --> 00:55:25,160
and forgets all about that transaction.

1165
00:55:25,160 --> 00:55:31,460
Q: So it's not trying to resend
the transaction again somehow later?

1166
00:55:31,460 --> 00:55:33,510
Nohl: Um, good question.

1167
00:55:33,510 --> 00:55:37,410
Bräunlein: So this is not part of
the attacks we have demonstrated

1168
00:55:37,410 --> 00:55:39,549
but what happens is that,

1169
00:55:39,549 --> 00:55:41,630
normally you would do
an end of day command,

1170
00:55:41,630 --> 00:55:43,719
or a Kassenschnitt in Germany,

1171
00:55:43,719 --> 00:55:48,040
where all the transactions that have been
accumulated throughout the day

1172
00:55:48,040 --> 00:55:50,170
will be sent to the payment processor,

1173
00:55:50,170 --> 00:55:52,150
and this is the exact moment

1174
00:55:52,150 --> 00:55:54,049
where all these transactions are then sent

1175
00:55:54,049 --> 00:55:57,079
by the transaction processor to the bank.

1176
00:55:57,079 --> 00:55:58,449
So at this point for example,

1177
00:55:58,449 --> 00:56:01,829
no reversal is anymore possible,

1178
00:56:01,829 --> 00:56:06,309
reversal that'll reverse one
purchase on the same day,

1179
00:56:06,309 --> 00:56:08,749
because then the bank has
already the information,

1180
00:56:08,749 --> 00:56:11,259
and then no information
is stored anymore

1181
00:56:11,259 --> 00:56:12,709
on the terminal,

1182
00:56:12,709 --> 00:56:14,790
if this one was successful.

1183
00:56:14,790 --> 00:56:16,309
Q: Okay, thank you.

1184
00:56:16,309 --> 00:56:18,229
Herald: One more remote question, please.

1185
00:56:18,229 --> 00:56:21,670
Signal angel: So is the communication that you use

1186
00:56:21,670 --> 00:56:23,049
in the man in the middle attacks

1187
00:56:23,049 --> 00:56:25,849
also susceptible to replay attacks?

1188
00:56:25,849 --> 00:56:28,440
Can you just do it without a terminal

1189
00:56:28,440 --> 00:56:29,869
if you recorded the conversation

1190
00:56:29,869 --> 00:56:33,790
between terminal and processing server?

1191
00:56:33,790 --> 00:56:37,209
Nohl: Sure, we can inject messages,
ZVT messages,

1192
00:56:37,209 --> 00:56:40,299
most of them are not actually
protected with a MAC,

1193
00:56:40,299 --> 00:56:43,390
for instance you can query a magstripe

1194
00:56:43,390 --> 00:56:44,859
with no protection,

1195
00:56:44,859 --> 00:56:46,930
however there needs to be
somebody in the store

1196
00:56:46,930 --> 00:56:49,529
who expects you to do that, right?

1197
00:56:49,529 --> 00:56:51,489
So it's convenient to just be
man in the middle

1198
00:56:51,489 --> 00:56:52,569
in an actual transaction

1199
00:56:52,569 --> 00:56:56,130
because you know there's somebody
waiting for you to stick in a card,

1200
00:56:56,130 --> 00:56:58,759
there's a customer waiting
to stick in that card,

1201
00:56:58,759 --> 00:57:02,739
so you wouldn't get that from just
sending random messages,

1202
00:57:02,739 --> 00:57:05,779
there's just nobody there with a card.

1203
00:57:05,779 --> 00:57:07,319
Herald: Okay, one last question,

1204
00:57:07,319 --> 00:57:09,459
a quick question from microphone 1.

1205
00:57:09,459 --> 00:57:11,449
Q: Yes, you said there's a possibility

1206
00:57:11,449 --> 00:57:15,099
to give an individual key
to each terminal.

1207
00:57:15,099 --> 00:57:18,789
So you have an identical terminal
to another one,

1208
00:57:18,789 --> 00:57:23,039
so if the payment processor sends out
individual keys to each terminal,

1209
00:57:23,039 --> 00:57:25,560
and there are two of one terminal,

1210
00:57:25,560 --> 00:57:27,189
what will happen?

1211
00:57:27,189 --> 00:57:28,239
Nohl: Yeah, good question.

1212
00:57:28,239 --> 00:57:31,940
So if the fraudsters first take over
all the terminals,

1213
00:57:31,940 --> 00:57:33,709
and you then send individual keys,

1214
00:57:33,709 --> 00:57:34,380
it's not going to help,

1215
00:57:34,380 --> 00:57:37,550
you have to be ahead of the bad guys here.

1216
00:57:42,730 --> 00:57:46,561
Herald: Okay! Thanks again to
Karsten, Fabian and Dexter.

1217
00:57:46,561 --> 00:57:49,500
*applause*

1218
00:57:49,500 --> 00:57:59,940
*postroll music*