高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘

當前位置: 首頁 >綜合 > 正文

使用doop識別最近commons text漏洞的污點信息流

2023-05-11 08:12:02 來源:vivo互聯網技術
一、doop靜態分析框架簡介1. doop靜態分析框架簡介

doop靜態分析框架由希臘雅典大學plast-lab Yannis Smaragdakis團隊設計開發,目前看是一款開源領域的比較先進的程序靜態分析框架,一些程序靜態分析論文的理論也有通過doop的規則實現后實驗。


(資料圖片僅供參考)

doop整體架構簡單明了,符合通常靜態代碼漏洞掃描工具掃描器內核的設計思路。架構上由groovy寫的調用程序“粘合”在一起,通過調用fact-generator和datalog分析器,得出自動化的分析結果。

下面是筆者畫的doop整體架構圖,包含doop中一些關鍵的組件模塊:

2. doop工作流程

doop的fact generator模塊會對輸入進行解析(例如jar包的解析或者類的resolve從而加載進必要的類信息到內存中)調用soot、wala等工具生成jimple IR,在此基礎上生成后續分析引擎需要的facts文件。而后doop使用LogicBlox(目前doop已不維護)或者Soufflé(開源的datalog分析引擎)基于facts文件和既定的datalog分析規則文件進行分析,得到最終的程序分析結果。

doop支持對java源碼及字節碼的分析,不過源碼的jdk版本受限,建議直接使用字節碼進行分析。

doop核心是其實現的一套datalog分析規則,其中包含了由粗糙到精細的context-insensitive、1-call-site-sensitive、1-call-site-sensitive+heap的豐富的靜態程序分析策略等等等,同時通過在addons中添加了額外的對信息流分析、對spring等生態框架、對java反射特性的支持,十分強大。

以上是對doop的架構和功能的簡單介紹,jar包信息的解析、規則的預處理、編譯執行和解釋執行、程序的并發設計或者由于大量sootclass加載造成的內存溢出問題等一些細節由于篇幅限制不在此介紹。

二、commons text rce漏洞簡介

先對該漏洞進行簡單介紹。

Apache Commons Text是一款處理字符串和文本塊的開源項目,之前被披露存在CVE-2022-42889遠程代碼執行漏洞,這個漏洞目前網上的分析文章比較多,在此不做復述。該漏洞原理上有點類似log4j2,當然影響不可相比,其代碼中存在可以造成代碼執行的插值器,例如ScriptStringLookup(當然這里提到這個插值器是因為我們目標就是分析這一條sink污點流),同時沒有對輸入字符串的安全性進行驗證導致問題。

借用網上公開的poc觸發ScriptStringLookup中的代碼執行,使用commons text 1.9版本 :

完整的漏洞調用棧如下:

從調用棧可以看出,通過調用commons text的字符串替換函數,可以調用到ScriptStringLookup類的lookup方法,從而調用scriptEngine.eval執行代碼。可以看出該條漏洞鏈路較淺,但鏈路關鍵節點也涉及了接口抽象類的cast、輸入字符串的詞法分析狀態機以及各種字符串的處理函數,作為實驗對象非常合適。

三、commons text rce污點信息流的doop識別規則

我們選取上述二中commons text中

org.apache.commons.text.StringSubstitutor replace函數作為source,ScriptEngine eval函數作為sink。

doop設置app only模式去進行分析,doop在app only模式下會將!ApplicationMethod(?signature)加入isOpaqueMethod(?signature),這樣一些分析不會進入jdk的類中,可以大大提高doop的分析效率。依據萊斯定理,靜態程序分析難以達到完全的完備(truth或者perfect),也是盡可能優化sound。類似在企業級的SAST部署使用也是如此,也需要在掃描精度、掃描速度以及實際可用性中進行取舍或者平衡,所以doop的app only模式下在個人看來更接近實際嵌入到devsecops中的輕量級靜態代碼漏洞掃描的應用。

3.1 doop的datalog分析規則簡單介紹

由于涉及doop app only規則的改造,首先先簡單介紹doop使用的datalog規則。

doop目前維護使用開源的Soufflé分析datalog規則。datalog是聲明式的編程語言,也是prolog語言的非圖靈完備子集,所以本質上也是建立在形式邏輯中的一階邏輯上。所以基礎概念也是命題推導,在Soufflé的形式上就是表現為關系(relation)。

如下例子:

很明顯可以看出該例子通過datalog定義的關系邏輯實現相等關系的自反性、對稱性和傳遞性,首先定義了equivalence關系,該關系可以由rel1和rel2關系蘊涵得到,而equivalence的a需要滿足關系rel1,b需要滿足關系rel2。具體語法和高階特性可以通過souffle-lang.github.io網站進行了解。

3.2 doop配置使用簡單介紹

doop可以通過gradle去編譯使用,需要提前在類unix系統中借助cmake編譯安裝Soufflé,doop的具體安裝使用可以在https://github.com/plast-lab/doop-mirror中了解。

對doop的命令行使用進行簡單,分析,有幾個關鍵的命令參數,-i參數接受需要分析的文件(例如jar包),-a參數配置分析策略(例如是選擇context sensitive還是context insensitive),--app-only參數配置開啟doop的app only模式,--information-flow開啟doop的信息流分析模式(可以用來做污點分析),--platform設置分析需要的jdk平臺,--fact-gen-cores配置生成facts的并發性。

本文使用的doop命令參數:

-a context-insensitive --app-only --information-flow spring --fact-gen-cores 4 -i docs/commons-text.jar --platform java_8 --stats none

3.3 重新編譯打包commons text

這是我最初使用doop分析commos text的方法,主要為了盡可能減輕的對原生規則的侵入。doop在使用jackee進行分析事,分析入口的確定及一些mockobject的構建都需要依賴于對springmvc注解的識別。

下載commons text的源碼,自定義兩條class和method注解TestctxTaintedClassAnnotation、TestctxTaintedParamAnnotation:

注解實現為一個空注解,主要是為了標注一下我們的source,將注解打到對應的class類和方法:

重新編譯打包為jar包,得到2中命令參數-i的commons-text.jar。

3.4 改造doop app only下的規則

doop的污點信息流識別依賴于指針分析結果,同時也依賴污點轉移函數。doop中已經預置了多條污點轉移函數,其中包含了字符串、鏈表、迭代器等基礎類方法。

ParamToBaseTaintTransferMethod(0, "").ParamToBaseTaintTransferMethod(0, "").ParamToBaseTaintTransferMethod(0, "").ParamToBaseTaintTransferMethod(0, "").ParamToBaseTaintTransferMethod(0, "").ParamToBaseTaintTransferMethod(0, "").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").BaseToRetTaintTransferMethod("").

然而其中沒有包含String split函數的污點轉移規則,需要添加上:

BaseToRetTaintTransferMethod("").

如上述,doop自有的jackee規則肯定沒有包含我們自定義的注解,所以需要在EntryPointClass、Mockobj等關系定義中添加對我們自定義的class污點注解的識別。

EntryPointClass(?type) :- //... Type_Annotation(?type, "org.apache.commons.text.TestctxTaintedClassAnnotation");//...MockObject(?mockObj, ?type) :- //... Type_Annotation(?type, "org.apache.commons.text.TestctxTaintedClassAnnotation");

同時也需要添加param污點的注解。doop需要通過這些注解識別分析入口方法,構建污點mockobj,建立初始的指向關系等。

//...mainAnalysis.VarPointsTo(?hctx, cat(cat(cat(cat(?to, "::: "), ?type), "::: "), "ASSIGN"), ?ctx, ?to) :- FormalParam(?idx, ?meth, ?to), (Param_Annotation(?meth, ?idx, "org.springframework.web.bind.annotation.RequestParam"); Param_Annotation(?meth, ?idx, "org.springframework.web.bind.annotation.RequestBody"); Param_Annotation(?meth, ?idx, "org.apache.commons.text.TestctxTaintedParamAnnotation");

為了確保方法的可達性,我們還添加了

ImplicitReachable("") :- isMethod("").但后續看不一定有必要,僅供參考。

通過注解我們在規則中定義了source,接下來需要定義sink,我們將ScriptEngine的eval方法定義為sink:

LeakingSinkMethodArg("default", 0, method) :- isMethod(method), match("", method).

正如前述,由于是在app only下,doop下通過OpaqueMethod關系過濾了jdk類的識別,這樣會導致相應的上述預置的污點轉移函數無法完成污點轉移,所以需要另外定制規則流去將轉移函數包含進數據流分析過程。

于是需要定義

OptTaintedtransMethodInvocationBase關系。

.decl OptTaintedtransMethodInvocationBase(?invocation:MethodInvocation,?method:Method,?ctx:configuration.Context,?base:Var)OptTaintedtransMethodInvocationBase(?invocation,?tomethod,?ctx,?base) :- ReachableContext(?ctx, ?inmethod),//Reachable(?inmethod), Instruction_Method(?invocation, ?inmethod), ( _VirtualMethodInvocation(?invocation, _, ?tomethod, ?base, _); _SpecialMethodInvocation(?invocation, _, ?tomethod, ?base, _) ).

在此基礎上,為了完成新的污點轉移,doop需要根據以下自定義規則分析出返回值的類型信息。

.decl MaytaintedInvocationInfo(?invocation:MethodInvocation,?type:Type,?ret:Var)MaytaintedInvocationInfo(?invocation, ?type, ?ret) :- Method_ReturnType(?method, ?type), MethodInvocation_Method(?invocation, ?method), AssignReturnValue(?invocation, ?ret)..decl MaytaintedTypeForReturnValue(?type:Type, ?ret:Var, ?invocation:MethodInvocation)MaytaintedTypeForReturnValue(?type, ?ret, ?invocation) :- MaytaintedInvocationInfo(?invocation, ?type, ?ret), !VarIsCast(?ret).

基于以上的污點轉移過程分析規則,應用到污點變量的轉移分析規則中。

VarIsTaintedFromVar(?type, ?ctx, ?ret, ?ctx, ?base) :- //mainAnalysis.OptTaintedtransMethodInvocationBase(?invocation,?method,?base), mainAnalysis.OptTaintedtransMethodInvocationBase(?invocation,?method,?ctx,?base), MaytaintedTypeForReturnValue(?type, ?ret, ?invocation), BaseToRetTaintTransferMethod(?method). //mainAnalysis.VarPointsTo(_, _, ?ctx, ?base).

同時也需要重新定義LeakingSinkVariable關系,因為我們這里自定義的sink方法也是Opaque方法,這樣才能識別到我們的ScriptEngine 的eval方法。

LeakingSinkVariable(?label, ?invocation, ?ctx, ?var) :- LeakingSinkMethodArg(?label, ?index, ?tomethod), mainAnalysis.OptTaintedtransMethodInvocationBase(?invocation,?tomethod,?ctx,?base), //mainAnalysis.VarPointsTo(_, _, ?ctx, ?base),//here problem ActualParam(?index, ?invocation, ?var).

從上面規則的定義可以看出,改造的流程還是比較清晰的,并且通過關系的名字,這些關系的含義和用途也很容易理解。添加這些自定義規則到我們的doop分析中運行,在結果中可以看出,doop完成了對commons text的污點信息流的識別。

在結果集中的LeakingTaintedInformation.csv文件中可以找到我們需要捕捉到的souce-sink流。

default default <> /javax.script.ScriptEngine.eval/0 /@parameter0

LeakingTaintedInformation.csv給出了污點信息。包括污點的標簽(這里是默認的default,可以自定義),sink方法的調用信息,該sink方法對應的污點源頭souce信息。

如上圖可以看出,

org.apache.commons.text.lookup.ScriptStringLookup:

java.lang.String lookup(java.lang.String)中調用到

javax.script.ScriptEngine.eval,并且污點的源頭是

org.apache.commons.text.StringSubstitutor:

java.lang.String replace(java.lang.String)方法的參數@parameter0。

同時,在結果集中的AppTaintedVar.csv文件也可以看到具體的應用代碼中由于污點傳播過程中的被污染的變量.以上面commons text 漏洞執行方法棧中的

org.apache.commons.text.StringSubstitutor的resolveVariable為例:

可以看出方法中被污染的入參variableName、buf,還有resolver,以及$stack7等(這是經過soot生成jimple的過程中SSA pack部分優化新增的棧變量)。

基于這兩個結果集基本可以看出漏洞的觸發流程或者說污點的傳播過程(雖然不是特別直觀),如果需要也可以再搭配生成的CallGraphEdge.csv去更方便的進行分析。

四、總結

doop直接用來分析大型項目需要一定的計算資源,并且無論是規則的定制還是分析結果查看都不是特別直觀,畢竟它的設計初衷就是一款分析框架,用在實際漏掃漏洞挖掘中可能需要進一步包裝修改 。但可以看出,doop作為一款優秀的開源靜態分析框架,在算法上毋庸置疑是比較先進和豐富的,而且基于開源的算法規則,我們可以任意去定制我們需要的分析邏輯。其與codeql在設計思路也較為相近,將程序信息提取后生成數據庫,開放查詢接口,將程序分析轉變為數據關系的查詢,因此可以擴展出更多的用途。

標簽:

返回頂部
高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘
  • <cite id="ecweg"><pre id="ecweg"></pre></cite>
    <rt id="ecweg"><acronym id="ecweg"></acronym></rt>
  • <rt id="ecweg"></rt>
    婷婷五月综合缴情在线视频| 992kp快乐看片永久免费网址| 欧美三级午夜理伦三级老人| 夜夜爽久久精品91| 91免费国产精品| 国内自拍在线观看| 黄色三级视频在线| 992tv成人免费观看| 性一交一乱一伧国产女士spa| 成人毛片一区二区| 国产乱女淫av麻豆国产| 久久久天堂国产精品| 啊啊啊一区二区| www激情五月| 日韩中文字幕在线免费| 91人人澡人人爽人人精品| 香蕉视频xxxx| 99免费视频观看| 欧美精品一区二区性色a+v| 久久精品视频16| 亚洲制服中文字幕| 国产精品一区二区免费在线观看| 天堂av在线网站| av日韩在线看| 毛片毛片毛片毛| 欧美成人精品欧美一级乱| 午夜啪啪福利视频| 日日噜噜夜夜狠狠| 国自产拍偷拍精品啪啪一区二区| 五月花丁香婷婷| 性欧美极品xxxx欧美一区二区| 国产精品久久久影院| 亚洲性生活网站| 国产精品一线二线三线| 欧美性受xxxx黒人xyx性爽| www.欧美日本| 97国产在线播放| 日韩国产小视频| 中国一级黄色录像| 亚洲欧美日本一区二区三区| 成年人免费大片| 波多野结衣家庭教师视频| 一级特黄妇女高潮| 日本一区二区免费高清视频| 国产福利影院在线观看| 91猫先生在线| 国产va亚洲va在线va| 超碰97免费观看| www.久久com| 三年中文高清在线观看第6集 | 18视频在线观看娇喘| 最新国产黄色网址| 成人性做爰片免费视频| 看欧美ab黄色大片视频免费| av 日韩 人妻 黑人 综合 无码| 天天操精品视频| 91看片破解版| 欧美丝袜在线观看| 九九热免费在线观看| 亚洲欧美国产日韩综合| 免费观看成人网| av观看免费在线| 人妻丰满熟妇av无码区app| 农村妇女精品一二区| 欧美两根一起进3p做受视频| 嫩草av久久伊人妇女超级a| 最新中文字幕2018| 日韩不卡一二三| 在线视频观看一区二区| 182午夜在线观看| 天天干天天色天天爽| 日本国产中文字幕| www.com毛片| 日韩一级理论片| 成人手机视频在线| 日产精品久久久久久久蜜臀| 日本大胆人体视频| 中文字幕第一页亚洲| 四虎成人在线播放| 欧美少妇一级片| 2022中文字幕| 能在线观看的av网站| 99re精彩视频| 白白操在线视频| 欧美精品无码一区二区三区| 香蕉视频xxxx| 成人综合视频在线| 亚洲高清在线不卡| 成人免费视频91| 男操女免费网站| 男人c女人视频| 亚洲污视频在线观看| 先锋影音男人资源| 毛片av免费在线观看| 91亚洲一区二区| 久久综合久久色| 国产成人免费高清视频| 国产情侣av自拍| 永久免费网站视频在线观看| 各处沟厕大尺度偷拍女厕嘘嘘| 四虎成人在线播放| 37pao成人国产永久免费视频| 无码毛片aaa在线| 五月婷婷之综合激情| 2018国产在线| 日韩 欧美 自拍| www.国产视频.com| 日本久久久精品视频| 91九色国产ts另类人妖| 国产v亚洲v天堂无码久久久| 国产在线视频在线| 网站在线你懂的| 99视频免费播放| 水蜜桃色314在线观看| 最近免费观看高清韩国日本大全| 免费裸体美女网站| 欧美在线一区视频| 国产精品无码免费专区午夜| 亚洲一区二区福利视频| 日韩中文字幕组| 国产精品国产亚洲精品看不卡| 日本不卡一区二区三区四区| 久久久久xxxx| 九色porny自拍| 国产精品人人爽人人爽| 玩弄中年熟妇正在播放| 国产精品久久久久9999爆乳| 中文字幕在线中文| 小说区视频区图片区| 日本不卡一区二区在线观看| 国产超碰在线播放| 91淫黄看大片| 男女视频在线看| 久热在线视频观看| 捷克做爰xxxⅹ性视频| 日韩 国产 一区| www.色.com| 国产又粗又长又爽视频| 超级碰在线观看| 国产制服91一区二区三区制服| 污免费在线观看| 日韩成人手机在线| 国产毛片视频网站| 日韩av在线综合| 孩娇小videos精品| 爱豆国产剧免费观看大全剧苏畅| 成人黄色一级大片| 中文字幕在线乱| 成人性生活视频免费看| 国产熟女高潮视频| 牛夜精品久久久久久久| 福利视频999| avav在线播放| 日韩中文字幕组| 欧美一级特黄aaa| 久久www视频| 韩国日本美国免费毛片| 亚洲精品mv在线观看| 日韩一级免费看| 国产成人精品无码播放| 欧美精品色视频| 少妇无码av无码专区在线观看 | 91小视频网站| 潘金莲一级淫片aaaaa免费看| 国产a级片网站| 日日碰狠狠丁香久燥| 国产高清免费在线| 久章草在线视频| av电影一区二区三区| 日本黄网站免费| 国产在线观看欧美| 久草福利视频在线| 人人妻人人澡人人爽欧美一区| 免费观看成人在线视频| 91麻豆天美传媒在线| 国产福利一区视频| 免费日韩在线观看| 色乱码一区二区三区在线| japanese在线视频| 亚洲免费av一区二区三区| mm131午夜| www.欧美日本| 成年人看的毛片| 色婷婷综合在线观看| 欧美日韩在线成人| 你真棒插曲来救救我在线观看| 手机在线视频一区| 中文字幕第21页| 亚洲 高清 成人 动漫| 日韩最新中文字幕| 三上悠亚在线一区| 动漫av免费观看| 日本中文字幕网址| 大地资源网在线观看免费官网| 中文字幕一区久久| 日韩av片网站| wwwwxxxx日韩| 日韩大片一区二区| 免费在线观看的av网站| 蜜臀av无码一区二区三区|