Анализ методов хранения пользовательских паролей в ос windows

Автор: Чернокнижный Геннадий Михайлович, Лукин Евгений Игоревич

Журнал: Технико-технологические проблемы сервиса @ttps

Рубрика: Безопасность цифрового сервиса

Статья в выпуске: 4 (50), 2019 года.

Бесплатный доступ

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

Пользователь, пароль, аутентификация, аудит, приложения

Короткий адрес: https://sciup.org/148318821

IDR: 148318821

Текст научной статьи Анализ методов хранения пользовательских паролей в ос windows

Проблема соблюдения политики безопасного хранения и использования паролей продолжает оставаться актуальной как для домашних пользователей, так и особенно, для сотрудников автоматизированных информационных систем (АИС). Причем для пользователей операционных систем (ОС) Windows это особенно актуально, поскольку, во-первых, их подавляющее большинство, и, во-вторых, они в среднем менее подготовлены в смысле информационной безопасности, чем те, кто использует Mac или Linux. По данным Positive Technologies [1] из-за слабых паролей и отсутствия двухфакторной аутентификации в 2018 году пострадали, например, пользователи сервиса Timehop, в результате чего в руках злоумышленников оказались персональные данные 21 миллиона пользователей.

Большинство пользователей, работая с приложением (почтовый клиент, вебприложение, браузер и др.) сохраняют свои пароли, чтобы было удобнее входить в него в следующий раз. Этим обстоятельством могут пользоваться злоумышленники, проводя атаку на приложения, воспользовавшись их известными уязвимостями. Если в результате успешной атаки удается овладеть паролем пользователя, то это может привести к непредсказуемым последствиям не только для рабочей станции самого пользователя, но и для всей корпоративной сети, в которой он зарегистрирован. Особенно опасными в этом смысле являются атаки на веб-приложения, ошибки в коде которых могут повлечь за собой крупные утечки данных в результате недостаточной авторизации пользователей. Подобные атаки с использованием украденных учетных данных (credential stuffing) намного эффективнее, чем простой перебор паролей, поскольку людям свойственно использовать одинаковые учетные данные для доступа к разным системам. Злоумышленник может не только получить контроль над самими приложениями или проникнуть во внутреннюю сеть компании, но и использовать их как площадку для распространения вредоносного программного обеспечения (ПО). Наиболее атакуемыми по подбору учетных данных являются инфраструктура АИС, веб-ресурсы и пользователи.

В любой крупной компании есть так называемые "роботные" учетные записи для автоматизированных скриптов. Их пароли, в отличие от пользовательских, не меняются раз в два или три месяца и процесс смены таких паролей производится вручную.

Для анализа возможности кражи парольной информации был разработан проект с открытым исходным кодом (библиотека и программа) для аудита безопасности под названием goLazagne [2]. Она осуществляет проверку сохраненных локальных баз с паролями на компьютере, ищет файлы с чувствительной информацией (sensitive information), раскрытие которой может нанести вред пользователю или компании.

Аналогичная программа написана на языке python и имеет скомпилированную при помощи py2exe версию.

Данное ПО, по мнению авторов, имеет несколько недостатков:

  • -    нет варианта использования в виде библиотеки и возможности встраиваться в другие проекты, так как программа выполнена в виде цельного проекта;

  • -    код на python требует для запуска наличия виртуальной машины python и дополнительных библиотек, которые необходимо до-устанавливать отдельно. Скомпилированная версия данной программы при помощи программы py2exe не всегда стабильна и это может повлиять на ход аудита;

  • -    отсутствует сканирование файловой системы на предмет наличия vpn- конфигураций или баз данных паролей.

  • -    программа находится в базах антивирусов, что может усложнить ход проведения аудита для тестировщика.

Авторами предложен вариант аудита паролей, хранимых в приложениях под ОС Windows, а именно: веб-браузерах, программах для взаимодействия с удаленными серверами, Диспетчере учетных данных Windows, а также с помощью модуля сканирования файловой системы.

В качестве языка для программной реализации решаемых задач выбран Golang (GO), так как, с одной стороны, скорость разработки на данном языке выше, чем на языках C и C++, с другой – он построен с учетом параллелизма для работы на многоядерных процессорах. Программы на данном языке компилируются в portable executable (PE) и executable and linkable format (ELF). Это освобождает от использования дополнительного ПО для запуска программы.

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

Веб-браузеры

Браузеры, основанные на движках WebKit (Google Chrome, Opera, Yandex Browser, Vivaldi, Chromium, Amigo, Sputnik) для хранения сохраненных паролей используют базу типа sqlite (встраиваемая, кроссплатформенная), которая, например, расположена в браузерах по следующему пути:

  • -    Google Chrome – APPDATA\ Google\ Chrome\ User Data;

  • -    Opera – APPDATA \Opera Soft-ware\Opera Stable;

  • -    Yandex Browser – APPDATA\ Yandex\ YandexBrowser\User Data.

Подключение к базе данных под названием Login Data, где находятся сохраненные пароли в зашифрованном виде, выполняется по следующему запросу:

“SELECT action_url, username_value, password_value FROM logins”, где:

  • -    action_url это URL-адрес сайта для сохраненных учетных данных;

  • -    username_value – логин;

  • -    password_value – пароль в зашифрованном виде.

Сами пароли зашифрованы при помощи WinApi функции CryptProtectData и легко поддаются расшифровке при помощи функции CryptUnprotectData.

Пример кода расшифровки:

procDecryptData           =dll- crypt32.NewProc("CryptUnprotectData")

procLocalFree            =            dllker- nel32.NewProc("LocalFree")

)

var outblob DATA_BLOB var inblob = NewBlob([]byte(cipherText)) procDecrypt-

return string(outblob.ToByteArray())

} data       =       append(data,       com- mon.UrlNamePass{actionUrl, username, com-mon.Win32CryptUnprotectData(password, false)})

На выходе получаются пароли в открытом виде.

На основе движка Quantum/Gecko работают, например, браузер Mozilla Firefox и почтовый клиент Thunderbird, которые для хранения учетных данных используют свою, более

Г.М. Чернокнижный, Е.И. Лукин сложную схему хранения. Приведем упрощенный алгоритм получения учетных данных и последующей расшифровки:

  • -    получить список профилей для целевого браузера.

  • -    получить ключ из базы данных key4.db, расположенной внутри директории профиля.

  • -    выполнить запрос:

“SELECT item1, item2 FROM metadata WHERE id = 'password'”, где    item1 – глобальная соль, которая ис пользуется для усиления шифрования,

  • i tem2 – данные для проверки соответствия мастер-пароля;

  • -    если не используется мастер-пароль, то выполнить запрос для получения ключа:

“SELECT a11, a102 FROM nssPrivate”, где a11 это соль и зашифрованный ключ, хранящиеся в формате ASN1;

  • -    произвести дешифровку ключа при помощи алгоритма 3DES;

  • -    получаем зашифрованные учетные данные, которые хранятся в формате JSON;

  • -    дешифровать логин и пароль.

Пароли WiFi, которые сохранены пользователем

Разница между WPA2-PSK и WPA2 Enterprise состоит в том, откуда берутся ключи шифрования, используемые в механике алгоритма AES. Для частных (домашних, небольших) применений используется статический ключ (пароль, кодовое слово, PSK (Pre-Shared Key)) минимальной длиной 8 символов, который задается в настройках точки доступа, и у всех клиентов данной беспроводной сети будет одинаковым. Компрометация такого ключа (физический доступ к ноутбуку, методы социальной инженерии, недобросовестные сотрудники и т.д.) требует немедленной смены пароля у всех оставшихся пользователей, что реально только в случае небольшого их числа. Для корпоративных применений (Enterprise) используется ключ, индивидуальный для каждого работающего клиента в данный момент. Этот ключ может периодически обновляться по ходу работы без разрыва соединения, и за его генерацию отвечает дополнительный компонент — сервер авторизации, как правило это RADIUS-сервер.

В WPA2 PSK любой сохраненный пароль от WiFi сохраняется в открытом виде и можно получить доступ к паролю при помощи утилиты командной строки netsh:

netsh wlan show profiles

Profiles on interface Беспроводная сеть: Group policy profiles (read only) User profiles

All User Profile: DESKTOP-5K45P5B 1463

All User Profile All User Profile All User Profile All User Profile All User Profile All User Profile

: R2D2 5Ghz

: kerbyphone

: SPb Free Wi-Fi

: UneconWiFi

: R2D2

: VSIP

Таким образом выведен список всех сохраненных профилей беспроводных сетей.

Далее нужно сделать запрос вида: netsh wlan show profile %profilename% key=clear: netsh wlan show profile kerbyphone key=clear

Profile kerbyphone on interface

Беспроводная сеть:

Applied: All User Profile Profile information

Version          : 1

Type          : Wireless LAN

Name          : kerbyphone

Control options :

Connection mode : Connect manually

Network broadcast : Connect only if this network is broadcasting

AutoSwitch : Do not switch to other networks

MAC Randomization : Disabled

Connectivity settings

Number of SSIDs SSID name Network type

Radio type

Vendor extension Security settings

Authentication

Cipher Authentication

Cipher

Security key

Key Content

Cost settings

: 1

: "kerbyphone"

: Infrastructure

: [ Any Radio Type ]

: Not present

: WPA2-Personal CCMP

: WPA2-Personal GCMP

: Present

: e4e9de950102

Cost           : Unrestricted

Congested       : No

Approaching Data Limit : No Over Data Limit : No Roaming        : No

Cost Source       : Default

Пароль находится в поле Key Content. Аналогично можно при помощи запросов в командной строке перебрать все профили сохраненных беспроводных сетей и получить пароли для них.

Для авторизации по схеме WPA2 Enterprise необходима пара логин- пароль, которая у каждого пользователя своя. Для извлечения паролей в данном случае требуется повышение привилегий до уровня SYSTEM, что в нашем случае находиться в планах на реализацию.

Пароли, которые сохранены пользователем в Диспетчере учетных данных.

Диспетчер учетных данных – Credential Manager – позволяет просматривать и удалять сохраненные учетные данные для веб-сайтов, приложений и сетей такие как имена пользователей, пароли и адреса. Данный механизм позволяет автоматически выполнять вход на компьютер, сайт, почту и т.д. Данные хранятся в так называемых хранилищах Windows (локальная папка на компьютере) в зашифрованном виде.

Например, пользователь подключается к сетевому диску, выставляя флажок «запомнить учетные данные», и его данные сохраняются в Диспетчере учетных данных.

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

Модуль сканирования файловой системы

Решает задачу поиска на диске файлов с интересующими расширениями, например, ovpn, key, pem, cert, ssh, KDBX:

  • -    Ovpn – файл конфигурации vpn-соединения. В случае нахождения злоумышленником данного файла, он может проникнуть во внутреннюю сеть компании под видом легитимного пользователя;

  • -    Key, pem, cert – это могут быть файлы, содержащие в себе приватные ключи для соединения по SSH, либо файлы с сертификатами SSL;

  • -    SSH – файл с приватным ключом для подключения по SSH;

  • -    KDBX – база данных парольного менеджера Keepass.

Код модуля сканирования написан на языке Golang. Скорость работы модуля является достаточно высокой: менее одной минуты на систему с 200 гигабайтами данных.

Алгоритм работы – обычный перебор доступных методов извлечения паролей. Программа по очереди пробует найти доступные профили браузеров, затем данные wifi, затем уже данные из хранилища windows и данные средств администрирования.

Например, извлечение данных из менеджера учетных данных Windows происходит при помощи обращения к методу Windows API CredEnumerateW.

Тестирование проводилось на виртуальной машине Windows 10 с следующим установленным ПО:

  • -    Mozilla Firefox;

  • -    Chromium;

  • -    MobaXTerm;

  • -    Putty;

  • -    OpenVPN.

После запуска программы было извлечено 10 тестовых учетных данных из Mozilla Firefox, MS Edge, Chromium. Извлечено 7 сессий из MobaxTerm с тремя ассоциированными ключами. Найдено две конфигурации OpenVPN.

По результатам проведенного анализа можно сделать выводы и сформулировать следующие рекомендации.

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

  • 2.    Разработанные скрипты могут быть использованы в качестве автоматизированного средства анализа защищенности для проведения аудита парольной политики на компьютерах пользователей и в корпоративных Windows-сетях.

  • 3.    Сохранение в тайне пользователями своих паролей и ключей беспроводных сетей должно препятствовать доступу к ним методами социальной инженерии.

  • 4.    Следует использовать разные логины и пароли для доступа к различным ресурсам.

  • 5.    Нужно максимально ограничить привилегии пользователей.

  • 6.    Не нужно соглашаться на предложения интернет-приложений по сохранению учетных данных, а делать это только в исключительных случаях в доверенных сетях.

  • 7.    По возможности следует использовать двухфакторную аутентификацию.

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

Список литературы Анализ методов хранения пользовательских паролей в ос windows

  • Актуальные киберугрозы. III квартал 2018 года [Электронный ресурс]. URL:https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/Cybersecurity-threatscape-2018-Q3-rus.pdf (дата обращения: 23.02.2019).
  • Allesandroz: интернет платформа [Электронный ресурс]: URL: https://github.com/AlessandroZ/LaZagne (дата обращения: 24.02.2019).
Статья научная