做軟件測(cè)試的目的在于找到缺陷和證明缺陷,在這個(gè)過(guò)程中進(jìn)行全面覆蓋性或反復(fù)測(cè)試,以圖無(wú)限地趨近100%,結(jié)果可能很好,但工作效率非常低。在WEB安全測(cè)試上,如何避免大海撈沙,需要有的放矢,把有價(jià)值的信息淘出來(lái)。
安全測(cè)試的出發(fā)點(diǎn)和功能測(cè)試不太相同,安全測(cè)試的手段就是攻擊,攻擊,還是攻擊。尋找有價(jià)值的信息,就是測(cè)試的第一招。“淘金”就是其中的一種方式,一般來(lái)說(shuō)由以下信息需要關(guān)注。
◆ HTML中的代碼注釋
◆ HTML中的敏感代碼
◆ 服務(wù)器或應(yīng)用程序的錯(cuò)誤信息和HTTP響應(yīng)
代碼注釋是一塊很容易被開(kāi)發(fā)人員忽略掉的信息,因?yàn)閷?duì)于開(kāi)發(fā)人員來(lái)說(shuō),這些就是他們做后期開(kāi)發(fā)的“工程文檔”,再正常不過(guò)的東西,甚至很樂(lè)意文件中能有更的關(guān)鍵注釋。如代碼中會(huì)出現(xiàn)“標(biāo)記為1時(shí),表示XXX信息”或“若為空,則交由XX處理”。這類(lèi)信息只需要通過(guò)閱讀HTML文件即可發(fā)現(xiàn),并且對(duì)于攻擊者來(lái)說(shuō)是非常好的指南。
如果攻擊者能夠根據(jù)通過(guò)對(duì)源代碼的處理,獲取到數(shù)據(jù)庫(kù)信息、用戶(hù)名、密碼等數(shù)據(jù)時(shí),這個(gè)應(yīng)用是非常危險(xiǎn)的。要獲取這樣的信息,首先需要清楚應(yīng)用間的數(shù)據(jù)傳遞方式。通過(guò)GET方式傳遞的,可以直接在URL中獲取到“參數(shù)名=參數(shù)值”,如果是通過(guò)POST傳遞的,就需要借助抓包工具,比如HttpFox、HttpWatch。當(dāng)把所有關(guān)聯(lián)頁(yè)面都瀏覽完成后,就可以生成一張頁(yè)面間的映射關(guān)系圖,同時(shí)也可以知道它們之間參數(shù)的傳遞情況。如果應(yīng)用程序?qū)崿F(xiàn)了訪問(wèn)級(jí)別區(qū)分,比如高級(jí)別用戶(hù)享有特權(quán)操作,那么就可以從低等級(jí)用戶(hù)開(kāi)始,逐級(jí)淘金。通過(guò)映射圖閱讀源代碼,尋找注釋中引導(dǎo)信息,就可以獲得有價(jià)值的信息。除了手工地去尋找,還可以利用正則表達(dá)式自動(dòng)搜尋。
當(dāng)找到以上信息后,檢查頁(yè)面之間傳遞的參數(shù),看看哪些參數(shù)能夠使得應(yīng)用程序出錯(cuò),這個(gè)時(shí)候就能發(fā)現(xiàn)一些有用的信息。如連接數(shù)據(jù)庫(kù)時(shí)出錯(cuò),腳本無(wú)法處理,該出錯(cuò)頁(yè)面不但會(huì)提示錯(cuò)誤,還可能把出錯(cuò)點(diǎn)附近的相關(guān)代碼也顯示出來(lái),這些相關(guān)代碼可能會(huì)把數(shù)據(jù)庫(kù)名、表對(duì)象名及字段名等信息暴露出來(lái)。或者強(qiáng)行產(chǎn)生語(yǔ)法錯(cuò)誤、營(yíng)造無(wú)法處理的異常場(chǎng)景來(lái)破壞應(yīng)用程序,則會(huì)得到服務(wù)器對(duì)其響應(yīng)的許多函數(shù)調(diào)用。因此無(wú)論是應(yīng)用程序還是Web服務(wù)器,應(yīng)該謹(jǐn)慎維護(hù)好應(yīng)對(duì)對(duì)策略。還有一種常見(jiàn)的漏洞,大家可以到各網(wǎng)站上去自行尋找,即對(duì)于用戶(hù)名和密碼輸入不正確時(shí)觸發(fā)不同的報(bào)錯(cuò)信息。如果使用這樣的邏輯進(jìn)行用戶(hù)名和密碼匹配的判斷,當(dāng)攻擊者暴力破解時(shí),他能夠很清楚的知道,當(dāng)前使用的用戶(hù)名是否是已注冊(cè)用戶(hù)(當(dāng)用戶(hù)名正確時(shí),提示是密碼錯(cuò)誤)。
如何進(jìn)行防范
1、確定HTML中注釋是否包含敏感信息;或在日常環(huán)境中保留這些注釋?zhuān)诰€(xiàn)上去除這些注釋。
2、盡量對(duì)于錯(cuò)誤信息進(jìn)行二次處理,盡量讓用戶(hù)看到的錯(cuò)誤提示是模糊且有價(jià)值的;盡量把相關(guān)細(xì)節(jié)信息保留在服務(wù)器的日志文件中,方便開(kāi)發(fā)調(diào)試的同時(shí)規(guī)避安全風(fēng)險(xiǎn)。同時(shí)需要定期檢查這些日志文件,了解是否有錯(cuò)誤信息是未被處理的。