溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

發(fā)布時間:2022-01-18 15:59:04 來源:億速云 閱讀:179 作者:柒染 欄目:網(wǎng)絡(luò)管理

這篇文章跟大家分析一下“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 NULL bind匿名綁定導(dǎo)致登錄繞過漏洞分析和修復(fù)方案

一、背景

1.1LDAP和認(rèn)證過程

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 NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

LDAP bind綁定可以理解為一個登陸認(rèn)證的過程,通常,在根據(jù)LDAP進(jìn)行身份驗(yàn)證時,判斷是否登陸成功會采取以下三種方法之一:

  1. 使用LDAP用戶的用戶名和密碼綁定到LDAP服務(wù)器;

最常見的簡單代碼實(shí)現(xiàn)方式,第三方應(yīng)用也常用;

  1. 在LDAP中檢索用戶的條目,然后將用戶輸入的密碼和檢索到的LDAP記錄中的密碼屬性相比較;

LDAP服務(wù)器對于password屬性可讀的情況,較少見;

  1. “兩次綁定”驗(yàn)證方法

支持匿名綁定的LDAP服務(wù)器下,進(jìn)行初次匿名,第二次提交身份信息進(jìn)行綁定,也比較常見。

1.2 NULL BIND

或者稱為Anonymous bind,不同于匿名訪問,匿名綁定很多情況下不被認(rèn)為構(gòu)成漏洞。匿名綁定指用戶無需身份驗(yàn)證,即可直接提交空值,以“NULL BIND”的方式連接到該服務(wù)器完成綁定,但不能執(zhí)行訪問/查詢。如果存在匿名訪問漏洞,則還可以執(zhí)行查詢等操作。

如圖為Windows Server 2016的AD,可以對rootDSE匿名綁定,但不能匿名查詢支持的DN

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

圖1.匿名綁定成功

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

圖2.匿名訪問/查詢不成功LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

圖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)。

...

1.3 服務(wù)器的NULL BIND

微軟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”

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

二、案例

2.1 漏洞描述

(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))可以使用任意密碼登陸

2.2 漏洞成因分析

分析代碼發(fā)現(xiàn),系統(tǒng)邏輯如下:

  1. 校驗(yàn)輸入用戶是否是已分配的合法用戶;

  2. 對于合法用戶,在LDAP服務(wù)器中查詢用戶DN信息;

  3. 提交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 NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

有問題的代碼塊如下,ldap_bind的結(jié)果判定為真LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

修改后,增加了判斷l(xiāng)dap_user_dn是否為空的判定,若LDAP中不存在用戶信息,則直接返回錯誤不進(jìn)行提交。LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

三、復(fù)現(xiàn)方法

3.1 NESSUS掃描

Nessus可以不穩(wěn)定的報(bào)出這個漏洞,描述如下,定義為中危的信息泄露

描述中明確,“此插件不能證明存在LDAP匿名訪問漏洞,且LDAP v3要求支持匿名綁定”

https://www.tenable.com/plugins/nessus/10723

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

3.2手工測試

3.2.1 LdapAdmin

輸入host,選擇匿名連接LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

支持的情況LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

不支持的情況LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

3.2.2 SofterraLDAP Browser

使用Softerra LDAP Browser 工具驗(yàn)證過程如下

1.選擇服務(wù)器,并選擇Base DN為RootDSE;

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

2.選擇“Anonymous user”匿名用戶LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

3.選擇完成,發(fā)現(xiàn)可以匿名綁定,并加載根目錄信息LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

如果不支持NULL BIND,則無法加載根目錄信息

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

3.2.3 Python腳本

Python代碼,ldapconn.simple_bind_s傳空參數(shù),則會判定綁定成功

import ldap

ldapconn = ldap.initialize('ldap://X.X.X.X:389')

ldapconn.simple_bind_s('', '')

print("helllo")

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

官方python_LDAP庫文檔的說明如下,在who和cred參數(shù),可以接收空值

https://pypi.org/project/python-ldap/LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

、LDAP服務(wù)端調(diào)整

4.1 OPENLDAP

根據(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

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

  1. vi  /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{-1\}frontend.ldif

添加:

olcRequires: authc

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

2.重啟slapd服務(wù)

systemctl restart slapd

  1. 驗(yàn)證,不允許匿名綁定

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

Windows-OpenLDAP直接修改此文件即可

4.2 Windows Server AD僅針對Active Directory

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

  1. 服務(wù)器運(yùn)行AdsiEdit.msc,連接到配置

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

2.選中LDAP條目,選擇【CN=Configuration,CN={GUID}】雙擊【CN=Services】, 雙擊【CN=Windows NT】,在【CN=Directory Service)】右鍵選擇屬性

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

2.將DsHeuristics 屬性值設(shè)置為0(0000002表示允許)

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

3.使用任意LDAP工具嘗試連接并Fetch DNs,可以看到對Active Directory的匿名訪問失敗

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

、安全編碼實(shí)現(xiàn)

使用LDAP的服務(wù)器,后端驗(yàn)證邏輯避免此問題比較簡單,對提交到LDAP的用戶輸入值,進(jìn)行空值校驗(yàn)即可。注意在前后端均做控制,并檢查提交參數(shù)的邏輯。

此外,使用LDAP認(rèn)證登陸的應(yīng)用系統(tǒng),也需要注意避免LDAP注入類的問題。

如圖示例,為vmware harbor開源平臺的LDAP驗(yàn)證邏輯

LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么

關(guān)于LDAP NULL bind導(dǎo)致登錄繞過漏洞分析和修復(fù)方案是什么就分享到這里啦,希望上述內(nèi)容能夠讓大家有所提升。如果想要學(xué)習(xí)更多知識,請大家多多留意小編的更新。謝謝大家關(guān)注一下億速云網(wǎng)站!

向AI問一下細(xì)節(jié)

免責(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)容。

AI