
operating systems, and varying mobile hardware, we generated
and captured handshakes in different environments using
BrowserStack [4], a cloud service that provides developers
with a variety of virtual machines for testing websites.2
We analyzed the non-ephemeral parameters advertised in
the TLS handshakes, finding that each browser family selects a
unique set of options, and that these options differ from those
used by both common libraries (e.g., OpenSSL) and popular
interception products.
3
However, while each browser, library,
and security product produces a unique Client Hello message,
the parameters selected by browsers are not statically defined.
Instead, browsers alter their behavior based on hardware support,
operating system updates, and user preferences.
Instead of generating all possible permutations, we analyzed
when browsers select different parameters and developed a set
of heuristics that determine whether a specific handshake could
have been generated by a given browser. For example, none
of the four browsers have ever supported the TLS Heartbeat
extension [53]. If a browser connection advertises its support,
we know that the session was intercepted. On the other hand,
despite the fact that all four browsers have default support for
AES-based ciphers, the lack of these ciphers does not indicate
interception, because browsers allow users to disable specific
cipher suites. This methodology has the advantage of excluding
false positives that arise from uncommon user configurations.
However, it can yield false negatives if a proxy copies TLS
parameters from the original client connection.
We describe the heuristics for each browser below:
Mozilla Firefox Firefox was the most consistent of the four
browsers, and by default, each version produces a nearly
identical Client Hello message regardless of operating system
and platform. All parameters, including TLS extensions, ciphers,
elliptic curves, and compression methods are predetermined
and hard-coded by the browser. Users can disable individual
ciphers, but they cannot add new ciphers nor reorder them. To
determine whether a Firefox session has been intercepted, we
check for the presence and order of extensions, cipher suites,
elliptic curves, EC point formats, and handshake compression
methods. Mozilla maintains its own TLS implementation,
Mozilla Network Security Services (NSS) [42]. NSS specifies
extensions in a different order than the other TLS libraries
we tested, which allows it to be easily distinguished from
other implementations. The library is unlikely to be directly
integrated into proxies because it is seldom used in server-side
applications.
Google Chrome Chrome was one of the most challenging
browsers to fingerprint because its behavior is dependent on
hardware support and operating system. For example, Chrome
prioritizes ChaCha-20-based ciphers on Android devices that
lack hardware AES acceleration [10] and Chrome on Win-
dows XP does not advertise support for ECDSA keys at all.
These optimizations result in several valid cipher and extension
2
We analyzed Chrome 34–50 and Firefox 3–46 on Windows XP, 7, 8, 8.1,
and 10 and Mac OS X Snow Leopard, Lion, Mountain Lion, Mavericks,
Yosemite, and El Capitan. We additionally captured handshakes from Apple
Safari 5–9, Internet Explorer 6–11, Microsoft Edge, and the default Android
browser on Android 4.0–5.0. In total, we collected 874 fingerprints.
3
We compare the presence and order of cipher suites, extensions, compression
methods, elliptic curves, signature algorithms, and elliptic curve point formats.
orderings for each version of Chrome, and furthermore, users
can disable individual cipher suites. We check for ciphers and
extensions that Chrome is known to not support, but do not
check for the inclusion of specific ciphers or extensions, nor
do we validate their order. When appropriate, we check the
presence and order of elliptic curves, compression methods,
and EC point formats. We note that because Chrome uses
BoringSSL, an OpenSSL fork, connections have a similar
structure to OpenSSL. However, Chrome supports considerably
fewer options, including a subset of the default extensions,
ciphers, and elliptic curves advertised by OpenSSL.
Microsoft Internet Explorer and Edge Internet Explorer is
less consistent than the other browsers for two reasons: (1)
administrators can enable new ciphers, disable default ciphers,
and arbitrarily reorder cipher suites through Windows Group
Policy and registry changes, and (2) IE uses the Microsoft
SChannel library, an OS facility which behaves differently
depending on both Windows updates and browser version.
Because of this additional flexibility, it is hard to rule out
handshakes that include outdated ciphers, so we introduce
a third categorization, unlikely, which we use to indicate
configurations that are possible but improbable in practice (e.g.,
including an export-grade cipher suite). We note that minor
OS updates alter TLS behavior, but are not indicated by the
HTTP User-Agent header. We mark behavior consistent with
any OS update as valid. SChannel connections can by uniquely
identified because SChannel is the only TLS library we tested
that includes the OCSP status request extension before the
supported groups and EC point formats extensions.
Apple Safari Apple Safari ships with its own TLS imple-
mentation, Apple Secure Transport, which does not allow user
customization. The order of ciphers and extensions is enforced
in code. While extension order does not vary, the NPN, ALPN,
and OCSP stapling extensions are frequently excluded, and the
desktop and mobile versions of Safari have different behavior.
One unique aspect of Secure Transport is that it includes the
TLS_EMPTY_RENEGOTIATION_INFO_SCSV cipher first,
whereas the other libraries we investigated include the cipher
last. Similar to Microsoft, Apple has changed TLS behavior in
minor OS updates, which are not indicated in the HTTP User-
Agent header. We allow for any of the updates when validating
handshakes, and we check for the presence and ordering of
ciphers, extensions, elliptic curves, and compression methods.
B. Fingerprinting Security Products
While our heuristics enable us to detect when interception is
occurring, they do not indicate what intercepted the connection.
To identify products used in the wild, we installed and
fingerprinted the Client Hello messages generated by well-
known corporate middleboxes (Figure 3), antivirus software
(Figure 4), and other client-side software previously found to
intercept connections (e.g., SuperFish [8]). In this section, we
describe these products.
We generate a fingerprint for each product by hashing the
non-ephemeral parameters advertised in the Client Hello mes-
sage (i.e., version, ciphers, extensions, compression methods,
elliptic curves, and signature methods). When we detect that a
handshake is inconsistent with the indicated browser, we check
for an exact match with any of the fingerprints we collected.
3