Rambler's Top100
10 февраля 2012 года
Hacker-friendly-авторизация
Автор: Андрей Васильков
Опубликовано в журнале "Компьютерра" №11 от 09 апреля 2004 года

Рано или поздно рядовому пользователю приходится заниматься взломом. Причины различны — от банального склероза (забыл пароль) до желания нормально работать в какой-нибудь локальной сети, не ограничиваясь правами гостя. На большинстве компьютеров сейчас установлена та или иная версия Windows NT (4.0/5.0/5.1), что делает задачу довольно легко разрешимой. Рассмотрим способы взлома этих операционных систем при условии наличия физического доступа к атакуемому компьютеру.

Мы можем оказаться в одной из двух ситуаций:

- Нужно узнать пароль в системе.
- Нужно получить доступ в систему (желательно с администраторскими привилегиями, чтобы ни в чем себе не отказывать).

Казалось бы, зачем узнавать пароль, если существуют способы авторизоваться и без него? Во-первых, зная пароль, не придется заметать следы взлома. Вы просто входите от имени другого пользователя (или администратора) и работаете из-под его учетной записи. Во-вторых, не имея оригинального пароля (сбросив его, заменив своим или пустым), вы не сможете получить доступ к файлам, которые пользователь зашифровал посредством EFS1. То же самое касается личных ключей из сертификатов2.

Восстановление пароля


Начнем с первой задачи (восстановление пароля).
В семействе операционных систем Windows NT для аутентификации используется не сам вводимый пароль, а его хэш3. Для входа в систему может использоваться любой из двух типов хэшей, обозначаемых LM (от LanMan) и NT. Учетные записи пользователей и их хэши хранятся в файле, расположенном по адресу4 %Системная_директория%\SYSTEM32\CONFIG\sam (SAM расшифровывается как Security Account Manager).
Файл заблокирован, пока загружена Windows NT/2000/XP. Его чтение/запись невозможны даже при наличии прав администратора. Чтобы обойти это препятствие, придется загрузиться в другой ОС (MS-DOS с дискеты, к примеру) и скопировать SAM из-под нее. В случае файловой системы NTFS придется к тому же воспользоваться программой, поддерживающей режим чтения NTFS. Например, ERD Commander, CIA Commander, NTFSDOS и т. д.

Заполучив файл SAM, можно приступать к отысканию паролей доступа. Однако невозможно провести обратную процедуру и вычислить исходный пароль на основании его хэша, поскольку хэширование — однонаправленное преобразование. Для решения этой задачи используется метод подбора пароля различными способами. Суть его в том, что каждый пароль, который может быть использован в системе, хэшируется по алгоритму LM или NT, после чего сравниваются два хэша: проверяемого пароля и хранящегося в файле SAM. Если они совпадают, то считается, что пароль найден. Если нет, перебор продолжается.

Поскольку LM-хэш менее надежный, то для получения несанкционированного доступа пароли подбирают, сравнивая именно LM-, а не NT-хэши, хотя никто не запрещает работать и с NT-хэшами, а в некоторых случаях (см. далее) сравнение NT-хэшей вообще единственный способ подобрать пароль.

LM- и NT-хэши имеют фиксированную длину в 16 байт независимо от длины вводимого пароля и его структуры. Windows NT версии 5.0 (2000) и старше разрешают использовать в качестве парольного символа любой из 256 кодов ASCII, а длина пароля ограничивается 127 символами. Перед хэшированием по алгоритму LM все буквенные символы в пароле приводятся к верхнему регистру. Таким образом, 26 символов строчных букв латинского алфавита и 33 русского надо исключить из 256 вариантов ASCII-символов. Отсюда следует, что в локализованной версии Windows NT для создания пароля доступны 256 – (26+33) = 197 символов.

При длине пароля более 14 символов (предел для WinNT 4.0) алгоритм подготовки паролей к LM-хэшированию не может быть выполнен корректно. Происходит ошибка, в результате которой LM-хэш всегда принимает значение, соответствующее нулевому паролю. C NT-хэшем таких проблем нет. Из-за этой ошибки подбор пароля длиной более 14 символов путем сравнения LM-хэшей невозможен в принципе. Придется считать и сравнивать NT-хэши, что займет гораздо больше времени. В то же время, если длина пароля превышает 14 символов, это можно определить сразу — лишь взглянув на LM-хэш.

При хэшировании пароля по алгоритму NT различаются регистры букв — следовательно, любой из 256 кодов ASCII не просто допустим, а обрабатывается уникально и потому имеет реальный вес. Непосредственным перебором пароль длиной более 14 символов в Windows NT 5.0/5.1 пришлось бы искать среди примерно 7,05х10305 вариантов5.

В тоже время число возможных NT-хэшей гораздо меньше — 2128=25616 »3,4х1038 вариантов. Иными словами, смысла делать пароль длиннее 16 символов нет. Все равно хэш получится шестнадцатибайтным с теми же 256 вариантами допустимых значений для каждого байта. При длине пароля от 17 до 127 символов его хэш будет совпадать с одним из хэшей другого пароля, длиной до 16 символов включительно.

Внушительное количество возможных комбинаций (3,4х1038) являлось бы реальной характеристикой стойкости пароля только в том случае, если каждый бит хэша равновероятно может быть как единицей, так и нулём. На самом деле это не так. Хэш формируется на основе пароля, а в качестве символов последнего обычно используют буквы, реже цифры, еще реже — специальные символы. Поэтому вероятность одних паролей (и следовательно хэшей) гораздо выше, чем других. До сих пор избирательная атака по словарю и её комбинированный вариант позволяют вскрыть большую часть паролей сколь угодно криптографических стойких систем. Нет особой разницы между практической надежностью 64- и 1024-битного ключа, если ваш пароль key или 123. Такой пароль вскроют прежде, чем вы дочитаете это предложение до конца.

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

Пароли до 14 символов включительно вскрываются сравнением LM-хэшей. Тут все несколько проще: длина хэша также всегда равна шестнадцати байтам (либо дополняется до двадцати одного байта при сетевой аутентификации), а каждый символ пароля может принимать одно из 197 значений. Однако для нахождения пароля вовсе не обязательно перебирать весь диапазон вариантов (5,15х1036). Дело в том, что в результате подготовки пароля к хэшированию по алгоритму LM он претерпевает ряд изменений6:

- В зависимости от длины введенный пароль усекается либо дополняется нулями так, чтобы из него получилась строка в 14 байт.
- Все буквы приводятся к верхнему регистру.
(Пропускаем ряд операций, связанных с шифрованием по алгоритму DES.)
- На выходе формируется шестнадцатибайтный хэш.
Затем, если речь идет о сетевой аутентификации (LM challenge/response):
- К хэшу дописываются пять нулей (получается строка в 21 байт), и он делится на три части по 7 байт.
- Каждая часть шифруется независимо по алгоритму DES.

Если пароль был короче восьми символов, то байты от 15-го до 21-го включительно (третья часть 21-байтного хэша) всегда равны 0х04ЕЕ0000000000. Таким образом, можно сразу определить, что пароль короче восьми символов.


1 Encrypting File System — возможность файловой системы NTFS хранить данные в зашифрованном виде.
2 См. www.support.microsoft.com/?kbid=290260.
3 Хэшем (hash) называют числовое значение фиксированной длины, полученное в результате обработки данных (одного символа, одного слова, строки или файла) по какому-либо hash-алгоритму. Например, MD5, SHA-512. Понятие «контрольной суммы» (CRC-16, CRC-32) близко к понятию хэша, но не эквивалентно ему. Хэши обладают рядом уникальных свойств. Так, зная хэш, невозможно судить о структуре и даже размере первоначальных данных. Функция хэширования является однонаправленной. При изменении хотя бы одного бита данных их хэши будут абсолютно разными.
4 Также пароли хранятся в резервной копии файла SAM (каталог %Системная_директория%\repair и диски аварийного восстановления) с именем sam._ (архив CAB).
5 Обозначим буквой W количество допустимых для использования символов, а буквой q — длину пароля. При этом учтем, что длина пароля лежит в диапазоне от 15 до 127 включительно, то есть может принимать любое из 113 значений. Тогда получим, что общее количество возможных паролей F рассчитывается по формуле: F = (Wq)+(Wq–1)+(Wq–2)+(…)+(Wq–113). Подставляем значения: F = (256127)+(256126)+(256125)+(…)+(25614) » 7,05х10305.
6 Крис Касперски, «Техника сетевых атак».

стр. 2>>

ТАКЖЕ В РАЗДЕЛЕ
24 февраля 2009 года
Не отрываясь 
24 февраля 2009 года
Жилец вершин 
10 февраля 2009 года
Гаджеты, которых нет 
10 февраля 2009 года
Схватка 
10 февраля 2009 года
Список задач 
 
MARKETGID