正式開源!無恆實驗室推出 appshark 自動化漏洞及隱私合規檢測工具

一、開源背景

隨著移動網際網路的高速發展,人們的生產生活也逐漸從 PC 電腦端轉移到手機等移動端,各類移動 App 也如雨後春筍般產生。受限於程式碼的開發質量等原因, 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 作為安卓中最通用的元件,不少有經驗的程式設計師也經常會寫出越權漏洞,如下就是一個非常明顯的有越權問題的示例。

public class VulProvider1 extends ContentProvider { @Override public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) throws FileNotFoundException { File root = getContext()。getExternalFilesDir(“sandbox”); String path = uri。getQueryParameter(“path”); return ParcelFileDescriptor。open(new File(root, path), ParcelFileDescriptor。MODE_READ_ONLY); }}

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 如下:

{ “ContentProviderPathTraversal”: { “SliceMode”: true, “traceDepth”: 14, “desc”: { “name”: “ContentProviderPathTraversal”, “category”: “”, “wiki”: “”, “detail”: “如果Content Provider重寫了openFile,但是沒有對Uri進行路徑合法性校驗,那麼攻擊者可能透過在uri中插入。。/的方式訪問預期外的檔案”, “possibility”: “”, “model”: “” }, “source”: { “Param”: { “<*: android。os。ParcelFileDescriptor openFile(*)>”: [ “p0” ] } }, “sink”: { “”: { “TaintCheck”: [ “p0” ] } } }}

3、透過 github 下載 config 資料夾

git clone https://github。com/bytedance/appshark

4、修改 config 檔案

將 apkPath 修改為你想要掃描的apk絕對路徑。為了方便,可以在這裡下載參考:https://github。com/nkbai/BypassPathTraversal/blob/main/apk/app-debug。apk

指明你要使用的規則,也就是 ContentProviderPathTraversal。json 檔案,這個檔案應該放在 config/rules 目錄下,因為 appshark 是透過這個路徑來查詢這些規則的。

指定輸出結果儲存的目錄,預設是當前目錄下的 out 檔案,你可以指定一個其他目錄。

5、啟動 appshark

先下載:https://github。com/bytedance/appshark/releases/download/0。1/AppShark-0。1-all。jar,然後啟動。

java -jar AppShark-0。1-all。jar config/config。json5

6、檢視結果

結果在當前目錄的 out/results。json 檔案中,裡面給出了所有的漏洞列表。關於結果的詳細解釋請檢視https://github。com/bytedance/appshark/blob/main/doc/zh/result。md。如果對某個具體的漏洞有疑問,可以檢視 url 欄位指明的HTML檔案。

針對這個漏洞,你應該可以在 results。json 中看到,存在漏洞的函式(position),漏洞傳播的資料流(target):

{ “details”: { “Sink”: [ “->$r5” ], “position”: “”, “entryMethod”: “”, “Source”: [ “->@parameter0” ], “url”: “out/vulnerability/6-ContentProviderPathTraversal。html”, “target”: [ “->@parameter0”, “->$r1”, “->$r2_1”, “->$r5” ] }, “hash”: “186d1273a64ac711c703e259ce0329fa8a25cf37”, “possibility”: “”}

四、後續計劃

appshark 會長期維護,歡迎大家使用,歡迎交流提建議以及貢獻程式碼。

五、關於無恆實驗室

無恆實驗室 (https://security。bytedance。com/security-lab) 是由位元組跳動資深安全研究人員組成的專業攻防研究實驗室,致力於為位元組跳動旗下產品與業務保駕護航,亦極為重視開源軟體與系統對業務安全的影響,在檢測公司引入的開源框架和系統的同時,無恆實驗室也著力於構建第三方框架和元件的漏洞緩解機制,並將持續與業界共享研究成果,協助企業業務避免遭受安全風險,亦望能與業內同行共同合作,為網路安全行業的發展做出貢獻。(無恆實驗室持續招聘中,點選

閱讀原文

連結檢視詳情)

掃碼加入appshark微信交流群,歡迎使用反饋,群滿之後,歡迎新增運營微信拉群:easylifejust

正式開源!無恆實驗室推出 appshark 自動化漏洞及隱私合規檢測工具