網(wǎng)絡(luò)空間測(cè)繪技術(shù)之:協(xié)議識(shí)別(RDP篇)
時(shí)間:2023-05-06 17:15:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-06 17:15:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)
網(wǎng)絡(luò)空間測(cè)繪技術(shù)之:協(xié)議識(shí)別(RDP篇):今年網(wǎng)絡(luò)空間測(cè)繪技術(shù)得到了很大的發(fā)展,不論大廠小廠都進(jìn)到了這個(gè)領(lǐng)域,宣稱自己也有這方面的技術(shù)積累和儲(chǔ)備。于是身邊的領(lǐng)導(dǎo)朋友又開啟了“擔(dān)憂模式”:你們這是不是沒有技術(shù)壁壘?。吭趺词莻€(gè)公司都宣稱有這門技術(shù),連一些獨(dú)立的個(gè)人都如雨后春筍般出來(lái),開發(fā)了一套一套的類似平臺(tái),連界面都如出一轍,好像一點(diǎn)難度都沒有。
這事啊確實(shí)怪我們,我們沒有承擔(dān)起相應(yīng)的責(zé)任,沒有說(shuō)清楚關(guān)鍵點(diǎn)和難點(diǎn)在哪里,以及為什么要覆蓋這些關(guān)鍵點(diǎn),后續(xù)會(huì)用到什么核心的場(chǎng)景。所以不只是跟隨者不知道技術(shù)pk點(diǎn)在哪里,連商用客戶也無(wú)法區(qū)分出來(lái),導(dǎo)致全天下覺得網(wǎng)絡(luò)空間測(cè)繪技術(shù)就是端口掃描和元數(shù)據(jù)采集,再用一個(gè)搜索框一個(gè)結(jié)果展示頁(yè)面,就是合格的產(chǎn)品。后來(lái)的招標(biāo)參數(shù)一律被引導(dǎo)到端口數(shù)協(xié)議數(shù)ip數(shù)以及指紋規(guī)則數(shù),當(dāng)然這些還是很有價(jià)值的,但是很多情況真實(shí)的技術(shù)就被掩蓋在了這些單純的數(shù)據(jù)下面,導(dǎo)致真正到技術(shù)pk的時(shí)候,我們丟掉了主要的陣地。就好比選一臺(tái)車,看的不是強(qiáng)勁的發(fā)動(dòng)機(jī)(引擎),而是一個(gè)跑車般酷炫的外殼。
我們很長(zhǎng)一段時(shí)間聚焦在做一個(gè)發(fā)動(dòng)機(jī),早期沒人關(guān)注嘛,所以我用了一個(gè)月時(shí)間單槍匹馬寫了一個(gè)框架作為Demo上線,得到了大家(更多是的白帽黑客而非企業(yè)用戶)的反饋,但是接著的五年時(shí)間里我們不斷地打磨,因?yàn)槲覀儼l(fā)現(xiàn)要深扎下去的點(diǎn)越來(lái)越多,可以改進(jìn)的技術(shù)也越來(lái)越多,每一個(gè)點(diǎn)我們對(duì)比了所有大家覺得最好用的工具和產(chǎn)品,都發(fā)現(xiàn)好像都只是很粗淺的實(shí)現(xiàn)了一小部分,點(diǎn)到為止,大量的新的技術(shù)并沒有能夠很好的融入進(jìn)去。
就拿協(xié)議識(shí)別舉例,目標(biāo)IP開放了一個(gè)端口,如何識(shí)別它對(duì)應(yīng)的協(xié)議是什么?協(xié)議識(shí)別的目的是什么?應(yīng)該有什么樣的流程?如何評(píng)價(jià)好壞?很多產(chǎn)品用內(nèi)嵌了nmap來(lái)完成這個(gè)工作,殊不知nmap帶來(lái)的坑太多了,他是一個(gè)非常重量級(jí)的集大成者,涉及的知識(shí)點(diǎn)非常多,對(duì)應(yīng)的script和配置項(xiàng)組合是個(gè)非常大的數(shù)據(jù)量,你如果不知道這些細(xì)節(jié)(至今我不敢自稱nmap專家),那么很多內(nèi)容你就丟棄掉了,識(shí)別的效果其實(shí)非常差。
網(wǎng)絡(luò)空間測(cè)繪就是繪制“網(wǎng)絡(luò)攻防地圖”,說(shuō)白了也就是一個(gè)情報(bào)系統(tǒng),
情報(bào)系統(tǒng)最重要的目標(biāo)就是為決策提供詳細(xì)且準(zhǔn)確的依據(jù)。所以衡量協(xié)議識(shí)別好壞的方法主要有如下幾個(gè)方面:
一)能否針對(duì)一個(gè)IP開放的端口進(jìn)行完整的協(xié)議識(shí)別,盡可能不要有遺漏。因?yàn)楹芏嗲闆r下目標(biāo)系統(tǒng)可能只開放了很少的業(yè)務(wù)必須的最小化端口,一個(gè)準(zhǔn)確的協(xié)議識(shí)別能夠作為非常有效的目標(biāo)動(dòng)作的決策依據(jù),比如,那是一個(gè)工業(yè)互聯(lián)網(wǎng)的協(xié)議。所以,能夠識(shí)別的協(xié)議越多越好,“是否某種協(xié)議”是一種簡(jiǎn)單且有效的初步情報(bào)。80不一定是http協(xié)議,有可能是ssh協(xié)議,這種情況在fofa平臺(tái)能夠看到大量的案例,所以傳統(tǒng)簡(jiǎn)單通過(guò)端口號(hào)的方法極其不準(zhǔn)確。這里牽涉到一個(gè)很大的問(wèn)題:到底有多少種網(wǎng)絡(luò)協(xié)議?
二)能否針對(duì)一個(gè)協(xié)議提取更多的數(shù)據(jù)內(nèi)容,為上層的指紋規(guī)則提供高價(jià)值。用更技術(shù)化的語(yǔ)言就是:能否提供更多屬性字段(fields)。屬性字段有哪些?比如操作系統(tǒng),軟件信息,版本信息,元數(shù)據(jù)描述信息,硬件架構(gòu),中間件信息,網(wǎng)絡(luò)信息等一系列的深入內(nèi)容。拿http舉例,一個(gè)uri對(duì)應(yīng)一個(gè)head一個(gè)body,head可以分解成server,x-powered-by等屬性字段,可以提取各種中間件信息,body字段可以提取title等信息,如果是https還可以提取證書cert信息(內(nèi)含common name等高價(jià)值信息)。但是有一種情況是非常常見的,就是默認(rèn)的首頁(yè)uri返回一個(gè)404錯(cuò)誤信息或者價(jià)值信息特別少,但是當(dāng)你切換到一個(gè)預(yù)置包含大量?jī)r(jià)值信息的uri接口時(shí),比如axis的系統(tǒng)信息頁(yè),你就知道我在說(shuō)什么,全是寶庫(kù)。類似的,一個(gè)二進(jìn)制協(xié)議,你發(fā)一個(gè)/x01代表hello,通過(guò)返回的解析確實(shí)能夠準(zhǔn)確的判斷協(xié)議種類,但是沒有更多的信息,如果你改成/x02它可能就是對(duì)應(yīng)info,吐出來(lái)大量信息。
三)能否用最少量的數(shù)據(jù)發(fā)包,完成跨版本兼容性,將誤報(bào)率和漏報(bào)率都控制在一個(gè)很小的比例。通常一個(gè)協(xié)議都會(huì)有不同的版本,之間可能存在著不兼容,v1和v2的數(shù)據(jù)格式截然不同。這時(shí)候你發(fā)了一種版本的request包,那么其他版本的包就沒有響應(yīng),導(dǎo)致了大批量的漏報(bào)。另外你如果只是通過(guò)簡(jiǎn)單的關(guān)鍵字來(lái)識(shí)別,必然會(huì)存在大批量的誤報(bào)。如果漏報(bào)率誤報(bào)率高于10%,我覺得這個(gè)協(xié)議識(shí)別就沒有太大價(jià)值了,因?yàn)楹罄m(xù)還要提供給指紋庫(kù)來(lái)做上層的業(yè)務(wù)分析,極大地影響真實(shí)的使用場(chǎng)景。
情報(bào)越全面越詳細(xì)(廣度和深度),基于此給出的決策就越準(zhǔn)確;反之亦然,你的情報(bào)源都是片面的或者錯(cuò)誤百出的,你怎么可能給出正確的決策呢?網(wǎng)絡(luò)安全跟行軍作戰(zhàn)是類似的,咱們可以想象一下,在古代帝王準(zhǔn)備御駕親征,一個(gè)大臣說(shuō)能打,因?yàn)槊裥乃?,?duì)方奸淫擄掠十惡不赦,出兵必勝;另一個(gè)大臣說(shuō)不能打,因?yàn)榭辆桦s稅民不聊生,洪旱災(zāi)害導(dǎo)致哀鴻遍野,同時(shí)糧草不足天寒地凍,出兵必?cái)?。你是君王,試?wèn)你聽誰(shuí)的?多少君王被那些自以為是的拍腦袋的情報(bào)坑死。當(dāng)臣子的做不好情報(bào)收集,就不要瞎給決策建議。
說(shuō)了那么多的理論,我們來(lái)聊點(diǎn)實(shí)際的案例,一個(gè)特別典型的協(xié)議叫做RDP(remote desktop protocol)。之所以我會(huì)認(rèn)為比較典型基于如下幾個(gè)特征:一)使用量巨大,在網(wǎng)絡(luò)運(yùn)維過(guò)程中跟SSH同等重要,屬于Windows系統(tǒng)最小化端口也必然會(huì)開啟的范疇,作為基礎(chǔ)協(xié)議大家在做網(wǎng)絡(luò)管理的時(shí)候必須支持;二)協(xié)議相對(duì)比較復(fù)雜,涉及到多個(gè)協(xié)議的組合,tpkt,tls,ntlmssp等,這里面可深可淺,非常能夠區(qū)分出來(lái)不同網(wǎng)絡(luò)空間測(cè)繪平臺(tái)技術(shù)功底的深淺,如果只開了一個(gè)rdp協(xié)議,我們能獲取到哪些有價(jià)值的信息;三)大家對(duì)RDP協(xié)議的叫法不像http那么習(xí)以為常,比如nmap將其命名為ms-wbt-server,大家很容易將協(xié)議與產(chǎn)品混為一談,這就導(dǎo)致了大量的奇葩現(xiàn)象產(chǎn)生,能夠反映出大家的一些基礎(chǔ)認(rèn)知差異。
有必要申明一下,為了說(shuō)明情況,我們會(huì)分別從其他一些很不錯(cuò)的平臺(tái)拿出一些案例,可能會(huì)引發(fā)一些不適,我只想就技術(shù)討論技術(shù),如果引起了不必要的誤會(huì),還請(qǐng)諒解。我們先來(lái)看不同平臺(tái)對(duì)于rdp協(xié)議解析的不同,我們會(huì)從如下g兩個(gè)方面進(jìn)行對(duì)比:一)協(xié)議的解析深入度;二)準(zhǔn)確率(漏報(bào)和誤報(bào));
zoomeye協(xié)議名稱叫ms-wbt-server,在發(fā)送了一個(gè)tkpt包以后,僅僅獲取了返回的原始數(shù)據(jù)作為banner進(jìn)行了存儲(chǔ),并沒有對(duì)其進(jìn)行解析以及深入交互:
一些誤報(bào)也是比較明顯的,比如http協(xié)議也被標(biāo)記為了ms-wbt-server:
如果做過(guò)協(xié)議深入分析的朋友可能知道,rdp除了最早期的RDP標(biāo)志位以外,其他的版本默認(rèn)都會(huì)走tls,默認(rèn)情況下,
Windows自帶的遠(yuǎn)程桌面服務(wù)里面自動(dòng)生成的證書,名稱對(duì)應(yīng)的就是主機(jī)名,新的知識(shí)點(diǎn)有沒有g(shù)et?
quake平臺(tái)很詭異,rdp協(xié)議分為了rdp和ms-wbt-server,同時(shí)也存在一些初級(jí)的誤報(bào):
quake進(jìn)一步提取了tls信息,如上面所說(shuō),里面的issuer默認(rèn)會(huì)對(duì)應(yīng)系統(tǒng)的主機(jī)名,bingo。
shodan是行業(yè)第一個(gè)完成了證書提取和截圖的平臺(tái),也是創(chuàng)新性的完成了圖片文本識(shí)別平臺(tái)。恰恰是這種創(chuàng)新,讓后來(lái)的跟隨者簡(jiǎn)單copy了一下,帶到坑里去了。確實(shí)某些情況下能夠根據(jù)文本粗略的判斷操作系統(tǒng)信息,這種方式雖然有用,但是及其低效且錯(cuò)誤百出。
比如如果截圖失敗還能獲取操作系統(tǒng)信息嗎?可以看到提取的文本為空。
其實(shí)還有一個(gè)知識(shí)點(diǎn)大部分人沒有掌握,而很早在nmap中就進(jìn)行了實(shí)現(xiàn):就是在進(jìn)行
tls連接后會(huì)進(jìn)行ntlmssp的挑戰(zhàn)響應(yīng),能夠非常準(zhǔn)確的提取出來(lái)主機(jī)名和操作系統(tǒng)的版本。我們通過(guò)Goby的一個(gè)界面來(lái)感受一下效果:
在協(xié)議識(shí)別過(guò)程中,在協(xié)議解析方面不能偷懶,在協(xié)議流程學(xué)習(xí)方面也不能偷懶,實(shí)話說(shuō),這已經(jīng)比看二進(jìn)制的漏洞調(diào)試容易太多了,盡管如此大家還是沉不下心來(lái)。
我們可以整理一個(gè)對(duì)別表:
再整理一個(gè)rdp協(xié)議不同的類型影響的效果,不是每一個(gè)實(shí)現(xiàn)都能截圖,如果強(qiáng)制開啟了CredSSP,那么截圖就失效了;另外如果只啟用了PROTOCOL_RDP,那么暴力破解就無(wú)效了,這也是為什么hydra和medusa等大量不兼容的問(wèn)題:
幾個(gè)遺留問(wèn)題的集中解答:
一)協(xié)議名稱到底叫rdp還是ms-wbt-server?
我個(gè)人的看法是叫做rdp合理得多,比如rdp協(xié)議是一種網(wǎng)絡(luò)協(xié)議,實(shí)現(xiàn)這個(gè)協(xié)議的服務(wù)器和客戶端產(chǎn)品都不相同,微軟實(shí)現(xiàn)的第一版本早期只有它自己,所以我們叫Micorsoft Windows Based Terminal (WBT)還說(shuō)的過(guò)去,但是加上Server就不對(duì)了,這明顯是一種產(chǎn)品的實(shí)現(xiàn),尤其是后來(lái)有了各種linux上面實(shí)現(xiàn)的開源版本,你還叫ms-wbt-server明顯不合理,人家可以是freerdp-server啊。所以由于歷史的原因,未必當(dāng)時(shí)的命名就是合理的,我們需要對(duì)其進(jìn)行改進(jìn)。對(duì)于既有rdp還有ms-wbt-server的平臺(tái),我只能說(shuō)太不用心了,要么是復(fù)制了別人的數(shù)據(jù),要么是重復(fù)堆疊(拼數(shù)據(jù)量還是不用心)。
協(xié)議是協(xié)議,產(chǎn)品是產(chǎn)品,廠商是廠商,這些需要做好區(qū)分。
二)協(xié)議識(shí)別要支持多少種才算完善?
大家很容易盲目地去追求數(shù)量而不是質(zhì)量,無(wú)論是以前的漏洞數(shù)還是現(xiàn)在的指紋規(guī)則數(shù)。wireshark加上nmap一起可以支持幾千種協(xié)議規(guī)則,但是實(shí)例上意義不大。說(shuō)的再直白一點(diǎn),咱們自己局域網(wǎng)的協(xié)議識(shí)別全了么?一個(gè)網(wǎng)絡(luò)設(shè)備放在那,眼跟前的設(shè)備你都識(shí)別不了,談什么識(shí)別所有。
舉個(gè)例子,我們內(nèi)部把協(xié)議分為ABC三類協(xié)議,A類協(xié)議屬于你必須發(fā)一個(gè)正確的request包,服務(wù)器才會(huì)返回response,比如rdp協(xié)議;B類協(xié)議就是主動(dòng)response,不需要你請(qǐng)求的,比如ssh協(xié)議;C類協(xié)議就是你需要你發(fā)request,但是哪怕格式不對(duì)也會(huì)返回錯(cuò)誤信息的response,比如http協(xié)議。對(duì)于一個(gè)開放了非標(biāo)準(zhǔn)端口的A類協(xié)議,你如何確認(rèn)是哪一個(gè)?你是準(zhǔn)備幾百個(gè)協(xié)議挨個(gè)遍歷嗎?如果考慮網(wǎng)絡(luò)等待超時(shí),一個(gè)端口的協(xié)議識(shí)別一次需要幾分鐘?
這個(gè)問(wèn)題是個(gè)選擇問(wèn)題,可能未來(lái)會(huì)有一個(gè)算法來(lái)證明最有效的方案,但是現(xiàn)在還沒有。我們的協(xié)議引擎已經(jīng)能夠自動(dòng)化高效率的用少量包篩選出B類協(xié)議和C類協(xié)議,但是對(duì)于A類,會(huì)用最top的幾個(gè)去做嘗試,沒法全遍歷。
最后,我想說(shuō),行業(yè)還是要做好技術(shù)沉淀的,不是老是商務(wù)模式致勝,客戶關(guān)系致勝,以及PPT致勝,我希望
在技術(shù)上大家應(yīng)該都能達(dá)到一些基礎(chǔ)的要求才能宣稱具備了網(wǎng)絡(luò)空間測(cè)繪的能力。所以未來(lái)如果有可能,我會(huì)引導(dǎo)技術(shù)使用方明確把這一點(diǎn)寫到招標(biāo)參數(shù)里面去,或者形成標(biāo)準(zhǔn)規(guī)范的要求??梢韵胂蟮?,大家看完這篇文章會(huì)沉下心來(lái)至少把這個(gè)協(xié)議的技術(shù)做好(不然測(cè)試無(wú)法正偏離?。?,也算我們對(duì)行業(yè)做了些許貢獻(xiàn),有效區(qū)分一下混水摸魚的主。大家沉下來(lái)踏踏實(shí)實(shí)做個(gè)五年,我相信行業(yè)就能更好的引導(dǎo)到技術(shù)突破上來(lái),形成良性競(jìng)爭(zhēng)的局面。
關(guān)鍵詞:識(shí)別,協(xié)議,空間,測(cè)繪,技術(shù),網(wǎng)絡(luò)