




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄3.1C和C++開發(fā)安全現(xiàn)狀3.2C和C++常見安全漏洞3.3C和C++安全編碼規(guī)范
1本章學(xué)習(xí)目標(biāo)1.了解C和C++開發(fā)的安全現(xiàn)狀;2.理解C和C++安全漏洞的原理;3.理解C和C++漏洞的防御方法;4.掌握C和C++安全編碼規(guī)范;2C和C++開發(fā)安全現(xiàn)狀3.1C和C++開發(fā)現(xiàn)狀C和C++擁有很好的內(nèi)存操作能力,工作效率更高。C和C++的應(yīng)用領(lǐng)域非常廣泛,包括操作系統(tǒng)、瀏覽器、嵌入式開發(fā),游戲引擎和各類編輯器。C和C++語言在2015,2016年TIOBE編程語言排行榜中穩(wěn)固二三名。C和C++的安全問題(1)指針的使用程序員可通過指針對(duì)內(nèi)存地址進(jìn)行顯示類型轉(zhuǎn)換,訪問對(duì)象的私有成員,破壞了對(duì)象的安全性,出現(xiàn)非法指針解引用、內(nèi)存泄漏等漏洞。(2)全局變量不加封裝局部變量的修改可能導(dǎo)致全局空間的變量取值發(fā)生變化,從而影響其他函數(shù)取值和運(yùn)行。(3)調(diào)用危險(xiǎn)函數(shù)標(biāo)準(zhǔn)C/C++語言庫中包含一些存在漏洞的危險(xiǎn)函數(shù),開發(fā)人員在編寫代碼時(shí)常調(diào)用這些危險(xiǎn)函數(shù)。C和C++常見安全漏洞3.2緩沖區(qū)溢出緩沖區(qū)溢出是指程序員向緩沖區(qū)讀寫的數(shù)據(jù)超出了緩沖區(qū)定義的容量,從而覆蓋了緩沖區(qū)后面的其他內(nèi)存數(shù)據(jù)的現(xiàn)象。攻擊者可通過控制用戶輸入人為覆寫棧幀或鄰接內(nèi)存的數(shù)據(jù)結(jié)構(gòu),從而執(zhí)行構(gòu)造的惡意代碼。典型的緩沖區(qū)溢出漏洞有心臟流血漏洞(OpenSSLHeartbleed),攻擊者通過構(gòu)造特殊的數(shù)據(jù)包使得用戶心跳包中無法提供足夠多的數(shù)據(jù),從而導(dǎo)致memcpy函數(shù)把SSLv3記錄之后的數(shù)據(jù)直接輸出。釋放后使用釋放后使用(UseAfterFree-UAF)漏洞是指程序中錯(cuò)誤的保留了已釋放內(nèi)存對(duì)象的引用,繼續(xù)訪問已釋放內(nèi)存的行為。攻擊流程:(1)攻擊者在內(nèi)存釋放對(duì)象A時(shí)大量申請(qǐng)與A同樣大小的對(duì)象X,使A釋放的內(nèi)存分配給X。(2)在繼續(xù)使用引用b時(shí),由于A內(nèi)存已被X占據(jù),攻擊者可使用引用b執(zhí)行任意代碼。整型溢出整數(shù)溢出是指由于程序員將數(shù)據(jù)放入了比它本身小的存儲(chǔ)空間中,而出現(xiàn)的溢出現(xiàn)象。三類整數(shù)操作可導(dǎo)致整型溢出漏洞:(1)無符號(hào)整數(shù)的下溢和上溢:因無符號(hào)整數(shù)不能識(shí)別負(fù)數(shù)導(dǎo)致。(2)符號(hào)問題:符號(hào)整數(shù)之間的比較;有符號(hào)整數(shù)的運(yùn)算;無符號(hào)整數(shù)和有符號(hào)整數(shù)的對(duì)比。(3)截?cái)鄦栴}:在高位數(shù)的整數(shù)(如32位)復(fù)制到低位數(shù)的整數(shù)(如16位)時(shí)發(fā)生的溢出現(xiàn)象。空指針解引用空指針解引用是指在引用指向空地址單元的指針變量時(shí)產(chǎn)生的空指針引用故障。空指針引用故障可能導(dǎo)致系統(tǒng)崩潰、拒絕服務(wù)等諸多不良后果。典型例子:deep—rev—state_process()函數(shù)在關(guān)閉了套接字后仍然允許接受操作,若沒有阻止攻擊者對(duì)己經(jīng)廢棄套接字的操作,可造成空指針引用。格式化字符串格式化字符串漏洞是指軟件使用了格式化字符串作為參數(shù),且該格式化字符串來自外部輸入。觸發(fā)格式化字符換漏洞的函數(shù)有printf、sprintf、fprintf等print家族函數(shù)。格式化字符串的利用分為兩種:(1)有binary且格式化字符串在棧中:可直接修改函數(shù)返回地址,利用%n來寫入數(shù)據(jù)以修改控制流。(2)有binary且格式化字符串不在棧中:通過構(gòu)造跳板來實(shí)現(xiàn)利用。內(nèi)存泄漏內(nèi)存泄漏是指程序中己動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等后果。內(nèi)存泄漏以產(chǎn)生的方式可以分為四類:(1)常發(fā)性內(nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼會(huì)被多次執(zhí)行到,每次被執(zhí)行時(shí)都會(huì)導(dǎo)致一塊內(nèi)存泄漏。(2)偶發(fā)性內(nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會(huì)發(fā)生。(3)一次性內(nèi)存泄漏:發(fā)生內(nèi)存泄漏的代碼只會(huì)被執(zhí)行一次,總會(huì)有一塊且僅有一塊內(nèi)存發(fā)生泄漏。(4)隱式內(nèi)存泄漏:程序在運(yùn)行過程中不停的分配內(nèi)存,但是直到結(jié)束的時(shí)候才釋放內(nèi)存。二次釋放二次釋放(DoubleFree)是指程序在釋放一塊內(nèi)存后沒有將指向這塊內(nèi)存的所有指針清零或回收,并在其他地方再次將指向同一塊內(nèi)存單元的指針交給內(nèi)存分配器去進(jìn)行釋放操作。二次漏洞的利用:(1)在釋放對(duì)象A時(shí)申請(qǐng)同樣大小的對(duì)象B,在對(duì)象A被釋放后,二次釋放對(duì)象A,此時(shí)實(shí)際上釋放了B的內(nèi)存。(2)在對(duì)象A被二次釋放時(shí)申請(qǐng)同樣大小對(duì)象X,此時(shí)可調(diào)用b的方法執(zhí)行任意代碼。類型混淆類型混淆漏洞指程序使用一種類型初始化指針、對(duì)象等資源,而在隨后使用另外一種(并不兼容的)類型對(duì)這些資源進(jìn)行訪問。典型例子:Word在解析docx文檔處理displacedByCustomXML屬性時(shí)未對(duì)customXML對(duì)象進(jìn)行驗(yàn)證,其可傳入其他標(biāo)簽對(duì)象進(jìn)行處理,造成類型混淆,導(dǎo)致任意內(nèi)存寫入和遠(yuǎn)程任意代碼執(zhí)行。未初始化漏洞未初始化漏洞是指程序中變量或?qū)ο笪促x予初始值就直接使用的問題,可能導(dǎo)致信息泄漏和任意代碼執(zhí)行。函數(shù)B可通過在變量地址出寫入構(gòu)造的任意值,從而對(duì)A函數(shù)的執(zhí)行造成不可估計(jì)的影響。C和C++安全編碼規(guī)范3.3編碼規(guī)范(1)代碼中避免硬編碼明文口令、密碼、身份證等用戶敏感數(shù)據(jù)。(2)對(duì)不安全C和C++庫函數(shù)進(jìn)行重寫后再調(diào)用。C++中的字符串相關(guān)庫函數(shù)均為不安全函數(shù),當(dāng)相關(guān)參數(shù)可以被外界控制時(shí)就會(huì)存在溢出漏洞,重寫可在函數(shù)內(nèi)部檢查輸入?yún)?shù)的合法性。(3)定義了指針成員變量、靜態(tài)成員變量的類必須重寫拷貝構(gòu)造函數(shù)。在C++中,有三種情況需要調(diào)用拷貝構(gòu)造函數(shù):①對(duì)象以值傳遞的方式傳遞給函數(shù)參數(shù)。②對(duì)象以值傳遞的方式從函數(shù)返回。③對(duì)象需要使用另外一個(gè)對(duì)象進(jìn)行初始化。編碼規(guī)范(4)避免通過日志代碼打印明文密碼等敏感信息。(5)定義為基類的類的析構(gòu)函數(shù)必須定義為虛函數(shù).(6)線程安全:在多線程的環(huán)境中考慮并發(fā)、線程同步、互斥鎖等問題,任何操作都需要考慮有其他線程來競(jìng)爭(zhēng)系統(tǒng)當(dāng)前擁有的資源。(7)不安全加解密算法檢查。不可逆加密算法:m
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025汽車零部件購銷合同示范文本
- 2025年非金屬礦物制品:耐火項(xiàng)目合作計(jì)劃書
- 2025年沼氣專用發(fā)電裝置項(xiàng)目合作計(jì)劃書
- 2025醫(yī)療機(jī)構(gòu)設(shè)備購貨合同模板
- 2025房產(chǎn)評(píng)估委托合同
- 2025年新型全液壓鉆機(jī)項(xiàng)目合作計(jì)劃書
- 七年級(jí)地理結(jié)業(yè)考試高考銜接型選擇題(100 題)
- 2025年智能電能表及配件合作協(xié)議書
- 2025年兒童心理咨詢師考試試題及答案展示
- 2025年高壓自動(dòng)重合器合作協(xié)議書
- 黑臭水系治理工程監(jiān)理大綱
- 溫度顯示與報(bào)警課程設(shè)計(jì)
- 國有土地使用權(quán)的評(píng)估與出讓管理
- 延髓梗死護(hù)理查房課件
- 2023年標(biāo)準(zhǔn)化工程師考試真題模擬匯編(共402題)
- 8.1陶瓷器及宋代五大名窯(全國導(dǎo)游基礎(chǔ)知識(shí)-第五版-)
- 中等職業(yè)學(xué)校語文課程標(biāo)準(zhǔn)(2020年版)(word精排版)
- 托管專項(xiàng)施工方案
- 汽車產(chǎn)品可靠性工程框架
- 風(fēng)電項(xiàng)目開發(fā)流程教學(xué)課件
- 泌尿外科前列腺增生一病一品
評(píng)論
0/150
提交評(píng)論