checkmarx使用筆記、原理


checkmarks是一款商業的代碼靜態分析工具,和pmd類似的地方是他分析的是java文件,而非class文件。checkmarks使用 .net開發,必須安裝在windows上,它的規則也是類似.net語言的語法。

checkmarks 的工作機制大概如下:

1、創建任務時可以通過git、svn、或者上傳代碼打包。

2、checkmarks會將代碼進行語法樹解析。

3、然后分析代碼中的數據流,並將整個代碼中的數據流存儲到sql server數據庫中,可以理解成一張龐大的數據流網,這個分析比較吃內存。

4、然后匹配規則,checkmarx自帶了各種規則,也可以自己編寫規則。規則也叫query,顧名思義就是從整個數據流網中查找我們關心的數據流。比如數據流的起點是request.getparameter("url")的調用,終點是 httpClient.exec,這樣我們來判斷是否存在ssrf漏洞。

 

自定義規則:

checkmarks的規則就是一個一個的查詢,這個查詢定義了如何從數據流網中找到我們關心的數據流。

checkmarks內置了大量的函數,100多個吧,我們利用這種函數找到我們關心的數據流的起點,終點。當然也可以的定義過濾點,比如某個安全API的調用作為一個過濾點,過濾掉已經修復了安全問題的數據流。

 

不足之處:

目前checkmarks的問題還是比較多的,雖然支持了各類的語言,常見語言基本都支持java、php、go等等,但是默認的規則基本上實用性比較差,需要花很多時間去自己編寫規則。

目前不支持模塊引擎語言,比如velocity、freemarker、thymeleaf等的分析

對前后端分離的項目分析無法支持,比如后端spring mvc,前端vue就無法關聯分析了。也不支持 vue、react等框架文件的分析。其實實際代碼審計關聯分析java、xml、vue等文件類型,目前cheackmarx不會做這樣的分析。這兩條對xss這樣的規則編寫造成了很大的困擾。

checkmarks封裝的比較死,寫規則時有時候讓人琢磨不透,沒法做定制開發,不夠靈活。

對spring這種依賴注入的情況,數據流經常是不完整的,注入的接口類沒有實際邏輯就會斷,其實數據流是走到了接口的實現類,checkmarx並不會分析實際注入了哪個實現類並進行數據流跟蹤。會造成一定的漏報。

對一些orm框架也沒法做數據流分析,比如mybatis、spring data jpa等,實際執行sql操作的類都是運行時產生的,比如mapper接口實現類,checkmarx不會根據這些框架的實際情況進行分析。這對sql注入規則的編寫造成了一定的誤報。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM