WEBVTT

00:22.840 --> 00:23.460
Cool.

00:23.460 --> 00:24.300
Thank you very much.

00:24.300 --> 00:28.480
And I really appreciate being here, and I really appreciate your time.

00:28.480 --> 00:30.820
So I'm more than happy to answer any of your questions.

00:30.820 --> 00:33.260
I'm looking mostly at the Discord channel right now.

00:33.680 --> 00:37.000
My beard is awesome, and I'm not on a boat, but I wish I was.

00:37.320 --> 00:43.340
But just kind of... I didn't plan this out here, but you gotta respect the beard here.

00:43.380 --> 00:50.520
So on more serious questions here, I guess, what can I do to help answer?

00:53.020 --> 00:58.140
And so Markov, it really has very little math actually in it, too.

00:58.300 --> 01:00.300
It's just multiplication.

01:00.380 --> 01:03.760
So if you can do multiplication, there's not even any division.

01:04.480 --> 01:09.660
So you just look at the probability of one letter falling after another letter, falling after another letter there.

01:09.700 --> 01:13.640
And the more letters you have, the higher probability it usually is.

01:14.520 --> 01:19.300
Omin gets a little bit more complicated because they have this idea behind it called levels.

01:19.700 --> 01:23.200
But then you do it with some multiplication, and you just do addition instead.

01:23.200 --> 01:26.980
So the final level, the password, is summing all the levels across it.

01:27.120 --> 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.

01:35.440 --> 01:37.920
But there's a million different ways that you can do Markov.

01:37.920 --> 01:41.840
So I could talk to you all day about that if we want to just go ahead and get into that.

01:43.860 --> 01:49.840
Hashcat needs to update its Markov ability, though, because it is probably, of all the algorithms, the worst.

01:49.840 --> 01:52.300
But Hashcat's really fast, so it can get away with that.

01:57.050 --> 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.

02:14.850 --> 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.

02:32.790 --> 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.

02:40.010 --> 02:46.290
And that's why it takes so much memory, because it's basically building a probability queue of all different probabilities.

02:46.570 --> 02:49.830
It's going through... it has a kind of a tree type of a format there.

02:49.930 --> 02:53.150
So, long story short, I wish I could figure out how to do that.

02:53.330 --> 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.

03:02.890 --> 03:07.050
So, all these guesses that are higher probability than this level here.

03:07.050 --> 03:11.190
And in that case, you could absolutely go ahead and multi-thread it for GPU.

03:11.190 --> 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.

03:19.350 --> 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.

03:27.330 --> 03:31.790
So, I'm sorry, I should ask, answer, respond to the question here.

03:31.790 --> 03:36.690
So, the question was, could I run multiple PCFGs at once on multiple different GPUs?

03:36.910 --> 03:40.350
So, the short answer is, theoretically, yes.

03:40.450 --> 03:45.410
But I could definitely use some help in actually coding that up with somebody who's smarter than I am.

04:01.480 --> 04:03.020
So, does anyone else have any questions here?

04:03.020 --> 04:07.380
Or I could just keep on rambling here, too.

04:07.780 --> 04:16.320
So, one nice thing is being able to run this against a password list that you're currently cracking, too.

04:16.320 --> 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.

04:23.260 --> 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.

04:50.170 --> 04:54.830
So, since I got like nine minutes left here, unless someone else asked a question.

04:54.830 --> 04:55.570
Oh, ramble away.

04:55.570 --> 04:57.050
Okay, sounds good here.

04:57.050 --> 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.

05:03.710 --> 05:08.710
So, one of my big goals is I really would like to be able to get incorporated into Hashcat.

05:08.930 --> 05:11.550
I started, you know, brainstorming that quite a while ago.

05:11.910 --> 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.

05:22.350 --> 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.

05:34.130 --> 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.

05:42.410 --> 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.

05:48.270 --> 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.

05:58.390 --> 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.

06:06.990 --> 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.

06:15.210 --> 06:19.730
So, you could actually then completely paralyze it if you wanted to as well because there's no rule generation.

06:20.070 --> 06:22.470
So, that's another thing I could take a look back at there.

06:22.470 --> 06:25.470
The problem is that the rules are really fine grained.

06:25.930 --> 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.

06:35.090 --> 06:37.850
So, each rule would correspond to more password guesses.

06:38.470 --> 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.

06:49.770 --> 06:52.770
So, is there such a thing as a random PCFG rule?

06:53.170 --> 06:55.950
Are they human-readable or, well, geek-readable?

06:56.390 --> 06:59.010
So, the short answer is yes.

07:00.010 --> 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.

07:11.210 --> 07:15.070
And it looks a lot like a hashtag mask, actually.

07:15.370 --> 07:18.470
So, it just has a few extra different features onto it there.

07:18.470 --> 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.

07:27.850 --> 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.

07:35.530 --> 07:39.430
So, it'll say the 153rd most probable word, or number one.

07:39.430 --> 07:40.710
So, it'd be the first most probable word.

07:40.710 --> 07:41.750
So, that'd be password.

07:43.230 --> 07:46.830
So , in that case, you can kind of read it, and then you can see what the capitalization mode is.

07:46.830 --> 07:49.510
So, it'll say the most common capitalization mode for this here.

07:49.670 --> 07:52.770
And it'll say D2, and it'll be a number after that, too.

07:52.770 --> 07:57.210
It's the third most common two-letter, or two-digit number.

07:57.650 --> 08:00.410
So, you can kind of look at that and see what that rule is.

08:00.910 --> 08:08.870
So, because the way that it happens there, you could absolutely go ahead and create a random rule for that.

08:08.870 --> 08:11.850
Or you can just kind of look at it and read what it's actually doing.

08:12.290 --> 08:17.130
And so, you can go back to the grammar and say, okay, what is actually the 143rd most probable word?

08:17.230 --> 08:19.150
And it's, okay, so that's the word that it's using.

08:19.650 --> 08:23.310
And if the words have the same probability, they'll use just all of them there.

08:23.310 --> 08:27.230
So, there might be multiple different words that you only saw in the train set, let's say, twice.

08:27.270 --> 08:29.570
So, they'd all be used to the same probability in that rule.

08:30.370 --> 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.

08:37.330 --> 08:41.830
So, these are passwords that look like human passwords.

08:42.090 --> 08:43.430
And PCFGs are really good for that.

08:43.430 --> 08:47.630
So, instead of trying to create the most probable password, you do a random walk through the grammar.

08:48.070 --> 08:50.550
And that way, you know, 1, 2, 3, 4, 5, 6 is still going to be very common.

08:50.550 --> 08:52.270
You're going to create that much more often than normal.

08:52.270 --> 08:54.830
But you also create some kind of random looking passwords too.

08:55.010 --> 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.

09:09.310 --> 09:12.210
So, that way, you can go ahead and run that.

09:12.250 --> 09:16.250
And you create passwords that, you know, if you glance at it, it looks somewhat real.

09:16.250 --> 09:18.050
You're still seeing like the really common passwords.

09:18.050 --> 09:20.410
You might see the company names, you know, the most common there.

09:20.790 --> 09:23.770
But you're still seeing some random other stuff as well.

09:24.170 --> 09:25.990
So, that's definitely some work.

09:25.990 --> 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.

09:32.650 --> 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.

09:37.950 --> 09:41.410
So, that's definitely an area that's kind of fun to play around with.

09:50.400 --> 09:54.520
What have you seen in terms of variance between, say, company one and company two?

09:54.520 --> 09:55.980
So, that's just a question that was asked.

09:56.320 --> 10:01.120
And a short answer is I really haven't seen that.

10:01.260 --> 10:03.620
And by that, I mean, I'm a researcher.

10:03.720 --> 10:04.800
This is a hobby for me.

10:04.800 --> 10:09.740
So, almost every single dump that I've worked with has been, I would say, the public dumps.

10:09.960 --> 10:15.080
And while there definitely are company passwords that, you know, get pushed out there, especially if you look for, like, NTLM.

10:16.220 --> 10:18.740
But I'm a researcher.

10:18.740 --> 10:22.880
So, you'd actually have to ask, you know, someone like, you know, CoreLogic about that there.

10:22.880 --> 10:24.260
So, I'm not a really good person to answer.

10:24.320 --> 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.

10:28.440 --> 10:31.140
Because they're able to provide me that information there.

10:31.600 --> 10:33.640
But pretty much all I have from that is secondhand.

10:39.700 --> 10:41.300
So, we're getting to the end here.

10:41.300 --> 10:42.700
It looks like there's just a couple more minutes.

10:42.700 --> 10:45.840
So, if anyone has any questions, feel free to ask them.

10:46.240 --> 10:50.900
Otherwise, I really do appreciate you coming in and, you know, viewing this talk.

10:51.840 --> 10:56.760
As I said, I'm available on Twitter, at L-A-K-I-W.

10:57.540 --> 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.

11:03.700 --> 11:05.380
That's probably the best way.

11:05.780 --> 11:08.420
Because I pretty much obsessively track that there.

11:09.000 --> 11:10.700
And I'll definitely try to get back to you.

11:10.700 --> 11:12.440
But this is something that I find is really fun.

11:12.440 --> 11:14.820
And I really do appreciate you taking an interest in this.

11:25.330 --> 11:25.610
Cool.

11:25.610 --> 11:25.770
Yep.

11:25.770 --> 11:27.490
And I'll be on Discord for the rest of the weekend, too.

11:27.490 --> 11:29.830
So, if anyone has any questions, feel free to pop in there, too.

