вторник, 16 сентября 2014 г.

John the Ripper

www.openwall.com/john

Получить исходники последней версии:
git clone -b bleeding-jumbo git://github.com/magnumripper/JohnTheRipper JohnTheRipper
Инструкции по компиляции - в каталоге с исходниками. Будем использовать именно эту версию сообщества. Она более функциональна, в отличие от той, что бесплатно предоставляет OpenWall.

--test - запустить бенчмарк. Для бенчмарка можно указать конкретный тип хэша, например: --format=bitcoin.




 

 

 

 

 

 

Все полученные пароли (и их хэши) сохраняются в файле $JOHN/john.pot.
Показать полученные пароли призван параметр --show file следом за которым нужно укзать файл хэшей.

Типичная строка состояние перебора (отображается по нажатию любой клавиши) выглядит так:
0g 0:00:11:27 35,46% (ETA: 23:46:35) 0g/s 133.9p/s 407.8c/s 407.8C/s SS56789..12031956
0g - число подобранных паролей
0g/s - число подобранных паролей в секунду
133.9p/s - проверок пароля в секунду (для всех хэшей)
407.8c/s - проверок хэша в секунду
407.8C/s - комбинаций пароль-хэш (?) в секунду
В этом примере подбирается пароль для трёх хэшей, поэтому число проверок хэша/сек. в три раза больше чем число проверок пароля/сек.

Linux passwords

Хэши паролей хранятся в /etc/shadow [ Understanding /etc/shadow file, wikipedia Shadow_file ].
Например, для пользователя root запись в shadow может выглядеть так:
root:X014elvznJq7E:15943:0:99999:7:::
Хэш пароля выделен зелёным.
или так
aychedee:$6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/:15405:0:99999:7:::Все поля разделены двоеточием.
1. Логин пользователя aychedee -
2. Хэш и информация о шифровании. $6$vb1tLY1qiY$M.1ZCqKtJBxBtZm1gRi8Bbkn39KU0YJW1cuMFzTRANcNKFKR4RmAQVk4rqQQCkaJT6wXqjUkFcA/qNxLyqW.U/
Здесь поля разделены знаком доллара $
2.1 Тип хэша 6
On GNU/Linux, "$1$" stands for MD5, "$2a$" is Blowfish, "$2y$" is Blowfish (correct handling of 8-bit chars), "$5$" is SHA-256 and "$6$" is SHA-512, other Unix may have different values. [man]
2.2 Соль vb1tLY1qiY
2.3 Хэш, здесь это SHA-512 (86 символов). Формат в John --format=sha512crypt
3. Число дней спустя начало эпохи UNIX (1 января 1970) до дня, когда пароль последний раз был изменён.
Остальные поля обычно используются редко и отвечают в частности за политику изменения паролей.

Пример*

cp /etc/shadow .
cp /etc/passwd .
unshadow passwd shadow > passwords
john passwords





*программу unshadow можно найти в каталоге с john

Другие типы хэшей

Явно указать тип хэша --format=<hash-type>
john --format=raw-md5 md5-text 
Указать словарь --wordlist=<wordlist-file>
john --wordlist=/pentest/john-1.7.9-jumbo5/run/password.lst hash-file.txt
Для файла с единственным md5 хэшем d8578edf8458ce06fbc5bb76a58c5ca4 вывод будет следующим:





Угаданные пароли и их число отмечены жёлтым.

Извлечение хэша

В каталоге, где располагается исполняемый файл john, присутствует множество других программ, каждая из которых выполняет ровно одно действие: извлекает хэш, например из файла-кошелка bitcoin, с которым уже может работать john.
/opt/jumbo1.8/bitcoin2john.py wallet.dat > wallet.hash
Хэш, извлечённый из зашифрованого wallet.dat
$bitcoin$96$75de603ebb2213129fcc4b8603cdaababa3e606907ebdf0da43994616ff731d60b3f9881be6a3ae4b87a36ec297f23d0$16$1d2da7bb119fd59a$158407$96$8d058a511f1411c787ccf0a08b65d2415448345b5e8f85142e7546d8bb9630b2860cd8fa69224c92fb452aaa6a8f1db1$66$03f8e808b4e4e113dd8a32d71119754be2c730a77c5a9a78719877f51ec1def0ad
Далее можно приступать к перебору:
/opt/jumbo1.8/john wallet.hash --format:Bitcoin
Loaded 1 password hash (Bitcoin [SHA512 AES 128/128 SSE4.1 2x])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
12345678         (?)
1g 0:00:00:00 DONE 2/3 (2014-09-17 16:06) 1.315g/s 10.52p/s 10.52c/s 10.52C/s 123456..abc123
Use the "--show" option to display all of the cracked passwords reliably
Session completed

Алсо
 Вычислить md5 хэш можно следующим образом
echo -n "[eqyz" | openssl md5

Правила (rules

Синтаксис описан по ссылке выше. Правила используются для преобразования перебираемых паролей (например из словаря). Таким образом применяя правила можно увеличить (или при необходимости уменьшить) объём перебираемых паролей, преобразуется одно и то же слово в верхний\нижний регистр, повторяя его, добавляя к нему другое и т.п. Правила описываются в файле john.conf.
Самый очевидный способ это сделать, включить правила в режиме словаря
john --wordlist=all.lst --rules mypassw
Здесь нет необходимости приводить имя конкретного набора правил после ключа --rules. Правила для перебора по словарю приведены в разделе [List.Rules:Wordlist].


Добавим правило с названием CaseCASE: оставить слово как есть (:), преобразовывать в верхний регистр слово целеком (u), первую букву (с) и всё кроме первой буквы (C):
# Wordlist mode rules
[List.Rules:CaseCASE]
:
u
c
C

Теперь каждое слово из словаря будет проверятся как есть, в верхнем регистре и c заглавной буквой, нужно только указать название правила:
john hash --format=mscash --wordlist=wordlist.lst --rules=CaseCASE
Другие примеры команд используемых в описаниях правил:
t  - "переключить" раскладку в слове: Qwerty -> qWERTY;
r  - читать слова справа на лево: "Fred" -> "derF";
d  - "удвоить" слово: "Fred" -> "FredFred";
$X  - добавить символ X в конец слова;
^X  - добавить символ X в начало слова;
AN"STR" вставить строку STR в слово начиная с номера символа N
Чтобы добавить строку в конец, вместо номера символа - "z", 0 - добавить строку перед словом;
@X - удалить все вхождения символа X в слово.

Можно добавлять к слову не только постоянное выражение, но и символы из заданного диапазона:

$"[0-9]" - добавить одну цифру из диапазона от 0 до 9 в конец слова;
Az"[0-9][a-z]" - можно добавлять несколько символов из разных диапазонов;
$"[a-zA-Z]" - добавить символ из объединённых диапазонов;
$"[XYZ]" - добавить один символ из перечисленных;
Az"20[0-1][0-9]" - добавить числа с 2000 по 2019;
sXY - заменить символ X на Y.
Если производится замена одного символа на другой, то лучше сперва проверить, присутствует ли первый в слове, иначе слово останется без изменений. Получается, что john лишний раз проверит неизменённое слово. Чтобы этого избежать, сточит использовать следующее выражение
/XsXY - если в слове есть символ X, то заменить его на Y, иначе пропустить слово.


В Интернете опубликованы множество наборов правил, в том числе в wiki разработчиков john. Не обязательно добавлять новые правила в john.conf копипастой, лучше добавить файл правил указав его расположение, например: .include <KoreLogic.rules>. Здесь файл должен располагаться там же, где и john.conf.

***

Использовать John для генерации словаря (--stdout)
john --incremental --stdout > wordlist
Сессии
Продолжить предыдущую прерванную сессию:
john --restore 
при необходимости указать файл (john.rec, без расширения) в котором записана  информация (параметры и состояние) о последней сессии:
john --restore=/opt/jumbo1.8/john
Именованные сессии удобно использовать если запущенно несколько экземпляров приложения. Давать названия (--session=NAME) можно только новым сессиям. Узнать состояние предыдущей или указанной сессии --status[=NAME].

***

Отправка сообщения по окончанию процесса перебора
Процесс подбора пароля ожидаемо может быть долгим, поэтому логичным будет как-то информировать пользователя об его окончании. Самый простой путь - добавить комманду через точку с запятой после вызова john:
john --format=raw-md5 md5-text; notify-send "John complited"
Обыкновенный вывод уведомления на экран программой notify-send не подходит, то можно отправить XMPP сообщение программой sendxmpp или емейл программой mailx. [linux notes]

Если возникает необходимость настроить отправку сообщения когда john уже запущен и нет желания прерывать его работу, то можно воспользоваться простеньким однострочным скриптом:
while [ `pidof john` ]; do sleep 10; done; notify-send "..."
Скрипт будет выполнять команду sleep 10, до тех пор пока он может получить pid процесса с именем john. Затем, когда pid не будет получен (процесс john завершится) выполнится следующая комманда - notify-send. Разумеется для корректной работы скрипта нужно чтобы работал только один экземпляр процесса john.

Ссылки

http://blog.thireus.com/cracking-story-how-i-cracked-over-122-million-sha1-and-md5-hashed-passwords
http://blog.thireus.com/tag/john-the-ripper
JTR CHEAT SHEET

Crunch – Как создать словарь для брута
пароли Windows
online md5 decryptor 

1 комментарий: