bytedance / appshark

Appshark is a static taint analysis platform to scan vulnerabilities in an Android app.
Apache License 2.0
1.49k stars 165 forks source link

在规则文件中增加permission字段来检查权限滥用 #57

Open firmianay opened 9 months ago

firmianay commented 9 months ago

APIMode现在只是单纯的找API,是不是可以根据API-Permission的映射关系,如果扫描结果为空,但权限清单中包含该permission,就判断存在权限滥用

{
  "获取蓝牙设备信息": {
    "desc": {
      "category": "camille",
      "detail": "获取蓝牙设备信息",
      "name": "获取蓝牙设备信息",
      "complianceCategory": "ComplianceInfo"
    },
    "permission": "android.permission.BLUETOOTH_CONNECT", // 新增
    "sink": {
      "<android.bluetooth.BluetoothAdapter: * getName(*)>": {},
      "<android.bluetooth.BluetoothDevice: * getAddress(*)>": {},
      "<android.bluetooth.BluetoothDevice: * getName(*)>": {}
    },
    "APIMode": true
  }
}
nkbai commented 9 months ago

已合并

firmianay commented 9 months ago

好像被误关了QAQ

nkbai commented 9 months ago

APIMode现在只是单纯的找API,是不是可以根据API-Permission的映射关系,如果扫描结果为空,但权限清单中包含该permission,就判断存在权限滥用

{
  "获取蓝牙设备信息": {
    "desc": {
      "category": "camille",
      "detail": "获取蓝牙设备信息",
      "name": "获取蓝牙设备信息",
      "complianceCategory": "ComplianceInfo"
    },
    "permission": "android.permission.BLUETOOTH_CONNECT", // 新增
    "sink": {
      "<android.bluetooth.BluetoothAdapter: * getName(*)>": {},
      "<android.bluetooth.BluetoothDevice: * getAddress(*)>": {},
      "<android.bluetooth.BluetoothDevice: * getName(*)>": {}
    },
    "APIMode": true
  }
}

对于输出结果的影响呢?文档描述,解释一下?

firmianay commented 9 months ago

结果像这样,UsePermissions从数组改成了字典,每个权限标记为"used""unused""unknown"这三种。其中最重要的工作就是维护API-Permission的映射关系

    "UsePermissions": {
        "com.example.myvultest.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION": "unknown",
        "android.permission.ACCESS_WIFI_STATE": "used",
        "android.permission.READ_EXTERNAL_STORAGE": "unused"
    },
nkbai commented 9 months ago

这个映射关系不需要appshark来维护?规则里面明确指明api关联的权限? 感觉这样意义不大。

firmianay commented 9 months ago

不需要,appshark只是引擎,因为还有些是自定义权限,不好公开,放在规则里就行。 相当于一次性加载上百条这种规则,扫出所有命中的函数,如果不改引擎,最终的results.json可能会很大很大,但其实我们想要的只是标记出多余申请的权限,这些命中的函数打印出来没用。 如果permission这个字段为空,一切行为还跟以前一样。

nkbai commented 9 months ago

如果是这样,直接对appshark的结果进行二次处理可能更合适