Анализ методов хранения пользовательских паролей в ос 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).