前言:
代碼審計涉及知識面較廣,審計人員一方面要提高自身代碼掌控能力,另一方面要多總結一些常用的高效審計技巧。
個人的思路是藉助自動化的工具給出可能存在的缺陷清單,人工審計彌補工具的不足,先易後難。
工具準備:
IDEA(反編譯)、
Eclipse、
Sublime Text、
Fortify SCA(基於源代碼查找)、
Findbugs(基於字節碼查找)
工作環境:
1.甲方公司審計專崗,
一般項目數量都比較多,有自己定製的SDL規範掃描器,代碼審計更多變成了對SDL落地徹查。
2.外包服務的代碼審計,
基本上不提供搭建環境的條件,因爲很多情況下不給數據庫,
有的提供項目大部分源代碼,有的僅提供小部分源代碼。
3.最理想環境,
搭建有環境可以進行Debug,通常在駐場審計服務中會碰到。
工作成果:
依據CVE公共漏洞字典表、OWASP十大Web漏洞,以及設備、軟件廠商公佈的漏洞庫,
結合代碼掃描工具結果驗證編寫報告,報告中給出風險等級、修復方法以及安全編碼規範建議等服務。
一些老生常談的JAVA技能:
常見框架:Strusts2、Spring boot、Spring MVC、SSH(Struts2+Spring+Hibernate)
注意ORM框架特殊性(Hibernate)
Filter、Interceptor
@RequestMapping註解
Application-context.xml、struts.xml、web.xml作用(審計切入點)
JavaWeb Servlet線程競爭
四種思路:
逆向回溯審計
逆向回溯的審計方式針對特徵明顯的安全漏洞挖掘是非常有效的。
大多數安全問題是由於函數使用不當造成的,
比如命令注入通常會使用Runtime.getRuntime().exec(command)執行外部的程序或者命令,
另外比如SQL注入可以直接搜索查看SQL語句是否使用字符串動態拼接。
OWASP TOP10的指紋識別率較高的安全問題
Hibernate的HQL是對對象進行操作
搜索有關字符串拼接的關鍵字。如Concat、append等。
正向業務審計
挖掘更有價值的漏洞,甲方進行自研產品的代碼審計,就需要了解整個應用的業務邏輯,
比如越權類漏洞,需要了解應用中權限劃分,每一級別用戶的功能,
這樣才能很好的發現並確定哪些操作是非法的。
正向審計通常從前端頁面開始,因爲頁面會有系統中大部分功能展示,
找出功能所對應的URL就是我們所審計數據流的輸入點,某系統修改個人資料處存在平行越權。
SpingMVC的常用@RequestMapping註解爲控制器指定可以處理哪些 URL 請求,
也就是說可以直接通過在控制層搜索URL請求,即可找到控制層所對應的業務邏輯代碼。
根據Http請求跟蹤到業務邏輯代碼:
1、SpringMVC或Spring boot
在Java文件中相應的方法會有@RequestMapping(“/Login.do”)表示了直接把請求映射到業務邏輯代碼上。
2、Struts在config目錄下有公共配置文件struts.xml,需要在xml配置一個action對應的處理類方法和返回的頁面,
通過對應的Action所在的路徑找到業務邏輯代碼。
敏感清單審計
企業中進行代碼審計工作的系統有以下幾類:網銀系統、門戶類網站(包括後臺管理系統)、購物類網站等,
針對這幾類系統身份權限校驗是都需要審計的機制,網銀系統着重審計轉賬交易功能,門戶類網站主要是後臺管理系統。
其次弄清楚當前源代碼項目所採用的框架結構,比如SSH(Struts+Spring+Hibernate)、Spring MVC等,
這裏可以通過查看lib目錄下所使用的第三方Jar包來判斷使用的框架類型,
struts2框架需要struts2-core-xxxx.jar提供核心包,spring框架需要spring-core-xxxx.jar提供核心包。
根據項目中所引入的jar包來判斷使用的框架類型是一種比較快捷的方式。
如果想全面的瞭解此項目中具體的框架使用、過濾器、Servlet分佈等情況,可以通過web.xml配置文件來查看,
最後跟蹤數據流來定位缺陷代碼。
通讀全文審計
比較耗時,不好把握,不建議採用。
工作流程:
1.逆向回溯審計,拿到源代碼後,Fortify SCA加載Firebug執行掃描,人工對掃描結果驗證,編寫代碼審計報告。
2.正向業務審計,門檻較高,準備工作做好後,讀配置文件熟悉項目結構,根據安全編碼經驗按業務模塊進行,找常規漏洞和業務邏輯漏洞,編寫代碼審計報告。準備工作有三點,
明確項目類型:該類型的項目可能存在常見漏洞的代碼層原理及典型案例。
配置文件分析:Application-context.xml、struts.xml、web.xml。
代碼學習能力:熟讀若干個有代表的業務用例,腦子裏跟讀一遍代碼和畫數據流圖輔助理解業務。
3.通讀全文審計,根據用戶提供的測試環境、設計文檔、使用手冊,對應用系統的業務功能進行學習,對業務數據流進行梳理,檢查關鍵環節是否進行了業務安全控制,檢測完成後,需要從業務角度對威脅進行分析並歸類。
全文審計最好搭配自動化掃描器進行。
補充:自動化審計基本原理
1.常規漏洞代碼審計
根據規則,grep匹配源碼文件內容。
2.檢測不安全組件
根據規則,讀取配置文件信息(匹配maven的依賴檢測規則),是否包含已知缺陷版本。
3.正則檢測硬編碼
掃描出所有代碼中的硬編碼,需要人工驗證內容屬於敏感信息。
4.檢測mybatis不安全SQL編碼
獲取項目文件中的mybatis配置文件(pom.xml和mapper.XML文件)
補充:業務層的Checklist
程序初始安裝
站點信息泄漏
文件上傳
文件管理
登陸認證
任意密碼重置
數據庫備份恢復
驗證碼繞過或爆破
越權查看用戶資料
消費負數
抓包改包充值漏洞
交互頁面存儲型XSS
補充:代碼層的Checklist
Servlet線程競爭
XML注入
不正當的錯誤處理,更多見WebGoat8項目。