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

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

Мы можем разбить это правило на три части. Символ ^ означает, что операция должна начинаться от начала слова. Другими словами, она должна предварять последовательность символов. Квадратные скобки [ и ] содержат набор символов, которые должны следовать за символом ^. Цифры 0123456789 являются символами, которые должны предварять слово. Итак, если наше правило работает со строкой "letmein", ему понадобится всего десять попыток, чтобы пробежать от комбинации "0letmein" до "9letmein".

Символы, которые определяют место, где должен размещаться новый символ, приведены ниже.

Символ Описание Пример
^ Поставить символ в начало ^[01] 0letmein 1letmein
$ Добавить символ в конец $[!.] letmein! letmein.
i[n] Вставить символ на соответствующую позицию i[4][XZ] letXmein letZmein

Мы можем определить любой набор символов, который будет вставляться в строку. Полный список слов будет переработан для каждого из дополнительных символов. Например, список из 1000 слов может реально превратиться в список из 10000, если к каждому слову в начало будет добавлен один из символов от 0 до 9. Ниже приведены некоторые, наиболее часто используемые символы, которые добавляются к базовым словам.

  • [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)
Восстановление файлов и распределенный взлом

Вам следует знать кое-что о программе john, чтобы управлять большими наборами паролей различной степени сложности. Программа периодически сохраняет состояние процесса, записывая промежуточные результаты в файл. Период сохранения устанавливается в файле john.conf.

# Crash recovery file saving delay in seconds
Save = 600

Имя файла по умолчанию restore, но его можно изменить, используя параметр -session.

[root@hedwig run]# ./john -incremental:LanMan -session:pdc \
passwd.lanman
Loaded 1152 passwords with no different salts (NT LM DES
[64/64 BS MMX])

Содержимое файла restore выглядит примерно так.

REC2
5
-incremental:LanMan
-session:pdc
passwd.lanman
-format:lm
6
0
47508000
00000000
0
-1
488
0
8
3
2
6
5
2
0
0
0

Девятая и десятая строки в этом файле (показаны жирным шрифтом) содержат шестнадцатеричные значения числа завершенных операций. Число возможных комбинаций не может быть представлено 32-битным числом, поэтому программа использует два 32-битных поля для создания 64-битного числа. Информация об этом числе и то, как им можно манипулировать, может быть использована для выполнения распределенных вычислений. Возьмем наш файл restore и используем его для запуска параллельных версий программы на двух независимых машинах. Файл restore для первого компьютера будет содержать следующие строки.

REC2
4
-incremental:LanMan
passwd.lanman
-format:lm
4
0
00000000
00000000
0
-1
333
0
8
15
16
0
0
0
0
0
0

Файл restore для второго компьютера будет таким.

REC2
4
-incremental:LanMan
passwd.lanman
-format:lm
4
0
00000000
0000036f
0
-1
333
0
8
15
16
0
0
0
0
0
0

Итак, первая система начнет перебор комбинаций с нуля. Второй компьютер начнет перебор с паролей для LanMan со значения 0000036f 00000000. Теперь работа распределена между двумя машинами, и вам не следует беспокоиться об избыточных комбинациях. Грамотность приема для поиска правильного значения "crypt" состоит в том, чтобы позволить проработать системе некоторое время.

Например, представим себе, что в вашем распоряжении 10 компьютеров. На каждой из этих систем программа выполняет 400000 c/s (взломов в секунду). Для одной из этих машин понадобиться 30 недель, чтобы перебрать все возможные комбинации из семи символов в случае работы с паролями LanMan (69^7 комбинаций). Запустите программу на одной из машин на неделю. В конце недели запишите значение "crypt". Возьмите это значение и используйте его для другой машины, и затем умножьте значение на 2 и используйте полученное число для следующей машины. Теперь 10 компьютеров закончат работу по перебору всех комбинаций за три недели. Эта простая арифметика позволяет определить множитель X для значения "crypt", которое необходимо записать в 10 файлов - по одному для каждой машины. Первая машина начнет перебор с нуля, следующая со значения ноль плюс X, и так далее.

Общeе время в неделях.

Tw = (69^7 / взломов в секунду) / (секунд в неделю)
Tw = (69^7 / 400,000) / (604800) = 30.8 недель.
"Crypt" множитель.
X = Tw / (10 машин)
X = 30.8 / 10 = 3

Значение " crypt " после первой недели (шестнадцатеричное число, взятое из файла restore): 00030000 00000000.

Ниже приведены значения параметра " crypt " (в шестнадцатеричной записи). Это значения, которые необходимо записать в файлы на каждой системе.

System 1 = 0
System 2 = "crypt" * X = 00090000 00000000
System 3 = "crypt" * X * 2 = 00120000 00000000
System N = "crypt" * X * (N - 1) = restore value
System 10 = "crypt" * X * 9 = 00510000 00000000

Этот метод далек от элегантности, но эффективен, когда используется на нескольких одинаковых машинах. Другой способ распределенного взлома - использование параметра -external. Этот параметр позволяет написать свои программы и методы перебора паролей. Внешние программы хранятся в файле john.conf после директивы List.External. Просто используйте директиву -external, как это требуется.

[root@hedwig run]# ./john -external:Parallel passwd.lanman
Примечание. Если вы собрались использовать этот метод, убедитесь, что вы заменили строку node=1 на строку node=2 в файле john.conf на втором компьютере. Заметим, что использование этого метода на более чем двух компьютерах неэффективно, поскольку if (number++ % total) может создавать пересекающиеся слова на разных системах.