1 00:00:00,042 --> 00:00:01,959 BRANDON WILEY: Hey, everybody. 2 00:00:01,959 --> 00:00:04,584 (applause) BRANDON WILEY: Thanks for coming out. 3 00:00:06,250 --> 00:00:07,751 Okay. 4 00:00:07,751 --> 00:00:11,918 Well, I got a lot of slides, so I'm going to try to just burn through them. 5 00:00:11,918 --> 00:00:13,167 We will just power through. 6 00:00:13,167 --> 00:00:15,584 Try to pay attention to the first five minutes 7 00:00:15,584 --> 00:00:18,250 of slides so that, you know, you'll be there 8 00:00:18,250 --> 00:00:22,042 with me when we're hitting through this stuff. 9 00:00:22,042 --> 00:00:24,125 Okay, I'm Brandon Wiley. 10 00:00:24,125 --> 00:00:25,999 I have done some stuff. 11 00:00:26,292 --> 00:00:29,334 I wrote a thing called Freenet in 2000. 12 00:00:29,999 --> 00:00:32,542 DEF CON 2000 oh, thank you. 13 00:00:32,542 --> 00:00:35,042 Raise your hand if you have ever run a Freenet node. 14 00:00:35,042 --> 00:00:36,459 Yeah, my people! 15 00:00:36,459 --> 00:00:37,459 Thank you. 16 00:00:37,542 --> 00:00:39,999 National heros, every one of you. 17 00:00:40,042 --> 00:00:44,709 Yeah, my first talk ever, I was 18 years old. 18 00:00:44,709 --> 00:00:46,918 It was at DEF CON in 2000. 19 00:00:46,918 --> 00:00:48,125 I presented about Freenet. 20 00:00:48,125 --> 00:00:51,459 The entire description of my talk was this is about Freenet. 21 00:00:51,459 --> 00:00:52,999 I drew the slides with Crayons. 22 00:00:53,250 --> 00:00:55,999 And it was a packed room of people that came to go see 23 00:00:55,999 --> 00:00:58,501 a talk based on that information. 24 00:01:00,417 --> 00:01:03,626 And at Blackhat 2000 I presented Curious Yellow which was my 25 00:01:03,626 --> 00:01:07,792 superworm design that was designed to destroy the Internet. 26 00:01:07,999 --> 00:01:10,375 Purely theoretical as you can tell because the Internet 27 00:01:10,375 --> 00:01:11,999 is still here. 28 00:01:12,334 --> 00:01:16,667 You can hear that Charles Stross has a book call "Glass House" which 29 00:01:16,667 --> 00:01:20,918 Curious Yellow is the thing that destroys humanity. 30 00:01:20,918 --> 00:01:23,999 That was a great moment when he put that in there. 31 00:01:24,375 --> 00:01:25,999 I used to work at BitTorrent. 32 00:01:27,292 --> 00:01:30,834 I was there when BitTorrent bought uTorrent. 33 00:01:30,834 --> 00:01:32,709 So I apologize for that. 34 00:01:33,626 --> 00:01:37,459 But I did a lot of stuff at BitTorrent. 35 00:01:37,459 --> 00:01:39,459 And then since then when I was at BitTorrent 36 00:01:39,459 --> 00:01:42,999 is when I first saw deep packet inspection being used 37 00:01:42,999 --> 00:01:45,334 to block BitTorrent. 38 00:01:45,334 --> 00:01:46,709 In fact, when BitTorrent was when we noticed 39 00:01:46,709 --> 00:01:50,709 that Comcast was blocking BitTorrent, before any of the press heard about it, 40 00:01:50,709 --> 00:01:55,083 I was the guy that they sent to Comcast to try to reason with them. 41 00:01:55,542 --> 00:01:57,584 Well, you know, how that worked out. 42 00:01:58,709 --> 00:02:02,209 So I started doing I have been working on kind of anonymity stuff 43 00:02:02,209 --> 00:02:04,999 and mainly kind in the censorship resistance side 44 00:02:04,999 --> 00:02:07,375 of things for a long time. 45 00:02:07,375 --> 00:02:08,167 So I know the folks from Tor from back 46 00:02:08,167 --> 00:02:10,999 in the day and I have been helping them out more recently 47 00:02:10,999 --> 00:02:14,417 with their new obfuscated protocols because Tor is being blocked in a lot 48 00:02:14,417 --> 00:02:18,083 of places so they need a new protocol that's not blocked. 49 00:02:18,209 --> 00:02:22,999 And then, finally, I have I wrote part of a book called "Peer to Peer" 50 00:02:22,999 --> 00:02:25,999 for O'Reilly a long time ago. 51 00:02:26,083 --> 00:02:28,999 So, anyway, those are my credentials. 52 00:02:28,999 --> 00:02:30,083 Who cares, whatever. 53 00:02:30,083 --> 00:02:32,709 I'm just putting this up so that I can establish my credibility 54 00:02:32,709 --> 00:02:35,459 with you guys so when I start showing you pictures of cats, 55 00:02:35,459 --> 00:02:38,167 you don't just be like, what is this? 56 00:02:38,167 --> 00:02:41,792 I'm out of here because there is a lot of pictures of cats in my talk. 57 00:02:41,792 --> 00:02:44,999 Thank you much (applause). 58 00:02:45,918 --> 00:02:47,542 Cool, cool. 59 00:02:47,542 --> 00:02:48,542 All right. 60 00:02:48,542 --> 00:02:49,542 So let's get into it. 61 00:02:49,918 --> 00:02:53,334 So my slides are taken from two different sources. 62 00:02:53,334 --> 00:02:56,125 One is my children's book on Internet free done called "Free As 63 00:02:56,125 --> 00:02:57,999 in Kitties." 64 00:02:58,542 --> 00:03:00,999 The other slides are from my Ph.D. 65 00:03:00,999 --> 00:03:03,375 dissertation so I meshed them together. 66 00:03:03,375 --> 00:03:05,167 We will see how it goes, right? 67 00:03:05,167 --> 00:03:08,167 So we'll start out with the Internet, what is it? 68 00:03:08,167 --> 00:03:09,918 Let's define some terms. 69 00:03:09,918 --> 00:03:11,876 Hopefully you guys have checked it out. 70 00:03:11,876 --> 00:03:12,999 If not, it's pretty cool. 71 00:03:12,999 --> 00:03:14,083 Should get on there. 72 00:03:14,083 --> 00:03:16,501 There is a lot of stuff on a lot of cats and stuff. 73 00:03:16,626 --> 00:03:20,083 And then how do we Internet with this Internet once we know what 74 00:03:20,083 --> 00:03:21,999 an Internet is? 75 00:03:22,167 --> 00:03:24,999 And then we get straight up into binary classifiers using 76 00:03:24,999 --> 00:03:27,083 (inaudible) inference. 77 00:03:30,999 --> 00:03:34,334 And that's fooling classifiers with polymorphic protocols 78 00:03:34,334 --> 00:03:37,250 and then Dust which is what the talk is about which 79 00:03:37,250 --> 00:03:42,083 is the polymorphic protocol engine and then I have info graphics. 80 00:03:42,709 --> 00:03:46,999 If we have time I forgot to start my timer. 81 00:03:46,999 --> 00:03:47,999 There we go. 82 00:03:48,083 --> 00:03:49,999 Then we will talk a little bit I want to talk a little bit 83 00:03:49,999 --> 00:03:52,834 about realistic fair models versus the fair models that everybody 84 00:03:52,834 --> 00:03:54,083 else uses. 85 00:03:55,292 --> 00:03:57,250 So, yeah. 86 00:03:57,250 --> 00:03:58,751 First of all, the Internet. 87 00:03:58,918 --> 00:04:01,792 It is the greatest technological marvel of our time and 88 00:04:01,792 --> 00:04:04,209 the pinnacle of civilization. 89 00:04:04,209 --> 00:04:10,083 It is an unprecedented way to deliver pictures of cats. 90 00:04:10,751 --> 00:04:11,999 (laughter). 91 00:04:12,334 --> 00:04:16,209 So I know what you're thinking. 92 00:04:16,209 --> 00:04:17,417 You can't take a real cat and transmit it 93 00:04:17,417 --> 00:04:19,334 over the Internet. 94 00:04:19,667 --> 00:04:21,083 Believe me, I've tried. 95 00:04:21,083 --> 00:04:22,083 It doesn't work. 96 00:04:22,083 --> 00:04:23,626 That's and that log cat. 97 00:04:23,999 --> 00:04:26,999 First step is we have to turn it into pixels with what 98 00:04:26,999 --> 00:04:29,584 they call pixitization. 99 00:04:29,584 --> 00:04:31,626 And then we get it into pixels and that's 100 00:04:31,626 --> 00:04:35,999 a digital form that we can transmit over the Internet. 101 00:04:35,999 --> 00:04:39,083 If we take this exact cat, we make it into pixels. 102 00:04:39,083 --> 00:04:41,292 We have this, it is a pixel cat. 103 00:04:41,292 --> 00:04:42,292 (laughter). 104 00:04:42,292 --> 00:04:45,083 Fun fact, if you go on Google images and you are 105 00:04:45,083 --> 00:04:49,584 or just on Google looks for things like 8 pixel cat you 106 00:04:49,584 --> 00:04:53,459 will find girls who live in Oakland. 107 00:04:55,292 --> 00:04:56,999 True story. 108 00:04:57,083 --> 00:04:58,250 Okay. 109 00:04:58,250 --> 00:04:59,250 Great. 110 00:04:59,250 --> 00:05:00,250 We got this cat. 111 00:05:00,250 --> 00:05:01,083 Now we need to turn it into numbers because as we know, 112 00:05:01,083 --> 00:05:03,999 like computers they use numbers and stuff. 113 00:05:03,999 --> 00:05:05,083 That's pretty easy. 114 00:05:05,083 --> 00:05:07,999 We have all these various color spaces and things. 115 00:05:07,999 --> 00:05:09,834 So we get a number mapping for each color and then we run it 116 00:05:09,834 --> 00:05:13,834 through there and then we get, you know, a map of numbers, okay? 117 00:05:13,834 --> 00:05:14,876 So now we're good. 118 00:05:14,876 --> 00:05:18,375 Now we have something computers can understand and we can transmit it. 119 00:05:18,375 --> 00:05:20,250 So first we got to do in the Internet, for some reason when 120 00:05:20,250 --> 00:05:24,083 they designed the Internet, they didn't think it would be handling, 121 00:05:24,083 --> 00:05:28,459 like, you know, big chunks of data like cat pictures it can only handle very 122 00:05:28,459 --> 00:05:30,626 tiny chunks of data. 123 00:05:30,626 --> 00:05:32,751 So we split all of the data into all these kind 124 00:05:32,751 --> 00:05:36,083 of just randomly sized different things. 125 00:05:36,083 --> 00:05:37,626 And then we call them packets. 126 00:05:37,626 --> 00:05:40,626 And then we transmit them over an unreliable, 127 00:05:40,626 --> 00:05:44,250 possibly unreliable medium, right? 128 00:05:44,292 --> 00:05:45,292 (laughter). 129 00:05:45,501 --> 00:05:48,709 And then they all arrive, maybe. 130 00:05:48,709 --> 00:05:49,709 Maybe they arrive. 131 00:05:49,709 --> 00:05:50,999 Maybe they don't arrive. 132 00:05:50,999 --> 00:05:53,834 At some point, we try to cut and paste and stitch them back 133 00:05:53,834 --> 00:05:56,542 together to get the packet. 134 00:05:56,542 --> 00:06:00,959 And on the other end of the pipe, we get a pixel perfect exact replicate 135 00:06:00,959 --> 00:06:05,584 sent through the Internet of the cat we started with. 136 00:06:06,083 --> 00:06:07,584 There you go. 137 00:06:07,584 --> 00:06:08,792 Yeah, Internet. 138 00:06:08,792 --> 00:06:09,792 Internet's great. 139 00:06:10,167 --> 00:06:11,792 (applause). 140 00:06:11,999 --> 00:06:13,709 So what's the problem? 141 00:06:13,709 --> 00:06:15,083 I mean, the Internet's great. 142 00:06:15,083 --> 00:06:16,542 We can look at cat pictures. 143 00:06:16,542 --> 00:06:18,584 It brings us all a lot of love and joy. 144 00:06:18,626 --> 00:06:21,626 Like, who would ever want to try to stop this? 145 00:06:21,626 --> 00:06:23,250 Well, robots. 146 00:06:23,709 --> 00:06:24,999 (laughter). 147 00:06:25,375 --> 00:06:27,667 Since the beginning of time, there's been a war 148 00:06:27,667 --> 00:06:29,999 between cats and robots. 149 00:06:29,999 --> 00:06:31,083 No one knows why. 150 00:06:31,209 --> 00:06:32,959 All we know is that robots have been programmed 151 00:06:32,959 --> 00:06:34,417 to hate cats. 152 00:06:35,375 --> 00:06:36,792 Okay? 153 00:06:37,375 --> 00:06:41,083 So here's out binary classifiers work, okay? 154 00:06:41,083 --> 00:06:42,501 Robot looks at something. 155 00:06:42,959 --> 00:06:45,751 It looks at the packets and it says: Is that a cat? 156 00:06:46,083 --> 00:06:47,250 Yes or no. 157 00:06:47,250 --> 00:06:48,999 Those are all the options we have. 158 00:06:48,999 --> 00:06:51,209 That's why it is called a binary classifier. 159 00:06:51,209 --> 00:06:53,999 That's the decision it is trying to make, cat, not a cat. 160 00:06:53,999 --> 00:06:56,459 Now, because they hate cats, if it is a cat, they replace it 161 00:06:56,459 --> 00:06:58,626 with a sad Panda. 162 00:06:59,999 --> 00:07:02,709 All cats are replaced by sad Pandas. 163 00:07:02,751 --> 00:07:05,751 Now, if it is not a cat, don't care. 164 00:07:05,834 --> 00:07:06,834 Don't care. 165 00:07:06,834 --> 00:07:09,417 Just pass it through, just exactly as it was. 166 00:07:09,417 --> 00:07:10,459 Bananas, whatever. 167 00:07:10,459 --> 00:07:12,209 Doesn't even know what bananas are. 168 00:07:12,209 --> 00:07:16,292 It just knows what are cats because of binary classifiers. 169 00:07:16,584 --> 00:07:17,999 Pass it on. 170 00:07:17,999 --> 00:07:18,999 Okay. 171 00:07:19,626 --> 00:07:23,542 The question is how do we fool a robot so we can transmit pictures 172 00:07:23,542 --> 00:07:26,834 of cats over the Internet without having them replaced 173 00:07:26,834 --> 00:07:28,626 by sad Pandas. 174 00:07:28,626 --> 00:07:29,626 That's the yes. 175 00:07:29,626 --> 00:07:30,999 How do we fool robots? 176 00:07:31,584 --> 00:07:34,083 If you have been paying attention I said pay attention 177 00:07:34,083 --> 00:07:37,999 the first five minutes you already know the answer, right? 178 00:07:38,792 --> 00:07:39,999 Right? 179 00:07:40,083 --> 00:07:41,292 (laughter). 180 00:07:41,459 --> 00:07:45,334 You got to make cats look like bananas and then robots don't 181 00:07:45,334 --> 00:07:47,542 care, all right? 182 00:07:47,626 --> 00:07:50,792 So here's the secret code to my talk. 183 00:07:50,792 --> 00:07:52,501 Don't take a picture of this slide. 184 00:07:52,501 --> 00:07:55,125 This slide is not on the Internet version of the talk. 185 00:07:55,125 --> 00:07:57,250 This talk is only about cats and bananas. 186 00:07:57,667 --> 00:07:59,918 Kittens are free speech. 187 00:08:00,083 --> 00:08:02,834 Sad Pandas are censorship of free speech. 188 00:08:02,834 --> 00:08:05,792 Robots are filtering hardware made in America and sold to companies 189 00:08:05,792 --> 00:08:08,999 all over the world to make it so that people can't access 190 00:08:08,999 --> 00:08:12,083 the Internet and find out things about news, what's going 191 00:08:12,083 --> 00:08:15,918 on in their own country during elections and other critical times 192 00:08:15,918 --> 00:08:17,375 like that. 193 00:08:17,584 --> 00:08:21,999 Bananas are just messages that filtering don't care about. 194 00:08:22,209 --> 00:08:26,999 Cats are bananas reencoded to get past the filtering hardware. 195 00:08:27,959 --> 00:08:28,999 (applause). 196 00:08:32,792 --> 00:08:35,999 We are talking about deep stuff here. 197 00:08:35,999 --> 00:08:38,626 This is really important sort of stuff because the Internet needs 198 00:08:38,626 --> 00:08:40,083 to be free. 199 00:08:40,751 --> 00:08:43,083 But, you know, I just wanted to segue into this. 200 00:08:43,083 --> 00:08:46,834 I hope we are all at the same level, we all are on the same page 201 00:08:46,834 --> 00:08:49,999 and understand the code, right? 202 00:08:50,375 --> 00:08:51,626 You know the code. 203 00:08:51,626 --> 00:08:53,417 I can tell you about my project. 204 00:08:53,417 --> 00:08:56,459 Dust makes cats into bananas in order to fool robots so we don't have 205 00:08:56,459 --> 00:08:58,542 any more sad Pandas. 206 00:09:02,667 --> 00:09:03,834 (laughter). 207 00:09:03,834 --> 00:09:04,834 That's the intro. 208 00:09:04,834 --> 00:09:06,751 Now let's go into some details. 209 00:09:08,834 --> 00:09:12,167 Robots can't see cats the way you and I see cats. 210 00:09:12,167 --> 00:09:13,459 Hey, it is a cat. 211 00:09:13,667 --> 00:09:15,834 They only see the packets. 212 00:09:15,834 --> 00:09:17,334 They see the grid of excuse me. 213 00:09:17,501 --> 00:09:20,999 They see the grid of numbers and then they have to use some kind 214 00:09:20,999 --> 00:09:23,999 of statistical or rule based because they're robots, 215 00:09:23,999 --> 00:09:26,083 they only know logic. 216 00:09:26,292 --> 00:09:29,999 So here's one mechanism, right, which is you look at the lengths 217 00:09:29,999 --> 00:09:31,918 of the packets. 218 00:09:31,918 --> 00:09:34,334 It is grouped into these randomly sized packets. 219 00:09:34,334 --> 00:09:37,250 You kind of count the first one is 38 numbers in it and you say, 220 00:09:37,250 --> 00:09:42,459 you know, if things are in this kind of configuration, then it must be a cat. 221 00:09:42,459 --> 00:09:44,417 Now, this probably sounds really dumb. 222 00:09:44,417 --> 00:09:46,999 You think, that's not going to work. 223 00:09:46,999 --> 00:09:49,667 That has nothing to do with whether or not it is a cat. 224 00:09:49,667 --> 00:09:52,125 We are going to do a little audience participation test 225 00:09:52,125 --> 00:09:57,918 to see if you guys can classify traffic based on packet lengths, okay? 226 00:09:57,918 --> 00:09:58,918 Are you ready? 227 00:09:58,918 --> 00:09:59,918 Here we go. 228 00:09:59,918 --> 00:10:02,250 This is a graph of 8TCP packet lengths. 229 00:10:03,417 --> 00:10:05,584 That's not a border. 230 00:10:05,584 --> 00:10:08,167 That's a giant spike in the graph. 231 00:10:09,125 --> 00:10:12,375 If you know about TCP that's because of the algorithm that takes 232 00:10:12,375 --> 00:10:15,501 little packets and then just hopefully for you it bundles them 233 00:10:15,501 --> 00:10:17,292 into big packets. 234 00:10:17,334 --> 00:10:21,667 Since that's not turned off in HTTP, you have kind of this spike 235 00:10:21,667 --> 00:10:25,000 in the largest possible size packets. 236 00:10:25,292 --> 00:10:26,292 Okay. 237 00:10:26,292 --> 00:10:27,292 Now this is HTTPS. 238 00:10:27,459 --> 00:10:32,792 HTTPS disables the algorithm by setting the delay option and, 239 00:10:32,792 --> 00:10:37,000 therefore, it has the totally different statistical 240 00:10:37,000 --> 00:10:41,999 like it still has a lot of fairly big packets. 241 00:10:41,999 --> 00:10:43,999 It doesn't have that spike on the end. 242 00:10:43,999 --> 00:10:48,709 And it has this other spike kind of around 400 or so. 243 00:10:48,709 --> 00:10:49,959 I don't really know why. 244 00:10:49,959 --> 00:10:51,042 I just look at the graphs. 245 00:10:51,459 --> 00:10:52,667 Okay. 246 00:10:52,667 --> 00:10:56,999 So I have just showed you two different graphs. 247 00:10:56,999 --> 00:10:58,209 Now I will show you a chart. 248 00:10:58,209 --> 00:11:01,083 I will ask you if you can guess which one it is. 249 00:11:01,083 --> 00:11:02,083 Okay. 250 00:11:02,083 --> 00:11:04,959 So raise your hand if you think this is a chart of HTTP? 251 00:11:04,959 --> 00:11:05,999 Okay. 252 00:11:05,999 --> 00:11:08,751 Raise your hand if you think this is a chart of HTTPS? 253 00:11:09,083 --> 00:11:10,083 Okay. 254 00:11:10,083 --> 00:11:11,999 Congratulations, you are all robots. 255 00:11:11,999 --> 00:11:13,083 (laughter). 256 00:11:13,083 --> 00:11:14,417 It was neither. 257 00:11:14,834 --> 00:11:18,501 It was Dust, my project, pretending to be HTTPS. 258 00:11:18,876 --> 00:11:21,375 So yeah. 259 00:11:21,501 --> 00:11:22,999 Did a pretty good job, right? 260 00:11:22,999 --> 00:11:23,999 (applause). 261 00:11:23,999 --> 00:11:25,459 I kind of tricked you, though, because I didn't have that option 262 00:11:25,459 --> 00:11:28,999 is this something pretending to be HTTPS. 263 00:11:29,334 --> 00:11:30,959 You might have picked that because that's the obvious choice 264 00:11:30,959 --> 00:11:33,125 since that's what we are talking about. 265 00:11:34,083 --> 00:11:37,959 So, yeah, so packet lengths work as a way to determine if something 266 00:11:37,959 --> 00:11:40,959 is one protocol or another protocol. 267 00:11:40,959 --> 00:11:42,792 And the reason we care about this is because these days the way 268 00:11:42,792 --> 00:11:45,250 they block the Internet is they don't say, hey, you are looking 269 00:11:45,250 --> 00:11:49,375 at this thing that we don't want you to look at so we are going to block it. 270 00:11:49,542 --> 00:11:52,167 They say, hey, you are using BitTorrent, blocked. 271 00:11:52,250 --> 00:11:54,334 Hey, you are using Tor, blocked. 272 00:11:54,334 --> 00:11:55,751 You are using SSL. 273 00:11:55,751 --> 00:11:56,751 Blocked. 274 00:11:56,751 --> 00:11:58,667 You are using a VPN, blocked. 275 00:12:00,999 --> 00:12:02,751 That's crazy because you could be doing 276 00:12:02,751 --> 00:12:04,542 all kinds of things. 277 00:12:04,999 --> 00:12:07,751 If they can't look at what you are doing to determine 278 00:12:07,751 --> 00:12:11,292 if they don't like it, they will block it by default. 279 00:12:13,167 --> 00:12:15,999 For instance, there are circumstances where SSL has 280 00:12:15,999 --> 00:12:19,709 been blocked and you can use unencrypted HTTPS. 281 00:12:20,083 --> 00:12:22,876 That's okay if you can make your protocol look like. 282 00:12:26,083 --> 00:12:28,999 Dust removes packet length information. 283 00:12:28,999 --> 00:12:31,334 It doesn't just randomize it. 284 00:12:31,334 --> 00:12:33,083 It randomizes it according to a target distribution 285 00:12:33,083 --> 00:12:35,167 of whatever you want. 286 00:12:35,167 --> 00:12:37,250 You pick a protocol and Dust will make your packet lengths look 287 00:12:37,250 --> 00:12:39,626 like that protocol, any protocol, doesn't matter, 288 00:12:39,626 --> 00:12:42,083 just give me some sample traffic. 289 00:12:42,083 --> 00:12:45,792 I will sample it and make a profile and then I will make it look like that. 290 00:12:45,792 --> 00:12:47,999 These are one of the tools I have made looking 291 00:12:47,999 --> 00:12:51,292 at deep packet hardware and trying to figure out how it 292 00:12:51,292 --> 00:12:53,999 is doing classification so we can, you know, 293 00:12:53,999 --> 00:12:56,999 circumvent that classification. 294 00:12:56,999 --> 00:12:58,999 I made this tool called Shaper. 295 00:12:58,999 --> 00:13:01,792 You give it a model of a protocol, statistical model. 296 00:13:01,792 --> 00:13:04,459 For instance, like a model of what packet lengths. 297 00:13:04,792 --> 00:13:06,667 It then does the trick before and makes traffic that looks 298 00:13:06,667 --> 00:13:10,959 like that, infinite traffic that looks like whatever you want it to look like. 299 00:13:10,959 --> 00:13:14,999 We pass it through and we say, hey, is this such and such or not? 300 00:13:14,999 --> 00:13:17,876 And then we get the answers back and then we can tell well 301 00:13:17,876 --> 00:13:22,083 the different hardware is at classifying protocols. 302 00:13:22,083 --> 00:13:24,125 And then once we can do that, we can get better 303 00:13:24,125 --> 00:13:28,626 at making encodings that hide sufficient from classifiers. 304 00:13:30,334 --> 00:13:33,334 If you have some hardware, you can throw traffic at it and test it 305 00:13:33,334 --> 00:13:35,999 and see how it's doing classification. 306 00:13:36,375 --> 00:13:37,375 Okay. 307 00:13:37,542 --> 00:13:42,250 Second type is just looks and says, hey, there is some statistical properties 308 00:13:42,250 --> 00:13:44,250 of this traffic. 309 00:13:44,250 --> 00:13:46,584 Like, for instance, I see a whole bunch of 6s. 310 00:13:46,999 --> 00:13:50,542 If there is a bunch of 6s, it means it must be whatever, 311 00:13:50,542 --> 00:13:53,918 some particular type of traffic. 312 00:13:54,125 --> 00:13:55,959 So here's some examples of that. 313 00:13:55,999 --> 00:13:58,167 This is an English dictionary and I looked at the probability 314 00:13:58,167 --> 00:14:01,334 of different bytes to occur in that dictionary. 315 00:14:01,709 --> 00:14:03,999 The one on the far left is just Nulam because it 316 00:14:03,999 --> 00:14:06,083 is a list of words. 317 00:14:06,083 --> 00:14:07,542 Don't pay attention to that. 318 00:14:07,626 --> 00:14:10,083 I didn't clean the data because real data is dirty. 319 00:14:10,083 --> 00:14:11,918 So I'm showing you the dirty data. 320 00:14:14,999 --> 00:14:16,999 So this is the main thing. 321 00:14:16,999 --> 00:14:20,834 This is lowercase letters of the alphabet, right? 322 00:14:20,834 --> 00:14:22,999 So you can see there is definitely a spike. 323 00:14:22,999 --> 00:14:25,792 To the left is a little spike that's uppercase letters. 324 00:14:25,792 --> 00:14:26,999 There is a lot of uppercase letters in the dictionary, a lot 325 00:14:26,999 --> 00:14:30,417 more than you would think but less than lowercase letters. 326 00:14:31,083 --> 00:14:35,250 Clearly there is statistical sort of stuff. 327 00:14:35,250 --> 00:14:36,250 If you look at an U.K. 328 00:14:36,250 --> 00:14:39,501 English dictionary, it is a slightly different sort of thing. 329 00:14:39,501 --> 00:14:40,501 This is HTTP. 330 00:14:40,501 --> 00:14:42,250 Oh, my gosh, it is the same spike. 331 00:14:42,250 --> 00:14:43,250 Why is that? 332 00:14:43,250 --> 00:14:47,999 Because HTTP traffic actually has a lot of ASCII letters in it, HTML 333 00:14:47,999 --> 00:14:54,999 is lowercase letters, a little bit of a spike in uppercase letters. 334 00:14:55,083 --> 00:14:57,292 You can see this bleeds three. 335 00:14:57,334 --> 00:15:03,417 We know that this was English HTTP traffic or at least HTML HTTP traffic. 336 00:15:08,542 --> 00:15:11,999 I feel like a lot of people think if you wrap your traffic 337 00:15:11,999 --> 00:15:16,876 in something it hides it but a lot of stuff actually bleeds three. 338 00:15:16,876 --> 00:15:17,959 Here is HTTPS. 339 00:15:17,959 --> 00:15:19,959 Oh, my gosh, it has the same spike. 340 00:15:20,083 --> 00:15:22,083 Why does HTTPS which is encrypted with the same spike 341 00:15:22,083 --> 00:15:23,999 in those letters? 342 00:15:23,999 --> 00:15:27,083 It is because SSL is encrypted but the header is not encrypted and 343 00:15:27,083 --> 00:15:30,918 the header has a bunch of information that uses normal English 344 00:15:30,918 --> 00:15:34,709 letters, like the name of the Web site and sufficient like that, 345 00:15:34,709 --> 00:15:37,918 the SSL common name as they call it. 346 00:15:38,250 --> 00:15:40,125 And that's how they they how they get you with the SSL, 347 00:15:40,125 --> 00:15:42,999 that's how they get you with the encrypted traffic. 348 00:15:42,999 --> 00:15:44,542 They look at the unencrypted header and it 349 00:15:44,542 --> 00:15:48,375 is easy to tell you which protocol you are using. 350 00:15:50,792 --> 00:15:54,292 So I think people say, just encrypt everything with SSL. 351 00:15:54,292 --> 00:15:55,999 That doesn't work because you can tell it is SSL 352 00:15:55,999 --> 00:15:58,083 and people block SSL. 353 00:15:59,083 --> 00:16:01,834 So Dust fixes that, too. 354 00:16:01,999 --> 00:16:04,999 Dust removes the statistical content information. 355 00:16:04,999 --> 00:16:08,083 I use this thing called reverse Hoffman encoding where I encrypt everything 356 00:16:08,083 --> 00:16:12,751 to make it random and then I reverse encode it to make it not random. 357 00:16:13,542 --> 00:16:17,292 If you say the only bytes you can use are F and A, 358 00:16:17,292 --> 00:16:22,584 I will give you a stream of just Fs and As that encodes your traffic, 359 00:16:22,584 --> 00:16:24,999 whatever you want. 360 00:16:24,999 --> 00:16:28,626 Whatever hardware distribution you want, I will make it look like that. 361 00:16:28,626 --> 00:16:32,250 And then final I know you will be like that's stupid. 362 00:16:32,834 --> 00:16:34,083 No one does that. 363 00:16:34,083 --> 00:16:36,375 But, yeah, this is the most popular way 364 00:16:36,375 --> 00:16:39,125 of classifying traffic. 365 00:16:39,125 --> 00:16:43,501 You look for a sequence of bytes at a particular offset in the file 366 00:16:43,501 --> 00:16:45,999 and then that's it. 367 00:16:46,292 --> 00:16:50,999 You see this, for instance, HTTP traffic, you know, it starts with HTTP get, 368 00:16:50,999 --> 00:16:52,584 HTTP post. 369 00:16:52,584 --> 00:16:54,459 They just look at the first four bytes. 370 00:16:54,459 --> 00:16:57,083 If it is HTTP, they classify it as HTTP traffic. 371 00:16:57,501 --> 00:16:58,501 That's it. 372 00:16:58,501 --> 00:17:02,125 And that is like 90% of all DPI classification that's, like, 373 00:17:02,125 --> 00:17:07,667 actually deployed and used for censorship is just doing that. 374 00:17:07,999 --> 00:17:13,334 Yeah, so we remove that, right, because that's not going to work. 375 00:17:15,999 --> 00:17:19,459 So along those lines, I have this other tool that I made that 376 00:17:19,459 --> 00:17:23,209 is part of the Dust suite of tools, which is for looking to figure 377 00:17:23,209 --> 00:17:26,626 out what these byte sequences are because these signatures 378 00:17:26,626 --> 00:17:29,999 they call them signatures are not public. 379 00:17:29,999 --> 00:17:31,125 Like, they don't want to tell you what bytes they're looking 380 00:17:31,125 --> 00:17:34,250 for because it would make it easy to obfuscate your traffic. 381 00:17:36,292 --> 00:17:39,918 I have a tool that will take sample traffic and replay it 382 00:17:39,918 --> 00:17:43,751 with all different variations where it blanks out certain bytes 383 00:17:43,751 --> 00:17:47,999 and you can find the exact string they're looking for. 384 00:17:48,459 --> 00:17:50,959 Again, you can do that for any protocol. 385 00:17:51,999 --> 00:17:53,417 Okay. 386 00:17:53,417 --> 00:17:55,999 So to break it down for you, what Dust does is if you were 387 00:17:55,999 --> 00:17:58,876 to find a set of properties that deep packet 388 00:17:58,876 --> 00:18:03,083 inspection hardware is looking at to filter and you define, you know, 389 00:18:03,083 --> 00:18:06,542 which things go in which category based on those rules, 390 00:18:06,542 --> 00:18:10,918 then for whatever property that is, Dust will randomize that property 391 00:18:10,918 --> 00:18:13,751 to remove all information and it randomizes it 392 00:18:13,751 --> 00:18:17,792 according to a probability distribution to force a classification 393 00:18:17,792 --> 00:18:20,083 into whatever category. 394 00:18:20,083 --> 00:18:23,626 So you tell me what categories your hardware has and I can make arbitrary 395 00:18:23,626 --> 00:18:27,083 traffic get put into any of those categories. 396 00:18:27,083 --> 00:18:28,334 The reason you want to do this is because you want to get 397 00:18:28,334 --> 00:18:31,999 into the category that's not being blocked, whatever that is, right? 398 00:18:31,999 --> 00:18:35,626 Like, there was a recent instance of an adversary blocking everything 399 00:18:35,626 --> 00:18:39,999 except for HTTP and HTTP connections could only be 60 seconds long 400 00:18:39,999 --> 00:18:43,542 and then they were automatically closed. 401 00:18:43,918 --> 00:18:45,999 A lot of protocols had trouble with that. 402 00:18:45,999 --> 00:18:47,918 Dust says, fine, 60 second HTTP connections, 403 00:18:47,918 --> 00:18:49,584 let's do it. 404 00:18:49,584 --> 00:18:53,459 It encodes all the traffic you have over that protocol. 405 00:18:54,626 --> 00:18:56,667 Basically, if you left any messages 406 00:18:56,667 --> 00:19:00,083 through then you have to let all messages through because we 407 00:19:00,083 --> 00:19:03,584 will encode to all the messages it allows. 408 00:19:04,584 --> 00:19:09,167 The point of all of this, I had this message server that you give 409 00:19:09,167 --> 00:19:14,542 it arbitrary messages, it encodes them to look like bananas. 410 00:19:14,751 --> 00:19:17,167 They are passed through and then people are reunited 411 00:19:17,167 --> 00:19:19,999 with the cats that they love. 412 00:19:20,083 --> 00:19:22,999 And that's really what it's all about is just letting people get 413 00:19:22,999 --> 00:19:25,999 to the content they want to get to, post what they want to post, 414 00:19:25,999 --> 00:19:28,459 read what they want to read and just have free speech 415 00:19:28,459 --> 00:19:30,125 on the Internet. 416 00:19:30,751 --> 00:19:31,999 Cool. 417 00:19:31,999 --> 00:19:35,292 That's the end of my linear part of my talk. 418 00:19:35,292 --> 00:19:39,959 And now I have several bonus slides depending on how much time we have. 419 00:19:39,959 --> 00:19:42,792 And I think yeah, I think I ran through this pretty quick. 420 00:19:42,792 --> 00:19:45,292 So I'm going to go yeah, let's go through them and then we 421 00:19:45,292 --> 00:19:49,375 will do Q&A, maybe some of the questions will be related 422 00:19:49,375 --> 00:19:51,584 to these slides. 423 00:19:51,584 --> 00:19:52,584 Okay. 424 00:19:52,584 --> 00:19:54,250 So sometimes people ask me about various other projects 425 00:19:54,250 --> 00:19:58,542 and how Dust is different from these other projects. 426 00:19:59,626 --> 00:20:02,125 I don't really think of them as competitors. 427 00:20:02,417 --> 00:20:05,167 Like, I mean, people are going to choose they will use one kind 428 00:20:05,167 --> 00:20:07,417 of encoding or another for their traffic to get it 429 00:20:07,417 --> 00:20:09,792 past this filtering hardware. 430 00:20:09,999 --> 00:20:12,042 Just use whatever works. 431 00:20:12,042 --> 00:20:15,125 I mean, all you want to do is get past the filtering hardware. 432 00:20:15,542 --> 00:20:17,083 If something works, do it. 433 00:20:17,083 --> 00:20:20,000 If it stops working, then switch to something else. 434 00:20:20,626 --> 00:20:23,000 I worked with Tor on their pyobfsproxy. 435 00:20:28,209 --> 00:20:31,125 That's an example of a protocol where it just obfuscates. 436 00:20:31,125 --> 00:20:34,334 It makes everything look totally random. 437 00:20:34,792 --> 00:20:35,792 That's pretty good. 438 00:20:35,792 --> 00:20:37,626 That will get you past a lot of things. 439 00:20:37,876 --> 00:20:40,292 Some of the hardware will now flag stuff as random looking 440 00:20:40,292 --> 00:20:43,626 at which point you can make a custom rule that says, hey, if it 441 00:20:43,626 --> 00:20:45,999 is random looking, block it. 442 00:20:46,209 --> 00:20:48,250 If you can't classify it, that's okay. 443 00:20:48,250 --> 00:20:50,709 Just block everything that has high entropy. 444 00:20:50,709 --> 00:20:52,000 If you have heard about the entropy attacks, 445 00:20:52,000 --> 00:20:55,375 those are awesome attacks that work really well. 446 00:20:55,459 --> 00:20:58,417 They are not widely deployed but you can custom configure them 447 00:20:58,417 --> 00:21:00,999 into some of the hardware. 448 00:21:00,999 --> 00:21:03,918 That's the issue with just obfuscating stuff. 449 00:21:03,918 --> 00:21:04,999 You need the second layer where you shape it 450 00:21:04,999 --> 00:21:07,999 to look like stuff that's whitelisted. 451 00:21:09,876 --> 00:21:11,999 A lot of people are doing a lot of research 452 00:21:11,999 --> 00:21:15,250 on mimicking specific protocols, especially HTTP. 453 00:21:15,250 --> 00:21:17,250 People are just trying to make stuff that hides information 454 00:21:17,250 --> 00:21:18,709 in HTTP. 455 00:21:24,501 --> 00:21:27,584 So the problem with that approach is that people always choose 456 00:21:27,584 --> 00:21:30,709 the most common protocols, the ones that they think like no one 457 00:21:30,709 --> 00:21:34,542 will ever block this protocol because it is too important. 458 00:21:34,542 --> 00:21:38,083 People used to say that about SSL and now it has totally been blocked. 459 00:21:38,334 --> 00:21:40,083 People are really focusing on HTTP. 460 00:21:40,459 --> 00:21:44,083 The problem with that is that the DPI hardware has 461 00:21:44,083 --> 00:21:48,542 the most visibility into HTTP of any protocol. 462 00:21:48,792 --> 00:21:51,959 There are actually whole boxes that just do HTTP interception and do, like, 463 00:21:51,959 --> 00:21:53,999 semantic parsing of all of the headers and 464 00:21:53,999 --> 00:21:56,083 all of that kind of stuff. 465 00:21:56,083 --> 00:21:59,999 So you have to do a lot of work to look like HTTP. 466 00:21:59,999 --> 00:22:03,209 In fact, there was this paper recently called "The Parrot Is Dead" 467 00:22:03,209 --> 00:22:06,999 in which they talk about that they're pretty sure given any 468 00:22:06,999 --> 00:22:11,125 kind of traffic that mimics some other kind of traffic they can make 469 00:22:11,125 --> 00:22:13,999 a test exist where they can differentiate two 470 00:22:13,999 --> 00:22:16,083 because there will be a difference 471 00:22:16,083 --> 00:22:20,959 between your HTTP implementation a real HTTP implementation. 472 00:22:21,334 --> 00:22:23,542 People are trying to do this crazy stuff and get 473 00:22:23,542 --> 00:22:25,292 an actual browser. 474 00:22:25,459 --> 00:22:27,083 They are trying to make FireFox load pages 475 00:22:27,083 --> 00:22:29,667 and then they encode information in the way, like, 476 00:22:29,667 --> 00:22:32,999 which pages you choose and the timing and stuff. 477 00:22:33,876 --> 00:22:35,083 That's fine. 478 00:22:35,083 --> 00:22:37,584 It is just like a very slow protocol. 479 00:22:37,584 --> 00:22:40,334 You don't need to do any of that because like I said 480 00:22:40,334 --> 00:22:44,083 before the DPI hardware is just most of the time saying are 481 00:22:44,083 --> 00:22:46,918 the first four bytes HTTP? 482 00:22:46,999 --> 00:22:48,751 And then that's all you need to do. 483 00:22:48,959 --> 00:22:50,709 A lot of the hardware only looks at the first packet 484 00:22:50,709 --> 00:22:53,542 because they're trying to scale and so they're basically cheating 485 00:22:53,542 --> 00:22:55,542 in their design, right? 486 00:22:55,542 --> 00:22:57,834 Instead of looking at all the packets because they want 487 00:22:57,834 --> 00:23:00,999 to be able to push more thruput and tell people buying it, 488 00:23:00,999 --> 00:23:04,999 we can handle your whole country's traffic, you don't need any boxes, 489 00:23:04,999 --> 00:23:08,999 they look at the first packet and classify it and they say, forget it, 490 00:23:08,999 --> 00:23:11,999 they stick with that classification. 491 00:23:12,959 --> 00:23:16,250 I was talking to a DPI vendor and said they have to look 492 00:23:16,250 --> 00:23:21,083 at 20 packets, oh, no, 20 packets before they can classify it. 493 00:23:21,083 --> 00:23:25,999 It is just a lot easier than trying to be exactly like this protocol. 494 00:23:25,999 --> 00:23:29,083 And then there is a really cooled project called Format 495 00:23:29,083 --> 00:23:33,709 Transforming Encryption that you give it a grammar for a protocol, 496 00:23:33,709 --> 00:23:36,542 if you say HTTP or FTP or SMTP and then it 497 00:23:36,542 --> 00:23:41,542 will generate random messages that conform to that grammar. 498 00:23:41,999 --> 00:23:44,999 That's a pretty cool project, so I would check that one out. 499 00:23:44,999 --> 00:23:50,125 So the differences in what I'm doing, I'm not writing a protocol. 500 00:23:50,125 --> 00:23:51,999 Like, obfs3 is the BitTorrent protocol 501 00:23:51,999 --> 00:23:53,999 for obfuscation. 502 00:23:57,999 --> 00:24:02,584 Most people are just thinking let's make one protocol that can never be blocked. 503 00:24:02,667 --> 00:24:04,709 And I got to tell you, that doesn't exist. 504 00:24:04,709 --> 00:24:07,999 There is no one protocol that cannot ever be blocked by anybody. 505 00:24:07,999 --> 00:24:09,792 It just depends on your settings. 506 00:24:09,792 --> 00:24:12,167 Like, your attacker, your adversary is going to have some configuration 507 00:24:12,167 --> 00:24:15,459 on their hardware for block this, don't block this, and it is going 508 00:24:15,459 --> 00:24:17,999 to be different for everybody. 509 00:24:17,999 --> 00:24:19,125 There is no one protocol. 510 00:24:19,125 --> 00:24:20,959 So instead, I wrote a protocol engine where 511 00:24:20,959 --> 00:24:24,459 instead of updating it with each revision when it gets blocked, 512 00:24:24,459 --> 00:24:27,083 you just change the settings. 513 00:24:27,083 --> 00:24:28,959 Like, you say, okay, before we were making traffic look 514 00:24:28,959 --> 00:24:30,209 at HTTP. 515 00:24:30,334 --> 00:24:33,709 Now let's make it look let's do some UDP based crazy. 516 00:24:34,999 --> 00:24:37,999 Let's make it look like Skype, whatever. 517 00:24:38,375 --> 00:24:42,083 And then if they block that, then again just switch it up. 518 00:24:42,083 --> 00:24:43,709 Switch it up every day. 519 00:24:43,709 --> 00:24:46,125 In fact, don't even just mimic protocols. 520 00:24:46,125 --> 00:24:48,834 I have this thing that I can't really convince anyone 521 00:24:48,834 --> 00:24:52,083 is a good idea that I think is awesome which I call kymeric 522 00:24:52,083 --> 00:24:56,167 (phonetic) protocols where you take, I don't know, like SMTP and, like, 523 00:24:56,167 --> 00:24:59,083 NTP and then you just kind of smoosh them together 524 00:24:59,083 --> 00:25:04,334 and you get this protocol that people are like, I don't know what that is. 525 00:25:04,334 --> 00:25:05,334 Right? 526 00:25:05,626 --> 00:25:06,999 And just keep them busy. 527 00:25:06,999 --> 00:25:08,334 They got guys (laughter). 528 00:25:08,999 --> 00:25:11,292 They got to configure this hardware. 529 00:25:11,292 --> 00:25:13,999 They first have to notice your anomalous traffic. 530 00:25:13,999 --> 00:25:18,125 Then they have to figure out what your doing and it splits 531 00:25:18,125 --> 00:25:22,542 out your traffic from the legit traffic. 532 00:25:22,542 --> 00:25:25,999 So, you know, just keep it rolling. 533 00:25:25,999 --> 00:25:27,999 In fact, you could even with Dust just use 534 00:25:27,999 --> 00:25:30,501 a as a private institution, you could make 535 00:25:30,501 --> 00:25:32,999 up random distributions. 536 00:25:33,083 --> 00:25:37,083 In this protocol, everybody will be five bytes long 537 00:25:37,083 --> 00:25:39,918 or 1400 bytes long. 538 00:25:40,209 --> 00:25:43,125 I don't think there is any protocols like that., You know? 539 00:25:43,250 --> 00:25:44,250 So yeah. 540 00:25:44,751 --> 00:25:48,083 My thing is purely statistical because that's how they look 541 00:25:48,083 --> 00:25:51,626 at per packet is how the classifiers work. 542 00:25:51,626 --> 00:25:53,334 So my stuff is per packet. 543 00:25:53,375 --> 00:25:57,209 In the "Parrot Is Dead" paper, they use my work. 544 00:25:58,959 --> 00:26:03,709 They say stuff like Dust will never work. 545 00:26:03,709 --> 00:26:06,584 And it is like, right, it is not going to work against a bunch 546 00:26:06,584 --> 00:26:11,083 of CS professors and all of their grad students in a lab, sure. 547 00:26:14,626 --> 00:26:17,584 But against the actual deployed hardware, 548 00:26:17,584 --> 00:26:19,876 it works awesome. 549 00:26:19,918 --> 00:26:21,375 I know because I have the hardware and I pass it 550 00:26:21,375 --> 00:26:23,709 through and it works awesome. 551 00:26:23,999 --> 00:26:27,459 I think that's kind of one of the differences there. 552 00:26:27,709 --> 00:26:28,999 (applause). 553 00:26:28,999 --> 00:26:29,999 Thank you. 554 00:26:34,167 --> 00:26:35,792 Thank you. 555 00:26:35,918 --> 00:26:39,083 Another difference is with FTE, Format Transforming Encryption, it 556 00:26:39,083 --> 00:26:40,999 is a great project. 557 00:26:40,999 --> 00:26:42,999 You need a protocol specification so that you can 558 00:26:42,999 --> 00:26:45,083 follow that grammar. 559 00:26:45,083 --> 00:26:46,626 With Dust, you just give me some sample traffic 560 00:26:46,626 --> 00:26:49,334 and I will just build a model from that. 561 00:26:49,334 --> 00:26:51,834 In fact, the best thing is you give me some sample traffic 562 00:26:51,834 --> 00:26:55,083 of traffic that was blocked and traffic that wasn't blocked 563 00:26:55,083 --> 00:26:58,876 and I can from that make you a protocol that will be guaranteed 564 00:26:58,876 --> 00:27:01,999 to not be blocked not guaranteed, but it won't be blocked 565 00:27:01,999 --> 00:27:06,083 without even I don't even need to know what protocol. 566 00:27:06,083 --> 00:27:10,709 You give me the PCAP files and I process them and we're done. 567 00:27:12,083 --> 00:27:15,584 So a lot of people that are doing these specific protocols like HTTP modeling, 568 00:27:15,584 --> 00:27:19,709 they model the protocol and they say, what does a protocol look like? 569 00:27:19,709 --> 00:27:21,083 Let's look exactly like this. 570 00:27:21,083 --> 00:27:23,999 What I do is I model the filtering hardware and I say: What 571 00:27:23,999 --> 00:27:27,667 does the filter think that HTTP looks like? 572 00:27:27,667 --> 00:27:31,542 Let's look like that and not do any more work necessary and get maximum 573 00:27:31,542 --> 00:27:35,999 efficiency while definitely getting past that hardware. 574 00:27:35,999 --> 00:27:37,417 You give me different hardware, I might come 575 00:27:37,417 --> 00:27:39,709 up with a different protocol. 576 00:27:39,918 --> 00:27:42,250 I think this all come downs to I'm aiming 577 00:27:42,250 --> 00:27:44,999 for a realistic threat model. 578 00:27:44,999 --> 00:27:47,999 I want to base my threat model on what's deployed and what's being 579 00:27:47,999 --> 00:27:50,292 used to censor countries. 580 00:27:51,876 --> 00:27:54,292 One more thing I just added right before the talk is that there 581 00:27:54,292 --> 00:27:56,083 is no shared secrets. 582 00:27:56,083 --> 00:27:57,751 Everything is totally public. 583 00:27:57,751 --> 00:27:59,083 The source code is out there. 584 00:27:59,083 --> 00:28:00,209 You can get it. 585 00:28:00,999 --> 00:28:05,334 Even the protocol doesn't have any kind of shared secrets or anything. 586 00:28:05,334 --> 00:28:08,459 So you can know that people are running Dust. 587 00:28:08,751 --> 00:28:12,417 It doesn't help you figure out who is running Dust because the traffic 588 00:28:12,417 --> 00:28:15,876 by definition looks like the traffic that you don't care 589 00:28:15,876 --> 00:28:17,626 about, right? 590 00:28:17,626 --> 00:28:19,417 So even if you downloaded you run your own 591 00:28:19,417 --> 00:28:24,999 experiments, unless you know what settings people are using, it won't help. 592 00:28:24,999 --> 00:28:27,999 If you know what settings, the battle is you have to make a better rule 593 00:28:27,999 --> 00:28:31,083 for your filter that can tell between the mimic traffic and 594 00:28:31,083 --> 00:28:32,999 the real traffic. 595 00:28:32,999 --> 00:28:35,999 It is no longer like a war of technology, it is a war of who has 596 00:28:35,999 --> 00:28:39,459 the better information, the better models. 597 00:28:40,125 --> 00:28:43,501 So talking about threat models, so in the academic world, 598 00:28:43,501 --> 00:28:47,250 the threat model hierarchy of threats is if someone just published 599 00:28:47,250 --> 00:28:51,501 a paper and it won a best paper award, that's the adversary that you need 600 00:28:51,501 --> 00:28:54,999 to attack was the adversary in that paper. 601 00:28:55,626 --> 00:28:58,709 And then otherwise, if there is a recently published attack, 602 00:28:58,709 --> 00:29:01,209 you should defend against that. 603 00:29:02,167 --> 00:29:04,999 Otherwise, if there was an attack published before 2003, 604 00:29:04,999 --> 00:29:06,709 no one cares. 605 00:29:06,709 --> 00:29:09,792 No one is working on that in academic research at all. 606 00:29:10,209 --> 00:29:11,542 Cool. 607 00:29:11,999 --> 00:29:14,334 So that's kind of my issue with academic stuff, 608 00:29:14,334 --> 00:29:18,209 is they are really cool at classifying traffic in the lab. 609 00:29:18,876 --> 00:29:20,834 But, I mean, who cares because until it makes it 610 00:29:20,834 --> 00:29:22,999 to hardware and deployed and being used for censorship, 611 00:29:22,999 --> 00:29:24,999 it doesn't really matter. 612 00:29:25,083 --> 00:29:27,999 I have a slowed about open source threat. 613 00:29:27,999 --> 00:29:30,667 And I just want to say I don't mean to offend anybody. 614 00:29:30,667 --> 00:29:34,999 This is my experience working on Freenet is the number one threat 615 00:29:34,999 --> 00:29:39,542 is the number one threat you can think of. 616 00:29:39,542 --> 00:29:42,459 Oh, that's what I have to defend against and I thought about it so it 617 00:29:42,459 --> 00:29:45,083 is probably a serious attack. 618 00:29:45,250 --> 00:29:47,834 Secondly, if someone on the mailing list comes up with it, 619 00:29:47,834 --> 00:29:49,999 then it is pretty bad. 620 00:29:50,375 --> 00:29:53,999 If somebody attacks your system in a Reddit threat, I know 621 00:29:53,999 --> 00:29:56,959 because your system stucks because I broke it, 622 00:29:56,959 --> 00:30:00,250 then that's what people defend against. 623 00:30:00,250 --> 00:30:01,999 And then they add plausibility. 624 00:30:02,501 --> 00:30:03,876 I have been there. 625 00:30:03,876 --> 00:30:04,876 We did it at Freenet. 626 00:30:07,709 --> 00:30:10,626 Everybody thinks you have to add plausible deniability. 627 00:30:11,751 --> 00:30:14,250 This is a bad road to go down. 628 00:30:15,459 --> 00:30:19,459 My fair model is based on is this attack actually being done 629 00:30:19,459 --> 00:30:22,501 in the wild to censor traffic. 630 00:30:22,834 --> 00:30:23,834 A lot. 631 00:30:23,999 --> 00:30:26,000 That would be an example of the static packet, 632 00:30:26,000 --> 00:30:30,292 the byte sequence trafficking, that's the number one thing. 633 00:30:30,334 --> 00:30:33,334 If you don't defend against that, then we don't even need to talk 634 00:30:33,334 --> 00:30:35,999 about there is obfuscating protocols that begin 635 00:30:35,999 --> 00:30:38,876 with magic number in the handshake. 636 00:30:38,876 --> 00:30:43,584 So if you just put that magic number to the filter, then the protocol is gone. 637 00:30:44,542 --> 00:30:47,459 If you see it occasionally, that's good, too. 638 00:30:47,459 --> 00:30:48,459 We'll do that. 639 00:30:48,876 --> 00:30:50,501 Finally, if the capability is in hardware 640 00:30:50,501 --> 00:30:53,417 but just hasn't been used, that's lowest priority but I 641 00:30:53,417 --> 00:30:55,417 will still do that. 642 00:30:55,417 --> 00:30:57,584 There are some really awesome hardware. 643 00:30:57,584 --> 00:30:58,999 I met a lot of people actually this weekend that 644 00:30:58,999 --> 00:31:01,292 were dealing me about some DPI hardware that sounded 645 00:31:01,292 --> 00:31:02,999 totally sweet. 646 00:31:02,999 --> 00:31:04,125 No one is using it. 647 00:31:04,999 --> 00:31:08,999 But if anybody ever buys it so one of the things about DPI hardware, 648 00:31:08,999 --> 00:31:10,626 it is old. 649 00:31:10,626 --> 00:31:12,209 Really old, no one ever upgrades. 650 00:31:12,292 --> 00:31:13,459 A lot of these countries that are filtering, 651 00:31:13,459 --> 00:31:15,876 they are using 10 year old hardware. 652 00:31:16,792 --> 00:31:18,667 That's the first thing. 653 00:31:18,667 --> 00:31:21,584 10 year old hardware is the first thing to defend against. 654 00:31:21,584 --> 00:31:23,709 You would be surprised at the protocols that fall instantly when 655 00:31:23,709 --> 00:31:27,542 thrown against 10 year old hardware because they are reading the papers 656 00:31:27,542 --> 00:31:32,501 or going on the mailing lists rather than looking at the actual hardware. 657 00:31:33,250 --> 00:31:35,999 Let me see if I have more slides here. 658 00:31:35,999 --> 00:31:37,667 Let's see. 659 00:31:37,999 --> 00:31:42,792 (speaker off microphone.) BRANDON WILEY: 660 00:31:42,792 --> 00:31:44,999 Yeah, okay. 661 00:31:44,999 --> 00:31:46,334 That's a good question. 662 00:31:46,876 --> 00:31:50,083 So, yeah, so you have to have a client and you have to have a server. 663 00:31:50,334 --> 00:31:53,834 And they both need to be speaking to protocol. 664 00:31:53,999 --> 00:31:56,167 You need the public key of the server. 665 00:31:56,167 --> 00:31:58,999 You need that because I need to have to be able to do 666 00:31:58,999 --> 00:32:02,125 a handshake where we don't have to communicate anything that's not 667 00:32:02,125 --> 00:32:03,999 purely random. 668 00:32:03,999 --> 00:32:04,999 Let me see. 669 00:32:08,459 --> 00:32:10,918 I won't really get into the key exchange. 670 00:32:10,918 --> 00:32:11,918 I don't have time. 671 00:32:12,083 --> 00:32:15,375 But the key exchange and everything is all purely random. 672 00:32:15,375 --> 00:32:17,751 You need to have the public key ahead of time. 673 00:32:17,751 --> 00:32:19,501 When you find out the address of the server, you need to find 674 00:32:19,501 --> 00:32:23,501 out its I.P., its port, its public key and then also the configuration 675 00:32:23,501 --> 00:32:27,751 for what specific protocol you are going to be speaking. 676 00:32:27,751 --> 00:32:30,999 That all needs to be out of band in the invitation, right? 677 00:32:31,083 --> 00:32:35,918 And so I know that's kind of not the way that people usually do it. 678 00:32:35,918 --> 00:32:39,667 People like to do these you connect and handshake everything right there. 679 00:32:39,667 --> 00:32:41,999 That's kind of like a more popular way to do it. 680 00:32:41,999 --> 00:32:43,959 I just feel like that way doesn't work. 681 00:32:43,959 --> 00:32:44,542 You need to have a little bit of information transmitted 682 00:32:44,542 --> 00:32:47,542 out of band beforehand in order to have all of the properties that we 683 00:32:47,542 --> 00:32:49,083 want to have. 684 00:32:50,083 --> 00:32:51,667 Let's see. 685 00:32:54,709 --> 00:32:55,999 Yeah, okay. 686 00:32:56,083 --> 00:32:57,459 Let's do questions. 687 00:32:57,459 --> 00:33:01,375 And if slides there are slides that are referenced by questions, that's fine. 688 00:33:01,959 --> 00:33:03,334 Anybody got any questions? 689 00:33:03,999 --> 00:33:05,375 We got a mic. 690 00:33:05,709 --> 00:33:07,667 That's good because this is a big room. 691 00:33:09,209 --> 00:33:11,292 I'm Jimmy. 692 00:33:11,292 --> 00:33:12,542 I don't have a long cord. 693 00:33:13,459 --> 00:33:15,876 And shockingly no wireless here. 694 00:33:20,751 --> 00:33:22,334 What, at DEF CON? 695 00:33:22,334 --> 00:33:25,751 So how do we run a Dust server to help out? 696 00:33:25,751 --> 00:33:28,209 Is there a community setup or such? 697 00:33:28,209 --> 00:33:30,792 Or EC2 instances or anything like that? 698 00:33:30,792 --> 00:33:35,375 How can we make those end points that people can connect to? 699 00:33:35,375 --> 00:33:36,709 BRANDON WILEY: Right. 700 00:33:36,709 --> 00:33:37,709 That's a good point. 701 00:33:37,709 --> 00:33:39,999 So Dust right now is not actually a service. 702 00:33:39,999 --> 00:33:41,751 It's a protocol and it is like an implementation 703 00:33:41,751 --> 00:33:46,083 of that protocol which is designed for other people to use. 704 00:33:46,083 --> 00:33:48,459 So, like, for instance, with Tor, I worked with them 705 00:33:48,459 --> 00:33:52,083 on obfs3 proxy which is part of their transport system where 706 00:33:52,083 --> 00:33:55,709 anybody can make a new transport for Tor. 707 00:33:55,709 --> 00:34:00,083 That's kind of one of the targets, like a Tor wrapper that uses this. 708 00:34:02,751 --> 00:34:05,999 And then also I'm trying to make it into a library where you can use it 709 00:34:05,999 --> 00:34:08,334 in your own kind of protocol. 710 00:34:08,334 --> 00:34:11,999 There is currently no system for just doing open proxies that are 711 00:34:11,999 --> 00:34:13,999 based on Dust. 712 00:34:15,999 --> 00:34:18,918 I think that's not really the model that I want to go 713 00:34:18,918 --> 00:34:21,501 with just because I know from knowing the Tor guys 714 00:34:21,501 --> 00:34:24,501 from way back when how much work it is to run a community 715 00:34:24,501 --> 00:34:26,542 of volunteer nodes. 716 00:34:26,792 --> 00:34:31,876 Freenet we had that issue as well, although Freenet was low maintenance. 717 00:34:32,167 --> 00:34:33,999 There wasn't a lot of coordination. 718 00:34:34,999 --> 00:34:37,667 Yeah, right now this is let me go to the slide 719 00:34:37,667 --> 00:34:41,250 on whether or not you should put real traffic on it which is no, 720 00:34:41,250 --> 00:34:44,459 don't put real traffic on it, because this is a purely, 721 00:34:44,459 --> 00:34:47,417 purely experimental sort of thing. 722 00:34:48,501 --> 00:34:49,751 Yeah. 723 00:34:49,751 --> 00:34:52,626 So, yeah, I don't have a good answer for that yet. 724 00:34:52,999 --> 00:34:54,417 But that's a good question. 725 00:34:54,417 --> 00:34:55,751 I'm going to work on that. 726 00:34:55,751 --> 00:34:56,751 Okay. 727 00:34:56,751 --> 00:34:58,125 I guess this is more of a general question 728 00:34:58,125 --> 00:35:00,709 for all obfuscating protocols. 729 00:35:00,709 --> 00:35:03,083 But couldn't the attacker just notice that you're own communicating 730 00:35:03,083 --> 00:35:06,626 with one machine all the time and it's always HTTP and you never get 731 00:35:06,626 --> 00:35:08,459 anything blocked? 732 00:35:08,667 --> 00:35:12,334 And then just block all access that way to that machine? 733 00:35:12,334 --> 00:35:14,626 BRANDON WILEY: I see what you are saying. 734 00:35:14,626 --> 00:35:15,959 You are talking about your connection patterns being 735 00:35:15,959 --> 00:35:21,083 anomalous you are making long lived connections to a single machine. 736 00:35:21,375 --> 00:35:24,709 That's one of the things I'm going in the next version I'm working 737 00:35:24,709 --> 00:35:28,292 on is being able to split your traffic over multiple connections 738 00:35:28,292 --> 00:35:31,542 to multiple machines, one conversation. 739 00:35:31,542 --> 00:35:33,999 I have already got it where like, some protocols actually use 740 00:35:33,999 --> 00:35:35,876 different ports. 741 00:35:36,083 --> 00:35:38,834 VPN uses 443 and 1194. 742 00:35:42,250 --> 00:35:43,999 80% use 443. 743 00:35:44,250 --> 00:35:46,542 A 20% use 1194. 744 00:35:47,334 --> 00:35:49,999 You can take that to host, too. 745 00:35:49,999 --> 00:35:51,542 You can say split your traffic among this set of hosts 746 00:35:51,542 --> 00:35:54,083 with this probability distribution. 747 00:35:54,083 --> 00:35:56,999 Use these ports with this probability distribution. 748 00:35:56,999 --> 00:35:59,542 So, yeah, I'm totally working on that. 749 00:35:59,542 --> 00:36:01,918 Also, I'm working on a thing where you can split your 750 00:36:01,918 --> 00:36:05,959 traffic over simultaneous TCP and UDP conversations using different 751 00:36:05,959 --> 00:36:09,999 profiles, different protocols with different hosts. 752 00:36:09,999 --> 00:36:11,083 And it all just kind of gets funneled back together 753 00:36:11,083 --> 00:36:13,334 into one stream on the other hand. 754 00:36:13,334 --> 00:36:16,834 That's a lot of work, though, so it hasn't come together yet. 755 00:36:16,834 --> 00:36:18,876 It is just a lot of bookkeeping and stuff. 756 00:36:18,876 --> 00:36:19,918 Next step though. 757 00:36:19,918 --> 00:36:21,584 BRANDON WILEY: Yeah, next step. 758 00:36:21,584 --> 00:36:22,999 It seems like the obviously escalation 759 00:36:22,999 --> 00:36:26,918 for the hardware manufacturers is to just move up the chain 760 00:36:26,918 --> 00:36:31,083 and start classifying distributions of trigrams, bigrams and hashes 761 00:36:31,083 --> 00:36:33,292 of tokens in HTTP. 762 00:36:33,834 --> 00:36:36,626 Have you seen any evidence they are moving that way? 763 00:36:36,626 --> 00:36:38,751 Or are you sort of banking on the fact that's 764 00:36:38,751 --> 00:36:41,999 a lab CS world theoretical attack and not likely 765 00:36:41,999 --> 00:36:44,959 to be deployed in practice? 766 00:36:44,959 --> 00:36:48,083 BRANDON WILEY: To come back to the basic principle of Dust, 767 00:36:48,083 --> 00:36:54,083 if you define a property of connections, I will randomize over that property. 768 00:36:54,083 --> 00:36:56,167 So if you move from a first order probability model 769 00:36:56,167 --> 00:37:00,083 for content where you are just looking at individual bytes to looking 770 00:37:00,083 --> 00:37:03,459 at bigrams or trigrams and that's deployed and I see that, I 771 00:37:03,459 --> 00:37:06,459 will simply randomize on the bigram and trigram level 772 00:37:06,459 --> 00:37:09,999 and I can do that a lot faster than the hardware people who need 773 00:37:09,999 --> 00:37:13,999 to test it and get people to buy it and roll it out. 774 00:37:13,999 --> 00:37:15,999 I can could do that today. 775 00:37:15,999 --> 00:37:18,792 The only reason I haven't done it is because it's not deployed 776 00:37:18,792 --> 00:37:21,999 and also today specifically I'm really busy doing some 777 00:37:21,999 --> 00:37:24,375 of the DEF CON contests. 778 00:37:24,375 --> 00:37:25,375 (laughter). 779 00:37:25,375 --> 00:37:26,375 (applause). 780 00:37:27,999 --> 00:37:29,751 We're not done yet. 781 00:37:29,751 --> 00:37:30,751 Stop clapping. 782 00:37:33,999 --> 00:37:39,334 So how do you specify what's allowed through? 783 00:37:39,334 --> 00:37:42,125 Do you have the client email out of band some PCAP data 784 00:37:42,125 --> 00:37:47,709 for things they were able to do and what they weren't able to do? 785 00:37:48,417 --> 00:37:51,167 What's the actual details of how that gets specified? 786 00:37:51,167 --> 00:37:53,751 BRANDON WILEY: There is two parts there. 787 00:37:53,751 --> 00:37:56,083 There is how do I make a model of a protocol? 788 00:37:56,083 --> 00:37:57,250 And then how do we communicate that model to the client so 789 00:37:57,250 --> 00:37:59,459 they can connect to the server? 790 00:37:59,459 --> 00:38:03,459 In terms of modeling the protocol, I have some tools that take PCAP files 791 00:38:03,459 --> 00:38:06,751 and boil then down into a statistical like, it takes 792 00:38:06,751 --> 00:38:10,999 out all of the individual packets and gives you the statistical model 793 00:38:10,999 --> 00:38:15,999 and takes into a tiny little file that you can email to somebody. 794 00:38:15,999 --> 00:38:18,626 And they bundle that up into an invite packet which has 795 00:38:18,626 --> 00:38:19,999 the I.P. 796 00:38:19,999 --> 00:38:22,334 and the port and the protocol configuration information 797 00:38:22,334 --> 00:38:24,292 all in one thing. 798 00:38:24,292 --> 00:38:25,999 All you need to do is tell Dust here's my invitation 799 00:38:25,999 --> 00:38:30,292 and then it will connect to the server and do everything right. 800 00:38:31,375 --> 00:38:33,876 So in terms of how you make those, what I do 801 00:38:33,876 --> 00:38:36,709 is I have deep packet inspection hardware, and I look 802 00:38:36,709 --> 00:38:40,375 at what gets through and what doesn't get through. 803 00:38:40,375 --> 00:38:42,751 Now, obviously it depends on how you configure it, 804 00:38:42,751 --> 00:38:46,709 like what kind of traffic you, like, are against. 805 00:38:46,709 --> 00:38:50,167 So what I do is I look at instances of filtering, find out what they are using, 806 00:38:50,167 --> 00:38:52,667 get the hardware and configure it to reproduce 807 00:38:52,667 --> 00:38:55,292 the property's behavior and that's how I try to make 808 00:38:55,292 --> 00:38:58,083 a realistic model which brings me to something I want 809 00:38:58,083 --> 00:39:00,417 to say about contribution. 810 00:39:00,417 --> 00:39:02,626 Here is a bunch of ways you can contribute. 811 00:39:03,209 --> 00:39:04,876 My Haskell sucks. 812 00:39:05,209 --> 00:39:08,417 So if anyone knows Haskell to C, I could really use some help. 813 00:39:10,959 --> 00:39:13,834 If anybody has any DPI hardware, that would be cool 814 00:39:13,834 --> 00:39:17,209 because I have some but I don't have it all. 815 00:39:17,209 --> 00:39:19,626 In particular, I need some Huawei gear. 816 00:39:19,834 --> 00:39:21,667 If you want to send some packets through, 817 00:39:21,667 --> 00:39:25,584 you can help save the Internet from being censored. 818 00:39:25,999 --> 00:39:27,999 It is on the DL. 819 00:39:27,999 --> 00:39:30,918 You are saying Huawei may be a security problem there? 820 00:39:32,834 --> 00:39:35,876 BRANDON WILEY: For my project? 821 00:39:35,876 --> 00:39:36,876 No, in general. 822 00:39:36,876 --> 00:39:39,751 BRANDON WILEY: In general, I wouldn't say in general. 823 00:39:39,999 --> 00:39:41,667 They have good stuff. 824 00:39:41,667 --> 00:39:42,792 They have good stuff. 825 00:39:42,792 --> 00:39:44,834 They are really good at filtering stuff. 826 00:39:44,834 --> 00:39:45,083 I don't know if my stuff works against Huawei 827 00:39:45,083 --> 00:39:46,999 because I don't have a Huawei box. 828 00:39:47,999 --> 00:39:50,250 Yeah, anyway, more questions? 829 00:39:51,999 --> 00:39:58,751 Do you think it's possible to put all deobfuscated in the cloud so 830 00:39:58,751 --> 00:40:03,542 the message be decrypted automatically? 831 00:40:03,876 --> 00:40:07,417 Yeah, we can use a key exchange there but the protocol, 832 00:40:07,417 --> 00:40:11,584 I mean, it is more recalcitrant than that. 833 00:40:11,584 --> 00:40:16,709 So if we reverse engineer the protocol, I mean BRANDON WILEY: Reverse 834 00:40:16,709 --> 00:40:19,417 engineer my protocol? 835 00:40:19,417 --> 00:40:20,417 Uh huh. 836 00:40:20,417 --> 00:40:20,751 BRANDON WILEY: Oh, you don't need 837 00:40:20,751 --> 00:40:23,751 to reverse engineer it so you can download the source code. 838 00:40:23,751 --> 00:40:24,751 It is right there. 839 00:40:26,209 --> 00:40:31,626 I was thinking just to put trying a defense mechanism 840 00:40:31,626 --> 00:40:33,999 in the filter. 841 00:40:37,209 --> 00:40:42,999 It will be automatically decrypted yeah, just put a (inaudible) 842 00:40:42,999 --> 00:40:49,459 in the filter so you can put clients in the filter so we can (inaudible) 843 00:40:49,459 --> 00:40:54,000 meaning of what has been passed through. 844 00:40:54,000 --> 00:40:56,999 BRANDON WILEY: I don't totally understand your question so let's talk 845 00:40:56,999 --> 00:40:59,417 after and then I will get it. 846 00:41:01,250 --> 00:41:05,501 You mentioned some academic core which sort of questioned 847 00:41:05,501 --> 00:41:08,876 whether in the long, long run your protocol can 848 00:41:08,876 --> 00:41:12,417 fundamentally work because eventually they can adapt 849 00:41:12,417 --> 00:41:14,667 to your protocol. 850 00:41:14,999 --> 00:41:17,209 Can you please give more details about it? 851 00:41:17,209 --> 00:41:19,501 BRANDON WILEY: Yeah. 852 00:41:19,501 --> 00:41:20,918 So that was the "Parrot Is Dead" paper 853 00:41:20,918 --> 00:41:23,125 in which they say packet based protocols 854 00:41:23,125 --> 00:41:26,459 to obfuscation won't work because they have stuff where 855 00:41:26,459 --> 00:41:29,792 they look at the whole connection and then they're able 856 00:41:29,792 --> 00:41:33,999 to classify stuff a lot better which makes sense, right? 857 00:41:33,999 --> 00:41:36,667 If you are not looking at one packet, if you are looking at all of the packets, 858 00:41:36,667 --> 00:41:38,751 you have a lot more information that you can use 859 00:41:38,751 --> 00:41:40,167 to classify. 860 00:41:40,209 --> 00:41:42,334 So, yeah, sure, that's true. 861 00:41:42,334 --> 00:41:44,999 Here's the thing, though, if you are looking 862 00:41:44,999 --> 00:41:48,250 at the whole sequence of all of the packets, 863 00:41:48,250 --> 00:41:52,083 unless you delay well, not even then. 864 00:41:52,083 --> 00:41:53,751 That means you pass them, that means you pass the packets 865 00:41:53,751 --> 00:41:55,959 onto the server and you got responses and you record 866 00:41:55,959 --> 00:41:58,999 the whole conversation and then you classified it. 867 00:41:58,999 --> 00:42:01,459 I won in that case, right? 868 00:42:01,459 --> 00:42:02,792 The message got through. 869 00:42:02,999 --> 00:42:05,626 Maybe you had to burn that I.P., that I.P. 870 00:42:05,626 --> 00:42:07,876 is blocked now and you have to go to a new I.P. 871 00:42:07,876 --> 00:42:10,999 because they said you are doing crazy stuff so we will block it. 872 00:42:10,999 --> 00:42:12,334 That's already a problem. 873 00:42:12,334 --> 00:42:13,167 That's already a problem that Tor deals 874 00:42:13,167 --> 00:42:16,999 with all the time, you have to churn through new I.P.s all the time. 875 00:42:16,999 --> 00:42:20,999 I consider victory any time I get the message through. 876 00:42:20,999 --> 00:42:22,751 I don't care about anything else. 877 00:42:22,751 --> 00:42:25,083 I don't care about people reading the messages. 878 00:42:25,083 --> 00:42:26,999 I don't care about them decrypting the messages if it is afterwards 879 00:42:26,999 --> 00:42:30,667 and they couldn't use that information to block the packets. 880 00:42:31,209 --> 00:42:34,417 We just have different, I think, goals. 881 00:42:34,751 --> 00:42:37,999 Blackhat people are like can we classify traffic, yes or no. 882 00:42:37,999 --> 00:42:39,999 And my question is can they block the traffic which 883 00:42:39,999 --> 00:42:42,834 they do through classification. 884 00:42:43,459 --> 00:42:45,501 This will be the last question. 885 00:42:45,501 --> 00:42:47,667 If anybody else wants to talk to our man, we will take him 886 00:42:47,667 --> 00:42:49,999 over to the Chillout Cafe. 887 00:42:50,959 --> 00:42:53,999 Only one more so I will make it count. 888 00:42:54,334 --> 00:42:57,292 Can you multiplex traffic across multiple protocols 889 00:42:57,292 --> 00:42:59,999 and multiple end points? 890 00:42:59,999 --> 00:43:00,999 Is the first part. 891 00:43:00,999 --> 00:43:03,876 And the second part is are you IPv6 ready? 892 00:43:03,876 --> 00:43:06,417 BRANDON WILEY: So good questions. 893 00:43:06,417 --> 00:43:08,959 The first part, that is in the next version I'm working 894 00:43:08,959 --> 00:43:12,250 on is multiplexing over multiple protocols, multiple I.P.s, 895 00:43:12,250 --> 00:43:15,959 multiple ports and also between TCP and UDP. 896 00:43:15,959 --> 00:43:17,292 Nobody is doing that. 897 00:43:17,292 --> 00:43:18,334 I think that's cool. 898 00:43:18,334 --> 00:43:19,792 Most people don't like UDP. 899 00:43:19,792 --> 00:43:20,792 I don't know why. 900 00:43:20,792 --> 00:43:21,792 It is rad. 901 00:43:21,792 --> 00:43:23,209 And IPv6 ready? 902 00:43:23,209 --> 00:43:24,459 It is funny you say that. 903 00:43:24,459 --> 00:43:27,999 The first version of Dust was IPv6 only and people had 904 00:43:27,999 --> 00:43:30,876 to talk me down from that. 905 00:43:30,876 --> 00:43:33,751 They had to be like, look, you guys look, Brandon, like, 906 00:43:33,751 --> 00:43:36,167 people don't have IPv6. 907 00:43:36,167 --> 00:43:37,999 I'm like, well they better get it. 908 00:43:37,999 --> 00:43:38,999 (laughter). 909 00:43:38,999 --> 00:43:42,167 So the new version thank you, yes. 910 00:43:42,167 --> 00:43:43,167 IPv6 is cool. 911 00:43:43,167 --> 00:43:46,999 So the new version I actually have just done IPv4, but I am going to add 912 00:43:46,999 --> 00:43:50,167 the IPv6 obviously because one of the best ways 913 00:43:50,167 --> 00:43:53,083 to avoid deep packet inspection is use IPv6 914 00:43:53,083 --> 00:43:56,999 because they haven't gotten around to implementing most 915 00:43:56,999 --> 00:43:59,417 of the stuff for IPv6. 916 00:43:59,542 --> 00:44:01,999 Yeah, another great thing you can do is there 917 00:44:01,999 --> 00:44:05,918 is a thing called Torito (phonetic) which is IPv6 over IPv4 UDP with built 918 00:44:05,918 --> 00:44:08,209 in hole punching and stuff. 919 00:44:08,209 --> 00:44:09,250 It is really sweet. 920 00:44:09,250 --> 00:44:11,083 It is actually built into Windows 7. 921 00:44:11,083 --> 00:44:13,125 If you are Windows 7, you already have it. 922 00:44:13,125 --> 00:44:14,667 You can go to IPv6 addresses. 923 00:44:15,083 --> 00:44:18,542 That's another thing where they don't know what that traffic is. 924 00:44:18,542 --> 00:44:20,999 So you just use that and then everything is fine. 925 00:44:20,999 --> 00:44:25,999 There is a lot of cool little shortcuts to getting your traffic past the filters 926 00:44:25,999 --> 00:44:28,999 by using a weird protocol. 927 00:44:28,999 --> 00:44:29,999 Stuff like that. 928 00:44:29,999 --> 00:44:30,999 All right. 929 00:44:30,999 --> 00:44:31,999 Thank you. 930 00:44:31,999 --> 00:44:34,250 So, yeah, I will be happy to talk to everybody. 931 00:44:34,250 --> 00:44:36,792 See you guys at the Q&A room or just see me around. 932 00:44:36,792 --> 00:44:37,999 Let's hang out. 933 00:44:37,999 --> 00:44:38,999 Let's get a beer. 934 00:44:38,999 --> 00:44:40,125 Invite me to some parties. 935 00:44:40,125 --> 00:44:41,125 Cool. 936 00:44:41,125 --> 00:44:42,125 Thank you. 937 00:44:42,125 --> 00:44:43,125 (applause).