本文來源perforce.com,由Perforce中國(guó)授權(quán)合作伙伴-龍智翻譯整理。
緩沖區(qū)溢出(buffer overflow/overrun)是最常見的代碼漏洞之一。如果緩沖區(qū)溢出漏洞未得到解決,不可信的代理可能會(huì)利用該漏洞并發(fā)起攻擊。
本文將詳細(xì)介紹什么是緩沖區(qū)溢出、如何防止緩沖區(qū)溢出并提供常見示例,幫助您更簡(jiǎn)單、更輕松地保護(hù)軟件免受此類威脅。
什么是緩沖區(qū)溢出?
緩沖區(qū)溢出(buffer overflow/overrun)是一種常見的軟件安全漏洞。這一軟件安全問題非常嚴(yán)重,因?yàn)樗鼤?huì)使系統(tǒng)面臨潛在的網(wǎng)絡(luò)威脅和攻擊。
導(dǎo)致緩沖區(qū)溢出漏洞的原因是什么?
當(dāng)緩沖區(qū)中存儲(chǔ)的數(shù)據(jù)超出其容量時(shí),就會(huì)發(fā)生緩沖區(qū)溢出漏洞。多余的數(shù)據(jù)會(huì)“溢出”到相鄰的存儲(chǔ)空間。緩沖區(qū)溢出問題一旦發(fā)生,可能會(huì)導(dǎo)致整個(gè)系統(tǒng)的崩潰。
緩沖區(qū)溢出攻擊是如何運(yùn)作的?
在常見漏洞枚舉(CWE)和SANS最危險(xiǎn)的軟件錯(cuò)誤列表Top25中,緩沖區(qū)溢出一直是排名前列的問題之一。
盡管緩沖區(qū)溢出是一個(gè)廣為人知的問題,但在源代碼中檢測(cè)和防止緩沖區(qū)溢出仍然具有挑戰(zhàn)性。這需要持續(xù)的檢測(cè)和最佳實(shí)踐培訓(xùn),以正確處理這些溢出問題。此外,那些未被檢測(cè)到的緩沖區(qū)溢出,可能會(huì)繼續(xù)影響成千上萬個(gè)易受攻擊的系統(tǒng)。
網(wǎng)絡(luò)攻擊者可以利用程序內(nèi)存分配過程中的特定漏洞,并通過操控輸入來使系統(tǒng)溢出。通過發(fā)送大于緩沖區(qū)可以處理的數(shù)據(jù)輸入的任意或惡意代碼,攻擊者可以更改程序的執(zhí)行流程并控制程序。
C和C++是最易受到緩沖區(qū)溢出攻擊的語言,因?yàn)樗鼈儧]有內(nèi)置機(jī)制來防止訪問和覆蓋內(nèi)存的數(shù)據(jù)。現(xiàn)代語言如C#和Java則不太可能受到攻擊,因?yàn)樗鼈儨p少了導(dǎo)致緩沖區(qū)溢出的編碼錯(cuò)誤。然而,只要允許內(nèi)存操作,任何環(huán)境中都有可能發(fā)生緩沖區(qū)溢出。
緩沖區(qū)溢出攻擊的類型
大多數(shù)的緩沖區(qū)溢出攻擊可以分為兩類:
1、基于棧的攻擊:
在程序內(nèi)存中,棧是一個(gè)用于存儲(chǔ)局部變量和函數(shù)調(diào)用的空間。棧通常是空的,主要設(shè)計(jì)為“后進(jìn)先出”的結(jié)構(gòu),因此不適合一次性存儲(chǔ)大量數(shù)據(jù)。攻擊者通過注入文件來觸發(fā)過量的內(nèi)存分配,或發(fā)送隱藏的惡意代碼負(fù)載,來利用應(yīng)用程序中基于棧的緩沖區(qū)溢出漏洞,從而獲得系統(tǒng)的訪問權(quán)限。
2、基于堆的攻擊:
與棧不同,堆管理動(dòng)態(tài)內(nèi)存,并且是手動(dòng)管理的。程序員可以在編譯時(shí)未知大小的情況下將內(nèi)存分配給堆。雖然基于堆的漏洞更難利用,但基于堆的溢出攻擊對(duì)系統(tǒng)的破壞性更大,因此也會(huì)吸引攻擊者。基于堆的溢出攻擊會(huì)淹沒程序預(yù)留的內(nèi)存空間,超出當(dāng)前運(yùn)行時(shí)操作所需的內(nèi)存。
以下是一些緩沖區(qū)溢出的常見示例:
- ABV.ANY_SIZE_ARRAY
- ABV.GENERAL
- ABV.ITERATOR
- ABV.MEMBER
- ABV.STACK
- ABV.TAINTED
- ABV.UNICODE.BOUND_MAP
- ABV.UNICODE.FAILED_MAP
- ABV.UNICODE.NNTS_MAP
- ABV.UNICODE.SELF_MAP
- ABV.UNKNOWN_SIZE
- NNTS.MIGHT
- NNTS.MUST
- NNTS.TAINTED
- RABV.CHECK
- RN.INDEX
- SV.FMT_STR.BAD_SCAN_FORMAT
- SV.STRBO.BOUND_COPY.OVERFLOW
- SV.STRBO.BOUND_COPY.UNTERM
- SV.STRBO.BOUND_SPRINTF
- SV.STRBO.UNBOUND_COPY
- SV.STRBO.UNBOUND_SPRINTF
- SV.UNBOUND_STRING_INPUT.CIN
- SV.UNBOUND_STRING_INPUT.FUNC
如何檢測(cè)C語言中的緩沖區(qū)溢出漏洞并防止攻擊?
除了遵循安全編碼的最佳實(shí)踐外,檢測(cè)此類漏洞的最佳方法是使用靜態(tài)代碼分析工具,例如Perforce所提供的Klocwork和Helix QAC。
Klocwork擁有一套廣泛的軟件安全檢查器,幫助確保安全漏洞不會(huì)被利用。每個(gè)檢查器都提供違規(guī)描述、潛在漏洞和風(fēng)險(xiǎn)的解釋以及代碼示例。
Helix QAC 是一款專為 C 和 C++ 語言設(shè)計(jì)的高精度靜態(tài)代碼分析工具。它能夠深入分析代碼庫,檢測(cè)可能導(dǎo)致緩沖區(qū)溢出等安全漏洞的編碼缺陷。Helix QAC 提供詳細(xì)的診斷信息,包括問題的根本原因、修復(fù)建議以及合規(guī)性標(biāo)準(zhǔn)(如 MISRA、ISO 26262)的支持,從而幫助團(tuán)隊(duì)滿足行業(yè)安全要求。此外,Helix QAC 的分析結(jié)果清晰易懂,支持團(tuán)隊(duì)快速定位和解決潛在的安全隱患。
如何在C和其他語言中防止緩沖區(qū)溢出?
以下是防止緩沖區(qū)溢出漏洞的方法。
■使用不引發(fā)軟件漏洞的編程語言
完全避免網(wǎng)絡(luò)攻擊的方法之一是使用不引發(fā)此類漏洞的編程語言。例如,C語言是緩沖區(qū)攻擊的主要目標(biāo),該語言通過直接訪問內(nèi)存從而引發(fā)漏洞。而像Java、Python和.NET等語言,則對(duì)緩沖區(qū)漏洞免疫。
■開發(fā)過程中注意緩沖區(qū)的使用情況
防止軟件漏洞的另一種方法是在開發(fā)過程中注意緩沖區(qū)的使用情況。緩沖區(qū)被訪問的地方就是漏洞可能發(fā)生的地方,尤其是當(dāng)函數(shù)涉及用戶生成的輸入時(shí)。
■遵循防止緩沖區(qū)溢出的最佳實(shí)踐
以下是可遵循的5個(gè)最佳實(shí)踐:
1.使用自動(dòng)化的代碼審查和測(cè)試。
2.對(duì)DevOps團(tuán)隊(duì)進(jìn)行關(guān)于使用不安全函數(shù)的概念培訓(xùn)。
3.關(guān)注于安全函數(shù),如使用strncpy而非strcpy、使用strncat而非strcat。
4.保持應(yīng)用程序服務(wù)器的補(bǔ)丁更新。
5.使用代碼分析工具定期檢查應(yīng)用程序是否存在軟件安全漏洞。
使用Klocwork/Helix QAC防止緩沖區(qū)溢出漏洞
為了確保您的應(yīng)用程序免受緩沖區(qū)溢出等破壞性的軟件漏洞攻擊,建議您使用靜態(tài)代碼分析工具。正如前面所提到的,C和C++特別容易受到緩沖區(qū)溢出的影響。為了保護(hù)C和C++應(yīng)用程序,您可以使用Klocwork 或 Helix QAC 等靜態(tài)代碼分析工具,并運(yùn)行MISRA 或 CERT 等編碼標(biāo)準(zhǔn)來識(shí)別軟件漏洞。
靜態(tài)應(yīng)用安全測(cè)試(SAST)工具對(duì)于檢測(cè)軟件應(yīng)用中的安全漏洞至關(guān)重要。借助SAST工具,您可以在代碼開發(fā)過程中發(fā)現(xiàn)安全漏洞問題。
如果您的組織希望主動(dòng)防范安全威脅,請(qǐng)使用靜態(tài)代碼分析工具(如Klocwork或Helix QAC)!
-
代碼分析
+關(guān)注
關(guān)注
0文章
11瀏覽量
5749 -
Klocwork
+關(guān)注
關(guān)注
0文章
7瀏覽量
6459
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
緩沖區(qū)溢出攻擊模式及其防御的研究
基于中間匯編的緩沖區(qū)溢出檢測(cè)模型
基于狀態(tài)圖的緩沖區(qū)溢出攻擊分析
二進(jìn)制環(huán)境下的緩沖區(qū)溢出漏洞動(dòng)態(tài)檢測(cè)
基于可執(zhí)行代碼的緩沖區(qū)溢出檢測(cè)模型
二進(jìn)制掃描的緩沖區(qū)溢出漏洞探測(cè)技術(shù)
Windows緩沖區(qū)溢出攻擊的實(shí)例研究
緩沖區(qū)溢出攻擊的防護(hù)技術(shù)分析
緩沖區(qū)溢出攻擊的原理和防范技術(shù)分析
為什么緩沖區(qū)溢出會(huì)帶來危害?會(huì)帶來哪些危害?

消除IoT上的緩沖區(qū)溢出漏洞

消除物聯(lián)網(wǎng)上的緩沖區(qū)溢出漏洞
WebP圖像編解碼庫libwebp存在堆緩沖區(qū)溢出漏洞

評(píng)論