UBCBench

New sources of failures

When manually looking into results reported by the tools, we observed that for all studied tools:

  • In 51 DroidBench applications (out of 158), and 9 ICCBench applications (out of 24), failures occur for reasons different from any original target criteria covered by all benchmarks.
  • All failures in Google play applications occur for reasons not covered by any benchmarks.

We further identified these failure scenarios that were not covered by existing benchmark applications, and summarized all new criteria attributing to failures in the table below. The table has two columns, which are:

  • CriteriaID: All new criteria we identified are indexed in the format U-DB[cat].[index], where [cat] is the category of DroidBench and [index] is an index in that category; TO indicates cases where a tool ran out of time to analyze an app; UN indicates cases where the reason for the failure is unknown.
  • CriteriaDescription: This describe the details about newly found criteria.
  • Tool: The tool(s) where we identified the new criteria.
CriteriaIDCriteriaDescriptionTool
U-DB2.12Precisely model Android framework methods.FlowDroid
U-DB4.15Detect flows from location-related sources to sinks.Amandroid
U-DB4.16Do not treat callback Intent parameters as sources .Amandroid
U-DB4.17Resolve setContentView(int) to the correct layout file when the argument is not directly a resource ID.FlowDroid
U-DB4.18Collect callbacks registered in fragments.FlowDroid, Amandroid
U-DB7.24Handle casting statements.FlowDroid, Amandroid
U-DB10.6Recongize sources and sinks invoked using reflection.FlowDroid
U-DB10.7Handle reflective calls with method getClass().DroidSafe
U-DB10.8Handle method overloading.DroidSafe
U-DB10.9Handle reflective calls using strings defined in resource files.DroidSafe
U-DB10.10Handle dynamically-constructed reflective calls.DroidRA
U-DB10.11Handle reflective calls to Android framework methods.DroidRA
U-DB10.12Handle reflective calls with method getConstructor().FlowDroid, DroidRA
TOFail to detect flow due to running out of time.-
UNFail to detect flow due to unknown reasons.-

You can find our newly-developed benchmark suite UBCBench used in the paper here.

Fixed bugs

We identified eight bugs in FlowDroid when performing our analysis. Three of the bugs lead to crashes of FlowDroid. We notified the authors of these bugs, and worked with them to fix them. The below table lists these bugs with the following information:

  • CriteriaID: All bugs are indexed in the format BUGx or EX (for those lead to crashes).
  • BugDescription: Descrption and patches for a bug.
  • AffectedApp: The IDs of benchmark or Google Play apps that are affected by a bug.
CriteriaIDBugDescriptionAffectedApp
DroidBenchICCBenchGooglePlay
BUG1Bug of StubDroid's summaries for handling Parcel.
Reported by us, fixed by the authors (see commit).
11
Bug of StubDroid's summaries on primitive types.
Reported by us, fixed by the authors (see commit).
13
Bug of StubDroid's summaries for handling reflection.
Reported by us, fixed by the authors (see commit).
132, 134, 136, 137, 138
BUG2Bug in IccTA when handling Broadcast Receivers.
Fixed by us (see pull request).
9611, 12
Bug in IccTA when handling IntentServices.
Fixed by us (see pull request).
9
EXException thrown in IccTA when handling bound Services.
Fixed by us (see pull request).
10220, 21, 22, 23, 242, 7, 14
Exception thrown in IccTA when handling ICC methods with no parameter.
Fixed by us (see pull request).
1, 16
Exception thrown in Soot when handling reflection.
Fixed by us (see pull request).
5, 8, 12, 18, 19