馬全斌
(天津市住房公積金管理中心,天津 300042)
隨著我國信息化產業的不斷發展,互聯網系統規模的不斷加大,安全問題的重要性不容忽視,開發安全更是重中之重。互聯網系統在開發過程中必須要遵守適用的安全開發規范,保證在系統設計的時候能夠抵御可預見的安全風險。在集成測試時,應進行源代碼掃描和基礎滲透測試,提早發現問題的時間,保證項目的如期上線。因此,在實施互聯網項目時,在開發階段和測試的早期階段,應通過遵守安全開發規范,及時、多次進行源代碼掃描和基礎滲透測試來保證系統安全。
在系統設計時應符合安全開發規范,安全開發規范主要包含以下相關內容:
1.1.1 驗證輸入內容
有許多方式可以對用戶的輸入進行處理,不同的輸入類型以及不同的應用場景適用不同的驗證方式,必要的情況下還可以進行組合驗證。
1.黑名單。黑名單包含一系列具有風險的字符串清單,可以解析已知的攻擊模式,通過對用戶的輸入內容進行匹配,一旦匹配命中,系統會拒絕用戶的請求,保證系統安全。如果有新的攻擊字符串產生,黑名單需要立刻更新,因此時效性比較差。
2.白名單。白名單包含一系列安全的字符串清單,驗證用戶輸入是否符合安全內容,符合的請求才能被處理,其他數據會被阻止。這種方式可以有效地解決安全問題,但是通用性較差。
1.1.2 加密或者編碼輸出內容
對輸出內容加密或者進行編碼可以有效地防止跨站攻擊,同時也可以保證輸出內容的完整性以及正確性,對輸出內容加密或者進行編碼主要有以下幾種方式:
1.對HTML 代碼的輸出進行過濾。
2.對HTML 代碼的輸出進行加密或者編碼。
3.對非HTML 代碼的輸出,先對內容進行加密或者編碼,再輸出到頁面。
4.對特殊符號進行編碼形式的轉換。
1.1.3 安全審計
安全審計分為白盒安全審計和黑盒安全審計,具有以下特點:
1.白盒安全審計。對系統代碼應進行安全審計,及時發現由代碼造成的安全問題,并進行修改。白盒審計通常采取自動靜態分析技術對應用程序的源代碼進行掃描,定位可能存在問題的環節以及數量,驗證應用程序的安全性。執行自動靜態分析時,不需要運行待分析的系統,因此在查詢已知或未知跨站攻擊以及SQL注入漏洞時更為高效,同時白盒審計過程能與系統開發并行,可以節約大量研發時間并且節省巨大的成本。
2.黑盒安全審計。在信息化項目的實施過程中,應對已經開發完成的系統進行黑盒安全審計。黑盒安全審計不需要了解系統內部程序邏輯,僅需要模擬用戶操作行為,分析程序輸入數據與輸出數據的對應關系,針對目前主流的安全漏洞進行檢測和驗證。
源代碼掃描通常采用靜態分析方法。靜態分析是指不運行被測程序本身,通過工具掃描和人工確認來檢查源程序的語法、結構、過程、接口等來檢查程序的正確性。找出程序中存在的漏洞和缺陷,例如不匹配的參數、邏輯錯誤的循環嵌套、不允許的遞歸、未使用過的變量和可疑的計算等。
靜態分析不需要代碼的運行環境,因此適合在項目早期的編碼階段,可以在編碼階段找出可能存在的安全風險代碼,這樣開發人員可以在早期解決潛在的安全問題。
通常聘請第三方安全公司對系統進行安全掃描,會有明確的掃描次數,一般是兩次掃描:初測和復測。因此為了掃描得更全面,初測一般放在系統測試中后期進行,這個階段系統開發工作已經結束,測試工作也到了收尾階段,很少會因為系統修改導致新的安全問題,但是缺點也很明顯,就是一旦測試出需要較大改動的安全問題,修改的時間通常不夠。
滲透測試是動態分析,在測試的實施過程中,通常會從以下幾個維度來進行:
1.數據傳輸及身份認證。
暴力破解:認證方式存在漏洞,可以被繞過,或者沒有抵御暴力破解的策略。
密碼安全:默認密碼未修改,或者密碼復雜度不足。
傳輸安全:隱私數據傳輸未加密,或者加密的方式存在風險。
信息泄露:敏感信息未經轉換就提示給用戶,造成信息泄露。
密碼修改:修改密碼不需要認證,修改密碼不需要提供原始密碼,修改密碼時可窮舉原始密碼。
登錄漏洞:登錄存在SQL 注入。
密碼找回:找回密碼問題簡單,找回密碼問題的答案可被窮舉,依據找回密碼的步驟限定邏輯,找回的密碼以非安全方式通知用戶。
管理后臺泄漏:管理后臺對外開放,管理后臺密碼復雜度無要求。
2.會話管理。令牌安全:令牌可被猜測,會話令牌固定。
3.數據驗證。路徑遍歷:惡意的文件讀寫,以及文件上傳、下載漏洞。
XSS:存儲型,反射型。
4.訪問越權。用戶可訪問其他同級別用戶的數據內容,低權限用戶可訪問高權限用戶的數據內容。
5.跨站腳本攻擊(XSS/CSS)。
6.配置管理。使用了不安全的HTTP 方法,造成遍歷網站目錄,取得中間件的版本以及服務器開放的端口。
7.偽造跨站請求(CSRF)。
以電子公積金項目為例,該項目的安全評測報告問題如下:
1.源代碼掃描問題。
2.漏洞掃描問題。
3.滲透測試問題。
其中跨站請求偽造,參數硬編碼,框架問題,密碼加密存儲,使用弱加密算法,敏感信息泄露,身份認證,數據驗證和配置管理均為安全設計問題,應在安全架構時,充分考慮這些安全問題,在開發過程中注意避免。
系統承建商在進行系統設計時,應該充分考慮系統的安全需求,有針對性地進行設計,系統設計階段通常包括概要設計和詳細設計,當系統規模較小時也可以合并為一個階段,該階段的主要安全性工作是進行系統的安全性設計,系統安全設計工作應與常規的設計緊密結合,貫穿在系統設計過程始終。此外,隨著系統細節的展開,還要進一步展開安全性分析以發現新的危險,補充系統安全性需求。
在系統建設時,需要考慮該系統涉及了哪些相關系統和硬件,實現了哪些數據的采集、傳遞、加工和處理功能,系統之間是否有明確的界限,是否存在敏感數據丟失的疑慮,系統管理員是否可信,系統如何初始化,如何建立一個可信的口令機制,如何確認某個操作人員的行為等問題。為了解決這些不確定因素,系統在設計時應建立相應的安全模型,包括:
1.系統用戶應劃分為:普通用戶、管理員和系統管理員。管理員負責應用配置管理,系統管理員負責管理員和系統后臺的管理。
2.系統劃分為以下三個部分:用戶界面邏輯、業務邏輯和異常處理。以用戶界面邏輯為例,用戶界面邏輯主要包括兩個部分:數據訪問和登錄控制。系統在啟動時,用戶首先要登錄系統,通過驗證后才可以進行數據訪問。通過登錄控制界面,可以完成的主要功能包括:口令驗證、口令修改、口令相關數據加密、記載登錄日志。登錄控制在設計時應考慮使用用戶ID,用戶輸入用戶ID,從權限數據表中提取出相應的用戶名,在密碼輸入時,應考慮使用密碼控件,對密碼數據進行加密并防止用戶遠程登錄,同時獲取一定的客戶端信息,建立系統黑名單數據。對于用戶的口令修改,應由客戶自行完成,而不是系統管理員,系統管理員對用戶授權,但是口令由用戶在用戶界面輸入,并加密存儲至后臺數據庫中,避免系統管理員獲取用戶口令造成泄密,口令的加密方式應使用不可逆的算法,推薦使用SHA256 或者復合算法。對于初始口令,應要求用戶第一次登錄時必須更改,強制要求口令為數字加字母加符號的組合,越復雜越長越好。
3.在系統安全方面要實現的功能包括:訪問控制,抗抵賴、數據保密、身份鑒別、授權機制、日志審計。
4.對應開發規范,應充分考慮系統的身份認證、會話管理、訪問授權、數據驗證、配置管理、跨站腳本攻擊(XSS/CSS)和跨站請求偽造(CSRF)的相關設計。在設計時:第一,要確定系統的安全目標,目標清晰有助于將注意力集中在威脅建模活動上,以及確定后續步驟的工作量。第二,創建系統應用程序概述,逐條列出系統應用程序的重要特征和參與者,有助于確定相關威脅。第三,分解系統應用程序,全面了解系統應用程序的結構,盡量發現更相關、更具體的威脅。第四,確定威脅,使用步驟二和步驟三中的詳細信息來確定與系統應用程序方案相關的威脅。第五,確定漏洞,檢查系統應用程序的各層以確定與威脅有關的弱點。
互聯網系統應用安全開發是一項系統工作,安全意識的培養、技術的學習和應用、思路和眼界的開拓三方面內容必不可少,因此需要對相關人員進行必要的培訓。
2.2.1 安全意識的培養
從安全事件切入,使相關人員重視系統安全問題,培養安全意識,在工作中充分考慮系統的安全問題。
2.2.2 技術的學習和應用
通過應用來驗證自身技術的掌握情況,制定短期目標和長期目標,通過短期目標的不斷積累,完成從量變到質變的過程。技術的學習一定要與應用實踐相結合,找到差距,認清需求,通過培訓不斷提高。
2.2.3 思路和眼界的開拓
通過一定的技術和應用實踐的積累,擺脫被動接受培訓的階段,對系統應用安全有一定的見解,思路清晰,并向既定目標不斷探索和前進。
2.3.1 提前進行測試,盡早發現問題
與第三方安全評測公司合作,存在一定的約束,主要是評測次數和評測時間需要與公司進行協調,通常情況是兩次,第一次安排在系統測試后期,這個階段系統功能開發基本完畢,大部分測試問題也得到解決,代碼相對固定,做安全測試比較具有代表性。第二次安排在上線前一周左右,主要針對第一次測試出現的問題,檢查其修改情況。這種安排受公司資源的約束和次數的限制,發現問題較晚,通常不能全部修改,而是根據問題的優先級,著重解決互聯網系統的高危問題,時間緊任務重,壓力較大。
為徹底解決以上約束,建議自主開展安全開發和測試,不受公司限制,使用內部人員,在開發階段按照開發的實際情況進行安全測試,包括源代碼掃描和滲透測試,其中滲透測試會相對晚一些,需要一定的部署后才能進行,但仍早于公司測試,這樣可以提前發現問題,即便是設計問題,也有充足的時間進行調整,早發現早解決。同時,使用第三方安全評測公司進行配合,形成雙保險,解決系統的安全開發問題。
2.3.2 熟練使用工具,結合人工篩查
自主開展安全開發和測試,必要的工具是不可缺少的,根據經驗,通常使用以下工具:Fortify SCA、AppScan、Kali Linux、Nessus 等,需要注意的是,工具畢竟是自動化測試,會有一定的誤報率和漏報率,因此需要定期升級。對于測試結果,需要手工核對,并且按照經驗進行手工滲透,完善安全測試結果。
APP 項目與普通的web 項目不一樣,APP 升級會對用戶體驗造成一定的影響,在設計開發時,使用智能更新技術可以解決這個問題。智能更新基于類加載技術,無需Root 權限自動完成對APP 更新資源包的檢測,下載和資源文件替換,整個更新過程對終端用戶的透明化,讓Android 用戶享有IOS 的體驗,提升了用戶的留存率和轉化率。
使用智能更新技術可以帶來的好處有:
1.易操作:上傳移動應用后,快速接受并處理,下發處理后程序供用戶發布。
2.可更新范圍廣:APK 包中的除androidmanifest.xml 文件和圖標文件外的所有文件都可以更新。
3.增強安全性:可實現對原包APK 整包加密,并對APK 包內的所有文件進行單個加密,運行時在內存中文件動態解密,解密后的數據不落地。
4.強大的版本控制:隨時更新、強制更新。可以不經過用戶同意進行后臺靜默更新。
5.更新包體積小:更新包為差異更新包,能最小化減少下載時間和下載流量,增強用戶體驗,減緩服務器壓力。
6.不需要權限:無論用戶手機是否root,都能正常運行。
7.增強用戶體驗:用戶只需安裝一次,后續更新無需再次安裝即可達到更新效果。
8.零風險:防止應用被非法加入病毒、計費 SDK、廣告 SDK、惡意代碼,防止非法篡改。
隨著互聯網的不斷發展,系統的安全開發工作越來越重要,本文總結了互聯網系統安全開發過程中的常見手段,并從加強系統安全設計、定期進行安全開發和測試培訓、自主開展安全開發和測試和加強APP 項目更新的靈活性四個方面提出了優化互聯網系統安全性的方法,希望可以對互聯網信息化建設工作有所幫助。