Рисунок 1.3 - Эффективность применения шестисимвольного пароля по отношению к четырехсимвольному паролю с возможным использованием в алфавите 26 символов
В таблице 1.1 показано количество комбинаций, получающихся в зависимости от набора символов, используемых при формировании пароля, а также время, необходимое для полного перебора всех вариантов, при условии, что в одну секунду перебирается 1,000,000 вариантов.
Таблица 1.1. Зависимость времени на перебор паролей от длины и алфавита
Количество символов в пароле |
Количество комбинаций из 160 символов |
Время на полный перебор (лет) |
Количество комбинаций из русских букв (больших и маленьких) |
Время на полный перебор (лет) |
6 |
1.67*1013 |
0.5 |
8.2*1010 |
1 день |
7 |
2.68*1015 |
85 |
5.5*1012 |
2 мес. |
8 |
4.29*1017 |
1.4*104 |
3.6*1014 |
10 |
9 |
6.87*1019 |
2.2*106 |
2.4*1016 |
750 |
10 |
1.1*1022 |
3.5*108 |
1.6*1018 |
5*104 |
Одним из основных компонентов системы безопасности Windows NT является диспетчер учетных записей пользователей. Он обеспечивает взаимодействие других компонентов системы безопасности, приложений и служб Windows NT с базой данных учетных записей пользователей (Security Account Management Database, SAM). Эта база обязательно имеется на каждом компьютере с операционной системой Windows NT. В ней хранится вся информация, используемая для аутентификации пользователей Windows NT при интерактивном входе в систему и при удаленном доступе к ней по компьютерной сети.
База данных SAM представляет собой один из многих разделов (hive) системного реестра (registry) Windows NT. Этот раздел принадлежит ветви (subtree) HKEY_LOCAL_MACHINE и называется SAM. Он располагается в каталоге \wmnt_root\System32\ConfIg (winnt_root — условное обозначение каталога с системными файлами Windows NT) в отдельном файле, который тоже называется SAM.
Информация в базе данных SAM хранится в основном в двоичном виде. Доступ к ней обычно осуществляется через диспетчер учетных записей. Изменять записи, находящиеся в базе данных SAM, при помощи программ, позволяющих напрямую редактировать реестр Windows NT (REGEDT или REGEDT32), не рекомендуется. По умолчанию этого и нельзя делать, т. к. доступ к базе данных SAM запрещен для всех без исключения категорий пользователей операционной системы Windows NT.
Именно в учетных записях базы данных SAM находится информация о пользовательских именах и паролях, которая необходима для идентификации и аутентификации пользователей при их интерактивном входе в систему. Как и в любой другой современной многопользовательской операционной системе, эта информация хранится в зашифрованном виде. В базе данных SAM каждый пароль пользователя обычно бывает представлен в виде двух 16-байтовых последовательностей, полученных разными методами.
При использовании первого метода строка символов пользовательского пароля хэшируется с помощью функции MD4. В итоге из символьного пароля, введенного пользователем, получается 16-байтовая последовательность — хэшированный пароль Windows NT. Данная последовательность затем шифруется по DES-алгоритму, и результат шифрования сохраняется в базе данных SAM [25]. При этом в качестве ключа используется так называемый относительный идентификатор пользователя (Relative Identifier, RID), который представляет собой автоматически увеличивающийся порядковый номер учетной записи данного пользователя в базе данных SAM.
Для совместимости с другим программным обеспечением корпорации Microsoft в базе данных SAM хранится также информация о пароле пользователя в стандарте Lan Manager. Для ее формирования используется второй метод. Все буквенные символы исходной строки пользовательского пароля приводятся к верхнему регистру, и, если пароль содержит меньше 14 символов, то он дополняется нулями. Из каждой 7-байтовой половины преобразованного таким образом пароля пользователя отдельно формируется ключ для шифрования фиксированной 8-байтовой последовательности по DES-алгоритму. Полученные в результате две 8-байтовые половины хэшированного пароля Lan Manager еще раз шифруются по DES-алгоритму (при этом в качестве ключа используется RID пользователя) и помещаются в базу данных SAM.
Информация о паролях, занесенная в базу данных SAM, служит для аутентификации пользователей Windows NT. При интерактивном или сетевом входе в систему введенный пользователем пароль сначала хэшируется и шифруется, а затем сравнивается с 16-байтовой последовательностью, записанной в базе данных SAM. Если они совпадают, пользователю разрешается вход в систему.
Обычно в базе данных SAM хранятся в зашифрованном виде оба хэшированных пароля. Однако в некоторых случаях операционная система вычисляет только один из них. Например, если пользователь домена Windows NT изменит свой пароль, работая на компьютере с Windows for Workgroups, то в его учетной записи останется только пароль Lan Manager. А если пользовательский пароль содержит более 14 символов или если эти символы не входят в так называемый набор поставщика оборудования (original equipment manufacturer, OEM), то в базу данных SAM будет занесен только пароль Windows NT.
Основным смыслом атаки на базу данных SAM злоумышленником, является получение административных полномочий. Их можно получить, узнав в хэшированном или символьном виде пароль администратора системы, который хранится в базе данных SAM.
По умолчанию в операционной системе Windows NT доступ к файлу \winnt_root\System32\Config\SAM заблокирован для всех без исключения ее пользователей. Тем не менее, с помощью программы NTBACKUP любой обладатель права на резервное копирование файлов и каталогов Windows NT может перенести этот файл с жесткого диска на внешний носитель. Резервную копию реестра также можно создать утилитой REG ВАК из Windows NT Resource Kit. Также, особое внимание злоумышленника представляют резервная копия файла SAM (SAM.SAV) в каталоге \winnt_root\System32\Config и сжатая архивная копия SAM (файл SAM._) в каталоге \winnt_root\Repair.
При наличии физической копии файла SAM извлечь хранимую в нем информацию не представляет никакого труда. Загрузив файл SAM в реестр любого другого компьютера с Windows NT (например, с помощью команды Load Hive программы REGEDT32), можно в деталях изучить учетные записи пользователей, чтобы определить значения RID пользователей и шифрованные варианты их хэшированных паролей. Зная RID пользователя и имея зашифрованную версию его хэшированного пароля, злоумышленник может попытаться расшифровать этот пароль, чтобы использовать его, например, для получения сетевого доступа к другому компьютеру. Однако для интерактивного входа в систему одного лишь знания хэшированного пароля недостаточно. Необходимо получить его символьное представление.
Для подбора пользовательских паролей операционной системы Windows NT в символьном виде существуют специальные утилиты, которые выполняют как прямой подбор паролей, так и поиск по словарю. Утилиты также используют комбинированный метод взлома парольной зашиты, когда в качестве словаря задействуется файл с заранее вычисленными хэшированными паролями, соответствующими символьным последовательностям, которые часто применяются в качестве паролей пользователей операционных систем.
С увеличением мощностей персональных компьютеров, атака типа подбора паролей к учетным записям пользователей стала наиболее популярной атакой в ОС UNIX. В настоящее время существует множество программ, занимающихся подбором пароля к UNIX-машине.
Ключевая информация необходимая для подбора паролей находится в файле /etc/passwd, это информация обо всех пользователях системы, включая его входное имя, пароль, полное имя и т. п. В 70-х годах, когда создавались первые версии UNIX, его разработчикам было понятно, что пароль пользователя нельзя хранить в открытом виде. Разработчики UNIX создали схему, благодаря которой целенаправленные атаки, направленные на получение пароля другого пользователя, смогли реализоваться только спустя 15 лет. Они не пошли по простому пути шифрования пароля по какому-то секретному алгоритму, т. к. рано или поздно этот алгоритм стал бы известен. Они выбрали путь необратимого преобразования пароля, когда из исходного пароля путем применения к ней специальной однонаправленной функции (называемой функцией хэширования) получалось некое значение, из которого никак нельзя получить исходный пароль. Разработчики взяли математически криптостойкий алгоритм DES и на основе его создали функцию crypt(), преобразующую пароль в строку, расположенную в файле /etc/passwd. В данном файле хэшированная информация и располагается через двоеточие сразу после имени соответствующего пользователя. Например, запись, сделанная в файле passwd относительно пользователя с именем bill, будет выглядеть примерно так:
bill:5fg63fhD3d5g:9406:12:Bill Spencer:/home/fsg/will:/bin/bash
Здесь 5fg63fhD3d5g — это и есть информация о пароле пользователя bill.
Ниже представлен алгоритм, применяемый UNIX для преобразования пароля пользователя. Из исходного пароля берутся первые восемь байт. Также выбирается некоторое 12-битное случайное число (salt), используемое для операции хэширования. Его необходимость следует из того, чтобы одинаковые пароли (возможно, у разных людей) не выглядели одинаково после хэширования. Затем к этим двум параметрам применяется специальная функция шифрования, дающая на выходе 64-битное значение. Сам salt преобразуется в два читабельных ASCII-символа, а хэш - в 11 символов. Функция crypt (passwd8, salt) выдает 13-символьную строчку, которая и записывается в файл /etc/passwd.
При входе пользователя в систему вызывается та же функция crypt() с введенным паролем и salt, полученным из /etc/passwd. Если результат функции оказывается равным тому значению, что хранится в файле, то аутентификация считается состоявшейся.
Файл /etc/passwd дает немало информации о пользователе: его входное имя, имя и фамилию, домашний каталог. Вирус Морриса, при подборе пароля, с успехом пользовался следующими предположениями:
- в качестве пароля берется входное имя пользователя;
- пароль представляет собой двойной повтор имени пользователя;
- то же, но прочитанное справа налево;
- имя или фамилия пользователя;
- то же, но в нижнем регистре.
Если злоумышленник имеет доступ к парольному файлу /etc/passwd операционной системы UNIX, то он может скопировать этот файл на свой компьютер и затем воспользоваться одной из программ для подбора паролей. На рисунке 1.4 наглядно представлен процесс подбора паролей в ОС UNIX методом тотального перебора, оптимизированного с помощью словарей.
Рисунок 1.4 - Процесс подбора паролей в ОС UNIX методом тотального перебора, оптимизированного с помощью словарей
Для успешного выполнения атаки подбора паролей в ОС Windows необходимо получение SAM-файла и файла SYSTEM. Для усиления безопасности компания Microsoft добавила в операционную систему утилиту SYSKEY, которая первоначально входила в Service Pack 3 для Windows NT 4.0. Данная утилита позволяет дополнительно зашифровывать хэши паролей учетных записей пользователей с применением 128-битного ключа, что делает невозможным процесс извлечения хэшей из SAM-файла некоторыми программами, например программой SAMDump. В операционных системах Windows 2000/2003/XP утилита SYSKEY активирована по умолчанию, а дополнительное шифрование не может быть заблокировано.
При активированном режиме SYSKEY ключ шифрования паролей, который кодируется с помощью системного ключа, может храниться как локально, так и отдельно — на внешнем носителе.
Впервые способ преодоления защиты SYSKEY был предложен Тоддом Сабином (Todd Sabin) в его программе pwdump2. Данный способ может быть реализован только на локальной машине, и для создания дампа паролей методом pwdump2 необходимо иметь права администратора. Работа утилиты pwdump2 основана на внедрении библиотеки samdump.dll, посредством которой она записывает свой код в пространство другого процесса (lsass.exe), обладающего более высоким уровнем привилегий. Загрузив библиотеку samdump.dll в процесс lsass (системная служба Local Security Authority Subsystem, LSASS), программа использует те же самые внутренние функции интерфейса API, чтобы обратиться к хэшам паролей. Это означает, что утилита получает доступ к зашифрованным паролям без их расшифровки.
Кроме метода внедрения библиотеки, существуют и другие способы обхода ограничения защиты SYSKEY. Например, если имеется доступ к самому ключу, который может храниться на локальной машине, то можно расшифровать данные SAM-файла. Ключ является составной частью реестра, и информация о нем может быть извлечена из файла SYSTEM, который сохраняется в той же директории, что и файл SAM. При загруженной операционной системе Windows файл SYSTEM, так же как и файл SAM, является заблокированным, при этом отсутствует возможность его копирования или модификации.
Получение SAM-файла и системного ключа шифрования для локального ПК. При использовании утилит подбора паролей по их хэш-функциям необходимо получить SAM-файл и файл SYSTEM. Некоторые утилиты (в частности, SAMinside), позволяют сделать это и при загруженной операционной системе. Данная операция возможна только при условии, что компьютер загружен под учетной записью пользователя, имеющего права администратора. Но если компьютер загружен под учетной записью пользователя с правами администратора нет необходимости производить атаку подбора паролей. Поэтому, наиболее типичной является ситуация, когда учетная запись с правами администратора неизвестна, и нужно подобрать пароль администратора или любого пользователя данного ПК с правами администратора.
В этом случае необходимо предварительно скопировать два файла: SAM и SYSTEM, которые расположены в директории %systemroot%\system32\config (по умолчанию это директория С\Windows\system32\config).
Для осуществления данной процедуры требуется загрузить компьютер с помощью альтернативной операционной системы. Один из вариантов — создание загрузочного диска Live CD. Необходимо также вставить флэш-диск USB, чтобы иметь возможность скопировать на него нужные файлы.
После загрузки компьютера с помощью альтернативной операционной системы нужно скопировать на флэш-диск два файла: SAM и SYSTEM.
Данный способ получения файлов SAM и SYSTEM применяется в тех случаях, когда имеется локальный доступ к компьютеру и необходимо получить учетную базу пользователей вместе с хэш-функциями паролей, хранящимися на самом компьютере. Для получения сетевого пароля используется иная процедура.
Получение SAM-файла и системного ключа шифрования для сетевого компьютера. В случае локальной сети файлы SAM и SYSTEM хранятся на контроллере домена, и в данном случае получить доступ сложнее. При использовании того же способа, что и для локального ПК процедура получения файлов может быть замечена. Некоторые утилиты (например, LCP 5.04) поддерживают возможность удаленного получения SAM-файла с контроллера домена. Для реализации такого способа необходимо обладать правами доступа администратора сети или контроллера домена. На контроллере домена можно легко заблокировать возможность удаленного доступа к реестру — в этом случае все попытки извлечь SAM-файл по сети будут заблокированы.