軟件安全開(kāi)發(fā)生命周期概述_第1頁(yè)
軟件安全開(kāi)發(fā)生命周期概述_第2頁(yè)
軟件安全開(kāi)發(fā)生命周期概述_第3頁(yè)
軟件安全開(kāi)發(fā)生命周期概述_第4頁(yè)
軟件安全開(kāi)發(fā)生命周期概述_第5頁(yè)
已閱讀5頁(yè),還剩68頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20101軟件安全開(kāi)發(fā)生命周期軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20102 軟件安全開(kāi)發(fā)生命周期(SDL) 基于WEB應(yīng)用程序的SDL目錄7Safe Company Overview

2、 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20103 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20104 簡(jiǎn)介 安全開(kāi)發(fā)周期,即Security Development Lifecycle (SDL),是

3、微軟提出的從安全角度指導(dǎo)軟件開(kāi)發(fā)過(guò)程的管理模式。SDL不是一個(gè)空想的理論模型。它是微軟為了面對(duì)現(xiàn)實(shí)世界中安全挑戰(zhàn),在實(shí)踐中的一步步發(fā)展起來(lái)的軟件開(kāi)發(fā)模式。 典型的軟件開(kāi)發(fā)流程中,如瀑布模型,中心圍繞著產(chǎn)品功能,完全沒(méi)有安全方面的考慮。這樣的開(kāi)發(fā)流程可以造就功能上相對(duì)完善的軟件,但是無(wú)法滿足在安全上的需要。由于軟件開(kāi)發(fā)過(guò)程中未進(jìn)行任何有效的安全控制措施,導(dǎo)致軟件開(kāi)發(fā)后由于其固有的安全隱患所引起的安全事件頻頻發(fā)生,給黑客及惡意人員可趁之機(jī),由此導(dǎo)致的經(jīng)濟(jì)損失不可估量。 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 20

4、09Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20105 雖然目前企業(yè)和組織已經(jīng)逐步意識(shí)到軟件安全的重要性,但是他們把目光更多的聚焦到了軟件開(kāi)發(fā)后的漏洞掃描或滲透測(cè)試,盡管這個(gè)過(guò)程能夠發(fā)現(xiàn)和解決大多數(shù)的安全隱患,但是后期的安全評(píng)估和安全整改,將帶來(lái)更大的成本投入和人力投入;甚至由于開(kāi)發(fā)人員的流動(dòng)導(dǎo)致許多安全漏洞無(wú)法得到解決。據(jù)美國(guó)國(guó)家標(biāo)準(zhǔn)局(NIST)早年發(fā)表的一份調(diào)查報(bào)告估計(jì),更好的安全控制措施將為后期安全整改的總體成本節(jié)省三分之一以上的費(fèi)用,且有效規(guī)避70%以上由于軟件安全隱患所引發(fā)的安全事件。 軟件安全開(kāi)發(fā)生命周期7Safe C

5、ompany Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20106軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20107 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 20

6、09Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20108 安全需求分析設(shè)定安全目標(biāo) 在需求分析階段,加入以下的安全考慮 q產(chǎn)品提供的安全功能q產(chǎn)品如何安全的與用戶(或其它軟件模塊)交互q特別的,安全方面的考慮對(duì)產(chǎn)品開(kāi)發(fā)計(jì)劃的影響q產(chǎn)品的風(fēng)險(xiǎn)評(píng)估和威脅模型(threat modeling)q產(chǎn)品的缺省功能配置軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Cours

7、e, 7Safe2010/11/10DBAppsecurtiy 20109 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201010 安全設(shè)計(jì)安全設(shè)計(jì) 在安全設(shè)計(jì)階段,特別加入以下兩方面的考慮 q減少攻擊界面。例如,對(duì)一個(gè)網(wǎng)絡(luò)軟件的設(shè)計(jì),它需要監(jiān)聽(tīng)那些網(wǎng)絡(luò)端口,是否可以減少監(jiān)聽(tīng)端口的數(shù)目?那些用戶可以與這些端口建立連接,是否要加強(qiáng)身份驗(yàn)

8、證?q深層防御。底層模塊的設(shè)計(jì)中,假設(shè)上層模塊有可能出現(xiàn)安全漏洞。對(duì)傳遞的數(shù)據(jù)考慮進(jìn)一步校驗(yàn)軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201011 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe

9、2010/11/10DBAppsecurtiy 201012 安全安全編程編程 獨(dú)立、完整且集中的輸入驗(yàn)證獨(dú)立、完整且集中的輸入驗(yàn)證 創(chuàng)建并使用了獨(dú)立的用戶輸入驗(yàn)證模塊以完成對(duì)所有用戶的輸入校驗(yàn),以此可帶來(lái): q統(tǒng)一的輸入檢測(cè)策略q統(tǒng)一的驗(yàn)證邏輯q統(tǒng)一的錯(cuò)誤驗(yàn)證處理q降低升級(jí)和維護(hù)成本軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201013校驗(yàn)全部的程序輸入校驗(yàn)全部的程序輸入 保證所有變量在使用之前都經(jīng)過(guò)

10、嚴(yán)格的校驗(yàn),防止被污染的數(shù)據(jù)進(jìn)入程序。校驗(yàn)全部的輸入長(zhǎng)度校驗(yàn)全部的輸入長(zhǎng)度 通過(guò)限制輸入長(zhǎng)度,可以有效的控制一些攻擊使其不給系統(tǒng)帶來(lái)過(guò)大的威脅:qSQL InjectqXSSqFile Includeq軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201014校驗(yàn)全部的輸入類型校驗(yàn)全部的輸入類型 不同的程序所接收到的參數(shù)類型應(yīng)嚴(yán)格區(qū)分并校驗(yàn),對(duì)于非法的類型應(yīng)有相關(guān)異常進(jìn)行處理以防止其進(jìn)入程序。不使用任何方式

11、驗(yàn)證失敗的數(shù)據(jù)不使用任何方式驗(yàn)證失敗的數(shù)據(jù) 當(dāng)程序?qū)δ硞€(gè)數(shù)據(jù)校驗(yàn)失敗時(shí)(如:校驗(yàn)數(shù)據(jù)類型),相關(guān)的異常處理程序應(yīng)拋棄該數(shù)據(jù)并中斷操作,而不應(yīng)對(duì)數(shù)據(jù)進(jìn)行任何的修復(fù)嘗試。對(duì)對(duì)HTTP所有內(nèi)容進(jìn)行校驗(yàn)所有內(nèi)容進(jìn)行校驗(yàn) 除需對(duì)傳統(tǒng)的HTTP GET、POST等數(shù)據(jù)進(jìn)行嚴(yán)格校驗(yàn)外,還應(yīng)對(duì)HTTP內(nèi)所有可能使用到的字段進(jìn)行校驗(yàn),防止字段中包含惡意字符而污染程序,如:qRefererqHostqCookieq軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

12、/10DBAppsecurtiy 201015校驗(yàn)向用戶輸出的數(shù)據(jù)校驗(yàn)向用戶輸出的數(shù)據(jù) 當(dāng)程序通過(guò)查詢后臺(tái)數(shù)據(jù)庫(kù)或其他方式從后臺(tái)獲取數(shù)據(jù)后,在將數(shù)據(jù)輸出給用戶前應(yīng)對(duì)該數(shù)據(jù)進(jìn)行校驗(yàn),校驗(yàn)其中是否包含有非法字符、可執(zhí)行客戶端腳本等惡意信息。使用安全的使用安全的SQL查詢方式查詢方式 在進(jìn)行SQL查詢時(shí),必須使用安全的查詢方式,如:Prepared Statement,以避免查詢語(yǔ)句中由用戶惡意插入SQL語(yǔ)句所帶來(lái)的風(fēng)險(xiǎn)。禁止使用禁止使用JavaScript進(jìn)行任何校驗(yàn)進(jìn)行任何校驗(yàn) 由于JavaScript為客戶端腳本,因此任何試圖使用JavaScript對(duì)用戶數(shù)據(jù)進(jìn)行校驗(yàn)的行為都可能被用戶構(gòu)造的本

13、地腳本所繞過(guò),因此,所有校驗(yàn)工作應(yīng)由服務(wù)端程序完成而不是客戶端。軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201016使用安全、統(tǒng)一的編碼或轉(zhuǎn)義方式使用安全、統(tǒng)一的編碼或轉(zhuǎn)義方式 創(chuàng)建并使用獨(dú)立、統(tǒng)一的編碼或轉(zhuǎn)移方式,而且編碼或轉(zhuǎn)移中,至少應(yīng)包含對(duì)以下類別數(shù)據(jù)的編碼或轉(zhuǎn)移:q可能造成SQL注入的數(shù)據(jù),如:分號(hào)、單引號(hào)等q可能造成XSS的數(shù)據(jù),如:script、javascript等設(shè)定有安全的權(quán)限邊界設(shè)

14、定有安全的權(quán)限邊界 所有的程序都應(yīng)清楚的了解到自己能做什么,而在其所能做的范圍之外,均屬于其權(quán)限邊界之外,應(yīng)嚴(yán)格禁止對(duì)其權(quán)限之外的任何操作。校驗(yàn)被調(diào)用的后臺(tái)命令校驗(yàn)被調(diào)用的后臺(tái)命令 若程序需要調(diào)用后臺(tái)可執(zhí)行程序,則在調(diào)用時(shí),應(yīng)通過(guò)使用完整路徑或?qū)Τ绦蜻M(jìn)行HASH校驗(yàn)等方式保證程序的調(diào)用正確。軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201017校驗(yàn)被調(diào)用的文本或配置文件校驗(yàn)被調(diào)用的文本或配置文件 若程序

15、需要調(diào)用后臺(tái)文本或配置文件,則在調(diào)用前,應(yīng)相對(duì)文件或配置文件的完整性和有效性進(jìn)行檢查,以確保讀入的文本或配置文件是正確可用的。確保程序所記錄的日志可控確保程序所記錄的日志可控 若程序需要記錄額外的操作日志等信息,應(yīng)保證這些日志中的某些或全部?jī)?nèi)容不來(lái)自用戶輸入,否則用戶可能通過(guò)外部惡意提交信息的方式填充日志。軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201018 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安

16、全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201019 安全測(cè)試安全測(cè)試 安全測(cè)試是什么?在產(chǎn)品的生命周期中,特別是產(chǎn)品開(kāi)發(fā)基本完成到發(fā)布階段,對(duì)產(chǎn)品進(jìn)行檢驗(yàn)以驗(yàn)證產(chǎn)品符合安全需求定義和產(chǎn)品質(zhì)量標(biāo)準(zhǔn)的過(guò)程。 安全測(cè)試目標(biāo)提升產(chǎn)品安全質(zhì)量盡量在發(fā)布前兆到安全問(wèn)題予以修補(bǔ)降低成本度量安全 當(dāng)前安全測(cè)試方法有模式匹配方法,將程序看作字符串狀態(tài)機(jī)模型,將程序看作狀態(tài)機(jī)黑盒模型,將程序

17、看作黑盒子白盒模型,將程序看作路徑的組合軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201020 安全測(cè)試安全測(cè)試 當(dāng)前安全測(cè)試的問(wèn)題 覆蓋性 完備性 可度量性 當(dāng)前安全測(cè)試?yán)щy 測(cè)試?yán)碚摵茈y適用于安全領(lǐng)域 安全測(cè)試基礎(chǔ)理論薄弱,當(dāng)前測(cè)試方法缺少理論指導(dǎo),也缺乏技術(shù)產(chǎn)品工具 測(cè)試 VS 安全測(cè)試 BUG VS 安全漏洞 (并非是BUG的一個(gè)子集) 信息泄露,WMF,LNK,SYN FLOOD漏洞是BUG嗎

18、?軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201021 安全測(cè)試安全測(cè)試 假設(shè)條件 測(cè)試:導(dǎo)致問(wèn)題的數(shù)據(jù)是用戶不小心構(gòu)成的(只考慮提供給用戶的界面) 安全測(cè)試:導(dǎo)致問(wèn)題的數(shù)據(jù)是攻擊者處心積慮構(gòu)成的(考慮所有攻擊界面,包括可污染/滲透?jìng)鬟f的界面) 思考域 測(cè)試:功能本身 安全測(cè)試:功能,系統(tǒng)機(jī)制,外部環(huán)境,應(yīng)用與數(shù)據(jù)自身安全風(fēng)險(xiǎn)與安全屬性 問(wèn)題發(fā)現(xiàn)模式 測(cè)試:違反功能定義的輸出 安全測(cè)試:違反權(quán)限,能力

19、與約束 黑盒:狀態(tài)或行為異常 灰盒:未完備的約束檢測(cè) 靜態(tài)白盒:基于規(guī)范軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201022 安全測(cè)試安全測(cè)試 安全測(cè)試與滲透測(cè)試 出發(fā)點(diǎn)與目的 成本 測(cè)試對(duì)象 覆蓋/完備/度量 解決方案 過(guò)程參與軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course

20、, 7Safe2010/11/10DBAppsecurtiy 201023軟件安全開(kāi)發(fā)生命周期安全自身要素 安全包括了三個(gè)層次安全功能(特性)安全策略(部署,配置,全局設(shè)計(jì)準(zhǔn)則)安全實(shí)現(xiàn)安全測(cè)試是對(duì)以上幾個(gè)層次的驗(yàn)證和度量外部防護(hù)系統(tǒng)是一種補(bǔ)充保護(hù)7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201024 安全測(cè)試安全測(cè)試 安全功能測(cè)試 是否足夠 是否實(shí)現(xiàn) 實(shí)現(xiàn)正確性 安全策略測(cè)試 是否足夠 是否實(shí)現(xiàn) 實(shí)現(xiàn)正確性 代碼自身安全

21、 數(shù)據(jù)邊界檢測(cè)是否正確足夠 體系設(shè)計(jì)是否正確足夠 權(quán)限限制與檢測(cè)是否正確足夠 處理邏輯是否正確軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201025 安全測(cè)試安全測(cè)試 黑盒思路:基于功能與邊界值 FUZZ 智能FUZZ 全局?jǐn)?shù)據(jù)結(jié)構(gòu) 白盒思路:基于路徑 源碼審計(jì) 二進(jìn)制靜態(tài)分析 二進(jìn)制數(shù)據(jù)流動(dòng)態(tài)追蹤分析軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, I

22、nfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201026 簡(jiǎn)介 安全需求分析 安全設(shè)計(jì) 安全編程 安全測(cè)試 安全部署及安全響應(yīng) 軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201027 安全部署及安全響應(yīng)安全部署及安全響應(yīng) 安全部署軟件需提供相應(yīng)的文檔和工具,指導(dǎo)用戶如何安全的使用。 安全響應(yīng)當(dāng)前任何一個(gè)軟件開(kāi)發(fā)模式

23、(包括SDL在內(nèi)),都無(wú)法確保發(fā)布的軟件沒(méi)有安全漏洞。因此,需要事先制訂對(duì)應(yīng)的相應(yīng)模式,包括:(內(nèi)部或外部發(fā)現(xiàn)的)安全漏洞以何種途徑匯報(bào)如何評(píng)估安全漏洞的嚴(yán)重級(jí)別開(kāi)發(fā)安全補(bǔ)丁的流程測(cè)試安全補(bǔ)丁的流程發(fā)布安全補(bǔ)丁的流程如何在以后開(kāi)發(fā)中避免類似的安全漏洞,等等軟件安全開(kāi)發(fā)生命周期7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201028 軟件安全開(kāi)發(fā)生命周期(SDL) 基于WEB應(yīng)用程序的SDL目錄7Safe Company Ov

24、erview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201029 概述概述 在公開(kāi)提供的 SDL 文檔中,找不到專門針對(duì)如何保護(hù) Web 應(yīng)用程序或在線服務(wù)的指南。誠(chéng)然,大多數(shù) SDL 非實(shí)現(xiàn)要求同樣適用客戶端/服務(wù)器和 Web 應(yīng)用程序。就象威脅模型對(duì) Web 窗體應(yīng)用程序與 Windows 窗體應(yīng)用程序同樣重要。而對(duì) SOAP 服務(wù)和對(duì) Windows 服務(wù)執(zhí)行最終安全審查也同樣重要。但對(duì)于跨站點(diǎn)腳本 (XSS) 和 SQL 注入等與 Web 相關(guān)的漏洞會(huì)是怎

25、樣的情況呢?如果 SDL 如此注重防御客戶端/服務(wù)器應(yīng)用程序的緩沖區(qū)溢出,它為什么會(huì)忽視針對(duì)在線服務(wù)發(fā)起的 XSS 攻擊這一 Web 頭號(hào)公敵的防御呢?下面以JAVA編程安全為例說(shuō)明?;赪EB應(yīng)用程序的SDL7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201030 簡(jiǎn)介 跨站腳本(XSS) 注入漏洞(Injection Flaws) 惡意文件執(zhí)行 不安全的直接對(duì)象引用 跨站點(diǎn)請(qǐng)求偽造(CSRF) 信息泄露和錯(cuò)誤處理不當(dāng) 殘

26、缺的認(rèn)證和會(huì)話管理 不安全的加密儲(chǔ)存 不安全的通信 限制URL訪問(wèn)失效JAVA安全編程OWASP TOP 10 AND ESAPI7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201031簡(jiǎn)介 OWASP TOP 10 OWASP(開(kāi)放Web應(yīng)用安全項(xiàng)目- Open Web Application Security Project)是一個(gè)開(kāi)放社群、非營(yíng)利性組織,目前全球有82個(gè)分會(huì)近萬(wàn)名會(huì)員,其主要目標(biāo)是研議協(xié)助解決Web軟體

27、安全之標(biāo)準(zhǔn)、工具與技術(shù)文件,長(zhǎng)期 致力于協(xié)助政府或企業(yè)了解并改善網(wǎng)頁(yè)應(yīng)用程式與網(wǎng)頁(yè)服務(wù)的安全性。 OWASP TOP 10是10個(gè)最關(guān)鍵的Web應(yīng)用安全問(wèn)題清單。 這份名單是每隔數(shù)年更新(最近2010年)。 名單上都是那些通常很簡(jiǎn)單的,危險(xiǎn)的安全問(wèn)題。 這里是一個(gè)以在OWASP十大項(xiàng)目的鏈接。/index.php/Category:OWASP_Top_Ten_Project7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/1

28、0DBAppsecurtiy 201032 ESAPI(Enterprise Security API) 其實(shí)簡(jiǎn)單一點(diǎn)來(lái)說(shuō),ESAPI就是為編寫(xiě)出更加安全的代碼設(shè)計(jì)出來(lái)的一些API,方便使用者 調(diào)用,從而方便的編寫(xiě)安全的代碼。它本身是開(kāi)源的,同時(shí)提供JAVA版本和.NET版本。 代碼下載地址:http:/ 下圖顯示了提供的API與OWASP列出的10個(gè)安全問(wèn)題的涵蓋關(guān)系: 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010

29、33What is an Enterprise Security API?The ESAPI Family Community Breakdown7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201034OWASPWhat is an Enterprise Security API?Addressing The OWASP Top TenOWASP Top TenOWASP ESAPIA1: InjectionA2: Cros

30、s Site Scripting (XSS)A3: Broken Authentication and Session ManagementA4: Insecure Direct Object ReferenceA5: Cross Site Request Forgery (CSRF)A6: Security MisconfigurationA7: Insecure Cryptographic StorageA8: Failure to Restrict URL AccessA9: Insufficient Transport Layer ProtectionA10: Unvalidated

31、Redirects and ForwardsEncoderEncoder, ValidatorAuthenticator, User, HTTPUtilitiesAccessReferenceMap, AccessControllerUser (CSRF Token)SecurityConfigurationEncryptorAccessControllerHTTPUtilitiesAccessController7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11

32、/10DBAppsecurtiy 201035OWASPWhat is an Enterprise Security API?OWASP ESAPI Project ScorecardAuthentication2.0Identity2.0Access Control2.01.4Input Validation2.0Output Escaping2.01.42.0Canonicalization2.01.42.0Encryption2.01.4Rand

33、om Numbers2.01.4Exception Handling2.0Logging2.01.41.4Intrusion Detection2.0Security Configuration2.01.41.4WAF2.02.02.07Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201036 下圖顯示結(jié)合ESAPI設(shè)計(jì)

34、你的程序7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201037 下圖簡(jiǎn)單呈現(xiàn)ESAPI如何運(yùn)作7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201038跨站腳本(XSS)定義 跨站腳本是最普遍的web應(yīng)用安全漏洞。當(dāng)應(yīng)用程序在發(fā)送給瀏覽器的頁(yè)面中包含用戶提

35、供的數(shù)據(jù),但沒(méi)有經(jīng)過(guò)適當(dāng)驗(yàn)證或轉(zhuǎn)譯那些內(nèi)容,這就導(dǎo)致跨站腳本漏洞。危害 攻擊者能在受害者瀏覽器中執(zhí)行腳本以劫持用戶會(huì)話、迫害網(wǎng)站、插入惡意內(nèi)容、重定向用戶、使用惡意軟件劫持用戶瀏覽器等等。種類 已知有三種著名跨站漏洞:1)存儲(chǔ)式;2)反射式;3)基于DOM。 反射式跨站腳本通過(guò)測(cè)試或代碼分析很容易找到。 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201039解決之道 驗(yàn)證輸入 驗(yàn)證輸入很簡(jiǎn)單 - 檢查每個(gè)輸入的有效性。 這

36、可能意味著很多東西,但在典型的和簡(jiǎn)單的情況下,這意味著檢查輸入類型和數(shù)據(jù)的長(zhǎng)度。 例如,如果你是從一個(gè)文本框接受一個(gè)標(biāo)準(zhǔn)的郵政編碼,你會(huì)知道,唯一有效的類型是一個(gè)數(shù)字(0-9),而長(zhǎng)度應(yīng)該是6,不能多也不能少。 并非所有 的案件都如此簡(jiǎn)單,但很多是相似的。 下圖顯示驗(yàn)證輸入的架構(gòu)。 這里的關(guān)鍵是,一切都進(jìn)行驗(yàn)證,所有的輸入,這并不來(lái)自于應(yīng)用程序(包括用戶輸入,請(qǐng)求頭,Cookie,數(shù)據(jù)庫(kù)數(shù)據(jù).)。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBApps

37、ecurtiy 2010407Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201041u 實(shí)例 getValidInput(java.lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull, ValidationErrorList errors) isValidInput(java.

38、lang.String context, java.lang.String input, java.lang.String type, int maxLength, boolean allowNull) String validatedFirstName = ESAPI.validator().getValidInput(FirstName, myForm.getFirstName(), FirstNameRegex, 255, false, errorList); boolean isValidFirstName = ESAPI.validator().isValidInput(FirstN

39、ame, myForm.getFirstName(), FirstNameRegex, 255, false); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201042 編碼輸出 對(duì)驗(yàn)證輸入的另一面就是編碼輸出。 編碼輸出,是用來(lái)確保字符 被視為數(shù)據(jù),而不是作為HTML元字符被瀏覽器解析。 這些技術(shù)定義一些特殊的“轉(zhuǎn)義”字符。 沒(méi)有正確轉(zhuǎn)義的數(shù)據(jù)它仍然會(huì)在瀏覽器中正確解析。 編碼輸出只是讓瀏覽器知道數(shù)據(jù)是不是要被解析,達(dá)到

40、攻擊無(wú)法實(shí)現(xiàn)的目的。 需要編碼的部分: 1、HTML實(shí)體 2、HTML屬性 3、Javascript 4、CSS 5、URL 下圖像顯示編碼輸出的架構(gòu)。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010437Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 20

41、1044u 實(shí)例1HTML實(shí)體編碼/performing input validation String cleanComment = ESAPI.validator().getValidInput(comment, request.getParameter(comment), CommentRegex, 300, false, errorList); /check the errorList here . . /performing output encoding for the HTML context String safeOutput = ESAPI.encoder().encodeF

42、orHTML( cleanComment ); u 實(shí)例2URL編碼/performing input validation String cleanUserName = ESAPI.validator().getValidInput(userName, request.getParameter(userName), userNameRegex, 50, false, errorList); /check the errorList here . . /performing output encoding for the url context String safeOutput = /adm

43、in/findUser.do?name= + ESAPI.encoder().encodeForURL(cleanUserName); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201045注入漏洞(Injection Flaws)定義 簡(jiǎn)單來(lái)說(shuō),注入往往是應(yīng)用程序缺少對(duì)輸入進(jìn)行安全性檢查 所引起的,攻擊者把一些包含指令的數(shù)據(jù)發(fā)送給解釋器,解釋器會(huì)把收到的數(shù)據(jù)轉(zhuǎn)換成指令執(zhí)行,注入漏洞十分普遍,通常能在SQL查詢、LDAP查

44、詢、Xpath查詢、OS命令、程序參數(shù)等中出現(xiàn)。危害 注入能導(dǎo)致數(shù)據(jù)丟失或數(shù)據(jù)破壞、缺乏可審計(jì)性或是拒絕服務(wù)。注入漏洞有時(shí)甚至能導(dǎo)致完全接管主機(jī)。種類 SQL注入、XPATH注入、LDAP注入、OS命令注入等。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201046解決之道 SQL注入實(shí)例String sqlString = SELECT * FROM users WHERE fullname = + form.getFul

45、lName() + AND password = + form.getPassword() + ; 正常:username=tony,password=123456SELECT * FROM users WHERE username = tony AND password = 123456 攻擊: username=tony,password= OR 1 = 1SELECT * FROM users WHERE username = tony AND password = OR 1 = 1 參數(shù)化查詢預(yù)處理7Safe Company Overview 2009Dan Haagman, Info

46、Security 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201047 使用PreparedStatement()綁定變量 下面的代碼示例使用一個(gè)PreparedStatement,Java的一個(gè)參數(shù)化查詢的執(zhí)行情況,執(zhí)行相同的數(shù)據(jù) 庫(kù)查詢。 String custname = request.getParameter(customerName); / This should REALLY be validated too / perform input validation to detect attacks String

47、 query = SELECT account_balance FROM user_data WHERE user_name = ? ; PreparedStatement pstmt = connection.prepareStatement( query ); pstmt.setString( 1, custname); ResultSet results = pstmt.executeQuery( ); 使用存儲(chǔ)過(guò)程7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe201

48、0/11/10DBAppsecurtiy 201048String custname = request.getParameter(customerName); / This should REALLY be validated try CallableStatement cs = connection.prepareCall(call sp_getAccountBalance(?); cs.setString(1, custname); ResultSet results = cs.executeQuery(); / result set handling catch (SQLExcepti

49、on se) / logging and error handling 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201049 使用ESAPI /ESAPI version of query Codec ORACLE_CODEC = new OracleCodec(); /were using oracle String query = SELECT name FROM users WHERE id = + ESAPI.e

50、ncoder().encodeForSQL( ORACLE_CODEC, validatedUserId) + AND date_created = + ESAPI.encoder().encodeForSQL( ORACLE_CODEC, validatedStartDate) +; myStmt = conn.createStatement(query); . /execute statement and get results7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Sa

51、fe2010/11/10DBAppsecurtiy 201050惡意文件執(zhí)行定義 惡意文件執(zhí)行是一種能夠威脅任何網(wǎng)站形式的漏洞,只要攻擊者在具有引入(include)功能程式的參數(shù)中修改參數(shù)內(nèi)容,WEB服務(wù)器便會(huì)引入惡意程序內(nèi)容從而受到惡意文件執(zhí)行漏洞攻擊。危害 攻擊者可利用惡意文件執(zhí)行漏洞進(jìn)行攻擊取得WEB服務(wù)器控制權(quán),進(jìn)行不法利益或獲取經(jīng)濟(jì)利益。解決之道 實(shí)例1驗(yàn)證輸入,使用ESAPI驗(yàn)證上傳文件名7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBA

52、ppsecurtiy 201051 if (!ESAPI.validator().isValidFileName(upload, filename, allowedExtensions, false) throw new ValidationUploadException(Upload only simple filenames with the following extensions + allowedExtensions, Upload failed isValidFileName check); 實(shí)例2使用ESAPI檢查上傳文件大小 ServletFileUpload upload =

53、 new ServletFileUpload(factory); upload.setSizeMax(maxBytes); 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201052不安全的直接對(duì)象引用定義 所謂“不安全的對(duì)象直接引用”,即Insecure direct object references,意指一個(gè)已經(jīng)授權(quán)的用戶,通過(guò)更改 訪問(wèn)時(shí)的一個(gè)參數(shù),從而訪問(wèn)到了原本其并沒(méi)有得到授權(quán)的對(duì)象。Web應(yīng) 用往往在生成Web頁(yè)

54、面時(shí)會(huì)用它的真實(shí)名字,且并不會(huì)對(duì)所有的目標(biāo)對(duì)象訪問(wèn)時(shí)來(lái)檢查用戶權(quán)限,所以這就造成了不安全的 對(duì)象直接引用的漏洞。 我們看如下的一個(gè)示例,也許這樣就更容易理解什么是不安 全的對(duì)象直接引用。 攻擊者發(fā)現(xiàn)他自己的參數(shù)是6065, 即?acct=6065;他可以直接更改參數(shù)為6066, 即?acct=6066;這樣他就可以直接看到6066用 戶的賬戶信息了。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 2010537Safe Comp

55、any Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201054危害 這種漏洞能損害參數(shù)所引用的所有數(shù)據(jù)。除非名字空間很稀疏,否則攻擊者很容易訪問(wèn)該類型的所有數(shù)據(jù)。解決之道 案例1使用ESAPI的AccessReferenceMap實(shí)現(xiàn)使用非直接的對(duì)象引用 MyObject obj; / generate your object Collection coll; / holds objects for display in UI /create ESA

56、PI random access reference map AccessReferenceMap map = new RandomAccessReferenceMap(); /get indirect reference using direct reference as seed input String indirectReference = map.addDirectReference(obj.getId(); /set indirect reference for each object - requires your app object to have this method o

57、bj.setIndirectReference(indirectReference); /add object to display collection coll.add(obj); /store collection in request/session and forward to UI . 7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201055 案例2 檢查訪問(wèn)。 來(lái)自不受信源所使用的所有直接對(duì)象引用都必須包含訪問(wèn)

58、控制檢測(cè),這樣才能確保用戶對(duì)要求的對(duì)象有訪問(wèn)權(quán)限。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201056跨站點(diǎn)請(qǐng)求偽造(CSRF)定義 跨站請(qǐng)求偽造,也被稱成為“one click attack” 或者session riding,通??s寫(xiě)為CSRF或者XSRF,是一種對(duì)網(wǎng)站的惡意利用。盡管聽(tīng)起來(lái)像跨站腳本(XSS),但它與XSS非常不同,并且攻擊方式幾乎相左。XSS利用站點(diǎn)內(nèi)的信任用戶,而CSRF則通過(guò)偽裝來(lái)自受信任用戶

59、的請(qǐng)求來(lái)利用受信任的網(wǎng)站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對(duì)其進(jìn)行防范的資源也相當(dāng)稀少)和難以防 范,所以被認(rèn)為比XSS更具危險(xiǎn)性。危害 攻擊者能讓受害用戶修改可以修改的任何數(shù)據(jù),或者是執(zhí)行允許使用的任何功能 。7Safe Company Overview 2009Dan Haagman, InfoSecurity 2009Secure Coding Course, 7Safe2010/11/10DBAppsecurtiy 201057解決之道 第一步,新建CSRF令牌添加進(jìn)用戶每次登陸以及存儲(chǔ)在http session里,這種令牌至少對(duì)每個(gè)用戶會(huì)話來(lái)說(shuō)應(yīng)該是唯一的,或者是對(duì)每

60、個(gè)請(qǐng)求是唯一的。 /this code is in the DefaultUser implementation of ESAPI /* This users CSRF token. */ private String csrfToken = resetCSRFToken(); . public String resetCSRFToken() csrfToken = ESAPI.randomizer().getRandomString(8, DefaultEncoder.CHAR_ALPHANUMERICS); return csrfToken; 7Safe Company Overview 2009Dan

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論