[發(fā)明專利]一種高效且高可用的空間內(nèi)存錯(cuò)誤檢測(cè)方法有效
| 申請(qǐng)?zhí)枺?/td> | 201410005315.5 | 申請(qǐng)日: | 2014-01-06 |
| 公開(公告)號(hào): | CN103745755B | 公開(公告)日: | 2017-01-11 |
| 發(fā)明(設(shè)計(jì))人: | 丁麗萍;趙曉柯;盧國(guó)慶 | 申請(qǐng)(專利權(quán))人: | 中國(guó)科學(xué)院軟件研究所;公安部第三研究所 |
| 主分類號(hào): | G11C29/56 | 分類號(hào): | G11C29/56 |
| 代理公司: | 北京君尚知識(shí)產(chǎn)權(quán)代理事務(wù)所(普通合伙)11200 | 代理人: | 余長(zhǎng)江 |
| 地址: | 100190 *** | 國(guó)省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 高效 可用 空間 內(nèi)存 錯(cuò)誤 檢測(cè) 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明屬于計(jì)算機(jī)軟件內(nèi)存安全技術(shù)領(lǐng)域,具體涉及一種空間內(nèi)存錯(cuò)誤檢測(cè)方法。
背景技術(shù)
程序的內(nèi)存錯(cuò)誤通常分為兩類:空間內(nèi)存錯(cuò)誤和時(shí)間內(nèi)存錯(cuò)誤??臻g內(nèi)存錯(cuò)誤包括數(shù)組越界錯(cuò)誤(如,緩沖區(qū)溢出),未初始化指針解引用,無效的類型轉(zhuǎn)換錯(cuò)誤,格式化字符串錯(cuò)誤等等。時(shí)間內(nèi)存錯(cuò)誤包括懸掛指針解引用,雙重釋放,無效釋放等等。內(nèi)存錯(cuò)誤大多存在于C/C++語言中,因?yàn)楦鶕?jù)C/C++語言標(biāo)準(zhǔn),數(shù)組越界,空指針解引用,讀一個(gè)未初始化的變量,會(huì)導(dǎo)致未定義的行為。攻擊者可以通過利用程序的內(nèi)存錯(cuò)誤來控制程序的執(zhí)行。在CWE/SANS發(fā)布的排名前25個(gè)最危險(xiǎn)的軟件錯(cuò)誤中,內(nèi)存錯(cuò)誤占據(jù)4個(gè)。另外根據(jù)NIST的NVD漏洞數(shù)據(jù)庫的報(bào)告,在2011年的1818個(gè)高危漏洞中,超過1/3都是由內(nèi)存錯(cuò)誤引起的。
目前,空間內(nèi)存錯(cuò)誤的檢測(cè)方法可以分為兩種:基于內(nèi)存對(duì)象邊界的檢測(cè)和基于指針邊界的檢測(cè)?;趦?nèi)存對(duì)象邊界的檢測(cè)通常使用一個(gè)單獨(dú)的數(shù)據(jù)結(jié)構(gòu)來記錄和追蹤程序運(yùn)行時(shí)分配的內(nèi)存區(qū)域的邊界信息,當(dāng)使用指針訪問一個(gè)內(nèi)存區(qū)域時(shí),使用記錄的內(nèi)存對(duì)象邊界信息來檢測(cè)指針是否指向該內(nèi)存區(qū)域。這種方法雖然能夠提高程序的兼容性,能夠透明的與庫函數(shù)進(jìn)行交互,但是該方法由于使用的數(shù)據(jù)結(jié)構(gòu)比較復(fù)雜,導(dǎo)致程序的性能開銷比較高,而且不能檢測(cè)使用指針訪問一個(gè)內(nèi)存對(duì)象中的子內(nèi)存對(duì)象的錯(cuò)誤。基于指針邊界的檢測(cè)將指針指向的內(nèi)存對(duì)象的邊界信息與每個(gè)指針關(guān)聯(lián)起來,當(dāng)指針訪問內(nèi)存對(duì)象時(shí),使用這些邊界信息檢測(cè)指針是否在內(nèi)存對(duì)象內(nèi)。在實(shí)現(xiàn)這種方法時(shí),通常會(huì)修改指針的內(nèi)存表示,將指針指向的內(nèi)存對(duì)象的邊界信息與該指針存儲(chǔ)在一起。這種方法雖然避免了查找邊界信息造成的性能開銷,但是因?yàn)橹羔樀膬?nèi)存表示被修改,所以該方法使得程序無法與庫函數(shù)進(jìn)行透明的交互,降低了程序的兼容性。
賓夕法尼亞大學(xué)的Santosh于09年在PLDI會(huì)議上發(fā)表論文《SoftBound:Highly?Compatible?and?Complete?Spatial?Memory?Safety?for?C》,該論文提出了一種基于指針邊界的方法,通過將指針的邊界信息與指針分開存儲(chǔ)來提高程序與使用的庫函數(shù)的兼容性,并可以檢測(cè)指針訪問子內(nèi)存對(duì)象時(shí)出現(xiàn)的錯(cuò)誤。但是這種方法的性能開銷仍然比較高,而且,當(dāng)檢測(cè)到程序的內(nèi)存錯(cuò)誤時(shí),程序就會(huì)終止運(yùn)行,這樣會(huì)降低程序的可用性,并且可以導(dǎo)致拒絕服務(wù)攻擊。
發(fā)明內(nèi)容
針對(duì)目前基于指針邊界的空間內(nèi)存錯(cuò)誤檢測(cè)方法中存在的性能開銷高、兼容度低、可用性低的問題,本發(fā)明的目的在于提供一種低性能開銷、高兼容度且高可用性的空間內(nèi)存錯(cuò)誤檢測(cè)方法,以更好且更高效地實(shí)時(shí)檢測(cè)程序運(yùn)行過程中出現(xiàn)的內(nèi)存錯(cuò)誤,且保證在發(fā)生內(nèi)存錯(cuò)誤時(shí),程序可以繼續(xù)正常運(yùn)行,防止攻擊者實(shí)施拒絕服務(wù)攻擊。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種高效且高可用的空間內(nèi)存錯(cuò)誤檢測(cè)方法,包括以下步驟:
1)對(duì)程序進(jìn)行靜態(tài)污點(diǎn)分析,標(biāo)記污點(diǎn)指針;
2)對(duì)程序進(jìn)行編譯生成中間代碼,并構(gòu)建內(nèi)存影子空間;
3)分析程序的中間代碼,創(chuàng)建該污點(diǎn)指針的base和bound邊界信息,并存儲(chǔ)到所述的內(nèi)存影子空間;
4)對(duì)程序中間代碼中的指針運(yùn)算、數(shù)組索引和指針賦值三種指令進(jìn)行分析,將參與運(yùn)算的被標(biāo)記為污點(diǎn)指針的原始指針的邊界信息拷貝到運(yùn)算后得到的結(jié)果指針對(duì)應(yīng)的影子空間中;
5)對(duì)程序中使用污點(diǎn)指針進(jìn)行寫內(nèi)存的指令,進(jìn)行指針邊界檢測(cè),根據(jù)污點(diǎn)指針的base和bound邊界信息確定的內(nèi)存邊界,檢測(cè)出空間內(nèi)存錯(cuò)誤。
進(jìn)一步地,步驟1)中,標(biāo)記污點(diǎn)指針又包括以下步驟:
1-1)將程序調(diào)用的外部庫函數(shù)返回和修改的數(shù)據(jù)標(biāo)記為污點(diǎn)(taint),其中“數(shù)據(jù)”包括指針類型數(shù)據(jù)和非指針類型數(shù)據(jù);
1-2)對(duì)程序進(jìn)行數(shù)據(jù)流分析,傳播污點(diǎn)標(biāo)記;
1-3)對(duì)程序進(jìn)行指針別名分析,將與上述污點(diǎn)指針是別名關(guān)系的指針標(biāo)記為taint。
進(jìn)一步地,步驟1-1)中,還包括將程序所接受的用戶輸入的參數(shù)值標(biāo)記為taint。
進(jìn)一步地,步驟1-1)中所述的外部庫函數(shù)包括從文件中讀取數(shù)據(jù)的庫函數(shù)和從網(wǎng)絡(luò)中接收數(shù)據(jù)的庫函數(shù),所述的用戶輸入的參數(shù)值是指程序的命令行參數(shù)。
進(jìn)一步地,步驟1-2)中所述的數(shù)據(jù)流分析是程序間的數(shù)據(jù)流分析,步驟1-3)中所述的指針別名分析是指程序間的指針別名分析。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于中國(guó)科學(xué)院軟件研究所;公安部第三研究所,未經(jīng)中國(guó)科學(xué)院軟件研究所;公安部第三研究所許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410005315.5/2.html,轉(zhuǎn)載請(qǐng)聲明來源鉆瓜專利網(wǎng)。
- 同類專利
- 專利分類
G11C 靜態(tài)存儲(chǔ)器
G11C29-00 存儲(chǔ)器正確運(yùn)行的校驗(yàn);備用或離線操作期間測(cè)試存儲(chǔ)器
G11C29-02 .損壞的備用電路的檢測(cè)或定位,例如,損壞的刷新計(jì)數(shù)器
G11C29-04 .損壞存儲(chǔ)元件的檢測(cè)或定位
G11C29-52 .存儲(chǔ)器內(nèi)量保護(hù);存儲(chǔ)器內(nèi)量中的錯(cuò)誤檢測(cè)
G11C29-54 .設(shè)計(jì)檢測(cè)電路的裝置,例如,可測(cè)試性設(shè)計(jì)
G11C29-56 .用于靜態(tài)存儲(chǔ)器的外部測(cè)試裝置,例如,自動(dòng)測(cè)試設(shè)備





