Sysadminium
База знаний системного администратора
Идентификаторы безопасности SID
В операционной системе Windows вместо имен пользователей для идентификации используются SID (Security Identifiers). В этой статье познакомимся с ними.
Идентификаторы безопасности
Идентификаторы безопасности – это такие уникальные номера, которые есть у: пользователей, групп, доменов, служб и компьютеров.
В общем у тех объектов, которые могут захотеть получить доступ к другим объектам, таким как: файлы, драйверы, разделы дисков, реестр.
SID представляет собой число переменной длины. Оно состоит из:
SID всегда начинается с “S“, например:
Логика назначения SID
Каждый локальный пользователь создается на основе компьютерного или доменного идентификатора. А для уникальности и в конце записывается уникальный RID для каждого объекта. RID для новых пользовательских учетных данных начинается с 1000, и увеличивается с каждым новым пользователем и группой. До 1000 идут RID для стандартных пользователей, например 500 для пользователя «Администратор», 501 для «Гость».
Если компьютер повышается до контроллера домена, то за основу берется идентификатор компьютера и из него создается идентификатор домена. А идентификатор компьютера генерируется заново.
Стандартные SID
Есть предопределенные идентификаторы. Они одинаковые на всех машинах во всем мире. Так файл, доступный группе Everyone (Все), на одной машине, будет открыт и на другой, если перенести жесткий диск туда.
В системе Windows существуют следующие стандартные SID:
Работа с утилитой PsGetsid.exe
Для просмотра идентификаторов можно воспользоваться программой PsGetsid из набора Sysinternals. Выполнив команду без параметров вы увидите имя компьютера и его SID:
Указав имя домена — увидите идентификатор домена:
Указав свое имя узнаете свой идентификатор, он будет зависеть от SID домена. И на всех компьютерах в домене будет одинаковым:
Как видно выше, к доменному SID просто добавили RID. При этом, локальные пользователи с одинаковыми именами на всех компьютерах будут разными.
В качестве параметра можно указать сам идентификатор, утилита в этом случае вернет имя пользователя:
Можно узнать имя администратора домена, для этого используем идентификатор домена и стандартный для администратора RID = 500:
Любой компьютер в домене имеет свой SID, он также будет состоять из SID домена и своего RID. Чтобы его узнать пишите :
SIP Процессов
Так как процессы запускаются от имени какого-либо пользователя, то процессы тоже имеют SID. Посмотреть их можно с помощью программы Process Explorer. Для этого нужно открыть свойства выбранного процесса и перейти на вкладку “Security“:
Миф о дублировании SID компьютера
Содержание статьи
Третьего ноября этого года в Sysinternals был закрыт проект по развитию
NewSID – утилиты, позволяющей менять идентификатор защиты компьютера
(machine SID). Я написал NewSID (тогда она называлась NTSID) в 1997 году,
поскольку на тот момент единственной программой, позволявшей менять SID, была
утилита от Microsoft под названием
Sysprep, которая не поддерживала смену идентификаторов защиты на тех
машинах, на которых уже были установлены приложения.
Идентификатор защиты компьютера – это уникальный идентификатор, генерируемый
программой установки Windows Setup, который Windows использует как основной
идентификатор безопасности для определяемых администратором локальных аккаунтов
и групп. После того, как пользователь авторизуется в системе, он представляется
ей своими идентификаторами SID пользователя и группы в соответствии с
авторизацией объекта (проверками прав доступа). И если две машины могут иметь
одинаковый идентификатор защиты, то и аккаунты с группами на них могут также
иметь одинаковые идентификаторы. Кажется очевидным, что наличие нескольких
компьютеров с одинаковыми SID в пределах одной сети небезопасно, не правда ли?
По крайней мере, так принято было думать.
Причиной, по которой я начал рассматривать возможность отправки NewSID на
покой, были отзывы пользователей. Хотя в целом применение утилиты на Windows
Vista было успешным, некоторые пользователи сообщали об ошибках в работе
компонентов системы после использования NewSID. К тому же, сам я не проводил ее
полного тестирования. Когда я принялся за изучение отзывов, я сделал шаг назад,
чтобы понять, как дублированные SID могут становиться причинами проблем,
поскольку раньше я принимал возможность этого на веру, как и все остальные. И
чем больше я об этом думал, тем крепче была моя убежденность, что дублирование
сертификатов безопасности, то есть наличие множества компьютеров с одинаковыми
SID, само по себе не может быть причиной для возникновения проблем с
безопасностью или чем-нибудь еще. Я поделился своими мыслями с командами
разработчиков Windows, занимающимися безопасностью и развертыванием систем, и
там никто не смог придумать такую последовательность действий, при которой две
системы с одинаковыми SID, работающие в пределах рабочей группы или домена,
могли бы стать причиной ошибки. С этого момента решение закрыть NewSID стало
очевидным.
Я понимаю, что новость о том, что в наличии дублированных SID нет ничего
страшного, станет для многих неожиданностью, особенно если учесть, что практика
смены идентификаторов безопасности при развертывании систем из образов
применяется еще со времен Windows NT. Эта статья разоблачает миф об опасности
дублирования SID, и чтобы его развеять, я сначала объясню, что же такое
идентификаторы безопасности компьютера и как они используются Windows, после
чего продемонстрирую, что за одним исключением, Windows никогда не показывает
идентификаторы безопасности вне компьютера, а потому иметь машины с одинаковыми
SID абсолютно нормально.
Идентификаторы безопасности (SID)
Увидеть, что собой представляет SID машины можно, если воспользоваться
утилитой
PsGetSid, запущенной через командную строку без параметров:
Еще перед тем, как вы создадите первую учетную запись в системе, Windows
определяет несколько встроенных пользователей и групп, включая учетные записи
«Администратор» и «Гость». Вместо того, чтобы генерировать новые случайные
идентификаторы SID для этих учетных записей, Windows обеспечивает их
непохожесть, просто добавляя в SID уникальные для каждой учетной записи числа,
называемые относительными идентификаторами (Relative Identifier, RID). Для
упомянутых выше встроенных учетных записей RID определены заранее, поэтому у
пользователя «Администратор» RID всегда равен 500:
Плюс к этим динамически создаваемым SID, система определяет несколько
аккаунтов, которые также всегда имеют предопределенные значения SID. Один из
примеров – группа Everyone, SID которой в каждой системе Windows имеет значение
S-1-1-0:
Идентификаторы безопасности и списки управления доступом (ACL)
А здесь (в окне Handle Process Explorer) можно увидеть информацию о маркере,
который Lsass создал для этой сессии. Обратите внимание, что число, следующее за
именем учетной записи (7fdee), соответствует идентификатору входной сессии из
LogonSessions:
По умолчанию процессы наследуют копию маркера своего родительского процесса.
Так, каждый процесс, запущенный в моей интерактивной сессии, имеет копию
маркера, изначально унаследованного им от процесса Userinit.exe, который первым
создается Winlogon при каждом интерактивном входе в систему. Вы можете
посмотреть содержимое маркера процесса, сделав двойной щелчок на строке процесса
в
Process Explorer и переключившись на вкладку Security в диалоговом окне
свойств процесса:
Когда один из моих процессов открывает объект операционной системы, например,
файл или ключ системного реестра, подсистема безопасности осуществляет проверку
прав доступа, в ходе которой сверяются те записи в списке управления доступом
(ACL) объекта, которые ссылаются на SID, находящийся в маркере процесса.
Такая же проверка осуществляется и для сессии удаленного входа в систему при
использовании общих ресурсов с удаленных компьютеров. Для успешного подключения
к общему ресурсу нужно пройти аутентификацию на удаленной системе с помощью
учетной записи, известной этой системе. Если компьютер является частью «Рабочей
группы», то вам нужно вводить входные данные для локальной учетной записи
удаленной системы, а для системы, соединенной с доменом, это могут быть как
данные локальной учетной записи на сетевом компьютере, так и данные учетной
записи домена. Когда пользователь обращается к файлу на общем ресурсе, драйвер
файлового сервера этой системы использует маркер из сессии входа для проверки
прав доступа, транслируя его через механизм заимствования прав.
Дублирование SID
Пропагандируемый Microsoft способ создания установки Windows, пригодный для
развертывания системы на группы компьютеров, заключается в установке Windows на
эталонный компьютер и подготовке системы к клонированию с помощью утилиты
Sysprep. Этот метод называется «обобщением образа», поскольку при его загрузке
Sysprep персонализирует установку, генерируя новый SID компьютера, определяя
имеющиеся аппаратные средства, сбрасывая счетчик активации и устанавливая прочие
настройки, в том числе – имя компьютера.
Однако, некоторые IT-администраторы сначала ставят Windows на одну из своих
систем, устанавливают и настраивают приложения, а затем используют такие
средства развертывания, которые не сбрасывают SID на установочных образах
Windows. До сих пор наилучшим средством в таких ситуациях было использование
утилит для смены SID, таких как NewSID. Эти утилиты генерируют новый
идентификатор безопасности машины, а затем пытаются обновить его во всех
мыслимых местах, включая файловую систему и списки управления доступом в
реестре. Причина, по которой Microsoft не поддерживает подобный способ изменения
системы, довольно проста – в отличие от Sysprep, сторонние утилиты могут и не
знать обо всех тех местах, где Windows хранит идентификатор безопасности
компьютера. А раз так, то и надежность компьютера, на котором имеется и старый и
новый SID, не может быть гарантирована.
Другими словами, не SID предоставляет доступ к компьютеру, а имя
пользователя и пароль учетной записи: одно лишь знание SID учетной записи на
удаленной машине не позволит получить доступ к компьютеру или его ресурсам.
Чтобы еще раз убедиться в этом, достаточно вспомнить тот факт, что встроенные
учетные записи (например, Local System) имеют одинаковые SID на любом
компьютере, что могло бы стать серьезной уязвимостью, если бы доступ основывался
на SID.
Как я уже сказал ранее, из этого правила есть одно исключение, и это
исключение – сами контроллеры домена. У каждого домена есть уникальный SID
домена, генерируемый случайным образом при установке домена, и все SID
компьютеров, входящих в состав домена, совпадают с SID домена. Поэтому в
определенном смысле эту ситуацию можно рассматривать, как использование
идентификатора SID другими компьютерами. Это означает, что компьютеры,
являющиеся частью домена, не могут иметь те же самые SID компьютера, что и
контроллер домена. Однако, как и эти компьютеры, каждый контроллер домена имеет
учетную запись компьютера в домене, по которой и осуществляется их идентификация
при авторизации на удаленной системе.
В целом ряде статей, посвященных дублированию SID, включая
эту статью из
базы знаний Microsoft, содержится предупреждение, что наличие у нескольких
компьютеров одинаковых SID приводит к тому, что ресурсы на сменных носителях
(например, на отформатированных в NTFS внешних дисках) не могут быть защищены
средствами локальной учетной записи. Однако в них упускается из виду то
обстоятельство, что права доступа на таких накопителях защитить не получится в
любом случае, поскольку подсоединить их можно к такой машине, которой
безразличны права доступа NTFS. Более того, сменные накопители чаще всего
используют права доступа по умолчанию, позволяющие осуществлять доступ хорошо
известным идентификаторам SID (группы «Администраторы», к примеру), одинаковым
на любой системе. Это фундаментальное правило физической защиты, поэтому в
Windows 7 включена функция Bitlocker-to-Go, позволяющая зашифровывать данные на
сменных носителях.
Новая лучшая политика
Удивительно, что дублирование SID так долго считалось не подлежащей
обсуждению проблемой лишь потому, что все думали, что кому-то об этом точно
известно. К моему сожалению, на самом деле NewSID никогда не была по-настоящему
полезной утилитой, и скучать по ней теперь нет никакого смысла. Официальная
политика Microsoft по данному вопросу тоже изменится, поэтому можно рассчитывать
на то, что в будущих версиях Sysprep этап генерации SID будет пропущен.
Как узнать идентификатор безопасности (SID) пользователя в Windows 10
В данной статье рассмотрено несколько способов, с помощью которых можно узнать идентификатор безопасности (SID) пользователя в операционной системе Windows 10.
Операционная система использует именно идентификаторы безопасности (SID) для контроля доступа к различным ресурсам, таким как объекты файловой системы, ключам реестра, сетевым каталогам, что означает, что даже если вы измените имя пользователя, то это не повлияет на какие-либо предварительные настройки для этой учетной записи, поскольку каждая конфигурация привязана к SID, который остается постоянным.
Идентификатор безопасности может быть полезен во время выполнения определенных команд, связанных с безопасностью компьютера.
Как узнать идентификатор безопасности (SID) пользователя в командной строке
Чтобы узнать SID текущего пользователя воспользуемся утилитой whoami, для этого откройте командную строку и выполните следующую команду:
Также узнать SID текущего пользователя можно выполнив следующую команду:
wmic useraccount where name=»%username%» get name,sid
Чтобы узнать все SID присутствующие в операционной системе, выполните команду:
Чтобы узнать SID определённого пользователя, выполните следующую команду:
wmic useraccount where name=»TestUser1″ get sid
Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду:
wmic useraccount where sid=» S-1-5-21-3210479907-464018182-414762983-1002 » get name
Как узнать идентификатор безопасности (SID) пользователя в Windows PowerSell
Также узнать идентификатор безопасности можно используя консоль Windows PowerShell.
Чтобы узнать все идентификаторы безопасности (SID) в консоли Windows PowerShell, выполните команду:
Get-WmiObject Win32_UserAccount | Select Name,SID
Чтобы узнать SID определённого пользователя, выполните следующую команду:
Также узнать SID определённого пользователя, можно выполнив команду:
Чтобы узнать имя пользователя учетной записи по SID (обратная процедура), выполните команду следующего вида:
Где вместо SID укажите нужный идентификатор безопасности.
В данном примере команда выглядит так:
Как узнать идентификатор безопасности (SID) в редакторе реестра
Используя редактор реестра, также можно узнать идентификатор безопасности (SID), для этого откройте редактор реестра нажав сочетание клавиш 
В открывшемся окне редактора реестра, скопируйте/вставьте или перейдите по следующему пути:
В разделе ProfileList вы увидите всех пользователей и их идентификаторы SID.
Что такое sid в ос windows
Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.
Что такое Sid windows
Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:
Структура SID
Давайте разбираться из каких частей состоит Security IDentifier.
По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.
Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.
База Security Account Manager
Давайте посмотрим за, что отвечает Security Account Manager:
Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.
Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.
SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.
1 способ узнать sid пользователя, команда WMIC
Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду
На выходе вы получите список локальных пользователей.
Чтобы выяснить все логины доменных пользователей вводим команду
Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое
Далее зная логин все просто вводим
Как видите все работает.
Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.
Еще с помощью WMI вы можете реализовать вот, что укажите имя компьютера (для локального) или домена (для доменного пользователя). Ниже пример получения SID локальной рабочей станции
Для доменной структуры
Получить логин по SID аналогично предыдущей команду.
2 способ узнать sid пользователя, команда Whoami
Тоже довольно старенькая команда из cmd.exe. Вводим
Получаем полный сид текущего залогиненного пользователя.
Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920
Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей
Так же вы увидите сведения о привилегиях.
На мой взгляд, данный метод, немного проще первого, так как требует ввода меньшего количества ключей.
3 способ узнать sid пользователя, ADUC и ADSIedit
В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.
После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.
Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.
Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.
4 способ узнать sid пользователя, утилита PsGetSid
Есть такая замечательная утилита от Microsoft од названием PsGetSid.
Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.
смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.
Вводим команду psgetsid имя компьютера\логин учетки
и наоборот, выясним имя по SID:
5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.
Для локального пользователя команда будет такой.
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
получить наоборот логин по sid
Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.
В этом нам поможет скрипт PowerShell. Откройте ISE.
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.
































