<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Towards Automated Android App Collusion Detection</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Irina Mariuca Asa˘voae</string-name>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jorge Blasco</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Thomas M. Chen</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Harsha Kumara Kalutarage</string-name>
          <xref ref-type="aff" rid="aff3">3</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Igor Muttik</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hoang Nga Nguyen</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Markus Roggenbach</string-name>
          <email>M.Roggenbach@swan.ac.uk</email>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Siraj Ahmed Shaikh</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>City University London</institution>
          ,
          <country country="UK">UK</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Coventry University</institution>
          ,
          <country country="UK">UK</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Intel Security</institution>
          ,
          <country country="UK">UK</country>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>Queen's University of Belfast</institution>
          ,
          <country country="UK">UK</country>
        </aff>
        <aff id="aff4">
          <label>4</label>
          <institution>Swansea University</institution>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <fpage>29</fpage>
      <lpage>37</lpage>
      <abstract>
        <p>Android OS supports multiple communication methods between apps. This opens the possibility to carry out threats in a collaborative fashion, c.f. the Soundcomber example from 2011. In this paper we provide a concise definition of collusion and report on a number of automated detection approaches, developed in co-operation with Intel Security.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>The Android operating system (OS) is designed with a
number of built-in security features such as app
sandboxing and fairly granular access controls based on
permissions. In real life, however, the isolation of apps
is limited. In some respects even the opposite is true –
there are many ways for apps to communicate across
sandbox boundaries. The Android OS supports
multiple communication methods which are fully
documented (such as messaging via intents). The ability
of apps with different security postures to
communicate has a negative effect on security as an app (in a
sandbox which has permissions to handle such data)
is allowed to let sensitive data flow to another app (in
another sandbox which has been denied permission to
handle such data) and eventually leak out.</p>
      <p>The Android ecosystem exacerbates the problem
as the market pressure leads many developers to
embed advertisement libraries into their apps. As a
result, such code may be present in thousands of apps
(all bearing different permissions). Advertisers have a
known tendency to disregard user privacy in favour of
monetisation. So there exists a risk that ad-libraries
may communicate between sandboxes even without
knowledge of apps authors to transmit sensitive data
across, risking exposure and disregarding privacy.</p>
      <p>
        Of course, any unscrupulous developer may also
split functionality which they prefer to hide between
multiple apps. Malicious behaviours similar to this are
evident from known cases of apps exploiting insecure
exposure of sensitive data by other apps [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>
        Researchers have demonstrated that sets of apps
may violate the permissions model causing data leaks
or carrying malware [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. Such apps are called
colluding sets of apps and the phenomenon is called app
collusion. Unfortunately, there are no effective tools
to detect app collusion. The search space posed by
possible combination of apps means that this is not
straightforward. Effective methods are needed to
narrow down the search to collusion candidates of interest.
      </p>
      <p>
        In recent work [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], dating after submission of this
paper, we have discovered that app collusion was
actually being used in the field for quite a long time and
without being detected in a large group of applications
which use a popular Android SDK. This SDK is known
to be included in more than a 1000 applications. This
discovery was a result of applying techniques described
in this paper to a large set of the most popular apps.
      </p>
      <p>This paper contributes towards a practical
automated system for collusion detection. We give a
definition of collusion in Section 2. This is followed by
two potential approaches to filter down to potential
candidates for collusion, using a rule based approach
developed in Prolog in Section 3 and another
statistical approach in Section 4. Section 5 presents a
modelchecking approach to detecting collusion in Android
apps. Section 6 delves into the experimental outcomes
and Section 7 discusses related work. Section 8
summarises our contributions and Section 9 concludes the
paper with thoughts on future work.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Defining collusion</title>
      <p>
        Our notion of collusion refers to the ability for a set
of apps to carry out a threat in a collaborative
fashion. This is in contrast to most existing work, where
collusion is usually associated with inter-app
communications and information leakage (see Section 7). We
consider that colluding apps can carry out any threat
such as the ones posed by single apps. The range of
such threats includes [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]:
• Information theft: happens when one app accesses
sensitive information and the other sends
information outside the device boundaries.
• Money theft: happens when an app sends
information to another app that is capable of using
money sensitive API calls (e.g. SMS).
• Service misuse: happens when one app is able to
control a system service and receives information
(commands) from another app to control those
services.
      </p>
      <p>A threat can be described by a set of actions
executed in a certain order. We model this by a
partially ordered set (T, ≤), where T is the set of actions
and ≤ specifies the execution order. When (T, ≤) is
carried out, actions from T are sequentially executed,
according to some total order ≤∗ such that ≤⊆≤∗; in
other words, (T, ≤∗) is a total extension of (T, ≤). Let
Ex((T, ≤)) denote the set of all possible total
extensions of (T, ≤); i.e., all possible ways of carrying out
threat (T, ≤). Similarly, we also define inter-app
communication as a partially ordered set. In this paper we
discuss overt communications channels only.</p>
      <p>We define collusion as follows:
A1: Actions are operations provided by Android API
(such as record audio, access file, write file, send
data, etc.). Let Act denote the set of all actions.
A2: Actions can be associated with a number of
attributes (such as permissions, input parameters,
etc.). Let B denote the set of all action attributes
and pms : Act → ℘(B) specify the set of
permissions required by Android to execute an action.</p>
      <p>READ
CONTACTS</p>
      <p>Contact_app</p>
      <p>Weather_app
Shared
Prefs.</p>
      <p>INTERNET
A3: A threat t = (T, ≤) is a partially ordered set. Let
τ denote the set of all threats. In the scope of this
paper, τ represents the set of all known threats
caused by single applications.</p>
      <p>A4: An inter-app communication c = (C, ≤) is a
partially ordered set. Let com denote the set of all
known inter-app communications.</p>
      <p>Definition 1 (Collusion). A set S consisting of at
least two apps is colluding if together they execute a
sequence A ∈ Act∗ such that:
1. there exists a subsequence A0 of A such that A0 ∈
Ex(t) for some t ∈ τ ; furthermore, A0 is
collectively executed involving all apps in S, i.e., each
app in S executes at least one action in A0; and
2. there exists a subsequence C0 of A such that C0 ∈</p>
      <p>Ex(c) for some c ∈ com.</p>
      <p>It is a general challenge to distinguish between
benign and malicious application behaviours. Thus, our
definition makes the realistic assumption that there are
a number of known threats, e.g., Intel Security
regularly identifies apps to be malicious, realising known
threats. Now, collusion can be seen as a camouflage
mechanism: the individual apps appear harmless, none
of them alone poses a threat, e.g., they would not be
able to execute a threat just in terms of their
permissions; in combinatation, however, they realise a threat.</p>
      <p>To illustrate our definition we present an abstract
example1.</p>
      <p>Example 1 (Stealing contact data). The two apps
graphically represented in Figure 1 perform
information theft: the Contact app reads the contacts
database to pass the data to Weather app, which sends
the data to a remote server controlled by the adversary.
The information is sent through shared preferences.</p>
      <p>Using the collusion definition we can describe the
actions performed by both apps as: ActContact app =
{aread contacts}, ActWeather app = {asend file}. with
pms(aread contacts) = {Permission contacts}
and pms(asend file) = {Permission internet }.
The information threat t is given by T =
{aread contacts, asend file} and defining aread contacts ≤
asend file. The inter-app communication is
defined as =</p>
      <p>comContact app {sendshared prefs},
comWeather app = {recvshared prefs} and
sendshared prefs ≤ recvshared prefs.</p>
      <p>1Concrete examples are available on request.</p>
    </sec>
    <sec id="sec-3">
      <title>Detecting collusion threat</title>
      <p>Our first approximation to detect app collusion utilises
Logic Programming in Prolog. Its goal is to serve as
a fast, computationally cheap filter that detects
potentially colluding apps. For such a first filter it is
enough to be based on permissions; together with a
further sifting mechanism (not discussed here) on
permissions, in practical work on real world apps this filter
turns out to be effective to detect colluding apps in the
wild.</p>
      <p>
        Our filter (1) uses Androguard [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] to extract facts
about the communication channels and permissions of
all single apps in a given app set S, (2) which is then
abstracted into an over-approximation of actions and
communication channels that could be used by a single
app. (3) Finally the collusion rules are fired if the
proper combinations of actions and communications
are found in S.
3.1
      </p>
      <sec id="sec-3-1">
        <title>Actions</title>
        <p>We utilise an action set Actprolog composed out of four
different high level actions: accessing sensitive
information, using an API that can directly cost money,
controlling device services (e.g. camera, etc.), and
sending information to other devices and the
Internet. To find out which of these actions an app could
carry out, we extract its set of permissions pmsprolog.
Each permission is mapped to one or more of the four
high level actions. For example, an app that declares
the INTERNET permission will be capable of sending
information outside the device:</p>
        <p>uses(App, PInternet) → information outside(App)
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Communications</title>
        <p>The communication channels established by an app
are characterised by its API calls and the permissions
declared in its manifest file. We cover communication
actions (comprolog) that can be created as follows:
• Intents are messages used to request tasks from
other application components (activities, services
or broadcast receivers). Activities, services and
broadcast receivers declare the intents they can
handle by declaring a set of intent filters.
• External Storage is a storage space shared
between all the apps installed without restrictions.
Apps accessing the external storage need to
declare the READ EXTERNAL STORAGE
permission. To enable writing, apps must declare
WRITE EXTERNAL STORAGE.
• Shared Preferences are an OS feature to store
keyvalue pairs of data. Although it is not intended for
inter-app communication, apps can use key-value
pairs to exchange information if proper
permissions are defined (before Android 4.4).</p>
        <p>We map apps to sending and receiving actions by
inspecting their code and manifest files. When using
intents and shared preferences we are able to specify
the communication channel using the intent actions
and preference files and packages respectively. If an
application sends a broadcast intent with the action
SEND FILE we consider the following:
send broadcast(App, Intentsend file)</p>
        <p>→ send(App, Intentsend file)
We consider that two apps communicate if one of them
is able to send and the other to receive through the
same channel. This allows to detect communication
paths composed by an arbitrary number of apps:
send(Appa, channel) ∧ receive(Appb, channel) →
communicate(Appa, Appb, channel)
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>Threats</title>
        <p>Our threat set τprolog considers information theft,
money theft and service misuse. As our definition
states, each of the threats is characterised by a
sequence of actions. For example, the information theft
threat is codified as the following Prolog rule:
→
∧
∧
sensitive information(Appa)
information outside(Appb)
communicate(Appa, Appb, channel)
collusion(Appa, Appb)
Currently, we do not take into account the order of
action execution.
4</p>
        <p>Assessing the collusion possibility
In this section, we apply machine learning to classify
app sets into colluding and non-colluding ones. To this
end, we first define a probabilistic model. Then we
train the model, i.e., estimate the model parameters
on a training data set. As a third step we validate
the model using a validation data set. Additionally, in
Section 6.3, we check the model with testing data.
4.1</p>
      </sec>
      <sec id="sec-3-4">
        <title>Probabilistic Model</title>
        <p>Estimating the collusion possibility within a set S of
apps involves to estimate two different likelihood
components Lτ and Lcom. Lτ denotes the likelihood of
carrying out a threat. Lcom denotes the likelihood of
performing some inter-app communication. Hence, the
likelihood of colluding within S is given by Lτ × Lcom.</p>
        <p>
          In order to estimate Lτ , we employ a so-called Naive
Bayesian informative [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] model. We consider a
multivariate random variable Y = (y1, . . . , yk). Here, k is
the total number of permissions in Android OS, and
yj ∈ {0, 1} are independent Bernoulli random
variables. Variable yj is 1 if permission j is found in S,
0 otherwise. P (Y ) stands for the probability of
obtaining S with permissions as described by Y . Our
probabilistic model is then given by the equation:
P (Y ) =
k
Y λjyj (1 − λj )1−yj
j=1
where λj ∈ [
          <xref ref-type="bibr" rid="ref1">0, 1</xref>
          ] is the Bernoulli parameter.
        </p>
        <p>
          To compute Lτ we define Lτ = ln{(P (Y ))−1}. This
reflects on the likelihood of an app set to “being
malicious” increasing as the number of permissions
requested increases. Therefore, any monotonically
decreasing function can be chosen [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]. For comparisons
we average out Lτ and scale down to the range [
          <xref ref-type="bibr" rid="ref1">0,1</xref>
          ].
        </p>
        <p>
          To complete our modelling, we need to estimate
values λˆj that replace λj in the computation of Lτ . To
this end – to avoid over fitting P (Y ) – we estimate
λj using informative beta prior distributions [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] and
define the maximum posterior estimation
λˆj =
        </p>
        <p>
          P yj + αj
N + αj + βj
(1)
where N is the number of apps in the training set and
αj , βj are penalty effects. In this work we set αj = 1.
βj depend on the critical level of permissions as given
in [
          <xref ref-type="bibr" rid="ref18 ref22">22, 18</xref>
          ]. βj can take either the value 2N (most
critical), N (critical) or 1 (non-critical).
        </p>
        <p>We consider Lcom to be a binary function such that
Lcom ∈ {1, 0} which takes the value 1 if there is any
inter app communication within S, 0 otherwise.
4.2</p>
      </sec>
      <sec id="sec-3-5">
        <title>Model Training</title>
        <p>
          Up to our recent discovery [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ], there were no known
colluding examples in the wild. However, there are
sets of apps available, where individual apps have been
classified by industry experts. Thus, we have utilised
one such set provided by Intel Security, which consists
of 9k+ malicious and 9k+ clean apps. As mentioned in
Section 2, there is no evidence suggesting differences
between threats caused by single apps and colluding
apps. Thus, we can estimate Lτ based on these two
sets2. As for Lcom, there is no need to estimate any
constants.
6
.
0
We validate our model on a larger set of apps (a blind
sample) that we created for the purpose of calibration
of our collusion detection mechanisms. This validation
set consists of 240 app pairs in which half are colluding
pairs, the other half is non-colluding.
        </p>
        <p>
          For this analysis, we implemented an automated
process using R [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] and Bash scripts, which also
includes calls to a third party research prototype [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]
to find intent based communications. Additionally, a
simple permission based rule set was defined to find
communication using external storage. Overall, this
process consists of the following steps: (1) extracting
permissions of all single apps in a given app set S;
(2) computing Lτ using extracted permissions; (3) if
Lτ is greater than a certain threshold then estimating
Lcom as mentioned above; and finally (4) computing
Lτ × Lcom.
        </p>
        <p>Figure 2 presents Lτ values for the validation
dataset in which good visual separation can be seen
between two classes with a lower (=0.50) and
upper (=0.69) bounds for a discriminant line. Table 1
presents the confusion matrix obtained by fitting the
best possible linear discriminant line at Lτ = 0.55 in
Figure 2.</p>
        <p>n=240
Predicted
Colluding</p>
        <p>Predicted
Non-Colluding</p>
        <p>Actual
Colluding</p>
        <p>Actual</p>
        <p>Non-Colluding
114
6
7
113</p>
        <p>2Though our attack model is multiple apps, Lτ focuses only
on operations required to execute a threat by a single app
attack model. Additional communication operations required to
execute the same threat in colluding model are covered by Lcom.
Precision quantifies the notion of specificity while
Fmeasure provides a way to judge the overall
performance of the model for each class. The higher these
values are, the better the performance is. Such values
could be due to a bias of the validation sample towards
the methodology. Further investigation on the bias of
the evaluation dataset is left for future work.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Model-Checking for collusion</title>
      <p>
        We demonstrate the effective attempt to detect
collusion via model-checking. Figure 3 shows the basic
work-flow employed: it starts with a set of apps in the
Dalvik Executable format DEX [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]; this code is
disassembled and (currently manually) translated into a
semantically faithful representation in the framework
K [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] – this step also triggers a data flow analysis
of the app code; compilation translates the K
representation into a rewrite theory in Maude [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]; using the
Maude model-checker provides an answer if the app set
colludes or not: in case of collusion, the tool provides
a readable counter example trace (see Section 6.4).
      </p>
      <p>
        The rewriting logic semantics framework K allows
the user to define configurations, computations and
rules [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Configurations organise the program state
in units called cells. In case of SMALI assembly
programs, on the method level program states essentially
consist of the current instruction, registers and
parameters, and the class it belongs to. The operational
semantics of, say, the assembly instruction
      </p>
      <p>const Register, Int
for loading an integer constant Int into a register
Register is captured by a rule
which reads: provided the current instruction is to load
an integer I into a register R, then the cell “regs”
capturing the state of the registers is updated by binding
the value I to register R. The SMALI language also
includes procedure calls. These allow to access
functionality provided by the Android operating system, e.g.,
to read protected resources such as the GPS location
or to send/receive a broadcast intent. Thus, besides
encoding SMALI instructions in K, we also model the
infrastructure that Android provides to apps.</p>
      <p>The executions of the above semantics, instruction
after instruction, defines the computations. However,
the concrete semantics is far too detailed for effective
model-checking. Therefore, we implement an
abstraction in form of a data flow analysis. Here we represent
each method individually as a graph, where registers,
types, and constants are the nodes, and there is an
edge between two nodes n1 and n2 iff n2 is a
parameter of the SMALI command that stores a value in
n1. For example, the SMALI command const r1, 42
would lead to an edge from node “42” to node “R1”.
Analysing such graphs allows to detect which
commands influence the values sent, say, in a broadcast
intent, or publishing via the internet; these commands
can be grouped into blocks and – rather than
computing with concrete values – their effect can be captured
symbolically.</p>
      <p>For the detection of collusion, our K semantics
carries a “trace” cell that records which operations
provided by the Android API – see Definition 1 – have
been executed in a specific run. Based on the “trace”
cell we define collusion via a K rule: provided that the
GPS location has been accessed, this value has been
sent in a broadcast, this value has been received from
a broadcast, and finally this value has been published,
in that case we detect collusion “information theft”.</p>
      <p>Practical experiments with small apps demonstrate
that this approach is feasible. Using the Maude
modelchecker, the state space of the (abstraction) of two
apps is small, with only 8 states for the given example
and the check takes less than a second. When
modifying the apps in such a way that the information flow is
broken, by, say using a different name for the broadcast
and thus disabling communication between the apps,
model-checking shows that no collusion is happening.</p>
      <p>We use symbolic analysis over the byte code of the
set S in order to obtain an in-depth inspection of the
communication patterns. In the byte code of each app
in S we detect the flow of communication with another
app and a safe over-approximation of the data being
communicated. We use static analysis over the byte
code of apps to extract communication-flow between
apps and data-flow inside each app. The data-flow
information is filtered based on the private data being
read and communicated.</p>
      <p>It is future work, to complete the encoding to cover
the full DEX language and to experiment with larger
apps all well as with larger number of apps to address
the fundamental question of scalability. We further
intend to prove the abstraction to be sound, to show
that if model-checking the abstracted code detects
collusion then there is collusion in the original code, and
to have a more general definition of collusion.</p>
    </sec>
    <sec id="sec-5">
      <title>First experimental results</title>
      <p>In this section we compile first experimental results
obtained by applying the three methods discussed above
to an artificial set.
In order to validate our different approaches against
a known ground truth, we have created fourteen apps
that cover all threats and use all communication
channels described earlier in this paper. They are
organised in four colluding sets: The Document
Extractor set consists of one app (id 1 ) that looks
for sensitive documents on the external storage; the
other app (id 2 ) sends the information received (via
SharedPreferences) to a remote server. The Botnet
set consists of four apps. One app (id 3 ) acts as a
relay that receives orders from the command and control
center. The other colluding apps execute commands
(delivered via BroadcastIntents) depending on their
permissions: sending SMS messages (id 4 ), stealing
the user’s contacts (id 5 ) and starting and stopping
tasks (id 6 ). The Contact Extractor set consists of
three apps. The first (id 7 ) reads contacts from the
address book, the second (id 8 ) forwards them via the
external storage to the third one (id 9 ), which sends
them to the Internet. The first and second app
communicate via BroadcastIntents. The Location
Stealing set consists of one app (id 12 ) that reads the user
location and shares it with the second app (id 13 ),
which sends the information to the Internet.</p>
      <p>The three non-colluding apps are a document
viewer (id 10 ), an information sharing app (id 11 )
and a location viewer (id 14 ). The first app is able
to display different file types in the device screen and
use other apps (via broadcast intents) to share their
uniform resource identifier (URI). The second app
receives text fragments from other apps and sends them
to a remote server. The third app receives a location
from another app (with the same intent used by apps
12 and 13) and shows it to the user on the screen.
6.2</p>
      <sec id="sec-5-1">
        <title>Detecting collusion threat with Prolog</title>
        <p>Table 2 shows the results obtained with our rule based
approached from Section 3 on the apps from Section
6.1. The entry “dark red club” in row 1 and column
2 means: the program detects that app id 1 sends
information to app id 2, and these two apps collude on
an “information theft”. As we take communication
direction into consideration, the resulting matrix is
nonsymmetric, e.g., there is no entry in row 2 and column
1. The entry “light red club” in row 1 and column 10
means: the program flags collusion of type
“information theft” though the set {id 1, id 10 } is clean.The
approach identifies all colluding app sets. It also flags
5 6 7 8 9 10 11 12 13 14</p>
        <p>♣ ♣
$♣ ♠ ♠
♣
♣ ♣</p>
        <p>♣
♣ ♣ ♣
♣
♣
♣
♣
♣
♣
eight false positives due to over-approximation. Note,
that there are no false negatives due to the nature
of our test set: it utilises only those communication
methods that our Prolog approach is able to identify.
Table 3 shows results from our alternative approach
from Section 4 on the same set of apps. Each cell
denotes the Lτ value for the corresponding pair. To
minimise false negatives, we use the lower bound (=0.50)
gained from the validation data set for the
discriminant line as threshold for Lτ . We report possible
collusion if Lτ ≥ 0.5 and Lcom = 1, otherwise we report
non-collusion. This yields symmetric data – for
readability we leave the lower half of the matrix empty.
Dark red shows true positives, light red shows false
positives, dark green shows true negatives, and light
green shows false negatives.</p>
        <p>This approach finds two of the four colluding app
sets and flags five false positives. It relies on a 3rd
party tool to detect inter-app communication which
ignores communication using shared preferences, thus
the app set {id 1, id 2 } is not detected. As we restrict
ourselves to pairwise analysis only, the app set {id 7, id
9 } can’t be detected, as it communicates via id 8.
Finally, app set {id 12, id 13 } was not reported since its
Lτ value is less than the chosen threshold. Choosing
a lower threshold could avoid this false negative, but
at the cost of a lower class accuracy and performance.</p>
        <p>
          A precise estimation of Lcom would be useful in
order to reduce the number of false positives in our
analysis. However, communication is only a necessary, not
a sufficient condition for collusion. A recent study [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]
shows that 84.4% of market available apps can
communicate with other apps either using explicit (11.3%)
or implicit (73.1%) intent calls. Therefore the threat
element (i.e. Lτ ) is far more informative in collusion
estimation than the communication element (Lcom) in
App collusion can be traced back to confused deputy
attacks [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]. They happen in form of permission
redelegation attacks [
          <xref ref-type="bibr" rid="ref11 ref26 ref8">11, 8, 26</xref>
          ] when a permission is
carelessly exposed through a public component.
Soundcomber [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] is an example where extracted information
is transmitted using both overt and covert channels.
        </p>
        <p>
          Marforio et al. [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] define colluding applications as
those applications that cooperate in a violation of some
security property of the system. Another definition is
given by [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] where multiple apps can come together to
perform a certain task, which is out of their permission
capabilities. The malicious component of collusion is
also acknowledged by Bagheri, Sadeghi et al. [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. A
more detailed definition is given by Elish [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], which
defines it as the collaboration between malicious apps,
likely written by the same adversary, to obtain a set
of permissions to perform attacks.
        </p>
        <p>
          ComDroid [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] is a static analysis tool that looks
for confused deputies through Intents. XManDroid [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]
and TrustDroid [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] extend the Android OS. Both allow
for fine-grained policies that control inter-app
information exchange; none of them address covert channels.
In [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] authors analyze, using different risk metrics,
several compartmentalisation strategies to minimise
the risk of app collusion, showing two or three app
compartments drastically reduce the risk of collusion
for a set of 20 to 50 apps.
6.4
        </p>
      </sec>
      <sec id="sec-5-2">
        <title>Software model-checking</title>
        <p>We inspect two sets of applications, one colluding {id
12, id 13 } and another non-clouding pair {id 12, id
14 } with software model checking as described in
Section 5. The sender id 12 and receiver (id 13 or id
14 ) communicate via broadcast messages containing
the details of the GPS location. In the colluding case
the broadcast is successful, i.e., the sender reads the
GPS location then broadcasts it, and the receiver gets
the broadcast then publishes the GPS location on the
internet. In the non-colluding case, the sender still
broadcasts the private data which reaches the receiver
but this data is never published. Instead, the
receiver publishes something else. The data-flow
analysis shows, for the non-colluding case, that the private
data is received but is never published. This aspect is
not obvious for our Prolog filter. Similarly, the
dataflow analysis detects collusion in the first case and
re</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Summary</title>
      <p>
        We have presented a new and concise definition of
collusion in the context of Android OS. Colluding apps
may carry out information theft, money theft, or
service misuse; to this end, malware is distributed over
multiple apps. As demonstrated by Soundcomber (and
our own app sets), collusion is a possibility – which we
recently demonstrated to exists in the wild [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ].
Together with our industrial partner Intel Security, we
have developed a number of approaches towards
effectively detecting collusion. Early experimental results
on small app sets (of a size nearly the scale of the
number of apps one has on a phone) look promising:
a combination of the rule-based approach and the
machine learning approach could serve as a filter, after
which we employ model checking as a decision
procedure.
9
      </p>
    </sec>
    <sec id="sec-7">
      <title>Future work</title>
      <p>
        Like in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], we will continue using our tools for
analysing app sets in the wild. However, it should be
noted that a frontal attack on detecting collusions to
analyse analysing pairs, triplets and larger sets is not
practical given the search space. An effective
collusiondiscovery tool must include an effective set of methods
to isolate potential sets which require further
examination.
      </p>
      <p>
        We have to emphasise that such tools are
essential for many collusion-detection methods. Besides
our model checking approach, one could, for example,
think of the approach to merge pair of apps into a
single app to inspect aggregated data flows [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. Merging
is slow and therefore app-combining approach is
predicated on effective filtering of app pairs of interest.
      </p>
      <p>Alternatively (or additionally), to the two filters
described in our paper, imprecise heuristic methods
to find “interesting” app sets may include: statistical
code analysis of apps (e.g. to locate APIs potentially
responsible to communication, accessing sensitive
information, etc.); and taking into account apps’
publication time and distribution channel (app market,
direct installation, etc.).</p>
      <p>Attackers are more likely to release colluding apps
in a relatively short time frame and that they are likely
to engineer the distribution in such a way that
sufficient number of users would install the whole set (likely
from the same app market). To discover such
scenarios one can employ: analysis of security telemetry
focused on users devices to examine
installation/removal of apps, list of processes simultaneously
executing, device-specific APK download/installation logs
from app markets (like Google PlayTM) and meta-data
about APKs in app markets (upload time by
developers, developer ID, source IP, etc.). Such data would
allow constructing a full view of existing app sets on user
devices. Only naturally occurring sets (either installed
on same device or actually executing simultaneously)
may be analysed for collusion which should drastically
reduce the number of sets that require deeper analysis.</p>
      <p>Our goal is to build a fully automated and effective
collusion detection system, and tool performance will
be central to address scale. It is not clear yet where
the bottleneck will be when we apply our approach to
real-life apps. Further work will focus on identifying
these bottlenecks to optimise the slowest elements of
our tool-chain. Detecting covert channels would be a
challenge as modelling such will not be trivial.</p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgement</title>
      <p>This work has been funded by EPSRC and we are
excited to work on this challenging piece of research3.
A special thanks goes to Erwin R. Catesbeiana (Jr) for
excellent guidance through the Android ecosystem.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>Android</given-names>
            <surname>Open Source Project</surname>
          </string-name>
          . Dalvik Bytecode. https://source.android.com/devices/ tech/dalvik/dalvik-bytecode.html,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S.</given-names>
            <surname>Arzt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Rasthofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Fritz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Bodden</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bartel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Klein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Le Traon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Octeau</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>McDaniel. FlowDroid</surname>
          </string-name>
          <article-title>: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps</article-title>
          .
          <source>In ACM SIGPLAN Notices - PLDI'14</source>
          , volume
          <volume>49</volume>
          , pages
          <fpage>259</fpage>
          -
          <lpage>269</lpage>
          . ACM,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Bugiel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Davi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dmitrienko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Fischer</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.-R.</given-names>
            <surname>Sadeghi</surname>
          </string-name>
          .
          <article-title>XManDroid: A new Android evolution to mitigate privilege escalation attacks</article-title>
          .
          <source>TU Darmstadt, TR-2011-04</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S.</given-names>
            <surname>Bugiel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Davi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dmitrienko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Heuser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.-R.</given-names>
            <surname>Sadeghi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>B.</given-names>
            <surname>Shastry</surname>
          </string-name>
          .
          <article-title>Practical and lightweight domain isolation on Android</article-title>
          .
          <source>In SPSM'11</source>
          , pages
          <fpage>51</fpage>
          -
          <lpage>62</lpage>
          . ACM,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>J.</given-names>
            <surname>Burket</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Flynn</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Klieber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Shen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Snavely</surname>
          </string-name>
          .
          <article-title>Making DidFail succeed: Enhancing the CERT static taint analyzer for Android app sets</article-title>
          . CMU/SEI-2015
          <source>-TR-001</source>
          .
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>E.</given-names>
            <surname>Chin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Felt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Greenwood</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Wagner</surname>
          </string-name>
          .
          <article-title>Analyzing inter-application communication in Android</article-title>
          . In MobiSys'
          <volume>11</volume>
          , pages
          <fpage>239</fpage>
          -
          <lpage>252</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Clavel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Duran</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Eker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Lincoln</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Martı-Oliet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Meseguer</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Talcott</surname>
          </string-name>
          .
          <source>All about Maude. LNCS</source>
          ,
          <volume>4350</volume>
          ,
          <year>2007</year>
          .
          <article-title>3All code related to the project can be found in our GitHub page</article-title>
          : https://www.github.com/acidrepo
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>L.</given-names>
            <surname>Davi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dmitrienko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.-R.</given-names>
            <surname>Sadeghi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Winandy</surname>
          </string-name>
          .
          <article-title>Privilege escalation attacks on Android</article-title>
          .
          <source>In Information Security</source>
          , pages
          <fpage>346</fpage>
          -
          <lpage>360</lpage>
          .
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Desnos</surname>
          </string-name>
          . Androguard. https://github.com/ androguard/androguard,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>K. O. Elish</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Yao</surname>
            , and
            <given-names>B. G.</given-names>
          </string-name>
          <string-name>
            <surname>Ryder</surname>
          </string-name>
          .
          <article-title>On the need of precise inter-app ICC classification for detecting Android malware collusions</article-title>
          .
          <source>In MoST</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Felt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H. J.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Moshchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Hanna</surname>
          </string-name>
          , and
          <string-name>
            <given-names>E.</given-names>
            <surname>Chin</surname>
          </string-name>
          .
          <article-title>Permission re-delegation: Attacks and defenses</article-title>
          .
          <source>In USENIX Security</source>
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>N.</given-names>
            <surname>Hardy</surname>
          </string-name>
          .
          <article-title>The confused deputy:(or why capabilities might have been invented)</article-title>
          .
          <source>ACM SIGOPS Operating Systems Review</source>
          ,
          <volume>22</volume>
          (
          <issue>4</issue>
          ):
          <fpage>36</fpage>
          -
          <lpage>38</lpage>
          ,
          <year>1988</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>M. R. Jorge</surname>
            <given-names>Blasco</given-names>
          </string-name>
          ,
          <string-name>
            <given-names>Igor</given-names>
            <surname>Muttik</surname>
          </string-name>
          .
          <source>Wild android collusions</source>
          ,
          <year>2016</year>
          . submitted.
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>K.</given-names>
            <surname>Krishnamoorthy</surname>
          </string-name>
          .
          <article-title>Handbook of statistical distributions with applications</article-title>
          . CRC Press,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>L.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bartel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. F.</given-names>
            <surname>Bissyand</surname>
          </string-name>
          ´e,
          <string-name>
            <given-names>J.</given-names>
            <surname>Klein</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y. Le</given-names>
            <surname>Traon</surname>
          </string-name>
          .
          <article-title>ApkCombiner: Combining multiple Android apps to support inter-app analysis</article-title>
          .
          <source>In SEC'15</source>
          , pages
          <fpage>513</fpage>
          -
          <lpage>527</lpage>
          . Springer,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>T.</given-names>
            <surname>Mall</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Gupta</surname>
          </string-name>
          .
          <article-title>Critical evaluation of security framework in Android applications: Androidlevel security and application-level security</article-title>
          .
          <source>Int. Res. J. of Comp. and Elec. Engg., 2</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>C.</given-names>
            <surname>Marforio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Francillon</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Capkun</surname>
          </string-name>
          .
          <article-title>Application collusion attack on the permission-based security model and its implications for modern smartphone systems</article-title>
          .
          <source>technical report</source>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>H.</given-names>
            <surname>Peng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Gates</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Sarma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Qi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Potharaju</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Nita-Rotaru</surname>
          </string-name>
          ,
          <string-name>
            <surname>and I. Molloy.</surname>
          </string-name>
          <article-title>Using probabilistic generative models for ranking risks of Android apps</article-title>
          .
          <source>In CCS'12</source>
          , pages
          <fpage>241</fpage>
          -
          <lpage>252</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>R Core</given-names>
            <surname>Team. R:</surname>
          </string-name>
          <article-title>A Language and Environment for Statistical Computing</article-title>
          . R Foundation for Statistical Computing, Vienna, Austria,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>G.</given-names>
            <surname>Rosu</surname>
          </string-name>
          .
          <article-title>From rewriting logic, to programming language semantics, to program verification</article-title>
          .
          <source>In Logic, Rewriting, and Concurrency</source>
          , pages
          <fpage>598</fpage>
          -
          <lpage>616</lpage>
          .
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>A.</given-names>
            <surname>Sadeghi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Bagheri</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Malek</surname>
          </string-name>
          .
          <article-title>Analysis of Android inter-app security vulnerabilities using COVERT</article-title>
          .
          <source>In ICSE'15</source>
          , pages
          <fpage>725</fpage>
          -
          <lpage>728</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>B. P.</given-names>
            <surname>Sarma</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Gates</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Potharaju</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Nita-Rotaru</surname>
          </string-name>
          ,
          <string-name>
            <surname>and I. Molloy.</surname>
          </string-name>
          <article-title>Android permissions: a perspective combining risks and benefits</article-title>
          .
          <source>In SACMAT'12</source>
          , pages
          <fpage>13</fpage>
          -
          <lpage>22</lpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>R.</given-names>
            <surname>Schlegel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , X.-y. Zhou,
          <string-name>
            <given-names>M.</given-names>
            <surname>Intwala</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Kapadia</surname>
          </string-name>
          , and
          <string-name>
            <given-names>X.</given-names>
            <surname>Wang</surname>
          </string-name>
          .
          <article-title>Soundcomber: A stealthy and context-aware sound trojan for smartphones</article-title>
          .
          <source>In NDSS'11</source>
          , pages
          <fpage>17</fpage>
          -
          <lpage>33</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>G.</given-names>
            <surname>Suarez-Tangil</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Tapiador</surname>
          </string-name>
          , and P. PerisLopez.
          <article-title>Compartmentation policies for Android apps: A combinatorial optimization approach</article-title>
          .
          <source>In Network and System Security</source>
          , pages
          <fpage>63</fpage>
          -
          <lpage>77</lpage>
          .
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>G.</given-names>
            <surname>Suarez-Tangil</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. E.</given-names>
            <surname>Tapiador</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Peris-Lopez</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Ribagorda</surname>
          </string-name>
          .
          <article-title>Evolution, detection and analysis of malware for smart devices</article-title>
          .
          <source>Comm. Surveys &amp; Tutorials</source>
          , IEEE,
          <volume>16</volume>
          (
          <issue>2</issue>
          ):
          <fpage>961</fpage>
          -
          <lpage>987</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>L.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Du</surname>
          </string-name>
          , and
          <string-name>
            <surname>H. Zhang.</surname>
          </string-name>
          <article-title>An effective access control scheme for preventing permission leak in Android</article-title>
          . In Comp.,
          <source>Networking and Comm.</source>
          , pages
          <fpage>57</fpage>
          -
          <lpage>61</lpage>
          . IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>