|
|
Message-ID: <20181216175005.GA6555@openwall.com>
Date: Sun, 16 Dec 2018 18:50:05 +0100
From: Solar Designer <solar@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: Anyone knows what does this fuzzer message mean?
On Sat, Dec 15, 2018 at 10:08:25PM -0200, Claudio Andr?? wrote:
> The format seems to be working fine (to me).
>
> ```
> $ "$JtR" --fuzz --format=sha512crypt
> Fuzzing: sha512crypt, crypt(3) $6$ (rounds=5000) [SHA512 128/128 AVX 2x]...
> Warning: excessive partial hash collisions detected
> Completed
> All 1 formats passed fuzzing test!
> ```
The message comes from the loader when it encouters too many (by
default, more than 1000) same binary_hash()es, which slows down its dupe
hash check and is likely to slow down actual cracking as well (if the
same or a similar binary_hash*() is used within a salt, and the
collisions are seen within the salt as well). During fuzzing, this is
normal, because the fuzzer alters our test vector hashes in many simple
ways, resulting in a set of fake hashes that are not random-looking.
I've just used this loader hack to see the actual collision counts:
+++ b/src/loader.c
@@ -1229,6 +1229,7 @@ static void ldr_load_pw_line(struct db_main *db, char *line)
}
if (++collisions <= LDR_HASH_COLLISIONS_MAX)
continue;
+ continue;
if (john_main_process) {
if (format->params.binary_size)
@@ -1250,6 +1251,12 @@ static void ldr_load_pw_line(struct db_main *db, char *line)
break;
} while ((current_pw = current_pw->next_hash));
+ static int prevmax = 0;
+ if (collisions > prevmax) {
+ fprintf(stderr, "collisions=%d\n", collisions);
+ prevmax = collisions;
+ }
+
if (current_pw) continue;
}
For sha512crypt, the max collision count was over 3000. For some other
formats like raw-md5 and phpass, it was around 100. So these collisions
do occur for many (maybe all) formats, but only cross the threshold for
some. I suggest we suppress these warnings with the following patch:
diff --git a/src/john.c b/src/john.c
index c7181c8..fd15f9e 100644
--- a/src/john.c
+++ b/src/john.c
@@ -1694,6 +1694,13 @@ static void john_run(void)
#ifdef HAVE_FUZZ
else
if (options.flags & FLG_FUZZ_CHK || options.flags & FLG_FUZZ_DUMP_CHK) {
+/*
+ * Suppress dupe hash check because fuzzed ones often result in too many
+ * partial hash collisions.
+ */
+ options.loader.flags |= DB_WORDS;
+ list_init(&single_seed); /* Required for DB_WORDS */
+
ldr_init_database(&database, &options.loader);
exit_status = fuzz(&database);
}
Alternatively, we could export the skip_dupe_checking flag (currently
local to a function in loader.c) and set it from fuzz_test().
Or we could set a flag in the fuzzer and check it from the loader.
Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.