John The Ripper — полное руководство

John The Ripper — полное руководство
Я уже не раз в своих статьях, посвященных безопасности сетей, говорил о том, что администратору необходимо выявлять наличие нестойких паролей в своей системе. Именно из-за того, что пользователи выбирают слабые пароли, и производится много незаконных вторжений в, кажется, сильно защищенную систему. В данной статье речь пойдет о программе John The Ripper, позволяющей расшифровывать пароли пользователей в системах Unix.

Я не хочу утверждать, что эта статья целиком посвящена администраторам. Наоборот, я адресую эту статью в первую очередь обычным пользователям. Именно их часто одолевает лень разобраться в какой-либо программе полностью. Порой они даже не догадываются о том, сколько полезных функций заложено программистами. Используя все настройки, принятые по умолчанию, они запускают программу без каких-либо аргументов, пытаясь добиться от нее максимального результата в кратчайшие сроки. В сложных программах такого практически не бывает, поэтому зачастую программа "забрасывается" до лучших времен либо используется не на полную катушку. В администрировании такая халатность может привести к серьезным последствиям. Поэтому я и решил сделать подробное руководство по программе John The Ripper, как одной из лучших расшифровщиков паролей для Unix систем.

Для того чтобы использовать программу John The Ripper, вам понадобится копия файла с паролями. Очень часто у пользователей, заглянувших впервые в файл etc/passwd либо же etc/shadow, появляется слишком много вопросов. Сейчас я постараюсь кратко объяснить, как же устроен файл etc/passwd . В этом файле находится список всех пользователей. Для каждого пользователя отведена отдельная строка, которая описывает его учетную информацию. Рассмотрим на примере формат одной из таких строк:

root:qVbsxDKZ7lKxA:0:0:root:/root:/bin/bash .

В этой строке поля разделены двоеточиями. Эта строка разбивается на следующие части. root, в нашем случае, — это имя пользователя, т.е. его логин в системе; qVbsxDKZ7lKxA — это закодированный пароль пользователя root. Всего различных способов кодирования пароля 4096, так что очень маловероятно, что если у двух разных пользователей одни и те же пароли, то и в зашифрованном виде они будут выглядеть одинаково. 0, который следует сразу же за зашифрованным паролем, — это входной идентификационный номер пользователя. Обычно первые 100 идентификационных номеров зарезервированы для административных целей, так что желательно, чтобы идентификационные номера пользователей были больше 100, да и к тому же для каждого пользователя уникальными. Следующим за идентификационным номером пользователя идет идентификационный номер группы пользователя. Это создано из-за того, что большинство групп состоят более чем из одного пользователя, поэтому пользователи, принадлежащие к одной группе (идентификационные номера группы у пользователей равны), могут иметь общие файлы. Таким образом, доступ к таким файлам будет разрешен только членам этой группы и никому другому (кроме пользователя root, конечно:). Имена и номера групп должны быть определены в файле etc/group . За идентификационным номером группы следует место для комментария, обычно там указывается полное имя пользователя, однако здесь может располагаться любая другая информация. /root — это начальный каталог пользователя. /bin/bash — оболочка пользователя, принимаемая по умолчанию. Вот и весь формат файла. Таким образом, для каждого отдельного пользователя отведена одна строка, что, на мой взгляд, очень удобно для системного администратора.

Теперь приступлю к описанию самой программы. Сначала, вы должны получить копию файла паролей. Если вы, воспользовавшись правами root'a, получили файл, содержащий так называемые теневые (shadow) пароли, то вам понадобится преобразовать этот файл в нормальный вид, выполнив следующую команду: unshadow /etc/passwd /etc/shadow > passwd.1 . Таким образом, получится файл ' passwd.1', содержащий зашифрованные пароли пользователей, который нам в дальнейшем и понадобится для расшифровки. Если вы собираетесь расшифровывать AFS или NT пароли, то вам необходимо для этого использовать программу 'unafs', входящую в поставку John The Ripper, или cкачать утилиту PWDUMP (ftp://samba.anu.edu.au/pub/samba/pwdump/), соответственно. Предположим, что вы получили файл паролей, 'passwd.1', и хотите начать его расшифровку. Самый легкий способ состоит в том, чтобы использовать заданный по умолчанию порядок режимов расшифровки. Для этого необходимо выполнить следующую команду: john passwd.1 . В результате John The Ripper начнет расшифровку с режима 'single crack', затем будет использован режим 'wordlist', и, наконец, вы дойдете до последнего режима работы программы под названием 'incremental mode'. Для увеличения скорости расшифровки при помощи подбора паролей по словарю рекомендуется воспользоваться большим словарем паролей, т.к. словарь, поставляющийся с самой программой, невелик. Если у вас есть такой словарь, то вам необходимо в файле john.ini отредактировать строку, указывающую на применение другого словаря. Например, если словарь с паролями носит название 'passwordlist', то в файле john.ini вам необходимо найти строку 'Wordfile =' и написать следующее: Wordfile = ~/passwordlist .

Теперь, когда вы получили некоторое количество расшифрованных паролей, они будут сохранены в файле john.pot . Для того чтобы их просмотреть, выполним следующую команду: john -show passwd .1. Если список учетных записей становится все больше и больше, не помещаясь на экране, то вы можете использовать переадресацию вывода. Для тех, кто не знает, что это такое, поясню. Используя символ '>', вы можете перенаправить результаты выполнения команды сразу в файл. Далее, вы можете обратить внимание на то, что если в файле учетных записей находятся записи о блокировании доступа к шеллу, то у вас есть возможность заставить John'a игнорировать эти учетные записи. Если предположить, что блокированный доступ к шеллу носит название '/etc/expired', то запустим программу со следующими опциями: john -show -shells:-/etc/expired passwd.1 . Для краткости можно также использовать сокращенный путь, который будет соответствовать любому пути, например, '/any/path/expired': john -show -shells:-expired passwd.1 . Если у вас появилось желание проигнорировать какую-либо другую оболочку, например, '/etc/newuser', то внесем в нашу команду небольшие изменения: john -show -shells:-expired, newuser passwd.1 . Тут следует заметить, что, начиная с версии 1.4, синтаксис программы немного изменился в лучшую сторону. Теперь вы можете сокращать команды.

Как и в любой другой системе, взломщик пытается получить наивысшие привилегии в системе. В ОС Unix такой учетной записью является root или же любая другая учетная запись, имеющая идентификатор 0. Для того чтобы проверить, расшифровался ли такой пароль, выполняем команду: john -show -users:0 passwd.1 . Если таких файлов с паролями у вас не один, а несколько, то для того, чтобы просмотреть все файлы, вы можете обойтись одной лишь командой: john -show -users:0 passwd.* . Если вам понадобилось узнать расшифрованный пароль какого-либо пользователя, например root'a, выполним следующее: john -show -users:root passwd.1 . И, наконец, для просмотра всех расшифрованных паролей пользователей, принадлежащих к привилегированным группам, нам поможет команда: john -show -groups:0,1 passwd.1 .

Однако же, если вы хотите использовать какой-нибудь из режимов расшифровки в отдельности, например 'single crack', авторы этой программы также предусмотрели это и включили в свой продукт выбор различных режимов. В нашем случае команда будет выглядеть следующим образом: john -single passwd.1 . Я уже говорил о том, что синтаксис программы изменился, поэтому результат выполнения команды: john -si passwd.1 будет таким же, как и результат выполнения предыдущей команды. Если у вас имеется сразу несколько файлов с зашифрованными паролями, то вам поможет следующая команда: john -single passwd.1 passwd.2 или даже john -single passwd.*, что во многих случаях сокращает запись исполняющихся команд.

Допустим, что после использования режима 'single crack' у вас расшифровались не все пароли. Следующим шагом к раскрытию всех зашифрованных паролей вы можете применить более мощный режим расшифровки — подбор паролей по словарю. Однако этот метод будет хорош для угадывания паролей лишь тех пользователей, которые не позаботились как следует о своей безопасности и выбрали в качестве своего пароля легко подбираемое слово. Поэтому мы будем использовать опцию wordlist: john -w:words.lst passwd.1 . Для любителей наглядности предлагается использовать длинный синтаксис параметров: john — wordfile=words.lst passwd.1 . Однако то же самое можно записать и кратко: john -w=words.lst passwd.1 . Для атаки перебора паролей по словарю, используя специальные правила, нужно в командной строке написать следующее: john -w:words.lst -rules passwd.1 . Но данный метод работает медленнее, чем атака по словарю без использования опции 'rules', однако это повышает ваши шансы расшифровать большинство слабых паролей, чтобы не тратить время на их расшифровку впоследствии. Поэтому я рекомендую не пренебрегать данной опцией.

Теперь рассмотрим следующий пример. Допустим, у вас набралось много паролей пользователей, которые не имеют доступ к шеллам, и вы не желаете тратить время на подбор паролей к их учетным записям. Вы можете указать john'y, чтобы тот не подбирал пароли для таких пользователей: john -w:words.lst -rules -shells:sh, csh, tcsh, bash passwd.1 . Этот вариант перебора работает во всех режимах. Хочу заметить, что для взломщика, атакующего систему, пароли пользователей, не имеющие доступа к шеллам, представляют наименьшее значение, поэтому основной упор он будет делать именно на пользователей с доступом к шеллам, ну и, конечно же, на суперпользователя — root'a. Подобно всем другим режимам взлома паролей, для того, чтобы как можно быстрее расшифровать все файлы, вам необходимо при расшифровке использовать сразу все файлы с паролями: john -w:words.lst -rules passwd.* . При этом вы сэкономите уйму времени, потому как если в одном файле на взлом пароля root'a у вас может уйти много времени, то при использовании сразу несколько файлов шансы на быструю расшифровку увеличиваются за счет одновременного подбора паролей сразу ко всем пользователям. Ну, а далее все зависит только от скорости вашего процессора.

Так же как и в предыдущих режимах взлома, у вас присутствует возможность расшифровки каких-то отдельных паролей. Следующая команда производит расшифровку всех root'ов (универсальный идентификатор 0) во всех файлах паролей: john -w:words.lst -rules -users:0 passwd.* . Для альтернативы, если вы не желаете тратить впустую время на расшифровку ваших собственных паролей, будучи уверенным в том, что они не взламываемые: john -w:words.lst -rules -users:-root, solar passwd.* . Иногда полезно разбить ваши файлы паролей на две части, которые впоследствии можно будет расшифровывать в отдельности: john -w:words.lst -rules -salts:2 passwd.* и john -w:words.lst -rules -salts:-2 passwd.* .

В результате это приведет к попыткам John'a взломать два или более паролей как можно быстрее, а затем уже после этого программа будет пробовать расшифровать все остальные пароли. Общее количество времени, потраченное на взлом, будет относительно тем же, но у вас появляется возможность получить некоторые пароли раньше, поэтому в результате расшифровки вы уже можете не нуждаться в подборе остальных. Например, John подобрал пароль для суперпользователя root. При этом вы достигли максимальных привилегий, потому как все, что могут делать обычные пользователи, может делать root. Однако ни у кого, кроме него, не существует таких высоких полномочий (если в системе только один суперпользователь с уникальным идентификатором 0). Пароли других пользователей могут понадобиться только лишь в том случае, если вход в систему под именем root запрещен. Тогда вам нужно будет добыть пароль какого-нибудь пользователя. Под ним зайти в систему, а уже после этого, зная пароль пользователя root, попытаться поднять свои привилегии до рутовских.

Наиболее мощный режим расшифровки в программе John The Ripper называется "incremental". Для того чтобы начать перебор зашифрованных паролей в таком режиме, вы можете просто выполнить следующую команду: john -i passwd.1 . В результате выполнения этой команды John будет использовать заданные по умолчанию возрастающие параметры режима, которые определены в файле john.ini в разделе [Incremental:All] . В файле конфигурации, снабженном John'ом, эти параметры должны использовать все 95 символов и пробовать все возможные длины пароля, от 0 до 8. (Нулевой длиной пароля автор программы считает хэш, представляющий собой пустую строку, поскольку такие пароли тоже иногда могут попадаться). Не следует ждать того, что перебор всех возможных паролей закончится в разумное время, так как если пароль действительно стойкий, то подобрать его на обычном компьютере не реально.

В некоторых случаях, для повышения быстродействия, необходимо использовать некоторые другие предопределенные возрастающие параметры режима и только расшифровывать более простые пароли, с ограниченным количеством набором символов. Следующая команда будет пробовать подбирать пароль, используя только 26 различных символов, т.е. мы будем использовать все маленькие латинские буквы от 'a' до 'z'. Возможные комбинации паролей будут варьироваться от от 'а' до 'zzzzzzzz': john -i:alpha passwd.1 . Опять же, вы можете расшифровывать только учетную запись root'a и использовать некоторые другие возможности John'a с использованием режима 'incremental'. Эта команда попробует расшифровать все учетные записи с универсальным идентификатором 0 во всех файлах паролей, имеющих расширение 'pwd': john -i -users:0 -salts:2 *.pwd . Если вы получили файл паролей, в котором много паролей уже расшифрованы, при этом большинство из подобранных паролей являются уникальными, то вы могли бы сгенерировать новый файл символов, основанный на символах только из этого файла паролей: john -makechars:custom.chr passwd.1 . Тогда вы сможете использовать полученный файл для режима 'incremental'. Кроме этого, вы можете использовать некоторые предопределенные фильтры слов при создании файла символов, в результате этой команды программа будет пробовать подобрать более простые слова для расшифровки паролей: john -makechars:my_alpha.chr -external:filter_alpha passwd.1 .

Если ваш файл john.pot стал достаточно большим, то вы могли бы использовать этот файл для создания нового файла символов:

john -makechars:all.chr

john -makechars:alpha.chr -external:filter_alpha

john -makechars:digits.chr -external:filter_digits

john -makechars:lanman.chr -external:filter_lanman

В примере, показанном выше, John запишет поверх старых файлов с символами новые файлы, которые сгенерируются и будут основаны только на файле john.pot (John The Ripper использует именно этот файл для генерации всех возможных символов, если вы не укажете для этого какой-нибудь другой файл с паролями). Обратите внимание, что фильтры слов, используемые в этом примере, предопределены в конфигурационном файле john.ini и поставляются для вашего же удобства вместе с программой.

Наконец, если вы захотите, то можете отправить всем пользователям, которые имеют слабые пароли, письмо, в котором сообщите им о необходимости замены выбранного пароля. Однако поступить так не всегда хорошая идея, потому как, к великому сожалению, большое количество людей просто игнорируют такую почту.

Теперь рассмотрим файл конфигурации программы John The Ripper. Предположим, что вы обратили внимание на то, что в некоторых файлах паролей большинство пользователей в качестве паролей используют имена для входа в систему с некоторыми изменениями, а именно, они прибавляют к концу логина символы '?!'. Тогда вы можете сделать новое правило для режима 'single crack' и разместить его в самом начале конфигурационного файла:

[List.Rules:Single]

$? $!

Если вы генерируете новый файл символов (его генерацию я описал выше), вы должны будете также это указать в файле john.ini в разделе, относящемуся к режиму 'incremental'. В самом простом случае это может выглядеть следующим образом:

[Incremental:Custom]

File = custom.chr

где 'Custom' может быть заменено любым именем. Это заставит John'a использовать только те символы, которые были в подобранных паролях. Для того чтобы указать John The Ripper'y на то, чтобы он при расшифровке использовал и другие символы, вам необходимо в конфигурационном файле записать следующую строку: Extra =! @#$% . В результате записанные после знака '=' символы будут добавляться при расшифровке паролей, но программа будет считать возможность их появления наименее вероятной. Если же вы хотите удостовериться в том, что вместе с вашими дополнительными символами John будет использовать все 95 символов, то вам необходимо записать следующее: CharCount = 95 . Записанная строка подскажет программе выдать предупреждение, если не все из 95 символов будут находиться в полученном файле возможных символов. Тем не менее, вы можете ограничить число различных символов, участвующих в расшифровке паролей, записав вместо 95 другое число, даже если оно превосходит количество символов в сивольной таблице. Вы можете также использовать CharCount, чтобы ограничить число различных символов, которые будут использованы John'ом, даже если charset файл содержит большее количество символов: CharCount = 25 . Если Вы не использовали какие-нибудь фильтры при генерации файлов символов, то установка маленького значения CharCount просто не будет использовать редкие символы при переборе. Для того чтобы установить рамки возможной минимальной и максимальной длин, вам необходимо воспользоваться нижеприведенными строками : MinLen = 6, MaxLen = 8 . Установка значений 'MinLen' и 'MaxLen' вам может пригодиться в том случае, если в системе используются ограничения на длину возможного пароля, т.е. системный администратор запретил использовать короткие пароли для входа в систему. Однако возможна такая ситуация, когда сам администратор (root) выбрал для конкретного пользователя пароль на свое усмотрение. Причем если вы считаете, что в исследуемой вами системе имеется много коротких паролей, то вы можете установить значение 'MinLen' как можно ниже. Это позволит вам сэкономить много времени.

Программу можно найти по адресу: http://www.openwall.com/john/.

Используя, по возможности, весь этот арсенал команд, вы можете в кратчайшие сроки добиться желаемого результата. А значит, и принять меры борьбы со слабыми паролями, обратившись уже к конкретному пользователю с просьбой заменить слабый пароль чем-нибудь более стойким. И напоследок хочу заметить, что за все последствия, к которым может привести использование этой программы, я ответственности не несу.

Евгений Сечко, safeman@mail.ru

(c) компьютерная газета




Компьютерная газета. Статья была опубликована в номере 19 за 2001 год в рубрике soft :: безопасность

©1997-2024 Компьютерная газета