课程编写 | ||
类别 | 内容 | |
实验课题名称 | 安全登陆 | |
实验目的与要求 |
1. 掌握windows 2000/NT的登陆及身份认证过程。 2. 理解SID,访问令牌,SAM的含义 3. 掌握查看用户SID的方法 4. 掌握创建一个具有管理员权限的隐藏账户的方法 |
|
实验环境 | VPC1(虚拟PC) | 操作系统类型:windows 2003,网络接口:本地连接 |
VPC1 连接要求 | PC 网络接口,本地连接与实验网络直连 | |
软件描述 |
1、学生机要求安装java环境 2、vpc安装Windows 2003 |
|
实验环境描述 |
1、 学生机与实验室网络直连; 2、 VPC1与实验室网络直连; 3、 学生机与VPC1物理链路连通; |
|
预备知识 |
1. 登录及身份认证过程 Windows 2000必须确定自己是否在与合法的安全主体(即合法的用户)打交道,这是通过认证实现的,其中最简单的例子就是用户的登录及身份认证过程。一个成功的windows登录过程要经过以下4个步骤。 windows登录以及身份认证过程 1. 用户按Ctrl+Alt+Del组合键,引起硬件中断,被系统捕获,这样使操作系统激活winLogon进程(这是一个登录进程)。WinLogon进程通过调用标识与鉴别DLL,将登录窗口(帐号名和口令登录提示符)展示在用户面前,要求用户输入一个用户名和口令。 2. WinLogon将用户和口令传递给本地安全认证(Local Security Authority,LSA) 3. LSA查询安全帐号管理器(Security Account Manager,SAM)数据库,以确定用户名和口令是否属于授权的系统用户。如果用户名和密码合法,SAM把该用户的SID以及该用户所属的所有组的SID返回给LSA。LSA使用这些信息创建一个访问令牌(Access Token),每当用户请求访问一个受保护资源时,LSA就会将访问令牌显示出来以代替用户的“标记”。 4. WinLogon进程传送访问令牌到Win32模块,同时发出一个请求,以便为用户建立登录进程。登录进程建立用户环境,包括启动Desktop Explorer和现实背景等。 2. SID SID(Security Identifiers,安全标识符)用于在系统中唯一标识对象,在对象创建时由系统分配,包括域的SID或RID(Relative Identifier,相对标识符)。原理上如果帐户无限制增加的时候,会产生同样的SID,但是通常情况下SID是唯一的。这种唯一性是由创建时的计算机名,系统时间,进程所消耗CPU的时间三要素共同确保的。 Windows 系统中的内部进程将引用帐户的SID而不是帐户的用户名或组名。如果创建一个帐户,再删除该帐户,那么即使再添加一个相同名称的帐户,这个新帐户也不会继承原帐户的权限,权利与组的关系,因为它们具有不同的SID,但是重命名一个帐户,既将该帐户改名,由于SID并没有改变,因此其账户的属性,权限设置与组关系都不会影响。 3. SAM SAM(Security Account Manager,安全账号管理器)是控制和维护安全账号管理数据库,既SAM数据库的安全组件。该数据库包含所有账户和组的账号信息,包括密码HASH,账户的SID等。安全账号管理器提供用户登录认证,负责对用户输入的信息与SAM数据库的信息对比,并为用户赋予一个SID。 SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,可以使用regedt.exe打开注册表编辑器,通过设置适当权限来查看SAM中的内容。SAM数据库在磁盘上就保存在%systemroot%system32\config目录下的sam文件中,在这个目录下还包括一个security文件,是安全数据库的内容,两者密切相关。 4. 访问令牌 用户通过验证后,登录进程会给用户一个访问令牌(Access Token),该令牌相当于用户访问系统资源的凭证,它包括用户和这个用户属于的所有组的SID。当用户试图访问系统资源时,将访问令牌提供给windows,然后windows检查用户试图访问对象上的访问控制列表。如果用户被允许访问该对象,windows将会分配给用户适当的访问权限。 访问令牌是用户在通过验证的时候有登录进程所提供的,所以改变用户的权限需要注销后重新登录,重新获取访问令牌。 |
|
实验内容 |
1. 演示如何查看管理员用户的SID号。 2. 演示如何创建一个新的普通用户,并通过查看该用户的SID号来分析管理员帐号与普通帐号的区别。 3. 通过如何通过注册表操作来创建一个具有管理员权限的隐藏帐号。 |
|
实验步骤 |
l 点击windows2003的“打开控制台”,这样我们进入到了windows2003登录页面。输入密码123456,即可进入到实验环境页面。 1.查看管理员用户的SID 可以使用whoami这样的工具(包含在windows 2000 Resource Kit中)来查看与登录会话相关的SID。具体做法是: (1) 在桌面上单击“开始” – “运行”命令,在弹出的“运行”对话框中输入cmd,然后单击“确定”按钮,会打开命令提示符窗口。 (2) 在闪烁的光标处输入whoami/?命令,查看命令的所有功能。 (3) 输入whoami/user命令,可查看用户的SID。 查看管理员用户的 SID 输入whoami/user命令后,可以查看到用户名为administrator的用户的SID为S-1-5-21-1886953275-3886242891-283490650-500。从此可以看到SID带有前缀S,它的各个部分之间用连字符隔3开。第一个数字(本实验中的1)是修订版本号;第二个数字是标识符颁发机构代码(对windows 2003来说总是5);然后是4个子颁发机构代码(本例中是21和后续的3个长数字串)和一个相对标识符(Eelative IdenTifier,RID,本实验中是500)。SID中的一部分是各系统或域唯一具有的,而另一部分(RID)是跨所有系统和域共享的。当然安装windows 2003时,本地计算机会颁发一个随机的SID。类似的当创建一个windows 2003 域时,它也被指定一个唯一的SID。于是对任何的windows 2003计算机或域来说,子颁发机构代码总是唯一的(除非故意修改或复制,例如某些底层的磁盘复制技术)。RID对所有的计算机或域来说都是一个常数。例如,带有RID 500的SID总是代表本地计算机的真正administrator帐户,RID 501是Guest帐户。 2. 查看新建用户的SID (1) 在命令提示符窗口的闪烁标处输入net user tuser/add命令,添加用户名为Tuser的新用户。 添加用户tuser (2) 用户新建成功后,注销管理员用户,以tuser用户的身份重新登录windows。 (3) 重新打开命令行窗口,在命令提示符窗口的闪烁光标处再次输入whoami /user命令,可以看到用户名和用户SID都改变了。用户名tuser(用户名的大小写无关)。由此可以看出用户tuser的RID与administrator的RID不同。在域中,从1000开始的RID代表用户帐户。 查看用户tuser的SID (例如,本实验中RID是该域中创建的第9位用户),windows 2000(或者使用适当工具的恶意黑客)总是将具有RID 500的帐户识别为管理员。 3. 创建一个具有管理员权限的隐藏账户 在前面的预备知识中已经大致介绍了SAM和SID的相关知识,利用这些知识我们来创建一个具有管理员权限的隐藏账户,必要时将对SAM数据库做进一步阐述。 1. 打开注册表 (1) 注销tuser用户,以用户administrator的身份重新登录windows操作系统。 (2) 在桌面上单击“开始”-“运行”命令,在弹出的对话框中输入regedit命令,然后单击“确定按钮”,打开注册表。 给出完全控制权限: 2、重新打开一次regedit,然后在HKLM\SAM\SAM\domains\account\下找到用户administrator和tuser,所示 注册表编辑器窗口 SAM数据库位于注册表HKLM\SAM\SAM下,受到ACL保护,它在磁盘上保存在”%systemroot%system32\config\”目录下的sam文件中。在\Domains\中的为域(或本机)中的SAM内容,其下有两个分支“Account”和”Builtin”,其中\Domains\Account是用户帐号内容: l \Domains\Account\User下是各帐号的信息,其下的子键机是各个帐号的SID相对标识符。比如000001F4是管理员RID l \Domains\Account\Names\下是用户帐号名,每个帐号名只有一个默认的子项,项中类型不是一般的注册表数据类型,而是指向标志这个帐号的SID相对标识符,比如其下的administrator,类型为0x1f4,于是\Dinaubs\Account\Users中的000001F4就对应帐户名Administrator的内容,再例如本实验中的tuser,类型为0x3f2,于是\Domains\Account\User中的000003F2就对应着帐户名administrator的内容,次类推。 值得注意的地方是:默认情况下管理员无法直接访问SAM数据库,要查看它使用RegEdt32修改SAM访问权限,或者使用psu,wsu启动system权限的regedit。因此本实验中的SAM也必须赋予完全控制权限。具体操作过程是:在注册表编辑器窗口中右键单击SAM文件夹下的SAM子文件夹,在弹出的跨界菜单中选择“权限”命令,在弹出的”SAM权限”对话框中,选择Administrator用户,在它的权限列表中,选中“完全控制”的“允许”复选框。 为SAM赋予完全控制权限 2.复制F项 上一小节中提到:\Domains\Account\User下存放着各种帐号的信息,其中每个帐号下面有两个子项,F项和V项。 项目V中保存的是帐户的基本资料,用户名,用户全名(full name),所属组,描述,密码hash,注释,是否可以更改密码,帐户启用,密码设置时间等。 项目F中保存的是一些登录记录,比如上次登录时间,错误登录次数等,还有一个重要的地方就是这个帐号的SID相对标识符。 因此,要创建一个具有管理员权限的隐藏账户,就必须复制Administrator用户的F项内容到某一帐户。具体做法是:选中User文件夹下000001F4子文件夹(上一小节已经说明,这个子文件夹对应于Names文件夹下的tuser子文件夹)的F项中。 复制F项中的内容 再次查看用户tuser的SID 3.查看修改后用户tuser的SID 注销Administrator用户,以用户tuser的身份重新登录windows操作系统。重复2中的操作,查看用户tuser的SID,所示。用户tuser的SID发生了变化,它的RID由1010变成了500,具有了管理员权限,至此用户tuser与管理员用户Administrator的SID变得完全一样了。 导出注册表的tuser子 4. 将tuser的注册表导出,在图形界面下删除tuser,然后倒入注册表 再次注销tuser用户,以用户administrator的身份重新登录windows操作系统。在桌面上单击“开始” – “运行”命令,在弹出的对话框中输入regedit命令,然后单击“确定”按钮,打开注册表。在HKLM/SAM/SAM/domains/account/下找到用户tuser用户,分别将它在Names下的子文件夹tuser和所对应的在user下的子文件夹000003F2导出,暂存到“我的文档”中,命名为1.reg和2.reg,具体操作(以tuser字文件夹为例)。 导出注册表中的tuser子文件夹 回到“桌面”,右键单击“我的电脑”,在弹出的快捷菜单中选择“管理”命令,在“计算机管理”窗口中单击“本地用户和组”目录下的“用户”字文件夹,在右边窗口的用户列表中右击tuser用户,在弹出的快捷菜单中选择“删除”命令。 删除tuser用户 再次打开注册表后,会发现\Domains\Account\Name\下的子文件夹Tuser和所对应的在\Domains\Account\User下的子文件夹000003F2不可访问。 打开“我的文档”,将导出的注册表文件1.reg和2.reg双击导入注册表。再次打开注册表后,会发现\Domains\Account\Names下的子文件夹tuser和所对应的在\Domainsl\Account\User下的子文件夹000003F2可以访问。 在注册表中重新导入tuser用户的相应子文件夹 再次回到“桌面”,右键单击“我的电脑” – “管理” – “本地用户和组” – “用户”,却找不到用户tuser,至此一个隐藏的具有管理员权限的帐户就已经建立了。 具有管理员权限的帐户就已经建立了 至此,可以看出,本实验之所以可以克隆一个具有管理员权限的用户,是因为SID的相对标识符RID在注册表中的一个帐号中出现了两遍,一个是在子键000001F4中,另一个地方就是键中F项的内容里面,从48到51的四个字节:F4010000,这实际上是一个long类型变量,也就是000001F4。当一个标识出现在两个地方的时候就将发生同步问题。显然,微软犯了这个毛病,两个变量本应该统一标识一个用户帐号,但是微软把两个变量分别发挥各自的作用,却没有同步统一起来,windows登录时,将从SAM中获得相对标识符,而这个相对标识符的位置是F值中的F4010000,但是,帐户信息查询却是使用SAM中Names子键的内容。 需要指出的是,SAM HACK是非常有危险性的。不能正确的修改会将系统的安全数据管理器破坏,造成系统启动问题。 |