2015版-CISP0209軟件安全開發(fā)-v3.0PPT課件_第1頁
2015版-CISP0209軟件安全開發(fā)-v3.0PPT課件_第2頁
2015版-CISP0209軟件安全開發(fā)-v3.0PPT課件_第3頁
2015版-CISP0209軟件安全開發(fā)-v3.0PPT課件_第4頁
2015版-CISP0209軟件安全開發(fā)-v3.0PPT課件_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、2021/7/231軟件安全開發(fā)軟件安全開發(fā)培訓(xùn)機(jī)構(gòu)名稱講師名字版本:3.0發(fā)布日期:2014-12-1生效日期:2015-1-12課程內(nèi)容課程內(nèi)容軟件安全開發(fā)軟件安全開發(fā)知識體知識域軟件安全軟件安全開發(fā)概況開發(fā)概況軟件安全需求和設(shè)計軟件安全需求和設(shè)計軟件安全編碼軟件安全編碼軟件安全測試軟件安全測試軟件安全開發(fā)軟件安全開發(fā)的關(guān)鍵工作的關(guān)鍵工作軟件安全開發(fā)的必要性軟件安全開發(fā)的必要性軟件安全開發(fā)背景軟件安全開發(fā)背景知識子域軟件安全開發(fā)模型及研究軟件安全開發(fā)模型及研究3知識域:軟件安全開發(fā)概況知識域:軟件安全開發(fā)概況v知識子域:軟件安全開發(fā)背景 了解軟件的發(fā)展和產(chǎn)生的安全問題 了解軟件安全問題產(chǎn)生

2、的原因4軟件安全的基本概念軟件安全的基本概念v軟件的定義 計算機(jī)程序、方法、規(guī)則和相關(guān)的文檔資料以及在計算機(jī)上運(yùn)行時所需的數(shù)據(jù)(IEEE)v軟件安全 采用系統(tǒng)化、規(guī)范化、數(shù)量化的方法來指導(dǎo)構(gòu)建安全的軟件v軟件安全基本概念 使安全成為軟件開發(fā)的必須部分 軟件安全工程化三個支柱:風(fēng)險管理、軟件安全切入點、安全知識5軟件安全問題廣泛存在軟件安全問題廣泛存在v軟件應(yīng)用廣泛 電腦游戲、火車票售票系統(tǒng)、多媒體教學(xué) 手機(jī)、航天飛機(jī)、人造衛(wèi)星 v軟件安全問題廣泛存在 運(yùn)行錯誤 售票系統(tǒng)反應(yīng)慢、連不上、崩潰 多媒體教學(xué)系統(tǒng)死機(jī) 黑客盜取泄漏的銀行密碼 v安全問題日益增加6軟件安全問題產(chǎn)生后果軟件安全問題產(chǎn)生后果

3、v軟件安全問題的后果 造成產(chǎn)品運(yùn)行不穩(wěn)定,得不到正確結(jié)果甚至崩潰 可靠性、可用性 被惡意攻擊,導(dǎo)致信息泄漏/數(shù)據(jù)破壞等后果 保密性、完整性v一些因軟件安全問題導(dǎo)致的嚴(yán)重后果 售票系統(tǒng)癱瘓 美國放射治療儀超劑量輻射事件 阿麗亞納5號火箭首發(fā)失敗事件 Stuxnet病毒攻擊伊朗布什爾核電站7漏洞情況統(tǒng)計漏洞情況統(tǒng)計v中國國家漏洞庫最近七年漏洞數(shù)量情況統(tǒng)計8軟件產(chǎn)生安全問題的原因軟件產(chǎn)生安全問題的原因v內(nèi)因 軟件開發(fā)安全意識淡薄 軟件開發(fā)缺乏安全知識 軟件趨向大型化和復(fù)雜化 軟件第三方擴(kuò)展增多v外因 軟件使用場景更具威脅9軟件越來越復(fù)雜軟件越來越復(fù)雜 Windows 系列軟件源代碼行數(shù)系列軟件源代碼

4、行數(shù)10漏洞與軟件安全漏洞與軟件安全v漏洞普遍存在 平均每1000行程序存在20個缺陷 (Dacey 2003) 采用嚴(yán)格的軟件開發(fā)質(zhì)量管理機(jī)制和多重測試環(huán)節(jié),軟件公司的缺陷率( 千行代碼): 普通軟件開發(fā)公司的缺陷密度為440個缺陷 高水平的軟件公司的缺陷密度為24個缺陷 美國NASA的軟件缺陷密度可達(dá)到0.1個缺陷v漏洞已經(jīng)成為危害軟件安全的主要因素 危及用戶對軟件的信任、業(yè)務(wù)運(yùn)營,還會危及一系列關(guān)鍵基礎(chǔ)設(shè)施和應(yīng)用11知識域:軟件安全開發(fā)概況知識域:軟件安全開發(fā)概況v知識子域:軟件安全開發(fā)的必要性 理解軟件安全保障的含義、思路和目標(biāo) 了解傳統(tǒng)軟件開發(fā)的局限性 理解軟件安全開發(fā)生命周期的概念

5、和必要性12需要安全的軟件需要安全的軟件v理想的安全軟件 不存在安全漏洞 能抵御各種攻擊威脅 按照預(yù)期的方式執(zhí)行:do what is intendeddo what is intendedv軟件安全保障的思路 通過在軟件開發(fā)生命周期各階段采取必要的、相適應(yīng)的安全措施來避免絕大多數(shù)的安全漏洞。 采取措施只能有效減少,但并不能完全杜絕所有的安全漏洞。13軟件安全保障軟件安全保障v軟件可以規(guī)避安全漏洞而按照預(yù)期的方式執(zhí)行其功能v目標(biāo):在軟件開發(fā)生命周期中提升軟件的安全性 可信賴性:無論是惡意而為還是無意疏忽,軟件都沒有可利用的漏洞存在 可預(yù)見性:對軟件執(zhí)行時其功能符合開發(fā)者的意圖的信心。 遵循性:

6、將(軟件開發(fā))跨學(xué)科的活動計劃并系統(tǒng)化,以確保軟件過程和軟件產(chǎn)品滿足需求、遵循相關(guān)標(biāo)準(zhǔn)。14軟件安全保障與風(fēng)險管理軟件安全保障與風(fēng)險管理v在軟件安全保障中,需要貫徹風(fēng)險管理的思想 “安全就是風(fēng)險管理”v軟件安全是以風(fēng)險管理為基礎(chǔ) 安全不必是完美無缺的,但風(fēng)險必須是能夠管理的v最適宜的軟件安全策略就是最優(yōu)的風(fēng)險管理對策 這是一個在有限資源前提下的最優(yōu)選擇問題 防范不足會造成直接的損失;防范過多又會造成間接的損失15傳統(tǒng)的軟件開發(fā)局限性傳統(tǒng)的軟件開發(fā)局限性 需要安全的軟件開發(fā)!需要安全的軟件開發(fā)!16軟件安全開發(fā)生命周期軟件安全開發(fā)生命周期v軟件安全開發(fā) 采取措施防止由于設(shè)計、開發(fā)、提交、升級或維

7、護(hù)中的缺陷而導(dǎo)致的系統(tǒng)脆弱性 20世紀(jì)末/21世紀(jì)初開始展開研究v安全軟件開發(fā)生命周期 安全軟件開發(fā)涵蓋了軟件開發(fā)整個生命周期 通過軟件開發(fā)的各個步驟來確保軟件的安全性,其目標(biāo)是確保安全的軟件得以成功17安全軟件開發(fā)生命周期安全軟件開發(fā)生命周期v將安全融入 在設(shè)計/開發(fā)/測試等過程中融入安全 在傳統(tǒng)的過程中增加安全過程v安全提前介入 NIST:在軟件發(fā)布以后進(jìn)行修復(fù)的代價是在軟件設(shè)計和編碼階段即進(jìn)行修復(fù)所花代價的30倍 軟件系統(tǒng)發(fā)布以后才進(jìn)行漏洞修復(fù)代價是最高的,且常常伴隨著軟件系統(tǒng)使用者的極大損失v實施軟件安全開發(fā) 規(guī)范指南 最佳實踐18降低解決軟件安全問題的代價降低解決軟件安全問題的代價v

8、早期發(fā)現(xiàn)并改正錯誤有以下優(yōu)點 在軟件開發(fā)生命周期中,后面的階段改正錯誤開銷比前面的階段要高出數(shù)倍 早期發(fā)現(xiàn)并改正錯誤可以減少時間和開銷19知識域:軟件安全開發(fā)概況知識域:軟件安全開發(fā)概況v知識子域:軟件安全開發(fā)模型及研究 了解安全開發(fā)生命周期(SDL)的發(fā)展歷程,理解SDL的主要內(nèi)容 了解使安全成為軟件開發(fā)必須的部分(BSI)系列模型 了解綜合的輕量級應(yīng)用安全過程(CLASP)的主要內(nèi)容 了解軟件保障成熟度模型(SAMM)的框架 了解各個模型的特點及適用性20可信計算安全開發(fā)生命周期可信計算安全開發(fā)生命周期v微軟,2002.1,蓋茨v安全開發(fā)生命周期SDL(The Trustworthy Co

9、mputing Security Development Lifecycle) 自 2004 起,SDL 作為全公司的計劃和強(qiáng)制政策,在將安全和隱私植入軟件和企業(yè)文化方面發(fā)揮了重要作用。 通過將整體和實踐方法相結(jié)合,SDL 致力于減少軟件中漏洞的數(shù)量和嚴(yán)重性。SDL 在開發(fā)過程的所有階段中均引入了安全和隱私。21SDLSDL發(fā)展歷史發(fā)展歷史v2002.1今 20 世紀(jì) 90 年代中期到后期 (Melissa) 和 21 世紀(jì)初期(Code Red、Nimda、UPnP 等)出現(xiàn)了一系列影響重大的惡意軟件事件,促使微軟重新考慮開發(fā)人員安全過程和策略22SDLSDL的階段和安全活動的階段和安全活動

10、v軟件安全開發(fā)生命階段 5+2個階段 16項必需的安全活動23SDL每個階段用到的工具每個階段用到的工具序號序號工具工具需求需求設(shè)計設(shè)計實現(xiàn)實現(xiàn)驗證驗證發(fā)布發(fā)布1SDL過程模板和MSF-Aglie+SDL過程模板2SDL威脅建模工具3Banned.h、SiteLock ATL模板、FxCop、C/C+源代碼分析工具、Anti-XSS庫、32位的CAT.NET、64位的CAT.NET4BinScope、MiniFuzz、SDL Regex Fuzzer、AppVerifier24IE采用采用SDL后的效果后的效果Source: Browser Vulnerability Analysis, Mi

11、crosoft Security Blog 27-NOV-2007采用采用SDL之前之前采用采用SDL之后之后漏洞總數(shù)降低了35%高危漏洞數(shù)降低了63%正式發(fā)布后12個月內(nèi)修復(fù)的漏洞總數(shù)25BSIBSI系列模型系列模型vBSI使安全成為軟件開發(fā)必須的部分 Building Security IN,BSI Gray McGraw,Cigital公司v在整個軟件開發(fā)生命周期中要確保將安全作為軟件的一個有機(jī)組成部分。 無須改變你的軟件開發(fā)方法 適用各種軟件開發(fā)生命周期v合作 NIST 美國國土安全部 大學(xué)(加州大學(xué)戴維斯分校、普林斯頓、萊斯)26軟件安全的三根支柱軟件安全的三根支柱v三根支柱 應(yīng)用風(fēng)

12、險管理 軟件安全的接觸點 知識27接觸點模型接觸點模型v接觸點,即在軟件開發(fā)生命周期中保障軟件安全 一套最優(yōu)方法、一種戰(zhàn)術(shù)性方法 在每一個開發(fā)階段上盡可能地避免和消除漏洞 “黑帽子”和“白帽子”28SSFSSFvSSF(Software Security Framework) 軟件安全框架監(jiān)管信息/情報SSDL接觸點部署策略和度量攻擊模式架構(gòu)分析滲透測試履約和策略安全特征和設(shè)計代碼審計軟件環(huán)境培訓(xùn)標(biāo)準(zhǔn)和需求安全測試配置管理和漏洞管理29BSIMMBSIMMvBSI成熟度模型 Building Security In Maturity Mode Gary McGraw、Brian Chess和S

13、ammy Migues 使用SSF對所有項目進(jìn)行描述 了解別人的安全項目過程,指導(dǎo)自己的安全項目v目標(biāo) 是對真實的軟件安全項目所開展的活動進(jìn)行量化 構(gòu)建和不斷發(fā)展軟件安全行動的指南vBSIMM 3.0 2011年 42個公司(Microsoft、Intel、Google、)30BSIMMBSIMM結(jié)果圖結(jié)果圖31CLASPCLASPv綜合的輕量應(yīng)用安全過程(Comprehensive, Lightweight Application Security Process (CLASP) )v選取了30個特定的基于角色的活動(activities),用于提升整個開發(fā)團(tuán)隊的安全意識,并針對這些活動給出

14、了相應(yīng)的指南、導(dǎo)則和檢查列表32CLASPCLASP介紹介紹v基于角色 項目經(jīng)理 、需求分析師 、軟件架構(gòu)師 、設(shè)計者 、實施人員 、集成和編譯人員 、測試者和測試分析師 、安全審計員v對于每個活動,CLASP描述了以下內(nèi)容 安全活動應(yīng)該在什么時間、應(yīng)該如何實施 如果不進(jìn)行這項安全活動,將會帶來的多大的風(fēng)險 如果實施這項安全活動,估計需要多少成本33SAMMSAMMvOWASP SAMM Software Assurance Maturity Mode 軟件保證成熟度模型 OWASP(開放Web應(yīng)用安全項目)v一個開放的框架,用以幫助制定并實施針對軟件安全特定風(fēng)險的策略 評估一個組織已有的軟件

15、安全實踐; 建立一個迭代的權(quán)衡的軟件安全保證計劃; 證明安全保證計劃帶來的實質(zhì)性改善; 定義并衡量組織中與安全相關(guān)的措施。 34SAMMSAMMv規(guī)定了四個軟件開發(fā)過程中的核心業(yè)務(wù)功能 治理:組織管理其軟件開發(fā)的過程和活動 構(gòu)造:組織在開發(fā)項目中確定目標(biāo)并開發(fā)軟件的過程與活動 驗證:組織測試和驗證軟件的過程與活動 部署:組織軟件發(fā)布的相關(guān)管理過程與活動v4個成熟度級別 0-3級35OWASP SAMMOWASP SAMM36各模型比較各模型比較37知識域:軟件安全開發(fā)關(guān)鍵工作知識域:軟件安全開發(fā)關(guān)鍵工作v知識子域:軟件安全需求和設(shè)計 了解軟件安全需求分析和安全設(shè)計的重要性 理解軟件安全設(shè)計基本

16、原則 理解影響系統(tǒng)安全性的6類威脅,以及威脅建模過程38軟件安全需求及安全設(shè)計的重要性軟件安全需求及安全設(shè)計的重要性v安全編碼?安全測試? 傳統(tǒng)方法:軟件發(fā)布后測試、等待修復(fù)Bug Gary McGraw :50%的安全問題由設(shè)計瑕疵引起 安全提前介入,效益高,成本低v設(shè)計缺陷舉例 Microsoft Bob 明文存儲口令,甚至將口令拿到客戶端對比驗證39軟件安全需求及安全設(shè)計的重要性軟件安全需求及安全設(shè)計的重要性v軟件安全需求和設(shè)計是開發(fā)安全軟件的基礎(chǔ)v軟件安全需求分析 以風(fēng)險管理為基礎(chǔ),建立“威脅”分析計劃 建立軟件安全需求定義,確保軟件安全需求定義正確 安全需求應(yīng)文檔化v軟件安全設(shè)計 軟

17、件系統(tǒng)的每一項需求,都應(yīng)該在軟件安全設(shè)計階段認(rèn)真考慮40安全設(shè)計原則安全設(shè)計原則v 最小特權(quán)v 權(quán)限分離v 最小共享v 完全中立v 心理可接受v 默認(rèn)故障處理v 經(jīng)濟(jì)機(jī)制v 不信任v 縱深防御v 保護(hù)最薄弱的環(huán)節(jié)v 公開設(shè)計v 隱私保護(hù)v 攻擊面最小化41受攻擊面概念受攻擊面概念v什么是受攻擊面 對一個軟件系統(tǒng)可以采取的攻擊方法集合,軟件的功能、API、接口、資源、數(shù)據(jù)存儲等都是受攻擊面v為什么要降低受攻擊面 一個軟件的攻擊面越大安全風(fēng)險就越大42降低受攻擊面的方法降低受攻擊面的方法v第一步:分析產(chǎn)品功能的重要性(是否必須)v第二步:分析從哪里訪問這些功能v第三步:采取合理措施(降低特權(quán))受攻

18、擊面增加遠(yuǎn)程訪問受限訪問本地訪問僅管理員訪問用戶訪問匿名訪問43降低軟件受攻擊面策略降低軟件受攻擊面策略v重要等級為低的功能:攻擊面大,取消該功能v重要等級為中的功能:攻擊面大,設(shè)置為非默認(rèn)開啟,需要用戶配置后才予以開啟v重要等級為高的功能:攻擊面大,關(guān)閉或限制一些接口方式,增加一些安全的保證措施或技術(shù)44減少軟件受攻擊面減少軟件受攻擊面較高受攻擊面較高受攻擊面較低受攻擊面較低受攻擊面默認(rèn)執(zhí)行默認(rèn)關(guān)閉打開網(wǎng)絡(luò)連接關(guān)閉網(wǎng)絡(luò)連接同時偵聽UDP和TCP流量僅偵聽TCP流量匿名訪問鑒別用戶訪問弱ACLs強(qiáng)ACLs管理員訪問普通用戶訪問因特網(wǎng)訪問本地子網(wǎng)訪問代碼以管理員或root權(quán)限運(yùn)行代碼以Netwo

19、rk Services、Local Services或自定義的低權(quán)限賬戶運(yùn)行統(tǒng)一缺省配置用戶可選的配置ActiveX控件.NET代碼標(biāo)記有腳本安全的ActiveX控件未標(biāo)記有腳本安全的ActiveX控件非SiteLocked ActiveX控件SiteLocked ActiveX控件45威脅建模威脅建模v什么是威脅建模 威脅建模是了解系統(tǒng)面臨的安全威脅,確定威脅風(fēng)險并通過適當(dāng)?shù)木徑獯胧┮越档惋L(fēng)險,提高系統(tǒng)安全性的過程。v為什么要威脅建模 幫助在設(shè)計階段充分了解各種安全威脅,并指導(dǎo)選擇適當(dāng)?shù)膽?yīng)對措施 對可能的風(fēng)險進(jìn)行管理 可以重新驗證其架構(gòu)和設(shè)計 有助于軟件的受攻擊面降低46威脅建模流程威脅建模

20、流程v確定對象v識別威脅v評估威脅v消減威脅47威脅建模流程威脅建模流程48STRIDE建模方法建模方法vSTRIDE建模 微軟SDL中提出 發(fā)現(xiàn)或糾正設(shè)計級(design-level)的安全問題SSpoolfing Identity假冒身份/欺騙標(biāo)識TTampering with data篡改數(shù)據(jù)RRepudiation抵賴IInformation Disclosure信息泄漏DDenial of Service拒絕服務(wù)EElevation of Privilege權(quán)限提升49理解理解STRIDE威脅威脅威脅安全屬性定義舉例Spoofing(哄騙)可鑒別性模仿其他人或?qū)嶓w偽裝成或ntdll.

21、dll。Tampering(篡改)完整性修改數(shù)據(jù)或代碼修改硬盤、DVD或網(wǎng)絡(luò)數(shù)據(jù)包中的DLLRepudiation(抵賴) 不可抵賴性 聲稱沒有執(zhí)行某個動作“我沒有發(fā)送過那封電子郵件”,“我沒有修改過那個文件”,“親愛的,我確實沒有訪問過那個網(wǎng)站!”Information Disclosure(信息泄露)機(jī)密性把信息披露給那些無權(quán)知道的人允許某人閱讀Windows源代碼;公布某個Web網(wǎng)站的用戶清單。Denial of Service(拒絕服務(wù))可用性拒絕為用戶提供服務(wù)使得Windows或Web網(wǎng)站崩潰,發(fā)送數(shù)據(jù)包并耗盡CPU時間,將數(shù)據(jù)包路由到某黑洞中。Elevation of Privil

22、ege(權(quán)限提升)授權(quán)獲得非授權(quán)訪問權(quán)允許遠(yuǎn)程因特網(wǎng)用戶執(zhí)行命令,讓受限用戶獲得管理員權(quán)限。4950消減威脅舉例消減威脅舉例v消減威脅威脅類型消減機(jī)制舉例消減技術(shù)舉例假冒認(rèn)證認(rèn)證方式:Cookie認(rèn)證、Kerberos認(rèn)證、PKI纂改完整性哈希函數(shù)、消息認(rèn)證碼、數(shù)字簽名、防篡改協(xié)議抵賴非抵賴性服務(wù)強(qiáng)認(rèn)證、安全審計、數(shù)字簽名、時間戳信息泄露保密性加密、保護(hù)秘密、訪問控制、不保存秘密、隱私保護(hù)協(xié)議拒絕服務(wù)可用性認(rèn)證、訪問控制、過濾、流量控制、授權(quán)特權(quán)提升授權(quán)訪問控制列表、最小權(quán)限運(yùn)行51知識域:軟件安全開發(fā)關(guān)鍵工作知識域:軟件安全開發(fā)關(guān)鍵工作v知識子域:軟件安全編碼 理解通用安全編碼準(zhǔn)則:驗證輸入

23、、避免緩沖區(qū)溢出、程序內(nèi)部安全、安全調(diào)用組件、禁止使用不安全函數(shù)等 理解使用安全編譯技術(shù)對提高編碼安全水平的作用,了解常用安全編譯技術(shù) 理解源代碼審核的目的及方式,了解常見源代碼靜態(tài)審核工具52通用安全編碼準(zhǔn)則通用安全編碼準(zhǔn)則v驗證輸入v避免緩沖區(qū)溢出v程序內(nèi)部安全v安全調(diào)用組件v禁止使用不安全函數(shù)53驗證輸入驗證輸入v安全程序第一道防線是檢查每一個不可信的輸入 DirectXMIDI 庫,難以檢查所有的輸入,可能導(dǎo)致IE被惡意利用v檢查、驗證或者過濾輸入 不讓惡意數(shù)據(jù)進(jìn)入程序后續(xù)處理 類似網(wǎng)絡(luò)中部署防火墻v何處檢查 最初接收數(shù)據(jù)時 (第一次)使用數(shù)據(jù)時54驗證輸入驗證輸入常見輸入源常見輸入源

24、v命令行 參數(shù)數(shù)量、數(shù)據(jù)格式、內(nèi)容v環(huán)境變量 環(huán)境變量可能超出期望 有的環(huán)境變量存儲格式存在危險v文件 不信任可以被不可信用戶控制的文件內(nèi)容 不信任臨時文件v網(wǎng)絡(luò) 來自網(wǎng)絡(luò)的數(shù)據(jù)是“高度不可信的”v其他來源55驗證輸入驗證輸入常見數(shù)據(jù)類型常見數(shù)據(jù)類型v字符串 確定合法范圍,拒絕非法字符(串) 0(NIL) 行結(jié)束編碼 0 x0a(unix) 0 x0d 0 x0a (dos, windows) 0 x0d (APPLE MacOS) 0 x85 (IBM OS/390) 特定字符 系統(tǒng)字符 分割字符56驗證輸入驗證輸入常見數(shù)據(jù)類型常見數(shù)據(jù)類型v數(shù)字 數(shù)字檢查(正則表達(dá)式/ASCII值) 負(fù)數(shù)檢

25、查(大數(shù)溢出為負(fù)數(shù)) Sendamil 攻擊 合法范圍檢查v文件名 最好不讓用戶設(shè)置文件名 避免特殊字符 . / - -rf ./ com157驗證輸入驗證輸入常見數(shù)據(jù)類型常見數(shù)據(jù)類型v電子郵件地址 限制合法的電子郵件地址vUTF-8 變長編碼vURI/URL 非法地址 在合法地址后面增加惡意內(nèi)容58避免緩沖區(qū)溢出避免緩沖區(qū)溢出v緩沖區(qū)溢出 緩沖區(qū):包含相同數(shù)據(jù)類型的實例的一個連續(xù)計算機(jī)內(nèi)存塊 溢出:數(shù)據(jù)被添加到分配給該緩沖區(qū)的內(nèi)存塊之外v外部數(shù)據(jù)比目標(biāo)空間大v是一個非常普遍而且嚴(yán)重的問題59避免緩沖區(qū)溢出避免緩沖區(qū)溢出v溢出后果 攻擊者可以使遠(yuǎn)程服務(wù)程序或者本地程序崩潰 攻擊者可以設(shè)計溢出后

26、執(zhí)行的代碼vC/C+語言 語言特性決定 大量的庫函數(shù)存在溢出 strcpy、strcat、gets等v其他語言 調(diào)用C語言庫 C#允許設(shè)置“不安全”例程60避免緩沖區(qū)溢出避免緩沖區(qū)溢出解決辦法解決辦法v解決辦法 編碼避免緩沖區(qū)溢出 填充數(shù)據(jù)時計算邊界、動態(tài)分配內(nèi)存、控制輸入 使用替代的安全函數(shù)或函數(shù)庫 使用沒有緩沖區(qū)溢出問題的函數(shù):strncpy、strncat、C+中std:string 使用替代庫:Libmib、libsafe 使用更新更安全的編譯環(huán)境,打開具有安全防御機(jī)制的安全編譯選項 StackGuard、ProPolice、/GS 非執(zhí)行的堆棧防御 不可在堆棧上執(zhí)行代碼61程序內(nèi)部安

27、全程序內(nèi)部安全v程序內(nèi)部接口安全 程序內(nèi)部接口數(shù)據(jù)的檢查 assertv異常安全處理 檢測異常,安全處理各種可能運(yùn)行路徑 檢測到某些錯誤行為/數(shù)據(jù),必須以合適的方式處理,保證程序運(yùn)行安全 必要時立即拒絕服務(wù),甚至不回送詳細(xì)的錯誤代碼62程序內(nèi)部安全程序內(nèi)部安全v最小化反饋 避免給予不可靠用戶過多的信息 成功或失敗 作為跟蹤檢查的日志可以記錄較為詳細(xì)的信息 認(rèn)證程序在認(rèn)證前盡量少給信息(版本) 如果程序接受了密碼,不要返回它v避免拒絕服務(wù)攻擊 輸入錯誤盡快返回 設(shè)置超時 延時服務(wù)63程序內(nèi)部安全程序內(nèi)部安全v避免競爭條件 訪問共享資源時(文件/變量)沒有被適當(dāng)?shù)乜刂?使用原子操作 使用鎖操作避免

28、死鎖v安全使用臨時文件 很多安全漏洞發(fā)生在訪問已知文件名或可猜測的臨時文件時64安全調(diào)用其他組件安全調(diào)用其他組件v應(yīng)用程序?qū)嶋H上幾乎都不會是自包含的,它們通常都會調(diào)用其他組件 底層的操作系統(tǒng) 數(shù)據(jù)庫 可重用的庫 網(wǎng)絡(luò)服務(wù)(WEB、DNS)65安全調(diào)用其他組件安全調(diào)用其他組件v組件安全 檢查組件文檔,搜索相關(guān)說明 gets 隨機(jī)數(shù) 使用經(jīng)過認(rèn)可的組件 盡可能不調(diào)用外部命令,如果不得已要調(diào)用,必須嚴(yán)格檢查參數(shù) system、open、exec、66安全調(diào)用其他組件安全調(diào)用其他組件v返回值安全 一定要檢查返回值,調(diào)用是否成功 成功時檢查 返回值,是否按照期望值處理 數(shù)據(jù)中可能含有 NUL 字符、無效

29、字符或其他可能產(chǎn)生問題的東西 錯誤時檢查 錯誤碼v傳遞數(shù)據(jù)安全 視安全需求和安全環(huán)境 考慮傳輸加密,包括密碼算法和安全協(xié)議67禁止使用不安全函數(shù)禁止使用不安全函數(shù)v編碼中禁止使用的危險函數(shù)舉例禁止使用禁止使用strcpy, wcscpy, trcpy, strcpy, _tcscpy, _ftcscpy,_mbscpystrcat, wcscat, trcat, strcat, _tcscat, _ftcscat,_mbscatvsprintf, vswprintf, wvsprintf, wvnsprintf, _vstprintfsprintf, swprintf, wsprintf, w

30、nsprintf, _stprintfgets, _getws, _getts68安全編譯安全編譯v使用最新版本編譯器與支持工具v使用編譯器內(nèi)置防御特性 gcc -Wall -Wpointer-arith -Wstrict-prototypes -O2 69源代碼審核源代碼審核v源代碼審核就是檢查源代碼,檢測并報告源代碼中的可能導(dǎo)致安全弱點的薄弱之處。v人工審核 費(fèi)時費(fèi)力 容易遺漏v工具審核 速度快,自動 可升級知識庫 源代碼審核源代碼審核關(guān)注編碼中的實現(xiàn)缺陷,通常關(guān)注編碼中的實現(xiàn)缺陷,通常通過靜態(tài)分析工具進(jìn)行,它們掃描源代碼,能通過靜態(tài)分析工具進(jìn)行,它們掃描源代碼,能夠發(fā)現(xiàn)大約夠發(fā)現(xiàn)大約50

31、%50%的安全問題。的安全問題。70代碼審核工具代碼審核工具v商業(yè)工具 Coverity Fortify Ounce Labs SecureSoftwarev免費(fèi)/開源工具 BOON Cqual Xg+ FindBugs71“好好”的源代碼分析工具的源代碼分析工具v安全性 安全審核,不要以功能為主v多層性 軟件的多層架構(gòu)、多層平臺、多種語言v可擴(kuò)展性 擴(kuò)展規(guī)則、擴(kuò)展技術(shù)v知識性 主用于分析,開發(fā)者也能“學(xué)到” 安全編程知識v集成性 支持與IDE集成,支持make、ant等工具72知識域:軟件安全開發(fā)關(guān)鍵工作知識域:軟件安全開發(fā)關(guān)鍵工作v知識子域:軟件安全編碼 理解通用安全編碼準(zhǔn)則:驗證輸入、避免緩沖區(qū)溢出、程序內(nèi)部安全、安全調(diào)用組件、禁止使用不安全函數(shù)等 理解使用安全編譯技術(shù)對提高編碼安全水平的作用,了解常用安全編譯技術(shù) 理解源代碼審核的目的及方式,了解常見源代碼靜態(tài)審核工具73為什么要軟件安全測試?為什么要軟件安全測試?v軟件測試 按照特定規(guī)程,發(fā)現(xiàn)軟件錯誤的過程。 檢查軟件是否滿足規(guī)定的要求,或是清楚地了解預(yù)期結(jié)果與實際結(jié)果之間的差異 其目的在于發(fā)現(xiàn)軟件中的錯誤v軟件安全測試 有關(guān)驗證軟件安全等級和識別潛在安全缺陷的過程 查找

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論