您好,登錄后才能下訂單哦!
這篇文章跟大家分析一下“LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么”。內(nèi)容詳細(xì)易懂,對“LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么”感興趣的朋友可以跟著小編的思路慢慢深入來閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭?。下面跟著小編一起深入學(xué)習(xí)“LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么”的知識吧。
LDAP輕型目錄訪問協(xié)議是一個開放的,中立的,工業(yè)標(biāo)準(zhǔn)的應(yīng)用協(xié)議,通過IP協(xié)議提供訪問控制和維護(hù)分布式信息的目錄信息。有優(yōu)異的讀性能,但寫性能差。
LDAP作為開放的Internet標(biāo)準(zhǔn),支持跨平臺,在業(yè)界中得到廣泛認(rèn)可和使用,只需要通過簡單的配置就可以實(shí)現(xiàn)與服務(wù)器的認(rèn)證交互,可以很便捷的實(shí)現(xiàn)LDAP統(tǒng)一認(rèn)證服務(wù),如我們?nèi)粘J褂玫膕so。
LDAP bind綁定可以理解為一個登陸認(rèn)證的過程,通常,在根據(jù)LDAP進(jìn)行身份驗(yàn)證時,判斷是否登陸成功會采取以下三種方法之一:
使用LDAP用戶的用戶名和密碼綁定到LDAP服務(wù)器;
最常見的簡單代碼實(shí)現(xiàn)方式,第三方應(yīng)用也常用;
在LDAP中檢索用戶的條目,然后將用戶輸入的密碼和檢索到的LDAP記錄中的密碼屬性相比較;
LDAP服務(wù)器對于password屬性可讀的情況,較少見;
“兩次綁定”驗(yàn)證方法
支持匿名綁定的LDAP服務(wù)器下,進(jìn)行初次匿名,第二次提交身份信息進(jìn)行綁定,也比較常見。
或者稱為Anonymous bind,不同于匿名訪問,匿名綁定很多情況下不被認(rèn)為構(gòu)成漏洞。匿名綁定指用戶無需身份驗(yàn)證,即可直接提交空值,以“NULL BIND”的方式連接到該服務(wù)器完成綁定,但不能執(zhí)行訪問/查詢。如果存在匿名訪問漏洞,則還可以執(zhí)行查詢等操作。
如圖為Windows Server 2016的AD,可以對rootDSE匿名綁定,但不能匿名查詢支持的DN
圖1.匿名綁定成功
圖2.匿名訪問/查詢不成功
圖3.通過驗(yàn)證可以查詢/訪問
在rfc【反和諧】4513的5.1.2和6.3.1小節(jié),有關(guān)于該問題的描述
“https://datatracker.ietf.org/doc/rfc【反和諧】4513/?include_text=1”
重要部分翻譯如下
5.1.2
LDAP客戶機(jī)可以使用簡單綁定方法,通過未經(jīng)驗(yàn)證的身份驗(yàn)證機(jī)制來建立匿名授權(quán)狀態(tài),方法是發(fā)送帶有名稱值(LDAP字符串形式為非零長度的RFC【反和諧】44514的可分辨名稱)的綁定請求,并指定包含零長度密碼值的簡單身份驗(yàn)證選項(xiàng)
...
打算執(zhí)行身份驗(yàn)證的用戶可能會無意中提供空密碼,從而導(dǎo)致執(zhí)行不佳的客戶端請求未經(jīng)身份驗(yàn)證的訪問??蛻舳藨?yīng)該禁止向名稱/密碼驗(yàn)證用戶界面輸入空密碼。此外,默認(rèn)情況下服務(wù)器應(yīng)失敗未經(jīng)身份驗(yàn)證的綁定請求。
...
6.3.1
...
使用簡單Bind操作的結(jié)果來做出授權(quán)決策的客戶端應(yīng)主動檢測未經(jīng)身份驗(yàn)證的Bind請求(通過驗(yàn)證提供的密碼是否為空)并做出適當(dāng)?shù)姆磻?yīng)。
...
微軟AD(Windows ActiveDirectories)在默認(rèn)情況下,不支持針對活動目錄Active Directory的任何LDAP匿名操作,但支持對rootDSE的匿名搜索和綁定,且無法禁用。
Windows server 2003之前的版本需要手動調(diào)整,以禁用對活動目錄Active Directory的LDAP匿名操作,包括綁定、搜索和查詢。
微軟官方說明:“https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled”
Active Directory:存儲了有關(guān)對象的信息,能讓管理員和用戶能夠輕松地查找和使用這些信息。
rootDSE:是目錄信務(wù)器目錄信息樹的根,目的是提供關(guān)于directory Server的本身的數(shù)據(jù)。例如,如果一個客戶端知道目錄服務(wù)器正在監(jiān)聽的主機(jī)名和端口,則它應(yīng)該通過詢問rootDSE來了解directory server本身的信息和數(shù)據(jù)。
通常包含下面的一些信息
廠商/供應(yīng)商=Vendor
服務(wù)器支持的命名上下文=naming contexts
服務(wù)器支持的請求控制=request control
支持的SASL機(jī)制
支持的功能
Schema位置等等信息
OpenLDAP在simple配置下,現(xiàn)行版本默認(rèn)情況下支持匿名綁定,可以手動調(diào)整禁用。部分早期版本還支持匿名訪問?!?span >https://openldap.org/doc/admin24/security.html”
(1)某IT系統(tǒng),由管理員自己分配有權(quán)限的賬戶,維持一個列表,依據(jù)LDAP進(jìn)行密碼校驗(yàn);
(2)登陸時,驗(yàn)證用戶名是否在服務(wù)器賬戶列表內(nèi),提交到LDAP驗(yàn)證,判斷登陸是否成功;
(3)離職用戶(即LDAP中不存在,但是在系統(tǒng)自身用戶列表內(nèi))可以使用任意密碼登陸
分析代碼發(fā)現(xiàn),系統(tǒng)邏輯如下:
校驗(yàn)輸入用戶是否是已分配的合法用戶;
對于合法用戶,在LDAP服務(wù)器中查詢用戶DN信息;
提交DN與passwd密碼,通過與LDAP綁定是否成功,判定登錄狀態(tài)。
漏洞成因如下,在第2步時,因?yàn)殡x職員工信息在LDAP中已經(jīng)刪除,返回DN為空。而上層域控為windows server DC,允許對rootDSE的NULL綁定,因此提交了空DN與任意密碼。php代碼認(rèn)為ldap_bind執(zhí)行結(jié)果為真,判定登陸成功。
等價于如圖所示的情況,Base不選擇的情況下默認(rèn)為rootDSE。微軟AD的rootDSE允許匿名綁定。
有問題的代碼塊如下,ldap_bind的結(jié)果判定為真
修改后,增加了判斷l(xiāng)dap_user_dn是否為空的判定,若LDAP中不存在用戶信息,則直接返回錯誤不進(jìn)行提交。
Nessus可以不穩(wěn)定的報(bào)出這個漏洞,描述如下,定義為中危的信息泄露
描述中明確,“此插件不能證明存在LDAP匿名訪問漏洞,且LDAP v3要求支持匿名綁定”
“https://www.tenable.com/plugins/nessus/10723”
輸入host,選擇匿名連接
支持的情況
不支持的情況
使用Softerra LDAP Browser 工具驗(yàn)證過程如下
1.選擇服務(wù)器,并選擇Base DN為RootDSE;
2.選擇“Anonymous user”匿名用戶
3.選擇完成,發(fā)現(xiàn)可以匿名綁定,并加載根目錄信息
如果不支持NULL BIND,則無法加載根目錄信息
Python代碼,ldapconn.simple_bind_s傳空參數(shù),則會判定綁定成功
import ldap
ldapconn = ldap.initialize('ldap://X.X.X.X:389')
ldapconn.simple_bind_s('', '')
print("helllo")
官方python_LDAP庫文檔的說明如下,在who和cred參數(shù),可以接收空值
“https://pypi.org/project/python-ldap/”
根據(jù)官方文檔,需要在slapd.conf中指定“ disallow bind_anon ”來禁用匿名綁定機(jī)制。
“https://openldap.org/doc/admin24/security.html”
1.vi /etc/openldap/slapd.d/cn\=config.ldif
添加:
olcDisallows: bind_anon
olcRequires: authc
vi /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{-1\}frontend.ldif
添加:
olcRequires: authc
2.重啟slapd服務(wù)
systemctl restart slapd
驗(yàn)證,不允許匿名綁定
Windows-OpenLDAP直接修改此文件即可
Windows Server 2003之后的版本,默認(rèn)不允許對Active Directory的匿名綁定
但因功能設(shè)計(jì),針對rootDSE匿名綁定無法禁用
可以通過以下方式調(diào)整對Active Directory匿名訪問
“https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled”
服務(wù)器運(yùn)行AdsiEdit.msc,連接到配置
2.選中LDAP條目,選擇【CN=Configuration,CN={GUID}】雙擊【CN=Services】, 雙擊【CN=Windows NT】,在【CN=Directory Service)】右鍵選擇屬性
2.將DsHeuristics 屬性值設(shè)置為0(0000002表示允許)
3.使用任意LDAP工具嘗試連接并Fetch DNs,可以看到對Active Directory的匿名訪問失敗
使用LDAP的服務(wù)器,后端驗(yàn)證邏輯避免此問題比較簡單,對提交到LDAP的用戶輸入值,進(jìn)行空值校驗(yàn)即可。注意在前后端均做控制,并檢查提交參數(shù)的邏輯。
此外,使用LDAP認(rèn)證登陸的應(yīng)用系統(tǒng),也需要注意避免LDAP注入類的問題。
如圖示例,為vmware harbor開源平臺的LDAP驗(yàn)證邏輯
關(guān)于LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識,請大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。