• Твой профиль заполнен на 0%. Заполни за 1 минуту, чтобы тебя нашли единомышленники и работодатели. Заполнить →
Полуоткрытый ноутбук на чёрном столе светит терминалом с зелёным текстом дампа учётных данных. Рядом лежит USB-накопитель с открытой платой и свёрнутый кабель, уходящий в тень.


Когда я на red team-энгейджменте попадаю на рабочую станцию, первое, куда лезу - не контроллер домена и не lateral movement через SMB. Первая цель - директория %LOCALAPPDATA%\Google\Chrome\User Data\Default\. Файл Login Data весит пару мегабайт, но внутри - ключи ко всему: корпоративным порталам, VPN-аккаунтам, облачным консолям. По данным ReliaQuest, browser credential dumping составил 21% всех инцидентов с кражей учётных данных у их клиентов в 2023 году. Атаки на "менеджеры паролей" браузера - одна из самых ходовых и результативных техник credential access в арсенале атакующих. Низкий порог входа, высокая отдача.

В MITRE ATT&CK техника задокументирована как Credentials from Password Stores (T1555), Credential Access, с подтехникой Credentials from Web Browsers (T1555.003). Её используют десятки APT-группировок - от APT33 и APT41 до Kimsuky и LAPSUS$. Дальше разберём, как устроены хранилища паролей трёх основных браузеров, как атакующие их вскрывают и - что критически важно - какие артефакты остаются для Blue Team.

Архитектура хранения паролей в Chrome, Firefox и Edge​

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

Chrome и Edge: SQLite плюс DPAPI​

Chrome и Edge (оба на движке Chromium) используют идентичную схему хранения. Основной файл - SQLite-база Login Data, расположенная по путям:
  • Chrome: C:\Users\<Username>\AppData\Local\Google\Chrome\User Data\Default\Login Data
  • Edge: C:\Users\<Username>\AppData\Local\Microsoft\Edge\User Data\Default\Login Data
Cookies валяются рядом, в подпапке Network\Cookies. Оба файла - обычные SQLite3-базы, к которым можно дёрнуть запрос напрямую. Согласно документации MITRE ATT&CK (T1555.003), для получения сохранённых credentials достаточно:
SQL:
SELECT action_url, username_value, password_value FROM logins;
Поле password_value содержит зашифрованный блоб. В современных версиях Chrome (начиная с v80) - двухуровневая схема шифрования:
  1. AES-256-GCM - пароль шифруется симметричным ключом
  2. DPAPI (Data Protection API) - сам ключ AES защищён через Windows DPAPI
Ключ AES лежит в файле Local State (JSON) по пути os_crypt.encrypted_key. Он закодирован в Base64 и зашифрован через DPAPI. Чтобы его расшифровать, атакующий вызывает CryptUnprotectData, она работает только в контексте того пользователя, который этот ключ создал. Тут ключевой момент: расшифровка паролей Chrome требует выполнения кода в сессии целевого пользователя. Без этого - никак.

В старых версиях (до v80) использовалась прямая DPAPI-защита без промежуточного AES-ключа - каждый password_value расшифровывался напрямую через CryptUnprotectData.

Firefox: NSS и собственная криптография​

Firefox идёт другим путём. Вместо DPAPI - собственная криптографическая библиотека . Ключевые файлы профиля:
  • key4.db - база с мастер-ключом (SQLite, заменила устаревшую key3.db)
  • logins.json - JSON с зашифрованными логинами и паролями
  • cookies.sqlite - база cookies
Путь к профилю: C:\Users\<Username>\AppData\Roaming\Mozilla\Firefox\Profiles\<random>.default-release\

Пароли в logins.json шифруются через PKCS#11 SDR-механизм NSS (3DES-CBC, OID 1.2.840.113549.3.7). Firefox 58 (2018) перешёл с key3.db (BerkeleyDB) на key4.db (SQLite), при этом внутри key4.db мастер-ключ (NSS softtoken) может быть защищён AES-256-CBC вместо 3DES, но сами пароли в logins.json по-прежнему расшифровываются через PK11SDR_Decrypt. Инструменты извлечения (LaZagne, firepwd) определяют алгоритм защиты ключевого материала по OID в ASN.1-структуре key4.db. Ключ шифрования хранится в key4.db, защищённый опциональным мастер-паролем. Если пользователь его не установил (а большинство и не устанавливает) - расшифровка тривиальна: достаточно инициализировать NSS-контекст с путём к профилю, и всё.

Именно эту особенность эксплуатирует stealer malware: BeaverTail, согласно MITRE ATT&CK, тупо собирает key3.db, key4.db и logins.json из /.mozilla/firefox/ для последующей эксфильтрации.

Практика извлечения: как работает кража credentials из браузера​

Теперь к конкретике. Ниже - разбор ключевых артефактов и техник, которые я использую при post-exploitation, а потом - что именно эти действия оставляют в логах.
🔓 Эксклюзивный контент для зарегистрированных пользователей.


Если мастер-пароль установлен, атакующий может брутфорсить его - key4.db содержит хэш для проверки. Но на практике в red team-кампаниях я встречал мастер-пароль менее чем у 5% пользователей. Пересказывать, почему люди его не ставят, смысла нет - все и так знают.

Атаки на хранилище паролей Edge​

Edge использует ту же архитектуру, что и Chrome (Chromium-based), так что атака идентична. Единственное отличие - пути к файлам:

АртефактChromeEdge
Login DataAppData\Local\Google\Chrome\User Data\Default\Login DataAppData\Local\Microsoft\Edge\User Data\Default\Login Data
Local StateAppData\Local\Google\Chrome\User Data\Local StateAppData\Local\Microsoft\Edge\User Data\Local State
Cookies...\Default\Network\Cookies...\Default\Network\Cookies

Инструментарий атакующего: от LaZagne до Mimikatz​

Техника T1555.003 настолько популярна, что инструментов под неё - целый зоопарк. Вот что реально используется в атаках (по данным MITRE ATT&CK и Unit42):

LaZagne - open-source утилита на Python, тянет credentials из Chrome, Firefox, Edge, Opera и десятков других приложений. Используется APT33, OilRig, Leafminer. Команда lazagne.exe browsers - и все сохранённые браузерные пароли у тебя за секунды.

Mimikatz (модуль dpapi) - помимо kerberos-атак, Mimikatz умеет работать с DPAPI: извлекать мастер-ключи, расшифровывать блобы. Особенно опасен в связке с доступом к контроллеру домена, где хранится DPAPI backup key - с ним можно расшифровать данные любого пользователя в домене.

HackerBrowserData - Go-утилита с GitHub, экспортирует credentials, cookies, историю и закладки из всех основных браузеров. Для red team удобна тем, что компилируется в один бинарник без зависимостей. Стянул, запустил, забрал - всё.

Empire / Cobalt Strike - post-exploitation фреймворки с модулями для browser credential dumping. Empire вытягивает пароли из Firefox и Chrome через встроенные PowerShell-модули. Cobalt Strike - через BOF (Beacon Object Files).

Metasploit - модуль post/windows/gather/enum_chrome собирает историю, cookies и данные автозаполнения из Chrome, но его поддержка расшифровки паролей из современных версий (v80+, AES-256-GCM) может хромать в зависимости от версии фреймворка. Для полноценного извлечения паролей часто проще прокинуть SharpChrome или LaZagne через execute. Для Firefox есть post/multi/gather/firefox_creds, хотя совместимость с современными key4.db (AES-256-CBC) тоже стоит проверять под конкретную версию Metasploit.

Stealer malware - отдельная каста. Emotet, TrickBot (модуль pwgrab32), Lumma Stealer, RedLine, Azorult - все включают модули для кражи браузерных паролей. По данным MITRE ATT&CK, Lumma Stealer извлекает credentials из нескольких браузеров одновременно, а Emotet распространяет специализированные модули-грабберы.

Что остаётся в логах: детектирование кражи паролей браузера​

Переключаемся на Blue Team. Каждое действие атакующего оставляет след - если знаешь, где искать.

Файловый доступ к базам credentials​

Самый очевидный индикатор - процесс, который не является браузером, лезет в файлы Login Data, logins.json или key4.db. Включите аудит файлового доступа (Windows Event ID 4663) для следующих путей:
Код:
%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data
%LOCALAPPDATA%\Microsoft\Edge\User Data\Default\Login Data
%APPDATA%\Mozilla\Firefox\Profiles\*\logins.json
%APPDATA%\Mozilla\Firefox\Profiles\*\key4.db
%LOCALAPPDATA%\Google\Chrome\User Data\Local State
Sigma-правило для детектирования аномального доступа:
YAML:
# Пример для демонстрации концепции
title: Suspicious Access to Browser Credential Files
id: d7c9b22a-4f3e-4a1b-8c55-credential-access
status: experimental
description: Detects non-browser process accessing browser credential stores
logsource:
    category: file_access
    product: windows
detection:
    selection:
        TargetFilename|contains:
            - '\Login Data'
            - '\logins.json'
            - '\key4.db'
            - '\cookies.sqlite'
            - '\Local State'
    filter_browsers:
        Image|endswith:
            - '\chrome.exe'
            - '\msedge.exe'
            - '\firefox.exe'
            - '\brave.exe'
            - '\opera.exe'
    filter_system:
        Image|startswith:
            - 'C:\Windows\System32\'
    condition: selection and not filter_browsers and not filter_system
    falsepositives:
        - Browser update processes
        - Legitimate backup software
    level: high
    tags:
        - attack.credential_access
        - attack.t1555.003

Вызовы CryptUnprotectData​

Вызов CryptUnprotectData - сердце DPAPI-расшифровки. Мониторинг через ETW (Event Tracing for Windows) или endpoint-решения позволяет выловить попытки расшифровки. На что обращать внимание:
  • Процесс, вызывающий CryptUnprotectData, - не chrome.exe, не msedge.exe, не firefox.exe
  • Массовые вызовы (легитимный браузер расшифровывает по одному паролю при автозаполнении, атакующий - сотни подряд)
  • powershell.exe или python.exe, дёргающие crypt32.dll через P/Invoke или ctypes

PowerShell-логирование​

По рекомендации экспертов Exabeam, включите PowerShell Script Block Logging (Event ID 4104) и Module Logging (Event ID 4103). Это позволяет поймать скрипты вроде Get-ChromePassword.ps1, обращающиеся к файлам Login Data.

KQL-запрос для Microsoft Sentinel - обнаружение подозрительного доступа к credential-файлам:
Код:
// Пример для демонстрации концепции
DeviceFileEvents
| where Timestamp > ago(24h)
| where FileName in~ ("Login Data", "logins.json", "key4.db", "Local State")
| where InitiatingProcessFileName !in~ ("chrome.exe", "msedge.exe", "firefox.exe", "brave.exe")
| where InitiatingProcessFileName !in~ ("svchost.exe", "SearchProtocolHost.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName,
          InitiatingProcessCommandLine, FileName, FolderPath
| sort by Timestamp desc

Процессные аномалии​

Отслеживайте запуск известных инструментов:
Код:
// Пример для демонстрации концепции
DeviceProcessEvents
| where Timestamp > ago(7d)
| where ProcessCommandLine has_any ("lazagne", "hackbrowserdata", "browserpassview",
                                      "sharpchrome", "enum_chrome", "dpapi::chrome")
| project Timestamp, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessFileName
Помимо сигнатурного подхода, есть поведенческие индикаторы. Если cmd.exe или powershell.exe в быстрой последовательности копирует файлы из директорий нескольких браузеров, а затем инициирует исходящее сетевое соединение - это почти наверняка инфостилер или ручная эксфильтрация. Такой паттерн стоит ловить отдельным правилом.

Реальные APT-группы и stealer malware: кто и как использует browser credential dumping​

Масштаб проблемы лучше всего видно по конкретным группам из MITRE ATT&CK:

Группа / MalwareЦелевые браузерыМетод
APT33Chrome, FirefoxLaZagne
APT41Chromium-basedBrowserGhost
KimsukyChrome, Firefox, OperaWebBrowserPassView, расширения Chrome
LAPSUS$Все основныеПокупка credentials у брокеров / инсайдеров (включая данные от infostealers)
EmotetChrome, Firefox, IEСпециализированные модули-грабберы
Lumma StealerНесколько браузеровВстроенный модуль извлечения
TrickBotChrome, Firefox, Edge, IEМодуль pwgrab32
OilRigChrome, EdgeCDumper (Chrome), EDumper (Edge), LaZagne
BeaverTailChrome, FirefoxКража key4.db, logins.json, Login Data

По данным Unit42 (Palo Alto Networks), credential gathering из стороннего ПО - один из ключевых этапов реальных атак, где сохранённые пароли браузера часто дают доступ к доменным учёткам из-за повторного использования паролей. Один пароль от Jira - и вот уже lateral movement по всему домену.

Защита credentials в браузере: практические рекомендации​

Как человек, который эксплуатирует эти слабости на red team-энгейджментах и потом пишет рекомендации для клиентов, привожу проверенные меры:

Для конечных пользователей:
  • Не сохраняйте пароли во встроенных менеджерах браузера. Используйте выделенные менеджеры паролей с мастер-паролем и MFA.
  • В Firefox обязательно установите мастер-пароль (about:preferences#privacy → раздел «Логины и пароли»). Без него ваши пароли не защищены вообще - от слова совсем.
  • Не используйте одинаковые пароли для разных сервисов. Если атакующий вытянет пароль из одного места, он попробует его везде.
Для SOC / Blue Team:
  • Включите аудит файлового доступа (Event ID 4663) для директорий профилей браузеров.
  • Включите PowerShell Script Block Logging (4104) и Module Logging (4103).
  • Деплойте Sigma-правила для детектирования доступа к Login Data, key4.db, logins.json не-браузерными процессами.
  • Мониторьте вызовы CryptUnprotectData через EDR - массовые вызовы от необычных процессов это высокоприоритетный алерт.
  • Настройте application whitelisting: заблокируйте запуск lazagne.exe, hackbrowserdata.exe, browserpassview.exe и аналогов.
Для системных администраторов:
  • Через GPO можно запретить Chrome и Edge сохранять пароли: политика PasswordManagerEnabled = false.
  • Ограничьте запуск PowerShell для рядовых пользователей или используйте Constrained Language Mode.
  • Credential Guard защищает доменные credentials (NTLM, Kerberos) в LSASS, но не защищает DPAPI user master keys, которые используют Chrome/Edge. Начиная с Chrome 127 (2024), Google внедрил App-Bound Encryption - ключ шифрования привязывается к идентификатору приложения через системный сервис с повышенными привилегиями. Это серьёзно усложняет извлечение credentials сторонними процессами, хотя обходы уже исследуются (инъекция в процесс Chrome, доступ с правами SYSTEM). Для защиты от DPAPI-атак на уровне домена - ограничьте доступ к DPAPI backup key на контроллере домена и рассмотрите Windows Hello for Business как альтернативу паролям.
  • На macOS разверните MDM для контроля доступа к Keychain, как рекомендуют эксперты ReliaQuest.

Не «подводя итоги», а по делу​

Атаки на "менеджеры паролей" браузера - техника с низким порогом входа и высокой отдачей. SQLite-базы лежат в предсказуемых местах, DPAPI расшифровывает пароли в контексте пользователя без дополнительных секретов, а Firefox без мастер-пароля вообще не сопротивляется. Browser credential dumping доступен даже операторам с минимальной квалификацией - скачал LaZagne, запустил, готово.

Но у медали обратная сторона: каждый шаг атаки оставляет детектируемые артефакты. Доступ к файлам - Event ID 4663. Вызовы DPAPI - ETW и EDR-телеметрия. PowerShell-скрипты - Script Block Logging. Запуск инструментов - process creation events. Грамотный мониторинг превращает browser credentials из низко висящего фрукта в ловушку для атакующего.

Проверьте прямо сейчас: у вас включён аудит доступа к Login Data и key4.db? Если нет - настройте по Sigma-правилу из этой статьи. А заодно откройте Firefox, зайдите в about:preferences#privacy и посмотрите, установлен ли мастер-пароль. Спорим, что нет?
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab