Где хранится пароль в windows 2003 server
Механизм хранения имен пользователей и паролей
В Windows Vista, Windows XP, Windows Server 2008 и Windows Server 2003 существует встроенный механизм, который автоматически управляет именами пользователей и паролями, необходимыми для доступа к ресурсам, требующим учетных данных, отличных от входных учетных данных пользователей. Этот компонент называется Stored User Names and Passwords. В статье рассказывается о его принципах действия и преимуществах. Кроме того, речь пойдет о ручном управлении учетными данными.
Пользователям бывает трудно запоминать многочисленные имена и пароли для доступа к различным ресурсам. Существует немало программ независимых производителей для управления учетными данными, но в Windows Vista, Windows XP, Windows Server 2008 и Windows Server 2003 предусмотрена встроенная функция для автоматического управления именами пользователей и паролями для доступа к ресурсам, требующим учетных данных, отличных от обычных данных регистрации в Windows. Этот компонент называется Stored User Names and Passwords.
С помощью Stored User Names and Passwords можно хранить учетные данные для локальной сети и ресурсов Internet. Типы учетных данных, создаваемые, управляемые и применяемые с использованием компонента:
Пользователям Windows XP Home Edition необходимо помнить, что в этой версии XP хранятся только паспортные учетные данные и имена пользователя и пароли RAS/VPN.
Рассмотрим преимущества компонента Stored User Names and Passwords, принцип его действия и возможности ручного управления учетными данными.
Преимущества Stored User Names and Passwords
При регистрации в системе локально или при регистрации в домене пользователи должны предоставить имя и пароль. После регистрации эти учетные данные становятся контекстом безопасности по умолчанию для доступа к другим ресурсам в локальной сети, удаленной сети и/или Internet. Но иногда учетных данных бывает недостаточно для доступа ко всем необходимым пользователю ресурсам. Например, дополнительные учетные данные требуются для доступа к Web-узлам с проверкой подлинности или доменам, с которыми нет доверительных отношений. Если таких ресурсов много, пользователям нужно вводить целый ряд различных учетных данных.
Разнообразные учетные данные могут потребоваться и администраторам: например, регистрация в сети с обычными учетными данными Windows и использование административных прав для выполнения определенных задач на удаленных серверах.
Необходимость помнить многочисленные комбинации имен пользователей и паролей приводит к неправильному использованию паролей, в том числе слабым паролям, одинаковым паролям для всех ресурсов и записи паролей где бы то ни было. Таких ошибок можно избежать благодаря компоненту Stored User Names and Passwords, который позволяет безопасно хранить многие учетные данные и управлять ими. Пользователям предоставляется единая процедура регистрации, так как они регистрируются только на своих компьютерах и в своих доменах. Поскольку пользователям не приходится запоминать пароли, они, скорее всего, выберут сложные пароли, что существенно повысит общую безопасность.
Учетные данные хранятся в защищенной части профиля пользователя, где они недоступны для других пользователей. Если пользователь располагает единственным профилем в масштабах всей компании (перемещаемый профиль), сохраненные имена пользователя и пароли запоминаются всегда при его регистрации в сети. Это дополнительно расширяет функциональность компонента при сохранении приемлемого уровня безопасности.
Принцип действия Stored User Names and Passwords
При попытке обратиться к Web-узлу или сетевому ресурсу, недоступному с обычными учетными данными, пользователь получает запрос об имени и пароле. Если флажок Remember my password установлен, введенная информация запоминается в профиле пользователя. В следующий раз, когда пользователь подключается к этому ресурсу, проверка подлинности выполняется автоматически на основе сохраненных учетных данных.
Каждый раз, когда пользователь устанавливает флажок Remember my password, учетные данные сохраняются в наиболее общей форме. Например, если флажок Remember my password установлен при доступе к определенному серверу в домене company.com, учетные данные сохраняются под *.company.com. Если пользователь вновь устанавливает флажок Remember my password при обращении к другому серверу в том же домене, ранее сохраненные данные не перезаписываются, а новые учетные данные сохраняются с более конкретной информацией, например server1.company.com. В силу такого подхода нельзя сохранить более одного имени пользователя и пароля для конкретной процедуры регистрации, и это несколько ограничивает возможности компонента Stored User Names and Passwords.
Если сохранено несколько наборов учетных данных, Windows упорядочивает их от конкретных к более общим. Если пользователь пытается обратиться к ресурсу, недоступному с его текущими учетными данными, пакет проверки подлинности ищет в репозитории Stored User Names and Passwords наиболее точный набор учетных данных, подходящий для ресурса. Если он обнаружен, пакет проверки подлинности использует его, не запрашивая дополнительных данных. Если нет, пользователь получает приглашение ввести имя и пароль.
Учетные данные
В дополнение к автоматическому созданию и хранению учетных данных при установке флажка Remember my password, можно вручную создать учетные данные для конкретного ресурса. Учетные данные, подготовленные вручную, обрабатываются операционной системой так же, как созданные автоматически.
Vista, XP, Server 2008 и Windows 2003 предоставляют простой и интуитивно понятный интерфейс для создания учетных данных вручную. Можно просматривать, изменять и удалять существующие учетные данные. Кроме того, в Vista и Server 2008 предусмотрена полезная возможность архивации и восстановления наборов учетных данных. На экране 1 показан интерфейс Vista — диалоговое окно Stored User Names and Passwords. Ниже описано, как использовать диалоговое окно Stored User Names and Passwords в XP и Vista. Процессы здесь те же, что и в соответствующих серверных операционных системах.
Доступ к диалоговому окну Stored User Names and Passwords.
В XP доступ к диалоговому окну Stored User Names and Passwords слегка различается в зависимости от того, находится компьютер в рабочей группе или в домене. Если компьютер в рабочей группе, нужно открыть утилиту User Accounts панели управления, выбрать текущего зарегистрированного пользователя, а затем щелкнуть Manage my network passwords в области Related tasks. Существует возможность управлять учетными данными текущего зарегистрированного пользователя. Если компьютер в домене, откройте утилиту User Accounts панели управления, щелкните вкладку Advanced, а затем кнопку Manage Passwords.
В Windows Vista доступ к диалоговому окну выполняется одинаково, независимо от местонахождения компьютера в рабочей группе или домене. Откройте утилиту User Accounts панели управления, щелкните заголовок User Accounts, а затем Manage my network passwords в области Tasks.
В Vista и XP к утилите User Accounts можно обратиться напрямую, открыв окно Run и запустив команду
В открывшемся окне укажите вкладку Advanced, а затем нажмите кнопку Manage Passwords. Если нужно получить доступ к учетным данным текущего зарегистрированного пользователя, выполните команду
В результате напрямую открывается диалоговое окно Stored User Names and Passwords. В нем можно добавлять, изменять, удалять, архивировать и восстанавливать наборы учетных данных.
Добавление набора учетных данных. Чтобы вручную добавить набор учетных данных для ресурса, следует щелкнуть кнопку Add для вызова диалогового окна Stored User Names and Passwords, показанного на экране 2.
В поле Log on to введите имя ресурса. Можно использовать различные форматы, в том числе имена узлов (например, server1), полные доменные имена (например, server1.domainX.com) и даже подстановочные символы (например, *.domainX.com). Но помните, что, если для одного ресурса может применяться несколько наборов учетных данных, компонент Stored User Names and Passwords всегда использует наиболее специфичное имя ресурса.
В поле User name следует ввести имя пользователя в одном из следующих форматов:
В поле Password введите пароль. Наконец, укажите, применимы ли учетные данные для проверки подлинности при регистрации в Windows, на Web-узле или в программе.
Изменение набора учетных данных. Чтобы изменить существующий набор учетных данных, выберите ресурс из списка в диалоговом окне Stored User Names and Passwords, а затем выберите команду Edit (в Vista) или Properties (в XP). Изменять можно только имя пользователя и пароль.
Удаление набора учетных данных. Для удаления существующего набора учетных данных выберите ресурс из списка в диалоговом окне Stored User Names and Passwords и щелкните Remove.
Архивация и восстановление наборов учетных данных (только в Vista и Server 2008). Автоматическое сохранение учетных данных полезно, но их потеря может привести к неприятным последствиям. В Vista и Server 2008 можно архивировать и восстанавливать наборы учетных данных с помощью мастера архивации и восстановления. В целях безопасности процессы архивации и восстановления автоматизировать нельзя. Единственный способ архивировать и восстановить наборы учетных данных — сделать это вручную.
Для архивации в Vista нажмите кнопку Back up в диалоговом окне Stored User Names and Passwords. В диалоговом окне, показанном на экране 3, перейдите в место, где нужно сохранить архивный файл, и введите имя, которое будет ему присвоено.
Защита учетных данных
Хранить несколько наборов учетных данных в одном месте удобно, но опасно. Хотя учетные данные хранятся в зашифрованном формате в диспетчере учетных записей (SAM) и профиле пользователя, злоумышленники могут взломать пароли, если получат физический доступ к файлам профиля пользователя.
Для максимально надежной защиты учетных данных важно применить все меры безопасности. Перечислим некоторые из них.
Удобный инструмент
Компонент Stored User Names and Passwords — удобный инструмент для пользователей, работающих со многими учетными данными для доступа к различным ресурсам сети и Internet. Он обеспечивает единую процедуру входа. Хотя хранилище учетных данных зашифровано, важно надежно защитить рабочие станции с сохраненными учетными данными.
Дамир Диздаревич — Менеджер учебного центра Logosoft в Сараево (Босния). Имеет сертификаты MCSE, MCTS, MCITP и MCT. Специализируется на безопасности Windows Server.
Механизм хранения имен пользователей и паролей
В Windows Vista, Windows XP, Windows Server 2008 и Windows Server 2003 существует встроенный механизм, который автоматически управляет именами пользователей и паролями, необходимыми для доступа к ресурсам, требующим учетных данных, отличных от входных учетных данных пользователей. Этот компонент называется Stored User Names and Passwords. В статье рассказывается о его принципах действия и преимуществах. Кроме того, речь пойдет о ручном управлении учетными данными.
Пользователям бывает трудно запоминать многочисленные имена и пароли для доступа к различным ресурсам. Существует немало программ независимых производителей для управления учетными данными, но в Windows Vista, Windows XP, Windows Server 2008 и Windows Server 2003 предусмотрена встроенная функция для автоматического управления именами пользователей и паролями для доступа к ресурсам, требующим учетных данных, отличных от обычных данных регистрации в Windows. Этот компонент называется Stored User Names and Passwords.
С помощью Stored User Names and Passwords можно хранить учетные данные для локальной сети и ресурсов Internet. Типы учетных данных, создаваемые, управляемые и применяемые с использованием компонента:
Пользователям Windows XP Home Edition необходимо помнить, что в этой версии XP хранятся только паспортные учетные данные и имена пользователя и пароли RAS/VPN.
Рассмотрим преимущества компонента Stored User Names and Passwords, принцип его действия и возможности ручного управления учетными данными.
Преимущества
При регистрации в системе локально или при регистрации в домене пользователи должны предоставить имя и пароль. После регистрации эти учетные данные становятся контекстом безопасности по умолчанию для доступа к другим ресурсам в локальной сети, удаленной сети и/или Internet. Но иногда учетных данных бывает недостаточно для доступа ко всем необходимым пользователю ресурсам. Например, дополнительные учетные данные требуются для доступа к Web-узлам с проверкой подлинности или доменам, с которыми нет доверительных отношений. Если таких ресурсов много, пользователям нужно вводить целый ряд различных учетных данных.
Разнообразные учетные данные могут потребоваться и администраторам: например, регистрация в сети с обычными учетными данными Windows и использование административных прав для выполнения определенных задач на удаленных серверах.
Необходимость помнить многочисленные комбинации имен пользователей и паролей приводит к неправильному использованию паролей, в том числе слабым паролям, одинаковым паролям для всех ресурсов и записи паролей где бы то ни было. Таких ошибок можно избежать благодаря компоненту Stored User Names and Passwords, который позволяет безопасно хранить многие учетные данные и управлять ими. Пользователям предоставляется единая процедура регистрации, так как они регистрируются только на своих компьютерах и в своих доменах. Поскольку пользователям не приходится запоминать пароли, они, скорее всего, выберут сложные пароли, что существенно повысит общую безопасность.
Учетные данные хранятся в защищенной части профиля пользователя, где они недоступны для других пользователей. Если пользователь располагает единственным профилем в масштабах всей компании (перемещаемый профиль), сохраненные имена пользователя и пароли запоминаются всегда при его регистрации в сети. Это дополнительно расширяет функциональность компонента при сохранении приемлемого уровня безопасности.
Принцип действия
При попытке обратиться к Web-узлу или сетевому ресурсу, недоступному с обычными учетными данными, пользователь получает запрос об имени и пароле. Если флажок Remember my password установлен, введенная информация запоминается в профиле пользователя. В следующий раз, когда пользователь подключается к этому ресурсу, проверка подлинности выполняется автоматически на основе сохраненных учетных данных.
Каждый раз, когда пользователь устанавливает флажок Remember my password, учетные данные сохраняются в наиболее общей форме. Например, если флажок Remember my password установлен при доступе к определенному серверу в домене company.com, учетные данные сохраняются под *.company.com. Если пользователь вновь устанавливает флажок Remember my password при обращении к другому серверу в том же домене, ранее сохраненные данные не перезаписываются, а новые учетные данные сохраняются с более конкретной информацией, например server1.company.com. В силу такого подхода нельзя сохранить более одного имени пользователя и пароля для конкретной процедуры регистрации, и это несколько ограничивает возможности компонента Stored User Names and Passwords.
Если сохранено несколько наборов учетных данных, Windows упорядочивает их от конкретных к более общим. Если пользователь пытается обратиться к ресурсу, недоступному с его текущими учетными данными, пакет проверки подлинности ищет в репозитории Stored User Names and Passwords наиболее точный набор учетных данных, подходящий для ресурса. Если он обнаружен, пакет проверки подлинности использует его, не запрашивая дополнительных данных. Если нет, пользователь получает приглашение ввести имя и пароль.
Учетные данные
В дополнение к автоматическому созданию и хранению учетных данных при установке флажка Remember my password, можно вручную создать учетные данные для конкретного ресурса. Учетные данные, подготовленные вручную, обрабатываются операционной системой так же, как созданные автоматически.
Vista, XP, Server 2008 и Windows 2003 предоставляют простой и интуитивно понятный интерфейс для создания учетных данных вручную. Можно просматривать, изменять и удалять существующие учетные данные. Кроме того, в Vista и Server 2008 предусмотрена полезная возможность архивации и восстановления наборов учетных данных. На экране 1 показан интерфейс Vista — диалоговое окно Stored User Names and Passwords. Ниже описано, как использовать диалоговое окно Stored User Names and Passwords в XP и Vista. Процессы здесь те же, что и в соответствующих серверных операционных системах.
Доступ к диалоговому окну Stored User Names and Passwords. В XP доступ к диалоговому окну Stored User Names and Passwords слегка различается в зависимости от того, находится компьютер в рабочей группе или в домене. Если компьютер в рабочей группе, нужно открыть утилиту User Accounts панели управления, выбрать текущего зарегистрированного пользователя, а затем щелкнуть Manage my network passwords в области Related tasks. Существует возможность управлять учетными данными текущего зарегистрированного пользователя. Если компьютер в домене, откройте утилиту User Accounts панели управления, щелкните вкладку Advanced, а затем кнопку Manage Passwords.
В Windows Vista доступ к диалоговому окну выполняется одинаково, независимо от местонахождения компьютера в рабочей группе или домене. Откройте утилиту User Accounts панели управления, щелкните заголовок User Accounts, а затем Manage my network passwords в области Tasks.
В Vista и XP к утилите User Accounts можно обратиться напрямую, открыв окно Run и запустив команду
В открывшемся окне укажите вкладку Advanced, а затем нажмите кнопку Manage Passwords. Если нужно получить доступ к учетным данным текущего зарегистрированного пользователя, выполните команду
В результате напрямую открывается диалоговое окно Stored User Names and Passwords. В нем можно добавлять, изменять, удалять, архивировать и восстанавливать наборы учетных данных.
Добавление набора учетных данных. Чтобы вручную добавить набор учетных данных для ресурса, следует щелкнуть кнопку Add для вызова диалогового окна Stored User Names and Passwords, показанного на экране 2.
В поле Log on to введите имя ресурса. Можно использовать различные форматы, в том числе имена узлов (например, server1), полные доменные имена (например, server1.domainX.com) и даже подстановочные символы (например, *.domainX.com). Но помните, что, если для одного ресурса может применяться несколько наборов учетных данных, компонент Stored User Names and Passwords всегда использует наиболее специфичное имя ресурса.
В поле User name следует ввести имя пользователя в одном из следующих форматов:
В поле Password введите пароль. Наконец, укажите, применимы ли учетные данные для проверки подлинности при регистрации в Windows, на Web-узле или в программе.
Изменение набора учетных данных. Чтобы изменить существующий набор учетных данных, выберите ресурс из списка в диалоговом окне Stored User Names and Passwords, а затем выберите команду Edit (в Vista) или Properties (в XP). Изменять можно только имя пользователя и пароль.
Удаление набора учетных данных. Для удаления существующего набора учетных данных выберите ресурс из списка в диалоговом окне Stored User Names and Passwords и щелкните Remove.
Архивация и восстановление наборов учетных данных (только в Vista и Server 2008). Автоматическое сохранение учетных данных полезно, но их потеря может привести к неприятным последствиям. В Vista и Server 2008 можно архивировать и восстанавливать наборы учетных данных с помощью мастера архивации и восстановления. В целях безопасности процессы архивации и восстановления автоматизировать нельзя. Единственный способ архивировать и восстановить наборы учетных данных — сделать это вручную.
Для архивации в Vista нажмите кнопку Back up в диалоговом окне Stored User Names and Passwords. В диалоговом окне, показанном на экране 3, перейдите в место, где нужно сохранить архивный файл, и введите имя, которое будет ему присвоено.
Защита учетных данных
Хранить несколько наборов учетных данных в одном месте удобно, но опасно. Хотя учетные данные хранятся в зашифрованном формате в диспетчере учетных записей (SAM) и профиле пользователя, злоумышленники могут взломать пароли, если получат физический доступ к файлам профиля пользователя.
Для максимально надежной защиты учетных данных важно применить все меры безопасности. Перечислим некоторые из них.
Удобный инструмент
Компонент Stored User Names and Passwords — удобный инструмент для пользователей, работающих со многими учетными данными для доступа к различным ресурсам сети и Internet. Он обеспечивает единую процедуру входа. Хотя хранилище учетных данных зашифровано, важно надежно защитить рабочие станции с сохраненными учетными данными.
Хранение и шифрование паролей Microsoft Windows
Про взлом паролей windows было написано немало статей, но все они сводились к использованию какого-либо софта, либо поверхностно описывали способы шифрования LM и NT, и совсем поверхностно описывали syskey. Я попытаюсь исправить этот неодостаток, описав все подробности о том где находятся пароли, в каком виде, и как их преобразует утилита syskey.
Существует 2 возможности получения пароля — через реестр, или получив прямой доступ к файлам-кустам реестра. В любом случае нужны будут либо привелегии пользователя SYSTEM, либо хищение заветных файлов, например, загрузившись из другой ОС. Здесь я не буду описывать возможности получения доступа, но в целях исследования нагляднее будет выбрать первый вариант, это позволит не заострять внимание на структуре куста реестра. А запуститься от системы нам поможет утилита psExec от sysinternals. Конечно, для этих целей можно использовать уязвимости windows, но статья не об этом.
V-блок
Windows до версии Vista по умолчанию хранила пароль в двух разных хэшах — LM и NT. В висте и выше LM-хэш не хранится. Для начала посмотрим где искать эти хэши, а потом разберемся что из себя они представляют.
Пароли пользователей, а так же много другой полезной информации хранится в реестре по адресу HKLM\SAM\SAM\Domains\Account\users\[RID]\V
, известном как V-блок. Раздел SAM находится в соответствующем файле c:\Windows\System32\config\SAM. RID — уникальный идентификатор пользователя, его можно узнать, например заглянув в ветку HKLM\SAM\SAM\Domains\Account\users\names\ (параметр Default, поле — тип параметра). Например, RID учетной записи «Администратор» всегда 500 (0x1F4), а пользователя «Гость» — 501 (0x1f5). Доступ к разделу SAM по умолчанию возможен только пользователю SYSTEM, но если очень хочется посмотреть — запускаем regedit c правами системы:
Чтобы наблюдать V-блок в удобном виде можно, например, экспортировать его в текстовый файл (File-Export в Regedit).
Вот что мы там увидим:
От 0x0 до 0xCC располагаются адреса всех данных, которые находятся в V-блоке, их размеры и некоторая дополнительная информация о данных. Чтобы получить реальный адрес надо к тому адресу, что найдем прибавить 0xCC. Адреса и размеры хранятся по принципу BIG ENDIAN, т.е понадобится инвертировать байты. На каждый параметр отводится по 4 байта, но фактически все параметры умещаются в одном-двух байтах. Вот где искать:
Адрес имени пользователя — 0xС
Длина имени пользователя — 0x10
Адрес LM-хэша — 0x9с
Длина LM-хэша — 0xa0
Адрес NT-хэша — 0xa8
длина NT-хэша — 0xac
В данном случае имя пользователя найдется по смещению 0xd4 + 0xcc и его длина будет 0xc байт.
NT-хэш будет располагаться по смещению 0x12c + 0xcc и его размер (всегда один и тот же) = 0x14.
Еще одна деталь, касающаяся хранения паролей — как к NT- так и к LM-хэшу всегда добавляются спереди 4 байта, назначение которых для меня загадка. Причем 4байта будут присутствовать даже если пароль отключен. В данном случае видно, что длина LM хэша =4 и если посмотреть на его адрес, можно эти 4 байта увидеть несмотря на то что никакого LM-хэша нет.
Поэтому при поиске смещений хэшей смело прибавляем 4 байта к адресу, а при учете размеров — вычитаем. Если удобнее читать код — вот примерно так будет выглядеть поиск адресов с учетом инверсии, лишних четырех байтов и прибавления стартового смещения 0xcc (код C#)
Алгоритмы
Теперь разберемся в алгоритмах шифрования.
Формирование NT-хэша:
1. Пароль пользователя преобразуется в Unicode-строку.
2. Генерируется MD4-хэш на основе данной строки.
3. Полученный хэш шифруется алгоритмом DES, ключ составляется на основе RID пользователя.
Формирование LM-хэша:
1. Пароль пользователя преобразуется в верхний регистр и дополняется нулями до длины 14 байт.
2. Полученная строка делится на две половинки по 7 байт и каждая из них по отдельности шифруется алгоритмом DES. В итоге получаем хэш длиной 16 байт (состоящий из двух независимых половинок длиной по 8 байт).
3. Полученный хэш шифруется алгоритмом DES, ключ составляется на основе RID пользователя.
4. В windows 2000 и выше оба полученых хэша дополнительно шифруются алоритмом RC4 с помощью ключа, известного как «системный ключ» или bootkey, сгенерированого утилитой syskey, и шифруются довольно хитрым образом.
Рассмотрим общую последовательность действий для получения исходного пароля и каждый шаг в отдельности
1. Получаем bootkey, генерируем на его основе ключи для RC4, расшифровываем хэши с помощью RC4
2. Получаем ключи для DES из RID’ов пользователей, расшифровываем хэши DES’ом
3. Полученые хэши атакуем перебором.
Bootkey
Системный ключ (bootkey) разбит на 4 части и лежит в следующих разделах реестра:
HKLM\System\CurrentControlSet\Control\Lsa\JD
HKLM\System\CurrentControlSet\Control\Lsa\Skew1
HKLM\System\CurrentControlSet\Control\Lsa\GBG
HKLM\System\CurrentControlSet\Control\Lsa\Data
Раздел system находится в файле c:\Windows\System32\config\system
Следует отметить, что раздел CurrentControlSet является ссылкой на один из разделов controlset и создается в момент загрузки системы. Это значит что не получится его найти в файле system, если система неактивна. Если вы решили искать ключ в файле — необходимо узнать значение ContolSet по умолчанию в HKLM\SYSTEM\Select\default.
например если HKLM\SYSTEM\Select\default = 1 — вместо HKLM\System\CurrentControlSet\ ищем в HKLM\System\controlset001\
У каждого ключа реестра есть некий скрытый атрибут, известный как «class». Regedit его так просто не покажет, однако его можно увидеть, например, если экспортировать эти ключи реестра в текстовые файлы. В winapi для получения этого атрибута есть функция RegQueryInfoKey.
Фрагменты хранятся в строковом представлении шестнадцатеричных чисел, причем по принципу BIG ENDIAN (т.е не строка задом наперед, а число).
Например мы обнаружили вот такие записи:
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\JD
Class Name: 46003cdb = <0xdb,0x3c,0x00,0x46>
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Skew1
Class Name: e0387d24 = <0x24,0x7d,0x38,0xe0>
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\GBG
Class Name: 4d183449 = <0x49,0x34,0x18,0x4d>
Key Name: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Data
Class Name: 0419ed03 =
Собраный из четырех частей ключ будет массивом байт:
Далее элементы этого массива переставляются на основе некоторого константного массива p
key[i] = scrambled_key[p[i]];
В нашем примере получится массив:
этот массив и есть так называемый bootkey. Только в шифровании паролей будет учавствовать не он а некий хэш на основе bootkey, фрагментов f-блока и некоторых констант. Назовем его Hashed bootkey.
Hashed bootkey
для получения Hashed bootkey нам понадобятся 2 строковые константы (ASCII):
string aqwerty = «!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%\0»;
string anum = «0123456789012345678901234567890123456789\0»;
Также понадобится F-блок пользователя (HKLM\SAM\SAM\Domains\Account\users\\F), а именно его 16 байт: F[0x70:0x80]
На основе этих значений, склееных в один большой массив формируем MD5 хэш, который будет являться ключем для шифрования RC4
rc4_key = MD5(F[0x70:0x80] + aqwerty + bootkey + anum).
Последним шагом для получения hashed bootkey будет rc4 шифрование( или дешифрование — в rc4 это одна и та же функция) полученым ключем фрагмента F-блока F[0x80:0xA0];
Hashed bootkey у нас в руках, осталось научиться с ним правильно обращаться.
Дешифруем пароли с помощью Hashed Bootkey
для паролей LM и NT нам понадобятся еще 2 строковые константы —
string almpassword = «LMPASSWORD»;
string antpassword = «NTPASSWORD»;
а так же RID пользователя в виде 4х байт (дополненый нулями) и первая половина Hashed Bootkey (hashedBootkey[0x0:0x10]);
Все это склеивается в один массив байт и считается MD5 по правилам:
rc4_key_lm = MD5(hbootkey[0x0:0x10] +RID + almpassword);
rc4_key_nt = MD5(hbootkey[0x0:0x10] +RID + antpassword);
полученый md5 хэш — ключ для rc4, которым зашифрованы LM и NT хэши в V-блоке пользователя
userLMpass = RC4(rc4_key_lm,userSyskeyLMpass);
userNTpass = RC4(rc4_key_lm,userSyskeyNTpass);
На этом этапе мы получили пароли пользователя в том виде в каком они хранились бы без шифрования syskey, можно сказать, что самое сложное позади. Переходим к следующему шагу
На основе четырех байт RID’а пользователя с помощью некоторых перестановок и побитовых операций создаем 2 ключа DES. Вот функции, которые осуществляют обфускацию (С#):
private byte[] str_to_key(byte[] str) <
byte[] key = new byte[8];
key[0] = (byte)(str[0] >> 1);
key[1] = (byte)(((str[0] & 0x01) > 2));
key[2] = (byte)(((str[1] & 0x03) > 3));
key[3] = (byte)(((str[2] & 0x07) > 4));
key[4] = (byte)(((str[3] & 0x0F) > 5));
key[5] = (byte)(((str[4] & 0x1F) > 6));
key[6] = (byte)(((str[5] & 0x3F) > 7));
key[7] = (byte)(str[6] & 0x7F);
for (int i = 0; i
Ну здесь особо комментировать нечего, кроме функции des_set_odd_parity(ref key) — это одна из функций библиотеки openssl, задача которой добавить некоторые «биты нечетности», используется для повышения стойкости ключа к атакам.
Исследование проведено на основе исходного кода ophcrack-3.3.1, а так же статьи Push the Red Button:SysKey and the SAM