根除不良軟件 解決惡意軟件
不良軟件、或是惡意軟件哪個(gè)更糟糕呢?事實(shí)上,它們有區(qū)別么?不幸的是,不良軟件與惡意軟件經(jīng)常被混淆在一起——有時(shí)甚至年長(zhǎng)的安全老手也會(huì)犯這樣的錯(cuò)誤。在本文中我會(huì)把它們兩個(gè)分開(kāi)來(lái),并且闡述它們之間共生的關(guān)系。
好消息是消滅不良軟件會(huì)有助于控制惡意軟件問(wèn)題。
不良軟件
現(xiàn)如今每個(gè)人都明白軟件的缺點(diǎn)導(dǎo)致絕大多數(shù)的安全問(wèn)題。對(duì)不良軟件“漏洞掃描”的快速檢查可以顯示我們聽(tīng)說(shuō)的所有問(wèn)題:“緩沖區(qū)溢出、競(jìng)爭(zhēng)條件、跨站點(diǎn)腳本(cross-site scripting,簡(jiǎn)稱(chēng)XSS)、SQL注入、跨站點(diǎn)請(qǐng)求偽造(cross-site request forgery,簡(jiǎn)稱(chēng)CSRF),以及上千不出名的bug(參見(jiàn)CWE的頂級(jí)不良軟件列表)。并且不要忘記軟件缺陷的設(shè)計(jì)問(wèn)題,它占到其余50%的嚴(yán)重軟件安全缺點(diǎn)。
本文最重要的事情是介紹明白這些bug和缺陷很可能是由于開(kāi)發(fā)人員和軟件架構(gòu)師的疏忽、馬虎或是普遍的安全愚昧等原因造成的。盡管過(guò)去幾年中,我們已經(jīng)對(duì)數(shù)以千計(jì)的開(kāi)發(fā)人員培訓(xùn)了軟件安全的基礎(chǔ)知識(shí),比起那些已經(jīng)參與過(guò)一個(gè)課程、或是閱讀軟件安全書(shū)籍的開(kāi)發(fā)人員來(lái)說(shuō),還有更多的編程人員根本沒(méi)有參加過(guò)任何安全培訓(xùn)。
好的消息是開(kāi)發(fā)人員們討厭bug、軟件架構(gòu)師們也討厭缺陷。所以如果我們不斷地教育他們這些缺點(diǎn)的本質(zhì)。他們可能會(huì)不再編寫(xiě)出新的缺陷。再加之越來(lái)越多的靜態(tài)分析工具用于評(píng)審代碼、架構(gòu)性風(fēng)險(xiǎn)分析工具用于發(fā)現(xiàn)缺陷,以及其它的軟件安全接觸點(diǎn),你可以看到我們正在取得一些進(jìn)展。
這是我的主要觀點(diǎn):大多數(shù)的bug不是由決心毀滅整個(gè)世界的邪惡開(kāi)發(fā)人員編寫(xiě)蹩腳的軟件故意放到軟件中。它們是錯(cuò)誤、意外事故、或是不良后果的問(wèn)題,但不是由邪惡意圖所導(dǎo)致的。
惡意軟件
病毒、蠕蟲(chóng)、木馬、間諜軟件、廣告軟件、rootkits等高級(jí)持續(xù)威脅(advanced persistent threats,簡(jiǎn)稱(chēng)APT)都是各種類(lèi)型的惡意軟件。惡意軟件是那些按照編寫(xiě)它的人的目的,故意設(shè)計(jì)用來(lái)做壞事的代碼。這是值得重復(fù)說(shuō)的,惡意軟件在許多方面都不同于不良軟件,并且首要的區(qū)別是編寫(xiě)該軟件的人的意圖。
許多病毒和蠕蟲(chóng)(但不是所有的)利用它們攻擊的系統(tǒng)的缺點(diǎn)。Ed Felten和我在90年代中期撰文寫(xiě)的Java安全問(wèn)題(不良軟件)被攻擊者用于編寫(xiě)exploit代碼(惡意軟件)。Zeus木馬同時(shí)利用瀏覽器的特定bug和其設(shè)計(jì)上的缺陷來(lái)感染目標(biāo)機(jī)器的瀏覽器,并且執(zhí)行陰險(xiǎn)的中間人攻擊(大多數(shù)是瞄準(zhǔn)金融服務(wù)機(jī)構(gòu))。Zeus木馬屬于惡意軟件。問(wèn)題在于它為不良軟件確立了立足點(diǎn)。Stuxnet蠕蟲(chóng)是惡意軟件。它故意用來(lái)攻擊伊朗的控制離心分離機(jī)的過(guò)程控制系統(tǒng)。Stuxnet蠕蟲(chóng)利用了西門(mén)子可編程邏輯控制器設(shè)計(jì)中的不安全因素(不良軟件)。值得注意的是西門(mén)子不是開(kāi)發(fā)惡意軟件的公司,而且它一直致力于提高軟件安全。
#p#
不良軟件成為惡意軟件的Vector
Vector是一個(gè)具有許多含意的詞語(yǔ)中。在數(shù)學(xué)上,Vector是帶有大小和方向的一條線。在傳染病學(xué)中,Vector是將傳染病從一個(gè)宿主到傳輸另外一個(gè)上的有機(jī)體。使用第2種定義,我們能夠?qū)④浖秉c(diǎn)(以及造成的不良軟件)概念化為用于惡意代碼傳播的途徑。
為什么這個(gè)如此重要?因?yàn)閻阂廛浖?wèn)題追根到底必然涉及不良軟件。這就是傳染病學(xué)的101軍規(guī),根除傳播途徑。知道為什么消滅蚊子對(duì)于戰(zhàn)勝瘧疾至關(guān)重要么?因?yàn)槲米邮且环Nvector。殺完蚊子接著你能直接影響瘧疾的傳播。我們所有為提高軟件安全所作的事情都是針對(duì)不良軟件。因?yàn)榻鉀Q它也有助于控制惡意軟件問(wèn)題。
當(dāng)不良軟件成為惡意軟件,或是邪惡的開(kāi)發(fā)人員無(wú)法無(wú)天
你認(rèn)為我們已經(jīng)做得足夠了。但是這是計(jì)算機(jī)安全,所以當(dāng)然有一些特殊的情況需要考慮,假設(shè)我們“以壞人的方式”去思考。比如:想象下某個(gè)懷著邪惡意圖的開(kāi)發(fā)人員有目的地在他編寫(xiě)的軟件中安放bug,以便他可以在產(chǎn)品上架后售賣(mài)零日漏洞給歹徒。還有:想象一下某個(gè)邪惡的開(kāi)發(fā)人員將時(shí)間炸彈木馬植入到他編寫(xiě)的代碼中,并且隨后使用這個(gè)時(shí)間炸彈來(lái)敲詐依賴(lài)這些代碼進(jìn)行必要業(yè)務(wù)過(guò)程的公司。再有:想象一下邪惡的開(kāi)發(fā)人員故意地編寫(xiě)代碼來(lái)耗盡所有可用的計(jì)算機(jī)資源,所以運(yùn)行該程序的計(jì)算機(jī)緩慢直到癱瘓。再來(lái)一個(gè)現(xiàn)代版超級(jí)精英的例子:想象一下某個(gè)開(kāi)發(fā)人員為移動(dòng)手機(jī)編寫(xiě)了一個(gè)簡(jiǎn)單的游戲應(yīng)用,該應(yīng)用看起來(lái)毫無(wú)害處還有趣,但是實(shí)際上將用戶(hù)的數(shù)據(jù)從手機(jī)上導(dǎo)出并且發(fā)送給攻擊者。這些問(wèn)題的可能性是無(wú)窮無(wú)盡的。
我們是否可以做一些事情,來(lái)尋找木馬、以及解決像這樣故意在源代碼中放置bug的問(wèn)題呢?我們能夠戰(zhàn)勝邪惡的開(kāi)發(fā)人員么?或許會(huì)有些希望。
首要的事情:在一些情形下,了解是否能夠信任開(kāi)發(fā)人員是至關(guān)重要的,在安全策略中應(yīng)該制定這點(diǎn)。例如,美國(guó)的NSA已經(jīng)發(fā)布了“解決惡意代碼風(fēng)險(xiǎn)指導(dǎo)意見(jiàn)”來(lái)應(yīng)對(duì)這個(gè)問(wèn)題。還有大型的跨國(guó)銀行有類(lèi)似技術(shù)的規(guī)定。Cigital公司的顧問(wèn)Marina Khainson一直在探索偵測(cè)她稱(chēng)之為“惡意設(shè)計(jì)的要素”的思路,使用的是標(biāo)準(zhǔn)問(wèn)題靜態(tài)分析技術(shù)。她最近在OWASP上討論的“惡意代碼偵測(cè):突破靜態(tài)分析”一書(shū)介紹了使用靜態(tài)分析技術(shù)偵測(cè)惡意代碼的前期工作,并拿安卓移動(dòng)手機(jī)應(yīng)用的木馬功能為例。
這兒的基本思路是什么?尋找確定的可能是可疑的靜態(tài)字符串,例如“chmod 777”或是一塊高熵?cái)?shù)據(jù)(可能意味著是經(jīng)過(guò)加密的東西)。提防看起來(lái)不需要的奇怪的打包文件,或是高權(quán)限的系統(tǒng)調(diào)用。這些請(qǐng)求中的一些可以是自動(dòng)化的(例如,運(yùn)行對(duì)于二進(jìn)制的字符串檢查能夠產(chǎn)生有意思的東西)。其它可能需要人工的分析。結(jié)果令人振奮。
同不良軟件的戰(zhàn)斗無(wú)處不在
比起討論沒(méi)有盡頭的安全bug、討論惡意軟件或許更加有趣和令人愉快,但是如果打算戰(zhàn)勝惡意軟件,我們必須從不良軟件開(kāi)始。不管怎么樣,大多數(shù)的開(kāi)發(fā)人員不是邪惡的,是吧!?