对WindowsServer2008GPP的安全问题分析

核心提示:Windows Server 2008的组策略选项(GPP)是一种新型的插件,便于管理员管理,并介绍了安全问题。这里是安全问题:组策略首选项。

组策略选项(GPP)的Windows Server 2008是一个新推出的插件,方便管理员管理,介绍了安全问题。



组策略的偏好(GPP)简介

组策略首选项组策略的偏好,是Windows Server 2008添加了一组客户端扩展,超过20的新客户的拓展(CES),它可以完成很多战略集团的系统和应用程序的配置,如:驱动器映射,添加计划任务管理、本地用户和组等。例如,当你需要配置一个网络共享磁盘和打印机共享局部映射,Win2003域只能使用传统的用户登录脚本,和GPP的出现,将提供一个替代或简化的脚本的依赖性,也就是说,即使管理员不知道脚本,也可以很容易地实现一些配置只能之前使用的脚本,所以GPP将扮演一个重要的ROLE在安全标准化管理中的应用及对网络的保护。





GPP存在部署问题时

最常用的基本功能的GPP是mdash;mdash;本地帐户的远程创建,它允许域管理员添加本地帐户的域名主机远程管理方便,并仔细研究他们的运作机制。

上的漏洞,研究人员发现,只有域有限用户可以破解GPP创建帐户。以下GPP的部署方法的简单介绍,首先建立两个主机的实验环境,一个

Windows服务器2008作为DC,Windows XP

亲为域名主机,然后创建一个域和域限制用户阿拉拉,先打开组策略管理在DC:




选择编辑,将有组策略管理。



编辑器对话框,然后我们可以将本地用户添加到远程域中的XP主机,如下图选择计算机配置(或用户)

配置,这两个),单击本地用户和组,右击空白创建帐户。






在这里,本地用户testuser与密码的地方* p4ssword.add域计算机组策略创建

在对象中,并启用,以便在DC端创建新帐户,其效果是该帐户将被添加到所有域中。

在计算机中,XP主机是用于登录域,命令行使用命令gpupdate网;

User更新组策略,新创建的用户testuser是成功后自动添加到本地用户。这是最常用的远程添加本地用户的功能,GPP,这是通常由管理员。

如果一个用户添加相应的权限,它不再是在这里讨论,以下将示范如何破解本地域通过有限的用户帐户testuser阿拉拉。






如何将此帐户下载到本地计算机在XP中使用Wireshark的捕获






我们看到一个主机下载了一个XML文件。

SYSVOL 域名政策{ 31b2f340-016d-11d2-945f-00c04fb984f9 } 马

中国 groups.xml群体偏好,在域环境中,对SYSVOL共享目录是可读的任何域用户,

我们可以限制用户阿拉拉域,和groups.xml成功开幕后,我们看到如下信息:










其中有账户testusername我们创造,创造的时间,和一个字符串加密字符串。其次是如何破解的字符串,并通过看MSDN产品行为附录,微软有一个简单的加密方法的描述:






这段话表明,账号密码是通过AES256加密存储,并明白无误地提供32byte密钥,加密算法和解密密钥,下一步就是要在这里工作,我使用第三方库pycrypto Python(在https: / / / Py软件

加密下载)。这个库提供了大多数加密和解密算法的Python函数实现。通过调用这个库,我们可以通过几个简单的Python代码获得密码,代码如下所示。



import sys
从加密密码进口AES
从进口b64decode Base64

4E 9906 E8 FC B6 6c C9足总F4 931062中Fe E8
F4 96 E8 06 CC 05799020 F4 09 A4 33 B6 6c 1b

cpassword =humlwolugh3wcipxzpecmxgkwr3ddo / wsqqlinwfcv4
cpassword + = = *((4 -莱恩(cpassword)% 4)% 4)
密码= b64decode(cpassword)
O = aes.new(关键,AES。mode_cbc)解密(密码)。
打印(O {:-曼特尔(O { 1 })}。解码('utf16 '))



结果如下:






密钥生成机制的简单验证

为了阐明GPP创建帐户,加密机制下,我们的方法取得突破的最关键的AES密钥的简单分析,并给出了在MSDN的描述同时生成密钥的算法。



CryptAcquireContext(hcryptprov,零,零,prov_rsa_aes,crypt_verifycontext);
cryptcreatehash(hcryptprov,calg_sha1,0, 0,hhash);
crypthashdata(hhash,((字节*)$szKey,strkey.getlength(),0);
CryptDeriveKey(hcryptprov,calg_aes_256,hhash,crypt_no_salt | crypt_exportable,HKEY);

CryptDeriveKey的算法()函数也已在微软的详细解释。已经没有了。该算法被转换为Python代码,如下所示:





从hashlib进口SHA1
DEF prehash(关键,字节):
返回SHA1(‘’加入({ CHR(ORD(我)^字节)为我。))
DEF cryptderivekey(关键):
返回(prehash(关键,0x36)+ prehash(关键,0x5c)){ 32 }:
打印cryptderivekey(‘’加入(CHR)我在{ 0x71。
)。编码(‘hexrsquo;)

为了验证算法的正确性,我们需要找出生成密钥的关键。该方法是使用ApiMonitor工具勾掉系统进程winlon.exe。

种子在crypthashdata发现()函数的参数

{ 0times;71,0times;60,0times;46,0times;32,0x0f,0times;64,0times;10 }

种子填充到代码中,生成的密钥为

4e9906e8fcb66cc9faf49310620ffee8f496e806cc057990209b09a433b66c1b

通过比较这到底是32byte AES密钥由MSDN提供。

通过seckungfu } {