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

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

Аргументы библиотеки Cracklib

На самом деле, Cracklib поддерживает больше аргументов, чем просто retry=N. Аргумент retry всего лишь указывает программе passwd, сколько раз запрашивать у пользователя новый пароль. Успешное или неудачное завершение работы службы, которая требует модуля pam_cracklib.so, опирается на очки, заработанные пользователем. Пользователь может зарабатывать очки на основании содержания пароля. Аргументы модуля определяют количество очков зарабатываемых конкретной компонентой нового пароля.

  • minlen=N. По умолчанию - 9. Минимальная длина, синоним количества очков, которые должны быть заработаны. Одно очко на единицу длины. Реальная длина нового пароля не может быть меньше 6.
  • dcredit=N. По умолчанию - 1. Максимальное количество очков для включения цифр (0-9). Одно очко на цифру.
  • lcredit=N. По умолчанию - 1. Максимальное количество очков для включения строчных букв. Одно очко на символ.
  • ucredit=N. По умолчанию - 1. Максимальное количество очков для включения прописных букв. Одно очко на символ.
  • ocredit=N. По умолчанию - 1. Максимальное количество очков для включения символов, которые не являются ни цифрами, ни буквами. Одно очко на символ.

Пять следующих аргументов напрямую не влияют на набранное количество очков.

  • debug. Запись отладочной информации на основе настроек системного журнала syslog.
  • difok=N. По умолчанию - 10. Число новых символов, которые не должны быть взяты из предыдущего пароля. Если не входит около 50 процентов символов, этот параметр игнорируется.
  • retry=N. По умолчанию - 1. Количество попыток, разрешенных пользователю для ввода нового пароля, если предыдущий пароль меньше чем minlen.
  • type=text. Текст, которым заменяется слово Unix в подсказках: "New UNIX password" и "Retype UNIX password".
  • use_authtok. Используется для создания очереди модулей в службе. Если этот параметр присутствует, текущий модуль будет использовать на входе результаты работы того, который описан в конфигурационном файле ранее, до того, как будет выдан запрос пользователю. Этот параметр необходим в том случае, если модуль cracklib располагается не первым в очереди.

Аргументы размещаются в последней колонке строки и разделяются пробелом. Например, наш администратор хочет, чтобы пользователи задавали для себя пароль из 15 символов, но при создании пароля давалось бы по два дополнительных очка за использование цифр и за использование "других" символов. В этом случае файл /etc/pam.d/passwd должен содержать следующие строки (символ \ обозначает продолжение на следующую строку).

password required /lib/security/pam_cracklib.so \
                                minlen=15 dcredit=2 ocredit=2
password required /lib/security/pam_unix.so nullok use_authtok md5

Обратите внимание, что администратор добавил аргумент md5 для библиотеки pam_unix.so. Это дает возможность шифровать пароль с использованием алгоритма MD5. Шифрование пароля с использованием алгоритма DES (Data Encryption Standard), используемое по умолчанию, не поддерживает шифрование пароля длиной более 8 символов. В соответствии с лимитом очков, будет весьма сложно набрать 15 очков, используя пароль, состоящий из 8 символов! Шифрование пароля с использованием алгоритма MD5 более эффективно за счет отсутствия ограничения по длине.

Теперь посмотрим некоторые правильные и неправильные пароли, проверенные с использованием нового файла /etc/pam.d/passwd, и соответствующие им количество очков. Помните, что параметры lcredit и ucredit по умолчанию равны 1:

Password    9 очков (длина 8 + 1 строчная буква).   
passw0rd!   12 очков (длина 9 + 1 строчная буква + 1 цифра +
  1 другой символ).  
Passw0rd!   13 очков (длина 9 + 1 прописная буква + 1 строчная буква +
  1 цифра + 1 другой символ).
Pa$$w00rd   15 очков (длина 9 + 1 прописная буква + 1 строчная буква + 
  2 цифры + 2 других символа).

Как видно, большое значение minlen может потребовать использования достаточно сложных паролей. Двенадцать очков, по-видимому, самое маленькое число, которое можно позволить для использования в своей системе, значение пятнадцать подходит к верхнему пределу. Однако вам придется записывать свой пароль рядом с компьютером, чтобы запомнить его. (Шутка.)

login.conf для OpenBSD

OpenBSD, включающая в себя параноидальные ограничения на использование алгоритма DES, содержит этот алгоритм только для обеспечения совместимости с другими Unix-системами. Системные администраторы могут выбирать между многократным DES-, MD5- и Blowfish-алгоритмами шифрования. Мы уже упоминали о преимуществах использования MD5 произвольной длины. Алгоритм Blowfish, разработанный Брюсом Шнейером, также позволяет использовать пароли произвольной длины. Этот алгоритм также может похвастаться тем, что он относительно медленный. Возможно, звучит странно, но мы еще поговорим об этом.

Реализация

OpenBSD не использует PAM-архитектуру, но она также обладает качественной системой управления паролем. Файл /etc/login.conf содержит директивы для алгоритмов шифрования и управления, которым должен следовать пользователь системы. Строки в файле login.conf содержат больше инструкций по требованиям к пользователю, чем к политике управления паролями. Рассматриваемые здесь параметры должны добавляться к уже существующим. Первое значение каждой строки соответствует типу класса авторизации, заданному для пользователя. Имеется также специальная строка "default" для пользователей, у которых не задан класс авторизации.

Чтобы определить класс авторизации пользователя, или задать этот класс, откройте файл /etc/master.passwd с помощью утилиты vipw. Класс авторизации - пятый параметр в строке описания пользовательского пароля. Ниже приведен пример, где классы отображаются жирным шрифтом.

root:$2a$06$T22wQ2dH...:0:0:daemon:0:0:Fede:/root:/bin/csh
bisk:$2a$06$T22wQ2dH...:0:0:staff:0:0::/home/bisk:/bin/csh

Некоторые строки в файле login.conf могут содержать следующее. (Символ \ обозначает переход на следующую строку).

default :\
        :path=/usr/bin:\
        :umask=027:\
        :localcipher=blowfish,6
staff:\
        :path=/usr/sbin:\
        :umask=077:\
        :localcipher=blowfish,8
daemon:\
        :path=/usr/sbin:\
        :umask=077:\
        :localcipher=blowfish,8

Здесь помещены инструкции для системы: использовать алгоритм Blowfish для всех пользователей. Цифры 6 и 8 обозначают число циклов для работы алгоритма. Это замедляет работу алгоритма, поскольку требуется больше времени для шифрования пароля. Если пароль требует больше времени для шифрования, то соответственно потребуется и больше времени для его подбора. К примеру, понадобится значительно больше времени, чтобы перебрать словарь из 100000 слов, если вы используете 32 цикла ( localcipher=blowfish,32 ), чем при использовании шести циклов.

Наиболее важными в файле login.conf являются строки: default, поскольку она используется для всех пользователей, и daemon - для пользователя root.

У каждой строки может быть несколько параметров.

  • localcipher=algorithm. По умолчанию - old. Наилучшими параметрами могут быть md5 и blowfish, N где N указывает на число циклов ( N 32 ). Значение "old" означает, что используется DES, и его следует избегать, поскольку пароль не может быть более 8 символов, и методы взлома паролей весьма эффективно работают против этого алгоритма.
  • ypcipher=algorithm. Значения типа localcipher. Используется для обеспечения совместимости с распределенной аутентификацией в "Сетевой информационной системе" NIS.
  • minpasswordlen=N. По умолчанию - 6. Минимальная длина пароля.
  • passwordcheck=program. Задает внешнюю программу для проверки паролей. Следует использовать с осторожностью, поскольку внешние программы могут быть объектом атак "троянских коней", источником ошибок и переполнения буфера.
  • passwordtries=N. По умолчанию - 3. Число попыток запроса у пользователя нового пароля, если старый пароль не соответствует стандарту OpenBSD. Пользователь может не обращать внимания на стандарт, если этот параметр равен 0.

Измененный файл login.conf будет содержать примерно следующее (класс ftpaccess исключительно слаб в этом примере).

default:\
        :path=/usr/bin:\
        :umask=027:\
        :localcipher=blowfish,8:\
        :minpasswordlen=8:\
        :passwordretries=0
ftpaccess:\
        :path=/ftp/bin:\
        :umask=777:\
        :localcipher=old:\
        :minpasswordlen=6:\
        :passwordretries=3
staff:\
        :path=/usr/sbin:\
        :umask=077:\
        :localcipher=blowfish,12:\
        :minpasswordlen=8:\
        :passwordretries=0
daemon:\
        :path=/usr/sbin:\
        :umask=077:\
        :localcipher=blowfish,31

Политика, заданная в этом файле, требует использования алгоритма Blowfish для всех пользователей, исключая тот самый класс ftpaccess. Политика паролей для ftpaccess представляет собой требования, свойственные старой школе Unix-систем. Пароли для пользователей, относящихся к классу staff, обычно ассоциирующемуся с привилегиями администратора, шифруются с использованием 12 циклов шифрования. Пароль пользователя root, по умолчанию члену класса daemon, должен шифроваться с использованием максимального для используемого алгоритма числа циклов шифрования. Алгоритмы Blowfish и MD5 также поддерживают пароль произвольной длины, в OpenBSD в настоящее время существует ограничение в 128 символов. Этого достаточно, чтобы написать маленькую поэму!

Примечание. Наилучшим местом для поиска паролей являются файлы истории пользователей, поддерживаемые командным интерпретатором. Просмотрите файлы .history .bash_history на предмет поиска странных команд. Иногда администратор случайно может набрать пароль в командной строке. Это обычно случается, когда администратор входит в удаленную систему, используя команду su, и путает команды, досрочно вводя пароль. Однажды мы так нашли пароль пользователя root, состоящий из 13 символов!