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