Взлом паролей
Теперь взломаем пароль. Программа может воспринимать три различных формата паролей. На самом деле, программа может взломать любой шифр паролей, описанный в справке, полученной по параметру -test. Все, что вам требуется сделать, это переформатировать пароль в вид, который может принять приложение. Если вы используете парольный файл Unix или выходной формат утилиты pwdump, о которой будет разговор позже в этой лекции, то вам не потребуется модифицировать формат файла. Ниже приведено пять различных примеров форматов файлов паролей, которые программа знает, как интерпретировать (строка пароля выделена жирным шрифтом).
- root:rf5V5.Ce31sOE:0:0::
- root:KbmTXiy.OxC.s:11668:0:99999:7:-1:-1:1075919134
- root:$1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1:11668:0:99999:7:-1:-1:1075919134
- root:$2a$06$v3LIuqqw0pX2M4iUnCVZcuyCTLX14lyGNngtGSH4/dCqPHK8RyAie:0:0::::::
- Administrator:500:66bf9d4b5a703a9baad3b435b51404ee: 17545362d694f996c37129225df11f4c:::
Далее перечислим системы, из которых взяты приведенные выше примеры. Заметим, что, несмотря на то, что каждый из них несколько отличается в конкретной операционной системе, форматы файлов схожи. Заметим также, что вы можете взломать пароли для Solaris, используя Windows-версию программы: для этого необходима лишь реальная строка пароля; операционная система не важна.
- Solaris DES from /etc/passwd.
- Mandrake Linux DES from /etc/shadow.
- FreeBSD MD5 from /etc/shadow.
- OpenBSD Blowfish from /etc/master.password.
- Windows 2000 LAN Manager from \WINNT\repair\SAM.
Пароли могут быть взломаны и программой, работающей под отличной от Unix и Windows операционной системой. Для взлома одного из этих паролей просто скопируйте строку (выделенную жирным шрифтом в каждом примере) во второе поле файла в формате Unix.
-
Cisco
Исходная строка: enable secret 5 $1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1
Строка для взлома: cisco:$1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1::::
-
Apache .htaccess-файлы, которые используют строку пароля, сформатированную в формате DES. Apache также поддерживает строки паролей в формате алгоритмов SHA-1 и MD5, но они несовместимы с форматом программы.
Исходный формат .htaccess: dragon:yJMVYngEA6t9c
Формат для программы: dragon:yJMVYngEA6t9c::::
Другие, основанные на алгоритме DES пароли, такие как WWWBoard.
Исходный файл passwd.txt: WebAdmin:aepTOqxOi4i8U
Строка для взлома: WebAdmin:aepTOqxOi4i8U :0:3:www.victim.com::
Для взлома пароля с использованием опций по умолчанию, вы должны ввести имя файла в качестве аргумента. Для примеров из этой лекции мы будем использовать три различных файла паролей: passwd.unix, содержащий пароли, зашифрованные с помощью алгоритма DES, passwd.md5, содержащий пароли, зашифрованные с использованием алгоритма MD5, и passwd.lanman, содержащий пароли в формате Windows NT.
[root@hedwig run]# ./john passwd.unix Loaded 189 passwords with 182 different salts (Traditional DES [64/64 BS MMX])
Программа автоматически выбирает правильный алгоритм шифрования для строк и начинает взлом. Нажмите любую клавишу, чтобы вывести на экран текущую статистику взлома, и CTRL-C, чтобы прервать работу программы. Если пароль взломан, программа выводит на экран и сохраняет взломанный пароль для дальнейшего использования. Чтобы посмотреть вскрытые пароли из специального файла, используйте параметр -show.
[root@hedwig run]# ./john -show passwd.unix 2buddha:smooth1:0:3:wwwboard:/:/sbin/sh ecs:asdfg1:11262:0:40:5::11853: informix:abc123:10864:0:40:5::12689: kr:grant5:11569:0:35:5::11853: mjs:rocky22:11569:0:35:5::11853: np:ny0b0y:11572:0:35:5::11853:
Все вскрытые пароли сохраняются в файле john.pot, представляющем собой текстовый файл, который может пополняться в соответствии с увеличением количества взломанных паролей. Слабые пароли, независимо от схемы шифрования, могут быть вскрыты за время от нескольких минут до одного дня. Сложные пароли могут потребовать недели или месяцы. Однако мы можем использовать некоторые фокусы, чтобы попытаться расколоть эти сложные пароли быстрее. Можно использовать подробные файлы словарей (файлы с иностранными словами, именами, названиями спортивных команд, научно-фантастическими символами), использовать специфические комбинации для пароля (всегда не менее двух цифр и символов пунктуации), или распределить обработку по нескольким компьютерам.
Словарь по умолчанию для программы содержится в файле password.lst. Этот файл содержит пароли, которые наиболее часто встречаются среди пользователей. Вы можете найти несколько альтернативных словарей в интернете, просто воспользовавшись поисковой системой Google. Один из лучших (около 15Mb) называется bigdict.zip. Используйте параметр -wordfile, чтобы указать программе на необходимость использовать альтернативный словарь.
[root@hedwig run]# ./john -wordfile:password.lst passwd.unix Loaded 188 passwords with 182 different salts (Traditional DES [64/64 BS MMX]) guesses: 0 time: 0:00:00:01 100% c/s: 333074 trying: tacobell - zhongguo
Мы даже можем делать некоторые перестановки в словаре, используя параметр -rules.
[root@hedwig run]# ./john -wordfile:password.lst -rules passwd.unix Loaded 188 passwords with 182 different salts (Traditional DES [64/64 BS MMX]) guesses: 0 time: 0:00:00:58 100% c/s: 327702 trying: Wonderin - Zenithin
Чтобы понять функцию параметра -rules, посмотрим на файл john.conf (или john.ini для версии 1.6). Ниже приведена часть файла john.conf, которая описывает перестановки в нашем списке слов (комментарии начинаются с символа #).
[List.Rules:Wordlist] # Try words as they are : Lowercase every pure alphanumeric word -c >3!?XlQ # Capitalize every pure alphanumeric word -c >2(?a!?XcQ # Lowercase and pluralize pure alphabetic words <*>2!?Alp # Lowercase pure alphabetic words and append '1' <*>2!?Al$1
Эти записи, на самом деле, не так сложны, как это кажется на первый взгляд. Базовый синтаксис для большинства этих правил унаследован от утилиты для взлома, написанной Али Маффетом (помните libcrack?). Представьте, что системная политика паролей требует, чтобы каждый пароль начинался с цифры. Следовательно, нет необходимости перебирать комбинации строки "letmein" до тех пор, пока строка не станет удовлетворять выбранной политике, а строка "7letmein" может быть правильной. Вот и правило для предварения слова цифрой.
# Prepend digits ( adds 10 more passes through the wordlist) ^[0123456789]
Мы можем разбить это правило на три части. Символ ^ означает, что операция должна начинаться от начала слова. Другими словами, она должна предварять последовательность символов. Квадратные скобки [ и ] содержат набор символов, которые должны следовать за символом ^. Цифры 0123456789 являются символами, которые должны предварять слово. Итак, если наше правило работает со строкой "letmein", ему понадобится всего десять попыток, чтобы пробежать от комбинации "0letmein" до "9letmein".
Символы, которые определяют место, где должен размещаться новый символ, приведены ниже.
^ | Поставить символ в начало | ^[01] 0letmein 1letmein |
$ | Добавить символ в конец | $[!.] letmein! letmein. |
i[n] | Вставить символ на соответствующую позицию | i[4][XZ] letXmein letZmein |
- [0123456789]. Цифры.
- [!@#$%^&*()]. Символы верхнего регистра для цифр.
- [,.?!]. Знаки пунктуации.
Мы можем использовать преобразование правил для изменения регистра или типа (верхний, нижний, от e до 3) символов, или удаления отдельных типов символов.
- ?v?Гласные (a, e, i, o, u).
- s?v.?Замена гласных точкой (.).
- @@?v?Удалить все гласные.
- @@a?Удалить все буквы a.
- sa4?Заменить все буквы a на 4.
- se3?Заменить все буквы e на 3.
- l*?Где * символ, который надо перевести в нижний регистр.
- u*?Где * символ, который надо перевести в верхний регистр.
Правила - великолепный способ повысить производительность подбора пароля, особенно те из них, которые добавляют символы или правила l33t, заменяющие символы и цифры.
Правила наиболее подходят для случая, когда скорость работы компьютера не больше, чем у обезьяны, считающей на счетах. Сегодня, когда за несколько сотен долларов можно купить процессор с тактовой частотой более 1GHz, вы не много потеряете, пропустив этап обработки сложными правилами, и перейдете непосредственно к прямому перебору.
Сложные правила и обширные словари не смогут взломать любой пароль. Это заставляет прибегать к атаке методом прямого перебора. Другими словами, мы будем пробовать все возможные комбинации символов заданной длины. Программа может переключаться в режим прямого перебора по умолчанию, если в командной строке не задано никаких параметров. Чтобы заставить программу перейти к прямому перебору, используйте параметр -incremental.
[root@hedwig run]# ./john -incremental:LanMan passwd.lanman Loaded 1152 passwords with no different salts (NT LM DES [64/64 BS MMX])
По умолчанию файл john.conf содержит четыре аддитивных параметра.
- All. Нижний регистр, верхний регистр, цифры, пунктуация, SHIFT+.
- Alpha. Нижний регистр.
- Digits. От 0 до 9.
- LanMan. То же, что и All, за исключением нижнего регистра.
Каждый аддитивный параметр имеет пять полей в файле john.conf. Например, строка для LanMan содержит следующие поля.
- [Incremental:LanMan]. Описание параметра.
- File = ./lanman.chr. Файл используемый в качестве списка символов.
- MinLen = 0. Минимальная длина генерируемой строки.
- MaxLen = 7. Максимальная длина генерируемой строки.
- CharCount = 69. Число символов в списке.
Аналогично строка для ALL содержит следующие поля.
- [Incremental:All]. Описание параметра.
- File = ./all.chr. Файл, используемый в качестве списка символов.
- MinLen = 0. Минимальная длина генерируемой строки.
- MaxLen = 8. Максимальная длина генерируемой строки.
- CharCount = 95. Число символов в списке.
Поля MinLen и MaxLen наиболее важны, поскольку мы можем изменять их для определения атаки. В MaxLen для LanMan никогда не может быть больше семь символов. Число CharCount в степени MaxLen дает количество комбинаций, необходимое для полного завершения атаки перебором.
Например, общее количество комбинаций для работы с паролями LanMan составляет 7.6 триллиона. Общее число комбинаций при использовании параметра ALL составляет около 6700 триллионов! Заметим, что бессмысленно использовать параметр incremental:All для подбора паролей LanMan, поскольку нет необходимости отдельно проверять символы нижнего и верхнего регистров.
Если в нашем распоряжении список паролей из Unix, о котором известно, что все пароли состоят из восьми символов, мы можем изменить значения параметров. В данном случае это экономит время, поскольку можно не заниматься перебором строк длиной в семь и менее символов.
[Incremental:All] File = ./all.chr MinLen = 8 MaxLen = 8 CharCount = 95
Затем запустим программу.
[root@hedwig run]# ./john -incremental:All passwd.unix
Будет производиться только перебор строк длиной в восемь символов. Мы можем использовать параметр -stdout, чтобы проверить это. Каждый использованный вариант будет распечатываться на экране.
[root@hedwig run]# ./john -incremental:All -stdout
Это полезно, если вы перенаправляете вывод в файл и создаете список слов для дальнейшего использования с программой john или другой утилитой, которая может использовать файл со списком слов, например Whisker.
[root@hedwig run]# ./john -makechars:guessed Loaded 3820 plaintexts Generating charsets... 1 2 3 4 5 6 7 8 DONE Generating cracking order... DONE Successfully written charset file: guessed (82 characters)