感謝邀請(qǐng)。
每天活躍在互聯(lián)網(wǎng)上的應(yīng)用成百上千萬(wàn),包括PC端以及目前越來(lái)越主流的移動(dòng)端,不僅有通過(guò)瀏覽器訪問(wèn)的,還有需要安裝客戶端的,不僅有與服務(wù)器強(qiáng)交互的,還有獨(dú)立運(yùn)行的本地軟件。
而這其中,開源的(包括開放源碼的)產(chǎn)品少之又少。但,這并不妨礙一個(gè)黑客找出其中的漏洞。換句話說(shuō),找漏洞并不需要源碼。
當(dāng)然了,在有源碼的情況下,挖洞是一件難度系數(shù)指數(shù)下降的事情。雖然讀懂一個(gè)大型軟件源碼耗時(shí)又耗力,但對(duì)于黑客來(lái)說(shuō),可以略去其中大半的代碼來(lái)閱讀,只關(guān)心可能造成危險(xiǎn)的部分。就像一名建筑工程師看一份大樓的施工圖,要看懂大樓的結(jié)構(gòu)、建筑材料、水電線路等等各方各面,而對(duì)于《Prison Break》中的Michael Scofield可能只關(guān)心地下管道的分布。
那么,在沒(méi)有源碼的情況下,黑客怎么挖洞呢?這種情況,我們可以稱之為黑盒。而挖洞,的確需要與程序編輯者持有完全相反的角度和看法。對(duì)于輸入輸出點(diǎn),程序猿考慮的是正確的輸入獲得正確的輸出,而黑客則考慮特殊的非法輸入獲得異常的有價(jià)值輸出。那系統(tǒng)登錄來(lái)說(shuō),程序猿考慮的是用戶輸入注冊(cè)的用戶名、口令能夠在登錄時(shí)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)匹配成功,而黑客則會(huì)嘗試引起數(shù)據(jù)庫(kù)查詢異常的輸入作為用戶名、口令內(nèi)容,希望應(yīng)用返回更多數(shù)據(jù)庫(kù)中的有效數(shù)據(jù)。
對(duì)于黑客來(lái)說(shuō),不知道源碼情況下,只要有輸入就可以了,不管是應(yīng)用具有的功能頁(yè)面,還是一個(gè)輸入接口,通過(guò)一種叫做模糊測(cè)試的技術(shù)就可以開始你的挖洞之旅。模糊測(cè)試可以構(gòu)造一系列正常和異常的輸入值,根據(jù)應(yīng)用的返回來(lái)判斷脆弱點(diǎn)的存在。
在黑客的武器庫(kù)中,模糊測(cè)試只是其中一個(gè)利器,像什么漏掃、逆向、脫殼、注入、暴破等等不一而足。
作為程序猿,在編寫程序時(shí)不僅要從正向角度完成應(yīng)用的功能,還需要從黑客角度逆向分析應(yīng)用在處理異常輸入時(shí)的反應(yīng),才能做出高安全的應(yīng)用。