Показать сообщение отдельно

  #3  
Старый 06.08.2007, 04:05
Thanat0z
Постоянный
Регистрация: 06.12.2006
Сообщений: 762
Провел на форуме:
5352530

Репутация: 2062


По умолчанию

Код:
[List.Rules:dic_wo_numbers]
!?d

[List.Rules:dic_wo_s] 
!?s

[List.Rules:dic_wo_p] 
!?p

[List.Rules:dic_wo_u] 
!?u

[List.Rules:dic_4des] 
<9

[List.Rules:dic_cut8] 
'8

[List.Rules:dic_cut8ex] 
'8Q

[List.Rules:dic_u2l]
/?ul

[List.Rules:dic_ad]
(?a)?d

[List.Rules:dic_dsp]
!?d!?s!?p
Пояснения:
Код:
dic_wo_numbers - откинули слова, в которых есть цифры
dic_wo_s       - откинули слова, в которых есть спецсимволы
dic_wo_p       - откинули слова, в которых есть знаки пунктуации
dic_wo_u       - откинули слова, в которых есть прописные буквы
dic_4des       - откинули слова, в которых есть слова более 8 символов
dic_cut8       - обрезали слова до 8 символов
dic_cut8ex     - обрезали слова до 8 символов и оставили только их
dic_u2l        - слова с вхождением прописных букв стали теперь только со строчными буквами
dic_ad         - оставили слова которые начинаются с буков и заканчиваются цифрой
dic_dsp        - за раз откинули цифры, спецсимволы и пунктуацию.
Не панацея от всех бед, но использовать можно.

А если захотите к примеру словарик с годами, можно сделать так
Код:
john.md.exe -session=1 -mask:19\d\d -stdout
5. Чарсеты

Чарсет - файлы с расширением chr которые представляют собой схему/таблицу в которой согласно статистическим данным учитывается вероятность появления символов на какой-то позиции и в большом ряде случаев позволяет максимально сократить время нахождения пароля.
Чарсеты используются во время режима incremental, слова выдаваемые чарсетом могут быть разными, взависимости от того по каким критериям он создавался. Чарсет генерируется на основе уже найденных паролей, то есть через файл john.pot. Если вы нашли только пароли qwerty и hotsex, то естественно чарсет на этой основе будет хиленьким, и мягко говоря бесполезным.
Допустим у вас pot-ный файл в 1 мб. Тут совершенно очевидно что в нём пароли разной длины и из символов разных множеств. Чарсет составленный из всех множеств символов называется all.chr и есть в стандартной поставке. В конфиге его описание будет приблизительно такое

Код:
[Incremental:All]
File = $JOHN/all.chr
MinLen = 7
MaxLen = 7
CharCount = 95
MinLen и MaxLen соответственно минимальная и максимальная длина для слов которые будут кандидатами в пароль, а CharCount = 95 количество символов.
Стоит напомнить что в режиме incremental возможно получить слова максимальной длинной в 8 символов.
Код:
john -i:All -stdout > __charset-all.txt
words: 3725912  time: 0:00:00:01 0%  w/s: 2620K  current: abe8014
Session aborted
Фрагмент файла __charset-all.txt
Код:
aporidt
aporian
aporial
aporiam
aporia1
aporias
aporia2
aporiac
aporia!
Посмотрев на этот фрагмент (не увлекайтесь, за секунду вы получите файл в 20-50 мб), вы можете спросить "множество из 95, а получаем слова только ld/ls". И вы будете правы - получаемые слова не обязательно будут содержать хотя бы один символ из множеств, с которыми он создан, и как это обойти, я покажу позже.

В чем же особенность использования режим incremental? - в том что после того как будет попробована комбинация 123, то не обязательно следующими будет 124 и 125. Это для режима mask мы имеем некий линейный счетчик, а с чарсетами ситуация будет другая, на основе анализа john.pot который заложен в чарсете и будет предпринят следующий шаг.
Код:
aporian
aporial
aporiam
aporia1
как вы сами видите здесь нет линейности. Таким образом, пароли будут находиться взависимости от того, насколько часто встречалась та или иная комбинация символов в john.pot файле на момент создания чарсета.

И так, имеем john.pot с найденными паролями. Сделаем свой чарсет.
Код:
john -make:_newcharset.chr
Loaded 14581 plaintexts
Generating charsets... 1 2 3 4 5 6 7 8 DONE
Generating cracking order... DONE
Successfully written charset file: _newcharset.chr (73 characters)
если мы хоти его использовать, вносим в конфиг изменения:
Код:
[Incremental:charset1]
File = $JOHN/_newcharset.chr
MinLen = 5
MaxLen = 7
CharCount = 73
Если мы укажем CharCount отличный от того, который был указан во время создания, то джон нас об этом предупредит.
Во время генерации чарсета джон не смотрит в конфиг, так что вы можете после еще раз создать чарсет с таким же именем, он его просто перезапишет.
Протестируем наш чарсет
Код:
john -i=charset1 passfile
Следует отметить, что больше всего результатов incremental дает в начале атаки.
Какие результаты дают чарсеты?
Тестировалось на базе в 83к. Когда было найдено словарями и прочим всё основное, это около 8000 паролей (не уникальных), я создал чарсет по уже найденным паролям - pot.chr, а потом создал чарсет основанный на словаре имен - names.chr (вы спросите "как?" - оставайтесь с нами, и вы узнаете ). Результаты такие
Код:
1 час - 71 - pot.chr
1 час - 48 - names.chr
Или другой тест, берем чистую базу, и прогоняем ее словарем имен (от 5 символов) и чарсетом построенном на этом словаре.
Код:
Loaded 83139 password hashes with 4096 different salts (Traditional DES)
     найдено	|charset| dictionary 
=====================================
 241 passwords	|  11m	|  03m 55s 
 211 passwords	|  10m	|  03m 25s 
 100 passwords	|  03m	|  01m 22s 
  58 passwords	|  01m	|  00m 40s
Все 5 буквенные имена по словарю перебрало за 4m53s, кстати.

Не много по сравнению со всей базой, но хоть какой-то результат когда уже выхода паролей нет. Не особо смотрите на время, когда вы столкнетесь с базой в сотни тысяч DES хешей со всеми 4096 солями, вам 1 час покажется мелочью. Из этой базы за 3 не полных суток основными правилами и словарями было найдено в районе 12-15к паролей. Для md5 проще, за несколько часов из базы в 100к хешей я нахожу от 30% паролей.

6. External, builtin
External - внешние переборщики
Как вам уже известно, джон может работать в разных режимах. Один из них External. В чем же его особенность? - в том что он создает слово (wordlist, к примеру воздействует на что-то).

Вы видели когда-нибудь пароли типа qweasd123 или ui78op90? Это последовательности на клавиатуре, как правило близкие по расположению клавишь. Можно сесть, открыть перед собой текстовый файлик, и возможно через сутки вы забьете туда что-то стоящее. Правда у вас будет болеть спина, руки, и e вас перед глазами постоянно будет вид вашей клавы, на которую вы пялились добрых 20 часов. Совсем как у меня после написания этого материала
В одной из официальных версий JTR в конфиг был включен переборщик Keyboard, с его помощью как раз можно найти такие пароли. Этот переборщик (и Keyboard_nospec) вы можете найти в соседней теме, или прямые линки кому лень искать:
http://forum.antichat.ru/showpost.ph...29&postcount=3
http://forum.antichat.ru/showpost.ph...29&postcount=4
В чем разница между ними? - Keyboard_nospec генерирует пароли без спецсимволов - только цифры и строчные буквы. Обратите внимание на параметр fuzz - время перебора больше, но и пароли сложнее находит.

Вот небольшой фрагмент из того что нашлось через эти переборщики:
Код:
1234rg           (<Unnamed>)
2qwer4           (<Unnamed>)
2qwer4           (<Unnamed>)
2q2w3e           (<Unnamed>)
vfr45            (<Unnamed>)
w1234            (<Unnamed>)
rgbgf            (<Unnamed>)
zsedc            (<Unnamed>)
cfert            (<Unnamed>)
bvder            (<Unnamed>)
5tgfr4           (<Unnamed>)
7u7u7u           (<Unnamed>)
90polo           (<Unnamed>)
ert56y           (<Unnamed>)
asdsw2           (<Unnamed>)
Вот результаты выполнения для Keyboard_nospec на уже предварительно обработанной базе DES в ~70к

для 5 символов
Код:
fuzz: 0 - guesses: 1  time: 0:00:00:27  c/s: 11730K  trying: mju7u - mjmjm
fuzz: 1 - guesses: 5  time: 0:00:05:37  c/s: 11700K  trying: mko9i - mkmkm
для 6 символов
Код:
fuzz: 0 - guesses: 5  time: 0:00:01:36  c/s: 11694K  trying: mjuikj - mjmjmj
fuzz: 1 - guesses: 12  time: 0:00:37:18  c/s: 11638K  trying: mkmkjh - mkmkmk
для 7 символов тестировал только с fuzz=0
Код:
guesses: 1  time: 0:00:05:34  c/s: 11683K  trying: mjmnhyt - mjmjmjm
6.1 Создание специальных чарсетов - фильтры

И так, вернемся к incremental и созданию специальных чарсетов.
Вы хотите перебирать по чарсету All, но вам не нравится, что этот чарсет перекрывает чарсет Alpha и Digits. С одной стороны хорошо - вы захватываете чуть большое множество паролей, но с другой стороны выполняете возможно лишнюю работу, а если вы точно знаете что должны быть строчные буквы в пароле? У вас есть два решения

1)
Код:
john -make=charset.chr -e=Filter_Alpha
Что случится после выполнения это команды? В чарсет попадут только те слова, которые были из буков, и ничего более. Посмотрите в конфиг, там есть несколько фильтров, которые могут вам пригодиться.

2)
Код:
john -make=low.chr -builtin=l
Вот мы и добрались до загадочного набора builtin. В данном случае мы делаем тоже самое что и в первом примере, но используем множество l.
Таким образом создавая свои множества простым перечислением нужных символов, вы можете обойтись без внешних переборщиков. Описание секции Builtin в самом начале конфига.

А теперь посмотрите на следующие примеры, и оцените какие возможности открываются за счет внешних переборщиков и builtin
Код:
john -make=Some -builtin=ud
john -i=All -e=Filter_Alpha
john -i=All -builtin=v    
(v = aeijou)
Стоит заметить, что когда вы используете конструкцию типа -e:mixed (где mixed к примеру lds) или -builtin:lds, то результатом будет именно общее множество, то есть "l AND d AND s", пример
Код:
suxx5!
d1ngo%
$akura11
Зачем вам lds? Простой пример - корпоративная политика в фирме, которая говорит, что пароль должен быть обязательно вида "password;01". Кстати замечание по этому поводу - лично свидетель того, что многие пользователи из-за своей лени не далеко уходят от этого пароля, к примеру они каждую неделю меняют его просто на что-то типа "password;02" то есть меняют только последнюю цифру или незначительно его изменяют.

Еще пример. Представим что вы регулярно сидите в комп-клубе. И там есть паренек-гопарек, каждый день он отбирает у малышей в клубе деньги, и сидит ночами на порносайтах под мемберскими аккаунтами. Так как вы человек мирный, лицо бить ему не будете, но справедливость должна восторжествовать, вы должны что-то сделать и вы уже добыли его хеши от порносайтов. Понаблюдаем за ним - он целую ночь сидит согнувшись над столом, правая рука что-то делает под столом, а левая на клаве. Куда бы вы положили левую руку на клаве? Могу предположить что явно не с правой стороны.
"Ага, - думаете вы - чертов онанист, наверное, пароль набирает легкий и левой рукой".

Смотрим на клаву и вспоминаем статистику паролей которые вы видели. Создаем какие-то множества в builtin, тут уже всё зависит от вашей фантазии и какой статистикой она подкормлена, к примеру:
Код:
[Builtin]
z=12345qazwsxedc
x=wersdf12345
q=qwerty12345
Еще раз посмотрите на клаву и вспомните частые пароли типа qwe123qaz.
Готовим танки:
Код:
john -make=z -builtin=z
john -make=x -builtin=x
john -make=q -builtin=q
Создали чарсеты, в них вышло по 12 и 14 символов, не так много, затраты времени по расшифровке будут мизерными, можно сравнивать с множеством digits.
В бой:
Код:
john.des.exe -i=z pornogop.txt
Loaded 10 password hashes with 10 different salts (Traditional DES [64/64 BS MMX])
guesses: 0  time: 0:00:00:04 0%  c/s: 11110K  trying: 1qazewx - 2wesws
qezz132 (Pornogop1)
И вот не прошло и минуты у вас есть один из паролей. А на утро уже все дети смотрят халявную порнуху - в итоге все рады, плохой человек наказан, а вы радуетесь новым достижениям.

7. Соль и скорость
Когда я писал материал "Заметки: какой брутер выбрать" я допустил серьезную ошибку, повелся на циферки в джоне, и по аналогии с другими программами счел что скорость показывается в пароль/секунда и что чем больше хешей, тем скорость больше. Спасибо что sic57005 и segamegasega обратили на это внимание. Но я был молод и глуп, и вообще это было давно и не правда Сегодня я попробую исправить свои ошибки в этом плане.

7.1 Понятие скорости в JTR

И так, что же кроется за волшебными символами c/s в джоне? На сайте джона можно найти следующее
Цитата:
Q: Why does John display meaningless c/s values while cracking, instead
of real "crypts per second" rate?
A: The values displayed by John mean combinations (of username and
password) per second, not crypts per second. This is the effective
cracking speed that you get on a particular set of password hashes.
Future versions of John the Ripper might report effective and raw c/s rates for different time intervals. These won't fit on the current status line, though.
Учитывая это и то что я смог найти по этой проблеме могу русским языком сказать следующее :
1) реальную скорость можно узнать лишь опцией -test, но и этот метод показывает очень странные цифры
2) c/s - это комбинаций/сравнений в секунду
3) скорость, которая показывается во время работы джона, есть пункт 2
4) сравнения в секунду значит - зашифровать и сравнить, не просто зашифровать
5) во время работы высчитывается средняя скорость
6) по завершению высчитывается общая суммарная скорость
То что показывается во время работы джона можно приблизительно представить формулой
Код:
Vo = Vt * Х

Х = количество хешей
Vt = скорость перебора в режиме -test, то есть 1 хеш

То есть можно сказать что:
Vo - это относительная скорость скорость (учитывает что надо сделать Х проверок, чтобы проверить один хеш после операции crypt)
Vt - это абсолютная скорость (определяется быстротой операции crypt)
Цифры из реальности:
Код:
john.dessql.exe -test

Benchmarking: Traditional DES [64/64 BS MMX]... DONE
Only one salt:  643782 c/s
Only one salt:  645267 c/s
Only one salt:  649967 c/s
Три теста показали разную скорость, на самом деле с такими цифрами, погрешность терпимая

На практике:
Код:
john.dessql.exe -mask:\d\d\d\d\d\d\d 111des.txt
Loaded 1 password hash (Traditional DES [64/64 BS MMX])
time: 0:00:00:15 100%  c/s: 649730
time: 0:00:00:15 100%  c/s: 655050
time: 0:00:00:15 100%  c/s: 652400
time: 0:00:00:15 100%  c/s: 653722
time: 0:00:00:15 100%  c/s: 654407
time: 0:00:00:15 100%  c/s: 651720
time: 0:00:00:15 100%  c/s: 651720
time: 0:00:00:15 100%  c/s: 654407
time: 0:00:00:15 100%  c/s: 652400
time: 0:00:00:15 100%  c/s: 656426
Посмотрим с freebsd md5, алгоритм медленней, и нету таких погрешность как у DES в несколько тысячь
Код:
john.md.exe -test -format=md5
Benchmarking: FreeBSD MD5 [32/32]... DONE
Raw:    5390 c/s
Raw:    5282 c/s
Raw:    5322 c/s
Raw:    5308 c/s
Raw:    5391 c/s
Raw:    5391 c/s
Raw:    5363 c/s
Raw:    5391 c/s
Raw:    5335 c/s
Raw:    5377 c/s
Raw:    5391 c/s
Raw:    5391 c/s
Raw:    5391 c/s
Практика:
Код:
john.md.exe -mask:\d\d\d\d\d 111md.txt
Loaded 1 password hash (FreeBSD MD5 [32/32])
time: 0:00:00:18 100%  c/s: 5329
time: 0:00:00:18 100%  c/s: 5369
time: 0:00:00:18 100%  c/s: 5373
time: 0:00:00:18 100%  c/s: 5373
time: 0:00:00:18 100%  c/s: 5369
time: 0:00:00:18 100%  c/s: 5369
time: 0:00:00:18 100%  c/s: 5369
time: 0:00:00:18 100%  c/s: 5373
time: 0:00:00:18 100%  c/s: 5369
time: 0:00:00:18 100%  c/s: 5373

john.md.exe -mask:\d\d\d\d 111md.txt
Loaded 2 password hashes with 2 different salts (FreeBSD MD5 [32/32])
time: 0:00:00:37 100%  c/s: 5335
time: 0:00:00:37 100%  c/s: 5375
time: 0:00:00:37 100%  c/s: 5360
time: 0:00:00:37 100%  c/s: 5373
time: 0:00:00:37 100%  c/s: 5375
Лично для меня главное не та скорость что показывается во время работы, а то время какое я в итоге затрачу.

7.2 Соли и разница во времени

А теперь посмотрим, что быстрее, 5 раз по 1, или 1 раз по 5?

Код:
Loaded 1 password hash (Traditional DES [64/64 BS MMX])
time: 0:00:00:15 100%  c/s: 657764
 
Loaded 2 password hashes with 2 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:29 100%  c/s: 679417
 
Loaded 3 password hashes with 3 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:43 100%  c/s: 687426

Loaded 4 password hashes with 4 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:57 100%  c/s: 691706
 
Loaded 5 password hashes with 5 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:01:12 100%  c/s: 692492
Что это значит? Что если бы мы подбирали отдельно 5 хешей, мы бы затратили времени на это 01:15, а если за раз все пять, то 01:12.

Но при этом обратите внимание:
Код:
john.dessql.exe -mask:\d\d\d\d\d\d 1.txt
Loaded 1 password hash (Traditional DES [64/64 BS MMX])
time: 0:00:00:01 100%  c/s: 621118

Loaded 100 password hashes with no different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:01 100%  c/s: 60386K

Loaded 4 password hashes with 4 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:05 100%  c/s: 682710

Loaded 20 password hashes with 4 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:05 100%  c/s: 3359K

Loaded 20 password hashes with 8 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:11 100%  c/s: 1729K

Loaded 20 password hashes with 12 different salts (Traditional DES [64/64 BS MMX])
time: 0:00:00:17 100%  c/s: 1160K
Время на 100 хешей = времени на 1 хеш, при условии что одна соль.
Поэтому иногда удобней брать, к примеру, 5 солей и пусть хешей будет 1000, зато времени займет как на подбор для 5 и результаты даст быстрее.

Но как разделить хеши по солям, если у вас их более 10к? Для этого есть спец скрипты, которые я позже выложу, либо использовать встроенную опцию -salts, но что-то мне не понравилось с ней работать.

Последний раз редактировалось Thanat0z; 06.08.2007 в 08:00..
 
Ответить с цитированием