1 00:00:00,480 --> 00:00:04,980 - Greetings, welcome to track four. 2 00:00:04,980 --> 00:00:08,040 This is the 4:30 p.m talk. 3 00:00:08,040 --> 00:00:10,470 You're gonna hang out a while with Bill Graydon, 4 00:00:10,470 --> 00:00:13,320 and he's gonna talk about physical security, 5 00:00:13,320 --> 00:00:17,283 which is something that should get more attention, I think. 6 00:00:18,120 --> 00:00:19,830 So he's gonna talk about defeating moving elements 7 00:00:19,830 --> 00:00:21,513 in high security keys. 8 00:00:23,492 --> 00:00:26,492 (audience applauds) 9 00:00:29,010 --> 00:00:29,843 - Awesome. Thanks, everyone. 10 00:00:29,843 --> 00:00:30,676 Thanks, Flicked. 11 00:00:32,490 --> 00:00:33,540 So to get started, 12 00:00:33,540 --> 00:00:36,360 we'll give a brief overview of what we're gonna talk about 13 00:00:36,360 --> 00:00:37,380 and then go through it. 14 00:00:37,380 --> 00:00:39,900 So we'll first introduce what is a moving element 15 00:00:39,900 --> 00:00:41,490 and why it's used. 16 00:00:41,490 --> 00:00:43,350 Go over some of the more naive ways to hack them, 17 00:00:43,350 --> 00:00:46,470 like a 3D printed captive element, 18 00:00:46,470 --> 00:00:47,730 a compliant mechanism, 19 00:00:47,730 --> 00:00:50,670 and then we'll get into sort of what the abstract said 20 00:00:50,670 --> 00:00:52,650 is the big reveal of this talk, 21 00:00:52,650 --> 00:00:55,920 which is a way to do it without using those, 22 00:00:55,920 --> 00:00:58,860 with having a static non-moving piece of metal 23 00:00:58,860 --> 00:01:01,140 that will actually actuate these mechanisms. 24 00:01:01,140 --> 00:01:02,970 We'll talk about the vendor disclosure process 25 00:01:02,970 --> 00:01:04,200 and how that went, 26 00:01:04,200 --> 00:01:06,600 and some of the implications and defenses. 27 00:01:06,600 --> 00:01:08,580 So that's a very high level. 28 00:01:08,580 --> 00:01:10,170 So what is a moving element? 29 00:01:10,170 --> 00:01:12,930 So here's some of the four most common, 30 00:01:12,930 --> 00:01:15,660 at least in North America keys that use them. 31 00:01:15,660 --> 00:01:17,340 It is a piece of the key 32 00:01:17,340 --> 00:01:20,820 that moves relative to the rest of the key. 33 00:01:20,820 --> 00:01:24,060 So with Mul-T-Lock Interactive, you've got this, 34 00:01:24,060 --> 00:01:25,590 what's called the interactive component, 35 00:01:25,590 --> 00:01:27,652 and it slides in and out. 36 00:01:27,652 --> 00:01:29,280 With the Mul-T-Lock MT5, 37 00:01:29,280 --> 00:01:30,780 you've got a spring within the key. 38 00:01:30,780 --> 00:01:34,590 So that can compress down and otherwise it will spring out 39 00:01:34,590 --> 00:01:37,383 and have a little bulge at the end here. 40 00:01:38,532 --> 00:01:41,520 Medeco M4, which is just rolling out now, 41 00:01:41,520 --> 00:01:42,540 it's got a similar thing, 42 00:01:42,540 --> 00:01:44,670 it's a pin that slides back and forth. 43 00:01:44,670 --> 00:01:48,450 And with ABLOY PROTEC2, they've got a ball bearing, 44 00:01:48,450 --> 00:01:50,550 and that ball bearing will move, 45 00:01:50,550 --> 00:01:51,383 it's captive within the key, 46 00:01:51,383 --> 00:01:54,150 so it can't fall out, and it moves side to side. 47 00:01:54,150 --> 00:01:57,390 And so that creates a protrusion on the key there, 48 00:01:57,390 --> 00:01:59,610 and that protrusion will then interact 49 00:01:59,610 --> 00:02:00,867 with an element in the lock, 50 00:02:00,867 --> 00:02:04,143 and it has to be sticking out in order to work. 51 00:02:05,040 --> 00:02:07,410 Now, why can't you just make that? 52 00:02:07,410 --> 00:02:08,400 Or why does it have to move? 53 00:02:08,400 --> 00:02:09,450 Why can't it just be static? 54 00:02:09,450 --> 00:02:12,483 Because it won't actually fit in the lock if that happens. 55 00:02:14,310 --> 00:02:17,790 And we'll show a couple examples of that in a bit. 56 00:02:17,790 --> 00:02:19,140 So what is this protect against? 57 00:02:19,140 --> 00:02:21,240 Well, it protects against casting of keys, 58 00:02:21,240 --> 00:02:23,220 because if you cast a key, 59 00:02:23,220 --> 00:02:27,180 it's going to be completely static, it won't move, and so 60 00:02:27,180 --> 00:02:30,693 that solid cast is not going to work to operate this lock. 61 00:02:32,070 --> 00:02:34,530 It also provides some protection against 3D printing, 62 00:02:34,530 --> 00:02:37,500 because a 3D printed key, same thing. 63 00:02:37,500 --> 00:02:39,300 We'll talk about some ways around that, 64 00:02:39,300 --> 00:02:42,663 but generally, 3D prints are a solid piece of material. 65 00:02:44,340 --> 00:02:45,570 So let's start our discussion 66 00:02:45,570 --> 00:02:48,840 by looking at the ABLOY PROTEC2, right? 67 00:02:48,840 --> 00:02:51,870 So we've got three main generations of ABLOY, the classic, 68 00:02:51,870 --> 00:02:52,950 which was the original 69 00:02:52,950 --> 00:02:55,590 or the original mainstream disc detainer lock. 70 00:02:55,590 --> 00:02:57,540 And then we added the PROTEC, 71 00:02:57,540 --> 00:02:59,790 which is a bit of a twist on container, 72 00:02:59,790 --> 00:03:01,380 really a beautiful design. 73 00:03:01,380 --> 00:03:04,465 And then PROTEC2 came out a couple years ago 74 00:03:04,465 --> 00:03:07,470 and now adds that captive ball bearing element. 75 00:03:07,470 --> 00:03:11,280 And that element makes it a lot harder to... 76 00:03:11,280 --> 00:03:13,040 The patent protects that element, 77 00:03:13,040 --> 00:03:16,140 so it means that you can't mass produce blanks for this. 78 00:03:16,140 --> 00:03:18,640 And so it helps with their key control in general. 79 00:03:19,950 --> 00:03:22,560 So this is sort of what it looks like when sliced open. 80 00:03:22,560 --> 00:03:24,660 So you've got the two halves of it there, 81 00:03:24,660 --> 00:03:27,420 and then this channel that contains that ball bearing 82 00:03:27,420 --> 00:03:28,920 that goes in the middle of it. 83 00:03:30,720 --> 00:03:32,760 And the mechanism works like this. 84 00:03:32,760 --> 00:03:34,290 So the ball bearing within the key 85 00:03:34,290 --> 00:03:35,850 is this one we can see on the left, 86 00:03:35,850 --> 00:03:38,040 and then there's a spring that pushes it up, 87 00:03:38,040 --> 00:03:39,600 and this is within the lock. 88 00:03:39,600 --> 00:03:43,050 And that pushes up this little shaped piece of metal here 89 00:03:43,050 --> 00:03:45,930 that then allows it to move within this channel. 90 00:03:45,930 --> 00:03:47,788 If that were not present in the key, 91 00:03:47,788 --> 00:03:51,120 this would fall down and this channel would block it 92 00:03:51,120 --> 00:03:52,923 and it would not open the lock. 93 00:03:54,570 --> 00:03:57,900 So we need to find a way with casting, or 3D printing, 94 00:03:57,900 --> 00:04:00,060 or whatever technique we're going to use 95 00:04:00,060 --> 00:04:03,030 to actuate that little piece of metal 96 00:04:03,030 --> 00:04:05,670 and allow it to go up in that channel. 97 00:04:05,670 --> 00:04:09,810 So sort of a naive approach is if we take a PROTEC1, 98 00:04:09,810 --> 00:04:11,370 that doesn't have the ball bearing 99 00:04:11,370 --> 00:04:13,290 and make a little slot for it 100 00:04:13,290 --> 00:04:16,195 to allow us to stick a lock pick in, 101 00:04:16,195 --> 00:04:19,050 and then we have this little tool here we made that works 102 00:04:19,050 --> 00:04:20,850 and a lock pick works as well. 103 00:04:20,850 --> 00:04:22,470 And so if you have that channel, 104 00:04:22,470 --> 00:04:25,140 you can stick in a key and use a lock pick 105 00:04:25,140 --> 00:04:27,240 to actually actuate that and make it open. 106 00:04:28,680 --> 00:04:29,513 That's not the sort of thing 107 00:04:29,513 --> 00:04:31,440 that ABLOY is all that concerned about 108 00:04:31,440 --> 00:04:33,510 because it's not something 109 00:04:33,510 --> 00:04:36,810 that you're gonna be able to do as selling to consumers. 110 00:04:36,810 --> 00:04:38,760 Here's a blank that'll work on ABLOY PROTEC2. 111 00:04:38,760 --> 00:04:41,340 We'll know you've got also this lock picking. 112 00:04:41,340 --> 00:04:43,260 And that video is also a bit deceptive 113 00:04:43,260 --> 00:04:45,300 because that was one of many takes, 114 00:04:45,300 --> 00:04:46,320 and that was the best one. 115 00:04:46,320 --> 00:04:48,480 So it takes a bit of skill 116 00:04:48,480 --> 00:04:50,580 to get the exact right position on it 117 00:04:50,580 --> 00:04:52,830 and to do it consistently every time. 118 00:04:52,830 --> 00:04:57,340 So you can do it, but that is a good illustration 119 00:04:58,620 --> 00:05:01,140 of why when making moving elements and keys, 120 00:05:01,140 --> 00:05:03,930 it is a good idea to not have your moving element 121 00:05:03,930 --> 00:05:07,980 be the first thing, right, closest to the keyhole, 122 00:05:07,980 --> 00:05:10,200 because if there's some pins and whatnot 123 00:05:10,200 --> 00:05:11,340 in the way that prevent you 124 00:05:11,340 --> 00:05:13,650 from sticking that lock picking around them, 125 00:05:13,650 --> 00:05:15,243 that would prevent this attack. 126 00:05:16,290 --> 00:05:19,500 But that's old news. 127 00:05:19,500 --> 00:05:21,720 And specifically it's three-year-old news. 128 00:05:21,720 --> 00:05:22,553 My brother, Bobby and I, 129 00:05:22,553 --> 00:05:25,440 we talked about this attack amongst many other things. 130 00:05:25,440 --> 00:05:26,400 At DEF CON 27, 131 00:05:26,400 --> 00:05:29,670 we talked about duplicating restricted keys in general. 132 00:05:29,670 --> 00:05:32,760 And so this talk is sort of a part two of that, if you will, 133 00:05:32,760 --> 00:05:35,520 to talk explicitly about the moving elements, 134 00:05:35,520 --> 00:05:38,160 because those are being sort of the industry trend 135 00:05:38,160 --> 00:05:39,270 right now. 136 00:05:39,270 --> 00:05:41,767 Particularly a number of patent courts have started saying, 137 00:05:41,767 --> 00:05:43,920 "Well, you can't just patent a piece of metal. 138 00:05:43,920 --> 00:05:45,690 You can't patent a static shape. 139 00:05:45,690 --> 00:05:47,700 It must have something else to it." 140 00:05:47,700 --> 00:05:50,940 And this moving element is the solution 141 00:05:50,940 --> 00:05:53,100 that lock makers are converging on there. 142 00:05:53,100 --> 00:05:55,473 So it is a trend that we're seeing. 143 00:05:57,390 --> 00:05:58,230 Okay. 144 00:05:58,230 --> 00:06:00,840 So let's take a look at what we can do 145 00:06:00,840 --> 00:06:03,930 to actually make an ABLOY PROTEC2 key, 146 00:06:03,930 --> 00:06:05,610 and 3D printing is one way. 147 00:06:05,610 --> 00:06:08,940 So there's this really excellent library on GitHub 148 00:06:08,940 --> 00:06:12,210 that lets you generate a PROTEC2 key to a certain code 149 00:06:12,210 --> 00:06:13,290 and then print one. 150 00:06:13,290 --> 00:06:16,050 And 3D printing a keys, in general, they're terrible. 151 00:06:16,050 --> 00:06:18,060 Honestly, they don't work well, right? 152 00:06:18,060 --> 00:06:20,160 The material's not strong. 153 00:06:20,160 --> 00:06:23,070 It doesn't let pins glide across them very well. 154 00:06:23,070 --> 00:06:25,740 3D printing is, it works for keys, 155 00:06:25,740 --> 00:06:27,987 but don't think you're gonna 3D print your house key 156 00:06:27,987 --> 00:06:29,193 and use it every day. 157 00:06:30,120 --> 00:06:32,610 This, though, actually works pretty well. 158 00:06:32,610 --> 00:06:34,740 Like, the nature of ABLOY PROTEC locks 159 00:06:34,740 --> 00:06:37,410 and disc detainers in general is their springless designs, 160 00:06:37,410 --> 00:06:39,630 there's nothing dragging on anything else. 161 00:06:39,630 --> 00:06:41,820 It suits itself well to 3D printing, 162 00:06:41,820 --> 00:06:44,340 and this library does it extremely well. 163 00:06:44,340 --> 00:06:46,140 So kudos to them. 164 00:06:46,140 --> 00:06:49,650 And so I forked that and did a fine and replace 165 00:06:49,650 --> 00:06:51,950 of everywhere that said PROTEC with PROTEC2 166 00:06:51,950 --> 00:06:53,490 in the documentation. 167 00:06:53,490 --> 00:06:54,750 And on this fork, 168 00:06:54,750 --> 00:06:58,947 I've been adding everything that I've been working on 169 00:06:58,947 --> 00:07:00,510 and that we're talking about in this talk 170 00:07:00,510 --> 00:07:02,973 to make PROTEC2 keys 3D printable. 171 00:07:04,350 --> 00:07:05,930 And I do wanna give a quick shout out as well 172 00:07:05,930 --> 00:07:08,370 to Moloch's incredible DEF CON 26 talk 173 00:07:08,370 --> 00:07:09,660 that goes much more in depth 174 00:07:09,660 --> 00:07:11,510 about 3D printing high security keys 175 00:07:11,510 --> 00:07:13,080 in the context of Knox Boxes. 176 00:07:13,080 --> 00:07:14,933 So check that out if you're interested. 177 00:07:16,470 --> 00:07:19,530 So the first technique and sort of the naive approach 178 00:07:19,530 --> 00:07:20,400 that we're going to try 179 00:07:20,400 --> 00:07:23,100 with 3D printing a key with a captive element 180 00:07:23,100 --> 00:07:26,460 is to just 3D print the captive element. 181 00:07:26,460 --> 00:07:30,150 So we'll take our 3D principle model of an ABLOY PROTEC key 182 00:07:30,150 --> 00:07:33,030 and we'll add a spherical hole in it. 183 00:07:33,030 --> 00:07:36,600 And then within that spherical hole, we'll add a sphere. 184 00:07:36,600 --> 00:07:38,850 And so in theory, 185 00:07:38,850 --> 00:07:41,100 this will simulate that captive ball bearing, 186 00:07:41,100 --> 00:07:42,360 and we print it, 187 00:07:42,360 --> 00:07:44,460 and that sphere is able to move, 188 00:07:44,460 --> 00:07:46,080 but it's stuck within there. 189 00:07:46,080 --> 00:07:47,530 And it will work in the lock. 190 00:07:49,107 --> 00:07:53,520 And not so much, because the nature of 3D printing is, 191 00:07:53,520 --> 00:07:56,340 you don't get perfect tolerances, 192 00:07:56,340 --> 00:07:59,820 and especially with resin printing, you get things, 193 00:07:59,820 --> 00:08:02,340 if they're too close together, they stick. 194 00:08:02,340 --> 00:08:04,540 And so trying out different spacings 195 00:08:07,890 --> 00:08:10,410 between that sphere and the hole that it's in, 196 00:08:10,410 --> 00:08:13,920 if it's too close, they stick together, they merge, 197 00:08:13,920 --> 00:08:16,200 and it's just a static piece of material. 198 00:08:16,200 --> 00:08:17,033 If it's too far, 199 00:08:17,033 --> 00:08:20,520 the spherical ball bearing simulator falls out. 200 00:08:20,520 --> 00:08:22,920 And it turns out there is no happy medium, 201 00:08:22,920 --> 00:08:24,150 it's one or the other. 202 00:08:24,150 --> 00:08:26,010 So I was not successful 203 00:08:26,010 --> 00:08:29,790 in getting a 3D printed captive element to work. 204 00:08:29,790 --> 00:08:31,320 That doesn't mean you won't be, 205 00:08:31,320 --> 00:08:35,433 but it it's not as trivial as you might think. 206 00:08:37,170 --> 00:08:41,100 Okay, so if we need a certain minimum space, 207 00:08:41,100 --> 00:08:42,420 but we also need something 208 00:08:42,420 --> 00:08:45,300 to keep this sphere from falling out, 209 00:08:45,300 --> 00:08:49,050 we could try adding a thin piece of material to hold it in 210 00:08:49,050 --> 00:08:51,780 and make a compliant mechanism. 211 00:08:51,780 --> 00:08:53,790 And so that's a nice thing with 3D printed materials 212 00:08:53,790 --> 00:08:56,730 is that they bend a little bit without breaking. 213 00:08:56,730 --> 00:08:59,220 And so we try this design. 214 00:08:59,220 --> 00:09:01,350 And so it's got that ball bearing in the right place. 215 00:09:01,350 --> 00:09:03,510 And then just a long thin tongue, 216 00:09:03,510 --> 00:09:05,010 and that tongue holds it in place 217 00:09:05,010 --> 00:09:07,173 and lets it spring back and forth. 218 00:09:08,725 --> 00:09:10,560 And it turns out that works fairly well, actually. 219 00:09:10,560 --> 00:09:12,660 So here's what it looks like when printed. 220 00:09:12,660 --> 00:09:15,240 You can see that the printer really had a problem 221 00:09:15,240 --> 00:09:16,200 on the head. 222 00:09:16,200 --> 00:09:18,210 Doesn't look very pretty, but it works. 223 00:09:18,210 --> 00:09:19,740 So we got this captive element, 224 00:09:19,740 --> 00:09:21,930 and it's able to spring back and forth 225 00:09:21,930 --> 00:09:23,433 and simulate that key. 226 00:09:24,420 --> 00:09:27,123 So we'll just take a look at that in operation. 227 00:09:28,020 --> 00:09:29,193 So there it is. 228 00:09:30,090 --> 00:09:31,533 We stick it into the lock. 229 00:09:33,563 --> 00:09:34,913 And it works really nicely. 230 00:09:36,180 --> 00:09:37,470 Now this was, again, 231 00:09:37,470 --> 00:09:38,910 one takeout of multiple, 232 00:09:38,910 --> 00:09:42,677 and it took a lot of little tweaks and filing on that key, 233 00:09:42,677 --> 00:09:44,940 'cause the supports add little elements. 234 00:09:44,940 --> 00:09:48,660 And 3D printed keys they really don't work very well 235 00:09:48,660 --> 00:09:51,240 the first time out, but it does work, 236 00:09:51,240 --> 00:09:53,343 and so it is a cause for concern there. 237 00:09:56,970 --> 00:09:59,550 And so I added that to the GitHub repo as well 238 00:09:59,550 --> 00:10:01,590 that you're welcome to check out and print your own. 239 00:10:01,590 --> 00:10:03,050 Another thing that's worth mentioning about this, 240 00:10:03,050 --> 00:10:05,220 is now that you can 3D print them, 241 00:10:05,220 --> 00:10:07,890 you can 3D print a whole bunch at once. 242 00:10:07,890 --> 00:10:10,770 And so I gave a talk two years ago at DEF CON Safe Mode 243 00:10:10,770 --> 00:10:14,670 about what you can do with information theory and key codes 244 00:10:14,670 --> 00:10:17,820 and sort of brute forcing mechanical locks. 245 00:10:17,820 --> 00:10:21,360 And so that's something that this allows you to do 246 00:10:21,360 --> 00:10:23,490 pretty effectively with something as high security 247 00:10:23,490 --> 00:10:25,320 as an ABLOY PROTEC2 now. 248 00:10:25,320 --> 00:10:28,680 And so if we'd turned these keys vertical, 249 00:10:28,680 --> 00:10:31,523 we could have fit hundreds of those on that one print bed. 250 00:10:33,870 --> 00:10:36,270 So before we get into the big reveal of how to do it 251 00:10:36,270 --> 00:10:38,850 with a static piece of material, 252 00:10:38,850 --> 00:10:42,592 let's switch gears a little bit and look at Mul-T-Lock. 253 00:10:42,592 --> 00:10:45,990 Mul-T-Lock is sort of the one that really popularized 254 00:10:45,990 --> 00:10:47,313 these moving elements. 255 00:10:48,180 --> 00:10:49,890 I don't know if they were the very first ones to do it, 256 00:10:49,890 --> 00:10:51,330 but they got a patent on it. 257 00:10:51,330 --> 00:10:53,760 So if they were not, 258 00:10:53,760 --> 00:10:55,740 there was no prior art that the patent office found, 259 00:10:55,740 --> 00:10:57,390 not that they ever try very hard. 260 00:10:59,460 --> 00:11:02,820 So Mul-T-Lock Interactive is the first one there. 261 00:11:02,820 --> 00:11:04,410 It has these telescoping pins, 262 00:11:04,410 --> 00:11:08,640 which was a holdover from the previous design, 263 00:11:08,640 --> 00:11:10,200 but it's not particularly important 264 00:11:10,200 --> 00:11:12,003 for what we're doing today. 265 00:11:12,960 --> 00:11:15,750 What's important here is that one of those pins 266 00:11:15,750 --> 00:11:17,223 on the key it moves. 267 00:11:18,210 --> 00:11:21,840 And it has to move a little bit higher 268 00:11:21,840 --> 00:11:23,550 than the plane of the top of the blank 269 00:11:23,550 --> 00:11:25,293 in order to actually set that pin. 270 00:11:26,460 --> 00:11:28,140 So the pin looks identical. 271 00:11:28,140 --> 00:11:30,330 The pin looks identical to all the other pins, 272 00:11:30,330 --> 00:11:31,800 except it is shorter. 273 00:11:31,800 --> 00:11:35,640 And that pin is too short to be actuated by anything 274 00:11:35,640 --> 00:11:37,740 but a key with them moving element 275 00:11:37,740 --> 00:11:39,903 that sticks up beyond the plane of the key. 276 00:11:40,950 --> 00:11:42,837 And then we've got the moving element 277 00:11:42,837 --> 00:11:45,150 and the key that we can see here. 278 00:11:45,150 --> 00:11:46,920 And in the bottom of the plug, 279 00:11:46,920 --> 00:11:50,430 there's this little spring loaded piece of metal 280 00:11:50,430 --> 00:11:54,090 that pushes up and pushes this moving element up, 281 00:11:54,090 --> 00:11:55,170 which pushes this pin up 282 00:11:55,170 --> 00:11:57,363 and allows the key to operate the lock. 283 00:11:59,880 --> 00:12:02,040 So looking at sort of a cutaway version, 284 00:12:02,040 --> 00:12:05,850 we'll ignore the pin and pin design of Mul-T-Locks for now. 285 00:12:05,850 --> 00:12:07,260 This is essentially what's happening. 286 00:12:07,260 --> 00:12:12,260 We've got the key protruding above the head of the key. 287 00:12:13,826 --> 00:12:18,826 And so let's take a quick look at a demo for that. 288 00:12:20,490 --> 00:12:23,140 Actually, I'll see if we can do a courtesy zoom here. 289 00:12:24,000 --> 00:12:27,840 So here is an example of what that lock might look like, 290 00:12:27,840 --> 00:12:29,157 and just a blank. 291 00:12:29,157 --> 00:12:30,480 And so I'm inserting this blank. 292 00:12:30,480 --> 00:12:33,900 And blanks are cut as high as you can possibly cut them. 293 00:12:33,900 --> 00:12:35,880 And notice that when the blank is inserted in, 294 00:12:35,880 --> 00:12:39,000 this one pin here is still too low. 295 00:12:39,000 --> 00:12:41,400 So even the blank with the highest possible cuts 296 00:12:41,400 --> 00:12:43,533 does not put that pin at the sheer line. 297 00:12:44,400 --> 00:12:47,373 If we add a little protrusion to the blank, then it does. 298 00:12:48,930 --> 00:12:51,750 And so that sets that to the sheer line. 299 00:12:51,750 --> 00:12:55,290 And then of course, if we add all the rest of the cuts, 300 00:12:55,290 --> 00:12:58,200 we're now gonna open that lock. 301 00:12:58,200 --> 00:12:59,760 So we add those cuts. 302 00:12:59,760 --> 00:13:00,843 But here's a problem. 303 00:13:02,400 --> 00:13:05,430 Is that if I now try to take this key out of the lock, 304 00:13:05,430 --> 00:13:06,873 well, it won't fit. 305 00:13:08,580 --> 00:13:13,580 This metal is getting in the way of the actual lock plug. 306 00:13:13,650 --> 00:13:16,020 So this doesn't work. 307 00:13:16,020 --> 00:13:17,897 You can't just add a protruding element over top of it, 308 00:13:17,897 --> 00:13:21,423 'cause it is thicker than the hole, the key hole is. 309 00:13:22,470 --> 00:13:24,420 And so that's sort of been the conventional wisdom 310 00:13:24,420 --> 00:13:25,740 behind interactive elements. 311 00:13:25,740 --> 00:13:29,070 You need this moving element to open the lock, 312 00:13:29,070 --> 00:13:30,780 but you need it to move back to the other position 313 00:13:30,780 --> 00:13:32,403 to insert and remove the key. 314 00:13:39,323 --> 00:13:42,630 And so that's happening in Mul-T-Lock. 315 00:13:42,630 --> 00:13:45,990 We've got the moving element, is able to move up and down 316 00:13:45,990 --> 00:13:48,660 when it's pushed up by that little spring loaded element 317 00:13:48,660 --> 00:13:49,893 inside the core, 318 00:13:51,143 --> 00:13:53,793 and that lifts that pin to the sheer line. 319 00:13:55,440 --> 00:13:56,273 Okay. 320 00:13:57,270 --> 00:13:58,740 Here's the big reveal. 321 00:13:58,740 --> 00:14:03,198 And it's so stupidly simple, 322 00:14:03,198 --> 00:14:05,280 someone else has gotta have thought of this before, 323 00:14:05,280 --> 00:14:07,620 but I'm the first one that has published about it 324 00:14:07,620 --> 00:14:08,850 that I can find. 325 00:14:08,850 --> 00:14:11,463 Here's the big reveal to avoid that problem. 326 00:14:13,440 --> 00:14:16,083 We just take a bit of metal off the back of the key. 327 00:14:18,270 --> 00:14:19,506 That's all it takes. 328 00:14:19,506 --> 00:14:22,506 (audience applauds) 329 00:14:25,110 --> 00:14:28,083 And with that, we can move the entire key. 330 00:14:29,130 --> 00:14:31,920 And so now it fits in and we move the whole key, 331 00:14:31,920 --> 00:14:33,150 we angle it up a little bit 332 00:14:33,150 --> 00:14:35,733 and it sets that pin to the correct height. 333 00:14:37,020 --> 00:14:39,930 And again, it's so simple. 334 00:14:39,930 --> 00:14:42,720 I can't be the first person who's thought about this, 335 00:14:42,720 --> 00:14:46,290 but I couldn't find anyone else's published on it. 336 00:14:46,290 --> 00:14:50,280 And lock makers are putting out designs 337 00:14:50,280 --> 00:14:52,290 as if they haven't thought of it either. 338 00:14:52,290 --> 00:14:53,700 So we're getting it out there now. 339 00:14:53,700 --> 00:14:55,290 And this is something to start thinking about 340 00:14:55,290 --> 00:14:57,633 when doing new iterations on lock designs. 341 00:14:59,640 --> 00:15:01,620 So to actually fabricate this, 342 00:15:01,620 --> 00:15:03,150 at DEF CON 27, we talked about 343 00:15:03,150 --> 00:15:05,280 how you can do the regular cuts on a Mul-T-Lock 344 00:15:05,280 --> 00:15:06,990 on a drill press. 345 00:15:06,990 --> 00:15:09,570 So you can check out that talk if you're interested. 346 00:15:09,570 --> 00:15:10,833 So we can add the cuts, 347 00:15:12,030 --> 00:15:16,170 but then we have to add this element protruding out as well. 348 00:15:16,170 --> 00:15:17,850 So what can we do about that? 349 00:15:17,850 --> 00:15:20,370 Well, we'll start with a Classic Key blank. 350 00:15:20,370 --> 00:15:25,370 And so that gives us the overall shape. 351 00:15:25,530 --> 00:15:26,610 It gives us everything we need, 352 00:15:26,610 --> 00:15:28,413 except that element protruding out. 353 00:15:29,340 --> 00:15:31,230 One thing is the Classic Key blanks 354 00:15:31,230 --> 00:15:32,973 are ludicrously expensive, 355 00:15:34,327 --> 00:15:35,673 $7 a blank, 356 00:15:36,510 --> 00:15:39,990 that's not something that we wanna be spending. 357 00:15:39,990 --> 00:15:42,213 So we go to our old friend, AliExpress. 358 00:15:46,080 --> 00:15:48,480 If you search for a Mul-T-Lock key blank on AliExpress, 359 00:15:48,480 --> 00:15:49,830 you're not gonna find this. 360 00:15:49,830 --> 00:15:51,810 It's just a very generic name, Key Tool, 361 00:15:51,810 --> 00:15:54,513 Home Door Key Blanks, Locksmith Supplies Blank Keys. 362 00:15:55,590 --> 00:15:58,830 But I was browsing around looking for other things 363 00:15:58,830 --> 00:16:00,330 and stumble upon this. 364 00:16:00,330 --> 00:16:02,070 And I'm like, "Huh, 365 00:16:02,070 --> 00:16:04,230 that looks a lot like a Mul-T-Lock." 366 00:16:04,230 --> 00:16:05,370 And so I ordered some 367 00:16:05,370 --> 00:16:07,770 and it turns out they actually worked perfectly. 368 00:16:07,770 --> 00:16:09,270 They actually got extra metal taken away. 369 00:16:09,270 --> 00:16:11,280 So they fit in a number of different sections 370 00:16:11,280 --> 00:16:14,610 of Mul-T-Lock locks. 371 00:16:14,610 --> 00:16:18,950 Okay, so we take this not nearly as expensive key blank, 372 00:16:18,950 --> 00:16:21,030 and when we insert it into the lock, 373 00:16:21,030 --> 00:16:22,980 we'll see that this pin here is too low, 374 00:16:22,980 --> 00:16:25,180 it doesn't have that element protruding out. 375 00:16:26,250 --> 00:16:30,210 And to fix that, I'm just gonna shave away a bunch of metal 376 00:16:30,210 --> 00:16:34,710 on the pin side of the key, except for that one place. 377 00:16:34,710 --> 00:16:37,530 And so I'm leaving now a little bit poking out 378 00:16:37,530 --> 00:16:39,330 in that one part of the key 379 00:16:39,330 --> 00:16:41,859 that's gotta be poking out to actuate that element 380 00:16:41,859 --> 00:16:43,533 and shaving away the back. 381 00:16:44,970 --> 00:16:48,903 And so now the entire key is able to move within the lock. 382 00:16:52,980 --> 00:16:57,180 So you can see that the whole key can bounce back and forth. 383 00:16:57,180 --> 00:16:59,670 And the pins are too low when it's in the position 384 00:16:59,670 --> 00:17:03,770 that'll allow it to insert, but that moving pin, 385 00:17:05,940 --> 00:17:10,290 that pin that's too short, does get set when it's pushed up. 386 00:17:10,290 --> 00:17:12,690 You'll notice it's a little bit lower than the others. 387 00:17:12,690 --> 00:17:16,083 It is still within tolerance and it does open that lock. 388 00:17:18,690 --> 00:17:20,607 So then we have to add the cuts to it. 389 00:17:20,607 --> 00:17:21,540 And so if we're doing that, 390 00:17:21,540 --> 00:17:23,220 we just gotta put a little piece of metal 391 00:17:23,220 --> 00:17:24,450 to shim the back of the key, 392 00:17:24,450 --> 00:17:27,090 otherwise our cuts are gonna end up to shallow. 393 00:17:27,090 --> 00:17:29,130 This happens to be on an actual Mul-T-Lock machine, 394 00:17:29,130 --> 00:17:32,160 but you can do it on the drill press as well. 395 00:17:32,160 --> 00:17:35,190 And so we add these cuts to our surrogate key, 396 00:17:35,190 --> 00:17:37,890 and now we have one that will actually work. 397 00:17:37,890 --> 00:17:41,160 So we can see on the side, all of those bidding cuts there 398 00:17:41,160 --> 00:17:43,410 and then the little element that's sticking out 399 00:17:43,410 --> 00:17:45,093 beyond the top plane of that key. 400 00:17:48,180 --> 00:17:49,320 I mean, it doesn't work perfectly, 401 00:17:49,320 --> 00:17:51,360 and you have to know to move it when you insert it. 402 00:17:51,360 --> 00:17:54,090 So it's a little bit of a back and forth, 403 00:17:54,090 --> 00:17:57,600 but it works well enough like this. 404 00:17:57,600 --> 00:18:00,810 If my house key were a Mul-T-Lock, 405 00:18:00,810 --> 00:18:04,020 I would be perfectly fine using this every day. 406 00:18:04,020 --> 00:18:06,660 So that is a bit of a problem. 407 00:18:06,660 --> 00:18:09,093 Something that's worth dealing with. 408 00:18:10,080 --> 00:18:12,270 Mul-T-Lock Interactive is long since it out of patent, 409 00:18:12,270 --> 00:18:15,540 so it's not stopping anyone from manufacturing key blanks 410 00:18:15,540 --> 00:18:17,220 that have that moving element. 411 00:18:17,220 --> 00:18:19,290 No one has, that I've been able to find, 412 00:18:19,290 --> 00:18:23,013 but a bit less of a concern because it's out of patent. 413 00:18:25,800 --> 00:18:27,660 And you can go print your own. 414 00:18:27,660 --> 00:18:30,900 So I published all of this on my GitHub, 415 00:18:30,900 --> 00:18:34,343 as well as some elements that you can use with JSCAD. 416 00:18:34,343 --> 00:18:37,680 So it's a JavaScript version of the OpenSCAD. 417 00:18:37,680 --> 00:18:39,330 And so you can play around with it 418 00:18:39,330 --> 00:18:41,880 and do it entirely within your web browser as well. 419 00:18:43,590 --> 00:18:47,460 So I was mentioning patents, and patents last 20 years. 420 00:18:47,460 --> 00:18:51,780 And so this is why we see these many generations 421 00:18:51,780 --> 00:18:55,140 of these major lock designs that we see out there. 422 00:18:55,140 --> 00:18:58,620 So with Mul-T-Lock, their classic came out in 1977. 423 00:18:58,620 --> 00:19:01,770 And then in 1994, the patent was getting close to expiring, 424 00:19:01,770 --> 00:19:04,800 and they released the Interactive to keep that in patent 425 00:19:04,800 --> 00:19:07,590 and allow them to maintain control over their key control. 426 00:19:07,590 --> 00:19:11,583 And then in 2007, another, almost 20 years later, 427 00:19:13,110 --> 00:19:14,730 they released the MT5. 428 00:19:14,730 --> 00:19:15,900 Same thing, they're changing up 429 00:19:15,900 --> 00:19:18,180 how that moving element is done to a spring 430 00:19:18,180 --> 00:19:20,583 instead of a solid element. 431 00:19:21,510 --> 00:19:23,700 And that's primarily done to keep things in patents 432 00:19:23,700 --> 00:19:28,020 and maintain legal enforcement ability 433 00:19:28,020 --> 00:19:29,283 over their key control. 434 00:19:30,870 --> 00:19:32,490 So let's take a look at how we can apply this 435 00:19:32,490 --> 00:19:34,103 to the Mul-T-Lock MT5. 436 00:19:35,520 --> 00:19:39,540 So the MT5 works similarly to the others, 437 00:19:39,540 --> 00:19:43,080 except it has this spring in the tip of the key, 438 00:19:43,080 --> 00:19:44,430 and it's in the center, 439 00:19:44,430 --> 00:19:47,400 not colinear with the rest of the cut. 440 00:19:47,400 --> 00:19:50,220 So the pin for it has to be this funny little thing 441 00:19:50,220 --> 00:19:54,543 that's got a little secondary pin stuck to it over the side. 442 00:19:56,220 --> 00:19:57,133 It's an interesting looking pin, 443 00:19:57,133 --> 00:19:59,010 and shadow to think the expense 444 00:19:59,010 --> 00:20:01,110 at which they manufacture that, 445 00:20:01,110 --> 00:20:02,220 but they do. 446 00:20:02,220 --> 00:20:07,220 And so we've gotta push this pin up by having a protrusion 447 00:20:07,542 --> 00:20:09,480 on the top of our key. 448 00:20:09,480 --> 00:20:10,830 So we do the same thing. 449 00:20:10,830 --> 00:20:14,070 We add that protrusion just within, in OpenSCAD, 450 00:20:14,070 --> 00:20:15,810 which is the software that this was created in, 451 00:20:15,810 --> 00:20:17,220 just a cylinder and you rotate it 452 00:20:17,220 --> 00:20:18,150 and position it correctly 453 00:20:18,150 --> 00:20:20,050 and union it with the rest of the key. 454 00:20:21,000 --> 00:20:24,150 And then we just knock off the back of that key 455 00:20:24,150 --> 00:20:27,210 so that it has space to fit in the lock. 456 00:20:27,210 --> 00:20:29,040 And that'll work for us. 457 00:20:29,040 --> 00:20:33,570 It is worth noting that the MT5 has a variation called MT5+ 458 00:20:33,570 --> 00:20:35,220 that has a track to it. 459 00:20:35,220 --> 00:20:37,680 So it it's also got a slider track. 460 00:20:37,680 --> 00:20:39,030 And so we just have to add that 461 00:20:39,030 --> 00:20:40,740 to the back of the key as well, 462 00:20:40,740 --> 00:20:42,090 but nothing about this technique 463 00:20:42,090 --> 00:20:43,830 prevents us from doing that. 464 00:20:43,830 --> 00:20:45,000 So here's one that's 3D printed, 465 00:20:45,000 --> 00:20:48,540 and we can see the little protrusion at the end of the key. 466 00:20:48,540 --> 00:20:49,590 And then on the backside, 467 00:20:49,590 --> 00:20:53,460 we've got that slider track printed as well. 468 00:20:53,460 --> 00:20:55,230 So in one place it's actually so thin 469 00:20:55,230 --> 00:20:57,480 that there's no material in between them, but that's okay, 470 00:20:57,480 --> 00:20:59,700 the rest of the key supports it just fine. 471 00:20:59,700 --> 00:21:01,517 And so it operates, it just fine there all. 472 00:21:01,517 --> 00:21:03,180 And so we can see this protrusion 473 00:21:03,180 --> 00:21:05,030 from the 3D print sticking out there. 474 00:21:07,200 --> 00:21:09,150 And so when we insert this into a lock, 475 00:21:11,760 --> 00:21:14,700 it's at the end rather than the base of the key 476 00:21:14,700 --> 00:21:15,533 that's moving, 477 00:21:15,533 --> 00:21:18,213 but you can see as I tilt it back and forth, 478 00:21:19,230 --> 00:21:24,210 this pin here at the far end is bouncing up and down, 479 00:21:24,210 --> 00:21:26,730 and so I am successfully setting that pin 480 00:21:26,730 --> 00:21:29,180 that should be set by the moving element as well. 481 00:21:32,376 --> 00:21:34,410 And so you can print your own of these as well 482 00:21:34,410 --> 00:21:38,493 at the same URLs and try it out for yourself. 483 00:21:40,050 --> 00:21:42,443 So now that we've got both Interactive and MT5, 484 00:21:42,443 --> 00:21:44,610 and MT5 is still in patent. 485 00:21:44,610 --> 00:21:45,443 So this is something 486 00:21:45,443 --> 00:21:48,000 that they would be potentially concerned with. 487 00:21:48,000 --> 00:21:49,650 I reached out to them. 488 00:21:49,650 --> 00:21:52,800 And so there's part of the responsible process 489 00:21:52,800 --> 00:21:53,880 of discovering this sort of thing 490 00:21:53,880 --> 00:21:55,740 is you reach out to the manufacturers 491 00:21:55,740 --> 00:21:58,380 and let them know in advance of publishing it, 492 00:21:58,380 --> 00:22:00,450 and give them a chance to fix things, 493 00:22:00,450 --> 00:22:02,600 or at least respond and be prepared for it. 494 00:22:03,540 --> 00:22:08,253 So I reached out and the response, crickets. 495 00:22:10,020 --> 00:22:13,170 So I sent multiple emails to their online forms. 496 00:22:13,170 --> 00:22:14,580 I even reached out to some people I knew 497 00:22:14,580 --> 00:22:16,410 that happened to have family that worked in Mul-T-Lock, 498 00:22:16,410 --> 00:22:18,360 and I just could not get on the phone with the right person. 499 00:22:18,360 --> 00:22:21,810 So if you happen to be watching this video on YouTube after 500 00:22:21,810 --> 00:22:22,770 or in the audience, 501 00:22:22,770 --> 00:22:25,290 and you're from Mul-T-Lock and you are the right person, 502 00:22:25,290 --> 00:22:26,370 please reach out to me. 503 00:22:26,370 --> 00:22:28,860 I would love to work with you to help mitigate this. 504 00:22:28,860 --> 00:22:30,450 And there are mitigations available, 505 00:22:30,450 --> 00:22:32,100 which I'll talk about at the end. 506 00:22:34,020 --> 00:22:36,180 So hopefully we can see that happen 507 00:22:36,180 --> 00:22:37,680 now that this is actually being released, 508 00:22:37,680 --> 00:22:40,330 but it does give attackers a bit of a head start now. 509 00:22:42,150 --> 00:22:43,860 All right, let's talk about ABLOY, right? 510 00:22:43,860 --> 00:22:45,120 So we talked about that a bit 511 00:22:45,120 --> 00:22:47,250 at the first part of this presentation, 512 00:22:47,250 --> 00:22:48,540 we're gonna come back to it. 513 00:22:48,540 --> 00:22:49,980 It's a bit more complicated geometry, 514 00:22:49,980 --> 00:22:53,310 which is why I covered Mul-T-Lock first, right? 515 00:22:53,310 --> 00:22:55,472 So we've got the disc detainer cuts 516 00:22:55,472 --> 00:22:56,820 are a bit more complicated. 517 00:22:56,820 --> 00:22:59,130 We have to treat those with a little bit more care 518 00:22:59,130 --> 00:23:02,070 when we're removing the metal from the backside of it. 519 00:23:02,070 --> 00:23:04,860 But otherwise the process is pretty similar. 520 00:23:04,860 --> 00:23:06,630 So we've got in OpenSCAD, 521 00:23:06,630 --> 00:23:09,690 which is this really awesome software that does this, 522 00:23:09,690 --> 00:23:11,280 and you'll see why in a second, 523 00:23:11,280 --> 00:23:15,360 we add a sphere to it that adds that element sticking out. 524 00:23:15,360 --> 00:23:17,850 And we've gotta remove material from the back of the key 525 00:23:17,850 --> 00:23:20,940 so it will actually insert and fit within that lock. 526 00:23:20,940 --> 00:23:22,770 Now we can't just shop it off 527 00:23:22,770 --> 00:23:24,720 the way we did with the Mul-T-Lock, 528 00:23:24,720 --> 00:23:26,010 because this is a disc detainer 529 00:23:26,010 --> 00:23:28,680 and it has to be able to interact on both sides of the key 530 00:23:28,680 --> 00:23:29,643 with the material. 531 00:23:31,440 --> 00:23:34,050 So what we can do is draw a second one. 532 00:23:34,050 --> 00:23:36,300 So I'm just doing ABLOY PROTEC2 twice, 533 00:23:36,300 --> 00:23:37,133 and then I'm rotating it. 534 00:23:37,133 --> 00:23:38,220 And so in this case, 535 00:23:38,220 --> 00:23:42,120 I'm rotating it by two degrees in the y-axis. 536 00:23:42,120 --> 00:23:43,440 And so you can see here 537 00:23:43,440 --> 00:23:45,684 that this is two keys that are rotated. 538 00:23:45,684 --> 00:23:48,120 And one of the beauties beauty of this software 539 00:23:48,120 --> 00:23:51,603 is that I can take the intersection of those two. 540 00:23:52,440 --> 00:23:53,970 And so there's the intersection. 541 00:23:53,970 --> 00:23:57,810 And so that pretty perfectly chops off metal from the back 542 00:23:57,810 --> 00:24:00,660 in exactly the way that I need that to happen 543 00:24:00,660 --> 00:24:04,083 in order for it to actually fit into the lock. 544 00:24:05,550 --> 00:24:06,510 And so you can see, right, 545 00:24:06,510 --> 00:24:10,410 I'm doing this in the code, drawing one ABLOY PROTEC2, 546 00:24:10,410 --> 00:24:11,670 and then another that's rotated, 547 00:24:11,670 --> 00:24:13,870 and just taking the intersection of the two. 548 00:24:15,240 --> 00:24:17,970 All right, so this is what it looks like when 3D printed. 549 00:24:17,970 --> 00:24:20,163 And we can take a look at it in operation. 550 00:24:24,570 --> 00:24:27,810 All right, so there's the key with the element. Oops. 551 00:24:27,810 --> 00:24:29,670 There's the key with the element poking out. 552 00:24:29,670 --> 00:24:30,503 And you can see, 553 00:24:30,503 --> 00:24:33,570 when I turn it, it's thinner at the base of the key. 554 00:24:33,570 --> 00:24:36,960 I insert it in, and I push it to the left, 555 00:24:36,960 --> 00:24:38,700 and then I quickly defeat 556 00:24:38,700 --> 00:24:41,130 that element detecting the moving element, 557 00:24:41,130 --> 00:24:42,420 and then after a bit of wiggling, 558 00:24:42,420 --> 00:24:45,120 it's able to actually turn the discs as well 559 00:24:45,120 --> 00:24:47,570 and get those all to set in the sidebar to go in. 560 00:24:49,412 --> 00:24:51,497 So this works now with ABLOY PROTEC2, 561 00:24:51,497 --> 00:24:53,592 and it allows you to 3D print, 562 00:24:53,592 --> 00:24:56,520 not just with a compliant mechanism, 563 00:24:56,520 --> 00:24:59,430 but also a completely static mechanism. 564 00:24:59,430 --> 00:25:02,100 And so that's not just 3D printing that interacts with, 565 00:25:02,100 --> 00:25:04,860 but also you can make this out a metal. 566 00:25:04,860 --> 00:25:07,150 So we can now make a metal key 567 00:25:08,955 --> 00:25:10,170 that will work for PROTEC2. 568 00:25:10,170 --> 00:25:13,680 So again, something that we want to potentially mitigate, 569 00:25:13,680 --> 00:25:15,540 if there's a good way to do it. 570 00:25:15,540 --> 00:25:17,850 So I reached out to ABLOY with the same process, 571 00:25:17,850 --> 00:25:21,960 and spots, crickets. 572 00:25:21,960 --> 00:25:23,760 So, same deal. 573 00:25:23,760 --> 00:25:24,810 If you are with ABLOY 574 00:25:24,810 --> 00:25:26,400 and you were the correct person to talk to about this, 575 00:25:26,400 --> 00:25:27,330 please reach out to me, 576 00:25:27,330 --> 00:25:30,180 I would love to work with you to help get this mitigated. 577 00:25:31,380 --> 00:25:34,260 Let's talk about Medeco, right? 578 00:25:34,260 --> 00:25:36,930 So when we started this work, 579 00:25:36,930 --> 00:25:40,920 Medeco did not have any keys with moving elements. 580 00:25:40,920 --> 00:25:42,934 He had the classic, and the biaxial, 581 00:25:42,934 --> 00:25:46,143 and the M3 just added a slider there. 582 00:25:47,940 --> 00:25:49,770 But soon after we were starting this work, 583 00:25:49,770 --> 00:25:51,900 they announced the M4. 584 00:25:51,900 --> 00:25:55,140 And so the M4 has this sidebar 585 00:25:55,140 --> 00:25:58,503 with finger pins that get set as well as a moving element. 586 00:25:59,580 --> 00:26:02,010 So this is a pretty good opportunity. 587 00:26:02,010 --> 00:26:05,311 We now have a lock that is not yet out to the public, 588 00:26:05,311 --> 00:26:08,430 and we've got a potential vulnerability with it. 589 00:26:08,430 --> 00:26:10,410 And so we've got an opportunity 590 00:26:10,410 --> 00:26:12,120 to actually get this vulnerability fixed 591 00:26:12,120 --> 00:26:13,530 before it's released. 592 00:26:13,530 --> 00:26:14,673 That's pretty awesome. 593 00:26:16,500 --> 00:26:19,890 So how does the moving element work within Medeco? 594 00:26:19,890 --> 00:26:22,920 Well, we've got this moving element for the M4, 595 00:26:22,920 --> 00:26:24,660 is called a shuttle pin. 596 00:26:24,660 --> 00:26:28,050 And it interacts with one of these finger pins 597 00:26:28,050 --> 00:26:29,610 called the lift pin. 598 00:26:29,610 --> 00:26:32,640 And that lift pin just doesn't have a protrusion deep enough 599 00:26:32,640 --> 00:26:35,880 for anything else in this sidebar track to operate it. 600 00:26:35,880 --> 00:26:38,310 And so the shuttle pin has to be sticking out 601 00:26:38,310 --> 00:26:40,310 in order to interact with that lift pin. 602 00:26:42,000 --> 00:26:43,890 And so reached out to Medeco 603 00:26:43,890 --> 00:26:46,980 with now this potential vulnerability, of course, untested, 604 00:26:46,980 --> 00:26:49,890 'cause we didn't have an M4 to test with at that point, 605 00:26:49,890 --> 00:26:51,907 'cause it wasn't released yet and said, 606 00:26:51,907 --> 00:26:54,990 "Hey, let's see if we can talk about this." 607 00:26:54,990 --> 00:26:57,720 And so the vendor response was actually incredible. 608 00:26:57,720 --> 00:26:59,490 They got back the same date. 609 00:26:59,490 --> 00:27:02,580 And they emailed me, and then I got a phone call, 610 00:27:02,580 --> 00:27:06,750 and this is the day before new year's, right. 611 00:27:06,750 --> 00:27:09,030 And the guy that reached out to me, 612 00:27:09,030 --> 00:27:10,560 his name is on many of their patents. 613 00:27:10,560 --> 00:27:12,300 So they took it quite seriously 614 00:27:12,300 --> 00:27:14,130 and actually reached out promptly 615 00:27:14,130 --> 00:27:16,113 and were very responsive with that. 616 00:27:17,820 --> 00:27:19,320 So it was a good response. 617 00:27:19,320 --> 00:27:21,120 And so we had a number of calls with them. 618 00:27:21,120 --> 00:27:23,640 We discussed the technique and made sure they understood 619 00:27:23,640 --> 00:27:26,606 how it might potentially operate on the Medeco M4. 620 00:27:26,606 --> 00:27:29,280 And Medeco's team tried it without success. 621 00:27:29,280 --> 00:27:31,380 And so it's now our turn to try it. 622 00:27:31,380 --> 00:27:32,940 But before we were able to do that, 623 00:27:32,940 --> 00:27:35,310 and before they were able to send us any information 624 00:27:35,310 --> 00:27:39,903 or even a lock about the M4 so we could try it out, 625 00:27:41,130 --> 00:27:43,323 we had to deal with the NDA process. 626 00:27:44,520 --> 00:27:46,440 So I'm sure most people in this room 627 00:27:46,440 --> 00:27:47,763 are familiar with that. 628 00:27:48,630 --> 00:27:50,790 And that's something that 629 00:27:50,790 --> 00:27:53,130 when you are a hacker that discovers something 630 00:27:53,130 --> 00:27:55,530 and you're requested to do this, 631 00:27:55,530 --> 00:27:57,390 it's a kind of big decision. 632 00:27:57,390 --> 00:27:59,850 And so we took this to our legal team and they looked at it 633 00:27:59,850 --> 00:28:03,330 and said, "NDAs in general are fine. 634 00:28:03,330 --> 00:28:07,260 The problem is, when it's you, the little guy, 635 00:28:07,260 --> 00:28:10,350 in a contract with a giant conglomeration 636 00:28:10,350 --> 00:28:12,420 like ASSA ABLOY group, 637 00:28:12,420 --> 00:28:15,690 even if you are totally legally in the right, 638 00:28:15,690 --> 00:28:20,100 they can put hundreds of thousands of dollars after lawyers 639 00:28:20,100 --> 00:28:21,810 to just make the process drag out 640 00:28:21,810 --> 00:28:24,147 and bankrupt you on the legal process." 641 00:28:25,230 --> 00:28:27,150 So that was one of the warnings that we got. 642 00:28:27,150 --> 00:28:29,610 And based on... 643 00:28:29,610 --> 00:28:32,130 Honestly, it was pretty heavily based on 644 00:28:32,130 --> 00:28:34,620 how responsive and reasonable 645 00:28:34,620 --> 00:28:37,470 the gentleman from Medeco we've been talking to had been, 646 00:28:37,470 --> 00:28:40,110 his name is Clyde Roberson, by the way. 647 00:28:40,110 --> 00:28:42,150 He was responsive and reasonable. 648 00:28:42,150 --> 00:28:46,020 And we decided to take a leap of faith and do it, 649 00:28:46,020 --> 00:28:49,230 solely based on his demeanor and our read on the situation 650 00:28:49,230 --> 00:28:50,733 based on that, right? 651 00:28:52,110 --> 00:28:54,510 Do beware before you sign these. 652 00:28:54,510 --> 00:28:57,000 The other important thing to keep in mind is 653 00:28:57,000 --> 00:28:58,080 make sure you read it, 654 00:28:58,080 --> 00:28:59,460 and if you can, 655 00:28:59,460 --> 00:29:01,560 make sure you send it to someone with some legal expertise 656 00:29:01,560 --> 00:29:03,210 to get it reviewed. 657 00:29:03,210 --> 00:29:06,057 So we've worked with NDAs loads of times before, 658 00:29:06,057 --> 00:29:07,950 and we know what's standard. 659 00:29:07,950 --> 00:29:09,180 And we noticed one paragraph in there 660 00:29:09,180 --> 00:29:10,923 that wasn't completely standard. 661 00:29:12,060 --> 00:29:16,350 So Foreground Intellectual Properties within a contract, 662 00:29:16,350 --> 00:29:18,630 it is intellectual property 663 00:29:18,630 --> 00:29:21,330 that's generated as a part of that contract. 664 00:29:21,330 --> 00:29:24,840 And this was an NDA, it's supposed to be non-disclosure, 665 00:29:24,840 --> 00:29:26,700 but it also said, "Well, by the way, 666 00:29:26,700 --> 00:29:30,240 anything that you or us develop 667 00:29:30,240 --> 00:29:33,597 as part of this communication, we now own." 668 00:29:35,220 --> 00:29:37,680 So "we" being the ASSA ABLOY group. 669 00:29:37,680 --> 00:29:39,907 And so we looked at this and we're like, 670 00:29:39,907 --> 00:29:41,310 "Eh, we don't wanna do this. 671 00:29:41,310 --> 00:29:43,110 We want the NDA to be about non-disclosure 672 00:29:43,110 --> 00:29:45,237 and not intellectual property ownership." 673 00:29:46,710 --> 00:29:48,240 And so we got back to them about that and said, 674 00:29:48,240 --> 00:29:50,430 we got a concern with this paragraph. 675 00:29:50,430 --> 00:29:52,140 And the response was, "Okay, 676 00:29:52,140 --> 00:29:54,690 here's a new version with that paragraph deleted." 677 00:29:54,690 --> 00:29:57,690 And there's actually pretty standard with NDAs, right? 678 00:29:57,690 --> 00:29:59,280 If you don't like an NDA that someone sends you, 679 00:29:59,280 --> 00:30:00,990 you express your concerns, 680 00:30:00,990 --> 00:30:05,010 and companies are usually very happy to modify it for you. 681 00:30:05,010 --> 00:30:07,760 And so that happened here and it worked out quite well. 682 00:30:09,270 --> 00:30:10,650 So we're all signed. We're good to go. 683 00:30:10,650 --> 00:30:13,380 We're NDA. And we can now actually test this thing. 684 00:30:13,380 --> 00:30:17,910 And so Clyde got us sent a couple of the M4 locks, right? 685 00:30:17,910 --> 00:30:19,500 Some of the early production versions. 686 00:30:19,500 --> 00:30:21,780 And we were able to actually start testing this 687 00:30:21,780 --> 00:30:22,980 and see if we could find a way 688 00:30:22,980 --> 00:30:25,893 to make this new method work with the M4. 689 00:30:26,910 --> 00:30:31,910 So attempt number one, we took a Schlage SC9 blank, 690 00:30:31,980 --> 00:30:34,440 and when you file off enough metal on it, 691 00:30:34,440 --> 00:30:36,693 it will fit into that M4 keyway. 692 00:30:37,770 --> 00:30:40,590 And we also press fit in a piece of metal 693 00:30:40,590 --> 00:30:43,200 to have it stick out on the other side. 694 00:30:43,200 --> 00:30:44,100 So it's sticking out here 695 00:30:44,100 --> 00:30:46,260 and that simulating this static component 696 00:30:46,260 --> 00:30:48,560 of where that shuttle pin would be moving out. 697 00:30:50,250 --> 00:30:54,000 The problem with this is these sidebar 698 00:30:54,000 --> 00:30:56,585 and these finger pins here, 699 00:30:56,585 --> 00:31:00,470 which is that the entire key has to move. 700 00:31:00,470 --> 00:31:02,940 So the entire key has to move to insert it 701 00:31:02,940 --> 00:31:07,900 and then to actually actuate that interactive component, 702 00:31:07,900 --> 00:31:10,400 oh, not "interactive," that's the Mul-T-Lock term, 703 00:31:11,460 --> 00:31:15,840 that moving component, which Medeco calls the lift pin. 704 00:31:15,840 --> 00:31:19,560 And we also need to have these standard finger pins 705 00:31:19,560 --> 00:31:22,710 riding along this sidebar here. 706 00:31:22,710 --> 00:31:23,640 And what happens is, 707 00:31:23,640 --> 00:31:25,470 when you move it to the side to insert it, 708 00:31:25,470 --> 00:31:27,682 the finger pins are all now down here, 709 00:31:27,682 --> 00:31:28,920 and they're spring loaded. 710 00:31:28,920 --> 00:31:31,350 And so those finger pins act like a ratchet mechanism 711 00:31:31,350 --> 00:31:34,410 and it prevents you from actually moving the key over 712 00:31:34,410 --> 00:31:35,360 and actuating that. 713 00:31:37,680 --> 00:31:39,690 Okay, so that doesn't work. 714 00:31:39,690 --> 00:31:40,530 So we need a way 715 00:31:40,530 --> 00:31:43,810 to get those finger pins lifted at the correct height 716 00:31:44,790 --> 00:31:46,920 and give them a little ramp to do that. 717 00:31:46,920 --> 00:31:50,820 And our solution was to create individual ramps. 718 00:31:50,820 --> 00:31:53,280 So we added these channels here. 719 00:31:53,280 --> 00:31:55,530 And so now we have a ramp for the first, 720 00:31:55,530 --> 00:31:58,293 the second and the third finger pin individually. 721 00:31:59,611 --> 00:32:01,890 And so now we can get all of those lifted up 722 00:32:01,890 --> 00:32:02,990 to the correct height. 723 00:32:10,151 --> 00:32:14,670 Oh, there we are, that's a bit of a close up there. 724 00:32:14,670 --> 00:32:16,720 That's what we can see this in operation. 725 00:32:17,700 --> 00:32:18,990 And it works fairly nicely. 726 00:32:18,990 --> 00:32:21,060 So it's interacting with those finger pins 727 00:32:21,060 --> 00:32:22,500 and pushing them up to the correct height. 728 00:32:22,500 --> 00:32:24,600 Meanwhile, the protrusion we press fit in 729 00:32:24,600 --> 00:32:27,810 is pushing the lift pin up to the correct height. 730 00:32:27,810 --> 00:32:28,863 The problem is, 731 00:32:29,730 --> 00:32:34,380 the old problem with keys with moving elements, 732 00:32:34,380 --> 00:32:38,550 it will not insert or remove from the lock, right? 733 00:32:38,550 --> 00:32:41,220 So this protruding element, 734 00:32:41,220 --> 00:32:43,470 just is binding with these finger pins, right? 735 00:32:43,470 --> 00:32:45,780 So it fits in the key just fine, 736 00:32:45,780 --> 00:32:48,900 but now these finger pins are in the way. 737 00:32:48,900 --> 00:32:52,050 And we could make it thinner on the backside 738 00:32:52,050 --> 00:32:54,060 and mitigate it that way, 739 00:32:54,060 --> 00:32:56,520 but there's just no more metal to remove. 740 00:32:56,520 --> 00:32:58,050 This thing was paper-thin already. 741 00:32:58,050 --> 00:33:02,130 So because of the particular shape of the M4 keyway, 742 00:33:02,130 --> 00:33:04,080 we couldn't make that happen 743 00:33:04,080 --> 00:33:06,480 if the keyway were ever widened. 744 00:33:06,480 --> 00:33:09,000 And so this is a bit of wisdom with the M3 745 00:33:09,000 --> 00:33:11,820 that did have the keyway widened from biaxial. 746 00:33:11,820 --> 00:33:13,710 If the M4 has a wider keyway, 747 00:33:13,710 --> 00:33:15,600 this attack will start to work. 748 00:33:15,600 --> 00:33:17,970 So it's now something that they can be aware of, 749 00:33:17,970 --> 00:33:18,803 which is good. 750 00:33:20,190 --> 00:33:24,480 The other element is that chirality matters with this. 751 00:33:24,480 --> 00:33:28,410 And so for anyone who's ever tried to pick a Medeco before, 752 00:33:28,410 --> 00:33:30,930 you know that if you tension it one direction, 753 00:33:30,930 --> 00:33:32,460 the top pins bind first, 754 00:33:32,460 --> 00:33:33,900 if you tension it in the other direction, 755 00:33:33,900 --> 00:33:36,060 the sidebar binds first. 756 00:33:36,060 --> 00:33:40,050 And what was happening with using this technique 757 00:33:40,050 --> 00:33:43,200 is that when we inserted this surrogate key, 758 00:33:43,200 --> 00:33:45,240 the direction we had to twist it, 759 00:33:45,240 --> 00:33:49,020 to move it in and cause this lift pin to actuate, 760 00:33:49,020 --> 00:33:51,510 is actually the direction that causes the sidebar 761 00:33:51,510 --> 00:33:55,530 to bind hard against these finger pins. 762 00:33:55,530 --> 00:33:59,550 So we're now trying to turn it in a way 763 00:33:59,550 --> 00:34:01,260 that will set that finger pin 764 00:34:01,260 --> 00:34:04,020 while we're binding a sidebar hard against it. 765 00:34:04,020 --> 00:34:06,390 It made it not really a viable attack 766 00:34:06,390 --> 00:34:07,953 for that reason as well. 767 00:34:09,270 --> 00:34:13,950 So let's look at what we pivoted to when those didn't work. 768 00:34:13,950 --> 00:34:16,320 We started to think out of the box a little bit. 769 00:34:16,320 --> 00:34:19,560 And looking at the actual design of the lock, 770 00:34:19,560 --> 00:34:21,150 this was a lift pin, 771 00:34:21,150 --> 00:34:25,953 and there's this element here that can be pushed down, 772 00:34:26,850 --> 00:34:31,260 and it's within the plane of where that key would insert 773 00:34:31,260 --> 00:34:33,483 without a moving element sticking out. 774 00:34:34,560 --> 00:34:38,010 It has to get pushed down deeper than the plane 775 00:34:38,010 --> 00:34:39,900 of the cores milling there. 776 00:34:39,900 --> 00:34:43,443 So we need an overhang on our key to cause that to happen. 777 00:34:44,370 --> 00:34:47,220 And so to make one, we took pieces of metal and bent it, 778 00:34:47,220 --> 00:34:48,630 so we have this little J shape 779 00:34:48,630 --> 00:34:50,880 and that allows us to create an overhang, 780 00:34:50,880 --> 00:34:54,477 and then we added this little peak to it. 781 00:34:54,477 --> 00:34:55,860 And so that peak, 782 00:34:55,860 --> 00:34:59,340 the finger pins are able to ride over that peak just fine, 783 00:34:59,340 --> 00:35:04,020 but it can push in and hit that little part of the lock 784 00:35:04,020 --> 00:35:05,160 and push it down 785 00:35:05,160 --> 00:35:07,343 to get the finger pin to the correct height. 786 00:35:11,040 --> 00:35:15,330 And it works badly. It honestly doesn't work very well. 787 00:35:15,330 --> 00:35:18,390 It's like you gotta try it a bunch of times. 788 00:35:18,390 --> 00:35:22,440 And two times out of 10, you're able to get it to work. 789 00:35:22,440 --> 00:35:24,780 And it's gotta get perfectly positioned, 790 00:35:24,780 --> 00:35:29,780 but it does in theory allow a blank to be mass produced, 791 00:35:30,690 --> 00:35:33,210 that might not work great, but does work. 792 00:35:33,210 --> 00:35:35,790 So it's something that's potentially worth mitigating. 793 00:35:35,790 --> 00:35:38,310 And this last element, 794 00:35:38,310 --> 00:35:40,590 we just sort of had a stroke 795 00:35:40,590 --> 00:35:43,500 of the idea there fairly recently. 796 00:35:43,500 --> 00:35:46,020 So this was only presented to Medeco fairly recently. 797 00:35:46,020 --> 00:35:49,410 And so they're still in the process of deciding 798 00:35:49,410 --> 00:35:52,050 if and whether they're going to mitigate it. 799 00:35:52,050 --> 00:35:53,340 The mitigation is fairly straightforward, 800 00:35:53,340 --> 00:35:54,750 where do you just deepen this, 801 00:35:54,750 --> 00:35:59,130 or possibly add sort of a bowl concave cut to it 802 00:35:59,130 --> 00:36:00,690 to prevent that from working. 803 00:36:00,690 --> 00:36:02,340 And currently their response 804 00:36:02,340 --> 00:36:04,140 is they're leaning towards doing the mitigation, 805 00:36:04,140 --> 00:36:06,300 but it requires tooling changes 806 00:36:06,300 --> 00:36:08,850 and things are further along the production schedule now. 807 00:36:08,850 --> 00:36:12,003 So it is something that takes a bit of time to figure out. 808 00:36:13,110 --> 00:36:15,393 So this is a good outcome here. 809 00:36:16,560 --> 00:36:19,440 So we've got not a great attack, 810 00:36:19,440 --> 00:36:20,273 but it's something 811 00:36:20,273 --> 00:36:23,133 that they're still likely going to mitigate there. 812 00:36:24,690 --> 00:36:25,860 For the actual fabrication, 813 00:36:25,860 --> 00:36:27,690 and I've talked a little bit about how 814 00:36:27,690 --> 00:36:29,210 you don't wanna have... 815 00:36:30,780 --> 00:36:32,040 From the lock maker's perspective, 816 00:36:32,040 --> 00:36:34,920 they really don't want something that anyone can make. 817 00:36:34,920 --> 00:36:39,920 So those ones that you could buy on AliExpress, 818 00:36:40,650 --> 00:36:44,640 they don't want that happening for their own keys. 819 00:36:44,640 --> 00:36:46,380 And so to make it yourself, 820 00:36:46,380 --> 00:36:49,050 if you can't have one that's anyone can make, 821 00:36:49,050 --> 00:36:51,420 3D printing is one option. 822 00:36:51,420 --> 00:36:53,070 These are the two main types of printers. 823 00:36:53,070 --> 00:36:56,220 Filament printers are just not detailed enough 824 00:36:56,220 --> 00:36:58,380 for printing most keys. 825 00:36:58,380 --> 00:36:59,730 When we do it, we'll print the blank 826 00:36:59,730 --> 00:37:02,100 and then add the cuts using traditional methods. 827 00:37:02,100 --> 00:37:04,230 But resin 3D printing is absolutely the way to go 828 00:37:04,230 --> 00:37:05,063 for making keys. 829 00:37:05,063 --> 00:37:07,053 It gives you 10 times better resolution. 830 00:37:09,330 --> 00:37:11,680 For making it out of metal, 831 00:37:11,680 --> 00:37:14,100 so in this case, adding that J shape, 832 00:37:14,100 --> 00:37:16,650 we were able to do with just a little clamp, 833 00:37:16,650 --> 00:37:18,360 except we had to give the clamp 834 00:37:18,360 --> 00:37:20,640 some help with the hydraulic press. 835 00:37:20,640 --> 00:37:24,390 So these fabrication techniques 836 00:37:24,390 --> 00:37:25,470 are not necessarily something 837 00:37:25,470 --> 00:37:27,930 that everyone has the ability to do 838 00:37:27,930 --> 00:37:29,070 when adding the cuts to it 839 00:37:29,070 --> 00:37:30,750 because these blanks are imperfect, 840 00:37:30,750 --> 00:37:32,367 they come out of the clamp and bend nastly, 841 00:37:32,367 --> 00:37:33,870 and you also would need a machine 842 00:37:33,870 --> 00:37:35,610 that's capable of adding these top cuts, 843 00:37:35,610 --> 00:37:36,903 which not everyone has. 844 00:37:38,430 --> 00:37:40,530 Have to jump through all sorts of hoops doing it. 845 00:37:40,530 --> 00:37:43,110 So when adding the cuts to this particular version, 846 00:37:43,110 --> 00:37:46,530 we had to put three keys together, 847 00:37:46,530 --> 00:37:48,390 one to prevent this clamp 848 00:37:48,390 --> 00:37:51,030 from pushing in the press fit element and misplacing it, 849 00:37:51,030 --> 00:37:53,430 and another to give support on the bottom slide, 850 00:37:53,430 --> 00:37:55,780 'cause this blank was paper-thin at this point. 851 00:37:57,480 --> 00:37:59,070 So it's not a trivial process. 852 00:37:59,070 --> 00:38:01,080 And then we had to mill out a little bit at the end 853 00:38:01,080 --> 00:38:03,150 to allow it to insert all the way 854 00:38:03,150 --> 00:38:04,740 and have the tip, 855 00:38:04,740 --> 00:38:06,720 tip wording, not be a problem for it. 856 00:38:06,720 --> 00:38:08,700 So in general, 857 00:38:08,700 --> 00:38:10,860 these fabrications are something that you can do 858 00:38:10,860 --> 00:38:13,110 if you're a major lock and keen like us 859 00:38:13,110 --> 00:38:14,520 and have all this equipment. 860 00:38:14,520 --> 00:38:15,810 A lot of people don't, right? 861 00:38:15,810 --> 00:38:19,110 So it's a sort of thing that lock makers are considering 862 00:38:19,110 --> 00:38:21,060 when they're deciding whether to mitigate is, 863 00:38:21,060 --> 00:38:22,560 what is the effort required 864 00:38:22,560 --> 00:38:25,203 to actually carry out this attack? 865 00:38:26,190 --> 00:38:29,160 And patents are effective-ish against mass production, 866 00:38:29,160 --> 00:38:31,320 against someone in China going 867 00:38:31,320 --> 00:38:34,050 and making a version that does work, right? 868 00:38:34,050 --> 00:38:37,200 In China, you can't really control that with manufacturer, 869 00:38:37,200 --> 00:38:39,300 but you can at least control it on the import side. 870 00:38:39,300 --> 00:38:42,250 And you can certainly stop someone doing that domestically. 871 00:38:43,650 --> 00:38:47,557 So one of their key concerns with key control here was that, 872 00:38:47,557 --> 00:38:50,400 any attack we were able to successfully do 873 00:38:50,400 --> 00:38:53,550 did not allow someone to make this key 874 00:38:53,550 --> 00:38:56,823 in a way that bypassed the patent. 875 00:38:56,823 --> 00:38:58,773 So a valid consideration there. 876 00:39:01,110 --> 00:39:02,610 We'll chat a little bit briefly 877 00:39:02,610 --> 00:39:04,440 about some alternative attacks, 878 00:39:04,440 --> 00:39:06,270 so things that people should consider 879 00:39:06,270 --> 00:39:08,790 before they're worried about this, 880 00:39:08,790 --> 00:39:11,190 and then some defenses available to you as well. 881 00:39:12,090 --> 00:39:14,070 All right, so this is one of the gates 882 00:39:14,070 --> 00:39:16,680 of the New York City subway station. 883 00:39:16,680 --> 00:39:18,660 And they've got two locks here, you'll notice. 884 00:39:18,660 --> 00:39:22,740 One is a high security Medeco with great key control on it. 885 00:39:22,740 --> 00:39:25,710 One is a Yale, and so Yale locks, 886 00:39:25,710 --> 00:39:27,600 the keys are not at all controlled. 887 00:39:27,600 --> 00:39:29,280 And it's also this, 888 00:39:29,280 --> 00:39:32,073 which most people in this room will have heard of. 889 00:39:32,073 --> 00:39:37,073 It's the same thing for everything in New York City, 890 00:39:37,290 --> 00:39:38,310 and people are getting it. 891 00:39:38,310 --> 00:39:41,760 So it's something that you gotta make sure 892 00:39:41,760 --> 00:39:43,290 that you're not gonna be doing something like that 893 00:39:43,290 --> 00:39:45,120 if you're worrying too hard about the key control 894 00:39:45,120 --> 00:39:46,593 for one of your two locks. 895 00:39:47,550 --> 00:39:50,760 You can also attack the code card. 896 00:39:50,760 --> 00:39:51,821 And so in this case, 897 00:39:51,821 --> 00:39:55,050 what we've done is taken a Mul-T-Lock Interactive code card, 898 00:39:55,050 --> 00:39:57,480 and this just got the code stamped onto it. 899 00:39:57,480 --> 00:40:00,510 And so we just re-stamped it. 900 00:40:00,510 --> 00:40:03,240 So on the original, this 264S is the keyway 901 00:40:03,240 --> 00:40:05,220 and we've changed it to 200S. 902 00:40:05,220 --> 00:40:08,610 And so in this case, you can see that little artifact there. 903 00:40:08,610 --> 00:40:10,140 We didn't do it great, but up here, 904 00:40:10,140 --> 00:40:12,120 I mean, you take that to a locksmith, 905 00:40:12,120 --> 00:40:13,890 he's not gonna know this it's been modified. 906 00:40:13,890 --> 00:40:15,810 And we can change the full bidding on this 907 00:40:15,810 --> 00:40:18,870 and get a code card that authorizes a locksmith 908 00:40:18,870 --> 00:40:21,813 to create an entirely new key for us. 909 00:40:23,370 --> 00:40:26,523 And of course, the blanks, once they're at a patent, 910 00:40:27,630 --> 00:40:31,170 they're not necessarily as easy to control the sale of. 911 00:40:31,170 --> 00:40:33,510 So you can buy these blanks on eBay. 912 00:40:33,510 --> 00:40:35,850 And so these are two of the ones we bought. 913 00:40:35,850 --> 00:40:37,080 And there's actually a bit of a story 914 00:40:37,080 --> 00:40:38,490 with this one up top here, 915 00:40:38,490 --> 00:40:42,240 which is that, when we received this, 916 00:40:42,240 --> 00:40:44,670 it had coining on one side for a locksmith 917 00:40:44,670 --> 00:40:47,580 that was actually local to us, a locksmith that we knew, 918 00:40:47,580 --> 00:40:50,490 and they were in business still cutting Mul-T-Locks. 919 00:40:50,490 --> 00:40:52,537 And so I reached out to them and I said like, 920 00:40:52,537 --> 00:40:56,820 "Guys, I just bought keys on eBay coined with your business. 921 00:40:56,820 --> 00:40:57,780 Is this right? 922 00:40:57,780 --> 00:41:00,420 There's a bunch of things about this that don't add up." 923 00:41:00,420 --> 00:41:02,857 They got back to me that very same day and said, 924 00:41:02,857 --> 00:41:03,970 "Yeah, this is not right. 925 00:41:03,970 --> 00:41:05,757 There is clearly a problem here." 926 00:41:06,630 --> 00:41:10,020 And so I've blacked this out to not docs them, 927 00:41:10,020 --> 00:41:12,270 'cause they're an honest business 928 00:41:12,270 --> 00:41:15,750 trying to do standard locksmithing 929 00:41:15,750 --> 00:41:17,790 and they don't wanna deal with all of this crap 930 00:41:17,790 --> 00:41:20,034 that us in the hacker community get up to. 931 00:41:20,034 --> 00:41:22,350 But yeah, 932 00:41:22,350 --> 00:41:24,870 so we reached out to them and they did some investigation. 933 00:41:24,870 --> 00:41:27,150 And it turned out that three years before 934 00:41:27,150 --> 00:41:29,296 they had a package arrived by courier 935 00:41:29,296 --> 00:41:31,164 with more blanks in it. 936 00:41:31,164 --> 00:41:33,870 And the package was manifested for 25 pounds, 937 00:41:33,870 --> 00:41:37,080 and the delivery driver said, "Something's wrong here." 938 00:41:37,080 --> 00:41:41,280 And it turns out at some point they don't know when or how 939 00:41:41,280 --> 00:41:44,100 those keys got stolen outta the box in transit. 940 00:41:44,100 --> 00:41:46,550 So talk about a supply chain vulnerability there. 941 00:41:48,180 --> 00:41:50,220 So they reported it to Mul-T-Lock. 942 00:41:50,220 --> 00:41:51,270 And then when I reached out, 943 00:41:51,270 --> 00:41:55,140 they were able to recover nine out of 10 of the stolen boxes 944 00:41:55,140 --> 00:41:56,910 from the seller on eBay, 945 00:41:56,910 --> 00:42:00,003 that was just selling all 10 of the stolen boxes. 946 00:42:00,900 --> 00:42:03,870 And so when you happen upon stolen property, 947 00:42:03,870 --> 00:42:06,243 there's no compensation owed to you for that. 948 00:42:07,080 --> 00:42:10,857 That belongs to them, but they insisted on compensating us, 949 00:42:10,857 --> 00:42:12,510 and so I eventually gave into that. 950 00:42:12,510 --> 00:42:15,630 But that's something to be weary of 951 00:42:15,630 --> 00:42:17,400 when buying stuff on eBay 952 00:42:17,400 --> 00:42:21,423 that might potentially come from less than upright sources. 953 00:42:23,460 --> 00:42:25,890 So what can we do to defend against this? 954 00:42:25,890 --> 00:42:27,090 Well, the first one, 955 00:42:27,090 --> 00:42:29,240 and one of the first ones we thought of is, 956 00:42:30,120 --> 00:42:31,830 take the moving element, 957 00:42:31,830 --> 00:42:33,090 put another one beside it, 958 00:42:33,090 --> 00:42:35,760 and have it go the opposite direction. 959 00:42:35,760 --> 00:42:38,460 And now the key is actually widening. 960 00:42:38,460 --> 00:42:40,127 And so that prevents us from moving the entire key 961 00:42:40,127 --> 00:42:41,673 'cause it's getting wider. 962 00:42:42,750 --> 00:42:45,660 So that's one option available to us. 963 00:42:45,660 --> 00:42:49,410 Mul-T-Lock actually has already two moving elements. 964 00:42:49,410 --> 00:42:50,580 This isn't for that purpose. 965 00:42:50,580 --> 00:42:52,920 It's just so that you can insert the key in either direction 966 00:42:52,920 --> 00:42:54,240 and it's gonna work. 967 00:42:54,240 --> 00:42:58,800 But that's something that potentially could be modified 968 00:42:58,800 --> 00:43:00,870 to apply this attack for. 969 00:43:00,870 --> 00:43:01,890 There's a reason it can't, 970 00:43:01,890 --> 00:43:04,800 there's a trivial workaround if they decide to use this. 971 00:43:04,800 --> 00:43:07,680 And I've got a nice, shiny new set of Medeco bump queues 972 00:43:07,680 --> 00:43:09,420 for the first person after this talk 973 00:43:09,420 --> 00:43:12,270 to think of what that trivial workaround is. 974 00:43:12,270 --> 00:43:14,340 And if you're watching this talk on YouTube afterwards, 975 00:43:14,340 --> 00:43:17,333 put it in the comments, and I might send something your way. 976 00:43:18,720 --> 00:43:19,920 So that's one option. 977 00:43:19,920 --> 00:43:21,810 Another is these sidebars, right? 978 00:43:21,810 --> 00:43:22,643 So this sidebar, 979 00:43:22,643 --> 00:43:26,340 this secondary locking element itself prevents 980 00:43:26,340 --> 00:43:27,570 motion of the entire key 981 00:43:27,570 --> 00:43:29,508 because interferes with the operation 982 00:43:29,508 --> 00:43:31,410 of the secondary element. 983 00:43:31,410 --> 00:43:33,360 So the Medeco M4, as it turns out, 984 00:43:33,360 --> 00:43:35,670 is a great example of a good defense 985 00:43:35,670 --> 00:43:37,350 against this particular technique. 986 00:43:37,350 --> 00:43:39,240 The one that actually was valid 987 00:43:39,240 --> 00:43:42,270 used a completely separate and happenstance 988 00:43:42,270 --> 00:43:43,833 of vulnerability in the lock. 989 00:43:45,210 --> 00:43:48,990 So the Mul-T-Lock MT5 would have that defense available 990 00:43:48,990 --> 00:43:52,380 to them with the finger pin line on the bottom, 991 00:43:52,380 --> 00:43:55,170 except that those finger pins are not spring loaded, 992 00:43:55,170 --> 00:43:57,600 which means that I can insert the key in one position 993 00:43:57,600 --> 00:43:59,640 and set all the finger pins at the bottom, 994 00:43:59,640 --> 00:44:02,940 and then move it up, and set the top pins on top, 995 00:44:02,940 --> 00:44:05,820 and there's no spring to spring the finger pins back 996 00:44:05,820 --> 00:44:07,440 and frustrate me there. 997 00:44:07,440 --> 00:44:09,210 So the mitigation here is pretty simple. 998 00:44:09,210 --> 00:44:12,660 Just add a spring behind, even just one of these, 999 00:44:12,660 --> 00:44:15,240 and that's gonna prevent this attack from working. 1000 00:44:15,240 --> 00:44:18,210 So a mitigation that's available there to you. 1001 00:44:18,210 --> 00:44:21,180 And if you happen to have MT5s, 1002 00:44:21,180 --> 00:44:22,860 you can even do this yourself. 1003 00:44:22,860 --> 00:44:26,730 Get a little tiny spring and stick that in behind that pin. 1004 00:44:26,730 --> 00:44:29,513 You'll have to drill it out a bit for stability as well. 1005 00:44:30,499 --> 00:44:32,950 So there are options available to you. 1006 00:44:32,950 --> 00:44:36,990 And the last thing is, to defend against this, 1007 00:44:36,990 --> 00:44:39,870 you don't want to be laser focused on the wrong thing. 1008 00:44:39,870 --> 00:44:42,390 You need to make sure that there's no other glaring problems 1009 00:44:42,390 --> 00:44:45,000 in your facility before you're worried about something 1010 00:44:45,000 --> 00:44:46,950 as niche as this, right? 1011 00:44:46,950 --> 00:44:48,960 So here is, I'm sticking a key in, 1012 00:44:48,960 --> 00:44:51,450 key turns, I open the door, right? 1013 00:44:51,450 --> 00:44:53,193 Well, that's the wrong key. 1014 00:44:54,600 --> 00:44:56,640 That key is not turning in the lock, 1015 00:44:56,640 --> 00:44:59,698 the entire lock is turning in the door, 1016 00:44:59,698 --> 00:45:02,490 and that's because there's a retaining pin 1017 00:45:02,490 --> 00:45:04,560 that's supposed to hold that lock in from doing that 1018 00:45:04,560 --> 00:45:06,660 that has not been properly installed there. 1019 00:45:06,660 --> 00:45:11,070 We see crap like that all the time in facilities. 1020 00:45:11,070 --> 00:45:12,630 And so you really wanna make sure 1021 00:45:12,630 --> 00:45:14,275 if you are running a facility 1022 00:45:14,275 --> 00:45:18,300 that you get all of that looked at and fixed 1023 00:45:18,300 --> 00:45:21,540 before you're worried about extremely niche attacks 1024 00:45:21,540 --> 00:45:23,390 like what I've just talked about now. 1025 00:45:24,960 --> 00:45:28,170 So with that, I'd like to thank everyone for listening. 1026 00:45:28,170 --> 00:45:29,220 If you have any questions, 1027 00:45:29,220 --> 00:45:32,160 I'm gonna be running the Physical Security Village in 202 1028 00:45:32,160 --> 00:45:32,993 right after this, 1029 00:45:32,993 --> 00:45:34,530 so please come find me there. 1030 00:45:34,530 --> 00:45:36,630 And I'm happy to take him there. 1031 00:45:36,630 --> 00:45:37,830 Thank you very much, folks. 1032 00:45:37,830 --> 00:45:40,830 (audience applauds)