Closed william31212 closed 10 months ago
預期分析結果希望 getsettings -> setAllowFileAccess -> loadUrl的流程,實際實作時卻被切分成兩個了
如果你的期望是这样,那么你的source应该是return of getsettings, sink是loadUrl,但是你的规则中的source是findViewById或者NewInstance of WebView,
這邊改用getSettings()作為source,但call stack, call details的輸出都是空的
{
"WebView": {
"SliceMode": true,
"traceDepth": 8,
"desc": {
"name": "Webview setAllowFileAccess",
"category": "webview",
"detail": "Webview setAllowFileAccess(true) and loadurl",
"wiki": "",
"possibility": "4",
"model": "middle"
},
"source": {
"Return": [
"<android.webkit.WebView: android.webkit.WebSettings getSettings(*)>"
]
},
"sink": {
"<android.webkit.WebSettings: * setAllowFileAccess(boolean)>": {
"TaintCheck": [
"@this"
],
"p0": [
"1"
]
},
"<android.webkit.WebView: void loadUrl(java.lang.String)>": {
"TaintCheck": [
"@this"
]
}
},
"sanitize" : {
}
}
}
另外想請教產生出來的result.json要如何從中獲取call stack的code,因為內容似乎只含有com.tmh.vulnwebview.RegistrationWebView: void loadWebView()>->$r4
,有沒有對於 jimple 源碼有相關定位方式
因为你的source和sink是同一个变量,所以target只有一行
不好意思,我用以下此圖來說明好了 我預期想要的行為是從webview宣告object開始定位 並追蹤 webView.getSettings().setAllowFileAccess(true); webView.loadUrl("file:///android_asset/registration.html");
預期是想要 sink 紅框中這幾個 method,並在輸出的html看到
appshark进行的是数据流分析,目前没有办法像你说的一下,精确地给出你想要的路径。 appshark给出的是最短的传播路径,否则路径就太多了
好,那我想要請教兩個問題
好,那我想要請教兩個問題
- sink 的部分是只要符合其中一條 result.json 出現嗎
不是,具体的某个source,sink有多条路径时,选择其中最短的哪条。 source,sink只要有一个不同,就认为是完全不相关的路径。
- sink 的 TaintCheck 是不是不能寫 return
https://github.com/bytedance/appshark/commit/10d21198c47b5c066b2215d3b810c7fbbf2d1e45 提交了支持return作为sink,但是还没有发布版本,你可以从源码编译尝试一下。
針對第一點詢問 所以假設sink設定三項規則,輸出的部分會是同時有經過這三項規則的才會輸出嗎 因為自己實驗下來的結果是有符合兩項的結果就輸出了
{
"WebView": {
"SliceMode": true,
"traceDepth": 8,
"desc": {
"name": "Webview setAllowFileAccess",
"category": "webview",
"detail": "Webview setAllowFileAccess(true) and loadurl",
"wiki": "",
"possibility": "4",
"model": "middle"
},
"source": {
"Return": [
"<*: android.view.View findViewById(*)>"
]
},
"sink": {
"<android.webkit.WebView: android.webkit.WebSettings getSettings()>": {
"TaintCheck": [
"@this"
]
},
"<android.webkit.WebSettings: * setAllowFileAccess(boolean)>": {
"TaintCheck": [
"return"
],
"p0": [
1
]
},
"<android.webkit.WebView: void loadUrl(java.lang.String)>": {
"TaintCheck": [
"@this"
],
"p0": [
"file:///*"
]
}
},
"sanitize" : {
}
}
}
所以假設sink設定三項規則,輸出的部分會是同時有經過這三項規則的才會輸出嗎 不会,sink点之间是独立的,不同sink之间没有关系,我们也不会要求一条路径必须经过所有的sink才认为是有效的路径。
好的,謝謝您的回覆 因為個人的需求是想要sink到所有的路徑去偵測webview,確實有做設定的行為以及loadurl 如果我想要新增這項需求會建議從哪個部分的code下手
建议好好看看TaintPathFinder,这个类是找路径的,你需要的是一个完全不同的路径查找算法。
import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import androidx.appcompat.app.AppCompatActivity;
/ loaded from: classes.dex / public class RegistrationWebView extends AppCompatActivity { / JADX INFO: Access modifiers changed from: protected / @Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(C0816R.layout.activity_registration_web_view); setTitle("Registration page"); loadWebView(); }
}