AUTHSCAN: Automatic Extraction of Web

Transcription

AUTHSCAN: Automatic Extraction of Web
AUTH S CAN: Automatic Extraction of Web Authentication Protocols
from Implementations∗
Guangdong Bai? , Jike Lei? , Guozhu Meng? , Sai Sathyanarayan Venkatraman? ,
Prateek Saxena? , Jun Sun† , Yang Liu‡ , and Jin Song Dong?
∗
National University of Singapore
†
Singapore University of Technology and Design
‡
Nanyang Technological University
Abstract
Ideally, security protocol implementations should be formally verified before they are deployed. However, this is
not true in practice. Numerous high-profile vulnerabilities
have been found in web authentication protocol implementations, especially in single-sign on (SSO) protocols implementations recently. Much of the prior work on authentication protocol verification has focused on theoretical foundations and building scalable verification tools for checking
manually-crafted specifications [17, 18, 44].
In this paper, we address a complementary problem of automatically extracting specifications from implementations. We propose AUTH S CAN, an end-to-end
platform to automatically recover authentication protocol
specifications from their implementations. AUTH S CAN
finds a total of 7 security vulnerabilities using off-the-shelf
verification tools in specifications it recovers, which include
SSO protocol implementations and custom web authentication logic of web sites with millions of users.
1
Introduction
Web authentication mechanisms evolve fast. Many web
sites implement their own authentication protocols and rely
on third-party mechanisms to manage their authentication
logic. For example, recent single-sign on (SSO) mechanisms (e.g., Facebook Connect, SAML-based SSO, OpenID
and BrowserID) have formed the basis of managing user
identities in commercial web sites and mobile applications.
For example, OpenID currently manages over one billion
user accounts and has been adopted by over 50,000 web
sites, including many well-known ones such as Google,
Facebook and Microsoft [5]. As another example, Facebook Connect is employed by 2 million web sites and more
∗ Prateek Saxena, Jun Sun and Yang Liu have contributed equally to this
work.
than 250 million people reportedly use it every month as of
2011 [7]. Ideally, authentication protocols should be formally verified prior to their implementations. However,
majority of web sites do not follow this principle. Authentication protocols have historically been hard to design
correctly and implementations have been found susceptible
to logical flaws [31, 41]. Web authentication protocols are
no exception—several of these implementations have been
found insecure in post-deployment analysis [16, 29, 39, 42].
There are three key challenges in ensuring that applications authenticate and federate user identities securely.
First, most prior protocol verification work has focused on
checking the high-level protocol specifications, not their
implementations [13,21,44]. In practice, however, checking
implementations is difficult due to lack of complete information, such as missing source code of some protocol participants. Second, verifying authentication using off-theshelf tools requires expert knowledge and, in most prior
work, conversion of authentication protocol specifications
to verification tools has been done manually. However, several custom authentication protocols are undocumented. As
new protocols emerge and the implementations of existing
protocols evolve, manual translation of every new protocol becomes infeasible. Moreover, manual translation is
tedious and can be error-prone. Finally, the authentication
of the communication between protocol participants often
goes beyond the initial establishment of authentication tokens, which the high-level specifications dictate. In practice, checking the end-to-end authentication of communication involves checking if the authentication tokens are actually used in all subsequent communications and making
sure they are not sent on public communication channels
or stored in persistent devices from which they can leak.
Techniques to address these practical problems of existing
implementations are an important area which has received
relatively lesser attention.
Our Approach.
In this paper, we present a frame-
work called AUTH S CAN to automatically extract the formal
specifications of authentication protocols from their implementations. Then, these specifications are directly checked
for authentication and secrecy properties using off-the-shelf
verification tools [10, 18, 22]. AUTH S CAN can automatically confirm the candidate attacks generated by the verification tools and report the true positives (confirmed attacks) in most cases we study. In some cases, AUTH S CAN
does not know the attacker’s knowledge set enough to generate confirmed attacks — in such cases, it generates security warnings containing precise communication tokens that
need to be manually reviewed by the security analyst.
We design an intermediate language TML to bridge the
gap between the detailed implementation of an authentication protocol and its high level semantics that can be used
by the verification tools. We show that TML is sufficient
to capture the communications between protocol participants and their internal actions. AUTH S CAN assumes no
knowledge of the protocol being inferred and does not require the full source code of the implementation. We propose a refinement method to deal with partial availability
of the code implementing the protocol (e.g., if the code
located on a web server is not available). It starts with
an initial abstraction of the protocol specification, and iteratively refines the abstraction until it reaches a fixpoint.
To perform this refinement, we propose a novel hybrid inference approach to combine a whitebox program analysis
with a blackbox differential fuzzing analysis. In particular,
the whitebox analysis performs dynamic symbolic analysis
on the available code to extract precise data semantics and
the internal actions of the protocol participants. The blackbox analysis infers the protocol implementation by probing the protocol participants and comparing the changes in
their response. Our final inferred specification in TML can
be directly translated into modeling languages used by offthe-shelf verification tools and can be configured to verify
against a variety of attacker models [17, 24].
Our techniques focus on recovering as much protocol semantics as possible from dynamic executions of the protocol; we do not aim to find complete specifications. Instead,
we aim to recover fragments of the protocol with enough
precision to find interesting logic flaws. We apply AUTH S CAN to study several real-world web sites, including three
popular SSO protocols — Facebook Connect Protocol (2
web sites), Browser ID (3 web sites) and Windows Live
Messenger Connect (1 web site). We also test several standalone web sites which implement their custom authentication logic and have millions of users sharing personal information. AUTH S CAN successfully recovers precise (but
partial) models of their authentication logic, and formally
verifies their authentication and secrecy properties against
a broad range of attacker models. We have found 7 security flaws in these implementations without their prior
knowledge—one of these was found independently by a
concurrent work [33] and the remaining are previously unknown. In particular, we find two flaws in Facebook Connect Protocol and one flaw in BrowserID, which arise because the freshness of messages is not guaranteed in the
protocol implementations. An attacker is thus able to perpetrate replay attacks to acquire unauthorized authentication
credentials. Several other vulnerabilities are due to unsafe
implementation errors in creating and maintaining secrecy
of authentication tokens. For example, we find that a web
site employing Windows Live Messenger Connect grants
the end user a publicly known value as a credential after the
user has been authenticated to Windows Live.
Contributions. We make the following main contributions
in this paper:
• Automatic Extraction Techniques. We propose automatic techniques to extract the authentication protocol specifications from their implementations. Our
approach works with only minimal number of user inputs (Section 2.3) and reasonable assumptions (Section 3.2), without requiring any knowledge of the protocol. Our techniques gracefully adjust the precision of
the inferred protocol based on how much source code
implementing the protocol is visible to the analysis.
• End-to-end System. We build AUTH S CAN, an endto-end system that embodies these techniques. AUTH S CAN is designed to be extensible and configurable—
it can utilize several off-the-shelf verification tools
(ProVerif [18] or PAT [38]), and can be extended to
model different attack models.
• Practical Results. We apply our approach to several
real-world web sites, including several using important SSO protocols like Facebook Connect Protocol,
BrowserID and Windows Live Messenger Connect.
We successfully find 7 security flaws in their implementations.
2
Challenges & Overview
Security analysts often need to guarantee the correctness
of authentication protocol implementations without having
complete access to the source code. In this section, we explain the problem and its challenges with an example.
2.1
A Running Example
Consider one execution of a hypothetical single-sign on
(SSO) protocol (similar to Facebook Connect) as shown
in Figure 1-(a). In our example, Alice wants to authenticate herself to a service provider (SP) web site hosted at
sp.com by using her login credentials with an identity
provider (IDP) hosted at idp.com1 . This example shows
1 One sample IDP is facebook.com in Facebook Connect and one
sample SP is cnn.com which uses the Facebook Connect protocol.
②
1
2
3
4
5
6
7
8
GET https://www.idp.com/login?spid=SID&spDomain=sp.
com&redirect_url=http://www.idp.com/granter?next=
http:// www.sp.com/login
Host: www.idp.com
Referer: https://www.idp.com/login
Cookie: sessionID=0x12345678
---------------------------------------CSRFtoken=sLd2f93
③
9
10
11
12
13
14
15
16
17
18
19
20
HTTP/1.1 200
Set-Cookie: cookie1=87654321; domain=.idp.com
---------------------------------------<body onload=foo()> <script>
var domain="http://www.sp.com/login";
var authToken="3fa09d24a3ce";
var uEmail="alice@idp.com";
var idpSign="2oOs5u29erIas…“;
function foo(){
var message=uEmail+"&"+authToken+"&"+idpSign ;
window.postMessage(domain, message); }
</script> </body>
21
22
23
24
25
26
27
28
29
30
31
window.addEventListener('message',function(event) {
var uEmail=extractUser(event.data);
var authToken=extractToken(event.data);
var idpSign=extractSign(event.data);
var data=uEmail+"&"+authToken;
var idpPubKey=loadPubKey();
if(verify(data, idpSign, idpPubKey)){
var message=uEmail+"&" +authToken;
var request = $.ajax({url: login, data: { token: message}});}
else
{…}},false);
Browser
www.sp.com/login
www.idp.com/login
①
B
④
②
A
③
⑤
IDP/login
server
SP server
(a) The process of Alice authenticates herself to the SP though the IDP
①
SP_C  IDP_C
spid, spDomain, next
②
IDP_C  IDP_S
spid, spDomain, sessionID, CSRFToken
③
IDP_S  IDP_C
uEmail, authToken, {uEmail, authToken}
−1
𝑘𝐼𝐷𝑃
uEmail, authToken, {uEmail, authToken}
−1
𝑘𝐼𝐷𝑃
④
⑤
IDP_C  SP_C
(next)
SP_C  SP_S
uEmail, authToken
B
A
(b) Communication actions of the participants (IDP_C: IDP client
code, IDP_S: IDP server, SP_C: SP client code, SP_S: SP server)
(c) Parts of exchanged HTTP message and client code
Figure 1: An SSO example: Alice authenticates herself to the SP (sp.com) by using her login credentials with the IDP (idp.com). The
circled numbers indicate the login process, and the capital letters stand for client code.
that much of the communication between the IDP and the
SP occurs through the web browser (using postMessage
between client-side iframes), which is similar to realworld protocols [27, 42]. This enables security analysts to
analyze protocol behaviors.
The authentication protocol, which the security analyst
aims to infer, is as follows:
• Step ¬: When Alice visits the SP’s site and initiates
the intent to authenticate, the client-side SP code sends
the pre-registered ID and domain of the SP to the IDP’s
iframe. The fact that each SP is pre-registered with
the IDP is not known to the security analyst by observing this protocol execution.
• Step ­: Assuming that Alice has already logged into
the IDP, the IDP generates an HTTP request to its
backend server. The request contains a nonce (antiCSRF) and the session ID of Alice’s ongoing web session with the IDP.
• Step ®: The IDP replies with Alice’s registered
email identity uEmail and an authentication token
authToken, which authorizes all access to Alice’s
personal information stored at the IDP. The IDP creates a cryptographic signature over the terms uEmail
and authToken as an authentication credential to be
verified by the SP.
• Step ¯: Client-side IDP code (code A in Figure 1-(c))
relays the HTTP data received in step ® to the SP’s
iframe.
• Step °: Client-side SP code (code B in Figure 1(c)) verifies that the signature is valid and extracts the
uEmail and authToken. The SP’s iframe sends
Alice’s identity and authToken back to the SP’s
server. This allows the SP’s server to access Alice’s information stored at the IDP, and allows the IDP to log
all SP’s actions on Alice’s data for audit (not shown).
The security analyst can only observe the network traffic
and code execution at the browser end; the server-side logic
of the protocol participants is not available for analysis.
Security Flaws. The protocol has several vulnerabilities.
We only describe three of them and they can be found automatically if the protocol can be inferred precisely:
• Man-in-the-middle (MITM) Attack. The protocol is susceptible to several MITM attacks by a web
attacker. For example, consider the target of the
postMessage call in the client-side code (line 19).
This target is derived from an HTTP parameter called
next (at line 2 of Figure 1-(c)). A malicious SP, say
Eve, can change the next parameter to its own domain, leaving the spid parameter as it is. In this attack, the token granted to the sp.com is actually sent
to Eve by code labeled as A in step ¯. This attack is
similar to a recently reported real-world attack on the
site zoho.com employing Facebook Connect [42].
• Replay Attack. The protocol is susceptible to a replay
attack, as the IDP’s server does not use any nonce or
timestamp to guarantee the freshness of the authentication token authToken. If a malicious SP obtains the
signed assertion in step ¯, it can replay the message to
sp.com in a new web session and log in as Alice.
• Guessable Tokens. Even if the authentication token is kept secret by carefully using only secure (private) communication channels, additional problems
can exist. For example, authToken remains constant
across all of Alice’s sessions, which is not apparent
from observing a single protocol run. We refer to such
tokens as long-lived tokens. Long-lived tokens may
be used in replay attacks. Similarly, if the IDP uses
a weak or guessable scheme to generate authentication
tokens, such as a sequentially incrementing counter, an
attacker can precisely guess the tokens used in other
web sessions.
2.2
Challenges
This example shows that implementation-dependent security properties need to be checked in real web applications, where the formal specifications are required. In the
following, we list a number of practical challenges in inferring specifications from their implementations.
Inferring Semantics. A key challenge is to infer the precise
semantics of data elements exchanged in the communication. For example, it is important to know that authToken
remains constant across all of Alice’s sessions with the IDP
and does not include a nonce or a timestamp. Inferring this
information is critical to discover the replay attack in the
protocol. Similarly, identifying that the communication target in ¯ is not a fixed domain but instead a variable derived from the HTTP parameter next is crucial to find the
MITM attack. These semantics are not obvious from the
values observed in one message or even in one execution of
the protocol.
Partial Code. Only the part of the protocol implementation that executes in the web browser is visible for analysis. For instance, we can infer using whitebox analysis over
the client-side code that idpSign is a cryptographic signature of uEmail and authToken under the IDP’s private
key. This allows us skip generating random guesses about
whether it is possible to forge the (uEmail, authToken)
pair by the attacker. This can significantly improve the precision, which we discussed in Section 6. In other cases,
the exact relationship between data elements is not directly
available via whitebox analysis. For example, no client-side
code reveals whether authToken is tied to sp.com or is
the same for all SPs registered with the IDP. Our analysis
needs to infer if there is a one-to-one relation between them.
Redundant Message Elements. Numerous HTTP data elements are contained in the HTTP traces, but most of them
are irrelevant to the authentication protocol. The cookie
cookie1 (line 10 in Figure 1-(c)) is one of such examples.
Including redundant element when using off-the-shelf verification tools can significantly increase the verification time
or even lead to a non-termination. One of the challenges for
scalability is to identify and eliminate irrelevant parameters
systematically from the traces.
2.3
AUTH S CAN Overview
To overcome these challenges, we develop a tool called
AUTH S CAN which requires no prior knowledge of the protocol. AUTH S CAN is a system that aids security analysts. It
takes the following three inputs.
• Test Harness. The security analyst provides AUTH S CAN with at least one implementation of the protocol and provides login credentials (such as username
and password) of at least two test accounts. The analyst can optionally provide additional test cases involving many different users and/or different participants (such as different SPs) to utilize AUTH S CAN’s
full capability—the more test cases, the more precise
is the inferred protocol.
• Protocol Principals & Public keys. In each test
case, the analyst specifies the principals relevant
to the protocol, such as the SP, the IDP and the
user being authenticated in the running example.
In addition, AUTH S CAN takes as inputs the interface APIs (web URIs) that can be queried to obtain public keys of principals involved in the protocol. For instance, JavaScript function loadPubKey
at line 26 in the running example internally makes an
XmlHttpRequest (not shown) to retrieve the public
key of the IDP; such web interfaces need to be identified by the analyst.
• Oracle. AUTH S CAN generates new protocol executions internally during testing. For each internal run
generated, AUTH S CAN needs to query a test oracle
that indicates whether authentication is successful or
not. For AUTH S CAN, this is specified as an HTTP request that AUTH S CAN can make to verify a successful
completion. In the running example, AUTH S CAN can
generate an HTTP request to access Alice’s personal
information at the IDP using authToken to check if
the protocol run succeeds.
Output. AUTH S CAN produces two outputs. First, it produces a specification of the inferred protocol, which can act
as a starting point for a variety of manual and automatic
analysis [17]. Second, it produces a vulnerability report for
all the attacks that it finds.
Trace
Capturing
Refinement
Abstraction
Initialization
TML
Model
Model
Translation
Candidate
Attack
Verification
Tool
Attack Message
Construction
Probe
Local
Trace Pool
Flaws
Warning
Hybrid Inference
ProVerif
Protocol Extraction
PAT
AVISPA
Protocol Verification
Crypto
Functions
Attack
Models
Attack Confirmation
Security
Properties
Test
Harness
Protocol
Principals
& Keys
Oracle
Inputs
Configurable Options
Figure 2: Overview of AUTH S CAN
Configurable Options. AUTH S CAN is designed to enable
checking a variety of security properties under several different attacker models. Additionally, it is designed to incorporate domain knowledge that the security analyst is willing
to provide to improve the precision. We next explain these
configurable parameters of our system and defaults.
• Attacker Models. By default, AUTH S CAN checks for
flaws against two standard attacker models: the network attacker [24] and the web attacker [15,17]. However, it is possible to extend these models with new
ones. For example, we can consider a filesystem attacker which steals authorization tokens stored on the
client device. Such attacks have been found recently
on the Android DropBox application [8].
• Security Properties. By default, AUTH S CAN checks
for authentication of the inferred protocols. Checking authentication corresponds to two precise, formal
definitions provided in previous work: injective correspondences [32] and secrecy [44]. Additional properties can be added to AUTH S CAN.
• Cryptographic Functions Names.
AUTH S CAN
needs to infer the functions which implement cryptographic primitives such as signature verification,
hashes and so on, in the executed client-side
JavaScript code (e.g. verify at line 27 in Figure 1-(c)). By default, AUTH S CAN performs this
automatically.
It has a built-in list of browser
APIs (such as Window.postMessage()) and popular JavaScript libraries that provide such functions (such as Node.js [4] and Mozilla jwcrypto [9]).
In addition, it has a small set of standardized cryptographic primitives. It can identify functions in the
executed client-side code that mimic the behavior of
these standardized functions using blackbox testing2 .
Security analysts can improve AUTH S CAN’s precision and efficiency by providing additional names of
2 Alternative
heavy-weight methods (e.g., [43]) to identify cryptographic functions using whitebox analyses are possible.
JavaScript source code functions that compute cryptographic function terms.
3
AUTH S CAN System Design
In this section, we present an overview of our techniques
and introduce an intermediate language called TML to capture the full semantics of the extracted protocol.
3.1
Approach Overview
Figure 2 shows the internal design steps in our system.
AUTH S CAN performs three high-level steps: protocol extraction, protocol verification and attack confirmation.
In the protocol extraction step, AUTH S CAN iteratively
processes test cases one-by-one from its input test harness until the test harness is exhausted. For each test
case, it records the network HTTP(S) traffic and client-side
JavaScript code execution traces through a web browser.
Using this information, AUTH S CAN generates an initial abstraction of the protocol specification. It then performs
a refinement process to subsequently obtain more precise
specifications3 . In each refinement step, AUTH S CAN employs a hybrid inference technique which combines both
whitebox program analysis on the JavaScript code (if available) and blackbox fuzzing. The refinement process stops
if a fixpoint is reached (i.e., no new semantics can be inferred). Our protocol extraction techniques are detailed in
Section 4.
At the end of the protocol extraction step, AUTH S CAN
generates a protocol specification in an intermediate language called TML, which can capture the actions executed by each participant and the semantics of the data
exchanged in the protocol execution. AUTH S CAN converts TML to applied pi-calculus, which is a widely-used
specification language for security protocols. This protocol specification then can be automatically checked using
3 By precise, we mean that each refinement contains more expressive
semantics about actions performed by protocol participants and more relationships between data terms exchanged in the protocol.
off-the-shelf verification tools for various security properties, against different attackers. In this work, we use
ProVerif [18] and PAT [38] as the verification tools because they can model an unbounded number of parallel
sessions4 . AUTH S CAN models various semantic restrictions, such as the same-origin policy, HTTP headers like
Referrer, cookies, secure channels (HTTPS, originspecified postMessage), and insecure channels (HTTP,
unchecked postMessages), before querying off-theshelf verification tools for precise reasoning, as detailed
in [17]. Off-the-shelf verification tools verify these security properties and generate counterexamples which violate
the properties. The counterexamples serve as unconfirmed
or candidate attacks.
The last step of AUTH S CAN is attack confirmation step.
In principle, our techniques can generate imprecise protocol
specifications; therefore, some of the candidate attacks may
not be true security flaws. AUTH S CAN can confirm HTTP
attacks by converting counterexamples into HTTP network
traffic, relaying them in a live setting and confirming true
positives using the analyst-specified oracle. In the cases
where AUTH S CAN does not know the attacker’s knowledge
set enough to generate confirmed attacks, it generates security warnings containing precise communication tokens that
need to be manually reviewed by the security analyst.
Initial Conditions
(I1)
(I2)
(I3)
(I4)
(I5)
(I6)
(I7)
∀x, y : x has y
∀x, y : x has key(x, y) ∧ y has key(x, y)
∀x, y : x has ky
r has sessionIDr ∧ p has sessionIDr
r has CSRF T okenr ∧ p has CSRF T okenr
Z has assoc(i, authtoken)
i has kB ∧ r has kB
SP C(i) Protocol
SC1:
SC2:
SC3:
SC4:
SC5:
SC6:
BeginInit(j)
NewAssoc({p, i}, assoc(j, spid))
Send(r,{[assoc(j, spid), next]}kB ) // Step ¬
Receive(r,{[M, N, {[M, N ]}k−1
]}kB ) //Step ¯
IDP S
Send(j,[M, N ]) //Step °
EndInit(j)
SP S(j) Protocol
SS1: BeginRespond(i)
SS2: Receive(i,[M, assoc(M, N )]) //Step °
SS3: EndRespond(i)
IDP C(r) Protocol
IC1:
IC2:
IC3:
IC4:
Receive(i,{X, Y }kB ) //Step ¬
Send(p,{{X, sessionIDr , CSRF T okenr }}key(r,p) ) //Step ­
Receive(p,{{M, N, P }}key(r,p) )//Step ®
Send(Y,{[M, N, P ]}kB )//Step ¯
IDP S(p) Protocol
IS1: Receive(r,{{assoc(T, U ), sessionIDr ,
CSRF T okenr }}key(r,p) ) //Step ­
IS2: NewAssoc({p, j}, assoc(i, authtoken))
IS3: Send(r,{i, assoc(i, authtoken),
{[i, assoc(i, authtoken)]}k−1
}key(r,p) ) //Step ®
IDP S
3.2
Target Model Language
The semantics of our inferred authentication protocol
is represented in an abstract language called Target Model
Language (TML). TML serves as a bridge between protocol
implementations and formal models supported by verification tools. It captures enough implementation-level details
to check correctness, and at the same time, it can be translated into formal specifications that can be used as inputs to
off-the-shelf security protocol verification tools.
We design TML based on the language proposed by
Woo and Lam [44], referred as WL model in this work;
we add new extensions which are necessary for our protocol inference. We explain the TML semantics in an intuitive way here to ease understanding; the terminology used
(underlined) has precise semantics as defined in WL [44].
The TML representation of our running example is shown
in Figure 3.
TML Syntax. TML represents an authentication protocol as a protocol schema. AUTH S CAN observes several concrete executions of a protocol, each of which is
an instantiation of the protocol schema—for instance, our
running example is an instantiation of our target protocol with two specific participants namely idp.com and
sp.com. Formally, the protocol schema is a 2-tuple
4 In this paper, we only use ProVerif to explain our idea. Bounded-state
model checkers like AVISPA [10] can also be used but are not implemented
as backends yet.
Figure 3: The TML model of running example in Figure 1. M, N,
P, T and U are variables. I2 and the session keys in IC2, IC3,
IS1 and IS3 model HTTPS communication. Cross domain restrictions by the browser’s SOP are modeled as encryption using
the key kB (initialized in I7). j and p are identities of SP and IDP
respectively, i.e., their domains. The behavior of Alice is modeled
together on SP client side, thus i stands for Alice’s uEmail which
is Alice’s identity. sessionID and CSRFToken have been inferred to be nonces (I4 and I5). The authToken is inferred to
be guessable (I6).
(Init, P roSet). The P roSet is a set of local protocols
{P1 (X1 ), P2 (X2 ), . . . Pi (Xi )}, where each local protocol
Pi is executed by a protocol participant Xi . The local protocol specifies a sequence of actions that one participant can
perform. The complete specification is characterized by a
set of local protocols to be executed by multiple participants. Xi are variables in the schema that may be instantiated by concrete principals (such as idp.com) in a protocol instance. The second part of the protocol schema is
a set of initial conditions Init, such as the initial knowledge
set of each protocol participant prior to the start of the protocol. In the TML of our running example (Figure 3), we
infer 7 initial conditions (I1-I7); we explain how these
are derived during protocol extraction in Section 4.
Actions. In executing a local protocol, the participant
executes a sequence of actions. Actions can be either
communication actions, which send/receive messages with
Table 1: The Action Schema in IML
BeginInit(r)
EndInit(r)
BeginRespond(i)
EndRespond(i)
Send(p, M )
Receive(p, M )
NewNonce(n)
NewSecret(S, n)
Accept(N )
NewKeyPair(k, k−1 )
NewAssoc(S, assoc(m1 , . . . , mn ) )
other participants, or internal actions which result in updating local state (or, formally the knowledge set) of that participant. These actions are listed in Table 1. The semantics
of these actions are fairly intuitive as their names suggest,
with the exception of NewAssoc which is explained later
in this section. For example, BeginInit(r) states that an
initiator of the protocol begins its role with a responder r.
EndInit(r) states that the initiator ends the protocol with
the responder r; BeginRespond(i) and EndRespond(i)
are similarly defined with i being the initiator. Send(p, M )
or Receive(p, M ) means sending or receiving M to/from
p, respectively. NewNonce(n) is the action of generating
a nonce. NewKeyPair(k, k −1 ) is the action of generating
an asymmetric key pair, where k is the public key and k −1
is the private key. NewSecret(S, n) indicates the action
of generating a secret, which is intended to be shared with
(or distributed to) a set of principals S. Secrets can be data
elements such as shared session keys. The secret distribution is only complete when all participants for whom the
secret is intended have explicitly executed the Accept(N )
action. Note that a participant following a local protocol
only executes an action after it executes the preceding action state in the schema. As a result of executing certain actions, such as NewNonce and Accept, participants update
their knowledge sets. Intuitively, a participant’s knowledge
set includes the data terms that it possesses or can compute, which can be used by the participant in communication messages. The attacker, denoted by the principal Z
throughout this paper, is assumed to follow no local protocol and is free to execute any action at any step under the
constraints of its knowledge set and the capability of the
assumed attacker model.
Terms. We aim to recover as much semantics of the data
exchanged and the internal state maintained for each participant as possible. To characterize these semantics, TML
provides three kinds of terms: constant symbols, function
symbols and variable symbols5 . Constant symbols include
names of principals (web origins), nonces, keys and integer
constants. Function symbols include the encryption function {·} , the shared key function key(·, ·), the concatena5 This typesetting is kept consistent with the WL model paper [44]. The
constant symbols are typeset in Sans Serif font, the adversary is referred
to as the principal Z and the universe of principals is the set SYS. Lower
case variables stand for terms that are constant symbols, while upper case
variables stand for arbitrary terms.
tion function [·, ..., ·], the set construction function {·, ..., ·}
and the arithmetic functions (+,−,/,∗, and modulo). The
public key and private key of a principal P are denoted by
kP and kP−1 , respectively. The symmetric key shared by
principles P and Q is denoted by key(P, Q). A term is
ground if it only consists of constants and function symbols. Finally, variable symbols represent terms which are
not ground.
We aim to recover the precise relationships between
terms exchanged in the protocol. For example, our analysis infers that the value of idpSign is the signature of
uEmail concatenated with authToken, as can be seen at
line 27 of the running example—this translates to the statement labelled IS3 in Figure 3. If a participant receives a
data element whose precise semantics is not known by the
receiver, we represent this data as a variable in TML. For
example, consider SC4 in Figure 3, we model the messages
on the receiver side as variables M and N ; the participant
Xi executing local protocol Pi in the schema is a variable;
the responder r in the BeginInit(r) is also a variable which
will be instantiated with concrete values in an execution instance of a protocol schema.
New Extensions in TML. TML extends the WL model
with three new extensions. The semantics of other operations are defined in the WL model; we discuss why these extensions are needed. The first extension is arithmetic function symbols. These operations are often utilized in generating sequence numbers from nonces, and, often lead to weak
or predictable tokens. Our TML can capture such weak constructions and subject them to testing.
The second extension is a function symbol called association relation, which is written as assoc(m1 , . . . , mn ) to
associate n variables, m1 to mn . Association relation is
necessary because while reconstructing the semantics from
implementations, we sometimes cannot infer the exact relation between the terms even though we can infer that they
are related. For instance, in the running example, we can
infer that authToken (line 14, Figure 2) does not change
during the sessions of the same user, and hence it is related
to the user’s identity, but the exact semantic relation is unknown. In this scenario, AUTH S CAN generates an association assoc(i, authtoken) to indicate that the two terms are
related as a key-value pair, but without the exact relation
known.
The third extension we introduce in TML is an internal action called NewAssoc(S, assoc(m1 , . . . , mn )). This
action means that the association assoc(m1 , . . . , mn ) is
known or becomes shared among the principals listed in the
set S. To see why the sharing among S is needed, consider
the following scenario. Principals P and Q possess a mutual shared secret k, that is known prior to the execution.
P sends Q a message m in the client browser, both participants send m back to their backend servers, and their
servers later respond with entity {m}k in subsequent HTTP
messages observed in the browser. AUTH S CAN observes
that P and Q compute the same term from m in the code
hidden on their servers, but it cannot infer the exact relation between {m}k and m because it does not know that
k is a pre-exchanged shared secret. Under such situations,
AUTH S CAN introduces a NewAssoc action in the inferred
protocol schema to specify that this association is known to
both P and Q. The step SC2 in Figure 3 shows how this
relation is captured at TML.
We define the semantics for these extensions, which
extends the original semantic model of the WL model
in the following way. We introduce an association table for each principal to record the principal’s knowledge of associations. When a principal executes NewAssoc(S, assoc(m1 , . . . , mn )), the assoc(m1 , . . . , mn ) is
added into the association table of each principal in S. Note
that the attacker (i.e., Z) is not allowed to update the association table. When a principal receives an association, it
checks implicitly if the association is stored in its table.
Assumptions in TML. We make the following assumptions
in TML.
• Correct Cryptographic Algorithms. TML assumes
that the cryptographic algorithms used in the protocol
are ideal. We do not aim to detect vulnerabilities in the
implementations of the cryptographic primitives.
• Distinct Secret Keys and Nonces. TML assumes the
encryption/decryption keys are kept secret prior to the
protocol, and are distinct (i.e., cannot be guessed).
• Knowledge of Principals. We make the assumption
on the knowledge of the principals: Each principal
knows the identifiers or names of other principals (represented as (I1) in Figure 3). This assumes that the
DNS infrastructure has no vulnerability.
4
Protocol Extraction Techniques
In this section, we give the details of the proposed hybrid
inference approach to address the challenges in Section 2.2.
4.1
Overview of Protocol Extraction
Our protocol extraction technique operates on the input
test harness, one test case at a time. Figure 4 shows an
overview of the protocol extraction process. As the first
step, the abstraction initialization component in our system
creates an initial abstraction of the protocol from the first
test case in the test harness. It takes HTTP traces (captured
by our trace capturing component shown in Figure 2) and
the initial knowledge provided by the analyst as inputs. The
initial abstraction of the inferred protocol is in the form of a
TML protocol schema (Init, P roSet). By utilizing the test
cases from the test harness one-by-one, AUTH S CAN iteratively refines the abstract protocol using our hybrid infer-
Security
Analyst
Initial
Knowledge
Principals
Test
Traces
Local Trace Pool
……
TML
model
Hybrid Inference
Abstraction
Initialization
Program Analysis
Fuzzing
Differential
Analysis
Figure 4: AUTH S CAN’s protocol extraction process
Algorithm 1 Abstraction Refinement Algorithm
Require: InitK: initial knowledge, t: test trace
Ensure: P S: protocol schema
1: (Init, P roSet) ← absInit(t, InitK);
2: P
roSetold ← null;
Security
Principals
Analyst
3: trP
ool: a trace list, initially empty
4: while P roSet 6= P roSetold do
Local Trace Pool
5: Initial
P roSetold ← P roSet;
Knowledge One Test
……P roSet);
6:
P roSet
← JSAnalysis(t,
Case
7:
(P roSet, T ) ← Blackbox(t, P roSet, InitK, trP ool);
8:
trP ool.add(T );
Hybrid Inference
9: end while
Abstraction
Differential
Fuzzing
Program Analysis
10: return
(Init, P roSet);
Initialization
Analysis
Initial
ence technique
discussed inTML
this section.
During each iterRefinement
Abstraction
ation of the hybrid inference,
AUTH S CAN gradually refines
model
the semantics of terms and actions of the protocol schema
until no new semantics can be discovered.
4.2
Protocol Refinement Algorithm
The protocol refinement algorithm is shown in Algorithm 1. The inputs of the algorithm are the initial knowledge InitK (i.e., the test harness, protocol participants
& public keys of participants and oracle, outlined in Section 2.3), and a trace t generated from one test case. A
trace is a sequence of messages (a0 , a1 , ..., an ), where ai
represents either an HTTP(S) request, response (which may
contain JavaScript programs), or a cross-domain communication message over postMessage. We refer to all
data exchanged in the trace as HTTP data, which includes
HTTP parameters, cookies, postMessage data, HTML
form data, JSON data, and so on. AUTH S CAN’s trace capturing step identifies the HTTP(S) request/response pairs
from the trace. The output of the algorithm is one inferred
protocol schema.
Our refinement algorithm (Algorithm 1) has two steps:
abstraction initialization (line 1) and refinement process (line 4-9). The absInit method (line 1) returns an
abstract protocol schema (Init, P roSet). Init is a set of
predicates, which stands for the initial knowledge of the
principals. Some of these are derived from the assumptions of TML (outlined in Section 3.2), e.g., I1 − I3 shown
in Figure 3. Other TML terms model the communication
channels that are used in the protocol. For example, to
model the HTTPS channels and cross-domain communication channels, we internally introduce symmetric keys (I6
in Figure 3), as we explain in Section 5.2. For every message a in test trace t, if the sender or the receiver of a is
not contained in P roSet, absInit inserts a new local protocol into the P roSet. Then, absInit adds two communication actions (Send and Receive) into the sender’s and
receiver’s protocol, respectively. In addition, absInit can
identify some constant terms in the HTTP data, such as
the domains of principals, user accounts and public keys of
web sites available as the security analyst’s inputs to AUTH S CAN. AUTH S CAN identifies them by matching the value
of HTTP data with the values in the analyst’s inputs. For
example, i, r and kIDP S are identified in this way; they
stand for the identity of SP, the identity of IDP and the public key of IDP, respectively. At the end of this step, other
HTTP data, which cannot be inferred here, are represented
as variable terms whose semantics are inferred in the refinement process explained next. The Begin* and End* events
are also inserted into the local protocols indicating the SP’s
client and server.
In the refinement step (line 5-8), AUTH S CAN refines the
initial abstraction by utilizing more test cases. This step
combines whitebox symbolic analysis (JSAnalysis at line
6) and a blackbox analysis (Blackbox at line 7).
Whitebox Program Analysis. The JSAnalysis procedure uses dynamic symbolic analysis (at line 6) to infer
the function terms and the internal actions of the principals.
Dynamic symbolic analysis (similar to previous work [35])
is used to obtain symbolic formulae which capture the relations among the HTTP data. These symbolic formulae
are over the theory of TML terms, which include arithmetic operations, concatenation function, cryptographic operations and uninterpreted functions. We introduce uninterpreted functions to model semantics unknown function
calls, such as calls to browser APIs or JavaScript functions
which have many arithmetic and bitwise operations characteristic of cryptographic operations. For the code fragment
marked B in our running example (Figure 1), if the input
value for the variable event.data is a string “u&t&s”,
the following symbolic formulae are generated by this step:
(1)
(3)
(5)
(6)
(7)
(8)
uEmail := u;
(2) authT oken := t;
idpSign := s;
(4) data := [u, t];
idpP ubKey := loadP ubKey();
verif y([u, t], s, idpP ubKey);
message := [u, t];
request := $.ajax(login, [u, t]);
To precisely identify cryptographic function terms in
the symbolic formulae, AUTH S CAN needs to identify
JavaScript functions implementing cryptographic signature,
encryption, random number generation, public key fetching functions and so on. From the above symbolic formulae example, JSAnalysis can identify that idpSign is
the TML term {[uEmail, authT oken]}k−1 , once AUTH IDP
S CAN knows that the semantics of the JavaScript procedure
verify(data, sig, key). By default, AUTH S CAN identifies these functions based on its built-in list of browser APIs
and JavaScript libraries that provide such functions [4].
AUTH S CAN tries to concretely match the semantics of all
symbolic terms identified as uninterpreted functions in the
symbolic formulae to one of known cryptographic functions in its built-in list. For example, AUTH S CAN can test
verify with the same inputs as the standard RSA signature verification function from its built-in list and compare
the outputs. Security analysts can also provide annotations
for source code functions to identify custom implementations of standard cryptographic primitives, in case the default list is not sufficient. In this way, several variables are
replaced with newly inferred TML terms in this step. For an
uninterpreted function whose semantics cannot be inferred
in this step, AUTH S CAN uses an assoc to represent it. The
assoc associates the output of the function with the inputs.
Based on the extracted symbolic formulae, JSAnalysis
infers the function terms and some internal actions in local
protocols. For example, if an HTTP data is identified as
a session key, AUTH S CAN treates the principal which first
sends it in the communication as generator of this session
key. AUTH S CAN infers that this principal has performed
a NewSecret action and the principals which receive it
have performed Accept actions. If a principal invokes an
asymmetric key pair generation function, AUTH S CAN adds
a NewKeyPair action to the principal’s protocol.
Blackbox Differential Fuzzing Analysis. The blackbox
analysis (at line 7) further refines the output of the whitebox analysis by trying to infer more TML terms and actions
while treating the participant implementations as a blackbox. Our blackbox differential fuzzing analysis takes as input the trace t, the refined abstraction after whitebox analysis, and the initial knowledge InitK. The first substep
in blackbox fuzzing is to remove certain redundant data
to make blackbox testing more efficient. Next, the blackbox inference algorithm infers TML terms in two ways: for
some terms, it generates “probe” messages and compares
the outputs, whereas for other terms, it merely makes the
inference based on the observed traces without generating
new probes. We describe the redundant data elimination,
probe-based inference and non-probe-based inference substep separately. In each iteration of the blackbox fuzzing
step, AUTH S CAN internally generates new traces and keeps
them in a local trace pool (trP ool in Algorithm 1). These
traces are not fed back to the initial test harness, and are
used only during the blackbox and whitebox steps.
Eliminating Redundant Data. The goal of this step is
to identify HTTP data that do not contribute towards the
authentication protocol. In this step, we check each HTTP
data element by generating a probe message with this element removed. If the probe message results in a successful authentication, we remove the element and all of its occurrences in previous messages. AUTH S CAN performs this
operation iteratively for each request/response pairs starting
from the last pair and proceeding backwards in t.
Probe-based Inference. The main idea of this fuzzing
step is to mutate or remove the HTTP data in the request
messages of t, while keeping others unchanged. These
modified “probe” messages are sent to the protocol participants and their responses are compared for differences.
In addition, to prevent the explosion of number of HTTP
traces, we capture at most three traces for each test user
account and at most 10 test user accounts for each web
site. AUTH S CAN identifies the semantics of several types
of HTTP data: URLs, HTTP parameters, web addresses,
JSON data, JSON Web tokens, and web cookies. To do
this identification, it uses simple pattern matching rules over
the values of the data. For instance, a string which has
sub-strings separated by “&”, with each segment as a keyvalue pair separated by a “=”, is treated as an HTTP parameter list. Similar syntactic properties are used for common web objects such as JSONs, JWT, cookies and so on.
Once the HTTP data type is inferred, AUTH S CAN makes
use of the type information to speed up the fuzzing process. For example, if AUTH S CAN infers that a string is
an HTTP parameter-value list, it mutates each key value
pair in this string separately. Similarly, if AUTH S CAN
infers that a string represents a user identity (like usernames) or a web address, it mutates the value of this HTTP
data into another user’s ID or another web address, instead of trying random modifications. AUTH S CAN also incorporates simple pattern-matching rules to identify if values are encoded using common encoding methods such
as URLEncode/URLDecode, Base64-encode, HexEncode,
HTMLEncode and JavaScript string literal encode, based
on the use of special characters. For an HTTP data with
completely unknown semantics, AUTH S CAN uses patternmatching techniques to label it as one of primitive types
(Integer, Bool, or String).
Once the basic types are identified, AUTH S CAN then infers the TML terms and actions. From the traces in the local
trace pool, AUTH S CAN attempts to first identify arithmetic
function terms, which in turn enables the modeling of weak
or guessable tokens. For Integer- or String- typed value
of an HTTP data parameter that change across sessions,
AUTH S CAN uses the following mechanism to check if it
is generated using a predictable arithmetic function. Given
such a string value (say str), AUTH S CAN first conducts
a substring matching between its instances across various
traces and extracts the parts that are not common between
these instances. AUTH S CAN then checks if these values
form simple arithmetic sequences adding or subtracting a
constant. If the function is identified, AUTH S CAN treats
it as a guessable token, and confirms it by predicating its
value and probing the server (discussed in Section 5.3). We
plan to integrate more powerful off-the-shelf tools, such as
Wolfram Alpha, which take such value sequences as inputs
and output a closed form arithmetic expression to match
it [11]. AUTH S CAN also marks any data value which is
too short (L ≤ 4 characters by default and configurable) as
guessable short-length tokens, as these values may be subject to exhaustive search. For example, in the case where
L = 4, the search space is less than 2 million ((10 + 26)4 ),
assuming that the term only consists of case-insensitive
alpha-numeric characters; AUTH S CAN presently does not
actually generate these probes but models such values as
attacker’s knowledge (as detailed in Section 5.2), and generates security warnings.
Next, AUTH S CAN infers two kinds of associations using
techniques similar to those proposed by Wang et. al. [42].
One kind of association is among HTTP data. AUTH S CAN
replaces the value of an HTTP data x in message ai , while
keeping the rest unchanged. Then it sends this “probe” message and compares the response message. If HTTP response
~y changes, AUTH S CAN introduces an assoc(x, ~y ). Other
kinds of association relations are between HTTP data and
a web principal or users. Similarly, AUTH S CAN identifies
these associations by using differential analysis on multiple traces. The HTTP data which remain constant among
the same user’s multiple sessions are inferred to be associated to the user; those remaining constant among different users’ sessions are inferred to be associated with
a web principal (such as the SP or IDP). All remaining
HTTP data that change in all such probes are inferred to
be nonces (NewNonce), such as session IDs.
Identifying Association Principals. The S in NewAssoc(S,...) stands for the principals who share the knowledge
of the association terms. AUTH S CAN identifies these principals by observing which terms in an assoc appear in the
responses from the protocol participants. Then, it probes
these participants by replacing the associated terms with
random values. If a principal rejects the fuzzing message,
we infer that it knows how to compute the relationship, and
add a NewAssoc with these participants in S.
Non-Probe Based Inference. The non-probe based inference infers three kinds of function symbols: cryptographic functions, set functions and concatenation functions. AUTH S CAN employs brute-force search to identify
cryptographic functions. It takes every combination of all
HTTP data elements and checks if they can be used as inputs to a standard cryptographic primitive to produce an-
other data element. We bound the function nesting depth
of terms to be less than 5. In our experiments, we find that
this bound is reasonable since all our analyzed protocols
do not use no more than 4 levels of nesting cryptographic
constructions. This search strategy has been sufficient in
practice for our experiments on real-world protocols. For
example, as discussed in our BrowserID case study (Section 6), AUTH S CAN successfully identities that one HTTP
data element is signed by the IDP, and that the signed elements are the ID and the user’s public key. AUTH S CAN
identifies the concatenation functions by using a substring
search over all combinations of HTTP data elements. For
the set construction functions, if a single message contains
multiple data, AUTH S CAN assigns them to a set.
5
Protocol Analysis & Attack Confirmation
After extracting a TML model, AUTH S CAN translates
it into applied pi-calculus, which is taken as input to
ProVerif [18] to check security properties against attack
models. Due to space constraints, we leave the details of
this process to Appendix C; and in this section, we discuss
the security properties, attacker models and how candidate
attacks are checked to confirm security flaws.
5.1
Security Properties
By default, AUTH S CAN checks the correctness of
two essential security properties in its applied pi-calculus
version, authentication of an authentication protocol [44]
and secrecy of credential tokens. A protocol achieves
authentication if each principal is sure about the identity
of the principal whom it is communicating with. Authentication is checked using injective correspondence ( ,
or injective agreement) [19, 20, 32, 44], which can check
whether two local protocols are executing in “lock-step”
fashion, i.e., whether there is an injective mapping between
the execution of two participant’s protocols. For instance,
in our running example, whenever finishing executing
EndRespond(i), SP S believes that SP C has executed the
protocol with him; thus, to guarantee authentication, SP C
must have executed BeginInit(j), i.e., EndRespond(i) BeginInit(j) (inj-event(EndRespond(i))==>injevent(BeginInit(j)) in applied pi-calculus). Authentication is violated if SP S believes SP C has executed
the protocol with him, but actually it is Z who has.
Additionally, an authentication protocol may introduce
some credentials and thus secrecy of them needs to be guaranteed. Secrecy is defined as querying a term from the attacker Z’s knowledge set [44]. The secrecy of a term a is
specified as Z has a (query attacker(a) in applied
pi-calculus), which queries whether a is derivable by Z after the execution of the authentication protocols. If Z has a
after the protocol, the protocol fails to guarantee the secrecy
of a. By default, AUTH S CAN checks the secrecy of terms
used for authentication (such as the sessionID in the running example); the attack analyst can add more queries to
check the secrecy of other terms, for example, credentials
for resource access (such as OAuth token in OAuth 2.0). For
long-lived tokens, AUTH S CAN adds them to Z’s knowledge
set before querying ProVerif. In general, Z may know a
long-lived token’s value (through external knowledge) even
if it is not sent on a public channel; AUTH S CAN conservatively models this scenario and raises a security warning to
alert the analyst. For guessable tokens, AUTH S CAN adds
the outputs of the arithmetic operations to Z’s knowledge
set. In the attack confirmation step, these guessable values
are computed and used as we detail in Section 5.3.
5.2
Attacker Models
In this work, we consider two different attacker models,
namely the network attacker [24] and the web attacker [15].
Previous work (e.g., [17]) has shown that these attackers
can be captured in ProVerif. Hence, we ignore the detailed
modeling and just give an overview in this section. For example, attacker model in the running example is demonstrated in Appendix C. Note that both the attacker models
are checked individually in AUTH S CAN, since ProVerif terminates after finding a counterexample.
Network Attacker. We model the network attacker using the Dolev-Yao model [24], that is, an active network
attacker is able to eavesdrop all messages and control the
contents of unencrypted messages in the public network under the constraints of cryptographic primitives. In TML, we
model HTTPS by assuming that the SSL certificate checking and handshake are complete before the protocol starts;
we model the session key between the two communicating
principals x and y with a key function key(x, y) (I2 in
Figure 3). In applied pi-calculus, we model HTTPS using
private channels, which are neither readable nor writable by
the attacker (shown in Appendix C). Note that modeling the
HTTP network attacker is available from ProVerif directly.
Web Attacker. We also reuse web attacker models described in prior work [15, 17]. These models include modeling the same-origin restrictions; for example, the fact that
client-side SP code cannot intercept IDP server’s messages
is implied in the applied pi-calculus semantics that the local variables of a process are inaccessible by another process. We model HTTP headers like Referrer which correspond to the client-side code sending its identity in the
messages; of course, if the header is not checked by the
server, it will not be inferred in our specification as it is removed as a redundant element. We also model the semantics of postMessage by encrypting all messages transmitted through postMessage with a key (kB in IC4 and
SC4, Figure 3). If AUTH S CAN finds (by whitebox analysis)
that the receiver or sender origin fields are not checked,
it casts kB to the attacker such that the attacker is able
to read and write the postMessage channel. The antiCSRF tokens are not needed to be explicitly modeled in the
attacker model as they are observed in the HTTP network
messages and are inferred to be nonces if they are relevant
to the protocol (I4 and I5 in Figure 3). We assume that the
attacker has the ability to redirect the user agent to a malicious web site. We do not model web attackers with the
ability to perform Cross-Site Scripting (XSS) attacks and
complex social-engineering attacks in this work.
5.3
Candidate Attack Confirmation
AUTH S CAN confirms candidate attacks generated by
ProVerif in this step. If a protocol fails to satisfy the security properties, ProVerif generates a counterexample, which
consists of the attacker’s actions, the attacker’s input/output
and details the terms computed by Z at each step using it’s
knowledge set at that step. AUTH S CAN re-constructs the
candidate attack probe from this information. For all terms
computed at each step, AUTH S CAN substitutes the concrete
values for these terms. For guessable tokens that are computed from arithmetic functions, AUTH S CAN evaluates the
function to calculate the next concrete value. For shortsize guessable tokens, AUTH S CAN only raises a security
warning. To map symbols and variables in ProVerif counterexamples to concrete values observed in the HTTP traces,
AUTH S CAN maintains the mapping between the original
HTTP messages and the protocol statement generated during the protocol extraction. Thus, AUTH S CAN maps back
a ProVerif action sequence and terms in the ProVerif counterexample to the ProVerif input, which inturn is mapped
to the raw HTTP message. Once the messages are constructed, AUTH S CAN replays the candidate attack probe.
During this process, it queries the oracle provided by the
analyst to check whether the attack is successful.
Currently, AUTH S CAN automates confirmation of attacks over HTTP, over postmessage and via a web
attacker-controlled iframe. In cases which AUTH S CAN
cannot confirm with concrete attack instances, it reports security warnings containing the communicated data it suspects. Such cases include the use of long-lived token in authentication, secrecy of which is not known in the inferred
protocol but conservatively modeled as discussed in Section 5.2, and the use of guessable short-length tokens.
6
Evaluation
We have built an implementation of AUTH S CAN in approximately 5K lines of C# code, and 3K lines of JavaScript
code. The HTTP trace recording and blackbox fuzzing
functionalities are implemented in a Firefox add-on. The
JavaScript trace extraction is implemented by instrumenting the web browser to generate execution traces in a format
similar to JASIL [36]. We developed our own implementation of dynamic symbolic analysis for extracting the TML
terms from the execution traces.
6.1
Evaluation Subjects
To estimate the effectiveness of AUTH S CAN on realworld protocols, we test several implementations of popular SSO protocols and standalone web sites that implement
their custom authentication logic. The inferred protocols
are presented in Appendix B.2. Our results are summarized
in Table 2.
BrowerID. BrowserID [2] is an SSO service proposed by
Mozilla, which is used by several Mozilla-based services
such as BugZilla and MDN, as well as some other service
providers. We test three different SP implementations of
BrowserID. Although BrowserID is open-source, most of
protocols do not provide the detailed implementation on the
server-side. To account for this, we only take into consideration the client-side JavaScript code and HTTP messages
to make our analysis approach more general. AUTH S CAN
manages to infer the general protocol specification from
these three implementations, finding only one crucial difference across the implementations (explained in Section 6.2).
Facebook Connect. Facebook Connect [3] is one of the
most widely used incarnations of the OAuth 2.0 published
by Facebook. We test two SP web sites using this protocol.
The experiments are conducted on the basis of client-side
JavaScript code and HTTP messages. AUTH S CAN infers
the general protocol specification successfully.
Windows Live ID. Windows Live Messenger Connect [6]
is another SSO protocol derived from the general OAuth
2.0 specification. We test its implementation using the Sina
Weibo service—a China-based web site similar to Twitter
and has over 300 million users. AUTH S CAN successfully
extracts the protocol from this implementation; we skip the
protocol diagram (which is similar to Facebook Connect)
for the sake of space.
Standalone Web Sites. We also test two standalone sites,
where users share deeply personal information, both of
which have from hundreds of thousands to millions of users
and utilize custom authorization mechanisms. AUTH S CAN
uncovers the custom authentication protocol for both sites.
6.2
Protocol Analysis and Vulnerabilities
We test AUTH S CAN on 8 implementations (as shown in
Table 2). We successfully find 7 security vulnerabilities, all
of which we have responsibly disclosed to the developers
of the web sites. For the sake of space, we leave the details
on how AUTH S CAN extracts protocol specification to Appendix B.1; and in this section, we briefly present the found
vulnerabilities in the protocol implementations.
Setup. In our experiment, the input and configuration to
AUTH S CAN include:
• Test harness. The security analyst is required to input
two pre-registered user accounts (for example, email
and password in BrowserID), except for the IyerMatrimony case in which five are needed.
Table 2: Statistics in our experiments
Column 2: ratio of messages filtered out by AUTH S CAN w.r.t. the total number of messages occurred in the protocol; Column 3: ratio of parameters filtered
out by AUTH S CAN w.r.t. the total number of parameters used in the messages; Column 4: total execution time of AUTH S CAN; Column 5: verification time
of running ProVerif without and with filtering of the messages or HTTP data, under the network attacker, where “-” means nontermination in verification;
Column 6: number of rounds; Column 7: number of bugs found in each web site (with repeats); there are 7 distinct (without over-counting) vulnerabilities.
Web Sites
myfavoritebeer.com
openphoto.me
developer.mozilla.org
ebayclassifieds.com
familybuilder.com
weibo.com
iyermatrimony.com
meetingmillionaires.com
a
% Redundant
Msgs (Total Msgs)
88% (80)
82% (93)
87% (127)
72% (58)
97% (290)
97% (176)
98% (120)
96% (54)
% Redundant
Elems (Total Elems)
50% (12)
75% (24)
74% (23)
57% (152)
51% (144)
98% (52)
67% (9)
0% (5)
Time(s)
113
72
96
127a
110a
30
5.33
4.72
Verification Time (s)
WO (W Filter) Filter
204/3.0
726/3.0
-/3.0
-/58.7
-/58.7
0.36/0.03
1.14/0.04
1.05/0.04
Fuzzing
Rounds
20
22
28
107
77
78
510
30
#Bugs
2
2
0
2
1
1
1
1
The period that AUTH S CAN halts until Facebook allows to resume fuzzing is not taken into account.
• Protocol principals & public keys. For the SSO implementation (including BrowserID, Facebook Connect and Windows Live ID), the analyst needs
to indicate domains of IDP and SP (for example, in BrowserID case,
persona.org and
myfavoritebeer.org, respectively). For the
standalone web sites, the analyst needs to indicate the
domains of the tested sites. In both cases, the public
keys of the participants need to be provided if HTTPS
is used in the implementation.
• Oracle. The analyst needs to provide an indication to
represent the successful authentication. In our experiments, we provide unique strings on the response webpage from the server such as “welcome user” to identify if the authentication succeeds.
• Cryptographic functions.
We manually annotate
the cryptographic functions in the Crypto library of
Node.js [4], for AUTH S CAN to identify the cryptographic functions. We also annotate the functions in
Mozilla jwcrypto [9], which is used in the implementation of BrowserID. AUTH S CAN automatically infers
cryptographic operations using its default method in
all other case studies.
For all cases, AUTH S CAN checks the authentication of
the protocol and secrecy of the terms used for authentication (such as the assertion in BrowserID, which is discussed
later in this section). These properties are checked against
the network attacker as well as the web attacker.
Replay Attack in BrowserID. In two tested implementations of BrowserID, which use persona.org as IDP,
AUTH S CAN identifies and generates a confirmed replay attack in the network attacker model. AUTH S CAN generates
an attack HTTP trace in which a malicious user logs into the
SP by replaying the token named assertion (message (7) in
Figure 6), without providing login credentials to the IDP.
The flaw leading to this attack is that the assertion is sent
through an insecure channel (HTTP) and it does not contain
any session-specific nonce. We recorded a video to demonstrate that the attack works and proposed to add a nonce in
the signature to solve this problem [1]. We have notified
Mozilla about our finding and Mozilla acknowledged the
security flaw.
CSRF Attack in BrowserID. AUTH S CAN identifies
and confirms a replay attack in the web attacker
model. AUTH S CAN reports this attack on two of the
BrowserID implementations, other than the one from
developer.mozilla.org. We have responsibly notified the vendors of these vulnerable implementations.
After manual analysis of the inferred protocols, we find
one crucial difference between the vulnerable implementations from the developer.mozilla.org implementation. In the latter, SP client sends two anti-CSRF tokens
(csrfmiddlewaretoken and next which are inferred
as nonces) in step 7 (Figure 6), but these are absent from
the protocol schema of the vulnerable SPs implementation,
permitting a CSRF attack. AUTH S CAN reports that a malicious web site can send an HTTP POST request to the
vulnerable SPs, which do not check the Referrer fields. Using this knowledge, we craft a script which can be used by
the attacker to modify the content on the web pages without
Alice’s approval. The attack script is listed in Appendix D.
Secret Token Leak in Facebook Connect. By following a
similar procedure as illustrated in the case of BrowserID,
AUTH S CAN finds one confirmed flaw in the implementation of Facebook Connect, and another one in the usage of Facebook Connect by one out of the two SPs we
tested. Both attacks leak secret tokens in the network attacker model. In this case, we report that automatic fuzzing
was initially difficult because Facebook blocks login failure
for a test username/password after 10 attempts. For this,
we manually skipped fuzzing the initial login request to the
IDP, but tested the remaining protocol with the SPs.
In the implementation of Facebook Connect, most of the
communications are through HTTPS to prevent network at-
tackers from stealing the authorization tokens. However,
AUTH S CAN reports that the message at step 4 of Figure 6(b) is readable to the network attackers because they are
transmitted through a non-HTTPS channel, so two credentials c_user and xs can be obtained by the attacker. Thus,
the protocol is subject to a replay attack similar to the one in
BrowserID. After our experiments, we discover that a similar attack against the previous version of Facebook Connect
has been reported by Miculan et al. recently [33]. We conducted our tests in the end of April 2012; Facebook fixed
this flaw in early May 2012 before we were able to notify
them. In Facebook’s latest implementation6 , the communication in this step is protected with HTTPS. We provide
the HTTP/HTTPS messages captured during the execution
of the old version to facilitate further analysis, which can
be downloaded from [1]. AUTH S CAN finds the other flaw
leading to replay attack when an SP called EbayClassifieds
uses the Facebook Connect. After completing the Facebook
Connect, the SP sends the user credentials which can be
used to fetch session cookies. However, the credential is
also sent through a non-HTTPS channel.
Non-secret Token in Using Windows Live ID. We tested
AUTH S CAN on the authentication mechanism of Sina
Weibo, a web site with 300 million users. It uses Windows Live ID to authenticate users. AUTH S CAN initially
reported a security warning claiming that a long-lived token (non-nonce value) is used to authenticate the user.
We subsequently manually investigated this warning, and
found that the long-lived token (named msn cid) reported
by AUTH S CAN is known publicly. For example, it can
be obtained from various sources such as straight from
the MSN user profile page (https://profile.live.
com/cid-xxxx). When we added this token to the attacker’s knowledge set and re-ran the experiment, AUTH S CAN was able to automatically generate an attack trace.
This flow occurs after a user completes the authentication with Windows Live ID, which demonstrates that
AUTH S CAN is useful for finding simple, but severe logic
flaws beyond the initial SSO authentication token exchange.
Note that manually finding these attacks is not easy; AUTH S CAN eliminated 18 redundant cookies with differential
fuzzing. The final HTTP packet which is sent from user to
Weibo web site for authentication, as constructed by AUTH S CAN, sets the msn cid value to the publicly known value
as shown below.
http://www.iyermatrimony.com/login/
intermediatelogin.php?sde=U1ZsU01UZ3dOVE01
&sds=QdR.j/ZJEX./A&sdss=Tf/GpQpvtzuEs
Through differential fuzzing, AUTH S CAN finds that sds
and sdss keep constant among different accounts’ multiple login sessions; for an individual account, the sde remains the same in its multiple sessions. Among the test
accounts, AUTH S CAN finds that the 14-character prefix of
sde remains constant and only the 2-character postfix is incremented by one across accounts whose IDs are consecutive numbers. AUTH S CAN confirms this flaw by predicting
the value of sde for our testing accounts and successfully
logging into the account.
In the MeetingMillionaries case study, AUTH S CAN generates a security warning about a short-length token used
for authentication. We manually confirmed that this warning is a security flaw and notified the developers. In this site,
a user can access his account information (including password stored in plain text) by visiting the following URL.
http://app.icontact.com/icp/mmail-mprofile.pl?
r=36958596&l=2601&s=21DS&m=318326&c=752641
AUTH S CAN finds l, m and c are constant among different
users’ sessions and r is associated with the user account.
s is the only credential but due to its short length (4 characters), AUTH S CAN raises a warning of guessable token.
Upon our manual investigation, we find that s is an alphanumeric string. We believe that automating attack generation for such tokens may be possible in the future; we tested
that AUTH S CAN can send about 500 requests to the server
within one minute. With such capability, it would take an
enhanced implementation of AUTH S CAN at most 56 hours
to guess the right s.
6.3
GET /msn/bind.php HTTP/1.1
Host: www.weibo.com
Connection: keep-alive
Cookie: msn_cid=xxxx
This vulnerability impacts all Weibo users who have ever
logged in Weibo through Windows Live Messenger. We
have reported this security flaw to Sina Weibo. The security department of Sina R&D has confirmed the exploit and
posted us a gift for our contribution [1].
6 https://s-static.ak.facebook.com/connect/xd
Guessable Token in Standalone Sites. AUTH S CAN detects one severe vulnerability in each of the two standalone web sites: IyerMatrimony and MeetingMillionaries. Both of them have a significant number of registered
users, 220,000 and 1,275,000, respectively. The vulnerability shows that both of these two web sites authenticate users
by some guessable token. Exploiting these vulnerabilities,
the attacker can log into others’ accounts and get full privilege of the victim users.
In the case of IyerMatrimony, after eliminating 7 redundant HTTP parameters with differential fuzzing, AUTH S CAN gets the following packet which can be used for a
successful authentication.
arbiter.php?version=9
Efficiency & Running Time
Running Time. The total analysis time for most cases is
less than 2 minutes, and can be as low as 5 seconds. The
verification time for ProVerif is within 1 minute in our case
studies. It shows that the security-relevant parts of the protocols generated are usually small. We find that additional
source code results in the reduced number of iterations in
our blackbox fuzzing step. For example, in BrowserID,
the client-side code is available, therefore, the number of
fuzzing iterations is smaller (20-30 rounds) than other SSO
protocols (30-500 rounds as shown in the sixth column,
Table 2). Our data shows that AUTH S CAN’s protocol extraction step is sufficient to find flaws even when much of
the protocol implementation is unavailable as shown in the
Facebook case.
Redundant Data Reduction. When querying off-the-shelf
verification tools like ProVerif, it is important to remove redundant terms for better scalability. As shown in Table 2,
AUTH S CAN finds that the majority of the messages (more
than 80%) and HTTP parameters (more than 50%) are irrelevant to the protocol and AUTH S CAN can successfully filter
them out. This shows that an automatic tool is helpful in
constructing the models from the complicated implementation details. Furthermore, this reduction helps greatly in reducing the verification time. For BrowserID, ProVerif does
not terminate within one hour if we naively retain all terms
exchanged in the communication. In summary, we find the
AUTH S CAN has promising scalability for real-world security protocol implementations.
7
Related Work
Protocol Specification & Verification. Security protocol
verification has been well studied in the literature. Many
logics and calculi have been proposed to formally specify the security protocols and security properties, such as
BAN logic [13, 21], WL model [44], Spi-calculus [12]. A
number of automatic verification tools have been developed
and used to check the correctness of the security protocols, such as Athena [37], ProVerif [18], Murphi [34] and
AVISPA [10]. These works focus on verifying the highlevel specifications of the security protocols. However, our
approach focuses on how to extract the high-level protocol
specification from the implementations.
Protocol Extraction. Works on automatically extracting
models from the protocol implementations are most related
to this work. Lie et al. [30] have proposed a method to
automatically extract specifications from the protocol code.
The model is extracted using program slicing and verified
by Murphi tool. Aizatulin et al. [14] have proposed model
extraction using symbolic execution. These works extract
the protocol specifications from the source code, while our
approach does not assume to have the source code and provides blackbox fuzzing to infer the semantics when the
source code is not available.
Security Analysis on SSO Protocols. Extensive research has been conducted to manually analyze security
of SSO protocols. By reverse enginerrring the client
implementations, Hanna et al. [27] have revealed that
some SSO protocols, including Facebook Connect and
Google Friend Connect, use the cross-domain communication channel–postMessage insecurely, E.Tsyrklevich
and V.Tsyrklevich [40] have demonstrated several attacks
such as CSRF against the OpenID protocol. Wang et al.’s
work [42] have conducted a field study on the commercially
deployed web SSO systems and discovered 8 serious logic
flaws in many notable IDPs and SPs. Xing et al. [45] have
attempt to protect integrators for their integration of thirdparty SSO Web services.
Some formal analysis approaches also have been used
to analyze the security of SSO protocols. Miculan and Urban [33] manually extract specification of Facebook Connect Protocol from the HTTP messages exchaged. They
model the protocol in HLSPL and check it using AVISPA.
Bansal et al. [17] use applied pi-calculus and ProVerif to
analyze the OAuth 2.0 protocol. Their work focuses on constructing concrete attacks from the attack trace reported by
ProVerif, and building the operational web attacker model
library called WebSpi to map the attack trace to web-site
actions. Sun et al. [39] also model the web attacker precisely. Sun et al.manually extract OpenID 2.0 implementation in HLPSL and verify the model using AVISPA and
found CSRF attacks. There are also other formal analysis approaches on SSO protocol. Most of them model the
protocol manually based on the protocol documentation or
specification, and take into consideration only the network
attack model. For example, there have been several formal
analysis approaches on SAML SSO protocols [16, 26, 28].
In contrast to these work, AUTH S CAN looks at the security
flaws in the implementations.
8
Conclusion
We present AUTH S CAN, an end-to-end platform to automatically recover authentication protocol specifications
from their implementations. AUTH S CAN has successfully
detected 7 security vulnerabilities in real-world applications
automatically. Our techniques assume no knowledge of the
protocol specifications being checked and rely on a small set
of practical assumptions. We hope further research can lead
to tools that recover and check complicated security protocols at the lowest level of their implementation details.
Acknowledgments
We thank our shepherd Venkat Venkatakrishnan and the
anonymous reviewers for their insightful comments to improve this manuscript. We also thank Matthew Finifter, Joel
Weinberger, Jun Pang, Yacin Nadji, Joseph Hong, Bodhisatta Roy and Mayank Dhiman for their helpful feedback and comments. This research is partially supported
by research grant R-252-000-495-133 from Ministry of Education, Singapore, research project “Automatic Checking
and Verification of Security Protocol Implementations” and
“Research and Development in the Formal Verification of
System Design and Implementation”.
References
[1] AUTHSCAN. https://sites.google.com/site/ndss2013/.
[2] BrowserID.
https://wiki.mozilla.org/
Identity/BrowserID.
[3] Facebook
Connect
Authentication.
http://developers.facebook.com/docs/authentication/.
[4] Node.js
v0.8.14
Manual
&
Documentation.
http://nodejs.org/api/crypto.html.
[5] What is OpenID. http://openid.net/get-an-openid/what-isopenid/.
[6] Windows Live Messenger Connect, Version 4.1.
http://msdn.microsoft.com/en-us/library/ff749458.aspx.
[7] Facebook Connect Used By 250 Million People Per
Month. http://allfacebook.com/facebook-connect-used-by250-million-people-per-month b25501, Dec. 8, 2010.
[8] Security Vulnerability Allegedly Discovered in Dropbox Client.
http://news.softpedia.com/news/DesignSecurity-Flaw-Allegedly-Discovered-in-Dropbox-Client194427.shtml, Apr. 11, 2011.
[9] Mozilla jwcrypto. https://github.com/mozilla/
jwcrypto, May 13, 2012.
[10] The AVISPA project homepage.
http://www.
avispa-project.org/, May 13, 2012.
[11] Wolfram alpha. http://www.wolframalpha.com/,
May 13, 2012.
[12] M. Abadi and A. D. Gordon. A Calculus for Cryptographic
Protocols: The spi Calculus. Information and Computation,
148(1):1–70, 1999.
[13] M. Abadi and M. R. Tuttle. A Semantics for A Logic of
Authentication (Extended Abstract). In PODC, pages 201–
216, 1991.
[14] M. Aizatulin, A. D. Gordon, and J. Jürjens. Extracting and
Verifying Cryptographic Models from C Protocol Code by
Symbolic Execution. In CCS, pages 331–340, 2011.
[15] D. Akhawe, A. Barth, P. E. Lam, J. Mitchell, and D. Song.
Towards a Formal Foundation of Web Security. In CSF,
pages 290–304, 2010.
[16] A. Armando, R. Carbone, L. Compagna, J. Cuellar, and
L. Tobarra. Formal Analysis of SAML 2.0 Web Browser
Single Sign-On: Breaking the SAML-based Single Sign-On
for Google Apps. In FMSE, pages 1–10, 2008.
[17] C. Bansal, K. Bhargavan, and S. Maffeis. Discovering Concrete Attacks on Website Authorization by Formal Analysis.
In CSF, pages 247–262, 2012.
[18] B. Blanchet. An Efficient Cryptographic Protocol Verifier
Based on Prolog Rules. In CSFW, pages 82–96, 2001.
[19] B. Blanchet. Computationally Sound Mechanized Proofs of
Correspondence Assertions. In CSF, pages 97–111, 2007.
[20] B. Blanchet and A. Chaudhuri. Automated Formal Analysis
of a Protocol for Secure File Sharing on Untrusted Storage.
In S&P, pages 417–431, 2008.
[21] M. Burrows, M. Abadi, and R. Needham. A Logic of
Authentication. ACM Transactions On Computer Systems,
8:18–36, 1990.
[22] C. J. Cremers. The Scyther Tool: Verification, Falsification,
and Analysis of Security Protocols. In CAV, pages 414–418,
2008.
[23] G. Delzanno and P. Ganty. Automatic Verification of Time
Sensitive Cryptographic Protocols. In TACAS, pages 342–
356, 2004.
[24] D. Dolev and A. Yao. On the Security of Public Key Protocols. IEEE Transactions on Information Theory, 29:198–
208, 1983.
[25] D. E.Hammer-Lahav and D.Hardt. The OAuth2.0 Authorization Protocol. 2011. IETF Internet Draft.
[26] T. Gross. Security Analysis of the SAML Single Sign-On
Browser/Artifact Profile. In ACSAC, pages 298 – 307, 2003.
[27] S. Hanna, E. C. R. Shinz, D. Akhawe, A. Boehmz, P. Saxena,
and D. Song. The Emperor’s New API: On the (In)Secure
Usage of New Client Side Primitives. In W2SP, 2010.
[28] S. M. Hansen, J. Skriver, and H. R. Nielson. Using Static
Analysis to Validate the SAML Single Sign-On Protocol. In
WITS, pages 27–40, 2005.
[29] S. Juraj, M. Andreas, S. Jörg, K. Marco, and J. Meiko. On
Breaking SAML: Be Whoever You Want to Be. In USENIX
Security, 2012.
[30] D. Lie, A. Chou, D. Engler, and D. L. Dill. A Simple Method
for Extracting Models for Protocol Code. In ISCA, pages
192–203, 2001.
[31] G. Lowe. Breaking and Fixing the Needham-Schroeder
Public-Key Protocol Using FDR. In TACAS, pages 147–166,
1996.
[32] G. Lowe. A Hierarchy of Authentication Specifications. In
CSFW, pages 31–43, 1997.
[33] M. Miculan and C. Urban. Formal Analysis of Facebook
Connect Single Sign-On Authentication Protocol. In SOFSEM, pages 99–116, 2011.
[34] J. C. Mitchell, M. Mitchell, and U. Stern. Automated Analysis of Cryptographic Protocols Using Murphi. pages 141–
151. IEEE Computer Society Press, 1997.
[35] P. Saxena, D. Akhawe, S. Hanna, F. Mao, S. McCamant, and
D. Song. A Symbolic Execution Framework for JavaScript.
In S&P, pages 513–528, 2010.
[36] P. Saxena, S. Hanna, P. Poosankam, and D. Song. FLAX:
Systematic Discovery of Client-side Validation Vulnerabilities in Rich Web Applications. In NDSS, 2010.
[37] D. X. Song. Athena: A New Efficient Automatic Checker
for Security Protocol Analysis. In CSFW, pages 192–202,
1999.
[38] J. Sun, Y. Liu, J. S. Dong, and J. Pang. PAT: Towards Flexible Verification under Fairness. In CAV, pages 709–714,
2009.
[39] S.-T. Sun, K. Hawkey, and K. Beznosov. Systematically
Breaking and Fixing OpenID Security: Formal Analysis,
Semi-Automated Empirical Evaluation, and Practical Countermeasures. Computers & Security, 31:465–483, 2012.
[40] E. Tsyrklevich and V. Tsyrklevich. Single Sign-On for the
Internet: A Security Story. In BlackHat, July 2007.
[41] D. Wagner and B. Schneier. Analysis of the SSL 3.0 protocol. In WOEC, volume 2, pages 29–40, 1996.
[42] R. Wang, S. Chen, and X. Wang. Signing Me onto Your
Accounts through Facebook and Google: a Traffic-Guided
Security Study of Commercially Deployed Single-Sign-On
Web Services. In S&P, pages 365–379, 2012.
[43] T. Wang, T. Wei, G. Gu, and W. Zou. TaintScope:
A Checksum-Aware Directed Fuzzing Tool for Automatic
Software Vulnerability Detection. In S&P, May 2010.
[44] T. Y. C. Woo and S. S. Lam. A Semantic Model for Authentication Protocols. In S&P, pages 178–194, 1993.
[45] L. Xing, Y. Chen, X. Wang, and S. Chen. InteGuard: Toward Automatic Protection of Third-Party Web Service Integrations. In NDSS, 2013.
A
Termination of Algorithm 1
We informally argue why the Algorithm 1 terminates.
First, since AUTH S CAN uses only one trace t as the basis to
generate the P roSet which has a fixed number of local protocols and free variables. The newly generated traces in the
fuzzing step do not generate new local protocols and variables, but infer more TML terms over these variables and
add new actions. Second, for each HTTP data, AUTH S CAN
generates two probes: one in which the data is removed and
the other in which the data is mutated. Thus, for a message
containing N HTTP data elements, only 2N probes are generated. Third, after each iteration (step 4-9), the number of
variables inferred is monotonically non-increasing; we can
only remove certain variables as redundant data. Finally, by
bounding the nesting function depth and number of traces
in trP ool, all searches and fuzzing operates over finite state
and must terminate.
B
B.1
Protocol Extraction
Extracting BrowserID Protocol
In this section, we detail the process on analyzing
myfavoritebeer.org to demonstrate how AUTH S CAN extracts model from the implementation. As shown
in Figure 5, the traces captured by AUTH S CAN are listed
in the first two columns, and the corresponding TML statements inferred are placed in the third column.
From message (2), AUTH S CAN infers the HTTP parameter csrf as a nonce. AUTH S CAN also associates
user name (USER) and password (PWD) to represent that
they should be matching. From message (4), through
white box analysis, AUTH S CAN infers that spkUser
and spkUser−1 are an asymmetric key pair generated
by function generateKeypair(). In message (5),
AUTH S CAN figures out that the HTTP parameter cert
is encoded as a JSON Web Token (JWT) with each
segment separated with “.” and encoded with Base64
encoding (as described in Section 4.2). When applying the signature verification algorithm RSA over one
of the segment (the brute-force search as discussed in
Section 4.2), AUTH S CAN finds that it is a signature
by IDP S over four data elements occurring previously:
{U SER, spkU ser, p, expire}k−1 . Similarly, in mesIDP S
sage (6), AUTH S CAN identifies that function sign() is
used to generate signature {j, expire1}spkU ser−1 and this
signature is concatenated with IDP’s signature (i.e., cert)
with function bundle(). Afterwards, this concatenation
is sent by invoking function Window.postMessage().
B.2
Inferred Protocols
Figure 6 demonstrates the protocols inferred using
AUTH S CAN; the inferred models are simplified for readability.
B.3
Precision of Inferred Protocols
We investigate the precision of our inferred protocol,
which is possible for two of our case studies, to available
documentation and manually-crafted specifications. We
find that our protocols are fairly precise, subject to our qualitative analysis.
BrowserID Precision. We compare our inferred specification to the documented description of the protocol online [2]. Our inferred protocol matches closely to the description in the documentation. In some cases, it reveals
useful information that is unspecified in the documentation.
For instance, the documentation says that, the IDP returns a
signed structure containing expiration time in the Step 5 of
Figure 6-(a)), but documentation does not precisely specify
the duration of the “expiration time”. AUTH S CAN finds that
the duration is large enough to permit replay attacks that are
longer than 726 seconds. This intermediate result is useful
for further analysis, such as verification on time sensitive
protocols [23].
We find the protocol to match the documentation exactly
(subject to our manual interpretation), except for one additional difference. The document states that the SPs are
allowed to send the signed data to BrowserID for verification in the specification rather than local verification. Since
this message is sent between SP and IDP servers rather than
been relayed in the browser, it is not represented in our inferred specification.
Facebook Connect Precision. Facebook Connect originates from OAuth 2.0 authorization protocol [25]. In EbayClassified case, our inferred protocol consists of 11 rounds
and 65 parameters (including cookies and GET/POST parameters), comparing to 7 rounds and 11 parameters in
the specification. The extra rounds and parameters, which
shows our inferred protocol is more precise, may be vulnerable to the protocol and have been analyzed by AUTH S CAN. Furthermore, compared to recent work which manually extracts the Facebook Connect protocol, our model
has defined more precisely the terms exchanged in the protocol [33]. Our inferred specification is also more detailed
than the prior work of Hanna et al. [27]. Finally, we find
that our Facebook Connect model is different from the description in Wang et al.’s recent work [42]— this is because
#
Input
TML
HTTP Messages
(2)
(4)
(5)
Initial Conditions
r has csrf ˄ p has csrf
IDP_C( r )
NewAssoc({r,p}, assoc (USER, PWD))
Send( p, {assoc(USER, PWD ), csrf })
IDP_S( p )
Receive( r, { assoc( M, N ), csrf } )
Javascript code snippet
POST
https://login.persona.org/wsapi/authenticate_user
Host: login.persona.org
"email":"alicessotester@gmail.com",
"pass":"alice",
"csrf":"UaZWfqrQmYwemitM1U8nUw=="
POST
https://login.persona.org/wsapi/cert_key
Host: login.persona.org
"email":"alicessotester@gmail.com",
"pubkey":"{\"algorithm\":\"DS\"……6233397a\"}",
"csrf":"UaZWfqrQmYwemitM1U8nUw=="
GET
https://login.persona.org/wsapi/cert_key
Host: login.persona.org
"cert":"eyJhbGciOiJSUzI1NiJ9.eyJwdW....SfqAt5…"
NONE
IDP_C ( r )
NewKeyPair( spkUser, spkUser -1)
Send( p, USER, spkUser, csrf )
IDP_S( p )
Receive( r, M, Y, csrf )
syncEmailKeypair:function(…){…,
d.withContext(function(){
a.generateKeypair({
algorithm:"DS",
keysize:c.KEY_LENGTH}, …)})}
IDP_C( r )
Receive( p, X )
IDP_S( p )
NewNonce( expire )
Send( r, { M, Y, p, expire }k —1 )
NONE
IDP_S
assertion.sign( {},{audience:c,expiresAt:
j},g, function(d,g){
(6)
k=a.cert.bundle([f.cert],g),…})
NONE
b.window.postMessage( JSON.stringify(
a), b.origin)
IDP_C( i )
NewNonce( expire1 )
Send( j, [X, { j, expire1 }spkUser -1 ] )
SP_C( j )
Receive( i, R)
Figure 5: The HTTP trace of BrowserID and the corresponding TML statements (The full messages are available at [1].)
IDP
SP_S
SP_C
IDP_C
IDP_S
SP_C
IDP_C
IDP_OAuth
IDP_login
IDP_rp
IDP_connect
(1) assoc(SID, Domain)
(1) {SP_domain} K_B
(2) {assoc(USER, PWD), csrf} Key(IDP_C, IDP_S)
(3) {Ack} Key(IDP_C, IDP_S)
(4) {USER, Ki, csrf} Key(IDP_C, IDP_S)
(5) {{USER, Ki, expire, IDP_domain}Ks-1} Key(IDP_C, IDP_S)
(6) {{USER, Ki, expire, IDP_domain}Ks-1, {expire1, SP_domain}Ki-1}K_B
(2) assoc(SID, Domain)
(3) {SID, assoc(SID, Domain), assoc(Email, password)}Key(IDP_C, IDP_login)
(4) assoc(SID,Domain), assoc(Email, c_user), xs)
(5) assoc(SID,Domain), assoc(Email, c_user), xs)
(6) {access_token, signed_request, Domain}Key(IDP_C, IDP_rp)
(7) {access_token, signed_request, Domain}Key(IDP_C, IDP_connect)
(7) {USER, Ki, expire, IDP_domain}Ks-1, {expire1, SP_domain}Ki-1
(8) Ack
(8) {access token, signed_request, Domain}Key(IDP_C, IDP_connect)
(9) {access token, signed_request, Domain}K_B
(a) the Sequence Diagram of BrowerID
(b) the Sequence Diagram of Facebook Connect
Figure 6: The sequence diagrams inferred from implementations of BrowserID and Facebook Connect
their work considers the Flash implementation whereas we
analyze the JavaScript-based implementation which works
in today’s web browsers by default.
C
TML to ProVerif Inputs
TML is an high-level abstract model language, which
can be directly translated into applied pi-calculus. We do
not present the formal semantics translation between these
two languages, but intuitively explain the mapping between
them. The applied pi-calculus model of the running example (Figure 1 and 3) is shown in Figure 7.
Conversion. Most syntax and semantics can be directly
mapped to applied pi-calculus. The initial conditions (initial knowledge of the participants) are represented with
a set of global variables (line 17-21), where the terms
initially unknown to Z is labeled as private, such as
k IDP s (line 18), the private key of IDP S. The cryptographic functions are translated into constructor (fun) and
destructor (reduc) (line 6-15). The local protocols are
represented with the processes (line 33-82), whose identifers are represented with i,j,r,p (line 17) of Host
type (line 1). For the action schema, the Begin* and
End* are mapped to event (line 67 and 57); the Send
and Receive are mapped to out and in; the assoc is
represented with the table (line 22), and NewAssoc is
mapped to insert a tuple into the table (line 34). However, one problem is that ProVerif does not scale as the
number of tables increases. To solve this problem, we
also can model the assoc using functions. In particular,
AUTH S CAN uses the same modeling method as modeling symmetric cryptographic primitives. For example, the
assoc(i, authtoken) in Figure 3 is modeled as mysenc
at line 13-15. Specially, if this assoc happens to be a
long-lived or guessable token which needs to be added
into Z’s knowledge set, AUTH S CAN just casts the encryption key to the attacker (addattackerknow at line 7778). The checking action is mapped to the matching action, for example, let(=M, =N) = checksign(P,
spk(k IDP s)) (line 42) checks whether P is a signature over (M, N) using the private key K IDP s. The
channel is slightly different from TML because ProVerif
supports both public and private channels. AUTH S CAN
translates HTTP into public channel (ch at line 23, 38 and
46) which is readable and writable to the attacker; HTTPS
and cross-domain communication is translated as private
channels (https at line 25 and 48, and browser at line
24 and 40).
For the syntax or semantics not supported by ProVerif,
AUTH S CAN models them in alternative ways. For example, ProVerif does not support a writable but nonreadable (for the attacker) or a readable but non-writable
channel. When AUTH S CAN finds that the sender origin
of postMessage is not checked (such as Step ­ in Figure 1), which means this channel becomes an attackerwritable channel (but remains unreadable), it turns the
browser channel writable by adding an input before out
messages to browser, as shown at line 38-40. Conversely,
if it finds that the channel is readable, it adds an out after
in message from the channel. Finally, after we fixing all the
vulnerabilities, ProVerif reports that the protocol is verified.
Detected vulnerabilities. ProVerif detects three attacks in
this model. First, it reports that the attacker can derive
the token using the key k i j com cast to his knowledge set (line 77-78). After “fixing” this flaw (Here fixing means correcting the flaw in the model instead of in
the implementation) as shown at line 74-78, it reports a replay attack where the attacker can obtain the token from
line 46, and then replay it to line 54. After “fixing” this
flaw using HTTPS to replace HTTP as shown at line 48 and
55, ProVerif reports the MITM attack shown in Section 2.1.
The attacker replaces mynext at line 38 and finally gets the
token from line 63.
1
2
3
4
type
type
type
type
Host.
key. (*symentric key*)
spkey.(*public key*)
sskey.(*pivate key*)
5
6
7
8
9
10
11
12
13
14
15
(* Shared key encryption *)
fun senc(bitstring, key):bitstring.
reduc forall x:bitstring,y:key;sdec(senc(x,
y),y)=x.
(* Signatures *)
fun spk(sskey):spkey.
fun sign(bitstring, sskey):bitstring.
reduc forall x:bitstring,y:sskey; checksign
(sign(x,y), spk(y)) = x.
(*fun*)
fun mysenc(Host, key):bitstring.
reduc forall x:Host,y:key;mysdec(mysenc(x,y
),y) = x.
16
17
18
19
20
21
22
23
24
25
free i, j, r, p:Host.
free k_IDP_s:sskey [private].
free k_i_j_com:key [private].
free sp:bitstring.
free sessionID, CSRFToken:bitstring[private
].
table sp_table(Host, bitstring).
channel ch.
free browser:channel [private].
free https:channel [private].
26
27
28
event BeginInit(Host).
event EndResponse(Host).
29
30
31
query x:Host, y:Host; inj-event(EndResponse
(x)) ==> inj-event(BeginInit(y)).
query attacker(mysenc(i, k_i_j_com)).
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
let SP_C = (*i*)
insert sp_table(j, sp);
(*******************************
3. Fix postmessage flaw
*******************************)
(*in(ch,(j:Host,sp:bitstring,mynext:
channel)); *)
new mynext:channel;
out(browser,((j,sp),mynext));(*Step 1*)
in(mynext,(M:Host,N:bitstring,P:bitstring)
); (*Step 4*)
let(=M, =N) = checksign(P, spk(k_IDP_s))
in
(*******************************
2. Fix HTTP replay attack
*******************************)
(*out(ch, (M,N))*)
in(ch, (M:bitstring, N:bitstring));
out(https, (M,N))(*step 5*).
49
50
51
52
53
54
55
let SP_S = (*j*)
(*******************************
2. Fix HTTP replay attack
*******************************)
(*in(ch,(M:Host,token:bitstring))*)
in(https,(M:Host,token:bitstring));(*step5
56
57
*)
let (=M) = mysdec(token, k_i_j_com) in
event EndResponse(i).
58
59
60
61
62
63
let IDP_C = (*r*)
in(browser,(X:bitstring,Y:channel));(*step
1*)
out(https,(X,sessionID,CSRFToken));(*step2
*)
in(https,(M:Host,N:bitstring,P:bitstring))
;(*step 3*)
out(Y, (M,N,P)). (*step 4*)
64
65
66
67
68
69
70
71
72
let IDP_S = (*p*)
in(https, (X:bitstring, =sessionID, =
CSRFToken));
(*step 2*)
event BeginInit(j);
let(M:Host, Mdomain:bitstring) = X in
get sp_table(=M, =Mdomain) in
let token = mysenc(i, k_i_j_com) in
let idpsign = sign((i, token), k_IDP_s) in
out(https, (i, token, idpsign)).(*step 3*)
73
74
75
76
77
78
79
(*******************************
1. Fix guessable token
*******************************)
let addattackerknow =
(*out(ch, k_i_j_com)*)
new padding:bitstring.
80
81
82
process
(!SP_C|!SP_S|!IDP_C|!IDP_S|!
addattackerknow)
Figure 7: Applied pi-calculus model of the running example
D
CSRF Attack Script
The following script can be used by the attacker to commit a CSRF attack, which modifies the content on the web
pages of Myfavoritebeer without the user’s approval.
<iframe name="formFrame"></iframe>
<script>
formFrame.document.body.innerHTML=
’<form name="tfm" action="http://myfavorite
beer.org/api/set" method="post" target=
"_parent"> <input type="text" name="beer"
value="Hello Kitty"/><input type="submit
"/></form>’;
formFrame.document.all.tfm.submit();
</script>