近日,字節(jié)跳動(dòng)安全團(tuán)隊(duì)無(wú)恒實(shí)驗(yàn)室對(duì)外開(kāi)源appshark。該工具為無(wú)恒實(shí)驗(yàn)室自主研發(fā),可用于漏洞及隱私合規(guī)風(fēng)險(xiǎn)的自動(dòng)化檢測(cè)。
隨著移動(dòng)互聯(lián)網(wǎng)的高速發(fā)展,人們的生產(chǎn)生活也逐漸從PC電腦端轉(zhuǎn)移到手機(jī)等移動(dòng)端。受限于代碼的開(kāi)發(fā)質(zhì)量等原因,App中或多或少的會(huì)存在安全漏洞,或因開(kāi)發(fā)設(shè)計(jì)不謹(jǐn)慎引入的違規(guī)收集個(gè)人信息等合規(guī)風(fēng)險(xiǎn)。帶漏洞運(yùn)行的App將嚴(yán)重威脅著網(wǎng)絡(luò)及用戶安全,合規(guī)問(wèn)題則可能受到監(jiān)管通報(bào)甚至存在下架處罰風(fēng)險(xiǎn),因此企業(yè)也在加大人力進(jìn)行漏洞及合規(guī)風(fēng)險(xiǎn)挖掘并推進(jìn)修復(fù)等相關(guān)工作。
目前行業(yè)內(nèi)普遍采用人工審計(jì)加自動(dòng)化檢測(cè)工具去發(fā)現(xiàn)風(fēng)險(xiǎn)。不過(guò)隨著數(shù)量越來(lái)越龐大的漏洞,以及App隱私合規(guī)等問(wèn)題的出現(xiàn),安全人員面臨的挑戰(zhàn)逐漸升級(jí)。有效的漏洞及合規(guī)風(fēng)險(xiǎn)自動(dòng)化檢測(cè)工具將為安全人員的人工挖掘提供良好補(bǔ)充,也節(jié)省了大量時(shí)間和人力。
在字節(jié)跳動(dòng),面對(duì)數(shù)量眾多的App產(chǎn)品,無(wú)恒實(shí)驗(yàn)室需要在產(chǎn)品上線前發(fā)現(xiàn)隱私合規(guī)風(fēng)險(xiǎn),挖掘出安全漏洞,保護(hù)用戶的數(shù)據(jù)與隱私安全。無(wú)恒實(shí)驗(yàn)室對(duì)業(yè)內(nèi)自動(dòng)化App漏洞檢測(cè)工具進(jìn)行了充分調(diào)研,發(fā)現(xiàn)這些工具或因?yàn)槁﹫?bào)、誤報(bào)率太高,導(dǎo)致需要消耗大量人力對(duì)掃描結(jié)果進(jìn)行確認(rèn);或因?yàn)椴婚_(kāi)放源碼,導(dǎo)致無(wú)法根據(jù)特定的掃描需求進(jìn)行定制化開(kāi)發(fā)。
為了能更好的實(shí)現(xiàn)高質(zhì)量漏洞及隱私合規(guī)檢測(cè),無(wú)恒實(shí)驗(yàn)室自主研發(fā)了appshark引擎,用于漏洞及隱私合規(guī)風(fēng)險(xiǎn)的自動(dòng)化檢測(cè)。無(wú)恒實(shí)驗(yàn)室選擇將這個(gè)引擎開(kāi)源,成為一個(gè)公共的工具,希望吸引更多業(yè)界專家參與打磨,為企業(yè)及白帽子做App風(fēng)險(xiǎn)檢測(cè)提供便利。
一、全面了解appshark
1、appshark的介紹
appshark除了實(shí)現(xiàn)行業(yè)普遍應(yīng)用的數(shù)據(jù)流分析,還將指針?lè)治雠c數(shù)據(jù)流分析融合,因而漏洞建模上更精準(zhǔn),規(guī)則更靈活,在誤報(bào)率和漏報(bào)率方面有了比較大的改進(jìn)。
2、appshark可以解決什么問(wèn)題
appshark可以作為公司內(nèi)部的Android App的自動(dòng)化檢測(cè)工具,輔助企業(yè)發(fā)現(xiàn)App的安全漏洞及隱私合規(guī)風(fēng)險(xiǎn),也可以作為白帽子日常App漏洞挖掘的助手,提高漏洞挖掘的效率及產(chǎn)出。
3、appshark在字節(jié)跳動(dòng)的表現(xiàn)如何
appshark加載全部規(guī)則集時(shí),對(duì)于抖音、今日頭條等超大規(guī)模App,可以在1小時(shí)內(nèi)完成所有分析并輸出結(jié)果。同時(shí),如前所述,由于appshark引擎中加入了指針?lè)治龊蛿?shù)據(jù)流分析,可以實(shí)現(xiàn)在此基礎(chǔ)上進(jìn)行更加靈活精準(zhǔn)的規(guī)則設(shè)計(jì),在字節(jié)跳動(dòng)內(nèi)部使用時(shí),大部分規(guī)則的誤報(bào)率和漏報(bào)率均已經(jīng)降至5%以下。
二、如何使用appshark
git開(kāi)源項(xiàng)目地址:http://github.com/bytedance/appshark
接下來(lái)以一個(gè)常見(jiàn)漏洞案例來(lái)展示如何使用appshark:
1、ContentProvider漏洞為例
ContentProvider作為安卓中最通用的組件,不少有經(jīng)驗(yàn)的程序員也經(jīng)常會(huì)寫(xiě)出越權(quán)漏洞,如下就是一個(gè)非常明顯的有越權(quán)問(wèn)題的示例。

2、編寫(xiě)掃描規(guī)則
appshark有非常靈活的規(guī)則來(lái)指定source以及sink, 詳細(xì)的介紹文檔可以參考https://github.com/bytedance/appshark/blob/main/doc/zh/how_to_write_rules.md。撰寫(xiě)規(guī)則最重要的就是確定source以及sink,一般把外部用戶可直接或間接控制的變量視為source,明顯openFile的參數(shù)0也就是uri是用戶可控制的,而sink點(diǎn)比較合適的一個(gè)地方是ParcelFileDescriptor.open的參數(shù)0,因?yàn)槿绻鹲ource能夠控制ParcelFileDescriptor.open參數(shù)0,那么基本上就可以讀取任何文件了。
因此我們的規(guī)則ContentProviderPathTraversal.json如下:

3. 通過(guò)github下載config文件夾

4. 修改config文件
1. 將apkPath修改為你想要掃描的apk絕對(duì)路徑。為了方便,可以在這里下載參考: https://github.com/nkbai/BypassPathTraversal/blob/main/apk/app-debug.apk
2. 指明你要使用的規(guī)則,也就是ContentProviderPathTraversal.json文件,這個(gè)文件應(yīng)該放在config/rules目錄下,因?yàn)閍ppshark是通過(guò)這個(gè)路徑來(lái)查找這些規(guī)則的。
3. 指定輸出結(jié)果保存的目錄,默認(rèn)是當(dāng)前目錄下的out文件,你可以指定一個(gè)其他目錄。
5. 啟動(dòng)appshark
先下載:https://github.com/bytedance/appshark/releases/download/0.1/appShark-0.1-all.jar,然后啟動(dòng)。

6. 查看結(jié)果
結(jié)果在當(dāng)前目錄的out/results.json文件中,里面給出了所有的漏洞列表。關(guān)于結(jié)果的詳細(xì)解釋請(qǐng)查看https://github.com/bytedance/appshark/blob/main/doc/zh/result.md。如果對(duì)某個(gè)具體的漏洞有疑問(wèn),可以查看url字段指明的HTML文件。
針對(duì)這個(gè)漏洞,你應(yīng)該可以在results.json中看到,存在漏洞的函數(shù)(postion),漏洞傳播的數(shù)據(jù)流(target):


三、后續(xù)計(jì)劃
appshark會(huì)長(zhǎng)期維護(hù),歡迎大家使用,歡迎交流提建議以及貢獻(xiàn)代碼。
四、關(guān)于無(wú)恒實(shí)驗(yàn)室
無(wú)恒實(shí)驗(yàn)室(https://security.bytedance.com/security-lab)是由字節(jié)跳動(dòng)資深安全研究人員組成的專業(yè)攻防研究實(shí)驗(yàn)室,致力于為字節(jié)跳動(dòng)旗下產(chǎn)品與業(yè)務(wù)保駕護(hù)航,亦極為重視開(kāi)源軟件與系統(tǒng)對(duì)業(yè)務(wù)安全的影響,在檢測(cè)公司引入的開(kāi)源框架和系統(tǒng)的同時(shí),無(wú)恒實(shí)驗(yàn)室也著力于構(gòu)建第三方框架和組件的漏洞緩解機(jī)制,并將持續(xù)與業(yè)界共享研究成果,協(xié)助企業(yè)業(yè)務(wù)避免遭受安全風(fēng)險(xiǎn),亦望能與業(yè)內(nèi)同行共同合作,為網(wǎng)絡(luò)安全行業(yè)的發(fā)展做出貢獻(xiàn)。