作者简介:
袁伟烨 微软MCP MCSA MCTS
联系方式:popeyeywy@126.com

Microsoft Security Identifier这个名称对于刚接触计算机不久的新手们可能不是很熟悉这个名字,但是对于计算及老鸟甚至骨灰级任务来说SID应该是非常熟悉的一项重要系统安全信息

下面我就和大家一起聊聊Security Identifier(以下简称SID)

 

一、什么是SID?

SID全称为:Security Identifiers是微软从Server2000时代引入的一个概念:安全标识符

在MicrosoftOS系统中(Server2000以上级别)工作组环境下:计算机、组、用户都会有自己的SID号,这些信息是存储在用户计算机本地注册表中的。

在Microsoft Active Directory域环境下每个对象都具备SID号,这些信息是存储在Microsoft Active Directory目录中的

这些SID号根据其对象类型的不同随机生成的,当然也有一定的命名规则,详见微软官方文档的说明

 

Windows 操作系统中的常见安全标识符

http://support.microsoft.com/kb/243330

 

二、Microsoft SID的作用

 

SID是对象身份的象征,这些标识也被赋予了其特定的权限,既然名称是安全标识符,那么从哪些地方可以体现出这些安全信息呢?

举例1:SID号:S-1-5-21 *-*-* -500 它的结尾是500那么就代表它为本地Aadministrator管理员,具有本地Administrator所有的权限

举例2:SID号:S-1-5-21 *-*-* -501 它的结尾是501那么就代表它为本地Guest,具有本地Guest所有的权限

 

在Microsoft Active Directory目录中所有对象的SID信息都是存储在Microsoft Active Directory目录服务中,目录服务的策略或规则来决定某对象所对应的权限。那么在域中标识对象显然至关重要,那么SID就能够很好的在域中来标记对象权限并且进行区分。

 

三、如何查看SID

在Server2000、WindowsXP操作系统中查看SID有2种方法

 

 1、使用Microsoft Whoami.exe工具来查看

 

默认情况下Server2000以及WindowsXP操作系统没有内置工具来查看计算机的SID信息,所以必须下载Microsoft Resource Kit工具包中的WHOAMI.EXE工具来进行查看。

Whoami下载地址为:

http://download.microsoft.com/download/win2000platform/whoami/1.00.0.1/nt5/en-us/whoami_setup.exe

 

安装完毕后,我们将命令行切换至C:\Program Files\Resource Kit

并且输入Whoami /user /sid 即可快速查看到用户SID为:S-1-5-21-117609710-746137067-1957994488-1003

2-administrator

 

2、使用注册表编辑器查看SID

 

当不能上网或者手头没有工具包的情况下,我们可以利用注册表的方法来查看SID。因为在工作组的环境下我们的SID号是存储在计算机的注册表中

 

点击开始--运行—Regedit 确定,打开注册表编辑器--展开下列路径

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

在Profilelist可以看到计算机中所有的SID信息

9-sid in reg 2

 

3、在Microsoft Active Directory域中查看SID(安全标识符)

 

前两种情况是查看本地SID信息,那么在域中我们如何来查询用户安全标识符呢?

Server2003环境:

Server2003域环境中默认没有注册ADSIEDIT工具,需要用户手动注册下一个系统DLL文件,点击开始菜单--运行--regsvr32 adsiedit.dll

 

注册完毕后点击开始--运行—MMC--添加ADSLEDIT.MSC工具即可

p_w_picpath

 

Server2008域环境中默认已经内置了adeiesit管理工具,只需要点击开始--管理工具--ADSLEDIT编辑器即可顺利打开Adsiedit工具和域用户与计算机管理工具的界面比较类似,管理员可以快速定位到域中的对象,右击某个对象,在属性菜单--找到object sid即可查看对象的SID(安全标识符)了。

 

四:SID的命名规则

 

单纯看文字性的东西可能我们不能够清晰明了的来解释SID,下面我们就用图形模式来拆解我们上文中提及到的SID号

 

 

 

S-1-5-21-117609710-746137067-1957994488-1003

 

p_w_picpath

 

我们将一个SID拆分成5部分

Part1:S代表这个字符串是一个SID(安全标识符)号

Part2:SID的版本号

Part3:授权颁发机构

Part4:域或本地计算机标识符

Part5:相对标识ID

 

更多命名规则参阅:

Windows 操作系统中的常见安全标识符

http://support.microsoft.com/kb/243330

 

五、SID命名算法

上文得知我们可以通过注册表的方法来查询到用户SID信息。在打开SID后我们得到的却是一个16进制的数组,计算机是如何将这些数组来组成我们的SID(安全标识符)的呢?

8-sid in reg

我们举例一个SID(安全标识符)为S-1-5-21-117609710-746137067-1957994488-1003

通过注册表编辑器,定位到该SID所在目录,并且双击SID查看这个2进制值

 

若要查看真正的SID数据原始值,需要将其中的12字节抽出(黑色标记部分)这部分的值是通过计算机随机产生的唯一序列号。由于12字节=24个字那么

EE 94 02 07 EB 25 79 2C F8 9F B4 74 这24个十六进制字符将是我们揭开用户SID奥秘的关键因素

 

 

 

 

p_w_picpath
 

Setp1:把24个十六进制数分为3部分

p_w_picpath

Setp2:求每一个部分的反向字节

p_w_picpath

Setp3:将每一个组转换为10进制

p_w_picpath

 

Setp4:合并转换数据

 

六:更换SID号(这部分摘自Microsoft Technet)

许多组织使用磁盘映像克隆技术来大规模部署 Windows。此方法要求将完全安装和配置的 Windows 计算机的磁盘复制到其他计算机的磁盘驱动器。其他这些计算机似乎已经有效地完成了相同的安装过程,并且可以立即使用。

虽然此方法节省了数小时的工作量并且比其他部署方法有效,但是它存在一个严重问题,即每个克隆的系统都具有一个完全相同的计算机安全标识符 (SID)。这一因素会损害工作组环境的安全性,并且在具有多个相同计算机 SID 的网络中,还可能损害可移动媒体安全性。

来自 Windows 社区的要求已经促使多家公司开发可以在克隆系统后更改计算机的 SID 的程序。但是,Symantec 的 SID Changer 和 Symantec 的 Ghost Walker 仅作为每家公司的高端产品出售。而且,它们都从 DOS 命令提示窗口中运行(Altiris 的更改器类似于 NewSID)。

NewSID 是我们开发的可更改计算机的 SID 的程序。它是一个免费的 Win32 程序,这意味着它可以容易地在以前克隆的系统上运行。 NewSID 可在 Windows NT 4、Windows 2000、Windows XP 和 Windows .NET Server 上运行。

NewSID 4.10 版

http://technet.microsoft.com/zh-cn/sysinternals/bb897418.aspx

 

SID掌控着计算机安全命脉,通过本文大家对Microsoft Security Identifier是否有一个大体上的认识,希望大家多多交流

相关链接:

http://support.microsoft.com/kb/927229/zh-cn
http://support.microsoft.com/kb/243330
http://technet.microsoft.com/zh-cn/sysinternals/bb897418.aspx
http://technet.microsoft.com/zh-cn/library/bb124152(EXCHG.65).aspx
http://en.wikipedia.org/wiki/LDAP
http://en.wikipedia.org/wiki/Security_Identifier