漏洞類別
(相關(guān)資料圖)
如簡(jiǎn)介中所述,我們使用術(shù)語(yǔ)實(shí)現(xiàn)漏洞(有時(shí)也稱為安全漏洞)來(lái)表示使攻擊者可能違反安全目標(biāo)的錯(cuò)誤,以及支持特定攻擊技術(shù)的bug類。
實(shí)施漏洞在網(wǎng)絡(luò)安全中發(fā)揮著重要作用,并且有多種形式。常見漏洞和披露(CVE)是一個(gè)公開的條目列表,采用標(biāo)準(zhǔn)化形式,描述廣泛使用的軟件組件中的漏洞,以及在撰寫本文時(shí),它列出了近十萬(wàn)個(gè)此類漏洞。實(shí)現(xiàn)漏洞通常是由不安全的編程實(shí)踐引起的,并受開發(fā)人員使用的編程語(yǔ)言或API的影響。第一個(gè)主題涵蓋了可歸因于此類不安全編程實(shí)踐的重要實(shí)現(xiàn)漏洞類別。
現(xiàn)有的脆弱性分類,如共同弱點(diǎn)枚舉(CWE),一個(gè)社區(qū)制定的脆弱性類別列表,可作為脆弱性識(shí)別、緩解和預(yù)防的基線,但沒有一個(gè)現(xiàn)有的分類已經(jīng)成功地提出了一個(gè)完整的分類法。因此,第一個(gè)主題中討論的類別應(yīng)被視為重要類別的脆弱性示例,而不是詳盡無(wú)遺的清單。選擇它們的目的是涵蓋最常見的實(shí)現(xiàn)漏洞,但這種選擇至少在某種程度上是主觀的。
特定類別的實(shí)現(xiàn)漏洞通??梢悦枋鰹檫`反軟件系統(tǒng)某些子組件的(正式或非正式)規(guī)范。這樣的規(guī)范采用合同的形式,明確子組件的期望,并提供給其客戶。在違反此類合同時(shí),軟件系統(tǒng)進(jìn)入錯(cuò)誤狀態(tài),軟件系統(tǒng)的進(jìn)一步行為通常是系統(tǒng)開發(fā)人員未考慮的行為,并且依賴于系統(tǒng)實(shí)現(xiàn)詳細(xì)信息。系統(tǒng)的攻擊者可以研究實(shí)現(xiàn)細(xì)節(jié)并利用它們使系統(tǒng)以攻擊者所需的方式運(yùn)行。
內(nèi)存管理漏洞
命令式編程語(yǔ)言支持可變狀態(tài),即這些語(yǔ)言具有用于分配存儲(chǔ)單元的構(gòu)造,這些存儲(chǔ)單元隨后可以分配給程序或由程序讀取,然后再次釋放。編程語(yǔ)言定義指定如何正確使用這些構(gòu)造:例如,分配n存儲(chǔ)單元將返回對(duì)單元數(shù)組的引用,然后可以使用索引0到訪問該數(shù)組n1直到再次釋放(釋放)引用。此規(guī)范可以看作是內(nèi)存管理子組件的協(xié)定。某些編程語(yǔ)言實(shí)現(xiàn)此協(xié)定防守和將扔一例外如果a客戶程序訪問記憶錯(cuò)誤。其他編程語(yǔ)言(最特別是C和C++)離開這責(zé)任為正確分配,訪問和解除分配記憶在這手之這程序員和說(shuō)錯(cuò)誤地訪問或管理內(nèi)存的程序的行為是定義.這種語(yǔ)言有時(shí)被稱為內(nèi)存不安全與內(nèi)存管理相關(guān)的語(yǔ)言和錯(cuò)誤(內(nèi)存管理漏洞)是這些安全漏洞的臭名昭著的來(lái)源語(yǔ)言。
?空間漏洞是指程序索引到有效的連續(xù)存儲(chǔ)單元范圍,但索引超出范圍的錯(cuò)誤。典型的示例是緩沖區(qū)溢出漏洞,程序訪問具有越界索引的數(shù)組(緩沖區(qū))。
?臨時(shí)漏洞是程序訪問曾經(jīng)分配給程序但后來(lái)已解除分配的內(nèi)存的錯(cuò)誤。一個(gè)典型的例子是取消引用懸空指針。
C和C++語(yǔ)言規(guī)范未定義具有內(nèi)存管理漏洞的程序的行為。因此,觀察到的具有漏洞的程序的行為將取決于語(yǔ)言的實(shí)際實(shí)現(xiàn)。從安全的角度來(lái)看,內(nèi)存管理漏洞尤其危險(xiǎn),因?yàn)樵谠S多實(shí)現(xiàn)中,分配給程序的可變內(nèi)存單元是存儲(chǔ)已編譯程序代碼和運(yùn)行時(shí)元數(shù)據(jù)(如調(diào)用堆棧)的相同內(nèi)存地址空間。在此類實(shí)現(xiàn)中,違反內(nèi)存管理協(xié)定的程序訪問可能會(huì)導(dǎo)致對(duì)已編譯的程序代碼或運(yùn)行時(shí)元數(shù)據(jù)的訪問,并且因此可能導(dǎo)致程序代碼、程序控制流和程序數(shù)據(jù)損壞。存在各種強(qiáng)大的攻擊技術(shù)來(lái)利用內(nèi)存管理漏洞[3]。
攻擊包括向程序提供輸入以觸發(fā)漏洞,從而使程序違反內(nèi)存管理協(xié)定。攻擊者選擇輸入,以便程序訪問攻擊者感興趣的存儲(chǔ)單元:
?在代碼損壞攻擊中,無(wú)效的內(nèi)存訪問將編譯的程序代碼修改為攻擊者指定的代碼。
?在控制流劫持攻擊中,無(wú)效內(nèi)存訪問修改代碼指針(例如,堆棧上的返回地址或函數(shù)指針),以使處理器執(zhí)行攻擊者提供的代碼(直接代碼注入攻擊),或使處理器重用程序的現(xiàn)有代碼以意外的方式(代碼重用攻擊,也稱為間接代碼注入攻擊,例如返回libc攻擊或面向返回的編程攻擊)。
?在僅數(shù)據(jù)攻擊中,無(wú)效的內(nèi)存訪問會(huì)修改程序的其他數(shù)據(jù)變量,從而可能導(dǎo)致攻擊者的權(quán)限增加。
?在信息泄漏攻擊中,無(wú)效內(nèi)存訪問是讀取訪問,可能導(dǎo)致信息泄露,無(wú)論是應(yīng)用程序機(jī)密(如加密密鑰)還是運(yùn)行時(shí)元數(shù)據(jù)(如有助于預(yù)測(cè)的地址)的確切內(nèi)存布局,因此可能會(huì)啟用其他攻擊。
由于這些類別的攻擊具有實(shí)際重要性,因此已經(jīng)開發(fā)了應(yīng)對(duì)特定攻擊技術(shù)的緩解技術(shù),我們將在主題4中討論這些技術(shù)。
標(biāo)簽: