1 00:00:22,840 --> 00:00:23,460 Cool. 2 00:00:23,460 --> 00:00:24,300 Thank you very much. 3 00:00:24,300 --> 00:00:28,480 And I really appreciate being here, and I really appreciate your time. 4 00:00:28,480 --> 00:00:30,820 So I'm more than happy to answer any of your questions. 5 00:00:30,820 --> 00:00:33,260 I'm looking mostly at the Discord channel right now. 6 00:00:33,680 --> 00:00:37,000 My beard is awesome, and I'm not on a boat, but I wish I was. 7 00:00:37,320 --> 00:00:43,340 But just kind of... I didn't plan this out here, but you gotta respect the beard here. 8 00:00:43,380 --> 00:00:50,520 So on more serious questions here, I guess, what can I do to help answer? 9 00:00:53,020 --> 00:00:58,140 And so Markov, it really has very little math actually in it, too. 10 00:00:58,300 --> 00:01:00,300 It's just multiplication. 11 00:01:00,380 --> 00:01:03,760 So if you can do multiplication, there's not even any division. 12 00:01:04,480 --> 00:01:09,660 So you just look at the probability of one letter falling after another letter, falling after another letter there. 13 00:01:09,700 --> 00:01:13,640 And the more letters you have, the higher probability it usually is. 14 00:01:14,520 --> 00:01:19,300 Omin gets a little bit more complicated because they have this idea behind it called levels. 15 00:01:19,700 --> 00:01:23,200 But then you do it with some multiplication, and you just do addition instead. 16 00:01:23,200 --> 00:01:26,980 So the final level, the password, is summing all the levels across it. 17 00:01:27,120 --> 00:01:34,940 And the reason why you want to do that is because that's much faster than trying to do a more traditional Markov attack like you would see in John Ripper Markov mode. 18 00:01:35,440 --> 00:01:37,920 But there's a million different ways that you can do Markov. 19 00:01:37,920 --> 00:01:41,840 So I could talk to you all day about that if we want to just go ahead and get into that. 20 00:01:43,860 --> 00:01:49,840 Hashcat needs to update its Markov ability, though, because it is probably, of all the algorithms, the worst. 21 00:01:49,840 --> 00:01:52,300 But Hashcat's really fast, so it can get away with that. 22 00:01:57,050 --> 00:02:03,210 And I know you're just trying to be cheeky about that, but here's a... just trying to give you an answer to that, because I really enjoy it. 23 00:02:14,850 --> 00:02:31,270 It would be nice... the challenge is that the guest generation port could probably be extracted out, but figuring out what kind of rule to use is pretty much single-threaded, unfortunately. 24 00:02:32,790 --> 00:02:40,010 And that's really what takes all the time, is just trying to figure out which of the rules is currently the most probable in order to run. 25 00:02:40,010 --> 00:02:46,290 And that's why it takes so much memory, because it's basically building a probability queue of all different probabilities. 26 00:02:46,570 --> 00:02:49,830 It's going through... it has a kind of a tree type of a format there. 27 00:02:49,930 --> 00:02:53,150 So, long story short, I wish I could figure out how to do that. 28 00:02:53,330 --> 00:03:02,890 But where you're probably better off doing is, instead of trying to generate all the guesses in probability order, you could actually just go ahead and generate guesses behind a different probability threshold. 29 00:03:02,890 --> 00:03:07,050 So, all these guesses that are higher probability than this level here. 30 00:03:07,050 --> 00:03:11,190 And in that case, you could absolutely go ahead and multi-thread it for GPU. 31 00:03:11,190 --> 00:03:19,350 So, I've actually talked to some people about potentially getting this in a way so that you're not doing probability order, but you set that threshold, and you could actually run this in the GPU. 32 00:03:19,350 --> 00:03:26,470 And it's the fact that GPUs have more memory now, means you can start putting the base grammar inside GPU as well to help speed that up. 33 00:03:27,330 --> 00:03:31,790 So, I'm sorry, I should ask, answer, respond to the question here. 34 00:03:31,790 --> 00:03:36,690 So, the question was, could I run multiple PCFGs at once on multiple different GPUs? 35 00:03:36,910 --> 00:03:40,350 So, the short answer is, theoretically, yes. 36 00:03:40,450 --> 00:03:45,410 But I could definitely use some help in actually coding that up with somebody who's smarter than I am. 37 00:04:01,480 --> 00:04:03,020 So, does anyone else have any questions here? 38 00:04:03,020 --> 00:04:07,380 Or I could just keep on rambling here, too. 39 00:04:07,780 --> 00:04:16,320 So, one nice thing is being able to run this against a password list that you're currently cracking, too. 40 00:04:16,320 --> 00:04:23,140 Because it does do a pretty good job of stemming that and creating some really interesting input dictionaries for you to be able to use. 41 00:04:23,260 --> 00:04:35,280 So, if you're kind of going ahead and doing kind of like a fingerprint attack, just kind of run it around again there, it can actually extract some really useful bits for that to keep on launching against people. 42 00:04:50,170 --> 00:04:54,830 So, since I got like nine minutes left here, unless someone else asked a question. 43 00:04:54,830 --> 00:04:55,570 Oh, ramble away. 44 00:04:55,570 --> 00:04:57,050 Okay, sounds good here. 45 00:04:57,050 --> 00:05:03,210 So, the question is, or I guess what I could start talking about is where password crack PCFGs are kind of going in the future. 46 00:05:03,710 --> 00:05:08,710 So, one of my big goals is I really would like to be able to get incorporated into Hashcat. 47 00:05:08,930 --> 00:05:11,550 I started, you know, brainstorming that quite a while ago. 48 00:05:11,910 --> 00:05:21,190 That's part of the reason also why it uses the compiled C version I wrote it in the first place was because Hashcat, for some reason, does not actually run in Python because it's fast, I guess. 49 00:05:22,350 --> 00:05:34,070 So, that is, you know, ultimately kind of the end goal for that effort there is to actually incorporate it into Hashcat as a new cracking mode. 50 00:05:34,130 --> 00:05:41,410 The initial way I'm going to start looking at is actually having it run as a, Adam calls it a slow guesser mode, which pretty much defines this exactly. 51 00:05:42,410 --> 00:05:47,630 So, I want to be able to incorporate that as part of the Hashcat slow guessing modes that you can add in. 52 00:05:48,270 --> 00:05:57,310 Eventually, though, I would like to be able to start going ahead and seeing whether I can go ahead and paralyze the way it generates guesses and put into the GPU to make it much, much faster. 53 00:05:58,390 --> 00:06:06,850 So, there's other options too that potentially you could basically do... what really slows it down is generating all those rules. 54 00:06:06,990 --> 00:06:15,170 So, in an older version, I had actually had the ability to go ahead and pre-compute all those rules and be able to save those to disks. 55 00:06:15,210 --> 00:06:19,730 So, you could actually then completely paralyze it if you wanted to as well because there's no rule generation. 56 00:06:20,070 --> 00:06:22,470 So, that's another thing I could take a look back at there. 57 00:06:22,470 --> 00:06:25,470 The problem is that the rules are really fine grained. 58 00:06:25,930 --> 00:06:35,090 So, I almost want to go ahead and, in order to reduce the size of the rules on the disk, is to make the rules much kind of fatter, essentially. 59 00:06:35,090 --> 00:06:37,850 So, each rule would correspond to more password guesses. 60 00:06:38,470 --> 00:06:44,570 But that's definitely an option that I'm kind of looking at as well, is to make this more feasible to be able to be used. 61 00:06:49,770 --> 00:06:52,770 So, is there such a thing as a random PCFG rule? 62 00:06:53,170 --> 00:06:55,950 Are they human-readable or, well, geek-readable? 63 00:06:56,390 --> 00:06:59,010 So, the short answer is yes. 64 00:07:00,010 --> 00:07:11,110 So, if you hit this kind of status output of when you're running a PCFG, a cracking session, you'll kind of print out the text screen of what the current rule set looks like. 65 00:07:11,210 --> 00:07:15,070 And it looks a lot like a hashtag mask, actually. 66 00:07:15,370 --> 00:07:18,470 So, it just has a few extra different features onto it there. 67 00:07:18,470 --> 00:07:27,790 So, you'll see something like the... I use A for alpha string, but A5, so you know it's generating a five -letter word. 68 00:07:27,850 --> 00:07:35,210 And it'll have a number next to it saying what the probability , or ranking, I should say, of that five-letter word is. 69 00:07:35,530 --> 00:07:39,430 So, it'll say the 153rd most probable word, or number one. 70 00:07:39,430 --> 00:07:40,710 So, it'd be the first most probable word. 71 00:07:40,710 --> 00:07:41,750 So, that'd be password. 72 00:07:43,230 --> 00:07:46,830 So , in that case, you can kind of read it, and then you can see what the capitalization mode is. 73 00:07:46,830 --> 00:07:49,510 So, it'll say the most common capitalization mode for this here. 74 00:07:49,670 --> 00:07:52,770 And it'll say D2, and it'll be a number after that, too. 75 00:07:52,770 --> 00:07:57,210 It's the third most common two-letter, or two-digit number. 76 00:07:57,650 --> 00:08:00,410 So, you can kind of look at that and see what that rule is. 77 00:08:00,910 --> 00:08:08,870 So, because the way that it happens there, you could absolutely go ahead and create a random rule for that. 78 00:08:08,870 --> 00:08:11,850 Or you can just kind of look at it and read what it's actually doing. 79 00:08:12,290 --> 00:08:17,130 And so, you can go back to the grammar and say, okay, what is actually the 143rd most probable word? 80 00:08:17,230 --> 00:08:19,150 And it's, okay, so that's the word that it's using. 81 00:08:19,650 --> 00:08:23,310 And if the words have the same probability, they'll use just all of them there. 82 00:08:23,310 --> 00:08:27,230 So, there might be multiple different words that you only saw in the train set, let's say, twice. 83 00:08:27,270 --> 00:08:29,570 So, they'd all be used to the same probability in that rule. 84 00:08:30,370 --> 00:08:37,330 You can also create, when talking about random passwords, some work I did in the past was creating what's called honey words. 85 00:08:37,330 --> 00:08:41,830 So, these are passwords that look like human passwords. 86 00:08:42,090 --> 00:08:43,430 And PCFGs are really good for that. 87 00:08:43,430 --> 00:08:47,630 So, instead of trying to create the most probable password, you do a random walk through the grammar. 88 00:08:48,070 --> 00:08:50,550 And that way, you know, 1, 2, 3, 4, 5, 6 is still going to be very common. 89 00:08:50,550 --> 00:08:52,270 You're going to create that much more often than normal. 90 00:08:52,270 --> 00:08:54,830 But you also create some kind of random looking passwords too. 91 00:08:55,010 --> 00:09:08,610 And where this is really useful, for example, is if you're trying to set out a honeypot server, and you want to do like a honeypot Active Directory controller, and you don't want to go ahead and manually create a thousand different passwords for different fake users. 92 00:09:09,310 --> 00:09:12,210 So, that way, you can go ahead and run that. 93 00:09:12,250 --> 00:09:16,250 And you create passwords that, you know, if you glance at it, it looks somewhat real. 94 00:09:16,250 --> 00:09:18,050 You're still seeing like the really common passwords. 95 00:09:18,050 --> 00:09:20,410 You might see the company names, you know, the most common there. 96 00:09:20,790 --> 00:09:23,770 But you're still seeing some random other stuff as well. 97 00:09:24,170 --> 00:09:25,990 So, that's definitely some work. 98 00:09:25,990 --> 00:09:32,650 And improving upon that is I'd like to be able to create one that or a modification that where it has a biased random walk. 99 00:09:32,650 --> 00:09:37,770 So, that way that you can create passwords that look like they all came from the same user, but once again are, you know, somewhat different. 100 00:09:37,950 --> 00:09:41,410 So, that's definitely an area that's kind of fun to play around with. 101 00:09:50,400 --> 00:09:54,520 What have you seen in terms of variance between, say, company one and company two? 102 00:09:54,520 --> 00:09:55,980 So, that's just a question that was asked. 103 00:09:56,320 --> 00:10:01,120 And a short answer is I really haven't seen that. 104 00:10:01,260 --> 00:10:03,620 And by that, I mean, I'm a researcher. 105 00:10:03,720 --> 00:10:04,800 This is a hobby for me. 106 00:10:04,800 --> 00:10:09,740 So, almost every single dump that I've worked with has been, I would say, the public dumps. 107 00:10:09,960 --> 00:10:15,080 And while there definitely are company passwords that, you know, get pushed out there, especially if you look for, like, NTLM. 108 00:10:16,220 --> 00:10:18,740 But I'm a researcher. 109 00:10:18,740 --> 00:10:22,880 So, you'd actually have to ask, you know, someone like, you know, CoreLogic about that there. 110 00:10:22,880 --> 00:10:24,260 So, I'm not a really good person to answer. 111 00:10:24,320 --> 00:10:28,000 And that's why I'm always really interested in hearing these talks and talking to people who are actually doing this professionally. 112 00:10:28,440 --> 00:10:31,140 Because they're able to provide me that information there. 113 00:10:31,600 --> 00:10:33,640 But pretty much all I have from that is secondhand. 114 00:10:39,700 --> 00:10:41,300 So, we're getting to the end here. 115 00:10:41,300 --> 00:10:42,700 It looks like there's just a couple more minutes. 116 00:10:42,700 --> 00:10:45,840 So, if anyone has any questions, feel free to ask them. 117 00:10:46,240 --> 00:10:50,900 Otherwise, I really do appreciate you coming in and, you know, viewing this talk. 118 00:10:51,840 --> 00:10:56,760 As I said, I'm available on Twitter, at L-A-K-I-W. 119 00:10:57,540 --> 00:11:03,160 And if you really want to get in touch with me, the best way to do it is submit an issue to the GitLab repo. 120 00:11:03,700 --> 00:11:05,380 That's probably the best way. 121 00:11:05,780 --> 00:11:08,420 Because I pretty much obsessively track that there. 122 00:11:09,000 --> 00:11:10,700 And I'll definitely try to get back to you. 123 00:11:10,700 --> 00:11:12,440 But this is something that I find is really fun. 124 00:11:12,440 --> 00:11:14,820 And I really do appreciate you taking an interest in this. 125 00:11:25,330 --> 00:11:25,610 Cool. 126 00:11:25,610 --> 00:11:25,770 Yep. 127 00:11:25,770 --> 00:11:27,490 And I'll be on Discord for the rest of the weekend, too. 128 00:11:27,490 --> 00:11:29,830 So, if anyone has any questions, feel free to pop in there, too.