如果你是一名負(fù)責(zé)搭建嵌入式系統(tǒng)(或軟件、設(shè)備、網(wǎng)絡(luò)等)的工程師或開發(fā)者,那么你排在最高優(yōu)先級(jí)之一的事情是(或應(yīng)該是)鑒別并最大限度的減少潛在的數(shù)據(jù)安全漏洞。要想有效的實(shí)現(xiàn)這個(gè)目標(biāo),你需要了解系統(tǒng)是如何被黑客入侵的,最終要理解如何“像黑客一樣思考”。
黑客攻擊利用的是漏洞,這些其中可能是設(shè)計(jì)缺陷、訪問控制薄弱、配置錯(cuò)誤或者許多其他的問題等。這篇文章會(huì)深入探討黑客的思維,正如你所看到的,他們在發(fā)現(xiàn)和利用漏洞方面的過程和思維方式與工程師如何處理系統(tǒng)開發(fā)還是有很大不同的。
黑客的思維到底是怎樣的?下面的內(nèi)容可能有趣、混亂或枯燥,所以準(zhǔn)備一大杯咖啡讓我們深入探究一下。
黑客的心態(tài)和思維:執(zhí)行任務(wù)
黑客與工程師之間最顯著的區(qū)別在于他們?nèi)绾螒?yīng)對(duì)挑戰(zhàn),工程師(和科學(xué)家,就此而言)是系統(tǒng)性的,首先會(huì)定義和分析問題,然后制定計(jì)劃(或假設(shè)),并對(duì)假設(shè)進(jìn)行測試,最后對(duì)測試結(jié)果進(jìn)行分析,不論成功和失敗都會(huì)得出結(jié)論。
這是科學(xué)的方法,數(shù)百年來人們都是采用這樣的流程,黑客則不會(huì)遵循這個(gè)流程。首先沒有什么計(jì)劃,而是當(dāng)做是一個(gè)任務(wù)。黑客的計(jì)劃是不確定的,靈活的,記住一點(diǎn)黑客并不是在構(gòu)建必須經(jīng)過時(shí)間考驗(yàn)的工程,相反他們要做的就是破解。他們不需要讓管理者或CEO滿意,他們關(guān)注的是完成所定義的任務(wù)。
工程師做事是系統(tǒng)化的,黑客則是務(wù)實(shí)的,他們的方法非常的實(shí)際。雖然會(huì)有一些相似之處,但核心的不同之處在于黑客們會(huì)竭盡全力完成他們的任務(wù),此外他們不會(huì)關(guān)注那些對(duì)自己沒有幫助的結(jié)果,而且無需向其他人作出解釋。
這有時(shí)也被描述為列表 vs 路徑思考:
? 科學(xué)家和工程師對(duì)列舉的每一項(xiàng)都會(huì)報(bào)告結(jié)果
? 黑客遵循路徑,他們會(huì)按一個(gè)思路一直繼續(xù)下去,知道這條路走不通
總而言之,工程師的目標(biāo)是徹底,黑客的目標(biāo)是有效。這些看似微小的細(xì)微差別一旦付諸實(shí)施則會(huì)顯現(xiàn)巨大的差別和影響。
常見的模式:殺傷鏈
當(dāng)黑客侵入到某個(gè)環(huán)境或者系統(tǒng)時(shí),他們通常會(huì)遵循一個(gè)共同的模式,稱為殺傷鏈(kill chain),當(dāng)黑客對(duì)系統(tǒng)和網(wǎng)絡(luò)進(jìn)行攻擊時(shí),他們會(huì)尋找該環(huán)境中更高級(jí)別的訪問和操作權(quán)限(圖1)。最后當(dāng)他們獲得足夠的訪問權(quán)限時(shí),他們就可以竊取想要的數(shù)據(jù)或者植入惡意代碼。
圖1:如果你能在殺傷鏈的早期抓住黑客,那么你才可以防止黑客攻擊的發(fā)生
黑客經(jīng)常會(huì)在一個(gè)入侵環(huán)境中停留很長時(shí)間:平均100-140天,比如2013年零售連鎖企業(yè)遭遇了黑客攻擊,黑客使用了大概100多天的時(shí)間進(jìn)行了全面的攻擊,如果你能在殺傷鏈的早期發(fā)現(xiàn)黑客就可以阻止黑客攻擊的發(fā)生。
需要注意的是大多數(shù)的黑客攻擊都是使用機(jī)器人自動(dòng)完成的,雖然我們可以在描述實(shí)際執(zhí)行這些操作是人為的,但是背后實(shí)際上是機(jī)器人完成了所有操作。
黑客的思維
黑客看待事物的角度是不同的,特別是以下幾點(diǎn):
? 觀察明顯的細(xì)節(jié)
? 想象最壞的情況
? 探索每一個(gè)潛在的訪問入口
? 喜歡一切數(shù)據(jù)
? 理解人是薄弱的環(huán)節(jié)
? 喜歡晦澀難懂的信息
? 尋找并利用后門
? 利用第三方漏洞
? 尋求憑據(jù)
? 清理垃圾
觀察明顯的細(xì)節(jié)
當(dāng)你深入開發(fā)時(shí)很容易忽略某個(gè)明顯的弱點(diǎn),不妨后退一步問問自己一些基本的問題,使用如下“五個(gè)為什么”評(píng)估一下:
? 為什么你的產(chǎn)品要這樣做?
? 為什么有這個(gè)必要?
? 為什么要采用這種設(shè)計(jì)方式?
? 為什么這樣是好的?
? 為什么不換一種不同的方式?
? 這個(gè)練習(xí)的目的是找出明顯的薄弱環(huán)節(jié),黑客會(huì)發(fā)現(xiàn)它們,而且會(huì)比你想象的要快得多。
想象最壞的情況
最壞的情況是什么?它發(fā)生的可能性有多大?黑客一般沒有道德標(biāo)準(zhǔn)。當(dāng)你的網(wǎng)絡(luò)或應(yīng)用正深陷泥潭并努力恢復(fù)時(shí),他們并不會(huì)感到同情,因此你需要制定計(jì)劃來處理那些更糟糕的情況。
然而還是要小心不要卷入所謂的“僵尸場景”中,也就是由于一系列的荒唐事件而引發(fā)的災(zāi)難,大多數(shù)僵尸電影都是基于這個(gè)前提的。
探索每一個(gè)潛在的訪問入口
你必須知道任何人或任何事物訪問你系統(tǒng)的每一種可能的方式,黑客會(huì)進(jìn)行所有的嘗試,并且很多次。你可能認(rèn)為你的藍(lán)牙接口是超級(jí)安全的,但是有幾十種方法可以專門利用藍(lán)牙讓你的系統(tǒng)變得不安全,確保你對(duì)每個(gè)接口都進(jìn)行了積極的測試,無論你的系統(tǒng)設(shè)計(jì)有多么的復(fù)雜。
喜歡一切數(shù)據(jù)
黑客們更喜歡數(shù)據(jù)或某些類型的數(shù)據(jù),數(shù)據(jù)存儲(chǔ)也是黑客在環(huán)境中獲得持久性訪問的一種方式,你必須分析你的系統(tǒng)數(shù)據(jù):
? 數(shù)據(jù)是怎樣存儲(chǔ)的?
? 數(shù)據(jù)是如何傳輸?shù)模?/p>
? 誰可以訪問這些數(shù)據(jù)?
? 如何監(jiān)控、管理和控制對(duì)數(shù)據(jù)的訪問?
? 訪問日志是怎樣的?這些數(shù)據(jù)都到哪里去了?
理解人是薄弱的環(huán)節(jié)
黑客們明白人是數(shù)據(jù)安全方面的薄弱環(huán)節(jié),我們不僅不穩(wěn)定、不可靠,而且極易受到操縱,如果你的系統(tǒng)涉及任何這些有弱點(diǎn)的人(他確實(shí)有這些弱點(diǎn)),那么這就是你系統(tǒng)的弱點(diǎn)。
所有的信息安全問題通常歸結(jié)為人類的弱點(diǎn)。無論我們是否進(jìn)行了錯(cuò)誤的配置或編寫了錯(cuò)誤的代碼,人都制造系統(tǒng)的一些弱點(diǎn)。假設(shè)用戶會(huì)犯錯(cuò)誤,并且會(huì)有很多錯(cuò)誤,因此我們要格外注意人的一些操作。
喜歡晦澀難懂的技術(shù)信息
黑客們都喜歡晦澀難懂的技術(shù)信息,他們會(huì)隨機(jī)挖掘出你幾年前存放的文檔,從而使用這些文檔的數(shù)據(jù)對(duì)你的系統(tǒng)發(fā)起攻擊,這也是破解新系統(tǒng)的樂趣之一。
當(dāng)你向公眾發(fā)布某些技術(shù)數(shù)據(jù)類型時(shí)要謹(jǐn)慎,假設(shè)黑客們會(huì)得到并進(jìn)行分析,如果你的產(chǎn)品是在一個(gè)開放的環(huán)境中開發(fā)的,那么你就更應(yīng)該以更加安全的方式設(shè)計(jì)某些組件和功能特性。
尋找并利用后門
20世紀(jì)80年代的一部電影《戰(zhàn)爭游戲》讓很多黑客體驗(yàn)到了黑客攻擊的滋味。電影中間有一個(gè)很棒的場景,一個(gè)計(jì)算機(jī)科學(xué)家責(zé)備他的書呆子同事把計(jì)算機(jī)系統(tǒng)的后門當(dāng)做秘密:“Potatohead先生,這些后門不是秘密!”
他的話在現(xiàn)在看來一樣的真實(shí),應(yīng)用程序或設(shè)備的后門非常的常見,黑客們會(huì)尋找它們,它是侵入系統(tǒng)最古老和最可靠的技術(shù)之一,在《戰(zhàn)爭游戲》中就有展示,當(dāng)然在今天也仍然適用。
利用第三方漏洞
盡管你可能會(huì)深切關(guān)注系統(tǒng)的安全性問題,但是你的供應(yīng)商或合作伙伴是否也和你一樣的關(guān)注?黑客們通常會(huì)將第三方組件作為目標(biāo),因?yàn)橥ㄟ^獲取某一項(xiàng)技術(shù)就可以攻擊大量的相關(guān)目標(biāo)。Heartbleed就是不安全的第三方組件造成系統(tǒng)風(fēng)險(xiǎn)的一個(gè)例子,Heartbleed是OpenSSL設(shè)計(jì)實(shí)現(xiàn)的一個(gè)缺陷,OpenSSL被應(yīng)用到數(shù)百萬中產(chǎn)品中,這意味著一個(gè)漏洞足以使數(shù)百萬(可能是數(shù)十億)臺(tái)設(shè)備遭受到攻擊。
如果你的系統(tǒng)中集成有第三方組件,則會(huì)繼承該組件的所有弱點(diǎn),雖然產(chǎn)品可能屬于其他人,但是你需要對(duì)其安全問題負(fù)責(zé)。
尋找憑據(jù)
合法的用戶賬戶是黑客們最終想要獲取的,一旦他們獲取了憑據(jù),黑客就會(huì)升級(jí)他們的權(quán)限從而進(jìn)入你的系統(tǒng),此外使用合法憑據(jù)通常不會(huì)引發(fā)警報(bào)。
雖然你可能無法始終保護(hù)用戶的憑據(jù)(因?yàn)樗谟脩舻氖种校悄闳匀豢梢苑乐箰阂馐褂眠@些憑據(jù),這就要從實(shí)施最小權(quán)限開始,也就是說用戶永遠(yuǎn)不能擁有比他們需要更多的訪問權(quán)限,此外你應(yīng)該積極的測試系統(tǒng)對(duì)于權(quán)限升級(jí)類型的攻擊。
清理你的垃圾
你的系統(tǒng)是整體的一部分嗎?一部分受到攻擊會(huì)讓其他部分也遭受到攻擊?給你的系統(tǒng)傳遞虛假數(shù)據(jù)會(huì)怎樣?這就是Stuxnet惡意軟件的工作方式。它會(huì)向工業(yè)控制系統(tǒng)提供虛假信息并讓系統(tǒng)過載,如果黑客們想竊取你的數(shù)據(jù)或進(jìn)行破壞操作,那么可能就會(huì)像過多的網(wǎng)絡(luò)流量一樣使你的系統(tǒng)過載。
拒絕服務(wù)類型的攻擊很難阻止,當(dāng)設(shè)計(jì)你的系統(tǒng)時(shí),你需要考慮它是否有可能會(huì)過載,并建立相應(yīng)的機(jī)制來阻止或忽略大量的輸入數(shù)據(jù),此外時(shí)鐘都需要驗(yàn)證發(fā)送給你系統(tǒng)的數(shù)據(jù)是否是可信任的,這一點(diǎn)非常的重要。
總結(jié)
作為一名設(shè)計(jì)工程師,確定并最大限度的減少潛在的數(shù)據(jù)安全漏洞是主要目標(biāo),黑客的工作方式與工程師工作方式大不相同,他們并不是采用系統(tǒng)化的方法,他們有屬于自己的殺傷鏈方法,按照這種方式他們會(huì)持續(xù)不斷的尋找到漏洞來利用,“像黑客一樣進(jìn)行思考”要求你以不同的方式來看待你設(shè)計(jì)的系統(tǒng),其中一部分意味著理解漏洞和解決方案的技術(shù)細(xì)節(jié),然而更重要的部分是需要觀察一些明顯的缺陷,理解人所犯的一些錯(cuò)誤和疏忽,了解黑客會(huì)尋找什么以及他們是如何利用這些線索的。
評(píng)論
查看更多