Security Accounts Manager¶
Security Accounts Manager (SAM) — это компонент операционной системы Microsoft Windows, отвечающий за хранение и управление локальными учётными записями пользователей и групп в зашифрованном виде. Представляет собой базу данных, содержащую имена пользователей, их идентификаторы (SID), хеши паролей (LM- и NTLM-хеши) и другую учётную информацию. SAM является ключевым элементом подсистемы безопасности Windows, обеспечивающим аутентификацию пользователей при локальном входе в систему.
¶История
База данных SAM была впервые представлена в операционной системе Windows NT 3.1 (1993 год) как часть архитектуры безопасности, основанной на модулях Local Security Authority (LSA) и Security Reference Monitor (SRM). До этого в MS-DOS и ранних версиях Windows (3.x, 9x) механизмы аутентификации отсутствовали, а защита учётных данных была минимальной.
В Windows NT SAM хранилась в реестре в виде отдельного файла %SystemRoot%\system32\config\SAM. С выходом Windows 2000 и последующих версий (XP, Vista, 7, 8, 10, 11) архитектура SAM претерпела незначительные изменения, в основном касающиеся усиления криптографической защиты и интеграции с Active Directory (AD) в доменных средах. В доменных контроллерах начиная с Windows 2000 локальная база SAM заменяется на Active Directory, но на рабочих станциях и серверах, не входящих в домен, SAM продолжает использоваться.
¶Структура и устройство
¶Физическое расположение
База данных SAM хранится в файле SAM в каталоге %SystemRoot%\system32\config\. Этот файл является частью куста реестра (registry hive) и монтируется в ветку HKEY_LOCAL_MACHINE\SAM. Доступ к файлу защищён на уровне операционной системы: даже при загрузке Windows он заблокирован для чтения любыми процессами, кроме системных служб (в первую очередь LSA). Однако при выключенной системе или через загрузку с внешнего носителя файл может быть прочитан.
¶Содержимое базы
Внутри SAM хранятся записи для каждого локального пользователя и группы. Каждая запись содержит:
- Имя учётной записи (username)
- Идентификатор безопасности (Security Identifier, SID) — уникальный идентификатор пользователя или группы в системе
- Хеши паролей — LM-хеш (устаревший, используется для совместимости) и NTLM-хеш (основной)
- Флаги учётной записи — статус (активна/заблокирована), срок действия пароля, необходимость смены при следующем входе и т.д.
- Даты и время — последний вход, последняя смена пароля, срок действия
- Дополнительные атрибуты — полное имя, описание, принадлежность к группам
¶Криптографическая защита
Пароли в SAM не хранятся в открытом виде. Они преобразуются в хеши с помощью алгоритмов:
- LM-хеш (LAN Manager hash) — основан на DES, разбивает пароль на две 7-символьные части. Уязвим к атакам перебора, не поддерживает Unicode. Отключён по умолчанию начиная с Windows Vista/Server 2008.
- NTLM-хеш (NT LAN Manager hash) — использует алгоритм MD4 (RFC 1320). Более устойчив, но также подвержен атакам по радужным таблицам и перебору.
Дополнительно применяется механизм SysKey (System Key), введённый в Windows NT 4.0 Service Pack 3. SysKey шифрует хеши паролей с помощью 128-битного ключа, который генерируется на основе контрольной суммы загрузочных файлов системы. Это затрудняет извлечение хешей даже при физическом доступе к файлу SAM.
¶Доступ и безопасность
¶Ограничения доступа
В работающей системе доступ к базе SAM имеет только процесс lsass.exe (Local Security Authority Subsystem Service), который запускается от имени системной учётной записи (SYSTEM). Ни один пользователь, включая администратора, не может напрямую прочитать файл SAM через стандартные средства Windows. Однако администратор может получить доступ к данным через утилиты, запущенные с повышенными привилегиями (например, reg.exe save HKLM\SAM sam.hiv), или через дамп памяти процесса lsass.exe.
¶Уязвимости и атаки
База данных SAM является одной из главных целей злоумышленников при локальной атаке на Windows. Основные методы компрометации:
- Извлечение хешей из дампа памяти — утилиты типа
mimikatz(разработана Бенджамином Дельпи) могут извлечь хеши паролей из памяти процессаlsass.exe, если злоумышленник имеет права администратора. - Физический доступ к файлу — при загрузке с LiveCD/USB можно скопировать файл
SAMи расшифровать его с помощью инструментов вродеsamdump2илиophcrack. - Атаки по радужным таблицам — предварительно вычисленные таблицы хешей позволяют быстро восстановить пароль по NTLM-хешу.
- Pass-the-hash — злоумышленник использует NTLM-хеш для аутентификации без знания пароля, если в сети используется NTLM-аутентификация.
Для защиты от этих атак Microsoft рекомендует:
- Использовать сложные пароли (длиннее 8 символов, с разными регистрами и символами)
- Включать политику блокировки учётных записей после нескольких неудачных попыток входа
- Использовать двухфакторную аутентификацию
- Отключать LM-хеши (по умолчанию отключены в современных версиях)
- Применять BitLocker для шифрования диска, чтобы предотвратить физический доступ к файлам
¶Применение
¶Локальная аутентификация
SAM используется исключительно для аутентификации локальных пользователей на рабочей станции или сервере, не входящем в домен Active Directory. При входе в систему процесс winlogon.exe передаёт введённые имя и пароль в LSA, который вычисляет хеш и сравнивает его с хранящимся в SAM. Если хеши совпадают — аутентификация считается успешной.
¶Интеграция с Active Directory
В доменной среде локальная SAM на контроллере домена не используется — все учётные записи хранятся в Active Directory (файл ntds.dit). Однако на клиентских машинах, входящих в домен, SAM продолжает хранить локальные учётные записи (например, встроенного администратора), а также кэшированные учётные данные для офлайн-входа (кэш доменных учётных записей).
¶Резервное копирование и восстановление
Системные администраторы могут создавать резервные копии базы SAM с помощью средств Windows Backup или утилиты reg save. Восстановление SAM из резервной копии позволяет восстановить доступ к системе при утере пароля администратора, но требует загрузки с установочного диска или в среде восстановления (Windows RE).
¶Интересные факты
- В Windows 10 и 11 для дополнительной защиты используется технология Credential Guard, которая изолирует процесс
lsass.exeв виртуальной среде Hyper-V, предотвращая извлечение хешей даже при наличии прав администратора. - Утилита
mimikatz, созданная французским разработчиком Бенджамином Дельпи, стала широко известна после того, как была использована в атаке на компанию SolarWinds (2020 год). В России использованиеmimikatzи аналогичных инструментов для несанкционированного доступа к компьютерной информации может быть квалифицировано по статье 272 УК РФ. - В ранних версиях Windows NT (до Service Pack 3) SysKey не использовался, что позволяло легко извлекать хеши из файла SAM при физическом доступе.
- Максимальная длина пароля, хранящегося в SAM, составляет 128 символов, но на практике ограничение ввода в интерфейсе входа в Windows — 127 символов.
¶Критика
Основная критика SAM связана с недостаточной криптостойкостью используемых алгоритмов хеширования. NTLM-хеш (MD4) считается устаревшим и уязвимым к атакам перебора, особенно с использованием GPU. В современных версиях Windows (начиная с Windows 10 версии 1607) Microsoft рекомендует использовать Kerberos вместо NTLM, но NTLM-хеши по-прежнему хранятся в SAM для обратной совместимости.
Также критикуется возможность извлечения хешей из памяти процесса lsass.exe при наличии прав администратора. Хотя Credential Guard решает эту проблему, он не включён по умолчанию и требует оборудования с поддержкой виртуализации (Intel VT-x или AMD-V).
¶Источники
- Microsoft Docs: Security Accounts Manager (SAM) — документация по архитектуре безопасности Windows
- Руссинович М., Соломон Д. «Внутреннее устройство Microsoft Windows» (6-е издание, 2012) — глава 7 «Безопасность»
- Delpy B. «Mimikatz» — описание и исходный код утилиты
- CVE-2021-1678 — уязвимость в NTLM-аутентификации (2021)
- RFC 1320 — спецификация алгоритма MD4