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