国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
安全軟件開發(fā)入門(教程) - [Matrix - 與 Java 共舞]

安全軟件開發(fā)入門(教程)

cleverpig 發(fā)表于 2007-07-03 17:22:58
作者:cleverpig     來源:Matrix
評論數(shù):1 點(diǎn)擊數(shù):435     投票總得分:5 投票總?cè)舜?1
關(guān)鍵字:安全,軟件,開發(fā)
 

摘要:

本人近日對安全軟件開發(fā)頗感興趣,于是在作比較深入的研究后,寫下此文,與大家一起共享、討論。安全軟件開發(fā)入門:描述了在軟件開發(fā)中需要重視的安全問題,并介紹了兩種安全開發(fā)模式——微軟的“威脅模式”和Gary McGraw提出的“接觸點(diǎn)模式”。最后提出了實(shí)用的安全Web開發(fā)“藥方”:從系統(tǒng)架構(gòu)師、開發(fā)人員、系統(tǒng)維護(hù)人員的角度出發(fā)討論安全web開發(fā)的實(shí)用方案。
安全軟件開發(fā)入門

作者:cleverpig


軟件安全問題

有趣的《黑客帝國》終極解釋:



《黑客帝國》故事里面的人物關(guān)系,就像電腦里面的各種程序的關(guān)系一樣:
電腦里面的系統(tǒng)程序:Matrix;
病毒程序:以Neo為首的人類;
防病毒軟件:Agent特工、機(jī)器章魚、先知(迷惑和引導(dǎo)病毒程序的);
以及出錯(cuò)程序:Smith和Merovingian。

第一集:病毒程序入侵Matrix,喚醒被隔離的病毒源代碼Neo,并通過破壞Agent特工這些防毒軟件取得控制部分機(jī)器系統(tǒng)的勝利。

第二集:講述Matrix系統(tǒng)通過蒙騙的方法將Neo等病毒代碼或受感染的程序收集引導(dǎo)到一個(gè)Zion區(qū)域,進(jìn)行殺毒,結(jié)果在片尾,病毒程序Neo意識(shí)到了這一點(diǎn)。

第三集:Matrix系統(tǒng)軟件通過利用Agent防病毒軟件和Smith出錯(cuò)程序來對付Neo這些病毒程序,并且成功地消滅了這兩方,達(dá)到系統(tǒng)防御能力升級。

其實(shí)故事一開頭就注定了Neo的悲劇結(jié)局和人類的失敗。因?yàn)椴《救绻詈髮?dǎo)致系統(tǒng)崩潰,病毒也將被消滅。所以病毒要不被系統(tǒng)消滅,要不導(dǎo)致系統(tǒng)崩潰,和系統(tǒng)一起滅亡。

軟件安全問題的根源:

內(nèi)因:軟件有錯(cuò)誤
        * 脆弱點(diǎn)
                * 缺陷(設(shè)計(jì)層)
                * Bug(實(shí)現(xiàn)層)
        * 軟件開發(fā)方法存在問題
外因:軟件的運(yùn)行環(huán)境
        * 網(wǎng)絡(luò)對軟件的發(fā)展產(chǎn)生了巨大的影響(負(fù)面居多)
外部環(huán)境:黑客、惡意代碼
內(nèi)部環(huán)境:誤操作、報(bào)復(fù)、經(jīng)濟(jì)犯罪

7+1的軟件安全問題領(lǐng)域:

1.輸入驗(yàn)證和表示法
2.濫用API
3.安全特性
4.時(shí)間和狀態(tài)
5.錯(cuò)誤處理
6.代碼質(zhì)量
7.封裝
*.環(huán)境

1.輸入驗(yàn)證和表示法

輸入驗(yàn)證和表示問題由元字符、替換編碼、數(shù)字表示法引起。如果選擇使用輸入驗(yàn)證,那么就要使用白列表、而不是黑列表。
由于輕信輸入而造成的大問題包括:緩沖區(qū)溢出、跨站腳本攻擊、SQL注入、緩存毒藥和其它腳本小子們非常輕易吃到的“低掛的果實(shí)”(這里只安全性較低的軟件設(shè)計(jì))。

2.濫用API

API規(guī)定了調(diào)用者和被調(diào)用程序之間的使用約定。濫用API的常見模式是由調(diào)用者錯(cuò)誤地信任被調(diào)用方造成的。例如,調(diào)用者希望從被調(diào)用程序那里返回獲取用戶信息,而被調(diào)用程序并沒有任何的安全性保證其信息的可靠性。于是調(diào)用者就假定了調(diào)用程序返回?cái)?shù)據(jù)的正確性和安全性。當(dāng)然,也存在“壞人”有意破壞調(diào)用者-調(diào)用程序之間約定的行為。

3.安全特性

軟件安全不是安全軟件。世界上所有的加密算法都不能滿足真正的安全需要。盡管使用SSL保護(hù)網(wǎng)絡(luò)流量的手段,而認(rèn)證、訪問控制、機(jī)密性保障、加密算法、權(quán)限管理等都可能存在著安全缺陷。

4.時(shí)間與狀態(tài)

分布式計(jì)算與時(shí)間和狀態(tài)相關(guān)。為了使多個(gè)組件進(jìn)行通信,狀態(tài)必須在組件之間共享,而所有這些都需要花費(fèi)時(shí)間。因此在時(shí)間和狀態(tài)之間可能存在著巨大的、未發(fā)現(xiàn)的天然攻擊資源。
多數(shù)開發(fā)者人格化了他們的工作(將程序看作“它”的單體)。他們自以為單一、全能的控制線程能夠孜孜不倦地日夜工作,以同一種方式支撐整個(gè)應(yīng)用。而現(xiàn)代計(jì)算機(jī)在任務(wù)之間切換速度與日俱增,并且多核、多CPU或者分布式系統(tǒng)的應(yīng)用使兩件事情完全可以在同一時(shí)間發(fā)生。因此缺陷便出現(xiàn)在開發(fā)者所設(shè)想的程序執(zhí)行模型和實(shí)際情況之間的差異中。這些缺陷與在線程、進(jìn)程、時(shí)間和信息之間的無法預(yù)期的交互相關(guān)。而這些交互往往通過共享狀態(tài)發(fā)生:信號、變量、文件系統(tǒng)、全局信息等。

5.錯(cuò)誤處理

如果想破壞軟件,那么就讓它拋出一下垃圾數(shù)據(jù),并看看你導(dǎo)致了哪些錯(cuò)誤。在現(xiàn)代面向?qū)ο到y(tǒng)中,異常的想法取代了被禁止的goto概念。
與錯(cuò)誤處理相關(guān)的安全缺陷在開發(fā)中很常見。在API被濫用的情況下,安全缺陷主要存在于兩種方式:第一,開發(fā)者忘記處理錯(cuò)誤或者粗略得處理錯(cuò)誤;第二,在產(chǎn)生錯(cuò)誤時(shí)要么給出過于詳細(xì)的信息,要么錯(cuò)誤過于太具放射性以至于沒有可處理它們的方式。

6.代碼質(zhì)量

安全是可靠性的子集。如果可以完整地描述你的系統(tǒng)和其存在的正面、負(fù)面的安全可能性,那么安全成為了可靠性的子集。劣質(zhì)代碼將導(dǎo)致無法預(yù)期的行為,從軟件使用者的觀點(diǎn),它將被認(rèn)為是很差的可用性;而從攻擊者的視角看,糟糕的代碼將提供給系統(tǒng)施壓的可乘之機(jī)。

7.封裝

封裝是指在事物之間的邊界和它們之間建立的界限。在web瀏覽器中,它確保了移動(dòng)代碼不能夠強(qiáng)行我們的硬盤攻擊。在web服務(wù)端,它意味著在經(jīng)過認(rèn)證的有效數(shù)據(jù)和私密數(shù)據(jù)之間的差別。這里的邊界非常重要,如今在類之間的一些方法構(gòu)成了重要的邊界,因此信任模式需要謹(jǐn)慎的設(shè)置。

8.環(huán)境

這是上面七種領(lǐng)域的外部領(lǐng)域,它包括在代碼外部的所有東西,并對于我們建立的軟件安全同樣重要。

十大web安全問題:

1.未驗(yàn)證輸入

        問題描述:web 請求信息在被Web應(yīng)用使用之前都是未驗(yàn)證的,攻擊者能夠利用其中的弱點(diǎn)攻擊服務(wù)器;攻擊者通過偽造HTTP請求的各個(gè)部分,例如URL,查詢字符串,頭,cookies,表單域,隱藏域等繞過站點(diǎn)的安全機(jī)制。
        這些常見的偽造輸入攻擊通常包括:強(qiáng)制瀏覽,命令插入,跨站腳本,緩沖區(qū)溢出,格式化字符串,SQL注入,cookie中毒,隱藏域操作等等。
        保護(hù)方法:過濾惡意輸入;客戶端輸入驗(yàn)證、服務(wù)器端驗(yàn)證。

2.破壞訪問控制

        問題描述:對認(rèn)證用戶能夠進(jìn)行的操作缺乏合理的限制。攻擊者利用其中的缺陷訪問其他用戶的賬戶,瀏覽敏感文件,或使用未授權(quán)的功能。
        保護(hù)方法:
        加強(qiáng)對會(huì)話的保護(hù)(會(huì)話ID);
        防止暴力瀏覽繞過訪問控制檢查;
        合理設(shè)置訪問權(quán)限;
        禁止客戶端緩存。

3.破壞認(rèn)證和會(huì)話管理

        問題描述:賬戶信用和會(huì)話令牌沒有被合理保護(hù),攻擊者能夠危及密碼、密鑰、會(huì)話cookies或其他限制而冒用他人的賬戶
        保護(hù)方法:
        加強(qiáng)密碼強(qiáng)度;
        限制登錄次數(shù);
        使用SSL保護(hù)傳輸中的認(rèn)證信息;
        使用SSL保護(hù)會(huì)話ID;
        禁止客戶端緩存。

4.跨站腳本缺陷

        問題描述:web應(yīng)用能被利用將攻擊轉(zhuǎn)送到端用戶的瀏覽器。成功的跨站攻擊能夠暴露用戶的會(huì)話令牌,攻擊本地計(jì)算機(jī)或者用虛假信息欺騙用戶。
        保護(hù)方法:
        對用戶提供的輸出進(jìn)行編碼;
        根據(jù)白列表,嚴(yán)格驗(yàn)證查詢字符串;
        過濾、清除頁面請求中的活動(dòng)內(nèi)容。

5.緩沖區(qū)溢出漏洞

        問題描述:Web應(yīng)用組件可能存在緩沖區(qū)溢出漏洞,對它的攻擊會(huì)造成嚴(yán)重的攻擊后果。這種漏洞是由于CGI,庫函數(shù),驅(qū)動(dòng)程序、應(yīng)用服務(wù)器組件等沒有合理地驗(yàn)證輸入。
        保護(hù)方法:
        密切跟蹤Web應(yīng)用產(chǎn)品的最新錯(cuò)誤報(bào)告,及時(shí)打補(bǔ)?。?br>        使用漏洞掃描工具定期對系統(tǒng)進(jìn)行緩沖區(qū)溢出漏洞掃描;
        嚴(yán)格審查Web應(yīng)用程序中從用戶請求接收數(shù)據(jù)的代碼,確保對緩沖區(qū)長度進(jìn)行了檢查。

6.注入缺陷

        問題描述:Web應(yīng)用在訪問外部系統(tǒng)或本地操作系統(tǒng)時(shí)需要傳遞參數(shù),這些參數(shù)可能會(huì)被攻擊者利用嵌入惡意代碼,這樣導(dǎo)致外部系統(tǒng)能以應(yīng)用服務(wù)器的權(quán)限執(zhí)行系統(tǒng)命令。
        保護(hù)方法:
        避免使用外部解釋器;
        對于涉及到的后臺(tái)數(shù)據(jù)庫調(diào)用,應(yīng)對數(shù)據(jù)進(jìn)行嚴(yán)格驗(yàn)證;
        將Web應(yīng)用程序設(shè)置為能滿足需要的最小權(quán)限運(yùn)行;
        不得不使用外部命令時(shí)進(jìn)行嚴(yán)格檢查;
        應(yīng)該檢查調(diào)用的所有輸出、返回代碼和錯(cuò)誤代碼,最低限度要能確定何時(shí)發(fā)生了錯(cuò)誤。

7.不合理的錯(cuò)誤處理

        問題描述:正常操作中的錯(cuò)誤條件沒能合理處理,如果攻擊者使Web應(yīng)用產(chǎn)生未作處理的錯(cuò)誤,就能得到具體系統(tǒng)信息,使安全機(jī)制失效,使服務(wù)器崩潰。
        保護(hù)方法:
        設(shè)計(jì)合理的錯(cuò)誤處理策略并作好文檔,包括要處理的錯(cuò)誤類型、錯(cuò)誤提示信息、日志需記錄的信息;
        處理所有可能的錯(cuò)誤,但不暴露不該暴露的細(xì)節(jié);
        遇到重復(fù)的錯(cuò)誤嘗試時(shí)發(fā)出警告。

8.不安全存儲(chǔ)

        問題描述:Web應(yīng)用經(jīng)常使用加密函數(shù)保護(hù)信息和身份證明,這些函數(shù)和保護(hù)其完整性的代碼很難完全正確地實(shí)現(xiàn),從而導(dǎo)致弱保護(hù)問題。
        保護(hù)方法
        除非必要,盡量少保存數(shù)據(jù);
        存儲(chǔ)密碼的摘要(例如SHA-1)而非加密的密碼;
        必須使用加密算法時(shí),盡量采用公開的密碼算法庫。并妥善存儲(chǔ)秘密信息,如密鑰、證書、密碼等。

9.拒絕服務(wù)

        問題描述:攻擊者能夠消耗Web應(yīng)用的資源,使其無法正確為合法用戶服務(wù),或封閉用戶賬戶甚至使服務(wù)癱瘓。
        保護(hù)方法:
        限定分配給每個(gè)用戶最少量的資源;
        限制每個(gè)合法用戶僅有一個(gè)連接,并采用適當(dāng)?shù)膩G棄部分請求的策略;
        避免非認(rèn)證用戶對數(shù)據(jù)庫或其他關(guān)鍵資源的非必要訪問;
        使用內(nèi)容緩存的方法減少對數(shù)據(jù)庫的訪問。

10.不安全配置管理

        問題描述:對服務(wù)器合理配置是實(shí)現(xiàn)安全性的重要因素,服務(wù)器通常都有損害安全性的不合理配置。
        保護(hù)方法:
        為特定服務(wù)器和Web服務(wù)器建立強(qiáng)化安全配置策略,關(guān)閉無用服務(wù),建立角色、權(quán)限和賬戶,使用日志和告警措施;
        始終維護(hù)服務(wù)器的安全配置,跟蹤最新安全漏洞,應(yīng)用最新補(bǔ)丁,升級安全設(shè)置,定期漏洞掃描,定期進(jìn)行內(nèi)部審查。

兩種安全模型:

微軟的安全軟件開發(fā)模型:

1.安全開發(fā)生命周期(SDL):



SDL總計(jì)為四步:
第一步:安全教育,通過教育才能提高安全意識(shí)。
        設(shè)計(jì)人員:學(xué)會(huì)分析威脅
        開發(fā)人員:跟蹤代碼中每字節(jié)數(shù)據(jù)、質(zhì)疑所有關(guān)于數(shù)據(jù)的假設(shè)
        測試人員:關(guān)注數(shù)據(jù)的變化
第二步:設(shè)計(jì)階段,利用威脅建模技術(shù)建立系統(tǒng)模型。
第三步:開發(fā)階段,編碼與測試并行。
第四步:發(fā)行與維護(hù)階段,使用標(biāo)準(zhǔn)的修復(fù)機(jī)制修復(fù)安全缺陷。

2.威脅建模:

威脅模型是一種基于安全的分析,有助于人們確定給產(chǎn)品造成的最高級別的安全風(fēng)險(xiǎn),以及攻擊是如何表現(xiàn)出來的。
其目標(biāo)是確定需要緩和哪些威脅,如何來緩和這些威脅。

主要分為四個(gè)步驟:

第一步:分解應(yīng)用程序。使用DFD(數(shù)據(jù)流圖)或者UML(統(tǒng)一建模語言)描述威脅模型,作為分析應(yīng)用程序的重要組成部分。對應(yīng)用程序進(jìn)行形式化分解,自頂向下,逐層細(xì)化,在分解過程中關(guān)注過程之間的數(shù)據(jù)流。
例如:

第二步:確定系統(tǒng)面臨的威脅。按照“STRIDE”威脅模型:
        S:身份欺騙(Spoofing identity),造成冒充合法用戶、服務(wù)器欺騙(DNS 欺騙,DNS緩存中毒)。
        T:篡改數(shù)據(jù)(Tampering with data)。
        R:否認(rèn)(Repudiation)、。
        I:信息泄露(Information disclosure)。
        D:拒絕服務(wù)(Denial of service, DOS)。
        E:特權(quán)提升(Elevation of privilege)。

第三步:威脅評估。按照“DREAD”算法為威脅分級,并建立攻擊樹:
        D:潛在的破壞性(damage potential)
        R:再現(xiàn)性(reproducibility)
        E:可利用性(exploitability)
        A:受影響的用戶(affected users)
        D:可發(fā)現(xiàn)性(discoverability)
        例如:
        Threat #1: 惡意用戶瀏覽網(wǎng)絡(luò)上的秘密工資數(shù)據(jù)
        潛在的破壞性: 讀取他人的私密工資并不是開玩笑的事。——風(fēng)險(xiǎn)值為8
        再現(xiàn)性:100%可再現(xiàn)。——風(fēng)險(xiǎn)值為10
        可利用性: 必須處于同一子網(wǎng)或者處于同一路由器下?!L(fēng)險(xiǎn)值為7
        受影響的用戶: 每個(gè)人都將受到影響?!L(fēng)險(xiǎn)值為10
        可發(fā)現(xiàn)性: 讓我們假設(shè)它已經(jīng)發(fā)生?!L(fēng)險(xiǎn)值為10
        計(jì)算風(fēng)險(xiǎn)DREAD: (8+10+7+10+10) / 5 = 9

        攻擊樹描述了攻擊者利用系統(tǒng)漏洞破壞各組件,對威脅目標(biāo)進(jìn)行攻擊所經(jīng)歷的決策過程。建立攻擊樹需要考慮的幾個(gè)方面:
        安全威脅:潛在的事件,當(dāng)攻擊有動(dòng)機(jī)并付諸實(shí)施時(shí),威脅轉(zhuǎn)變?yōu)楣羰录?br>        安全漏洞:系統(tǒng)中的弱點(diǎn)。
        資源:受威脅(或攻擊)的目標(biāo)。
        
        例如:
        對Threat #1的威脅描述表格:


        Threat #1的攻擊樹:

        
第四步:建立緩和方案,選擇適當(dāng)?shù)陌踩夹g(shù)。



接觸點(diǎn)開發(fā)模型:



根據(jù)有效性排列的接觸點(diǎn):
代碼審查(Code review)
架構(gòu)風(fēng)險(xiǎn)分析(Architectural risk analysis )
滲透測試(Penetration testing )
基于風(fēng)險(xiǎn)的安全測試(Risk-based security tests )
濫用用例(Abuse cases )
安全需求(Security requirements )
安全操作(Security operations )

1.代碼審查

代碼審查的目標(biāo)是找到bug,架構(gòu)風(fēng)險(xiǎn)分析的目標(biāo)是找到缺陷。在很多情況下,這兩個(gè)主要的接觸點(diǎn)的執(zhí)行順序能夠交換。

靜態(tài)分析工具:
靜態(tài)分析工具在代碼中查找固定的模式或規(guī)則集合。
靜態(tài)分析工具的輸出仍然需要人為判斷。
錯(cuò)報(bào)(false negatives)問題,程序中含有bug但工具沒有報(bào)告。
誤報(bào)(false positives)問題,工具報(bào)出的bugs程序中不存在。

動(dòng)態(tài)分析工具:
執(zhí)行程序、錯(cuò)誤注入。

二進(jìn)制分析:
反匯編和反編譯都是攻擊者最常用的黑客工具。
例如:Fortify Source Code Analysis Suite


2.架構(gòu)風(fēng)險(xiǎn)分析

架構(gòu)風(fēng)險(xiǎn)分析的主要活動(dòng)是從適當(dāng)?shù)母叨冉⒁粋€(gè)目標(biāo)系統(tǒng)的視圖,避免“只見樹林不見森林”,提倡一頁紙的總覽, “forest-level”視圖。
例如:


在forest-level視圖中主要分析以下幾個(gè)方面:
威脅(誰可能攻擊系統(tǒng))、每一層環(huán)境中的風(fēng)險(xiǎn)、每個(gè)組件和數(shù)據(jù)流中可能存在的漏洞、技術(shù)風(fēng)險(xiǎn)可能造成的商業(yè)破壞、風(fēng)險(xiǎn)被實(shí)現(xiàn)的可能性、任何在每一層能夠?qū)崿F(xiàn)的可行對策、考慮整個(gè)系統(tǒng)范圍內(nèi)的可用保護(hù)機(jī)制。

3.滲透測試

滲透測試,針對系統(tǒng)威脅嘗試對系統(tǒng)進(jìn)行滲透,包括:積極(正向)測試,驗(yàn)證軟件正常執(zhí)行了規(guī)定的任務(wù);消極(負(fù)向)測試,安全測試人員必須深入研究安全風(fēng)險(xiǎn)(可能由濫用用例和體系風(fēng)險(xiǎn)驅(qū)動(dòng))以便確定系統(tǒng)在攻擊之下如何反應(yīng)。

測試工具:
錯(cuò)誤注入工具。
其他工具:Fortify Software, CANVAS。
攻擊者的工具包。

4.基于風(fēng)險(xiǎn)的安全測試

此測試旨在揭示可能的軟件風(fēng)險(xiǎn)和潛在攻擊。

實(shí)施人員:
使用傳統(tǒng)方式的標(biāo)準(zhǔn)測試組織可以執(zhí)行功能安全測試;
基于風(fēng)險(xiǎn)的安全測試更依賴于專門技術(shù)和經(jīng)驗(yàn),而不是測試經(jīng)驗(yàn)和安全經(jīng)驗(yàn);
教會(huì)測試專業(yè)人員學(xué)會(huì)在測試時(shí)如何象一個(gè)攻擊者一樣思考。

實(shí)施方式:
有源碼:白盒測試,靜態(tài)分析--發(fā)現(xiàn)程序中的錯(cuò)誤;
根據(jù)基于對軟件體系深入的理解而進(jìn)行的風(fēng)險(xiǎn)分析的結(jié)論,進(jìn)行白盒測試;
無源碼:黑盒測試,運(yùn)行程序--惡意輸入。

5.濫用用例

濫用用例指軟件開發(fā)人員需要在正常特性之外思考軟件系統(tǒng)的固有特性,如可靠性、安全和性能。

實(shí)施方式:
對系統(tǒng)的異常行為必須事先有所預(yù)期;
象攻擊者一樣思考你的系統(tǒng),利用“反需求”嘗試出錯(cuò)點(diǎn)。
例如:你的系統(tǒng)有一個(gè)使用加密保護(hù)通過序列化將關(guān)鍵數(shù)據(jù)寫到磁盤上的安全需求,與這個(gè)需求對應(yīng)的反需求就是要確定當(dāng)缺少加密的時(shí)候會(huì)發(fā)什么情況。

6.安全需求

設(shè)計(jì)系統(tǒng)的安全需求。

7.安全操作

注重配置管理的安全性,由于配置的改變是必然的,因此我們在開發(fā)和維護(hù)過程中需要控制配置的改變,建立開發(fā)活動(dòng)(程序、數(shù)據(jù)、文檔)的快照,驗(yàn)證配置的任何修改,防止惡意修改配置。

常用工具:
Rational ClearCase,MS Visual SourceSafe等。

實(shí)用的安全Web開發(fā)“藥方”

規(guī)劃體系結(jié)構(gòu)和設(shè)計(jì)解決方案時(shí):

識(shí)別和評估威脅:使用威脅建模系統(tǒng)地識(shí)別威脅,而不是以任意的方式應(yīng)用安全性。接著,根據(jù)攻擊或安全損害產(chǎn)生的風(fēng)險(xiǎn)和可能造成的潛在損失,對威脅進(jìn)行評價(jià)。這樣就可以適當(dāng)?shù)拇涡驅(qū)ν{進(jìn)行處理。

創(chuàng)建安全的設(shè)計(jì):使用嘗試或檢驗(yàn)過的設(shè)計(jì)原則。集中處理關(guān)鍵區(qū)域,在這些區(qū)域,方法正確是必須的,而且經(jīng)常會(huì)出現(xiàn)錯(cuò)誤。這里將它們稱為應(yīng)用程序缺陷類別。其中包括輸入驗(yàn)證、身份驗(yàn)證、授權(quán)、配置管理、敏感數(shù)據(jù)保護(hù)、會(huì)話管理、密碼系統(tǒng)、參數(shù)處理、異常管理和審核與日志記錄各項(xiàng)。要特別注意部署問題,包括拓?fù)洹⒕W(wǎng)絡(luò)基礎(chǔ)設(shè)施、安全策略和步驟。

執(zhí)行體系結(jié)構(gòu)和設(shè)計(jì)復(fù)查:應(yīng)用程序設(shè)計(jì)的復(fù)查與目標(biāo)部署環(huán)境和相關(guān)的安全策略有關(guān)。需要考慮底層基礎(chǔ)設(shè)施層安全性(包括邊界網(wǎng)絡(luò)、防火墻、遠(yuǎn)程應(yīng)用程序服務(wù)器等)帶來的限制。使用應(yīng)用程序缺陷類別幫助我們對應(yīng)用程序進(jìn)行分類,并分析適合于每個(gè)領(lǐng)域的方法。

進(jìn)行應(yīng)用開發(fā)時(shí):

開發(fā)工具的安全性:充分了解開發(fā)工具(包括語言、虛擬機(jī)、IDE環(huán)境、引用的第三方工具包),最好選擇開放源代碼的開發(fā)工具,這樣以便仔細(xì)審核其安全性。檢查開發(fā)工具是否提供了用戶和代碼安全模型,是否允許對用戶和代碼可以執(zhí)行的操作進(jìn)行限制。如果開發(fā)中涉及公開對稱和不對稱的加密與解密、散列、隨機(jī)數(shù)生成、數(shù)字簽名支持等算法,最好選用可靠的公開算法,避免自己炮制算法。

編寫安全代碼庫:對程序集進(jìn)行數(shù)字簽名,使它們不能隨意改動(dòng)。通過遵守面向?qū)ο笤O(shè)計(jì)原理,減小程序集受攻擊面,然后使用代碼訪問安全性,進(jìn)一步限制哪些代碼可以調(diào)用您的代碼。使用結(jié)構(gòu)化的異常處理方法防止敏感信息蔓延到當(dāng)前信任邊界之外,并開發(fā)更加可靠的代碼。避免常規(guī)問題,特別是輸入文件名和 URL 的問題。

安全地處理異常:不要顯示內(nèi)部系統(tǒng)或應(yīng)用程序的詳細(xì)信息,如堆棧跟蹤、SQL 語句片斷等。確保這類信息不被允許蔓延到最終用戶或當(dāng)前信任邊界以外。在異常事件中安全地“失敗”,確保應(yīng)用程序拒絕非法訪問,而且沒有停留在不安全的狀態(tài)下。不記錄敏感或私有數(shù)據(jù),如密碼,以免造成危害。在記錄或報(bào)告異常時(shí),如果用戶的輸入包括在異常消息中,對其進(jìn)行驗(yàn)證或清理。例如,如果返回一個(gè)HTML錯(cuò)誤消息,那么應(yīng)該對輸出進(jìn)行編碼,以避免腳本注入。

執(zhí)行第三方代碼的安全復(fù)查:使用分析工具分析二進(jìn)制程序集,確保它們符合安全設(shè)計(jì)準(zhǔn)則,并修復(fù)分析工具識(shí)別出的所有安全缺陷。復(fù)查具體的應(yīng)用程序元素,包括 Web 頁面和控件、數(shù)據(jù)訪問代碼、Web 服務(wù)、服務(wù)組件等。要特別注意 SQL 注入和跨站點(diǎn)腳本編寫缺陷。

保證開發(fā)人員工作站的安全性:使用一套方法保證工作站的安全性。保證帳戶、協(xié)議、端口、服務(wù)、共享、文件與目 錄和注冊表的安全。最重要的是,保持工作站具有當(dāng)前最新的補(bǔ)丁與更新。例如如果在 Microsoft Windows_ XP 或 Windows 2000 上運(yùn)行 Internet 信息服務(wù) (IIS),則運(yùn)行IISLockdown。IISLockdown 應(yīng)用安全的IIS配置,并安裝URLScan Internet 安全應(yīng)用程序編程接口 (ISAPI) 篩選器,該篩選器用于檢測和拒絕潛在的惡意 HTTP 請求。

編寫具有最低權(quán)限的代碼:可以限制代碼能夠執(zhí)行的操作,這與運(yùn)行該代碼所使用的帳戶無關(guān)。通過配置策略或編寫代碼,可以使用代碼訪問安全性控制來限制代碼允許被訪問的資源和操作。如果代碼不需要訪問某種資源或執(zhí)行某種敏感操作,可以安全性配置/控制來確保代碼不會(huì)被授予這種權(quán)限。

防止SQL注入:使用數(shù)據(jù)訪問的參數(shù)化存儲(chǔ)過程。使用參數(shù)要確保輸入值的類型和長度都 得到檢查。將參數(shù)視作安全文本值和數(shù)據(jù)庫內(nèi)的不可執(zhí)行代碼。如果不能使用存儲(chǔ)過程,也可以使用帶有參數(shù)的SQL語句。但不要通過連接SQL命令和輸入值來構(gòu)建 SQL 語句。還要確保應(yīng)用程序使用具有最低權(quán)限的數(shù)據(jù)庫登錄,以限制它在數(shù)據(jù)庫中的功能。

防止跨站點(diǎn)腳本編寫:對輸入類型、長度、格式和范圍進(jìn)行驗(yàn)證,并對輸出進(jìn)行編碼。如果輸出包括輸入(包括 Web 輸入),則對輸出進(jìn)行編碼。例如,對窗體字段、查詢字符串參數(shù)、cookie等進(jìn)行編碼,以及對從無法確定其數(shù)據(jù)是安全的數(shù)據(jù)庫(特別是共享數(shù)據(jù)庫)中讀取的輸入進(jìn)行編碼。對需要以HTML返回客戶端的自由格式的輸入字段,對輸出進(jìn)行編碼,然后選擇性地清除在許可元素(如用于格式化的 <b> 或 標(biāo)記)上的編碼。

管理機(jī)密:最好尋找避免存儲(chǔ)機(jī)密的替代方法。如果必須存儲(chǔ)它們,則不要在源代碼或配置文件中以明文的方式存儲(chǔ)。

安全地調(diào)用代碼接口:特別注意傳遞給接口和接口返回的參數(shù),防止?jié)撛诘木彌_區(qū)溢出。驗(yàn)證輸入和輸出字符串參數(shù)的長度,檢查數(shù)組邊界,并特別小心文件路徑的長度。

執(zhí)行安全的輸入驗(yàn)證:對輸入進(jìn)行限制、拒絕和清理,因?yàn)轵?yàn)證已知有效類型、模式和范圍的數(shù)據(jù)要比通過查找已知錯(cuò)誤字符來 驗(yàn)證數(shù)據(jù)容易得多。驗(yàn)證數(shù)據(jù)的類型、長度、格式和范圍。對字符串輸入,請使用正則表達(dá)式。有時(shí)候可能需要對輸入進(jìn)行清理。一個(gè)例子是在對數(shù)據(jù)編碼后清理編碼元數(shù)據(jù),以保證其安全性。

保證頁面訪問身份驗(yàn)證的安全性:安全地劃分Web站點(diǎn),隔離匿名用戶可以訪問的公共可訪問頁面和需要身份驗(yàn)證訪問的限制性頁面。使用安全套接字層 (SSL) 來保護(hù)窗體身份驗(yàn)證憑據(jù)和窗體身份驗(yàn)證 cookie。限制會(huì)話生存時(shí)間和確保身份驗(yàn)證 cookie 只在 HTTPS 上傳輸。對身份驗(yàn)證 cookie 加密,不要在客戶端計(jì)算機(jī)上保留它,也不要將其用于個(gè)性化目的;對個(gè)性化使用單獨(dú)的 cookie。

管理和維護(hù)系統(tǒng)時(shí):

實(shí)現(xiàn)補(bǔ)丁管理:針對Microsoft平臺(tái),那么可以使用 Microsoft Baseline Security Analyzer (MBSA) 檢查當(dāng)前安裝可能漏掉的補(bǔ)丁和更新。定期運(yùn)行該操作,保持服務(wù)器當(dāng)前安裝有最新的補(bǔ)丁和更新。在應(yīng)用補(bǔ)丁前,對服務(wù)器數(shù)據(jù)進(jìn)行備份;在將補(bǔ)丁安裝在生產(chǎn)服務(wù)器上之前,先在測試服務(wù)器上進(jìn)行測試。還要使用 Microsoft 提供的安全通知服務(wù),并訂閱通過電子郵件接收安全布告。針對Unix/Linux平臺(tái),可以 訂閱有關(guān)漏洞及補(bǔ)丁的郵件列表,定期使用工具,檢查服務(wù)器上安裝的補(bǔ)丁是否與Unix/Linux廠商發(fā)布的最新補(bǔ)丁列表相一致。

保證Web服務(wù)器的安全性:針對Microsoft平臺(tái)上運(yùn)行的IIS服務(wù),可以使用IISLockdown應(yīng)用安全的IIS配置,并安裝URLScan Internet 安全應(yīng)用程序編程接口 (ISAPI) 篩選器,該篩選器用于檢測和拒絕潛在的惡意 HTTP 請求。針對Unix/Linux平臺(tái)上運(yùn)行的Apache服務(wù),可以采用選擇性訪問控制(DAC)和強(qiáng)制性訪問控制(MAC)的安全策略,或者安裝安全相關(guān)的modules。針對WebService常用的協(xié)議(如soap),可以使用 XML 加密以確保敏感數(shù)據(jù)保持其私有性。使用數(shù)字簽名保證消息的完整性,尤其重要的數(shù)據(jù)應(yīng)使用SSL加密。最重要的是,保持服務(wù)器安裝了當(dāng)前最新的補(bǔ)丁和更新,并使其按照最小權(quán)限運(yùn)行。

保證數(shù)據(jù)庫服務(wù)器的安全性:應(yīng)用一種常見方法評估帳戶、協(xié)議、端口、服務(wù)、共享、文件與目錄和注冊表。還要評估 SQL Server的安全設(shè)置,如身份驗(yàn)證模式和審核配置。評估身份驗(yàn)證方法和 SQL Server登錄、用戶與角色的使用。確保安裝最新的服務(wù)包,定期監(jiān)測操作系統(tǒng)和 SQL Server 補(bǔ)丁與更新。

防止拒絕服務(wù)攻擊:確保加強(qiáng)了服務(wù)器上的 TCP/IP 堆棧配置,以應(yīng)對如 SYN flood 這樣的攻擊。對web服務(wù)的配置做適當(dāng)?shù)男薷囊韵拗平邮艿?POST 請求的規(guī)模,并對請求的執(zhí)行時(shí)間做出限制。

限制文件 I/O:可以配置代碼訪問安全策略,以確保限制單個(gè)程序集或整個(gè) Web 應(yīng)用程序只能訪問文件系統(tǒng)。例如,通過配置運(yùn)行在媒體信任級上的 Web 應(yīng)用程序,可以防止應(yīng)用程序訪問其虛擬目錄層次結(jié)構(gòu)以外的文件。同時(shí),通過為特定程序集授予受限的文件 I/O 權(quán)限,可以精確控制哪些文件可以被訪問以及應(yīng)該如何訪問它們。

執(zhí)行遠(yuǎn)程管理:針對Microsoft平臺(tái),其終端服務(wù)提供了一種專用的協(xié)議 (RDP)。它支持身份驗(yàn)證,并可以提供加密。如果需要文件傳輸工具,可以從 Windows 2000 Server 資源包中安裝文件復(fù)制實(shí)用工具。建議不要使用 IIS Web 管理,如果運(yùn)行 IISLockdown 該選項(xiàng)將被清除。應(yīng)該考慮提供一個(gè)加密的通信通道,并使用 IPSec 限制可以用于遠(yuǎn)程管理您的服務(wù)器的計(jì)算機(jī)。還應(yīng)該限制管理帳戶的數(shù)量。針對Unix/Linux平臺(tái),建議采用SSH進(jìn)行遠(yuǎn)程管理,文件傳輸使用SFTP。

參考資源:

Microsoft Corporation的《編寫安全的代碼》第二版
Gary McGraw編寫的《Software Security: Building Security In》
微軟Web安全解決方案一覽
使用Yassp工具包安裝安全的Solaris系統(tǒng)
微軟IIS Lockdown Tool
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
網(wǎng)絡(luò)安全的 10 個(gè)步驟之架構(gòu)和配置
互聯(lián)網(wǎng)從業(yè)者必須知道的36個(gè)安全技術(shù)術(shù)語
ASP.NET安全問題-- 創(chuàng)建安全的Web應(yīng)用程序
程序設(shè)計(jì)者需要謹(jǐn)記的九大安全編碼實(shí)踐
Java安全性評估
怎樣查看系統(tǒng)安全日志
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服