Опубликован: 20.02.2007 | Доступ: свободный | Студентов: 3483 / 787 | Оценка: 4.42 / 4.03 | Длительность: 40:03:00
Лекция 9:

Средства взлома/подбора паролей

John the Ripper

John the Ripper (http://www.openwall.com/john), возможно, самый быстрый и наиболее универсальный из доступных инструментов, предназначенных для взлома паролей. Программа поддерживает шесть разных схем хеширования паролей, которые покрывают различные варианты схем хеширования паролей для Unix и Windows LanMan (используемый в NT, 2000 и XP). Он может использовать специализированный список слов или правил для паролей, основанных на типах символов и их местоположении. Программа работает под управлением 13 различных операционных систем и поддерживает разные процессоры, включая специальные ускорители для Pentium и RISC-процессоров.

Реализация

Во-первых, необходимо получить и скомпилировать программу. Последняя версия программы john-1.6.31-dev. Но вам понадобится загрузить и john-1.6.31-dev.tar.gz и john-1.6.tar.gz (или .zip -эквивалент для Windows). Версия 1.6.31-dev содержит не всю документацию и дополнительные файлы, которые есть в версии 1.6. После распаковки john-1.6.31-dev в выбранной директории, вам понадобится перейти в директорию /src.

[root@hedwig]# tar zxvf john-1.6.31-dev.tar.gz
[root@hedwig]# tar zxvf john-1.6.tar.gz
[root@hedwig]# cd john-1.6.31-dev
[root@hedwig john-1.6.31-dev]# cd src

Следующая команда проста: make <OS name>. Например, для сборки программы под управлением Cygwin вам понадобиться набрать make win32-cygwin-x86-mmx. Для пользователей BSD, make freebsd-x86-mmx-elf. Просто наберите make без аргументов, чтобы посмотреть список поддерживаемых операционных систем и комбинаций процессоров.

[root@hedwig src]# make win32-cygwin-x86-mmx

Затем программа самостоятельно осуществит сборку версии для вашей платформы. Когда процесс закончится, исполняемые файлы и файлы конфигурации будут размещены в директории john-1.6.31-dev/run. Версия разработчика не содержит некоторые необходимые файлы. Вам понадобится распаковать эти файлы из архива john-1.6.tar.gz и поместить их в директорию /run.

[root@hedwig]# cd john-1.6.31-dev/run
[root@hedwig run]# cp ../../john-1.6/run/all.chr .
[root@hedwig run]# cp ../../john-1.6/run/alpha.chr .
[root@hedwig run]# cp ../../john-1.6/run/digits.chr .
[root@hedwig run]# cp ../../john-1.6/run/lanman.chr .
[root@hedwig run]# cp ../../john-1.6/run/password.lst .

Если все прошло нормально, вы можете протестировать программу. Для остальных команд вам следует учитывать, что текущей директорией является john-1.6.31-dev/run. Во-первых, убедитесь, что программа работает, показывая базовую скорость работы для вашей системы.

[root@hedwig run]# ./john -test
Benchmarking: Traditional DES [64/64 BS MMX]... DONE
Many salts:     323175 c/s
Only one salt:      279202 c/s

Benchmarking: BSDI DES (x725) [64/64 BS MMX]... DONE
Many salts:     10950 c/s
Only one salt:      10770 c/s

Benchmarking: FreeBSD MD5 [32/32]... DONE
Raw:    2437 c/s

Benchmarking: OpenBSD Blowfish (x32) [32/32]... DONE
Raw:    169 c/s

Benchmarking: Kerberos AFS DES [48/64 4K MMX]... DONE
Short:  118816 c/s
Long:   305669 c/s

Benchmarking: NT LM DES [64/64 BS MMX]... DONE
Raw:    487689 c/s

Достойны внимания два теста: FreeBSD MD5 и NT LM DES. Количество взломов в секунду (c/s) отличается для этих двух методов в 200 раз. Это означает, что на полную атаку перебором для FreeBSD потребуется в 200 раз больше усилий, чем на аналогичную работу для Windows NT! Алгоритм OpenBSD Blowfish еще более трудоемок для взлома. Это говорит о том, насколько более устойчивым может быть алгоритм шифрования по сравнению с другими типами алгоритмов. Вместо того чтобы говорить, что один алгоритм безопасней другого, правильнее будет сказать, что алгоритм Blowfish более устойчив к атаке перебором.

Взлом паролей

Теперь взломаем пароль. Программа может воспринимать три различных формата паролей. На самом деле, программа может взломать любой шифр паролей, описанный в справке, полученной по параметру -test. Все, что вам требуется сделать, это переформатировать пароль в вид, который может принять приложение. Если вы используете парольный файл Unix или выходной формат утилиты pwdump, о которой будет разговор позже в этой лекции, то вам не потребуется модифицировать формат файла. Ниже приведено пять различных примеров форматов файлов паролей, которые программа знает, как интерпретировать (строка пароля выделена жирным шрифтом).

  1. root: rf5V5.Ce31sOE:0:0::
  2. root: KbmTXiy.OxC.s:11668:0:99999:7:-1:-1:1075919134
  3. root: $1$M9/GbWfv$sktn.4pPetd8zAwvhiB6.1:11668:0:99999:7:-1:-1:1075919134
  4. root: $2a$06$v3LIuqqw0pX2M4iUnCVZcuyCTLX14lyGNngtGSH4/dCqPHK8RyAie:0:0::::::
  5. Administrator:500: 66bf9d4b5a703a9baad3b435b51404ee: 17545362d694f996c37129225df11f4c:::

Далее перечислим системы, из которых взяты приведенные выше примеры. Заметим, что, несмотря на то, что каждый из них несколько отличается в конкретной операционной системе, форматы файлов схожи. Заметим также, что вы можете взломать пароли для Solaris, используя Windows-версию программы: для этого необходима лишь реальная строка пароля; операционная система не важна.

  1. Solaris DES from /etc/passwd.
  2. Mandrake Linux DES from /etc/shadow.
  3. FreeBSD MD5 from /etc/shadow.
  4. OpenBSD Blowfish from /etc/master.password.
  5. 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]