JAVA審計學習筆記

前言:
代碼審計涉及知識面較廣,審計人員一方面要提高自身代碼掌控能力,另一方面要多總結一些常用的高效審計技巧。
個人的思路是藉助自動化的工具給出可能存在的缺陷清單,人工審計彌補工具的不足,先易後難。


工具準備:
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項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章