Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <87h83l0yjq.fsf@gmail.com>
Date: Sun, 03 Nov 2019 18:28:25 +0300
From: Aleksey Cherepanov <lyosha@...nwall.com>
To: john-users@...ts.openwall.com
Subject: team john-users write-up for CMIYC 2019

Team john-users competed in the Pro category in Crack Me If You Can
2019 online hash cracking competition held at DEFCON conference. We
are grateful to KoreLogic who organized this wonderful contest. Thank
you! We would like to thank other teams for impressive performance.
Congratulations to teams hashcat and CynoSure Prime! (ch3root asked me
to cut down overly sweet words, but I have to say again that this
contest was AWESOME!!!1eleven Both as a game and as an incentive to
inspect john deeper than usual.)

Contest Website [1]:
[1] https://contest-2019.korelogic.com/


    Team Members

Aleksey Cherepanov
Ivan U
Luis Rocha
Matt Weir
Viktor Gazdag aka wucpi
rofl0r
soxrok2212
trebla

We had 8 active members. Some of them were distracted by day jobs.
Also 4 other members provided ideas about types of the additional
files and interpretation of hints.


    Hardware Used

CPUs: ~100 cores / ~200 threads.

GPUs: ~18.

That's a rough estimation of hardware resources. Most of the time,
only a part of them was used.

We did not use our FPGAs in this contest because there were not any
hashes of supported formats.


    Software Used

- John the Ripper bleeding-jumbo [2]
- hashcat [3]
- PCFG Password Guesser [4]
- EtherCalc, multi-user web spreadsheet [5]
- auxiliary software, including custom scripts to handle cracks and
  submissions

[2] https://github.com/magnumripper/JohnTheRipper
[3] https://hashcat.net/hashcat/
[4] https://github.com/lakiw/pcfg_cracker/
[5] https://ethercalc.org/


    The Game

A set of scrypt hashes and additional files were provided to
participants. Parameters of most scrypt hashes were so that regular
CPU core could do only ~20 c/s. Not much... But there were the
additional files to help with it: each file was a container of
different type containing a set of weak hashes with old passwords and
a textual hint about way how new password was derived from the old
password. Almost all sets of hashes contained usernames. So an old
password could be tried against one respective scrypt hash usually
without need to check against all scrypt hashes. Some of the textual
hints contained almost straight description how to get passwords for
scrypt hashes from respective additional passwords.

Some of the additional files were protected with simple passwords.
Most of them were cracked with rockyou.txt dictionary. We postponed
one file till the following hint[6] from organizers:
----------------------------------------------------------------------
Hint: log2.rar  Take the original rockyou.txt  Lines: 52350 351450
920119 920120 2787667 4913443 7280588 7280589 7280590 7280591 7280592
7280593 7280594 7280595 7280596 7280597 - There is a common thread
between them.
----------------------------------------------------------------------
[6] https://twitter.com/CrackMeIfYouCan/status/1159995125600157696

We extracted 14 files with additional hashes (counting two files for
Alaska). The additional files contained weak types of hashes. More
details are available right from the orgs at [7] (but there is nothing
about mysterious 21 lm+nt pairs for Alaska pack). Most passwords were
not very strong and cracking went well. It felt good. OTOH points were
from scrypt hashes only.

[7] https://contest-2019.korelogic.com/stats-hashsets.html

Matt cracked the first scrypt in the first 20 minutes. It had empty
password. Then we found 10 more scrypt hashes with empty password and
it allowed us to stay #1 on the scoreboard for some time. Our next
scrypt crack happened 12 hours later: Luis found "yjovic4" for
user331522553. We checked the username against the additional files
and got the match: JBJ hashes had user331522553 with password
"yjovic8". So we used a one-liner script to pick a password from JBJ
and attack only respective scrypt hash picked by username, replacing
last character with a digit. We got 350 cracks quickly on a single CPU
core. It felt really good: we bypassed another critical point. Phew!

The scrypt hashes and most of the hashes from additional files had
usernames. Not all of usernames were in both lists. Some weak hashes
did not have usernames at all. We used precise matching for some time,
but Ivan questioned that and we found that there were a few usernames
among scrypt hashes with suffixes "-a", "-b", "-c" (e.g.
user3236124088-b). We did not analyze it deeper.

Example of our script to run 1 baseword vs 1 scrypt hash (reformatted):
----------------------------------------------------------------------
while IFS=: read -r u p; do
    printf '%s\n' "$p" > twl &&
    ./JohnTheRipper/run/john \
        --users="$u,$u-a,$u-b,$u-c" \
        results/uncracked/0.*.target.pw \
        --wordlist=twl \
        --rules=': sq1 sw2 se3 sr4 st5 sy6 su7 si8 so9 sp0';
done < results/pair_user_crack/14.raw-md5.fast-nosalt.log2.txt
----------------------------------------------------------------------

It was possible to notice that this script might be replaced by john's
single mode: username should be replaced with respective old password
and john would do everything else. Only after the contest, the idea
was explored weighting pros and cons objectively. It is worth a
separate thread[8]. (The first message contains some details specific
to the contest, that are not copied here.)

Subject: approaches to use old password as baseword for new hash
         matching by username/login (as in CMIYC 2019)
[8] https://www.openwall.com/lists/john-users/2019/10/06/1

In short, we underused hardware very much because the script was hard
to manage. Underusing hardware, we were slow in exploration of
patterns and missed a lot of cracks. It was the critical mistake.

Single mode should be the right tool for the job, but we did not try
this way at all during the contest. Most probably it was the main
content of the mistake, but it is hard to tell because single mode
would require tricky setup. Maybe we should try all approaches.

~3 hours before the end, Aleksey wrote a quick and dirty script to
distribute attacks. Then the script was running 60 threads across 4
machines picking prepared options+hash+baseword kits from shared pool
of work. It allowed us to finish many postponed ideas for JBJ's old
passwords plus some trivial checks against other packs. The results
were quite good, but it was late to get more.

During the contest, the organizers replaced some target hashes with
hashes of even newer passwords. The lists of new hashes were provided
on the site. But we almost ignored this aspect of the game till the
very end. Then we used cracked passwords for old target hashes and
applied --rules=o1. This job did not finish in time. Most probably
--rules=o1 was a too wide attack, but it was too late for tweaks.

Thanks for reading!

-- 
Regards,
Aleksey Cherepanov

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.