Инструментальные средства обеспечения безопасности

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

Разбить на страницы
Показывать лекцию целиком

Улыбка, домашний ключ, пароль. Как только вы пытаетесь проникнуть в ночной клуб, в собственный дом, в компьютер, вам требуется нечто, чем владеете только вы. В компьютерной сети пользовательские пароли достаточно сложны, чтобы Дуайн не мог разгадать пароль Норма, а Норм не смог узнать пароль Дуайна (если только тот не написал его на обратной стороне клавиатуры). Слабый пароль может свести на нет все усилия по конфигурированию системы безопасности хоста, системных обновлений и строгих правил брандмауэра.

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

Очень важно узнать, как и где хранится большинство паролей, чтобы понять, как эти средства действуют, и какие методы работы за этим стоят. Пароли в Unix и Windows хранятся в одностороннем хеш-файле и не могут быть расшифрованы. И наоборот, имя пользователя можно легко подсмотреть. Например, пароль Нейла abc123 хранится в Unix в виде закодированной строки kUge2g0BqUb7k (помните, что мы не можем ее раскодировать). Сохраненная строка не расшифровывается. Сравнение хеш-строки известного слова с исследуемой строкой пароля - вот основа для атак на системы парольной защиты.

PassFilt.dll и политика паролей в Windows

Система Windows NT 4.0 заставляет своих пользователей подбирать псевдосложные пароли. Библиотека PassFilt.dll, которая поставляется с Service Pack 2, дает возможность администратору создавать элементарные правила для пользовательских паролей. Применение правил конструирования паролей обычно является достаточно удачным средством обеспечения безопасности. В конце концов, вы можете применить самые свежие заплатки к системам безопасности и задать самые строгие ограничения в конфигурации сервера, но недостаточно сложный пароль может свести на нет все ваши усилия.

Реализация

PassFilt.dll уже может быть в поставке системы NT, но для нее требуется произвести некоторые модификации в системном реестре.

  • Убедитесь, что PassFilt.dll размещается в директории C:\WINNT\ System32 (или куда указывает переменная %SYSTEMROOT% ).
  • Воспользуйтесь редактором реестра (в данном случае regedt32.exe работает лучше, чем regedit.exe ), чтобы открыть ключ HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\Lsa.
  • В правой панели выберите ключ Notification Packages.
  • Выберите Edit/Multi String.
  • Если значение уже установлено в FPNWCLNT, удалите его, если нет необходимости обеспечивать совместимость с Novell.
  • Введите значение passfilt.
  • Примечание. Помните, что если вы используете PassFilt.dll на первичном контроллере домена, вы должны использовать его и на резервном контроллере.

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

  • Пароль не должен содержать часть имени пользователя.
  • Пароль должен содержать минимум шесть символов.
  • Пароль должен содержать символы следующих четырех видов:
  • английские прописные (от A до Z);
  • английские строчные (от a до z);
  • цифры (0 through 9);
  • нечисловые символы (символы пунктуации, комбинации с клавишей shift и т.д.).
  • Эти правила не могут быть изменены. Технически библиотека DLL может быть заменена на другую, созданную с использованием интерфейса программирования приложений от Microsoft (password application programming interface, API), но схема шифрования NT порождает достаточно устойчивые пароли. Тем не менее, не следует считать PassFilt.dll панацеей. Пользователь по-прежнему может воспользоваться простым паролем, который легко подсмотреть или подобрать. Ниже приведены примеры слабых паролей, полностью удовлетворяющих ограничениям PassFilt.dll.

  • Passw0rd
  • Password!
  • p4ssw0rd!
  • Pa55werd
  • Что происходит на самом деле. Пользователи любят заменять числа гласными ( a это 4, e - 3, i - 1, o - 0 ) и добавлять восклицательный знак в свой пароль, чтобы удовлетворить ограничениям по созданию "хорошего" пароля. Словарь хороших паролей, которым владеет большинство взломщиков паролей, содержит различные перестановки обычных слов, которые содержат буквы и символы. И, наконец, пароли, которые основаны на именах спортивных команд, названиях городов, ругательствах и именах всегда относятся к множеству наиболее слабых паролей, поскольку пользователи предпочитают пароли, которые легко запомнить. Следовательно, вам захочется сфокусироваться на усилиях по защите списка паролей и защите служб (таких как электронная почта, система безопасности, Windows NetBIOS), которые опираются на пароли.

    Локальная политика безопасности в Windows 2000 и Windows XP

    Наследники NT перенесли настройки PassFilt.dll из системного реестра в графический интерфейс пользователя. Они не добавили дополнительных правил или методов модификации имеющихся правил. Чтобы включить принудительные процедуры создания сложных паролей, войдите в раздел Local Security Policy, в Administrative Tools на панели управления. Окно Local Security Settings показано на рисунке 9.1.

    (рис 9.1) Усложнение пароля

    PAM и политика создания паролей в Unix

    Некоторые популярные Unix-системы, такие как FreeBSD, Linux и Solaris, содержат встраиваемую модель аутентификации ( PAM ). PAM управляет любыми действиями пользователя, которые требуют от него пароля. Это может быть доступ по telnet, вход в консоль или изменение пароля. Реализация PAM также доступна для схем строгой аутентификации, таких как Kerberos, S/Key и RADIUS. Конфигурация PAM остается одной и той же, независимо от метода или приложения, которое осуществляет аутентификацию. Сосредоточимся на том, как усилить политику доступа по паролям с использованием PAM.

    Реализация для Linux

    Рассмотрим, как можно настроить системную политику в нашей Linux-системе в сравнении с использованием PassFilt.dll под Windows NT. Во-первых, у вас должна быть установлена библиотека cracklib (или libcrack ). Эта библиотека проверки паролей, разработанная Алеком Маффетом, является частью установочного комплекта систем Debian, Mandrake, RedHat и SuSE. Для проверки пароля нам необходимо только изменить текст файла, содержащего конфигурацию PAM. Это может быть один из двух возможных файлов:

    /etc/pam.conf

    или

    /etc/pam.d/passwd

    Строки в файле /etc/pam.conf, которые относятся к изменению пароля, выглядят примерно так.

    passwd password required    /lib/security/pam_cracklib.so retry=3
    passwd password required    /lib/security/pam_unix.so nullok use_authtok

    Они логически подразделяются на пять колонок. Первая колонка содержит имя службы - имя программы, на которую распространяются инструкции, прописанные в оставшихся колонках. Файл /etc/pam.d/passwd содержит только четыре колонки, поскольку имя определяет службу passwd. Принятый стиль конфигурации определяет порядок, когда каждое имя службы помещается в отдельный файл, вместо того чтобы использовать один файл для нескольких служб. Независимо от стиля конфигурирования, у службы может быть несколько строк описания. Это выглядит как stacking modules для службы. Ниже приведен пример файла /etc/pam.d/passwd со стеком модулей.

    password required   /lib/security/pam_cracklib.so retry=3
    password required   /lib/security/pam_unix.so nullok use_authtok

    Первая колонка показывает тип модуля, которому соответствует строка. Строка может содержать один из четырех типов (нас интересует изменение модуля, который управляет изменением пароля).

  • account. Служба управляет действиями, основанными на атрибутах пользователя, такими как проверка полномочий пользователя на доступ и на чтение файла. Например, вы можете использовать описание account для обеспечения доступа к ресурсам, таким как общие файлы. Однако без строки auth пользователь не сможет войти в систему.
  • auth. Обеспечивает взаимодействие с пользователем, например, запрос пароля. Такое взаимодействие используется, когда система или ресурс собирается запросить у пользователя разрешение на вход.
  • password. Обновляет аутентификационную информацию, например, изменяет пароль. Не используется для проверки пользователя в системе. Служба разрешает доступ к системе безопасности, которая управляет пользовательскими полномочиями.
  • session. Поддерживает действия, которые происходят до или после работы службы, такие как проверка неудачных попыток входа в систему. Например, может использоваться для немедленного отображения времени дня после того, как пользователь вошел в систему. Первая строка может быть использована для модуля auth проверки пароля пользователя, затем может следовать модуль session, который вызывает модуль pAM для отображения текущего времени. Другой способ использования модуля session может обеспечивать специфические функции, выполняющиеся, когда пользователь войдет в систему, такие как запись строки в системный журнал или истечение срока действия временного идентификатора.
  • Следующая колонка определяет control для службы, или описывает, как должно поддерживаться ее выполнение. Успешное выполнение означает, что служба выполнила функцию, например такую, как изменение пароля пользователя. Ошибка выполнения означает, что служба не передает корректные данные, такие как пароль пользователя. Ниже приводятся функции управления.

  • requisite. Если работа службы завершилась неудачей, все последующие действия автоматически завершаются неудачно. Это означает, что ни один из модулей в стеке не может быть завершен успешно.
  • required. Если работа службы завершилась неудачно, выполняет последующие действия, но принудительно выдает сообщение о неудачном завершении. Если в стеке присутствуют другие действия, то они могут завершиться успешно, но это не приведет ни к каким изменениям.
  • optional. Если работа службы завершилась неудачно или прошла успешно, выполняются последующие действия. Никак не влияет на результат выполнения последующих действий.
  • sufficient. Если работа службы завершилась успешно и не установлен параметр requisite, или работа этого модуля завершилась неудачно, процесс выполнения завершается с положительным результатом.
  • Следующая колонка содержит параметр module path для библиотеки аутентификации, которую следует использовать. Этот параметр должен содержать полное имя файла для библиотеки аутентификации. Мы будем использовать cracklib, поэтому убедитесь, что в этой колонке стоит pam_cracklib.so.

    Последняя строка содержит аргументы, которые передаются библиотеке аутентификации. Возвращаясь к первому примеру с файлом /etc/pam.conf, мы видим, что модуль pam_cracklib.so должен успешно завершить свою работу с аргументом retry=3, в то время как пользователь меняет пароль с использованием программы passwd.

    passwd password required    /lib/security/pam_cracklib.so retry=3

    Аргументы библиотеки 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 символов!

    John the Ripper

    ), возможно, самый быстрый и наиболее универсальный из доступных инструментов, предназначенных для взлома паролей. Программа поддерживает шесть разных схем хеширования паролей, которые покрывают различные варианты схем хеширования паролей для 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, о которой будет разговор позже в этой лекции, то вам не потребуется модифицировать формат файла. Ниже приведено пять различных примеров форматов файлов паролей, которые программа знает, как интерпретировать (строка пароля выделена жирным шрифтом).

  • 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

    Мы можем определить любой набор символов, который будет вставляться в строку. Полный список слов будет переработан для каждого из дополнительных символов. Например, список из 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) может создавать пересекающиеся слова на разных системах.

    Работает ли это на моей системе?

    Самым серьезным показателем того, что John the Ripper работает на вашем компьютере, может быть значение загрузки центрального процессора. Вы можете просмотреть список активных процессов (команда ps ), но вы не обрадуетесь, увидев в списке эту программу. Если вы попытаетесь переименовать исполняемый модуль, к примеру "inetd " (обратите внимание на пробел после d ), то программа не будет работать, если не сделать несколько изменений в исходном коде.

    Пример из жизни. Атака на политику паролей

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

    # Prepend digits (adds 10 more passes through the wordlist)
    ^[0123456789]

    Но что с другими сценариями? Что, если мы заметим тенденцию в схеме изменения паролей для конкретной системы в сети под управлением Unix? Например, что, если мы хотим создать список слов, в который входят все комбинации слова bank, написанного строчными и прописными буквами? Соответствующее правило в файле john.conf будет выглядеть примерно так.

    # Permutation of "ban" (total of 8 passes)
    i[0][bB]i[1][aA]i[2][nN]

    Заметьте, что мы всего лишь поместили первые три буквы в правило. Это сделано потому, что john требуется список слов, чтобы им оперировать. Список слов, называемый password.lst, содержит три последних буквы.

    k
    K

    Теперь если вы запустите john с новым правилом с использованием короткого файла password.lst, вы увидите нечто похожее на это.

    $ ./john.exe -wordfile:password.lst -rules -stdout
    bank
    bank
    bank
    bank
    bAnk
    bAnK
    bANk
    bANK
    Bank
    BanK
    BaNk
    BaNK
    Bank
    BAnK
    BANk
    BANK
    words: 16  time: 0:00:00:00 100%  w/s: 47.05  current: BANK

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

    # Strict policy (adds 160 more passes through the word list)
    i[2]['~!@#$%^*()-_=+]$[0123456789]

    Это сокращенный пример вывода манипуляции со словом password:

    $ ./john.exe -wordfile:password.lst -rules -stdout
    pa'ssword0
    pa'ssword1
    pa'ssword2
    ...
    pa~ssword7
    pa~ssword8
    pa~ssword9
    pa!ssword0
    pa!ssword1
    pa!ssword2
    ...

    Вы можете увидеть, что вполне возможно создать правила для быстрого взлома правил создания сетевых паролей.

    L0phtCrack

    Сначала система Windows казалась более привлекательной с точки зрения безопасности паролей, чем Unix. Большинство Unix-систем никогда не создают пароли более восьми символов.

    Windows NT допускает длину пароля до 14 символов, это почти удвоение длины! Mudge и Weld Pond от L0pht Heavy Industries занимаются усовершенствованием схемы шифрования LanMan. Компания последовательно выпускала средства, которые пользовались преимуществом неадекватности схемы шифрования паролей.

    Мы уже кратко упоминали в этой лекции о системе шифрования LanMan. Мы знаем, что это система хранения шифрованных паролей, схожая с форматами Unix-файлов /etc/passwd или /etc/shadow. Что можно понять, внимательно изучая, как генерируется и хранится в LanMan шифрованная строка? Система Windows хранит две версии пользовательского пароля. Первая версия называется LanMan, или LM, хэш. Вторая версия - NT-хэш, который шифруется с использованием алгоритма MD5. Это односторонняя функция. Пароль шифруется, но никогда не расшифровывается. Строка LanMan также шифруется с помощью однопроходной функции, но в этом случае пароль разбивается на две части перед тем, как шифроваться с использованием алгоритма DES.

    Посмотрим на содержимое трех строк паролей в LanMan. Они представлены в шестнадцатеричной записи и содержат 16 байт данных.

    898f30164a203ca0    14cc8d7feb12c1db
    898f30164a203ca0    aad3b435b51404ee
    14cc8d7feb12c1db    aad3b435b51404ee

    Не надо быть семи пядей во лбу, чтобы заметить некоторые совпадения в этих трех примерах. Последние 8 байт второго и третьего примера одинаковые: aad3b435b51404ee. Эти значения одинаковы для всех паролей длиной более восьми символов. Эта криптографическая ошибка возникает по двум причинам: вследствие того, что содержимое пароля составляет более восьми символов и показывает, что при генерации второй половины шифрованной строки не используется никакой информации о первой половине. Обратите внимание, что вторая половина первого примера ( 14cc8d7feb12c1db ) содержит первую часть третьего примера. Это, скорее, говорит о том, что пароль шифровался на основе двух независимых наборов символов (по семь каждый), чем о том, что вторая половина зависит от содержания первой части пароля.

    В результате это превращает большой пароль из 14 символов в два коротких пароля по 7 символов. И в довершение всего, LanMan при шифровании игнорирует регистр символов, что резко сокращает время, затрачиваемое на взлом пароля перебором.

    Реализация

    L0phtCrack - инструмент для взлома паролей с развитым графическим интерфейсом для среды Windows NT и ее наследников Windows 2000 и XP. Попытка стащить пароль у Unix-системы обычно требует доступа к файлам /etc/passwd и /etc/shadow. И тот и другой представляют собой легко читаемый текст. Windows хранит пароли в Security Accounts Manager (SAM) - двоичном файле, который тяжело прочитать без специальных ухищрений. L0phtCrack не только подбирает пароли: он может извлекать шифрованные строки паролей из SAM-файла, локальной или удаленной системы и перехватывать пароли, когда они передаются по сети.

    SAM-файл располагается в директории \WINNT\system32\config\. Если вы попытаетесь скопировать или открыть этот файл, получите сообщение об ошибке.

    C:\WINNT\system32\configcopy SAM c:\temp
    The process cannot access the file because it is being used by
    another process.
            0 file(s) copied.

    Не теряйтесь. Windows, к счастью, хранит резервную копию SAM файла в директории \WINNT\ repair\ или \WINNT\repair\RegBack\.

    L0phtCrack может извлечь пароли локального или удаленного компьютера с помощью функции Dump Passwords From Registry.

    Удаленное извлечение пароля требует доступа к общему ресурсу ADMIN$. Для этого необходим доступ к порту 39 NetBIOS TCP. L0phtCrack может создать для вас сессию, или вы можете сделать это вручную.

    C:\>net use \\victim\admin$ * /u:Administrator
    Type the password for \\localhost\admin$:
    The command completed successfully.

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

    Скорость взлома пароля у L0phtCrack удовлетворительная, но не сравнится с последней версией john. При этом программа не предлагает возможностей гибкого изменения правил. Программа лишь допускает настройку списка символов из меню Options.

    Тем не менее, наилучшим вариантом обычно является использование L0phtCrack для получения паролей и сохранения их для использования с john. Для этого воспользуйтесь функциями File/Save As.

    Вам понадобится обработать файл для использования с john. Изменения состоят в помещении строк паролей в соответствующие поля.

    Здесь представлен файл, в котором L0phtCrack сохраняет пароли.

    LastBruteIteration=0
    CharacterSet=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ElapsedTime=0 0
    Administrator:"":"": A34E6990556D7BA3BA1F6705936BF461:
    2B1437DBB1DC57DA3DA1B88BADAB13B2:::

    А это файл, с которым работает John the Ripper. Обратите внимание на то, что три первых строки удалены, и есть только одно поле между именем пользователя (Administrator) и строкой пароля. Содержимое этого поля не имеет значения для john, но мы, в качестве напоминания, поместим сюда идентификатор пользователя (SID).

    Administrator:500:A34E6990556D7BA3BA1F6705936BF461:
    2B1437DBB1DC57DA3DA1B88BADAB13B2:::

    В версии 3.0 L0phtCrack введены усовершенствования для анализа приложений. Эта версия также проще для использования администраторами и она больше соответствует их потребностям (такие возможности, как сообщение о том, что пароль был взломан, без вывода результата). Мы предпочитаем использовать L0phtCrack 2.52 для захвата паролей и использовать John the Ripper для их взлома.

    У версии 3.0. L0phtCrack свои преимущества. Домены Windows 2000 имеют пользовательские профили с паролями из 15 символов. Это исключает методы хранения, применяющиеся в LanMan. Соответственно, версия 2.5. будет выдавать сообщение "No Password" как для строк LanMan, так и для NTLM, для любого пользователя с паролем из 15 символов. Версия 3.0 корректно загружает и идентифицирует пароли, состоящие из 15 символов. Если вы вдруг встретите строку похожую на эту,

    AAD3B435B51404EEAAD3B435B51404EE:FA95F45CC70B670BD865F3748CA3E9FC:::

    то вам стоит исследовать этот "суперпароль". Заметим, что строка пароля для LanMan содержит уже знакомые нам нулевые символы AAD3B435B51404EE, дважды повторяемые LanMan в части пароля (выделено жирным шрифтом).

    Другое преимущество L0phtCrack 3.0 состоит в возможности выполнять распределенный взлом. Метод взлома состоит в разделении процедур подбора паролей на блоки. Это очень важно для запуска программы в гетерогенной среде и отслеживания состояния процесса.

    Защита вашего пароля

    Строгая сетевая и персональная политика безопасности - наилучший способ защиты паролей и файлов паролей. Если недобросовестные пользователи могут перехватить файл паролей или строку пароля для системы Windows, это означает, что пройдет немного времени, и все основные пароли будут вскрыты. Однако утилиты, подобные John the Ripper и L0phtCrack, не поддерживают некоторые символы, которые Windows считает правильными.

    Некоторые комбинации, набранные с использованием клавиши ALT и альтернативной клавиатуры, генерируют символы, которые не могут быть проверены имеющимися в настоящее время утилитами взлома. Помните, что для ввода этих комбинаций надо использовать цифры с альтернативной клавиатуры. К примеру, последовательность символов p-a-s-s-w-ALT+242-r-d (password) будет в безопасности до тех пор, пока кто-то не обновит утилиты для взлома паролей. Плюс к этому, дополнительные символы, доступные на альтернативной клавиатуре с помощью комбинации клавиш ALT-nnn, в значительной степени расширяют пространство символов для прямого перебора. Комбинации с клавишей ALT для спецсимволов начинаются со 160 (ALT+160) и заканчиваются на 255.

    Удаление шифрованных строк паролей LanMan

    Преимущества, которые предоставляют Windows XP и Windows 2000 Service Pack 2 администраторам, состоят в наличии ключа реестра, который удаляет хранилище пользовательских паролей LanMan. Помните, что LM - ущербная версия пользовательских паролей, которая игнорирует различия между прописными и строчными буквами. Вы можете создать пароль из 15 символов и более, как отмечалось при обсуждении реализации L0phtCrack. Или вы можете установить ключ реестра, чтобы указать Windows на необходимость не сохранять строки паролей LanMan для любых последующих изменений пароля.

    HKLM\SYSTEM\CurrentControlSet\Control\Lsa\NoLMHash

    Значение NoLMHash - REG_DWORD должно быть равно единице. Это нарушит совместимость с другими Windows-системами серий 9x или Me, но 2000 и XP будут работать прекрасно. Как только вы установите эти значения, убедитесь, что все пользователи изменили свои пароли, чтобы новые установки сработали. Если установка этих ключей не кажется усилением безопасности ваших паролей, обратите внимание вот на что: пространство символов для восьмисимвольных паролей (и во времени, которое потребуется для подбора пароля) для строки LanMan и для строки зашифрованной MD4 различается примерно в 1000 раз! Другими словами, необходимо обработать 69^7 комбинаций для строки LanMan (помните, что на самом деле восьмисимвольный пароль - это пароль из семи символов и еще один символ) и 96^8 комбинаций для строки MD4.

    Захват строк паролей Windows

    После обзора L0phtCrack в этой лекции понятно, что строки паролей Windows администратор может просматривать также легко, как администратор Unix может просматривать файл /etc/shadow. С другой стороны, файл /etc/shadow представляет собой текстовый файл, который можно просматривать с использованием любого текстового редактора или просто выводя его на экран. База данных SAM для Windows имеет двоичный формат, что не позволяет просматривать ее с такой легкостью. Именно поэтому нам необходим инструмент типа pwdump или lsadump, с помощью которого можно получить текстовую версию базы данных SAM.

    Pwdump

    Утилита ), созданная Тодом Сабином, может быть использована для извлечения шифрованных паролей в системе Windows. Это утилита командной строки, которая должна запускаться локально на исследуемой системе; однако позднее в этом разделе мы познакомимся с утилитой pwdump3, которая может выполняться удаленно.

    Пример из жизни. Взлом системы с помощью L0phtCrack

    Вирус-сканер может идентифицировать L0phtCrack. Так происходит потому, что это одновременно полезное средство проверки для системных администраторов, но в то же время является спорным то, что это равноценно полезное средство для злонамеренных пользователей, которые инсталлируют его без разрешения. Вы можете найти файлы с расширением .lc, что является хорошим признаком того, что здесь присутствовал L0phtCrack. Если это средство действительно было инсталлировано в системе, а не запускалось с гибкого диска, то вы можете произвести поиск в реестре на наличие l0pht. Давайте проведем несколько поисков так, как это сделает системный администратор после обнаружения, что автоматизированное рабочее место временного сотрудника получает доступ к части ADMIN$ сети PDC.

    Мы не обратим внимание на такие шаги, как захват (блокировка) данных и выяснение того, какие команды запускались. Вместо этого мы будем беспокоиться о паролях. У нас 600 сотрудников. Мы уже решили считать каждый пароль подвергшимся риску, но если мы будем искать прямое свидетельство того, что внутренний пользователь взламывал пароли, то нам придется найти некоторые ключевые данные. Наиболее очевидной уликой, которая показывает, что L0phtCrack был инсталлирован в системе, является его собственный реестровый ключ.

    HKLM\SYSTEM\Software\L0pht Heavy Industries\L0phtcrack 2.5

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

    HKLM\SYSTEM\CurrentControlSet\Service\NDIS3Pkt

    Этот ключ могут устанавливать другие программы, но корректное значение, которое устанавливают эти программы, будет следующим (обратите внимание на этот регистр):

    HKLM\SYSTEM\CurrentControlSet\Service\Ndis3pkt

    Если этот ключ NDIS3Pkt присутствует, то мы можем начать подозревать, что L0phtCrack был инсталлирован. Коварный сотрудник мог попытаться удалить свидетельства присутствия этого средства, даже путем дефрагментации жесткого диска и записи на исходное место на диске, чтобы предотвратить нахождение удаленных данных на жестком диске специальными средствами. Однако существует другая запись, которая хранится системой Windows для информации о деинсталляции L0phtCrack. Даже если L0phtCrack был деинсталлирован, то остается следующий ключ регистра.

    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\L0phtcrack 2.5

    Если системный администратор находит это в реестре, то можно быть на 100% уверенным, что L0phtCrack когда-то был инсталлирован в системе. Затем администратор может поискать "недавно использовавшиеся" (MRU) значения в регистре файлов с расширением .lc. Даже если пользователь удалил "sam_pdc.lc" из файловой системы, то ссылки на него по-прежнему могут присутствовать в регистре!

    Реализация

    Программа должна запускаться локально. Это вторая версия утилиты, первоначально разработанной Джереми Алисоном в проекте Samba. В отличие от первой версии, для pwdump2 шифрование базы данных SAM с использованием SysKey не является препятствием. Шифрование SysKey было добавлено в Windows NT с целью увеличить безопасность базы данных SAM, но эффективность этого шага спорна, как мы убедимся с помощью pwdump2. Применение pwdump2 показано ниже.

    C:\>pwdump2.exe /?
    
    Pwdump2 - dump the SAM database.
    Usage: pwdump2.exe <pid of lsass.exe>

    Для получения паролей утилита должна запускаться с полномочиями администратора.

    C:\>pwdump2.exe
    Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46...
    Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c...
    skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

    Обычно у вас не было необходимости выяснять идентификатор ID (PID) для программы lsass.exe. Однако вы можете использовать один простой путь, чтобы найти его с помощью команд tlist или pulist и команды find (параметр /i указывает команде find игнорировать регистр).

    C:\>tlist/find /i "lsass"
     244 LSASS.EXE
    
    C:\>pulist/find /i "lsass"
    LSASS.EXE   244 NT AUTHORITY\SYSTEM
    
    C:\>pwdump2.exe 244
    Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46...
    Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c...
    skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

    Данные, полученные утилитой pwdump2 нельзя напрямую использовать в L0phtCrack, поскольку он не может их читать. Причина в том, что алфавитные символы в шифрованной строке представлены в нижнем регистре; L0phtCrack читает на входе символы верхнего регистра. У John the Ripper нет таких проблем. К счастью, утилита tr (translate characters) может помочь тем, кто хочет использовать утилиту с графическим интерфейсом. Эта утилита работает как под Unix, так и под Cygwin, и была приспособлена под Windows, как часть набора утилит Resource Kit.

    [user@hediwg ]$ cat pwdump.out/tr a-z A-Z
    ADMINISTRATOR:500:F1E5C5EFBC8CFB7F18136FB05F77A0BF:55C77B761FFA46...
    ORC:501:CBC501A4D2227783CBC501A4D2227783:F523558E22C95C62A6D6D00C...
    SKYCLADGIRL:1013:AA5536A42EBE131BAAD3B235B51404EE:DB31A1EE00BFBEE...

    Pwdump3

    Утилита ), разработанная Филом Стаубсом, отличается от pwdump возможностью удаленного доступа к подозрительной машине. Существует четная версия pwdump3e, которая шифрует удаленное соединение для предотвращения доступа недобросовестных пользователей с целью перехвата паролей. Использование утилиты мало чем отличается от других.

    Usage: PWDUMP3 machineName [outputFile] [userName]
    C:\>PwDump3.exe victim pwdump.out root
    C:\>type pwdump.out
    guest:1001:NO PASSWORD*********************:2DEAC3223C70B24E90F02...
    wwwadmin:500:NO PASSWORD*********************:9CBD10B05F8E69B62F2...
    IUSR_WWW01:1003:6E72211CDC51C9F8EB9293C3135F3985:0E2A2DCE3B6ABFBA...

    Чтобы pwdump3 работала корректно, вам необходимо установить доступ к общему ресурсу ADMIN$. Утилита устанавливает такое соединение и запрашивает пароль администратора. В противном случае, вы можете установить соединение вручную с использованием команды net.

    C:\>net use \\victim\admin$ * /u:Administrator
    Type the password for \\localhost\admin$:
    The command completed successfully.

    Lsadump2

    Программа ) делает процесс сбора паролей тривиальным. Это еще одна утилита от Тода Сабина, который обновил созданную Паулем Аштоном программу. Различия между Lsadump2 и pwdump в том, что Lsadump2 выводит действительные текстовые пароли, а не шифрованные строки. Понятно, что это предпочтительнее, пока вы не можете запустить какую либо утилиту взлома паролей. К сожалению, Lsadump2 извлекает пароли, только если они были сохранены в памяти с использованием Local Security Authority (LSA). Такое случается, когда Web-приложение соединяется с SQL-базой данных, или когда утилита резервирования соединяется удаленно с машиной для архивирования файлов.

    Реализация

    Для запуска Lsadump2 требуются полномочия администратора. Применение Lsadump2 показано ниже.

    C:\>lsadump2.exe
    Lsadump2 - dump an LSA secret.
    Usage: lsadump2.exe pid of lsass.exe <secret>

    Вам необходимо знать идентификатор ( PID ) процесса lsass (так же как и для pwdump2 ).

    C:\>tlist/find /i "lsass"
    244 LSASS.EXE
    Совет. Идентификатор процесса LSA (PID) также хранится в реестре в этом ключе:
    HKLM\SYSTEM\ CurrentControlSet\Control\Lsa\LsaPid.

    Эта утилита выводит текст "secret" для имеющих отношение к безопасности системы процессов, находящихся в памяти. Секретом может быть пароль, использованный для доступа к службе, номер телефона для службы RAS, или пароль удаленной службы резервирования. Вывод форматируется в две колонки.

    aspnet_WP_PASSWORD
            
    61 00 77 00 41 00 39 00 65 00 68 00 68 00 61 00   a.w.A.9.e.h.h.a.
    4B 00 38 00                                       K.8.

    Левая колонка содержит ряд шестнадцатеричных цифр, имеющих отношение к службе. Правая колонка содержит ASCII-представление данных. Если на вашей машине под управлением Windows 2000 установлена служба .NET, то, скорее всего, у вас есть пользователь с именем ASPNET. Lsadump2 частично нашел пароль для этого пользователя, показанный жирным шрифтом. Обратите внимание, что Windows сохраняет пароли в формате Unicode, чем и объясняется наличие символов (00) после каждой буквы. К счастью, настройки по умолчанию для этого пользователя не позволяют осуществлять удаленный доступ или выполнение команд.

    Средства активного взлома

    Средства активного взлома являются последним веянием в деле подбора паролей. Они генерируют большое количество паразитного шума в сети и в отношении атакуемой машины (поэтому их деятельность может долгое время оставаться незамеченной). Непременным условие начала активной атаки является наличие правильного имени пользователя на атакуемой системе. В лекции "Средства ревизии Windows" подробно рассказано о приемах получения имени пользователя.

    Другим распространенным шагом перед началом атаки является попытка выяснения времени блокирования доступа после ввода неправильного пароля. Если период блокирования составляет 30 минут после того, как пароль введен неправильно пять раз, вы не захотите терять 29 минут 30 секунд на работу, которая не будет иметь успеха.

    SMBGrind

    Утилита SMBGrind является частью сканера уязвимостей CyberCop. Это утилита командной строки, которая осуществляет подбор паролей, используя имена и пароли из текстового файла.

    Реализация

    Вдобавок к приобретению и установке комплекта CyberCop, вам понадобится только одно необходимое условие - создать файл для имен пользователей и паролей. Ниже показано применение утилиты.

    C:\>smbgrind.exe -i 192.168.209.117 -u users.txt -p pass.txt -v
    
    Host address    : 192.168.209.117
    Userlist    : users.txt
    Passlist        : pass.txt
    Cracking host 192.168.209.117 (*SMBSERVER)
    Parallel Grinders: 10
    Percent complete: 0
    Trying: domain\NetAdm   administrator
    Trying: domain\NetAdm   Pass!word1
    Trying: domain\NetAdm   password
    Trying: domain\NetAdm   change%me
    Trying:     administrator       administrator
    Trying:     administrator       Pass!word1
    Trying:     administrator       password
    Trying:     administrator       change%me
    Percent complete: 75
    Trying:         guest       administrator
    Trying:         guest       Pass!word1
    Trying:         guest       password
    Trying:         guest       change%me
    Percent complete: 100
    Grinding complete, guessed 0 accounts

    SMBGrind - достаточно быстрая программа, но склонная к ошибочным положительным решениям. Программа порождает пакеты со строкой CYBERCOP в качестве полезной нагрузки. Следовательно, деятельность программы может быть обнаружена системами IDS в сети, или строку CYBERCOP можно обнаружить в журнале событий, ведущемся для фиксирования неудавшихся попыток подбора пароля.

    Другим недостатком является невозможность направить атаку против конкретных общих ресурсов. Инструмент, который направлен на взлом ресурсов ADMIN$ или C$, в Windows может поставить под угрозу целостность всей системы, но для хитрого взломщика более привлекательным может оказаться доступ к ресурсу "wwwroot".

    Nbaudit (nat)

    Программа Nbaudit по сравнению с SMBGrind позволяет пользователю сканировать интервал IP-адресов. Это прием чаще применяется для поиска опасных уязвимостей, таких как профиль администратора с пустым паролем.

    Реализация

    Ниже приведен способ использования программы nbaudit.

    usage: nbaudit [-o filename] [-u userlist] [-p passlist] <address>

    Параметры userlist и passlist должны быть понятны без разъяснений. Параметр -o используется для задания выходного файла для сообщений о работе nbaudit. Параметр < address > может ввести вас в заблуждение. Он задает адрес или интервал адресов в следующем формате.

  • 192.168.0.1. Уникальный IP адрес.
  • 192.168.0.1-32. IP между 192.168.0.1 и 192.168.0.32, включая крайние адреса.
  • 192.168.0.1-32,200-244. То же самое, что и в предыдущем примере, но добавлены IP-адреса между 192.168.0.200 и 192.168.244.
  • Ниже приведен пример вывода программы nbaudit.

    [*] --- Checking host: 192.168.1.1
    [*] ---     Obtaining list of remote NetBIOS names
    [*] ---     Remote systems name tables:
        PRINTSERVER
        PRINTSERVER
        PRINTSERVER
        _MSBROWSE_
        HOTEL
        HOTEL
        HOTEL
        HOTEL
    [*] --- Attempting to connect with name: *
    [*] ---     CONNECTED with name: *
    [*] ---     Attempting to connect with protocol: MICROSOFT NETWORKS 1.03
    [*] ---     Remote server wants us to encrypt, telling it not to
    [*] ---     Attempting to connect with protocol: LM1.2X002
    [*] ---     Server time is Mon Jan 28 02:06:08 2002
    [*] ---     Timezone is UTC-8.0
    [*] ---     Attempting to establish session
    [*] ---     Obtained server information:
        Server=[*] User=[administrator] Workgroup=[HOTEL] Domain=[HOTEL]
        [*]- Obtained listing of shares:
        Sharename   Type    Comment
        ------- ---     ------
        IPC             IPC:    IPC Service (PrintServer)
        Printer         Printer:    Hotel Public Printer
        printer$        Disk:
    [*] ---     This machine has a browse list:
        Server              Comment
        ----                ------
        PRINTSERVER     PrintServer
    [*] ---     Attempting to access share: \\*\
    [*] ---     Unable to access
    [*] ---     Attempting to access share: \\*\printer$
    [*] ---     WARNING: Able to access share: \\*\printer$
    [*] ---     Checking write access in: \\*\printer$
    [*] ---     Attempting to exercise .. bug on: \\*\printer$
    [*] ---     Attempting to access share: \\*\ADMIN$
    [*] ---     Unable to access
    [*] ---     Attempting to access share: \\*\C$
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\D$
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\ROOT
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\WINNT$
    [*] --- Unable to access

    Nbaudit атакует все обнаруженные общие ресурсы. В этом примере программа успешно соединилась с ресурсом printer$ с нулевым паролем. Если программа осуществляет соединение по имени пользователя и паролю из списка, то на выход выдается информация об удачных соединениях. Это повышает их рейтинг, поскольку дает возможность осуществлять соединение с большим количеством общих ресурсов.

    Страницы:

    Улыбка, домашний ключ, пароль. Как только вы пытаетесь проникнуть в ночной клуб, в собственный дом, в компьютер, вам требуется нечто, чем владеете только вы. В компьютерной сети пользовательские пароли достаточно сложны, чтобы Дуайн не мог разгадать пароль Норма, а Норм не смог узнать пароль Дуайна (если только тот не написал его на обратной стороне клавиатуры). Слабый пароль может свести на нет все усилия по конфигурированию системы безопасности хоста, системных обновлений и строгих правил брандмауэра.

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

    Очень важно узнать, как и где хранится большинство паролей, чтобы понять, как эти средства действуют, и какие методы работы за этим стоят. Пароли в Unix и Windows хранятся в одностороннем хеш-файле и не могут быть расшифрованы. И наоборот, имя пользователя можно легко подсмотреть. Например, пароль Нейла abc123 хранится в Unix в виде закодированной строки kUge2g0BqUb7k (помните, что мы не можем ее раскодировать). Сохраненная строка не расшифровывается. Сравнение хеш-строки известного слова с исследуемой строкой пароля - вот основа для атак на системы парольной защиты.

    PassFilt.dll и политика паролей в Windows

    Система Windows NT 4.0 заставляет своих пользователей подбирать псевдосложные пароли. Библиотека PassFilt.dll, которая поставляется с Service Pack 2, дает возможность администратору создавать элементарные правила для пользовательских паролей. Применение правил конструирования паролей обычно является достаточно удачным средством обеспечения безопасности. В конце концов, вы можете применить самые свежие заплатки к системам безопасности и задать самые строгие ограничения в конфигурации сервера, но недостаточно сложный пароль может свести на нет все ваши усилия.

    Реализация

    PassFilt.dll уже может быть в поставке системы NT, но для нее требуется произвести некоторые модификации в системном реестре.

  • Убедитесь, что PassFilt.dll размещается в директории C:\WINNT\ System32 (или куда указывает переменная %SYSTEMROOT% ).
  • Воспользуйтесь редактором реестра (в данном случае regedt32.exe работает лучше, чем regedit.exe ), чтобы открыть ключ HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\Lsa.
  • В правой панели выберите ключ Notification Packages.
  • Выберите Edit/Multi String.
  • Если значение уже установлено в FPNWCLNT, удалите его, если нет необходимости обеспечивать совместимость с Novell.
  • Введите значение passfilt.
  • Примечание. Помните, что если вы используете PassFilt.dll на первичном контроллере домена, вы должны использовать его и на резервном контроллере.

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

  • Пароль не должен содержать часть имени пользователя.
  • Пароль должен содержать минимум шесть символов.
  • Пароль должен содержать символы следующих четырех видов:
  • английские прописные (от A до Z);
  • английские строчные (от a до z);
  • цифры (0 through 9);
  • нечисловые символы (символы пунктуации, комбинации с клавишей shift и т.д.).
  • Эти правила не могут быть изменены. Технически библиотека DLL может быть заменена на другую, созданную с использованием интерфейса программирования приложений от Microsoft (password application programming interface, API), но схема шифрования NT порождает достаточно устойчивые пароли. Тем не менее, не следует считать PassFilt.dll панацеей. Пользователь по-прежнему может воспользоваться простым паролем, который легко подсмотреть или подобрать. Ниже приведены примеры слабых паролей, полностью удовлетворяющих ограничениям PassFilt.dll.

  • Passw0rd
  • Password!
  • p4ssw0rd!
  • Pa55werd
  • Что происходит на самом деле. Пользователи любят заменять числа гласными ( a это 4, e - 3, i - 1, o - 0 ) и добавлять восклицательный знак в свой пароль, чтобы удовлетворить ограничениям по созданию "хорошего" пароля. Словарь хороших паролей, которым владеет большинство взломщиков паролей, содержит различные перестановки обычных слов, которые содержат буквы и символы. И, наконец, пароли, которые основаны на именах спортивных команд, названиях городов, ругательствах и именах всегда относятся к множеству наиболее слабых паролей, поскольку пользователи предпочитают пароли, которые легко запомнить. Следовательно, вам захочется сфокусироваться на усилиях по защите списка паролей и защите служб (таких как электронная почта, система безопасности, Windows NetBIOS), которые опираются на пароли.

    Локальная политика безопасности в Windows 2000 и Windows XP

    Наследники NT перенесли настройки PassFilt.dll из системного реестра в графический интерфейс пользователя. Они не добавили дополнительных правил или методов модификации имеющихся правил. Чтобы включить принудительные процедуры создания сложных паролей, войдите в раздел Local Security Policy, в Administrative Tools на панели управления. Окно Local Security Settings показано на рисунке 9.1.

    (рис 9.1) Усложнение пароля

    PAM и политика создания паролей в Unix

    Некоторые популярные Unix-системы, такие как FreeBSD, Linux и Solaris, содержат встраиваемую модель аутентификации ( PAM ). PAM управляет любыми действиями пользователя, которые требуют от него пароля. Это может быть доступ по telnet, вход в консоль или изменение пароля. Реализация PAM также доступна для схем строгой аутентификации, таких как Kerberos, S/Key и RADIUS. Конфигурация PAM остается одной и той же, независимо от метода или приложения, которое осуществляет аутентификацию. Сосредоточимся на том, как усилить политику доступа по паролям с использованием PAM.

    Реализация для Linux

    Рассмотрим, как можно настроить системную политику в нашей Linux-системе в сравнении с использованием PassFilt.dll под Windows NT. Во-первых, у вас должна быть установлена библиотека cracklib (или libcrack ). Эта библиотека проверки паролей, разработанная Алеком Маффетом, является частью установочного комплекта систем Debian, Mandrake, RedHat и SuSE. Для проверки пароля нам необходимо только изменить текст файла, содержащего конфигурацию PAM. Это может быть один из двух возможных файлов:

    /etc/pam.conf

    или

    /etc/pam.d/passwd

    Строки в файле /etc/pam.conf, которые относятся к изменению пароля, выглядят примерно так.

    passwd password required    /lib/security/pam_cracklib.so retry=3
    passwd password required    /lib/security/pam_unix.so nullok use_authtok

    Они логически подразделяются на пять колонок. Первая колонка содержит имя службы - имя программы, на которую распространяются инструкции, прописанные в оставшихся колонках. Файл /etc/pam.d/passwd содержит только четыре колонки, поскольку имя определяет службу passwd. Принятый стиль конфигурации определяет порядок, когда каждое имя службы помещается в отдельный файл, вместо того чтобы использовать один файл для нескольких служб. Независимо от стиля конфигурирования, у службы может быть несколько строк описания. Это выглядит как stacking modules для службы. Ниже приведен пример файла /etc/pam.d/passwd со стеком модулей.

    password required   /lib/security/pam_cracklib.so retry=3
    password required   /lib/security/pam_unix.so nullok use_authtok

    Первая колонка показывает тип модуля, которому соответствует строка. Строка может содержать один из четырех типов (нас интересует изменение модуля, который управляет изменением пароля).

  • account. Служба управляет действиями, основанными на атрибутах пользователя, такими как проверка полномочий пользователя на доступ и на чтение файла. Например, вы можете использовать описание account для обеспечения доступа к ресурсам, таким как общие файлы. Однако без строки auth пользователь не сможет войти в систему.
  • auth. Обеспечивает взаимодействие с пользователем, например, запрос пароля. Такое взаимодействие используется, когда система или ресурс собирается запросить у пользователя разрешение на вход.
  • password. Обновляет аутентификационную информацию, например, изменяет пароль. Не используется для проверки пользователя в системе. Служба разрешает доступ к системе безопасности, которая управляет пользовательскими полномочиями.
  • session. Поддерживает действия, которые происходят до или после работы службы, такие как проверка неудачных попыток входа в систему. Например, может использоваться для немедленного отображения времени дня после того, как пользователь вошел в систему. Первая строка может быть использована для модуля auth проверки пароля пользователя, затем может следовать модуль session, который вызывает модуль pAM для отображения текущего времени. Другой способ использования модуля session может обеспечивать специфические функции, выполняющиеся, когда пользователь войдет в систему, такие как запись строки в системный журнал или истечение срока действия временного идентификатора.
  • Следующая колонка определяет control для службы, или описывает, как должно поддерживаться ее выполнение. Успешное выполнение означает, что служба выполнила функцию, например такую, как изменение пароля пользователя. Ошибка выполнения означает, что служба не передает корректные данные, такие как пароль пользователя. Ниже приводятся функции управления.

  • requisite. Если работа службы завершилась неудачей, все последующие действия автоматически завершаются неудачно. Это означает, что ни один из модулей в стеке не может быть завершен успешно.
  • required. Если работа службы завершилась неудачно, выполняет последующие действия, но принудительно выдает сообщение о неудачном завершении. Если в стеке присутствуют другие действия, то они могут завершиться успешно, но это не приведет ни к каким изменениям.
  • optional. Если работа службы завершилась неудачно или прошла успешно, выполняются последующие действия. Никак не влияет на результат выполнения последующих действий.
  • sufficient. Если работа службы завершилась успешно и не установлен параметр requisite, или работа этого модуля завершилась неудачно, процесс выполнения завершается с положительным результатом.
  • Следующая колонка содержит параметр module path для библиотеки аутентификации, которую следует использовать. Этот параметр должен содержать полное имя файла для библиотеки аутентификации. Мы будем использовать cracklib, поэтому убедитесь, что в этой колонке стоит pam_cracklib.so.

    Последняя строка содержит аргументы, которые передаются библиотеке аутентификации. Возвращаясь к первому примеру с файлом /etc/pam.conf, мы видим, что модуль pam_cracklib.so должен успешно завершить свою работу с аргументом retry=3, в то время как пользователь меняет пароль с использованием программы passwd.

    passwd password required    /lib/security/pam_cracklib.so retry=3

    Аргументы библиотеки 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 символов!

    John the Ripper

    ), возможно, самый быстрый и наиболее универсальный из доступных инструментов, предназначенных для взлома паролей. Программа поддерживает шесть разных схем хеширования паролей, которые покрывают различные варианты схем хеширования паролей для 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, о которой будет разговор позже в этой лекции, то вам не потребуется модифицировать формат файла. Ниже приведено пять различных примеров форматов файлов паролей, которые программа знает, как интерпретировать (строка пароля выделена жирным шрифтом).

  • 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

    Мы можем определить любой набор символов, который будет вставляться в строку. Полный список слов будет переработан для каждого из дополнительных символов. Например, список из 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) может создавать пересекающиеся слова на разных системах.

    Работает ли это на моей системе?

    Самым серьезным показателем того, что John the Ripper работает на вашем компьютере, может быть значение загрузки центрального процессора. Вы можете просмотреть список активных процессов (команда ps ), но вы не обрадуетесь, увидев в списке эту программу. Если вы попытаетесь переименовать исполняемый модуль, к примеру "inetd " (обратите внимание на пробел после d ), то программа не будет работать, если не сделать несколько изменений в исходном коде.

    Пример из жизни. Атака на политику паролей

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

    # Prepend digits (adds 10 more passes through the wordlist)
    ^[0123456789]

    Но что с другими сценариями? Что, если мы заметим тенденцию в схеме изменения паролей для конкретной системы в сети под управлением Unix? Например, что, если мы хотим создать список слов, в который входят все комбинации слова bank, написанного строчными и прописными буквами? Соответствующее правило в файле john.conf будет выглядеть примерно так.

    # Permutation of "ban" (total of 8 passes)
    i[0][bB]i[1][aA]i[2][nN]

    Заметьте, что мы всего лишь поместили первые три буквы в правило. Это сделано потому, что john требуется список слов, чтобы им оперировать. Список слов, называемый password.lst, содержит три последних буквы.

    k
    K

    Теперь если вы запустите john с новым правилом с использованием короткого файла password.lst, вы увидите нечто похожее на это.

    $ ./john.exe -wordfile:password.lst -rules -stdout
    bank
    bank
    bank
    bank
    bAnk
    bAnK
    bANk
    bANK
    Bank
    BanK
    BaNk
    BaNK
    Bank
    BAnK
    BANk
    BANK
    words: 16  time: 0:00:00:00 100%  w/s: 47.05  current: BANK

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

    # Strict policy (adds 160 more passes through the word list)
    i[2]['~!@#$%^*()-_=+]$[0123456789]

    Это сокращенный пример вывода манипуляции со словом password:

    $ ./john.exe -wordfile:password.lst -rules -stdout
    pa'ssword0
    pa'ssword1
    pa'ssword2
    ...
    pa~ssword7
    pa~ssword8
    pa~ssword9
    pa!ssword0
    pa!ssword1
    pa!ssword2
    ...

    Вы можете увидеть, что вполне возможно создать правила для быстрого взлома правил создания сетевых паролей.

    L0phtCrack

    Сначала система Windows казалась более привлекательной с точки зрения безопасности паролей, чем Unix. Большинство Unix-систем никогда не создают пароли более восьми символов.

    Windows NT допускает длину пароля до 14 символов, это почти удвоение длины! Mudge и Weld Pond от L0pht Heavy Industries занимаются усовершенствованием схемы шифрования LanMan. Компания последовательно выпускала средства, которые пользовались преимуществом неадекватности схемы шифрования паролей.

    Мы уже кратко упоминали в этой лекции о системе шифрования LanMan. Мы знаем, что это система хранения шифрованных паролей, схожая с форматами Unix-файлов /etc/passwd или /etc/shadow. Что можно понять, внимательно изучая, как генерируется и хранится в LanMan шифрованная строка? Система Windows хранит две версии пользовательского пароля. Первая версия называется LanMan, или LM, хэш. Вторая версия - NT-хэш, который шифруется с использованием алгоритма MD5. Это односторонняя функция. Пароль шифруется, но никогда не расшифровывается. Строка LanMan также шифруется с помощью однопроходной функции, но в этом случае пароль разбивается на две части перед тем, как шифроваться с использованием алгоритма DES.

    Посмотрим на содержимое трех строк паролей в LanMan. Они представлены в шестнадцатеричной записи и содержат 16 байт данных.

    898f30164a203ca0    14cc8d7feb12c1db
    898f30164a203ca0    aad3b435b51404ee
    14cc8d7feb12c1db    aad3b435b51404ee

    Не надо быть семи пядей во лбу, чтобы заметить некоторые совпадения в этих трех примерах. Последние 8 байт второго и третьего примера одинаковые: aad3b435b51404ee. Эти значения одинаковы для всех паролей длиной более восьми символов. Эта криптографическая ошибка возникает по двум причинам: вследствие того, что содержимое пароля составляет более восьми символов и показывает, что при генерации второй половины шифрованной строки не используется никакой информации о первой половине. Обратите внимание, что вторая половина первого примера ( 14cc8d7feb12c1db ) содержит первую часть третьего примера. Это, скорее, говорит о том, что пароль шифровался на основе двух независимых наборов символов (по семь каждый), чем о том, что вторая половина зависит от содержания первой части пароля.

    В результате это превращает большой пароль из 14 символов в два коротких пароля по 7 символов. И в довершение всего, LanMan при шифровании игнорирует регистр символов, что резко сокращает время, затрачиваемое на взлом пароля перебором.

    Реализация

    L0phtCrack - инструмент для взлома паролей с развитым графическим интерфейсом для среды Windows NT и ее наследников Windows 2000 и XP. Попытка стащить пароль у Unix-системы обычно требует доступа к файлам /etc/passwd и /etc/shadow. И тот и другой представляют собой легко читаемый текст. Windows хранит пароли в Security Accounts Manager (SAM) - двоичном файле, который тяжело прочитать без специальных ухищрений. L0phtCrack не только подбирает пароли: он может извлекать шифрованные строки паролей из SAM-файла, локальной или удаленной системы и перехватывать пароли, когда они передаются по сети.

    SAM-файл располагается в директории \WINNT\system32\config\. Если вы попытаетесь скопировать или открыть этот файл, получите сообщение об ошибке.

    C:\WINNT\system32\configcopy SAM c:\temp
    The process cannot access the file because it is being used by
    another process.
            0 file(s) copied.

    Не теряйтесь. Windows, к счастью, хранит резервную копию SAM файла в директории \WINNT\ repair\ или \WINNT\repair\RegBack\.

    L0phtCrack может извлечь пароли локального или удаленного компьютера с помощью функции Dump Passwords From Registry.

    Удаленное извлечение пароля требует доступа к общему ресурсу ADMIN$. Для этого необходим доступ к порту 39 NetBIOS TCP. L0phtCrack может создать для вас сессию, или вы можете сделать это вручную.

    C:\>net use \\victim\admin$ * /u:Administrator
    Type the password for \\localhost\admin$:
    The command completed successfully.

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

    Скорость взлома пароля у L0phtCrack удовлетворительная, но не сравнится с последней версией john. При этом программа не предлагает возможностей гибкого изменения правил. Программа лишь допускает настройку списка символов из меню Options.

    Тем не менее, наилучшим вариантом обычно является использование L0phtCrack для получения паролей и сохранения их для использования с john. Для этого воспользуйтесь функциями File/Save As.

    Вам понадобится обработать файл для использования с john. Изменения состоят в помещении строк паролей в соответствующие поля.

    Здесь представлен файл, в котором L0phtCrack сохраняет пароли.

    LastBruteIteration=0
    CharacterSet=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
    ElapsedTime=0 0
    Administrator:"":"": A34E6990556D7BA3BA1F6705936BF461:
    2B1437DBB1DC57DA3DA1B88BADAB13B2:::

    А это файл, с которым работает John the Ripper. Обратите внимание на то, что три первых строки удалены, и есть только одно поле между именем пользователя (Administrator) и строкой пароля. Содержимое этого поля не имеет значения для john, но мы, в качестве напоминания, поместим сюда идентификатор пользователя (SID).

    Administrator:500:A34E6990556D7BA3BA1F6705936BF461:
    2B1437DBB1DC57DA3DA1B88BADAB13B2:::

    В версии 3.0 L0phtCrack введены усовершенствования для анализа приложений. Эта версия также проще для использования администраторами и она больше соответствует их потребностям (такие возможности, как сообщение о том, что пароль был взломан, без вывода результата). Мы предпочитаем использовать L0phtCrack 2.52 для захвата паролей и использовать John the Ripper для их взлома.

    У версии 3.0. L0phtCrack свои преимущества. Домены Windows 2000 имеют пользовательские профили с паролями из 15 символов. Это исключает методы хранения, применяющиеся в LanMan. Соответственно, версия 2.5. будет выдавать сообщение "No Password" как для строк LanMan, так и для NTLM, для любого пользователя с паролем из 15 символов. Версия 3.0 корректно загружает и идентифицирует пароли, состоящие из 15 символов. Если вы вдруг встретите строку похожую на эту,

    AAD3B435B51404EEAAD3B435B51404EE:FA95F45CC70B670BD865F3748CA3E9FC:::

    то вам стоит исследовать этот "суперпароль". Заметим, что строка пароля для LanMan содержит уже знакомые нам нулевые символы AAD3B435B51404EE, дважды повторяемые LanMan в части пароля (выделено жирным шрифтом).

    Другое преимущество L0phtCrack 3.0 состоит в возможности выполнять распределенный взлом. Метод взлома состоит в разделении процедур подбора паролей на блоки. Это очень важно для запуска программы в гетерогенной среде и отслеживания состояния процесса.

    Защита вашего пароля

    Строгая сетевая и персональная политика безопасности - наилучший способ защиты паролей и файлов паролей. Если недобросовестные пользователи могут перехватить файл паролей или строку пароля для системы Windows, это означает, что пройдет немного времени, и все основные пароли будут вскрыты. Однако утилиты, подобные John the Ripper и L0phtCrack, не поддерживают некоторые символы, которые Windows считает правильными.

    Некоторые комбинации, набранные с использованием клавиши ALT и альтернативной клавиатуры, генерируют символы, которые не могут быть проверены имеющимися в настоящее время утилитами взлома. Помните, что для ввода этих комбинаций надо использовать цифры с альтернативной клавиатуры. К примеру, последовательность символов p-a-s-s-w-ALT+242-r-d (password) будет в безопасности до тех пор, пока кто-то не обновит утилиты для взлома паролей. Плюс к этому, дополнительные символы, доступные на альтернативной клавиатуре с помощью комбинации клавиш ALT-nnn, в значительной степени расширяют пространство символов для прямого перебора. Комбинации с клавишей ALT для спецсимволов начинаются со 160 (ALT+160) и заканчиваются на 255.

    Удаление шифрованных строк паролей LanMan

    Преимущества, которые предоставляют Windows XP и Windows 2000 Service Pack 2 администраторам, состоят в наличии ключа реестра, который удаляет хранилище пользовательских паролей LanMan. Помните, что LM - ущербная версия пользовательских паролей, которая игнорирует различия между прописными и строчными буквами. Вы можете создать пароль из 15 символов и более, как отмечалось при обсуждении реализации L0phtCrack. Или вы можете установить ключ реестра, чтобы указать Windows на необходимость не сохранять строки паролей LanMan для любых последующих изменений пароля.

    HKLM\SYSTEM\CurrentControlSet\Control\Lsa\NoLMHash

    Значение NoLMHash - REG_DWORD должно быть равно единице. Это нарушит совместимость с другими Windows-системами серий 9x или Me, но 2000 и XP будут работать прекрасно. Как только вы установите эти значения, убедитесь, что все пользователи изменили свои пароли, чтобы новые установки сработали. Если установка этих ключей не кажется усилением безопасности ваших паролей, обратите внимание вот на что: пространство символов для восьмисимвольных паролей (и во времени, которое потребуется для подбора пароля) для строки LanMan и для строки зашифрованной MD4 различается примерно в 1000 раз! Другими словами, необходимо обработать 69^7 комбинаций для строки LanMan (помните, что на самом деле восьмисимвольный пароль - это пароль из семи символов и еще один символ) и 96^8 комбинаций для строки MD4.

    Захват строк паролей Windows

    После обзора L0phtCrack в этой лекции понятно, что строки паролей Windows администратор может просматривать также легко, как администратор Unix может просматривать файл /etc/shadow. С другой стороны, файл /etc/shadow представляет собой текстовый файл, который можно просматривать с использованием любого текстового редактора или просто выводя его на экран. База данных SAM для Windows имеет двоичный формат, что не позволяет просматривать ее с такой легкостью. Именно поэтому нам необходим инструмент типа pwdump или lsadump, с помощью которого можно получить текстовую версию базы данных SAM.

    Pwdump

    Утилита ), созданная Тодом Сабином, может быть использована для извлечения шифрованных паролей в системе Windows. Это утилита командной строки, которая должна запускаться локально на исследуемой системе; однако позднее в этом разделе мы познакомимся с утилитой pwdump3, которая может выполняться удаленно.

    Пример из жизни. Взлом системы с помощью L0phtCrack

    Вирус-сканер может идентифицировать L0phtCrack. Так происходит потому, что это одновременно полезное средство проверки для системных администраторов, но в то же время является спорным то, что это равноценно полезное средство для злонамеренных пользователей, которые инсталлируют его без разрешения. Вы можете найти файлы с расширением .lc, что является хорошим признаком того, что здесь присутствовал L0phtCrack. Если это средство действительно было инсталлировано в системе, а не запускалось с гибкого диска, то вы можете произвести поиск в реестре на наличие l0pht. Давайте проведем несколько поисков так, как это сделает системный администратор после обнаружения, что автоматизированное рабочее место временного сотрудника получает доступ к части ADMIN$ сети PDC.

    Мы не обратим внимание на такие шаги, как захват (блокировка) данных и выяснение того, какие команды запускались. Вместо этого мы будем беспокоиться о паролях. У нас 600 сотрудников. Мы уже решили считать каждый пароль подвергшимся риску, но если мы будем искать прямое свидетельство того, что внутренний пользователь взламывал пароли, то нам придется найти некоторые ключевые данные. Наиболее очевидной уликой, которая показывает, что L0phtCrack был инсталлирован в системе, является его собственный реестровый ключ.

    HKLM\SYSTEM\Software\L0pht Heavy Industries\L0phtcrack 2.5

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

    HKLM\SYSTEM\CurrentControlSet\Service\NDIS3Pkt

    Этот ключ могут устанавливать другие программы, но корректное значение, которое устанавливают эти программы, будет следующим (обратите внимание на этот регистр):

    HKLM\SYSTEM\CurrentControlSet\Service\Ndis3pkt

    Если этот ключ NDIS3Pkt присутствует, то мы можем начать подозревать, что L0phtCrack был инсталлирован. Коварный сотрудник мог попытаться удалить свидетельства присутствия этого средства, даже путем дефрагментации жесткого диска и записи на исходное место на диске, чтобы предотвратить нахождение удаленных данных на жестком диске специальными средствами. Однако существует другая запись, которая хранится системой Windows для информации о деинсталляции L0phtCrack. Даже если L0phtCrack был деинсталлирован, то остается следующий ключ регистра.

    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\L0phtcrack 2.5

    Если системный администратор находит это в реестре, то можно быть на 100% уверенным, что L0phtCrack когда-то был инсталлирован в системе. Затем администратор может поискать "недавно использовавшиеся" (MRU) значения в регистре файлов с расширением .lc. Даже если пользователь удалил "sam_pdc.lc" из файловой системы, то ссылки на него по-прежнему могут присутствовать в регистре!

    Реализация

    Программа должна запускаться локально. Это вторая версия утилиты, первоначально разработанной Джереми Алисоном в проекте Samba. В отличие от первой версии, для pwdump2 шифрование базы данных SAM с использованием SysKey не является препятствием. Шифрование SysKey было добавлено в Windows NT с целью увеличить безопасность базы данных SAM, но эффективность этого шага спорна, как мы убедимся с помощью pwdump2. Применение pwdump2 показано ниже.

    C:\>pwdump2.exe /?
    
    Pwdump2 - dump the SAM database.
    Usage: pwdump2.exe <pid of lsass.exe>

    Для получения паролей утилита должна запускаться с полномочиями администратора.

    C:\>pwdump2.exe
    Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46...
    Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c...
    skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

    Обычно у вас не было необходимости выяснять идентификатор ID (PID) для программы lsass.exe. Однако вы можете использовать один простой путь, чтобы найти его с помощью команд tlist или pulist и команды find (параметр /i указывает команде find игнорировать регистр).

    C:\>tlist/find /i "lsass"
     244 LSASS.EXE
    
    C:\>pulist/find /i "lsass"
    LSASS.EXE   244 NT AUTHORITY\SYSTEM
    
    C:\>pwdump2.exe 244
    Administrator:500:f1e5c5efbc8cfb7f18136fb05f77a0bf:55c77b761ffa46...
    Orc:501:cbc501a4d2227783cbc501a4d2227783:f523558e22c95c62a6d6d00c...
    skycladgirl:1013:aa5536a42ebe131baad3b235b51404ee:db31a1ee00bfbee...

    Данные, полученные утилитой pwdump2 нельзя напрямую использовать в L0phtCrack, поскольку он не может их читать. Причина в том, что алфавитные символы в шифрованной строке представлены в нижнем регистре; L0phtCrack читает на входе символы верхнего регистра. У John the Ripper нет таких проблем. К счастью, утилита tr (translate characters) может помочь тем, кто хочет использовать утилиту с графическим интерфейсом. Эта утилита работает как под Unix, так и под Cygwin, и была приспособлена под Windows, как часть набора утилит Resource Kit.

    [user@hediwg ]$ cat pwdump.out/tr a-z A-Z
    ADMINISTRATOR:500:F1E5C5EFBC8CFB7F18136FB05F77A0BF:55C77B761FFA46...
    ORC:501:CBC501A4D2227783CBC501A4D2227783:F523558E22C95C62A6D6D00C...
    SKYCLADGIRL:1013:AA5536A42EBE131BAAD3B235B51404EE:DB31A1EE00BFBEE...

    Pwdump3

    Утилита ), разработанная Филом Стаубсом, отличается от pwdump возможностью удаленного доступа к подозрительной машине. Существует четная версия pwdump3e, которая шифрует удаленное соединение для предотвращения доступа недобросовестных пользователей с целью перехвата паролей. Использование утилиты мало чем отличается от других.

    Usage: PWDUMP3 machineName [outputFile] [userName]
    C:\>PwDump3.exe victim pwdump.out root
    C:\>type pwdump.out
    guest:1001:NO PASSWORD*********************:2DEAC3223C70B24E90F02...
    wwwadmin:500:NO PASSWORD*********************:9CBD10B05F8E69B62F2...
    IUSR_WWW01:1003:6E72211CDC51C9F8EB9293C3135F3985:0E2A2DCE3B6ABFBA...

    Чтобы pwdump3 работала корректно, вам необходимо установить доступ к общему ресурсу ADMIN$. Утилита устанавливает такое соединение и запрашивает пароль администратора. В противном случае, вы можете установить соединение вручную с использованием команды net.

    C:\>net use \\victim\admin$ * /u:Administrator
    Type the password for \\localhost\admin$:
    The command completed successfully.

    Lsadump2

    Программа ) делает процесс сбора паролей тривиальным. Это еще одна утилита от Тода Сабина, который обновил созданную Паулем Аштоном программу. Различия между Lsadump2 и pwdump в том, что Lsadump2 выводит действительные текстовые пароли, а не шифрованные строки. Понятно, что это предпочтительнее, пока вы не можете запустить какую либо утилиту взлома паролей. К сожалению, Lsadump2 извлекает пароли, только если они были сохранены в памяти с использованием Local Security Authority (LSA). Такое случается, когда Web-приложение соединяется с SQL-базой данных, или когда утилита резервирования соединяется удаленно с машиной для архивирования файлов.

    Реализация

    Для запуска Lsadump2 требуются полномочия администратора. Применение Lsadump2 показано ниже.

    C:\>lsadump2.exe
    Lsadump2 - dump an LSA secret.
    Usage: lsadump2.exe pid of lsass.exe <secret>

    Вам необходимо знать идентификатор ( PID ) процесса lsass (так же как и для pwdump2 ).

    C:\>tlist/find /i "lsass"
    244 LSASS.EXE
    Совет. Идентификатор процесса LSA (PID) также хранится в реестре в этом ключе:
    HKLM\SYSTEM\ CurrentControlSet\Control\Lsa\LsaPid.

    Эта утилита выводит текст "secret" для имеющих отношение к безопасности системы процессов, находящихся в памяти. Секретом может быть пароль, использованный для доступа к службе, номер телефона для службы RAS, или пароль удаленной службы резервирования. Вывод форматируется в две колонки.

    aspnet_WP_PASSWORD
            
    61 00 77 00 41 00 39 00 65 00 68 00 68 00 61 00   a.w.A.9.e.h.h.a.
    4B 00 38 00                                       K.8.

    Левая колонка содержит ряд шестнадцатеричных цифр, имеющих отношение к службе. Правая колонка содержит ASCII-представление данных. Если на вашей машине под управлением Windows 2000 установлена служба .NET, то, скорее всего, у вас есть пользователь с именем ASPNET. Lsadump2 частично нашел пароль для этого пользователя, показанный жирным шрифтом. Обратите внимание, что Windows сохраняет пароли в формате Unicode, чем и объясняется наличие символов (00) после каждой буквы. К счастью, настройки по умолчанию для этого пользователя не позволяют осуществлять удаленный доступ или выполнение команд.

    Средства активного взлома

    Средства активного взлома являются последним веянием в деле подбора паролей. Они генерируют большое количество паразитного шума в сети и в отношении атакуемой машины (поэтому их деятельность может долгое время оставаться незамеченной). Непременным условие начала активной атаки является наличие правильного имени пользователя на атакуемой системе. В лекции "Средства ревизии Windows" подробно рассказано о приемах получения имени пользователя.

    Другим распространенным шагом перед началом атаки является попытка выяснения времени блокирования доступа после ввода неправильного пароля. Если период блокирования составляет 30 минут после того, как пароль введен неправильно пять раз, вы не захотите терять 29 минут 30 секунд на работу, которая не будет иметь успеха.

    SMBGrind

    Утилита SMBGrind является частью сканера уязвимостей CyberCop. Это утилита командной строки, которая осуществляет подбор паролей, используя имена и пароли из текстового файла.

    Реализация

    Вдобавок к приобретению и установке комплекта CyberCop, вам понадобится только одно необходимое условие - создать файл для имен пользователей и паролей. Ниже показано применение утилиты.

    C:\>smbgrind.exe -i 192.168.209.117 -u users.txt -p pass.txt -v
    
    Host address    : 192.168.209.117
    Userlist    : users.txt
    Passlist        : pass.txt
    Cracking host 192.168.209.117 (*SMBSERVER)
    Parallel Grinders: 10
    Percent complete: 0
    Trying: domain\NetAdm   administrator
    Trying: domain\NetAdm   Pass!word1
    Trying: domain\NetAdm   password
    Trying: domain\NetAdm   change%me
    Trying:     administrator       administrator
    Trying:     administrator       Pass!word1
    Trying:     administrator       password
    Trying:     administrator       change%me
    Percent complete: 75
    Trying:         guest       administrator
    Trying:         guest       Pass!word1
    Trying:         guest       password
    Trying:         guest       change%me
    Percent complete: 100
    Grinding complete, guessed 0 accounts

    SMBGrind - достаточно быстрая программа, но склонная к ошибочным положительным решениям. Программа порождает пакеты со строкой CYBERCOP в качестве полезной нагрузки. Следовательно, деятельность программы может быть обнаружена системами IDS в сети, или строку CYBERCOP можно обнаружить в журнале событий, ведущемся для фиксирования неудавшихся попыток подбора пароля.

    Другим недостатком является невозможность направить атаку против конкретных общих ресурсов. Инструмент, который направлен на взлом ресурсов ADMIN$ или C$, в Windows может поставить под угрозу целостность всей системы, но для хитрого взломщика более привлекательным может оказаться доступ к ресурсу "wwwroot".

    Nbaudit (nat)

    Программа Nbaudit по сравнению с SMBGrind позволяет пользователю сканировать интервал IP-адресов. Это прием чаще применяется для поиска опасных уязвимостей, таких как профиль администратора с пустым паролем.

    Реализация

    Ниже приведен способ использования программы nbaudit.

    usage: nbaudit [-o filename] [-u userlist] [-p passlist] <address>

    Параметры userlist и passlist должны быть понятны без разъяснений. Параметр -o используется для задания выходного файла для сообщений о работе nbaudit. Параметр < address > может ввести вас в заблуждение. Он задает адрес или интервал адресов в следующем формате.

  • 192.168.0.1. Уникальный IP адрес.
  • 192.168.0.1-32. IP между 192.168.0.1 и 192.168.0.32, включая крайние адреса.
  • 192.168.0.1-32,200-244. То же самое, что и в предыдущем примере, но добавлены IP-адреса между 192.168.0.200 и 192.168.244.
  • Ниже приведен пример вывода программы nbaudit.

    [*] --- Checking host: 192.168.1.1
    [*] ---     Obtaining list of remote NetBIOS names
    [*] ---     Remote systems name tables:
        PRINTSERVER
        PRINTSERVER
        PRINTSERVER
        _MSBROWSE_
        HOTEL
        HOTEL
        HOTEL
        HOTEL
    [*] --- Attempting to connect with name: *
    [*] ---     CONNECTED with name: *
    [*] ---     Attempting to connect with protocol: MICROSOFT NETWORKS 1.03
    [*] ---     Remote server wants us to encrypt, telling it not to
    [*] ---     Attempting to connect with protocol: LM1.2X002
    [*] ---     Server time is Mon Jan 28 02:06:08 2002
    [*] ---     Timezone is UTC-8.0
    [*] ---     Attempting to establish session
    [*] ---     Obtained server information:
        Server=[*] User=[administrator] Workgroup=[HOTEL] Domain=[HOTEL]
        [*]- Obtained listing of shares:
        Sharename   Type    Comment
        ------- ---     ------
        IPC             IPC:    IPC Service (PrintServer)
        Printer         Printer:    Hotel Public Printer
        printer$        Disk:
    [*] ---     This machine has a browse list:
        Server              Comment
        ----                ------
        PRINTSERVER     PrintServer
    [*] ---     Attempting to access share: \\*\
    [*] ---     Unable to access
    [*] ---     Attempting to access share: \\*\printer$
    [*] ---     WARNING: Able to access share: \\*\printer$
    [*] ---     Checking write access in: \\*\printer$
    [*] ---     Attempting to exercise .. bug on: \\*\printer$
    [*] ---     Attempting to access share: \\*\ADMIN$
    [*] ---     Unable to access
    [*] ---     Attempting to access share: \\*\C$
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\D$
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\ROOT
    [*] --- Unable to access
    [*] --- Attempting to access share: \\*\WINNT$
    [*] --- Unable to access

    Nbaudit атакует все обнаруженные общие ресурсы. В этом примере программа успешно соединилась с ресурсом printer$ с нулевым паролем. Если программа осуществляет соединение по имени пользователя и паролю из списка, то на выход выдается информация об удачных соединениях. Это повышает их рейтинг, поскольку дает возможность осуществлять соединение с большим количеством общих ресурсов.

    Вернуться к учебному плану