域安全之LDAP读取控制 Luis AD 活动目录设计公平 开放,任何用户都能读取其他用户信息 微软建议单独建一个域管理特权账号,委派控制另一个域,其实还有更方便的办法
0x01 存在的风险
不知道大家有没有使用过AD Explorer和dsquery这两个工具?
当Red Team(后面简称RT)成功突破外网服务器并进入到内网后,这时候的主要目标就从外网突破转变为了内网的横向扩展。
如果内网存在域,并且RT在已经渗透成功的服务器上获取到了域内的一个普通账号,这时候,RT就可以使用dsquery命令和AD Explorer这两个工具,获取到域内所有服务器列表、用户列表、组织架构等敏感信息。
图一 AD Explorer
图二 dsquery computer
图三 dsquery user
图一、图二、图三分别展现了利用域内普通账号,通过AD Explorer和dsquery获取到的域内计算机和用户等信息。
有时候域管理员可能觉得,泄露了这些信息有什么关系呢?有了这些信息,RT相当于得到了一张完整的域内地图,需要关注哪个管理员、那个业务,靠着这张地图就可以很容易的找到。这些敏感信息极大的提高了RT的渗透效率,可以称为渗透测试中的“寻宝图”。
0x02 如何防御
在域的默认配置下,所有域内的用户都拥有LDAP服务的读取权限!不得不说,这个默认配置在域安全中是一个巨大的坑。并且绝大部分的域管理员并不会注意到这个问题的存在。但是这种渗透方法,又是RT所钟爱的方法之一。
那么我们如何对这种域内信息获取的方式进行防御呢?
其实,大部分的用户在域内是不需要LDAP读取权限的。我们可以通过在AD上,禁用普通用户的read和list权限,达到安全配置的目的。
0x03 具体设置
下面就以Windows Server 2012 R2为例,详细介绍一下安全配置的步骤。
一、 Ctrl+R,输入dsa.msc并运行。
二、 点击View,选择Advanced Features。
三、 添加一个用户组,如DisabelLDAPGroup。(https://s1.51cto.com/images/blog/201905/27/6da51318aba7d655b623c538d99a1f78.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
四、 在域的用户OU点击右键,选择Properties。
注意这里不能从根OU拒绝,因为组策略需要对用户和计算机下发,全部拒绝则代表用户、计算机名均无法识别,导致组策略下发失败
选择人员OU
五、 选择Security,并点击Advanced。
六、 在弹出的窗口中,点击Add。
七、 在弹出的窗口中,点击Select a principal,并在弹出的窗口中输入DisableDLAPGroup,点击ok。
八、 将滚动条拉到底部,选择Clear all,然后再拉到最顶部,在Permissions区选择List contents和Read all properties,在Type处选择Deny。
九、 点击所有对话框的OK按钮。
十、 把所有不需要LDAP读取权限的用户,添加到DisableLDAPGroup组当中。
在进行完以上操作,我们再使用dsquery和AD Explorer来读取信息试试。
可以看到,LDAP的读取操作被成功阻止了!
0x04 对业务的影响
很多管理员会问,这样做是可以防止RT非法读取LDAP信息,但是会对业务产生影响吗?
经过测试,禁用LDAP权限对域内计算机正常登陆、LDAP认证是不会产生任何影响的。
对于无LDAP读取权限的用户,要进行域用户、计算机、组的选择操作时,会出现错误。解决办法是,使用有权限的用户进行操作。由于此场景对于普通用户来说出现的并不多,所以影响处于可接受的范围内。
如果有业务确实要使用到LDAP来读取域内信息,可以创建专用账户,不添加到DisableLDAPGroup当中,即可满足相关的业务需要。
0x05 总结
LDAP任意用户读取权限的问题往往被很多管理员所忽略,却被很多Red Team所青睐。禁用普通用户的LDAP权限,可以有效防止域内信息的泄露,提高AD的安全性。