代碼安全開發(fā)-培訓(xùn)大綱-v1.2.ppt_第1頁
代碼安全開發(fā)-培訓(xùn)大綱-v1.2.ppt_第2頁
代碼安全開發(fā)-培訓(xùn)大綱-v1.2.ppt_第3頁
代碼安全開發(fā)-培訓(xùn)大綱-v1.2.ppt_第4頁
代碼安全開發(fā)-培訓(xùn)大綱-v1.2.ppt_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、代碼安全開發(fā)培訓(xùn),技術(shù)支撐部(信息與系統(tǒng)安全部) 2014.5,安全意識培訓(xùn),openssl案例 struts2漏洞案例 Windows MS08-067案例 android應(yīng)用開發(fā)接口威脅 teensy演示,openssl案例,漏洞介紹 無需任何特權(quán)信息或身份驗證,我們就可以從目標(biāo)上偷來X.509證書的私鑰、與密碼、聊天工具的消息、電子郵件以及重要的商業(yè)文檔和通信等數(shù)據(jù)用戶名。 受影響版本 OpenSSL1.0.1、1.0.1a、1.0.1b、1.0.1c、1.0.1d、1.0.1e、1.0.1f、Beta1ofOpenSSL1.0.2等版本 在線檢測地址 http:/possible.lv

2、/tools/hb/,openssl案例,漏洞原因 OpenSSL的某個模塊存在一個BUG,當(dāng)攻擊者構(gòu)造一個特殊的數(shù)據(jù)包,滿足用戶心跳包中無法提供足夠多的數(shù)據(jù)會導(dǎo)致memcpy把SSLv3記錄之后的數(shù)據(jù)直接輸出,該漏洞導(dǎo)致攻擊者可以遠(yuǎn)程讀取存在漏洞版本的openssl服務(wù)器內(nèi)存中長大64K的數(shù)據(jù) 修復(fù)方案 網(wǎng)站方面,管理員及時下載OpenSSL補丁,升級OpenSSL 1.0.1g,通知用戶在升級期間不要登錄網(wǎng)站,openssl案例,他是某個存在漏洞的站點,這是演示漏洞攻擊,他可以隨機獲取對方網(wǎng)站的某用戶的數(shù)據(jù)信息,包含用戶名,密碼,電話,省份證號等等,Struts高危安全漏洞,struts漏

3、洞一直以來都是非常引人矚目,兩方面原因: 用struts框架的應(yīng)用一般都是比較大型的應(yīng)用; struts漏洞一般都是高危漏洞。 下面列舉struts自發(fā)布以來已知的漏洞:,關(guān)于Struts2高危安全漏洞,漏洞介紹 近日有安全研究人員指出Apache Struts2在漏洞公告S2-020里,在處理修復(fù)CVE-2014-0094漏洞修補方案中存在漏洞,導(dǎo)致補丁被完全繞過。目前官方在github上做了對應(yīng)修改。這是OpenSSL之后又一嚴(yán)重漏洞,安全情況等級再次升級! 受影響版本 Apache Group Struts 2.x 漏洞原因 Apache Struts versions 2.0.0-2.

4、3.16版本的默認(rèn)上傳機制是基于Commons FileUpload 1.3版本的,該版本在實現(xiàn)上存在拒絕服務(wù)漏洞,附加的ParametersInterceptor允許訪問 class 參數(shù)(該參數(shù)直接映射到getClass()方法),并允許控制ClassLoader。,struts2高危安全漏洞的影響,關(guān)于微軟MS08-067漏洞,這個漏洞比較古老,殺傷力很大,但是在很多場景下還是普遍存在,應(yīng)引起重視。 漏洞介紹 該安全漏洞可能允許遠(yuǎn)程執(zhí)行代碼,如果受影響的系統(tǒng)收到了特制偽造的RPC請求。在Microsoft Windows 2000、Windows XP和Windows Server 20

5、03系統(tǒng),攻擊者可以利用此漏洞無需通過認(rèn)證運行任意代碼。 受影響版本 win2k,xpsp3,2003,2008,vista,win7beta 漏洞原因 攻擊者發(fā)出惡意請求給RPC服務(wù),導(dǎo)致緩沖區(qū)溢出。攻擊者可取得主機權(quán)限,關(guān)于微軟MS08-067漏洞,android應(yīng)用開發(fā)接口威脅,通過分析app程序【電信某系統(tǒng)】,可以找到其調(diào)用數(shù)據(jù)的接口,修改提交的參數(shù)可以找出敏感數(shù)據(jù)。 http:/202.102.XX.XX/app/JSONLogin?managerID=250006510,http:/202.102. XX.XX /app/JSONLogin?managerID=250006520,

6、teensy,很多場景,黑客可以用偽裝過的u盤,對指定目標(biāo)進(jìn)行攻擊。teensy就可以偽裝成任意一種usb外接設(shè)備。 常見用途有: 1. 直接獲取系統(tǒng)響應(yīng)的權(quán)限 2. 鍵盤記錄器 3. 快速竊取文件,teensy,一小段代碼就可以讓teensy搖身一變成為一個鍵盤記錄硬件。,teensy,通過將一個木馬寫入teensy,可以讓系統(tǒng)自己動加載、運行。 作圖為遠(yuǎn)程監(jiān)聽并執(zhí)行系統(tǒng)命令的木馬控制截圖。,teensy,源代碼:【僅供參考】,安全編碼原則,程序只實現(xiàn)你指定的功能 永不要信任用戶輸入(來自用戶終端的數(shù)據(jù)),對用戶輸入數(shù)據(jù)做有效性檢查 必須考慮意外情況并進(jìn)行處理 不要試圖在發(fā)現(xiàn)錯誤之后繼續(xù)執(zhí)行

7、 盡可能使用安全函數(shù)進(jìn)行編程 小心、認(rèn)真、細(xì)致地編程,安全策略條目分類,Discipline:必須遵守的紀(jì)律,必須按照規(guī)范中的描述嚴(yán)格實施,絕對不能違反 Policy:必須遵循的策略,實現(xiàn)方法可以自行考慮,但不能違反策略的規(guī)定 Guideline:建議性的指南和規(guī)范,重要系統(tǒng)實施,其他系統(tǒng)逐步遵循實施,代碼安全開發(fā)注意點,身份驗證 會話安全 訪問控制 輸入輸出驗證 異常管理 文件操作安全管理 數(shù)據(jù)安全 日志審計安全 接口安全 系統(tǒng)接口 安全測試規(guī)范,身份驗證,應(yīng)用系統(tǒng)帳號管理安全要求主要包括保護(hù)帳號不被猜解和暴力攻擊,提供對帳號用戶身份的有效識別,帳號狀態(tài)管理,帳號有效期管理等, 應(yīng)在程序設(shè)計

8、時,嚴(yán)格控制各個安全點,強制用戶必須滿足其要求。 具體內(nèi)容涉及以下要求: 帳號安全 密碼安全 認(rèn)證安全 測試,身份驗證,身份驗證案例 用戶名 admin 密碼 agent,身份驗證,身份驗證案例 用戶名輸入 -1 or 89=90 密碼輸入1,帳號安全,帳號名稱 系統(tǒng)管理員帳號名稱禁止使用易猜解名稱【Discipline】 系統(tǒng)管理員帳號名稱不使用常見管理員的帳號名稱,如“admin”、“administrator”、“root”等,不使用管理員個人標(biāo)識信息(如姓名拼音等)作為管理員帳號名稱,避免被攻擊者暴力猜解。,帳號安全,帳號身份 帳號身份的安全有效管理【Policy】 為對帳號進(jìn)行有效管

9、理,在帳號發(fā)生安全事件時能及時有效的定位責(zé)任人,密碼找回等,要求系統(tǒng)提供對帳號的使用人員必要的身份信息管理功能,如:有效證件,郵件,手機等,并對身份信息進(jìn)行有效性驗證。 系統(tǒng)通過加密存儲、頁面展現(xiàn)脫敏處理等多種手段提供對敏感身份信息的安全保護(hù)。數(shù)據(jù)安全保護(hù)詳見相關(guān)章節(jié)。,密碼安全,設(shè)置密碼通常起到認(rèn)證用戶身份、防止攻擊者非授權(quán)訪問的安全措施。因此密碼也通常被認(rèn)為突破系統(tǒng)的第一道防線,系統(tǒng)禁止接收不滿足安全標(biāo)準(zhǔn)的登錄密碼。保障密碼安全系統(tǒng)必須具備密碼安全管理功能,需要滿足以下要求: 密碼長度 Discipline 1-2-1:必須嚴(yán)格按照要求控制密碼的長度 管理員密碼長度需在8位以上,普通用戶密

10、碼需在6位以上。,帳號安全,帳號狀態(tài)管理 帳號身份狀態(tài)的安全有效管理【Policy】 系統(tǒng)具備帳號狀態(tài)管理功能,帳號的狀態(tài)包括:在用,臨時,暫停,關(guān)閉等,帳號的狀態(tài)變更滿足以下要求: 臨時帳號設(shè)置有效期,到期自動關(guān)閉。 長期不用的帳號,三個月未登錄,自動轉(zhuǎn)換到暫停狀態(tài)。,密碼安全,密碼復(fù)雜度 密碼的復(fù)雜度設(shè)置必須滿足要求【Discipline】 大寫字母、小寫字母、特殊字符、數(shù)字三種以上組合。 禁止使用連續(xù)性字符、數(shù)字,如1234abcd。 避免重復(fù)字符、數(shù)字,如11111、aaaaa等。 不要使用用戶公開信息或個人隱私相關(guān)數(shù)據(jù)作為密碼,如:qq、身份證號碼、昵稱、電話號碼、生日、姓名拼音、英

11、文名、公司名等,避免被社會工程學(xué)攻擊。 支持采用黑名單對常用統(tǒng)計型弱密碼的過濾,如:常見的統(tǒng)計型弱口令123321、qwerty、qweasd、qazwsx、1q2w3e4r等。,密碼安全,密碼存儲 密碼的存儲必須使用散列函數(shù)加salt【Discipline】 必須采用不可逆加密算法(MD5、SHA-1等)加密存儲,為防止彩虹表暴力破解,在對密碼加密時增加明文復(fù)雜度,增加一個“salt”和對應(yīng)帳號信息,具體如下: MD5(Username+Password+salt) 其中salt=abkdfang.(隨機字符串) Salt保存在服務(wù)器端配置文件或數(shù)據(jù)庫中,妥善保存,密碼安全,密碼生存周期 必

12、須嚴(yán)格限制密碼的生存周期【Discipline】 提供密碼生存周期管理,滿足以下要求: 管理員用戶(root、Administrator等)3個月強制更換一次密碼。 普通用戶每次登錄前確認(rèn)當(dāng)天離上次更新是否超過90天,如超過則不允許登入,如超過最后期限前3天自動提示離下次更新密碼的最后期限還有多少天。 密碼分發(fā) Guideline 1-2-5:加強密碼的安全分發(fā) 系統(tǒng)應(yīng)提供對用戶初始密碼分發(fā)和用戶密碼重置的安全管理,避免可能的安全風(fēng)險,應(yīng)滿足以下要求: 用戶初始密碼應(yīng)由系統(tǒng)通過算法隨機生成,禁止使用統(tǒng)一的初始密碼。 初始密碼的分發(fā)應(yīng)由系統(tǒng)通過用戶創(chuàng)建時登記的email或手機進(jìn)行自動分發(fā),減少人

13、工環(huán)節(jié)。 用戶使用初始密碼首次登錄系統(tǒng)時,系統(tǒng)應(yīng)提醒或強制用戶修改密碼。,密碼安全,密碼分發(fā) 加強密碼的安全分發(fā)【Guideline】 系統(tǒng)應(yīng)提供對用戶初始密碼分發(fā)和用戶密碼重置的安全管理,避免可能的安全風(fēng)險,應(yīng)滿足以下要求: 用戶初始密碼應(yīng)由系統(tǒng)通過算法隨機生成,禁止使用統(tǒng)一的初始密碼,且密碼強度要大,至少為8位。 初始密碼的分發(fā)應(yīng)由系統(tǒng)通過用戶創(chuàng)建時登記的email或手機進(jìn)行自動分發(fā),減少人工環(huán)節(jié)。 用戶使用初始密碼首次登錄系統(tǒng)時,系統(tǒng)應(yīng)強制用戶修改密碼。,密碼安全,密碼修改 必須嚴(yán)格限制密碼修改的條件【Discipline】 密碼修改管理要求先驗證用戶原有密碼才允許修改密碼。 密碼找回

14、密碼找回的安全有效手段【Discipline】 系統(tǒng)必須采用安全的方式驗證用戶的身份并重置密碼: 通過驗證用戶預(yù)留的密碼找回問題和答案來驗證身份。 通過用戶預(yù)留的email驗證身份,系統(tǒng)自動發(fā)送重置以后的密碼或重置密碼的URL。 通過向用戶預(yù)留的手機號碼發(fā)送短信動態(tài)碼來驗證身份,短信動態(tài)碼長度不低于6位,且有效時間不超過5分鐘,錯誤5次以上失效,避免被分布式暴力破解。,認(rèn)證安全,認(rèn)證方式管理 高安全等級系統(tǒng)的認(rèn)證方式【Discipline】 高安全等級系統(tǒng)認(rèn)證方式應(yīng)不低于以下要求: 用戶名+用戶名+靜態(tài)密碼+動態(tài)密碼(令牌卡、短信碼),動態(tài)密碼長度不低于6位,設(shè)定密碼的有效時間不超過5分鐘,防

15、止動態(tài)碼被攻擊者采用詞典或者窮盡的方式暴力攻擊,請求間隔不少于60秒等。 靜態(tài)密碼+證書認(rèn)證。 二次鑒權(quán)管理 高安全等級重要操作必須經(jīng)過系統(tǒng)二次鑒權(quán)【Discipline】 對高價值交易操作和進(jìn)入保護(hù)區(qū)用戶進(jìn)行重新認(rèn)證,如:修改用戶密碼操作、涉及資金操作等。,認(rèn)證安全,圖形驗證碼管理 圖形驗證碼的安全使用【Guideline】 驗證碼防自動識別: 認(rèn)證登錄框具備圖形驗證碼功能,且圖形驗證碼滿足以下要求:能抵抗自動識別,但不影響用戶的正常識別,實現(xiàn)長度至少四位的隨機字符串,且使用扭曲、噪點干擾、大小變換、位置變換等防自動識別的一種或者多種方法,或者增加簡單的邏輯判斷,如:1+一=?等。 驗證碼保

16、護(hù)和更新: 采用session方式在服務(wù)器端保存驗證碼值,每次核對驗證碼時候先檢查是否為空,核對驗證碼后先將session中驗證碼值清空,然后再做其他數(shù)據(jù)合法性判斷??赡艽嬖诘娘L(fēng)險,session中的驗證碼值如不在每次核對以后自動清空,攻擊者可以通過不觸發(fā)驗證碼更新程序的方式采用第一次人工識別的驗證碼反復(fù)提交繞過驗證碼;cookie方式保存驗證碼值,攻擊者可以通過解密識別cookie中的驗證碼值或者直接偽造cookie值來繞過驗證碼。,認(rèn)證安全,認(rèn)證敏感信息通信安全 敏感信息使用安全通道傳輸【Policy】 認(rèn)證過程中,涉及密碼和用戶名的通信,需使用加密通道來進(jìn)行身份認(rèn)證,如:使用https協(xié)

17、議來傳遞認(rèn)證信息。,認(rèn)證安全,認(rèn)證失敗處理 認(rèn)證失敗時相應(yīng)的安全處理方法【Discipline】 登錄認(rèn)證失敗處理必須滿足以下要求: 登錄界面認(rèn)證失敗時,認(rèn)證失敗的回顯信息不能單獨顯示“帳戶錯誤”或“密碼錯誤”等精確的提示信息,應(yīng)由系統(tǒng)生成統(tǒng)一的錯誤頁面信息,避免攻擊者通過錯誤信息來猜解帳號是否存在。 具備連續(xù)認(rèn)證失敗后帳號鎖定功能,帳號可以由系統(tǒng)管理員解鎖或者系統(tǒng)在一定時間內(nèi)自動解鎖,防止帳號密碼被手動暴力猜測,但必須考慮配合圖形驗證碼或者動態(tài)密碼等輔助手段,防止攻擊者利用自動工具嘗試暴力認(rèn)證登錄,導(dǎo)致正常用戶大批量鎖定的DOS攻擊行為。 對高安全等級系統(tǒng)可以考慮實現(xiàn): 多次認(rèn)證失敗后,系統(tǒng)

18、應(yīng)通過短信、郵件等方式提示帳戶本人其帳戶安全問題,督促盡快修改密碼或設(shè)置安全密碼、密碼保護(hù)等。 為保護(hù)帳戶免受暴力破解的影響,針對多次認(rèn)證失敗的情況,系統(tǒng)可以主動拒絕攻擊地址的訪問。,認(rèn)證安全,系統(tǒng)登錄安全 高安全等級系統(tǒng)必須使用安全訪問策略【Discipline】 高安全等級系統(tǒng)應(yīng)支持應(yīng)用級的登錄安全訪問控制策略,滿足以下要求: 對系統(tǒng)后臺管理員登錄頁面,應(yīng)限制訪問的IP地址范圍。 對特殊權(quán)限管理員(如碼號管理員),應(yīng)限制登錄的終端IP地址范圍或MAC。,測試,爆破賬號,測試,爆破賬號,會話安全,會話在用戶訪問系統(tǒng)的整個過程中起到識別用戶、保持與服務(wù)器的連接的功能。會話的安全涉及到用戶的隱私

19、信息等問題,在開發(fā)過程中,需多多注意。 包括以下幾點: 會話的安全初始化 會話的安全終止 會話的安全使用域 會話中用戶標(biāo)識數(shù)據(jù)的安全保護(hù) 測試,會話安全,會話創(chuàng)建 會話的安全初始化【Policy】 創(chuàng)建的會話憑證應(yīng)滿足隨機性和長度要求,避免被攻擊者猜解。 注釋:這里的會話憑證就是sessionid,如 Cookie: PHPSESSID=dh8drj7hkmttr81igng4g5pqo7; 在同一用戶的登錄過程中,當(dāng)用戶本次認(rèn)證成功后,應(yīng)為此用戶創(chuàng)建新的會話并釋放原有會話,一旦發(fā)現(xiàn)同一帳戶多點登錄時提示“當(dāng)前用戶存在多點登錄情況,如非本人操作請盡快修改用戶密碼或使用登錄保護(hù)”。 注釋:這里可

20、以加入心跳包檢測,并設(shè)置鎖定時間。 從安全級別較低的模塊跳轉(zhuǎn)到安全級別較高的模塊時,應(yīng)用必須重寫Session信息。 每一個Cookie都應(yīng)該帶上HttpOnly的標(biāo)簽,防止本地腳本讀取cookie信息,也是為了應(yīng)對xss攻擊。,會話安全,會話終止 會話的安全終止【Policy 】 縮短會話壽命可以降低會話劫持和重放攻擊的風(fēng)險,會話壽命越短,攻擊者捕獲會話憑證并利用它訪問應(yīng)用的時間越有限。會話的生存期必須控制在一定的時間范圍內(nèi),如1小時、1天,最高不得超過1天。超過生存期的使用時間后,必須將會話終止,并強制用戶重新獲取會話。 在用戶退出系統(tǒng)時,服務(wù)器端及時注銷會話數(shù)據(jù)。 在B/S結(jié)構(gòu)的應(yīng)用程序

21、中,當(dāng)處于登錄狀態(tài)的用戶直接關(guān)閉瀏覽器時,提示用戶執(zhí)行安全登出或自行為用戶完成登出過程,確保此次會話終止。 如果在一定時間的范圍內(nèi),用戶未對系統(tǒng)進(jìn)行任何操作,系統(tǒng)需終止此會話,并強制用戶退出系統(tǒng)。,會話安全,會話權(quán)限 會話的安全使用域【Guideline】 設(shè)置Cookie的域,強制要求Domain和Path的吻合。在一個大型Web站點中,往往有多個應(yīng)用,生存在不同的子域名或路徑下。這些應(yīng)用之間由于共享同一個域名,所以往往可能會彼此有操作對方應(yīng)用Cookie的能力。這種情況下,用戶Cookie的Domain和Path屬性限制在合理的區(qū)間,用戶只能訪問此domain+path下的web頁面。,會

22、話安全,會話安全防御 針對會話安全的攻擊手段非常多,很多常規(guī)的攻擊方式在特定的環(huán)境下,都可以針對會話進(jìn)行攻擊,從而達(dá)到非法獲取權(quán)限的目的。下面幾點是在會話安全中需要注意的。 會話中用戶標(biāo)識數(shù)據(jù)的安全保護(hù)【Policy】 用戶登錄成功以后生成的會話數(shù)據(jù)應(yīng)存儲在服務(wù)器端,并確保會話數(shù)據(jù)不被非法訪問。 會話憑證不得包含明文的用戶信息(如SessionID=user.admin8829hdakkqwekkq)。 會話憑證加密不得單獨使用MD5或sha等散列算法,如在明文中加入salt值再加密,或者進(jìn)行二次散列,防止彩虹表破解。,訪問控制,訪問控制一詞在安全領(lǐng)域出現(xiàn)的頻率非常高,訪問控制其實就是權(quán)限的控

23、制,對于權(quán)限的合理分配,一直是安全設(shè)計中的核心問題。在開發(fā)過程中,需注意以下幾點: 角色安全設(shè)置 系統(tǒng)運行環(huán)境帳號權(quán)限管理 資源訪問控制 不安全的直接對象引用,訪問控制,角色安全設(shè)置 角色的安全設(shè)定【Guideline】 應(yīng)用系統(tǒng)應(yīng)預(yù)先生成不同的角色,不同的角色擁有不同的權(quán)限,不同的權(quán)限可以賦予同一個帳號。 設(shè)計角色時,設(shè)計者應(yīng)根據(jù)系統(tǒng)特定,盡可能細(xì)化各種權(quán)限。(如管理員修改數(shù)據(jù)表,可以設(shè)計成特定的權(quán)限修改特定的數(shù)據(jù)表) 根據(jù)業(yè)務(wù)發(fā)展需要,賦予角色相應(yīng)的生命周期。,訪問控制,系統(tǒng)運行環(huán)境帳號權(quán)限管理 系統(tǒng)運行環(huán)境的安全設(shè)置【Discipline】 應(yīng)用軟件啟動權(quán)限最小化:避免因應(yīng)用缺陷導(dǎo)致攻擊

24、者直接獲得管理權(quán)限,系統(tǒng)使用的系統(tǒng)帳號(運行環(huán)境)應(yīng)該僅有運行該應(yīng)用所必需的最小權(quán)限,禁止使用root、administrator、sa或其他特權(quán)帳號來運行應(yīng)用程序。 數(shù)據(jù)庫連接帳號權(quán)限最小化:避免攻擊者通過數(shù)據(jù)庫連接帳號直接獲得管理權(quán)限,系統(tǒng)應(yīng)使用必需最小權(quán)限的數(shù)據(jù)庫連接帳戶訪問數(shù)據(jù)庫,禁止使用sa、system或其他特權(quán)數(shù)據(jù)庫帳號。 數(shù)據(jù)庫帳號的安全劃分:不同安全等級的數(shù)據(jù)表帳號分離,如:實例數(shù)據(jù)表和配置數(shù)據(jù)表的數(shù)據(jù)庫帳號分離,普通數(shù)據(jù)表和敏感數(shù)據(jù)表(重要數(shù)據(jù)、密鑰數(shù)據(jù)等)帳號分離。,訪問控制,資源訪問控制案例 案例:直接訪問后臺,訪問控制,資源訪問控制案例 案例:直接訪問后臺,訪問控制,

25、資源訪問控制案例 案例:訪問敏感文件 http:/132.228.XX.XX:7001/servlet/downloadservlet?filename=%E8%AE%A1%E8%B4%B9(BOSS)%E7%BD%91%E7%AE%A1%E6%93%8D%E4%BD%9C%E6%89%8B%E5%86%8C.chm $getid = SELECT first_name, last_name FROM users WHERE user_id = $id; $result = mysql_query($getid) or die( . mysql_error() . );#未對id過濾,直接進(jìn)入

26、數(shù)據(jù)庫 $num = mysql_numrows($result); $i = 0; while ($i ; $html .= ID: . $id . First name: . $first . Surname: . $last; $html .= ; $i+;,SQL注入防御,SQL注入的代碼分析: 針對之前程序的攻擊代碼: union select 1, schema_name from information_schema.schemata +-+ PreparedStatement pstmt = con.prepare(sql); pstmt.setInt(1,request.ge

27、tParameter(“cat”); pstmt.setString(2,request.getParameter(“price”); ResultSet rs = pstmt.executeQuery();,SQL注入防御,驗證輸入 盡可能使用白名單驗證 確保驗證應(yīng)用收到的所有受用戶控制的輸入類型、大小、范圍和內(nèi)容 只有當(dāng)無法使用白名單輸入驗證是才能使用黑名單輸入驗證(拒絕已知不良或基于簽名輸入),java安全編碼實例,String sql = “select * from product where cat=? and price ?”; PreparedStatement pstmt =

28、 con.prepare(sql); pstmt.setInt(1,request.getParameter(“cat”); pstmt.setString(2,request.getParameter(“price”); ResultSet rs = pstmt.executeQuery();,XML注入防御,防止xml注入【Guideline】 在代碼級輸出時對XML特殊字符(“”、“”)進(jìn)行轉(zhuǎn)義。,HTTP頭注入防御,通過在HTTP請求頭里注入惡意代碼并交予應(yīng)用執(zhí)行,可以達(dá)到惡意攻擊的目的。 HTTP頭注入攻擊防御方法是: 在設(shè)置HTTP響應(yīng)頭的代碼中,過濾回車換行(%0d%0a、%0D

29、%0A)字符。 不采用有漏洞版本的服務(wù)器,同時對參數(shù)做合法性校驗以及長度限制,謹(jǐn)慎的根據(jù)用戶所傳入?yún)?shù)做http返回包的header設(shè)置。,HTTP頭注入防御,防止HTTP頭注入【Guideline】 HTTP的頭域包括通用頭,請求頭,響應(yīng)頭和實體頭四個部分。每個頭域由一個域名,冒號(:)和域值三部分組成。如圖:,命令注入防御,命令注入防御【Guideline】 命令注入是指通過發(fā)送url請求,直接在應(yīng)用的主機上執(zhí)行系統(tǒng)命令。通過執(zhí)行命令可以完全繞過各種安全防御系統(tǒng)。命令注入漏洞防御方法是在代碼級調(diào)用shell時,對命令行中的特殊字符進(jìn)行轉(zhuǎn)義(|、 else $html .= ; $html

30、.= Hello . str_replace(, , $_GETname); $html .= ; #過濾了 ,PHP安全代碼,if(!array_key_exists (name, $_GET) | $_GETname = NULL | $_GETname = ) $isempty = true; else $html .= ; $html .= Hello . htmlspecialchars($_GETname); $html .= ; #這種方法就完全過濾了 ,PHP非安全代碼(存儲類型),if(isset($_POSTbtnSign) $message = trim($_POSTmt

31、xMessage); $name = trim($_POSTtxtName); $message = trim(strip_tags(addslashes($message); $message = mysql_real_escape_string($message); #過濾了SQL $message = htmlspecialchars($message);#對name進(jìn)行了過濾 $name = str_replace(, , $name); $name = mysql_real_escape_string($name);#過濾了SQL #未對¥name進(jìn)行編碼過濾 $query = IN

32、SERT INTO guestbook (comment,name) VALUES ($message,$name); $result = mysql_query($query) or die( . mysql_error() . ); ,PHP安全代碼,if(isset($_POSTbtnSign) $message = trim($_POSTmtxMessage); $name = trim($_POSTtxtName); $message = stripslashes($message); $message = mysql_real_escape_string($message); $m

33、essage = htmlspecialchars($message); #對$message進(jìn)行了SQL和XSS防御 $name = stripslashes($name); $name = mysql_real_escape_string($name); $name = htmlspecialchars($name); #對$message進(jìn)行了SQL和XSS防御 $query = INSERT INTO guestbook (comment,name) VALUES ($message,$name); $result = mysql_query($query) or die( . mys

34、ql_error() . );,CSRF攻擊防御,防御CSRF攻擊【Policy】 CSRF:跨站請求偽造,是一種對網(wǎng)站的惡意利用。但它與XSS非常不同,并且攻擊方式幾乎相左。XSS利用站點內(nèi)的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網(wǎng)站。 防御CSRF攻擊的方法是: 檢查http referrer字段是否同域,可抵御站外CSRF攻擊,但無法防御站內(nèi)攻擊。 限制session的生命周期,如:用戶登錄系統(tǒng)閑置10分鐘以后,自動銷毀session,可減低CSRF攻擊概率。 重要操作使用驗證碼可以有效阻斷CSRF攻擊,如付款交易需使用驗證碼才能通過。 在表單中添加一次性tok

35、en作為隱藏表單項,token要求唯一、且具備足夠隨機性,來防止惡意的破壞和重復(fù)提交問題。,異常管理,異常是指在軟件運行中因為程序本身有錯誤或其他相關(guān)系統(tǒng)組件運行錯誤而造成的功能不正常、死機、數(shù)據(jù)丟失、非正常中斷等現(xiàn)象。異常通常是由代碼執(zhí)行異常、應(yīng)用服務(wù)器執(zhí)行異常、數(shù)據(jù)庫和中間件等系統(tǒng)組件執(zhí)行異常構(gòu)成。異常情況必須安全謹(jǐn)慎的處理,在保證系統(tǒng)快速恢復(fù)正常運行的同時,還必須對異常信息進(jìn)行妥善的管理,防止由異常所引起的數(shù)據(jù)泄露。對異常的管理必須做到以下幾點: 防目錄探測 防止泄露信息 異常信息日志 捕捉異常 異常時的恢復(fù),異常管理,針對目錄探測行為返回同一頁面和狀態(tài)碼【Discipline】 通常攻

36、擊工具通過自動發(fā)送http測試請求并根據(jù)http響應(yīng)狀態(tài)碼來判斷所請求的資源是否存在或可訪問,才而實現(xiàn)對服務(wù)器web目錄的探測,獲取管理后臺等敏感信息。因此對Web類應(yīng)用系統(tǒng),服務(wù)器端應(yīng)對http請求響應(yīng)狀態(tài)代碼進(jìn)行過濾,對非正常的狀態(tài)碼(如4xx、5xx)設(shè)置相對應(yīng)的處理函數(shù),統(tǒng)一對客戶端返回正常狀態(tài)碼(如200)和特定頁面或者跳轉(zhuǎn)到系統(tǒng)首頁。 防止信息泄露【Discipline】 發(fā)生故障時,不要暴露應(yīng)用軟件的相關(guān)信息,如函數(shù)名稱以及調(diào)用函數(shù)時的堆棧信息等。 針對web系統(tǒng),對所有的異常構(gòu)造統(tǒng)一的錯誤頁面。 錯誤的頁面中不能包含任何系統(tǒng)提示信息和隱私信息。,異常管理,記錄異常行為【Guid

37、eline】 發(fā)生異常時,應(yīng)記錄詳細(xì)的日志信息,日志信息必須安全妥善的保存,同時確保沒有在日志中記錄密碼或其他敏感信息。,異常管理,捕捉異常行為【Guideline】 建議使用統(tǒng)一的異常處理模塊,結(jié)構(gòu)化地捕捉和處理異常事件。如建立異常處理類,其中包含應(yīng)用中所涉及到的各種異常類型,通過繼承或直接調(diào)用異常處理類,來處理各種異常事件。 出現(xiàn)異常時及時恢復(fù)【Guideline】 發(fā)生異常時,應(yīng)終止當(dāng)前的業(yè)務(wù),并對當(dāng)前交易進(jìn)行回滾操作,保證業(yè)務(wù)的完整性和有效性,必要時可以注銷當(dāng)前用戶會話。,文件操作安全管理,文件安全管理是針對用戶訪問文件系統(tǒng)權(quán)限的管理,即只允許訪問者訪問授權(quán)的文件信息。禁止用戶通過應(yīng)用

38、系統(tǒng)非法訪問授權(quán)以外的文件信息,如攻擊者可以通過上傳病毒木馬文件打開系統(tǒng)的大門。在開發(fā)過程中,必須滿足以下幾點要求: 文件上傳安全 文件下載安全 文件包含安全 配置文件安全 日志文件安全 數(shù)據(jù)庫文件安全 腳本文件執(zhí)行安全,文件操作安全管理,上傳漏洞案例 此上傳文件可以上傳任意的文件,可以對后面的/test123進(jìn)行修改上傳,如下面直接改成上傳到管理頁面目錄。,文件操作安全管理,嚴(yán)格控制管理文件的安全上傳【Discipline】 Web應(yīng)用系統(tǒng)存在上傳文件的功能,惡意用戶可以繞過客戶端頁面的驗證,模擬請求上傳文件處理服務(wù)端,將一些網(wǎng)頁木馬(例如:jsp、php、asp等)上傳到服務(wù)端,通過木馬獲

39、取服務(wù)器主機權(quán)限,系統(tǒng)文件上傳應(yīng)滿足以下安全要求: 如非必要,避免向普通用戶開放上傳權(quán)限; 客戶端對上傳文件類型做一次驗證; 在服務(wù)器端進(jìn)行二次驗證,在服務(wù)器端實現(xiàn)獨立的文件上傳安全模塊,限制上傳文件的大小、類型、路徑等,防止客戶端腳本控制方式被攻擊者繞過。 對上傳類型進(jìn)行強制性驗證和重命名,驗證使用白名單策略,避免黑名單列表覆蓋不全造成的安全漏洞。 驗證上傳文件名,文件名中不得包含/、%等特殊字符,文件后綴名不滿足白名單策略的拒絕上傳;對允許上傳的文件進(jìn)行重命名,文件名必須20位以上,命名的方式采用多種隨機或置換算法。 對上傳文件類型進(jìn)行文件幻數(shù)檢查,如gif文件的文件頭起始為GIF89A。

40、 對B/S架構(gòu)系統(tǒng)的文件上傳,腳本可執(zhí)行的目錄不允許寫和上傳,可寫的上傳目錄不允許腳本執(zhí)行。 文件上傳到服務(wù)器之后,如果是屬于臨時文件,則在業(yè)務(wù)邏輯處理完成之后,將該原始文件刪除。,文件操作安全管理,嚴(yán)格限制文件下載的安全【Discipline】 系統(tǒng)應(yīng)用中必須設(shè)置特定的文件下載目錄,并根據(jù)不同用戶或角色授予不同的訪問權(quán)限。 系統(tǒng)應(yīng)用對文件下載目錄中的文件僅有讀取權(quán)限,沒有寫入和執(zhí)行的權(quán)限。 禁止下載應(yīng)用系統(tǒng)自身的配置和數(shù)據(jù)。 禁止在腳本的動態(tài)包含功能中直接使用用戶提交的數(shù)據(jù)和文件【Discipline】 文件包含漏洞,如果允許客戶端用戶輸入控制動態(tài)包含在服務(wù)器端的文件,會導(dǎo)致惡意代碼的執(zhí)行及

41、敏感信息泄露,主要包括本地文件包含和遠(yuǎn)程文件包含兩種形式。 禁止在腳本的動態(tài)包含功能中直接使用用戶提交的數(shù)據(jù)和文件。,文件操作安全管理,嚴(yán)格限制配置文件的讀寫和執(zhí)行權(quán)限【Discipline】 應(yīng)用服務(wù)器本身具有讀取配置文件的權(quán)限,但不具備寫入和執(zhí)行的權(quán)限,防止惡意攻擊者通過系統(tǒng)漏洞修改配置文件。 需嚴(yán)格控制配置文件的權(quán)限,僅允許特定的主機用戶或組讀、寫文件。 配置文件設(shè)置特殊的文件名和擴(kuò)展名,不使用通用的配置文件名,如config、configuration、setting等;擴(kuò)展名不使用通用的擴(kuò)展名,如inf、conf,避免被猜解。,文件操作安全管理,設(shè)置日志文件的安全【Disciplin

42、e】 指定主機用戶訪問日志文件,其他用戶不能訪問。 應(yīng)用系統(tǒng)管理員僅有讀取的權(quán)限,不具備修改和執(zhí)行的權(quán)限。 應(yīng)用系統(tǒng)僅具備寫入權(quán)限,不具備讀取和執(zhí)行權(quán)限。 對高安全等級系統(tǒng)采用集中的日志服務(wù)器存儲。 限制數(shù)據(jù)庫文件的讀寫權(quán)限【Discipline】 如系統(tǒng)使用文件型數(shù)據(jù)庫,必須嚴(yán)格控制庫文件的訪問權(quán)限。 授權(quán)特定帳戶對數(shù)據(jù)庫文件進(jìn)行讀取和寫入。 不允許用戶具備執(zhí)行數(shù)據(jù)庫文件的權(quán)限,防止攻擊者在數(shù)據(jù)庫中寫入木馬進(jìn)而利用執(zhí)行權(quán)限入侵應(yīng)用。 針對數(shù)據(jù)量不是很大的應(yīng)用或高安全級別的應(yīng)用,可以設(shè)置跳板機制,通過給跳板指令來獲取遠(yuǎn)程數(shù)據(jù)庫的數(shù)據(jù)。,文件操作安全管理,嚴(yán)格限制非特定類型外文件的執(zhí)行權(quán)限【Di

43、scipline】 不同的系統(tǒng)應(yīng)用服務(wù)器僅有權(quán)執(zhí)行特定腳本文件。如asp+iis架構(gòu),應(yīng)用有權(quán)限讀取并執(zhí)行和解析asp或aspx文件,jsp+tomcat架構(gòu),應(yīng)用僅可以執(zhí)行解析jsp文件,對于其他類型的文件一概不解析。如iis默認(rèn)情況下可以解析cer、asa、cdx等文件類型,需刪除iis中對其他文件類型的解析功能。 應(yīng)用服務(wù)器對非特定類型文件僅有讀取權(quán)限,不能執(zhí)行。如應(yīng)用服務(wù)器不能解析jpg、txt等文件。,數(shù)據(jù)安全,數(shù)據(jù)加密安全案例 數(shù)據(jù)傳輸未加密,數(shù)據(jù)安全,數(shù)據(jù)安全包括數(shù)據(jù)庫連接的安全、存儲的安全、傳輸?shù)陌踩?、秘鑰的安全、加密的機制是否強壯、如何更換秘鑰以及維護(hù)過程中的數(shù)據(jù)安全等。保證

44、數(shù)據(jù)的安全才能在最大程度上保護(hù)系統(tǒng)安全。在開發(fā)階段必須滿足以下要求: 數(shù)據(jù)庫連接帳號安全 數(shù)據(jù)安全 密鑰和算法安全 數(shù)據(jù)操作安全,數(shù)據(jù)庫連接帳號安全,設(shè)置數(shù)據(jù)庫連接帳號的安全【Discipline】 禁止在應(yīng)用代碼中寫入數(shù)據(jù)庫的連接帳戶和密碼,或其他硬編碼的方式。防止攻擊者非法獲取數(shù)據(jù)庫連接文件,從而直接得到數(shù)據(jù)庫訪問權(quán)限。 禁止在應(yīng)用配置文件中寫入明文的應(yīng)用數(shù)據(jù)庫連接帳戶和密碼信息,且?guī)艉兔艽a信息必須經(jīng)過高強度加密。做到即使攻擊者獲取了連接數(shù)據(jù)庫的文件也無法直接登錄數(shù)據(jù)庫。 對應(yīng)用的數(shù)據(jù)庫配置文件,進(jìn)行嚴(yán)格的訪問控制。 權(quán)限最小化原則;不要給應(yīng)用數(shù)據(jù)庫連接帳號配置dba等數(shù)據(jù)庫管理權(quán)限 不

45、要給應(yīng)用數(shù)據(jù)庫連接帳號分配跨庫的權(quán)限,數(shù)據(jù)安全,數(shù)據(jù)存儲安全 敏感數(shù)據(jù)必須使用標(biāo)準(zhǔn)算法進(jìn)行加密存儲【Policy】 重要敏感數(shù)據(jù)(如密碼、key等)在數(shù)據(jù)庫中必須使用標(biāo)準(zhǔn)算法進(jìn)行加密存儲。 數(shù)據(jù)傳輸安全 敏感數(shù)據(jù)傳輸必須使用post和加密隧道來保證數(shù)據(jù)安全【Policy】 數(shù)據(jù)傳輸?shù)陌踩饕欠乐箶?shù)據(jù)在傳輸?shù)倪^程中被竊聽或者被篡改。采用安全的傳輸方式和健全的校驗方式,可以有效的避免數(shù)據(jù)在傳輸過程中受到的攻擊。保證數(shù)據(jù)傳輸安全必須滿足以下幾點要求: 為保證數(shù)據(jù)的傳輸安全,禁止使用HTTP-GET來傳遞敏感數(shù)據(jù)。應(yīng)使用HTTP-POST來傳遞敏感數(shù)據(jù)。 傳遞敏感數(shù)據(jù)時,需對敏感信息加密或者使用ss

46、l加密隧道進(jìn)行數(shù)據(jù)傳輸。,數(shù)據(jù)安全,數(shù)據(jù)脫敏 使用脫敏算法對敏感數(shù)據(jù)進(jìn)行脫敏處理【Policy】 對用戶信息等敏感數(shù)據(jù)通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形、加密或屏蔽,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù)。二級及以上用戶信息必須進(jìn)行脫敏處理(信息分級詳見中國電信2013186號文)。無授權(quán)情況下,用戶信息不可見或經(jīng)脫敏處理后顯示,經(jīng)授權(quán)后,可查詢相應(yīng)級別的用戶信息或經(jīng)脫敏處理后的用戶信息。典型脫敏規(guī)則如下: 將用戶身份信息中出生年月日隱藏,以*代替; 對用戶地址中的小區(qū)或街道名稱及氣候信息進(jìn)行隱藏,以*代替; 對用戶通話清單中被叫號碼進(jìn)行部分隱藏,如將被叫號碼的倒數(shù)第3、第4位以*代替等。,數(shù)據(jù)安全,密鑰和算法的

47、安全【Policy】 敏感數(shù)據(jù)在數(shù)據(jù)庫中必須使用標(biāo)準(zhǔn)算法進(jìn)行加密存儲,通過不可逆性和密鑰保護(hù)來實現(xiàn)加密安全,禁止使用安全性未經(jīng)驗證的自行設(shè)計的加密算法進(jìn)行數(shù)據(jù)加密保護(hù);算法實現(xiàn)建議使用成熟的共享庫,如java JCE,C+ BOTAN,c+ Crypto+,Oracle dbms_crypto,Oracle TDE等。 對于數(shù)據(jù)量較大或需要解密的數(shù)據(jù),應(yīng)采用對稱加密算法(如AES、3DES等)加密,密鑰長度盡可能長,如AES密鑰盡可能使用192或256位的密鑰,3DES加密密鑰盡可能使用168位的密鑰。 對于無需解密的敏感數(shù)據(jù)(如認(rèn)證密碼),應(yīng)使用單向加密算法,如使用MD5或者SHA加密,其算

48、法必須加入salt和身份標(biāo)識,防止密文被彩虹表暴力破解。如采用MD5(id+Password+salt)其中salt=abkdfang.(隨機字符串)。 密鑰保護(hù):建議密鑰保存在獨立的數(shù)據(jù)庫用戶空間,在數(shù)據(jù)庫內(nèi)部封裝(如使用存儲過程)實現(xiàn)加解密接口,密鑰只能被內(nèi)部加解密接口訪問,加解密接口可以被應(yīng)用調(diào)用,防止密鑰外泄; 應(yīng)用必須考慮密鑰的定期更新機制,尤其是密文數(shù)據(jù)量巨大場景下進(jìn)行密鑰更新時的數(shù)據(jù)割接方案。,數(shù)據(jù)安全,嚴(yán)格管理數(shù)據(jù)安全操作【Policy】 核心敏感數(shù)據(jù),要求通過應(yīng)用頁面來維護(hù),并嚴(yán)格控制用戶權(quán)限,避免直接修改數(shù)據(jù)庫。 系統(tǒng)通常情況下不提供對敏感數(shù)據(jù)批量操作功能,對因業(yè)務(wù)需要的類似功能應(yīng)具備嚴(yán)格權(quán)限控制和操作行為審計。 加密數(shù)據(jù)操作應(yīng)滿足權(quán)限分離原則,維護(hù)用戶禁止擁有訪問密文權(quá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

提交評論