作者:南京翰海源CEO 方興(FlashSky)
版權(quán)申明:該文版權(quán)屬于南京翰海源公司,任何人或單位、網(wǎng)站轉(zhuǎn)載、引用都必須標(biāo)記南京翰海源公司。否則視為侵權(quán)。
引子
很久不寫技術(shù)文章了,這次決定寫一下,起源于在微博上和@np就是p @奧卡姆剃刀對(duì)后門的討論,他們都是在IT各自領(lǐng)域深有建樹的專家,但是發(fā)現(xiàn)他們對(duì)于IT安全的理解,卻和我們這些專業(yè)從事安全領(lǐng)域的技術(shù)人員的角度和認(rèn)識(shí),存在著巨大的鴻溝。這是怎么了?我覺得作為安全領(lǐng)域的技術(shù)人員,是有義務(wù)向IT領(lǐng)域的技術(shù)人員,做相關(guān)安全的普及,換奧卡姆剃刀的話就是,【IT安全最大的問題不是普通公眾對(duì)IT安全的不理解,而是信息專業(yè)者但非安全領(lǐng)域者,他們對(duì)安全的似是而非的理解】。
但是為了寫清楚這些問題,我粗粗列了個(gè)綱要,發(fā)現(xiàn)要寫的相關(guān)的東西非常多,而且要面對(duì)非安全領(lǐng)域的人員,如何深入淺出把問題講透徹,是個(gè)很傷腦筋的問題,但既然說(shuō)出來(lái)了,我還是盡力而為吧。前面先講個(gè)真實(shí)案例,目的是想讓這些信息領(lǐng)域的人理解安全的視角和他們視角的差異。
2001年,我還沒進(jìn)入安全領(lǐng)域但已經(jīng)對(duì)安全感興趣開始研究了,最早研究的是WINDOWS的身份認(rèn)證體系,一個(gè)月后,我寫了一個(gè)小工具,任何我們內(nèi)網(wǎng)的其他用戶的WINDOWS的主機(jī),我都能直接用他們身份遠(yuǎn)程用,可以獲得用戶設(shè)立的共享目錄訪問權(quán),如果恰巧登陸用戶是管理員用戶(大多數(shù)都如此),就可以通過\\A\C$獲得所有磁盤讀寫權(quán)和遠(yuǎn)程安裝權(quán)限,當(dāng)時(shí)我給一個(gè)對(duì)WINDOWS認(rèn)證體系有研究的同事演示拿到他主機(jī)的控制權(quán)后,他認(rèn)為不可思議,我怎么能從算法上破解了WINDOWS認(rèn)證算法?當(dāng)我把我的方法告訴他后,他說(shuō)從來(lái)沒有想到過原來(lái)攻擊者是可以這樣發(fā)起攻擊的。
WINDOWS的遠(yuǎn)程共享登錄機(jī)制如下:
A要登陸B機(jī),輸入后,其實(shí)是A主機(jī)通過SMB協(xié)議向B發(fā)送登錄請(qǐng)求
B返回一條挑戰(zhàn)C’給A主機(jī)
A主機(jī)根據(jù)當(dāng)前用戶名N’,用用戶口令的散列M’(如果此當(dāng)前用戶登陸失敗,會(huì)跳出用戶口令提示框,根據(jù)用戶輸入的用戶N’和口令計(jì)算M’),再配合挑戰(zhàn)C’生成新的散列M1’,將N’,M1’發(fā)送回B主機(jī)
B主機(jī)SMB內(nèi)核查找本機(jī)是否有同樣用戶名N’的用戶,查找N’用戶的散列P’,再配合挑戰(zhàn)C’生成新的散列M2’,檢查M2’和M1’是否一致,一致認(rèn)證通過生成令牌,不一致拒絕。
這是認(rèn)證算法體系非常知名的挑戰(zhàn)認(rèn)證體系,可以有效保證AB之間都獲取不了對(duì)方的真實(shí)散列但可以實(shí)現(xiàn)登陸認(rèn)證。我不是數(shù)學(xué)研究者,這些散列算法不是我的知識(shí)領(lǐng)域能夠突破的障礙,那如何能達(dá)到自己的目的呢。我想到如果一個(gè)用戶打開郵件或?yàn)g覽網(wǎng)頁(yè)里,如果包含這樣的資源,會(huì)直接向B發(fā)起SMB的會(huì)話請(qǐng)求,且默認(rèn)就是以當(dāng)前用戶和散列自動(dòng)發(fā)起,直到失敗才會(huì)跳出對(duì)話框,OK,我馬上就知道如何實(shí)現(xiàn)這個(gè)突破的,假設(shè)A是攻擊目標(biāo),B是自己的主機(jī)。給A發(fā)一封包含資源的郵件或吸引他打開一個(gè)包含網(wǎng)頁(yè),這樣A主機(jī)會(huì)向B主機(jī)發(fā)來(lái)一個(gè)SMB認(rèn)證申請(qǐng),等待B主機(jī)回應(yīng)挑戰(zhàn),B主機(jī)先不回應(yīng),同時(shí)B主機(jī)也去向A主機(jī)發(fā)起的SMB認(rèn)證申請(qǐng),A主機(jī)回答B主機(jī)一個(gè)挑戰(zhàn)C’,B主機(jī)把此挑戰(zhàn)又作為A主機(jī)向B主機(jī)申請(qǐng)?zhí)魬?zhàn)的回應(yīng),這個(gè)時(shí)候,A主機(jī)就會(huì)用他用戶N’的散列M’和C’來(lái)計(jì)算M1’發(fā)送給B主機(jī),然后B主機(jī)以同樣N’和M1’回答A主機(jī),于是,B主機(jī)在無(wú)需知道M’的前提下,利用系統(tǒng)本身功能和協(xié)議自身的機(jī)制,用A機(jī)N’用戶的身份登陸A機(jī)。只要兩個(gè)主機(jī)有獨(dú)立IP打開SMB許可,也可以遠(yuǎn)程發(fā)起攻擊,無(wú)論他密碼設(shè)定多強(qiáng),這個(gè)散列計(jì)算算法再?gòu)?qiáng),也無(wú)法解決的問題。
后來(lái),我看到了國(guó)外安全研究人員2001同年也發(fā)布了SMB中繼攻擊演示,其實(shí)和我這個(gè)就是一個(gè)道理,這種問題存在了多年之后的2008年,微軟通過策略簡(jiǎn)單限制過一下AB直接互連申請(qǐng)SMB的情況,但其實(shí)攻擊者如果有2臺(tái)主機(jī)B/C,B接受A的SMB請(qǐng)求,C發(fā)送A SMB請(qǐng)求,就能突破這個(gè)限制。
當(dāng)然做密碼算法的人會(huì)指出:有很多可以解決這類問題的認(rèn)證協(xié)議,而且一些關(guān)鍵主機(jī)使用了這樣的體系,但事實(shí)是,到現(xiàn)在為止,大多數(shù)的計(jì)算機(jī)依舊輕易可實(shí)施此類攻擊,即使使用了這樣體系的主機(jī),攻擊者搞定工作人員的普通主機(jī),再利用工作人員自身的權(quán)限獲得這類關(guān)鍵主機(jī)的核心數(shù)據(jù),2011年RSA令牌種子失竊案正是如此,攻擊者通過一個(gè)NDAY漏洞的郵件搞定了RSA的HR的主機(jī),再用HR身份發(fā)帶當(dāng)時(shí)FLASH 0DAY的業(yè)務(wù)郵件給財(cái)務(wù)總監(jiān)搞定財(cái)務(wù)總監(jiān)主機(jī),再用財(cái)務(wù)總監(jiān)身份搞定有RSA令牌種子服務(wù)器權(quán)限的管理人員主機(jī),以此獲取了RSA令牌的種子,然后破解了美國(guó)最大軍火承包商洛克馬丁公司的RSA令牌身份認(rèn)證系統(tǒng)竊取機(jī)密。
我們做安全的,每天都接觸和了解著如上我們IT體系如此脆弱的事實(shí),并且知道隨著IT發(fā)展,我們?cè)絹?lái)越多重要的東西都依賴于這樣一個(gè)脆弱的環(huán)境,因此充滿了恐懼;或許他們都只是風(fēng)險(xiǎn)(技術(shù)可行)還沒有成為大規(guī)模的事實(shí)(攻擊者實(shí)施意愿,其實(shí)在我看來(lái)攻擊事實(shí)已經(jīng)夠多了,只是出于危害感知、攻擊取證以及攻擊者控制而非破壞意圖沒有浮出水面而已),但是當(dāng)醫(yī)療的心臟起搏器、汽車的控制系統(tǒng)、你家的煤氣管道、高鐵的自控系統(tǒng)都開始依賴于這些脆弱的IT系統(tǒng)時(shí),未來(lái)的人類社會(huì),是否能夠承受的起這樣的風(fēng)險(xiǎn)事實(shí)。
聯(lián)系客服