隋中昱含 李迎接 姚翔宇 查蘊(yùn)初
【摘 要】類似于密碼泄露的安全問題都是軟件程序有Bug導(dǎo)致的,例如CSDN的數(shù)據(jù)庫泄露事件、攜程泄露用戶銀行卡信息事件、電商網(wǎng)站被用戶篡改購買支付金額等等。在軟件項(xiàng)目開發(fā)時(shí),安全一直是一個比較容易忽略的問題,但這也會導(dǎo)致很嚴(yán)重的損失,所以在軟件開發(fā)時(shí)必要對安全問題引起重視,防患未然,構(gòu)建安全軟件。本文將淺談原理以及應(yīng)對措施。
【關(guān)鍵詞】網(wǎng)絡(luò)安全;信息泄露;數(shù)據(jù)庫;隱私
1、安全問題本質(zhì)是技術(shù)風(fēng)險(xiǎn)
安全問題本質(zhì)上是一種技術(shù)風(fēng)險(xiǎn),沒發(fā)生問題的時(shí)候大家一切平安,一旦發(fā)生問題就會有嚴(yán)重的影響。所以對待安全問題,可以借鑒對風(fēng)險(xiǎn)管理的方法來改進(jìn)軟件的安全問題,也就是風(fēng)險(xiǎn)識別、風(fēng)險(xiǎn)量化、應(yīng)對計(jì)劃和風(fēng)險(xiǎn)監(jiān)控。做風(fēng)險(xiǎn)管理的時(shí)候,首重之重就是識別風(fēng)險(xiǎn)和對風(fēng)險(xiǎn)的量化,對于安全問題,就要思考一下,軟件項(xiàng)目中安全問題的主要來源是什么?
第一類:惡意輸入
大多熟知的軟件安全問題都屬于此類型,就是黑客通過惡意輸入,然后繞過軟件限制對系統(tǒng)進(jìn)行攻擊和破壞。像SQL注入,就是黑客把SQL命令輸入到軟件的輸入框或網(wǎng)頁的URL查詢參數(shù),欺騙服務(wù)器,執(zhí)行惡意的SQL命令,這種可以繞過密碼驗(yàn)證,登錄管理員賬號,或者刪除數(shù)據(jù)庫數(shù)據(jù),甚至控制服務(wù)器,當(dāng)成肉雞對網(wǎng)絡(luò)發(fā)起泛洪攻擊。還有像XSS攻擊,將惡意代碼通過外部參數(shù)或者用戶輸入的方式植入網(wǎng)頁中,獲取用戶的Cookie等敏感信息、盜用管理員權(quán)限,甚至非法轉(zhuǎn)賬。
上面的問題都可以歸結(jié)為惡意輸入導(dǎo)致的,應(yīng)對惡意輸入的問題,最簡單有效的方式就是對用戶輸入數(shù)據(jù)進(jìn)行嚴(yán)格的檢查校驗(yàn)和格式化。
第二類:假冒身份
很多程序?qū)τ谟脩羯矸輽z驗(yàn)比較弱,會導(dǎo)致黑客假冒用戶身份做出超越權(quán)限的事情。比如有的網(wǎng)站把后臺入口隱藏起來,不做權(quán)限控制,導(dǎo)致黑客猜到地址后就可以進(jìn)入后臺操作。還有的游戲后臺不做驗(yàn)證,直接接收傳入的數(shù)據(jù),導(dǎo)致偽造游戲用戶發(fā)送數(shù)據(jù)破壞游戲公平。這類問題應(yīng)對策略就是對用戶的身份做驗(yàn)證,尤其是涉及敏感權(quán)限的操作,甚而做兩重驗(yàn)證。
第三類:數(shù)據(jù)泄露
很多軟件數(shù)據(jù)庫都存儲了用戶的敏感信息,比如用戶賬號密碼信用卡信息或者服務(wù)器的敏感信息,比如數(shù)據(jù)庫連接字符串、登錄賬號密碼,這些數(shù)據(jù)是有被泄露風(fēng)險(xiǎn)的。一些軟件甚至?xí)逊?wù)器上的敏感信息打包到程序中,要知道程序會被反編譯從而導(dǎo)致敏感數(shù)據(jù)泄露,攜程泄露用戶銀行卡信息事件就是因?yàn)榘延脩粜庞每ㄐ畔⒂涗浽谌罩局校罩拘孤秾?dǎo)致用戶信用卡也被泄露,造成盜刷等等嚴(yán)重問題。還有CSDN,對用戶密碼銘文存儲到數(shù)據(jù)庫中,數(shù)據(jù)庫泄露之后,用戶密碼也跟著泄露,而且現(xiàn)在大多數(shù)用戶都習(xí)慣于使用統(tǒng)一的密碼,導(dǎo)致一起泄露。所以,對于軟件來說,不能假設(shè)數(shù)據(jù)存儲是安全的,而是要考慮到數(shù)據(jù)是有泄漏的可能,提前做好預(yù)防措施,對敏感數(shù)據(jù)加密。
2.如何預(yù)防軟件中的安全問題
在風(fēng)險(xiǎn)管理中,對風(fēng)險(xiǎn)識別和量化后,接下來就是要制定應(yīng)對計(jì)劃了。
很多開發(fā)人員覺得安全問題,只要在軟件開發(fā)完成后,測試階段做一個安全測試就可以了,但這種做法完全把安全問題留到了最后環(huán)節(jié),是很難達(dá)到對安全問題進(jìn)行高質(zhì)量管控的。為什么呢?
一方面對于安全測試來說,很難覆蓋到所有可能存在的場景,會出現(xiàn)疏漏,另一方面,如果測試階段發(fā)現(xiàn)安全問題,可能需要修改很多代碼,甚至架構(gòu)要重新設(shè)計(jì),成本代價(jià)太高。
很顯然,應(yīng)對安全問題,最好的方式就是整個生命周期都做到重視安全問題。
(1)設(shè)計(jì)階段
做設(shè)計(jì)架構(gòu)時(shí),就要把安全加入到設(shè)計(jì)目標(biāo)中,有了這個設(shè)計(jì)目標(biāo),自然能找到很多安全相關(guān)的解決方案。為了保障在設(shè)計(jì)時(shí)就考慮好安全方面的問題,在做架構(gòu)設(shè)計(jì)方案評審時(shí),也需要增加安全方面的評審,確保有安全方面的考慮,確保技術(shù)方案切實(shí)可行。在架構(gòu)設(shè)計(jì)領(lǐng)域,也有了業(yè)界公認(rèn)的好的安全相關(guān)的設(shè)計(jì)原則,比如攻擊面最小化、權(quán)限最小化、縱深防御等。
(2)攻擊面最小化
攻擊面指程序被用戶直接訪問到的部分,比如API、網(wǎng)站等,而攻擊面最小化的設(shè)計(jì)原則,就是盡量減少暴露黑客可能發(fā)現(xiàn)并試圖利用的攻擊面數(shù)量。舉例來說,你的數(shù)據(jù)庫應(yīng)該關(guān)閉外網(wǎng)訪問,避免黑客直接攻擊數(shù)據(jù)庫導(dǎo)致數(shù)據(jù)泄露,還有對于復(fù)雜的多網(wǎng)站業(yè)務(wù)系統(tǒng),實(shí)行單點(diǎn)認(rèn)證,就可以讓所有業(yè)務(wù)都在一個地方登錄,這一個地方做到足夠安全了,那所有的網(wǎng)站的登陸都是相對安全的。
(3)權(quán)限最小化
權(quán)限最小化的設(shè)計(jì)原則就是對于系統(tǒng)的用戶、文件訪問、進(jìn)程運(yùn)行等,給予其能擁有的最小權(quán)限,這樣可以保證一個應(yīng)用程序或者網(wǎng)站被攻擊、破解,將損害講到最低。
以前在部署Asp.Net程序時(shí),運(yùn)行Asp.Net程序是單獨(dú)一個用戶,此用戶擁有的權(quán)限只能是運(yùn)行程序目錄,不能超出其目錄范圍,這樣即使用戶上傳了惡意木馬文件,也只能控制著一個目錄,避免進(jìn)一步的損失。
如果真的出現(xiàn)了安全問題怎么辦?
安全問題就像程序的Bug一樣,沒有誰能保證絕對的安全,風(fēng)險(xiǎn)管理的最后一步風(fēng)險(xiǎn)監(jiān)控說的有道理,必須做好Plan B,出現(xiàn)問題馬上應(yīng)對,將損失降到最低。
首先,設(shè)立應(yīng)急的流程,出現(xiàn)安全問題了,根據(jù)流程,找到第一責(zé)任人,立即解決問題回復(fù)生產(chǎn),避免進(jìn)一步損失。其次,要分析程序的漏洞,通過分析日志,找出漏洞最后,總結(jié)原因,從錯誤中吸取教訓(xùn),看問題是在哪個環(huán)節(jié)導(dǎo)致的,必要的話,改進(jìn)開發(fā)流程,避免類似的安全問題再次發(fā)生。
【參考文獻(xiàn)】
[1]郭帥強(qiáng). 社交網(wǎng)絡(luò)中的個人隱私安全保護(hù)問題研究[D].廣東財(cái)經(jīng)大學(xué),2016.
[2]何靜.數(shù)據(jù)庫加固方案 防范重要數(shù)據(jù)和信息泄露[J].計(jì)算機(jī)與網(wǎng)絡(luò),2019,45(09):54-55.
[3]包英明.大數(shù)據(jù)平臺數(shù)據(jù)安全防護(hù)技術(shù)[J].信息安全研究,2019,5(03):242-247.
[4]惡意木馬偽裝成輸入法圖標(biāo) 盜取用戶隱私數(shù)據(jù)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2011,37(17):31.