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

這篇文章跟大家分析一下“LDAP NULL bind導(dǎo)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么”。內(nèi)容詳細(xì)易懂,對(duì)“LDAP NULL bind導(dǎo)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么”感興趣的朋友可以跟著小編的思路慢慢深入來(lái)閱讀一下,希望閱讀后能夠?qū)Υ蠹矣兴鶐椭?。下面跟著小編一起深入學(xué)習(xí)“LDAP NULL bind導(dǎo)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么”的知識(shí)吧。

目前創(chuàng)新互聯(lián)已為超過(guò)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、城區(qū)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

LDAP NULL bind匿名綁定導(dǎo)致登錄繞過(guò)漏洞分析和修復(fù)方案

一、背景

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

LDAP輕型目錄訪問(wèn)協(xié)議是一個(gè)開放的,中立的,工業(yè)標(biāo)準(zhǔn)的應(yīng)用協(xié)議,通過(guò)IP協(xié)議提供訪問(wèn)控制和維護(hù)分布式信息的目錄信息。有優(yōu)異的讀性能,但寫性能差。

LDAP作為開放的Internet標(biāo)準(zhǔn),支持跨平臺(tái),在業(yè)界中得到廣泛認(rèn)可和使用,只需要通過(guò)簡(jiǎ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)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么

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

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

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

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

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

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

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

1.2 NULL BIND

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

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

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

圖1.匿名綁定成功

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

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

圖3.通過(guò)驗(yàn)證可以查詢/訪問(wèn)

在rfc【反和諧】4513的5.1.2和6.3.1小節(jié),有關(guān)于該問(wèn)題的描述

“https://datatracker.ietf.org/doc/rfc【反和諧】4513/?include_text=1”

重要部分翻譯如下

5.1.2

LDAP客戶機(jī)可以使用簡(jiǎn)單綁定方法,通過(guò)未經(jīng)驗(yàn)證的身份驗(yàn)證機(jī)制來(lái)建立匿名授權(quán)狀態(tài),方法是發(fā)送帶有名稱值(LDAP字符串形式為非零長(zhǎng)度的RFC【反和諧】44514的可分辨名稱)的綁定請(qǐng)求,并指定包含零長(zhǎng)度密碼值的簡(jiǎn)單身份驗(yàn)證選項(xiàng)

...

打算執(zhí)行身份驗(yàn)證的用戶可能會(huì)無(wú)意中提供空密碼,從而導(dǎo)致執(zhí)行不佳的客戶端請(qǐng)求未經(jīng)身份驗(yàn)證的訪問(wèn)??蛻舳藨?yīng)該禁止向名稱/密碼驗(yàn)證用戶界面輸入空密碼。此外,默認(rèn)情況下服務(wù)器應(yīng)失敗未經(jīng)身份驗(yàn)證的綁定請(qǐng)求。

...

6.3.1

...

使用簡(jiǎn)單Bind操作的結(jié)果來(lái)做出授權(quán)決策的客戶端應(yīng)主動(dòng)檢測(cè)未經(jīng)身份驗(yàn)證的Bind請(qǐng)求(通過(guò)驗(yàn)證提供的密碼是否為空)并做出適當(dāng)?shù)姆磻?yīng)。

...

1.3 服務(wù)器的NULL BIND

微軟AD(Windows ActiveDirectories)在默認(rèn)情況下,不支持針對(duì)活動(dòng)目錄Active Directory的任何LDAP匿名操作,但支持對(duì)rootDSE的匿名搜索和綁定,且無(wú)法禁用。

Windows server 2003之前的版本需要手動(dòng)調(diào)整,以禁用對(duì)活動(dòng)目錄Active Directory的LDAP匿名操作,包括綁定、搜索和查詢。

微軟官方說(shuō)明:“https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled”

Active Directory存儲(chǔ)了有關(guān)對(duì)象的信息,能讓管理員和用戶能夠輕松地查找和使用這些信息。

rootDSE是目錄信務(wù)器目錄信息樹的根,目的是提供關(guān)于directory Server的本身的數(shù)據(jù)。例如,如果一個(gè)客戶端知道目錄服務(wù)器正在監(jiān)聽的主機(jī)名和端口,則它應(yīng)該通過(guò)詢問(wèn)rootDSE來(lái)了解directory server本身的信息和數(shù)據(jù)。
通常包含下面的一些信息
廠商/供應(yīng)商=Vendor
服務(wù)器支持的命名上下文=naming contexts
服務(wù)器支持的請(qǐng)求控制=request control
支持的SASL機(jī)制
支持的功能
Schema位置等等信息

OpenLDAP在simple配置下,現(xiàn)行版本默認(rèn)情況下支持匿名綁定,可以手動(dòng)調(diào)整禁用。部分早期版本還支持匿名訪問(wèn)?!癶ttps://openldap.org/doc/admin24/security.html”

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

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

二、案例

2.1 漏洞描述

(1)某IT系統(tǒng),由管理員自己分配有權(quán)限的賬戶,維持一個(gè)列表,依據(jù)LDAP進(jìn)行密碼校驗(yàn);

(2)登陸時(shí),驗(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. 對(duì)于合法用戶,在LDAP服務(wù)器中查詢用戶DN信息;

  3. 提交DN與passwd密碼,通過(guò)與LDAP綁定是否成功,判定登錄狀態(tài)。

漏洞成因如下,在第2步時(shí),因?yàn)殡x職員工信息在LDAP中已經(jīng)刪除,返回DN為空。而上層域控為windows server DC,允許對(duì)rootDSE的NULL綁定,因此提交了空DN與任意密碼。php代碼認(rèn)為ldap_bind執(zhí)行結(jié)果為真,判定登陸成功。

等價(jià)于如圖所示的情況,Base不選擇的情況下默認(rèn)為rootDSE。微軟AD的rootDSE允許匿名綁定。

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

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

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

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

3.1NESSUS掃描

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

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

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

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

3.2手工測(cè)試

3.2.1 LdapAdmin

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

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

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

3.2.2 SofterraLDAP Browser

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

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

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

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

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

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

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

3.2.3 Python腳本

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

import ldap

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

ldapconn.simple_bind_s('', '')

print("helllo")

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

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

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

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

4.1OPENLDAP

根據(jù)官方文檔,需要在slapd.conf中指定“ disallow bind_anon ”來(lái)禁用匿名綁定機(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)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么

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

添加:

olcRequires: authc

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

2.重啟slapd服務(wù)

systemctl restart slapd

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

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

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

4.2Windows Server AD僅針對(duì)Active Directory

Windows Server 2003之后的版本,默認(rèn)不允許對(duì)Active Directory的匿名綁定

但因功能設(shè)計(jì),針對(duì)rootDSE匿名綁定無(wú)法禁用

可以通過(guò)以下方式調(diào)整對(duì)Active Directory匿名訪問(wèn)

“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)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么

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

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

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

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

3.使用任意LDAP工具嘗試連接并Fetch DNS,可以看到對(duì)Active Directory的匿名訪問(wèn)失敗

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

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

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

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

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

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

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

分享標(biāo)題:LDAPNULLbind導(dǎo)致登錄繞過(guò)漏洞分析和修復(fù)方案是什么
標(biāo)題網(wǎng)址:http://muchs.cn/article22/pdpjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站導(dǎo)航、面包屑導(dǎo)航、網(wǎng)站制作、網(wǎng)站排名商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站