安全标识符SID技术介绍及查看技巧
说到安全标识符SID就要先说说安全主体(Security Principals),安全主体是一个能够对它分配权限的对象,例如,用户、组和计算机; 对于每一个Windows 200x域中的安全主体都有一个惟一的安全标识符SID。
那什么是安全标识符SID呢?安全标识符SID是一个值,这个值唯一地标识一个组织内的用户、组、计算机或服务。每一个帐户在被创建时会分配到一个安全标识符,Windows 200x域中通过安全标识符SID来实现访问控制机制。
那么访问控制机制又是如何实现的呢?对于网络的每个对象(例如一个文件),都有一组访问控制信息,该信息称为安全描述符(Security Descriptor),它控制用户和组允许使用的访问类型。安全描述符由以下三部分组成:所有者安全标识符,自由访问控制列表(DACL)和安全访问控制列表(SACL)。自由访问控制列表(DACL)通过用户(组)的SID确定哪些用户(组)被允许/拒绝访问当前对象。而安全访问控制列表(SACL)则控制如何审计用户(组)对当前对象的访问。
从以上的描述中,我们知道每一个Windows 200x域中的安全主体都有一个安全标识符SID,那这个安全标示符是有什么组成的呢?Windows 200x域中的每一个对象的SID都由当前域的SID加上一个相对标识符RID组成,例如以下是一个2003域中的用户对象:
其中S-1-5-21-3805389047-3781885256-3221930211为当前域的SID:
每一个域同样也被一个SID唯一标识,所以一个域被重命名后,它也无法与之前的域建立Trust信任关系。
在图一中我们看到,紧随域SID之后是一串相对标识符RID,每个 Windows 200x域控制器会被分配到一个RID池,每个RID池中分配有一定范围的RID值。当有一个对象被创建时,域控制器从自己当前的RID池中拿出下一个可以使用的RID分配给此对象,加上当前域的SID,便组成了此对象的唯一标示符SID。每一个AD域中都有一个负责RID的灵活单主机操作(FSMO)叫做RID主控(RID Master),它负责在其域中为每个域控制器颁发独立的RID池,并防止安全主体的SID重复。以下这篇KB中详细介绍了AD中与RID相关的所有属性:
http://support.microsoft.com/kb/305475/en-us
说了这么多SID,那么究竟我们应该怎么来查看一个对象的SID呢?微软提供了一个官方工具PSgetsid.exe,我们可以通过以下链接获取:
http://technet.microsoft.com/en-us/sysinternals/bb896649
通过PSgetsid.exe我们可以查看相应用户的SID:
同样,通过SID,我们可以查看对应的用户:
在以上例子中我们看到的SID都是以字符串形式展现在我们面前的,如S-1-5-21-3805389047-3781885256-3221930211-1601。但是SID是如何存储于AD域中的呢?其实真正的SID都是以十六进制数字形式存储的:
在某些应用程序的日志中我们有时会发现,所有的SID的显示形式都是一串数字,那么我们怎么才能将存储的十六进制数字转换为可以阅读的字符串形式呢?以下我们来看看这两种表达方式之间的对应关系:
首先,我们看下每个字段分别代表什么意思:
字符串
S
1
5
21-3805389047-3781885256-3221930211
1601
作用
该字符串是安全标识符
版本标识
标识符颁发机构
域或者本地计算机标识符
相对标识符
可能的标识符颁发机构有:
0 – Null
Authority
1 – World Authority
2 – Local Authority
3 – Creator Authority
4 – Non-unique Authority
5 – NT Authority
9 – Resource Manager Authority
接着,我们来看SID的数据结构是如何定义的:
////////////////////////////////////////////////////////////////////////
//
//
// Security Id (SID) //
// //
////////////////////////////////////////////////////////////////////////
//
//
// Pictorially the structureof an SID is as follows:
//
// 1 1 1 1 1 1
// 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
//
+—————————————————————+
// |
SubAuthorityCount |Reserved1 (SBZ)| Revision |
//
+—————————————————————+
// | IdentifierAuthority[0] |
//
+—————————————————————+
// | IdentifierAuthority[1] |
// +—————————————————————+
// | IdentifierAuthority[2] |
//
+—————————————————————+
// | |
// +- – – – – – – – SubAuthority[] – – – – – – – – -+// |
|
//
+—————————————————————+
//
typedef struct _SID_IDENTIFIER_AUTHORITY{
BYTE Value[6];
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
typedef struct _SID {
BYTE Revision;
BYTE SubAuthorityCount;
SID_IDENTIFIER_AUTHORITYIdentifierAuthority;
[size_is(SubAuthorityCount)] DWORD SubAuthority[*];
} SID, *PISID;
#define SID_REVISION (1) // Current revision level
#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} // ntifs
以上信息具体可以参考如下链接:
http://msdn.microsoft.com/en-us/library/aa379597(v=VS.85).aspx
最后我们来分析下如何将存储的十六进制数与字符串进行转换:
01 —-> S-1
05 —-> 5
此处表示以下有5个小端字节序数。
00 00 00 00 00 05 —-> 5
此处表示标识符颁发机构为NT Authority。
以下为小端字节序:
15 00 00 00 —-> 0x00000015 —-> 21
F7 A0 D1 E2 —-> 0xE2D1A0F7 —->
3805389047
48 FD 6A E1 —-> 0xE16AFD48 —-> 3781885256
E3 C0 0A C0 —-> 0xC00AC0E3 —-> 3221930211
41 06 00 00 —-> 0x00000641 —-> 1601
将以上字符串连接起来为S-1-5-21-3805389047-3781885256-3221930211-1601。
通过这个方式,我们可以很轻松地在两种模式的SID间进行转换,加上PSgetsid.exe工具的帮助,快速找到所需的对象,从而更加有效地分析应用程序的日志。
每个域中都有一些常见的特殊用户,如Administrators组,Guest等,他们的安全标识符都是固定的,以下链接中列出了所有特殊用户的SID:
http://support.microsoft.com/kb/243330/en-us,在一些日常工作中,如果我们看到此类长度比较短的SID,我们便可以通过这个链接进行查询。
安全标识符SID技术介绍及查看技巧的更多相关文章
- .Net环境下的缓存技术介绍 (转)
.Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 ...
- RAID技术介绍
RAID技术介绍 简介 RAID是一个我们经常能见到的名词.但却因为很少能在实际环境中体验,所以很难对其原理 能有很清楚的认识和掌握.本文将对RAID技术进行介绍和总结,以期能尽量阐明其概念. RAI ...
- .Net环境下的缓存技术介绍
.Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 1.1 ...
- 网络存储技术介绍(1) ( based on zt)
最近由于某同学微信发了一些网络存储的文章,开始感兴趣,稍微收集了一些 一. 网络存储技术 http://ask.zol.com.cn/q/187044.html (yxr:很老的技术介绍吧) 网络 ...
- (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍
首页 视界智尚 算法技术 每日技术 来打我呀 注册 SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...
- VPS技术介绍以及分析
VPS的全称为Virtual Private Server,叫做虚拟专用服务器(Godaddy称之为Virtual Dedicated Server,VDS).就是利用各种虚拟化手段把单台物理服务器虚 ...
- 转:Android 2.3 代码混淆proguard技术介绍
ProGuard简介 ProGuard是一个SourceForge上非常知名的开源项目.官网网址是:http://proguard.sourceforge.net/. Java的字节码一般是非常容易反 ...
- WPF开发技术介绍
本月做了一个小讲座,主要是WPF的开发技术介绍,由于是上班时间,去听的人不多,但对于自己来说至少是又巩固了Winform的知识,抽时间写一篇文章,在此分享给大家,有什么宝贵建议大家也可以提给我,谢谢. ...
- Portal技术介绍
Portal技术介绍 Portal是web应用发展的一个重要趋势,目前几乎所有大的软件厂商都有自己的Portal产品.并且Portal技术已经形成规范.本文对Portal技术和产品进行了分析,目的 ...
随机推荐
- .net framework 3.5sp1 安装不成功
主要还是进程中有程序和正在安装的 framework 3.5sp1有冲突.打开任务管理器,关闭所有360进程和与Framework有关的进程.竟然安装成功了,折腾了3.4天的问题,就这么解决了.
- WINDOWS Server2008上部署Oracle10g及oracle SQL语法小记
首先安装10G客户端 情况一:一般都会安装到一般报错.因为10G是32BIT客户端.而操作系统是64位的.但是不会影响配置监听程序.自主开发的应用程序依然可以运行. 情况二:报错但是配置完监听程序始终 ...
- Nginx 502错误触发条件与解决办法汇总(转载)
一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现.有些站长是在刚刚转移到Nginx之后就出现了这个问题,所以经常会怀疑这是不是Nginx的问题,但 ...
- AX7: Overlayering and extensions
Customization: Overlayering and extensions https://ax.help.dynamics.com/en/wiki/customization-overla ...
- tomcat 7/8 启动非常慢的解决方法
在日志中发现启动慢的地方: 2016-11-14 09:31:30.522 [localhost-startStop-1] INFO o.s.c.s.DefaultLifecycleProcessor ...
- PG CREATEINDEX CONCURRENTLY
PG CREATEINDEX CONCURRENTLY [TOC] 官方说法 根据9.1的文档 Creating an index can interfere with regular operati ...
- 跨境B2B网站
大家都在谈跨境电商,其实现在比较火的应该是跨境B2B网站,它被很多的业内人士所看好,并且也取得了很喜人的成绩,无论是经营方面还是品牌打造,都从多方向带动了行业的发展. 跨境B2B网站 一.从买方市场向 ...
- 基于ADO.NET的SqlHelper类
1.使用Connection连接数据库的步骤: (1).添加命名空间 System.Data.SqlClient(注意:初学者经常会忘记) (2)定义连接字符串.连接SQL Server 数据库时: ...
- Sublime Text 全程指引
Sublime Text 全程指引 by Lucida 包含sublime 的常用快捷操作
- for+next()实现数组的遍历及while list each 的使用
//要求使用for循环语句来完成该数组的遍历//输出每一项的键名和对应值: $a = array( 'a' => 34, 5 => 51, ...