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

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

3. 通過github下載config文件夾

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

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


三、后續計劃
appshark會長期維護,歡迎大家使用,歡迎交流提建議以及貢獻代碼。
四、關于無恒實驗室
無恒實驗室(https://security.bytedance.com/security-lab)是由字節跳動資深安全研究人員組成的專業攻防研究實驗室,致力于為字節跳動旗下產品與業務保駕護航,亦極為重視開源軟件與系統對業務安全的影響,在檢測公司引入的開源框架和系統的同時,無恒實驗室也著力于構建第三方框架和組件的漏洞緩解機制,并將持續與業界共享研究成果,協助企業業務避免遭受安全風險,亦望能與業內同行共同合作,為網絡安全行業的發展做出貢獻。