Académique Documents
Professionnel Documents
Culture Documents
Luyi Xing
Indiana University
Bloomington
luyixing@indiana.edu
XiaoFeng Wang
Indiana University
Bloomington
xw7@indiana.edu
Xiaolong Bai
Indiana University
Bloomington, Tsinghua
University
bxl12@mails.tsinghua.edu.cn
Kai Chen
Indiana University
Bloomington, Chinese
Academy of Sciences
chenkai010@gmail.com
Tongxin Li
Peking University
litongxin@pku.edu.cn
Xiaojing Liao
Georgia Institute of
Technology
xliao@gatech.edu
Abstract
1.
The pervasiveness of computing technologies and emerging security threats they are facing have profoundly changed
the security designs of modern operating systems (OS). Moving away from the traditional threat model in which all applications (app for short) under the same user trust each other
with their information assets, todays OSes tend to separate
those apps and their resources, in an attempt to prevent
a malicious or compromised program from causing damage
to others. This has been achieved through a variety of app
isolation mechanisms: each app is confined in its partition
with a minimum set of privileges, called sandbox, and needs
to explicitly require additional capabilities (e.g., access to
camera, audio, etc.) from the OS or the user. Such a security model has been adopted by most mainstream systems,
including Windows, MAC OS X, Android, iOS, etc. With
its popularity, the eectiveness of the technique, however,
has still not been fully understood, due to the complexity of
a modern OS, which makes comprehensive protection challenging.
INTRODUCTION
Unauthorized cross-app resource access. Recent studies show that sandboxed Android apps can still get access to
other apps resources and acquire system capabilities without proper authorization [26]. For example, the developer
could accidentally make public an apps interface for interprocess communication (IPC), through which its internal
service or activity can be triggered by a message (called Intent) from an unauthorized app to acquire sensitive data [23]
or elevated privileges (e.g., access to audio, GPS, etc.) [16,
22, 18]. Fundamentally, the problem is caused by the migration of the threat model and the transitional pain that it
comes with: both the OS designer and the app developer are
less used to the mindset that all apps, even when they all belong to the same user, should treat each other as untrusted,
and proper security checks should always be performed in
all aspects of app-to-app and app-to-system interactions.
In those attacks, malicious code under some isolation constraints manages to gain access to other apps resources or
aect the way they are used by legitimate apps, when it
is not authorized to do so. We call such a security threat
unauthorized cross-app resource access or XARA. Although
specific instances of XARA are found on the Android platform, less known is whether it is indeed a generic issue. Particularly, we do not know whether app isolation works eec-
Permission to make digital or hard copies of all or part of this work for
personal or classroom use is granted without fee provided that copies are
not made or distributed for profit or commercial advantage and that copies
bear this notice and the full citation on the first page. To copy otherwise, to
republish, to post on servers or to redistribute to lists, requires prior specific
permission and/or a fee.
Copyright 20XX ACM X-XXXXX-XX-X/XX/XX ...$15.00.
2.
BACKGROUND
ments within its property file (called plist file, very much like
the Android manifest file). Each entitlement is a key-value
pair that identifies a specific capability (e.g., access to camera). They are reviewed by the Apple Stores to determine
whether the capabilities should be granted. For some capabilities, such as access to GPS locations, camera, etc., the
OS further asks for the users permission during the apps
runtime.
3.
XARA MENACES
3.1
Password Stealing
status%=%FindGenericPassword(args1);%
If(status%==%found)%{%
%%%%%%%%Authen<cateUser(args2);%
%%%%%%%%%
%%%%%%%%UpdatePasssword(args3);%
}%else%{%
%%%%%%%%AddGenericPassword(args4);%
}%
Security weakness. The simplified keychain structure is illustrated in Figure 1. Each keychain item carries the credential (e.g., password, secret key, etc.) under protection and a
set of attributes, such as account name, service name, path,
etc. Types of attributes an item has depend on its class,
typically Internet passwords or generic passwords. Figure 2
further shows how the keychain should be used according
to Apple [11]. An app first searches the keychain using a
set of attributes to find out whether its item has already
been there4 . If so, the item should be updated to keep the
apps current credential, after the app has been authenticated (signature verification) and authorized (ACL lookup)
by the OS. Otherwise, the app creates a new item and set
attributes to index it.
Attributes (account name, service name, path, )
Keychain
Database
item1
item2
item3
have this issue, because its keychain does not support the
ACL at all: every app is only allowed to access its own item
and there is no flexibility to let a group of apps share secrets
except those by same developers. This works because iOS
apps are pretty simple and do not need much collaboration,
which is not the case on OS X. For example, Safari manages
the users passwords for dierent websites stored by other
browsers such as Chrome, which is made possible through
the keychains access control mechanism. Also, given the
trend that the iOS apps become increasingly complicated,
the demand for such collaboration may show up in the future.
3.2
Container Cracking
3.3
Attacks. The security risks of intercepting the IPC communication through these vulnerable channels are realistic
and serious. As an example, here we just elaborate our
end-to-end attacks on three popular apps. We analyzed the
1Password app for OS X, which is one of the most popular
password management apps and ranked 3rd by the MAC
App Store [1]. The app comes with a browser extension
for each major browser that collects the passwords from the
users web account and passes them to the app through a
WebSocket connection. In our research, our sandboxed app
created a local WebSocket server that took over the port
6263, before the 1Password app did, and was successfully
connected to the password extension and downloaded the
password whenever the user logged into her web account.
We reported our findings to the 1Password security team,
which acknowledged the gravity of this problem. This attack
succeeded on OS X 10.10 (latest version when we reported
the problem), against Chrome, Firefox and Safari. Our attack code passed the vetting process of the MAC Store. The
attack demo is here [13].
The similar attack was also successful on Pushbullet, an
Apple-recommended popular app for exchanging notes, links,
pictures and files between multiple devices. The app authenticates a user by running Google Single Sign On (SSO)
within a browser. After the user signs in, Google redirects
the browser to the apps local web server that listens on the
port 20807, together with a secret token. In our attack, this
port was first taken over by the malicious app, which then
got the redirection link from Google and stole the token. After that, the attacker released the port to Pushbullet, which
later got the token resent by Google.
IPC Interception
3.4
Scheme Hijacking
As mentioned earlier, URL Scheme, an inter-app communication channel, is dierent on the Apple platforms. Specifically, Apples OSes automatically associate a scheme with
one app even with the presence of multiple apps claiming
the same scheme. This design leads to a unique problem to
Apples OSes, as elaborated below.
Scheme takeover. Essentially, a URL scheme is a simple
protocol that an app defines for communicating with others.
The app specifies a URL format in its plist file and lets other
apps invoke it and pass parameters through the URL. Once
this URL is triggered within the browser or a webview instance inside another app, an HTTP redirection is launched
towards the location part of the URL, e.g., yelp:, and
thus activates the app claiming the scheme, using the data
delivered by the remaining part of the URL. Also, a scheme
invocation can be initiated by an app with the API openURL.
Apple extensively utilizes URL schemes to run system apps,
e.g., mailto (for opening the Mail app), tel, facetime and
sms (for launching their corresponding apps).
Things become a bit tricky when two dierent apps register the same URL scheme with the OS. This conflict is
resolved on the Apple platforms according to the nature of
the scheme. Specifically, Apple has a list of system schemes
(e.g., sms, Facetime, etc.) that cannot be taken by any
third-party apps, and another list of schemes whose affiliations can be changed under the users consent, e.g., the
default browser for opening http. For a scheme not on the
lists, it will be bound to the first app that registers it on OS X
and the last on iOS, as discovered in our study. Given this
conflict resolving strategy, a malicious program can hijack
6
4.
4.1
Attack on OS X. In our research, we implemented an attack on Wunderlist, a popular free app (ranked 5th in the
Productivity category on the MAC Store) for managing
MAC users to-do lists. The app uses Google SSO: the user
logs in Google in the browser and then is redirected to the
URL wunderlist://oauth/goo
gle?token=ya29XXX, which invokes Wunderlist, passing to
it a secret token. In our attack, an unauthorized app first
registered the scheme wunderlist://. As a result, our
app stole the token from the browser. More interestingly,
our malicious app then immediately delivered the token to
Wunderlist by calling openURLs:withAppBundleID (an OS X
specific API), acting as a man-in-the-middle. This actually lets the SSO go through and therefore make the attack
stealthy. (The attack demo here [13].)
Attack on iOS. Scheme hijacking poses an especially serious threat to iOS, which heavily relies on URLs for interapp interactions (Section 4.2). As an example, we exploited
this weakness and successfully obtained the victims Facebook token for Pinterest, the most famous personal media
management app. Specifically, Pinterest and other apps all
support the SSO login through the Facebook app. Whenever the user clicks on continue with Facebook in these
apps, the Facebook app is invoked to ask for the users permission to let the authentication go through and also grant
Pinterest (and other apps) access to some of her Facebook
data. With the users consent, Facebook triggers a scheme
fb274266067164://access_token=CAAAAP9uIENwBAKk&X=Y to
deliver a secret access token to the app. In our research, our
attack app registered fb274266067164:// and took over
this scheme. As a result, Facebook unwittingly launched our
app and passed to it Pinterests access token. Actually even
the scheme for invoking the Facebook app (fbauth://)
was successfully hijacked in another attack, which enabled
the attacker to become a man-in-the-middle, performing the
whole SSO within its webview instance on behalf of the real
Facebook app. Most importantly, once it got the secret token from Facebook, the attacker forwarded it to the Pinterest app through fb274266067164://, which completely
hid the attack from the user. Note that this last step can be
App
Dissembling
#BasicBlock2:
7. test
r8d, r8d
8. jne
BasicBlock3
vulnerable chain
without
authentication
CFG
Assembly Code
#BasicBlock1:
...
1. lea
rcx, qword [ss:rbp - 0x30]
2. mov qword [ss:rsp+0x8], rcx
3. call
SecKeychainFindGenericPassword
4. mov r8d, eax
5. cmp r8d, 0xffff9d2c
6. jne
BasicBlock2
use
Reference
of service
Service/Channel
Finding
CFG
Define-Use
Chain
Construction
use
#BasicBlock3:
9. mov r15, qword [ss:rbp - 0x30]
...
10. mov rdi, r15
11. call SecKeychainItemModifyAttributesAndData
Flaw
Detection
Define-Use Chain
get reference [ss:rbp - 0x30] of
keychain item through
SecKeychainFindGenericPassword()
3.
SecKeychainFindGenericPassword
( , &[ss:rbp - 0x30], )
reference propagation
9. mov r15, qword [ss:rbp - 0x30]
reference propagation
10. mov rdi, r15
use reference rdi of keychain item for
updating password through
SecKeychainItemModifyAttributesAnd
Data()
11.
SecKeychainItemModifyAttributesA
ndData( rdi, )
ran Clutch [2] to decrypt iOS apps and then collect their
binaries.
To determine the type of services or channels an app uses,
our analyzer inspects its instructions for related API calls,
e.g., SecKeyc
hainFindGenericPassword for keychain access. The names
of these functions are all kept under a specific section of
the apps Mach-O file. Such a function is invoked by the
Objective-C binary in a unique way: it is triggered by sending messages to the functions object, which happens through
passing a pointer to the message receiver, the name of the
function (called selector, a null-terminated string), together
with other parameters to the runtime function objc_msgSend.
This operation can be observed from an apps recovered instruction set when the selector (i.e., function name) is stored
to the RSI register for preparing the objc_msgSend call.
Leveraging this observation, Xavus can find out the program
location where a service or channel is claimed and where it
is used.
To detect vulnerable apps that claim and use services
or channels without authentication, we need to not only
search for the presence of authentication API, but also check
whether the authentication actually happens to the services
or channels in use. To this end, our approach first searches
for the invocation of the API for claiming a service or channel, and runs Hopper scripts to construct a CFG for the procedure involving that API call (Figure 3). Then, from the
location of the claim, Xavus performs a define-use analysis:
from the reference of the service/channel (e.g., a pointer to
a keychain item, or the constant string for a scheme), as
returned by the API for the resource claim, our approach
identifies all the program locations where the reference is
utilized before it has been redefined (e.g., the variable holding the reference is assigned with a dierent value). The
objective here is to locate another API for using the service
or channel (e.g., updating a password to a keychain), so as
to find out whether proper authentication happens before
the use. Typically, the claim (getting the reference) for a
service/channel and the use of the service/channel (through
the reference) stay in the same procedure. Occasionally,
these API calls are placed in dierent functions, and need
to be linked by constructing an inter-procedure CFG. This
can be done using the techniques described in the prior research [17]. Along the execution path identified during the
construction of the define-use chain, our analysis module
further checks whether the reference of the service/channel
is passed to any authentication operation, according to the
types of the services and channels in use.
Figure 4 shows an example for the analysis on Mac Evernote app (Version 6.0.9), which does not authenticate the
owner of a keychain item before updating to it the users
password. Specifically, Xavus first builds the CFG of an Evernote procedure [ENKeychai
nHelper saveValue:toKeyChainItem], and locates the claim
for the keychain service, i.e., getting a reference of an item
through the API SecKeychainFindGenericPassword
(Line 3 under Assembly Code in Figure 4). The reference is
returned in memory [ss:rbp - 0x30]. Then Xavus follows
the propagation of the reference and identifies one instance
of using it, i.e., updating passwords through the OS X API
SecKeychainIt
emModifyAttributesAndData. Xavus reports that Evernote
is vulnerable due to the absence of authentication before the
use of the reference.
Flaw detection. As mentioned earlier, Xavus is designed
to detect missing authentication of the parties that share a
service or a channel with an app before it is utilized by the
app, a necessary condition for the presence of the XARA
weakness. To this end, we built into our analyzer a set of
features to fingerprint the authentication operation for each
channel or service, as elaborated below.
Keychain. The claim of this service happens when the app
calls SecKeychainFindGenericPassword or SecKeychainF
indInternetPassword. Both APIs return itemRef, the reference to the item. This reference will ultimately be used
to update a password to the keychain item through either
SecKeychainIt
emModifyAttributesAndData or SecKeychainItemMo
difyContent. The only possible way that app could find
out whether the item is created by a trusted party is to inspect its ACL that documents all the apps allowed to access
the item. This is done through the API SecACLCopyContents. The absence of a call to the API on the execution
path (between the claim and the use locations) indicates the
existence of a XARA risk within the app.
WebSocket. WebSocket servers are typically built over a
few popular open-source frameworks, such as CocoaHTTPServer [3]
and QtWebKit [12]. All of them provide a receiver method
for getting messages from browser extensions, which is used
by Xavus to fingerprint this channel, and a response method
for replying to the extensions. The invocations of these
two methods are identified as the claim and the use of the
channel, respectively. Between them, the server is supposed
8
4.2
Impacts
XARA types
Password Stealing
(keychain)
IPC Interception
Scheme Hijacking
Secrets exposed
passwords/
authentication tokens
authentication tokens/
OS X username and password
passwords/
authentication tokens
Apps/Services aected
iCloud, Gmail, Google Drive, Facebook, Twitter,
any web account used in Chrome.
Keychain Access, 1Password, Evernote, Pushbullet.
email/cookies
Container Cracking
4.3
Mitigation
ploit attempt, either from the new app or existing ones, and
therefore triggers an alarm. Note that on scheme conflicts,
even Apple does not know which app is legitimate to bond
to a scheme. What Apples OSes do is to arbitrarily associate the scheme with an app claiming that scheme (Section
3.4) while XARA scanner reports which app is associated
with a scheme and the apps that fail to do so.
Evaluation. We evaluated our implementation (a native
app) against aforementioned XARA attacks (Section 3) except that on WebSocket. Our scanner detected all the exploits on the keychain, URL schemes (on OS X) and BIDs,
before the malicious attempts could be executed.
Note
that since such contention of app-specific resources, channels or services does not exist during the systems normal
operations, our scanner will not cause a false alarm, though
it might miss some exploit attempts. We further measured
its performance on a MacBook Pro (Mid 2014 model, 2.6
GHz Intel i5, 8 GB memory, SSD), under OS X 10.10.2. It
utilizes no more than 0.2% of CPU during operations. More
details are available in Section A (see Appendix).
5.
LESSONS LEARNT
6.
RELATED WORK
are not aware of. Also related is the study on the Pileup [26]
attacks, in which a malicious app can gain an elevated privilege through a system upgrade. The problem here is not
in the design of isolation protection but the mechanism to
grant an app additional permissions, which has been circumvented in the upgrade process.
Security on the Apple platforms. Compared with Android, the Apple platforms are much less studied in terms of
their security protection. A technical blog [7] talked about
insecure handling of schemes in the invoked apps on iOS,
which is not the scheme hijacking on both OS X and iOS,
as discussed in this paper. Prior academic research almost
solely focuses on various techniques to bypass the security
checks on iOS private APIs [25, 20] and use of them to propagate malware infections [24]. Understanding the security
implications of Apples inter-app interactions and sandbox
design has never been done before. Simultaneously and independently, Fireye found the risk of hijacking iOS schemes
and put a blog online [8]. However, they just briefly discuss
this security risk without giving much detail, with a demo
that apparently shows a simple phishing attack. By comparison, our work is much more thorough, deeper and broader.
We built end-to-end attacks on several high-impact apps
(e.g., Facebook, Pinterest, etc.), identified the impacts of the
threat over a thousand apps, and more importantly demonstrate that the attacks can be made stealthy (through dierent man-in-the-middle tricks on MAC OS and iOS, passing
the stolen token to the victim app, to completely conceal
the attack), which is nontrivial (see Section 3.4). Also we
completely circumvented the restrictive security checks of
the Apple Stores: actually, our attack apps were approved
by the App Store on January 23, 2015, almost one month
earlier than the blog (February 19), which did not mention
any study on the protection provided by the App Store. Further, we discovered that the problem exists on both iOS and
OS X and dierent strategies these OSes took to resolve conflicts in Scheme claims (Section 3.4), which is important to
the success of the attack. Finally, we developed techniques
for automatically detecting such exploits and mitigating this
risk.
Related to Xavus is PiOS [17], a general-purpose code
analysis tool for iOS apps, which has not been made publicly
available so far. By comparison, our approach was designed
specifically for detecting XARA flaws within both MAC OS
and iOS apps.
7.
8.
ADDITIONAL AUTHORS
9.
REFERENCES
CONCLUSION
In this paper, we identify a new category of security weaknesses, called XARA, that pose a serious threat to the app
isolation protection on modern OSes. Our study on the
threat over the Apple platforms, the first of this kind, reveals
its pervasiveness and significant impacts: critical system services and channels, including the keychain, WebSocket and
Scheme, can all be exploited to gain access to other apps
resources, and even the Apple Sandbox on OS X can be
cracked, exposing an apps container directory to the unauthorized party. The consequences of these attacks are serious, including leaks of user passwords, secret tokens and all
kinds of sensitive documents. Our research shows that fundamentally the problem comes from lack of authentication
during app-to-app and app-to-system interactions, and further proposes new techniques to detect and mitigate such
12
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
APPENDIX
A.
Our exploit scanner is designed to use three events it registers for exploit detection (Section 4.3). Specifically, those
events are issued when a new app is installed or updated,
new system log is generated or a keychain file is changed.
We measured the performance overhead of the scanner to
respond to the three events and perform corresponding detection operations, as presented in Table 3. Specifically, for
new app installation, we calculated the average time (t1) for
installing each of the top 20 popular apps. Then we measured the average time our scanner needs to check (t2) a
newly installed app. The ratio t2/t1 is found to be 0.97% in
our experiment, which indicates that compared to each apps
installation time, the delay caused by checking its scheme
and BID is negligible. The second event is triggered when
13