原创文章如转载,请注明:转载自冠威博客 [ http://www.guanwei.org/ ]
本文链接地址:http://www.guanwei.org/post/platformsecurity/08/shadow-account.html
特别注意:
★本文仅针对Windows 2000/XP/2003,Windows 9x不在本文讨论范畴。
★本文涉及注册表重要位置的修改,在实际操作前应好备份。
评评管理员账户的安全性
Windows 2000/XP/2003中都能找到一个系统内置的默认管理员账户——Administrator,该账户具有Windows的最高管理权限,用来完成软件安装、系统设置等任务。如果系统由于存在漏洞而被黑客入侵,黑客为了下次还能方便地进来,通常会留一个管理员账户的影子账户(关于影子账户的概念将在下文中介绍)。
1.为什么黑客选择Administrator账户作为突破口
如果黑客希望远程登录系统的话,就必须拥有具有远程登录权限的账户,而管理员账户自然是具备了远程登录的权限。另外,由于Administrator是系统中默认建立的管理员账户,而且一般无法删除,所以黑客都会选择Administrator作为用户名猜解登录密码。虽然使用“组策略”可以修改Administrator的用户名,可是一旦黑客给Administrator起了个“小名”(影子账户),再怎么改用户名也没用了。
2.Windows XP的安全策略
Windows XP在安装过程中会提示建立一个管理员账户,但实际上默认的Administrator账户仍是存在的,并且密码为空。笔者的Windows XP SP2没有修改此空密码,但黑客却无从下手,原因何在?原来在安全策略中有一条禁止了空密码账户的远程登录,黑客即使知道密码为空仍无法登录。
小知识
什么是Windows内置账户
内置账户是微软在开发Windows时预先为用户设置的能够登录系统的账户。使用最多的有Administator和Guest,它们两个默认都无法从系统中删除,即使从未使用这两个账户登录系统!如果在安装系统后使用其他账户登录系统,这样在“Documents and Settings”目录中就不会产生它们两个所对应的配置文件目录,但这两个账户仍是存在的。用此账户登录一次后,系统就会生成相应的目录。
谈谈管理员账户的安全防范
既然已经列举了这么多不安全因素,那么必须给出解决之道。
1.为Administrator账户设置强壮的密码
强密码通常在8位以上,以大小写字母、数字、特殊符号混合排列而成。不应使用名字缩写及自己、家人的生日作为密码元素。不宜将常用单词用作为密码元素,即使要使用,也要使用特殊符号或数字使其略为变形,如将“apple”改为“@pp1e”等。
2.更改Administrator为其他用户名
Administrator是系统内建账户,默认情况下无法更改,可是强大的组策略又为我们提供了一次安全机会。运行“gpedit.msc”打开“组策略编辑器”,点击展开左侧窗格的“‘本地计算机’策略→Windows设置→安全设置→本地策略→安全选项”,然后在右侧窗格的一大堆列表中找到“重命名系统管理员账户”,双击它后就能设置新的账户名了(见图1)。
看看账户是如何变成影子的
刚才曾经提到黑客在入侵系统后常常会建立一个影子账户。之所以称其为“影子账户”,是因为这种账户用系统中提供的工具或方法都无法看到,并且无论是“用户账户”、“计算机管理”,还是命令行中,都无法删除此账户。无法删除?也就是说即使知道已经有人建立了后门,都无法将他赶出去。如果你已经“中招”了,先别忙着重装系统,且看下文分解。
常用的账户建立/查看方法
①用户账户:打开“控制面板→用户账户”,在打开的“用户账户”管理窗口中点击“创建一个新账户”,然后根据提示即可完成一个新用户的建立。在这里还可以查看曾经登录过系统的账户,但没有在“Documents and Settings”目录中生成用户数据的账户是不会显示的(如没有登录过系统的Administrator账户),在这里检查系统中存在的账户是不准确的,对于稍微有点经验的入侵者而言,把残留在这里的痕迹抹去并非难事。
②控制台:系统控制台是Windows 2000及其后续版本中一个非常重要的系统组件,集中安置了系统中的多个系统配置维护工具。依次打开“控制面板→计算机管理”打开“计算机管理”控制台,在窗口左侧定位到“本地用户和组→用户”,在窗口右侧就罗列了当前系统已经建立的账户,一些在“用户账户”中没有显示的账户都可以在这里查到。在窗口右侧空白处点右键选择“新用户”,然后输入账户信息就可以建立一个新用户了。
③命令行:以上两种都是图形界面中的操作方法,现在我们回归到命令行模式。要查看当前系统中的账户,运行CMD打开“命令提示符”窗口,输入“net user”命令后系统就会返回系统中存在的账户(见图2)。键入“net user cfan 123 /add”命令可以新建一个用户名为“cfan”,密码为“123”的受限账户(即Users组成员)。如果要将cfan账户提升为管理员,就需要将此账户加入Administrators用户组,运行命令“net localgroup Administrators cfan /add”即可,如果要删除则用“net user cfan /del”,要查看某个账户的详细情况则可以执行“net user 用户名”。
④账户配置文件目录:在系统盘符下的“Documents and Settings”目录中,凡是登录过系统的账户都会在此生成一个与账户名同名的目录。
⑤查看“用户配置文件”:打开“我的电脑”属性,切换到“高级”,单击“用户配置文件”对应的“设置”按钮,在弹出的“用户配置文件”窗口中显示了登录过系统的账户(见图3)。在此具备管理员权限的用户可以删除账户及其配置文件(包括有密码保护的账户)。
⑥巧用权限设置:在NTFS格式的分区中,如果已经取消了“文件夹选项→查看→使用简单文件共存”的勾选,那么右击一个文件或者目录选择“属性”后就能看到“安全”选项卡,在这个选项卡中简单罗列了对此文件/目录具备权限的用户或组(见图4),而依次单击“添加→高级→立即查找”后,系统就会显示整个系统中的“用户、组或内置安全性原则”,可以非常方便地找出系统中的可疑账户。
1.歪门邪道:从注册表剖析账户信息
注册表是Windows核心部分,相当于系统设置的总数据库,几乎所有与系统设置相关的选项都能在其中找到对应的键值。本刊2005年第2期的《把根留住——备份Windows密码》中提供了移植Windows 2000/XP/2003账户密码的方法,其实[HKEY_LOCAL_MACHINE/SAM/SAM]还大有潜力可挖。
第一步:由于涉及注册表的权限修改,所以必须使用具有管理员权限的账户登录系统。
第二步:打开“注册表编辑器”,找到[HKEY_LOCAL_MACHINE/
SAM/SAM],右击该项选择“权限(Windows 2000中要使用regedt32.exe修改权限)”,选中“组或用户名称”列表中的“Administrators”,勾选“完全控制”后点击“确定”(见图5)。
第三步:按F5刷新一下注册表就会发现可以打开该项的下级分支了,找到[HKEY_LOCAL_MACHINE/SAM/SAM
/Domains/Account/Users/Names],其下的子项就是系统中的账户名,这是最保险的查看方式。
2.恐怖的实验:账户移形换位
第一步:建立2个账户cfan1和cfan2,分别设置密码并登录一次系统,这样做是为了在“Documents and Settings”目录中生成各自的配置文件和在注册表产生各自的SID值(SID值是Windows中设计用来区分不同账户而采用的一个随机码,即使是在同一系统中先后用相同的账户名建立一个新账户,它们的SID值也是不一样的)。
第二步:用系统管理员账户登录系统,打开“注册表编辑器”,找到[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/
Account/Users/Names],将账户cfan1和cfan2的键名互换,接着注销系统并分别使用cfan1和cfan2登录系统,原密码已经失效了,不过将它们的密码互换后却可以正常登录。
第三步:用cfan1登录后发现当前使用的用户配置文件是cfan2的,除了用户名换成cfan1外,其他的数据(密码、用户设置等)都是cfan2的。而用cfan2登录则恰好相反,除了用户名外也都是cfan1的。
结论:[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/
Users/Names]下的各个子项相当于一把能够开启用户配置文件“保管箱”的“钥匙”,而[HKEY_LOCAL_MACHINE/SAM/SAM/
Domains/Account/Users]下的其他各子项(除了Names项)才是真正记录了用户数据的位置,而复制影子账户就相当于给同一个用户数据“保管箱”配了2把“钥匙”,用其中任意一把都能打开“保管箱”。
小提示
[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/Names]各子项的默认值是一个指针,并不包含用户的数据,其值与[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users]下的某个子项名相同,也就是说指向了这个保存了用户数据位置的子项,如[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/
Account/Users/Names/Administrator]的默认值为“0x1f4”(即十六进制的000001f4),则Administrator的用户数据在[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/000001f4](见图6)。
3.当回杀手:亲手建立影子账户
第一步:以管理员账户登录系统,打开“注册表编辑器”,选中[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/
Users/Names/Administrator]项并右击,选择“导出”,保存为ad.reg。
第二步:用“记事本”打开ad.reg,将其中的“[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/Names
/Administrator]”修改为“[HKEY_LOCAL_MACHINE/SAM/SAM/
Domains/Account/Users/Names/cfan]”,保存后双击导入注册表。
第三步:注销当前登录用户,以“cfan”为用户名,密码则使用Administrator的密码,登录系统。
如果你是黑客,那么现在不管对方将用户名“Administrator”改为“user123”还是“user321”,你都能用“cfan”作为用户名进行登录。更为可怕的是,通过上文中介绍的6种常规账户检测方法均无法找出这个影子账户!但庆幸的是,还是有办法找出这个“隐形杀手”的。
小提示
用影子账户登录后所进行的用户设置及修改,相当于原账户所进行的修改(比如用影子账户修改了登录密码,则用原账户登录时也需使用新密码),反之亦然。
4.神探出手:轻松找出影子账户
以彼之道还施彼身乃是上策,既然黑客能利用注册表建立影子账户,那么通过注册表我也能找出影子账户。
第一步:打开“注册表编辑器”,然后点击左侧分支找到[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/
Names/Administrator],查看并记录下该项的默认值。
第二步:依次检查[HKEY_LOCAL_MACHINE/SAM/SAM/
Domains/Account/Users/Names]下的所有子项,如果某个子项的默认值与刚才记录下的Administrator的默认值相同,那么这个就是影子账户了,当然不能给黑客留一把后门“钥匙”,毫不犹豫地删除之。
第三步:除Administrator外,黑客还可能复制出其他账户的用户数据“保管箱”的“钥匙”,所以保险起见还需检查[HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/
Names]下所有子项的默认值是否有相同的,如果有,那么就该小心了。