Windows NT: Чем нас пытаются взломать: Часть I. Краткий обзор программ-взломщиков паролей для Windows NT
Основная проблема заключается не в том, что на свете существуют программы - взломщики паролей, а в том, что ими недостаточно часто пользуются системные администраторы.
Проблему безопасности компьютерных сетей надуманной не назовешь. Практика показывает: чем масштабнее сеть и чем ценнее информация, тем больше желающих нарушить нормальное функционирование компьютерной системы ради материальной выгоды или просто из любопытства. Идет постоянная виртуальная война - изобретательности компьютерных взломщиков противостоит организованность системных администраторов.
Основным защитным рубежом против компьютерных атак является система парольной защиты. Такие системы есть во всех современных программных продуктах. Обычно перед началом работы с ОС пользователь обязан зарегистрироваться, сообщив системе свое имя и пароль. Имя требуется для идентификации пользователя, а пароль служит подтверждением правильности этой идентификации. Информация, введенная пользователем, сравнивается с той, что имеется в распоряжении операционной системы. Если проверка дает положительный результат, то пользователю становятся доступны все ресурсы операционной системы, связанные с его именем.
Что такое парольный взломщик?
Наиболее эффективным методом взлома парольной защиты операционной системы является атака на системный файл, содержащий информацию о легальных пользователях и их паролях. Однако в любой современной ОС пользовательские пароли, которые хранятся в этом файле, надежно защищены при помощи шифрования.
Кроме того, доступ к таким файлам, как правило, по умолчанию запрещен даже для системных администраторов, не говоря уже о рядовых пользователях. Тем не менее, иногда злоумышленникам удается получить в свое распоряжение файл с именами пользователей и их зашифрованными паролями. И тогда для расшифровки паролей применяются так называемые парольные взломщики - специализированные программы для взлома паролей операционных систем.
Как работает парольный взломщик?
Криптографические алгоритмы, применяемые для шифрования паролей в современных ОС, достаточно стойкие, для того чтобы не позволить подобрать метод дешифровки, более эффективный, чем тривиальный прямой перебор возможных вариантов.
Поэтому парольный взломщик иногда просто шифрует пароли с использованием того же криптографического алгоритма, который применяется для их засекречивания в атакуемой ОС. Затем он сравнивает результаты шифрования с содержимым системного файла.
В качестве вариантов парольные взломщики используют последовательности, автоматически генерируемые из некоторого набора символов. Такой способ позволяет взломать любой пароль, если известно его представление в зашифрованном виде и если он содержит только символы из данного набора.
Благодаря очень большому числу перебираемых комбинаций, которое к тому же экспоненциально растет с увеличением числа символов в исходном наборе, такие атаки парольной защиты ОС требуют слишком много времени. Однако хорошо известно, что большинство пользователей операционных систем особо не утруждает себя выбором стойких паролей. Поэтому для более эффективного подбора паролей взломщики используют специальные словари наиболее часто используемых паролей.
К каждому слову из словаря парольный взломщик применяет одно или несколько следующих правил, в соответствии с которыми оно видоизменяется и порождает дополнительное множество опробуемых паролей:
- попеременное изменение буквенного регистра, в котором набрано слово;
- порядок следования букв в слове меняется на обратный;
- в начало и в конец каждого слова приписывается цифра 1;
- некоторые буквы заменяются на близкие по начертанию цифры.
В результате, например, из слова password может получиться получается pa55w0rd.
Такой подход повышает вероятность подбора пароля, поскольку в современных ОС, как правило, различаются пароли, набранные заглавными и строчными буквами, а пользователям настоятельно рекомендуется выбирать такие, в которых буквы чередуются с цифрами.
Одни парольные взломщики поочередно проверяют каждое слово из словаря, применяя к нему определенный набор правил для генерации дополнительных "паролей". Другие сначала обрабатывают весь словарь при помощи этих же правил, получая новый словарь большего размера, из которого затем черпают проверяемые пароли. Учитывая, что словари естественных человеческих языков состоят всего из нескольких сотен тысяч слов, а скорость шифрования паролей достаточно высока, такие парольные взломщики работают достаточно быстро - на подбор пароля уходит не более одной минуты.
База учетных записей пользователей Windows NT/2000
Одним из основных компонентов системы безопасности Windows NT/2000 является диспетчер учетных записей пользователей. Он обеспечивает взаимодействие других компонентов этой системы, а также приложений и служб Windows NT/2000 с базой данных учетных записей пользователей (Security Account Management Database, SAM).
База SAM есть на каждом компьютере с Windows NT/2000. В ней хранится вся информация, используемая для аутентификации пользователей как при интерактивном входе в систему, так и при удаленном доступе к ней по компьютерной сети. SAM представляет собой один из разделов (hive) системного реестра Windows NT/2000. Этот раздел принадлежит ветви (subtree) HKEY_LOCAL_MACHINE и называется SAM.
Раздел SAM располагается в каталоге \winnt_root\System32\Config (где winnt_root - условное обозначение каталога с системными файлами Windows NT/2000) в отдельном файле, который тоже называется SAM.
Основная информация в базе SAM хранится в двоичном виде. Доступ к ней обычно осуществляется с помощью диспетчера учетных записей. Изменять записи, хранящиеся в базе SAM, при помощи программ, которые напрямую редактируют реестр Windows NT/2000 (REGEDT или REGEDT32), не рекомендуется. По умолчанию этого и нельзя сделать, так как доступ к базе SAM запрещен для всех без исключения категорий пользователей.
Хранение паролей
Именно в учетных записях SAM находится информация о пользовательских именах и паролях, необходимая для идентификации и аутентификации пользователей при их интерактивном входе в систему. Как и в любой другой современной многопользовательской ОС, эта информация хранится в зашифрованном виде. В SAM каждый пароль пользователя обычно представлен в виде двух 16-байтовых последовательностей, полученных разными методами (Win NT/2000 и LAN).
В методе Windows NT/2000 строка символов пароля хешируется с помощью функции MD4**. В результате из введенного пользователем символьного пароля получается 16-байтовая последовательность - хешированный пароль Windows NT/2000. Эта последовательность затем шифруется по DES-алгоритму - и результат шифрования сохраняется в базе SAM. В качестве ключа используется так называемый относительный идентификатор пользователя (Relative Identifier, RID). Это автоматически увеличивающийся порядковый номер учетной записи пользователя в базе SAM. Для совместимости с другим программным обеспечением Microsoft (Windows for Workgroups, Windows 95/98 и Lan Manager) в базе SAM хранится также информация о пароле пользователя в стандарте Lan Manager.
Для формирования такого пароля все буквенные символы исходного пароля приводятся к верхнему регистру. Если пароль содержит меньше 14-ти символов, он дополняется нулями. Из каждой 7-байтовой половины преобразованного пароля (длина пароля в Windows NT/2000 ограничена 14-ю символами, ограничение накладывается диспетчером учетных записей) формируется отдельный ключ для шифрования некоторой фиксированной 8-байтовой последовательности по DES-алгоритму**.
Полученные две 8-байтовые половины хешированного пароля Lan Manager еще раз шифруются по DES-алгоритму и помещаются в базу данных SAM.
Использование пароля
Информация о паролях, занесенная в базу SAM, служит для аутентификации пользователей Windows NT/2000. При входе в систему - интерактивном или сетевом - введенный пароль сначала хешируется и шифруется, а затем сравнивается с 16-байтовой последовательностью, записанной в базе данных SAM. Если эти значения совпадают, пользователю разрешается вход в систему.
Обычно в базе SAM в зашифрованном виде хранятся оба хешированных пароля. Однако в некоторых случаях ОС вычисляет только один из них. Например, если пользователь домена Windows NT/2000 изменит свой пароль, работая на компьютере с Windows for Workgroups, то в его учетной записи останется только пароль Lan Manager. А если пользовательский пароль содержит более 14-ти символов или если эти символы не входят в так называемый набор поставщика оборудования (Original Equipment Manufacturer, OEM), то в базу SAM заносится только пароль Windows NT/2000.
Возможные атаки на базу SAM
Обычно основным объектом атаки являются административные полномочия. Их можно получить, узнав в хешированном или символьном виде пароль администратора системы. Этот пароль хранится в базе данных SAM. Поэтому именно на нее обычно направлен главный удар взломщика Windows NT/2000.
По умолчанию в Windows NT/2000 доступ к файлу \winnt_root\System32\Config\SAM заблокирован для всех пользователей без исключения. Тем не менее, с помощью программы NTBACKUP любой обладатель права на резервное копирование файлов и каталогов Windows NT/2000 может перенести этот файл с жесткого диска на магнитную ленту. Резервную копию реестра можно также создать с помощью утилиты REGBAK из Windows NT Resource Kit. Кроме того, несомненный интерес для любого взломщика представляют резервная копия файла SAM (SAM.SAV) в каталоге \winnt_root\System32\Config и сжатая архивная копия SAM (SAM._) в каталоге \winnt_root\Repair.
Извлечь информацию из копии файла SAM не составляет труда. Загрузив файл SAM в реестр любого другого компьютера с Windows NT/2000 (например, с помощью команды Load Hive программы REGEDT32), можно детально изучить учетные записи пользователей, определить их значения RID и шифрованные варианты хешированных паролей. Зная RID пользователя и имея зашифрованную версию его хешированного пароля, взломщик может расшифровать этот пароль и использовать его для получения сетевого доступа к другому компьютеру.
Однако для интерактивного входа в систему знания одного лишь хешированного пароля недостаточно. Необходимо получить его символьное представление.
Для восстановления пользовательских паролей Windows NT в символьном виде существуют специальные парольные взломщики. Они выполняют как прямой подбор паролей, так и поиск по словарю, а также используют комбинированный метод взлома парольной защиты, когда в качестве словаря используется файл с заранее вычисленными хешированными паролями, соответствующими символьным последовательностям, наиболее часто применяемым пользователями в качестве паролей.
Одной из самых известных программ взлома паролей Windows NT/2000 является LOphtCrack (последняя версия этой программы носит название LC4). Впрочем, взлом - не единственное применение этой программы. C тем же успехом ею можно воспользоваться для проверки надежности имеющихся паролей. Для этого необходимо сделать следующее:
- Выбрать в окне Параметры команду Вычисление PwDump и Sniff.
- Ввести имя пользователя**.
- Ввести пароль длиной до 14-ти символов.
- Нажать на кнопку Вычислить. Результат можно сохранить в виде PwDump- или Sniff-файла.
Можно задать параметры атаки и по словарю. Помимо обычного словаря, возможно использование других словарей, содержащих, например:
- слова, записанные дважды;
- слова с обратным порядком символов;
- слова, усеченные до заданного количества символов;
- слова без гласных (за исключением заглавной);
- слова, записанные транслитом по заданной таблице транслитерации;
- слова, где русские буквы заменены на латинские в соответствии с раскладкой клавиатуры, и наоборот.
Защита Windows NT/2000 от парольных взломщиков
Вывод очевиден: одна из главных задач системного администратора Windows NT/2000 состоит в защите базы данных SAM от несанкционированного доступа. С этой целью ему необходимо:
- ограничить физический доступ ко всем компьютерам сети и, прежде всего, к контроллерам доменов;
- установить пароли BIOS на включение компьютеров и на изменение их настроек BIOS;
- рекомендуется отключить загрузку компьютеров с дискет и CD;
- для контроля доступа к файлам и папкам Windows NT/2000 системный раздел жесткого диска должен иметь формат NTFS;
- необходимо закрыть каталог \winnt_root\repair для доступа всех пользователей, включая администраторов, и разрешать к нему доступ только для утилиты RDISK, которая создает в этом каталоге архивные копии системного реестра Windows NT/2000;
- строго регламентировать правила хранения дискет аварийного восстановления (Emergency Repair Disks) и архивных копий на магнитных лентах, если на последних присутствует дубликат системного реестра Windows NT/2000.
Если компьютер с Windows NT/2000 входит в домен, то следует учитывать еще одну особенность. По умолчанию имена и хешированные пароли последних десяти пользователей, регистрировавшихся на этом ПК, сохраняются (кэшируются) в локальном системном реестре компьютера (в подразделе SECURITY\Policy\Secrets раздела HKEY_LOCAL_MACHINE). Чтобы отменить кэширование паролей на компьютерах домена, нужно с помощью утилиты REGEDT32 добавить в подраздел Microsoft\WindowsNT\CurrentVersion\Winlogon раздела HKEY_LOCAL_MACHINE параметр CashedLogonsCount со значением, равным нулю. Тип этого параметра - REG_SZ.
Для защиты базы данных SAM можно применить утилиту SYSKEY, входящую в состав Windows NT Service Pack 3. Эта утилита позволяет включить режим дополнительного шифрования информации о паролях, которая хранится в базе SAM. Уникальный 128-битовый ключ (так называемый ключ шифрования паролей - Password Encryption Key, PEK) автоматически сохраняется в системном реестре и может быть использован в дальнейшем.
Перед помещением в системный реестр ключ PEK шифруется при помощи другого 128-битового ключа, который называется системным (System Key) и хранится либо в системном реестре, либо в файле STARTUP.KEY, расположенном в корневом каталоге на отдельной дискете.
Сохранять системный ключ на магнитном носителе не обязательно. В этом случае он будет вычисляться каждый раз при запуске ОС с помощью алгоритма MD5**- на основе пароля, вводимого с клавиатуры в диалоговом окне утилиты SYSKEY.
Последние два способа хранения системного ключа обеспечивают максимальную защиту паролей, находящихся в базе SAM. Однако они исключают возможность автоматической перезагрузки ОС: для завершения перезагрузки требуется либо вставить дискету с системным ключом и подтвердить ее наличие в дисководе путем нажатия кнопки OK в появившемся диалоговом окне, либо ввести системный ключ вручную с клавиатуры.
Для повышения стойкости паролей пользователей Windows NT/2000 следует установить длину пользовательских паролей не менее 8 символов и активизировать режим устаревания паролей, вынуждающий пользователей регулярно их обновлять. Для этого применяется утилита Диспетчер пользователей (User Manager). Чем выше вероятность попытки взлома парольной защиты, тем чаще должны меняться пароли. А чтобы пользователи не вводили старые пароли повторно, необходимо включить режим хранения некоторого числа ранее использовавшихся паролей.
Утилита PASSPROP из Windows NT Resource Kit, запущенная с ключом /COMPLEX, побуждает пользователей выбирать пароли, более устойчивые к взлому. Это могут быть слова, где сочетаются буквы разных регистров, буквы с цифрами, возможно также использование специальных символов.
Для задания более строгих правил фильтрации нестойких паролей можно использовать любой из пакетов обновления Windows NT, начиная с Service Pack 2. Тогда специальная библиотека PASSFILT.DLL, находящаяся в каталоге \winnt_root\System32, будет следить за тем, чтобы каждый пароль состоял не менее чем из 5-ти символов, не содержал в себе имени пользователя, включал символы, по крайней мере, трех наборов из четырех возможных (прописных букв, строчных букв, цифр и специальных символов).
Чтобы задать такой режим проверки паролей, необходимо с помощью программы REGEDT32 добавить в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa системного реестра параметр Notification Packages (тип REG_MULTI_SZ) и присвоить ему значение PASSFILT. Если этот параметр уже имеется, то новую строку следует дописать после существующей.
Заключение
Выходит, защитить данные с помощью паролей невозможно? Вовсе нет. Следует лишь придерживаться определенных правил работы с паролями:
- не допускайте посторонних пользователей к вашему компьютеру;
- включайте экранную заставку с паролем всегда, когда ненадолго отходите от своего ПК;
- регулярно меняйте пароли на особо важные файлы и программы;
- для повышения надежности используйте пароли длиной не менее 8-ми символов, состоящие из букв, цифр и специальных знаков.
Кроме того, необходимо отметить, что, хотя в умелых руках злоумышленника программы взлома паролей представляют огромную опасность, эти же программы являются не менее ценным инструментом для системных администраторов, так как позволяют выявить слабые места в парольной защите компьютерных систем.