the secure socket layer protocol (ssl)

62
The Secure Socket Layer Protocol (SSL) CS391

Upload: braith

Post on 24-Feb-2016

49 views

Category:

Documents


0 download

DESCRIPTION

The Secure Socket Layer Protocol (SSL) . CS391. Overview. What is SSL / TLS?. TLS = Transport Layer Security protocol, ver 1.0 De facto standard for Internet security “The primary goal of the TLS protocol is to provide privacy and data integrity between two communicating applications” - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: The Secure Socket Layer Protocol (SSL)

The Secure Socket Layer Protocol (SSL)

CS391

Page 2: The Secure Socket Layer Protocol (SSL)

Overview

Page 3: The Secure Socket Layer Protocol (SSL)

What is SSL / TLS?

TLS = Transport Layer Security protocol, ver 1.0 De facto standard for Internet security “The primary goal of the TLS protocol is to

provide privacy and data integrity between two communicating applications”

In practice, used to protect information transmitted between browsers and Web servers

Page 4: The Secure Socket Layer Protocol (SSL)

TLS and SSL

TLS is based on the Secure Sockets Layers protocol (SSL) , ver 3.0 Same protocol design, different algorithms

Deployed in nearly every web browser

Page 5: The Secure Socket Layer Protocol (SSL)

SSL / TLS in the Real World

Page 6: The Secure Socket Layer Protocol (SSL)

History of the Protocol SSL 1.0

Designed by Netscape in the early 1990’s (before 1994) SSL 2.0

The first published SSL version (by Netscape, November 1994)

Suffers from several problems. SSL 3.0

The latest SSL version (Designed by Netscape, 1996) TLS 1.0

Internet standard based on SSL 3.0, January 1999 Not interoperable with SSL 3.0

Page 7: The Secure Socket Layer Protocol (SSL)

SSL 2.0 Vulnerabilities Short key length

In export-weakened modes, SSL 2.0 unnecessarily weakens the authentication keys to 40 bits.

Weak MAC construction Message integrity vulnerability

SSL 2.0 feeds padding bytes into the MAC in block cipher modes, but leaves the padding-length unauthenticated, may allow active attackers to delete bytes from the end of messages

Page 8: The Secure Socket Layer Protocol (SSL)

SSL2 Vulnerabilities

Ciphersuite rollback attack An active attacker may edit the list of

ciphersuite preferences in the hello messages to invisibly force both endpoints to use a weaker form of encryption

“Least common denominator" security under active attack

Page 9: The Secure Socket Layer Protocol (SSL)

Request for Comments

TLS version 1.0 is described in RFC 2246 The RFC describes the protocol in

sufficient detail for both developers and analysts.

Mixes prose and pseudocode. protocols look like when they emerge from

the committee Try to download the RFC and use it as a

reference for this lecture.

Page 10: The Secure Socket Layer Protocol (SSL)

TLS Basics

TLS consists of two protocols Handshake protocol

Use public-key cryptography to establish a shared secret key between the client and the server

Record protocol Use the secret key established in the

handshake protocol to protect communication between the client and the server

Page 11: The Secure Socket Layer Protocol (SSL)

SSL and the Protocol Stack SSL between Transmission Control Protocol

(TCP) layer and Application layer Actually 2 layers

Record Secure Application

Can run under any protocol that relies on TCP, including HTTP, LDAP, POP3, FTP

Page 12: The Secure Socket Layer Protocol (SSL)

The Four Upper Layer Protocols Handshaking Protocol

Establish (agree on) communication (session) parameters

Change CipherSpec Protocol Inform peer that sender wishes to switch to a new set

of encryption keys (generated by both peers). Alert Protocol

Messages important to SSL connections Application Encryption Protocol

Encrypt/Decrypt application data

Page 13: The Secure Socket Layer Protocol (SSL)
Page 14: The Secure Socket Layer Protocol (SSL)

The Client Hello Message Client Hello Message The client initiates a session by sending a Client

Hello message to the server. The Client Hello message contains: Version Number. The version number of the

highest version that the client supports. Client Random. A 4-byte number that

consists of the client’s date and time, plus a 28-byte cryptographically-generated pseudorandom number. This is used in the calculation of the Master Secret from which the encryption keys are derived.

Page 15: The Secure Socket Layer Protocol (SSL)

Client Hello Message (Optional) Session Identification. A byte

string used to identify an active or resumable session state.

Cipher Suite. The list of cipher suites available on the client. An example of a cipher suite is TLS_RSA_WITH_DES_CBC_SHA, where TLS is the protocol version, RSA is the algorithm that will be used for the key exchange, DES_CBC is the encryption algorithm (using a 56-bit key in CBC mode), and SHA-1 is the hash function.

Page 16: The Secure Socket Layer Protocol (SSL)

Server Response to Client Hello

Page 17: The Secure Socket Layer Protocol (SSL)

Server Hello Message Server Hello Message The server responds with a Server Hello message. The

Server Hello message includes: Version Number. The server sends the highest version number

that is supported by both sides. Server Random[32]. ServerRandom[32] is a 4-byte

representation of the server’s date and time plus a 28-byte, cryptographically-generated, pseudorandom number.

Session Identification (if any). This can be one of three choices. •New session ID., Resumed Session ID, Null (new session, but the server is not willing to resume it at a later time)

Cipher Suite. The server chooses the strongest cipher that both the client and server support. If there are no cipher suites that both parties support, the session is ended with a handshake failure alert.

Compression Algorithm. If used, specifies the compression algorithm to use.

Page 18: The Secure Socket Layer Protocol (SSL)

Server Certificate MessageThe server sends its certificate to the client. The

server certificate contains the server’s public key.

The client uses this key to authenticate the server and to encrypt the Premaster Secret. The Server Certificate message includes:

The server’s certificate list. The first certificate in the list is the server’s X.509v3 certificate that contains the server’s public key.

Other validating certificates. All other validating certificates, up to but not including the root certificate from the CA, signed by the CA.

Page 19: The Secure Socket Layer Protocol (SSL)

(Optional) Server Key Exchange Message

The server creates and sends a temporary key to the client. This key can be used by the client to encrypt the Client Key Exchange message later in the process. The step is only required when the server’s certificate does not contain a public key that is suitable for key exchange or when the cipher suite mandates the use of an ephemeral key for the key exchange operation.

Page 20: The Secure Socket Layer Protocol (SSL)

(Optional) Client Certificate Request Message

The server must always present its certificates to the client, but the client is not always required to authenticate itself.

Therefore, the client is not always required to send its certificates to the server.

If the server does not require client authentication, then this message is not sent.

Page 21: The Secure Socket Layer Protocol (SSL)

Server Hello Done Message

This message indicates that the server is finished and awaiting a response from the client. This message has no content. It signals that the Server Hello sequence is finished.

Page 22: The Secure Socket Layer Protocol (SSL)

Client Response to Server Hello

Page 23: The Secure Socket Layer Protocol (SSL)

Client Certificate Message (Required if Requested)

If the server sent a Client Certificate Request, the client sends its certificate to the server for client authentication.

The client’s certificate contains the client’s public key.

The client certificate message includes the client’s certificate list. The first certificate in the list is the client’s X.509v3 certificate that contains the client’s public key.

After that are other validating certificates, up to but not including the root certificate from the CA, signed by the CA.

Page 24: The Secure Socket Layer Protocol (SSL)

Client Key Exchange Message

The client sends a Client Key Exchange message after computing the premaster secret using the two random values that are generated during the Client Hello message and the Server Hello message.

Before it is transmitted to the server, the premaster secret is encrypted by the public key from the server’s certificate. Both parties compute the master secret locally and derive the session key from it.

If the server can decrypt this data and complete the protocol, the client is assured that the server has the correct private key. This step is crucial to prove the authenticity of the server. Only the server with the private key that matches the public key in the certificate can decrypt this data and continue the protocol negotiation.

Page 25: The Secure Socket Layer Protocol (SSL)

Client Key Exchange Message The Client Key Exchange message includes:

Client’s protocol version. The server will verify that it matches the original value sent in the Client Hello message. This measure guards against rollback attacks. Rollback attacks work by manipulating the message in order to cause the server and the client to use a less secure, earlier version of the protocol.

Pre-master secret. This is the client-generated number (48-byte for RSA), encrypted with the server’s public key, that is used with the Client Random and the Server Random to create the Master Secret.

Page 26: The Secure Socket Layer Protocol (SSL)

TLS Handshake Protocol

Two parties: client and server Negotiate version of the protocol and the

set of cryptographic algorithms to be used Interoperability between different

implementations of the protocol Authenticate client and server (optional)

Use digital certificates to learn each other’s public keys and verify each other’s identity

Use public keys to establish a shared secret

Page 27: The Secure Socket Layer Protocol (SSL)

Handshake Protocol Structure

C

ClientHelloServerHello, [Certificate],[ServerKeyExchange],[CertificateRequest],ServerHelloDone

S[Certificate],ClientKeyExchange,[CertificateVerify]

Finishedswitch to negotiated cipher

Finishedswitch to negotiated cipher

Page 28: The Secure Socket Layer Protocol (SSL)

Abbreviated Handshake

The handshake protocol may be executed in an abbreviated form to resume a previously established session No authentication, key material not exchanged Session resumed from an old state

For complete analysis, have to model both full and abbreviated handshake protocol This is a common situation: many protocols

have several branches, subprotocols for error handling, etc.

Page 29: The Secure Socket Layer Protocol (SSL)

Rational Reconstruction

Begin with simple, intuitive protocol Ignore client authentication Ignore verification messages at the end of the

handshake protocol Model only essential parts of messages (e.g.,

ignore padding) Execute the model checker and find a bug Add a piece of TLS to fix the bug and

repeat Better understand the design of the protocol

Page 30: The Secure Socket Layer Protocol (SSL)

Protocol Step by Step: ClientHello

C

ClientHello

S

Client announces (in plaintext):• Protocol version he is running• Cryptographic algorithms he

supports

Page 31: The Secure Socket Layer Protocol (SSL)

struct { ProtocolVersion client_version; Random random; SessionID session_id; CipherSuite cipher_suites; CompressionMethod

compression_methods;} ClientHello

ClientHello (RFC)Highest version of the

protocol supported by the client

Session id (if the client wants to resume an old

session)Cryptographic algorithms supported by the client

(e.g., RSA or Diffie-Hellman)

Page 32: The Secure Socket Layer Protocol (SSL)

ClientHello (Murj)ruleset i: ClientId do ruleset j: ServerId do rule "Client sends ClientHello to server

(new session)" cli[i].state = M_SLEEP & cli[i].resumeSession = false ==> var outM: Message; -- outgoing message begin outM.source := i; outM.dest := j; outM.session := 0; outM.mType := M_CLIENT_HELLO; outM.version := cli[i].version; outM.suite := cli[i].suite; outM.random := freshNonce(); multisetadd (outM, cliNet); cli[i].state := M_SERVER_HELLO; end; end;end;

Page 33: The Secure Socket Layer Protocol (SSL)

ServerHello

C

C, Versionc, suitec, Nc

ServerHello

SServer responds (in plaintext) with:• Highest protocol version both

client & server support• Strongest cryptographic suite

selected from those offered by the client

Page 34: The Secure Socket Layer Protocol (SSL)

ServerHello (Murj)ruleset i: ServerId do choose l: serNet do rule “Server receives ServerHello (new session)" ser[i].clients[0].state = M_CLIENT_HELLO & serNet[l].dest = i & serNet[l].session = 0 ==> var inM: Message; -- incoming message outM: Message; -- outgoing message begin inM := serNet[l]; -- receive message if inM.mType = M_CLIENT_HELLO then outM.source := i; outM.dest := inM.source; outM.session := freshSessionId(); outM.mType := M_SERVER_HELLO; outM.version := ser[i].version; outM.suite := ser[i].suite; outM.random := freshNonce(); multisetadd (outM, serNet); ser[i].state := M_SERVER_SEND_KEY; end; end; end;

Page 35: The Secure Socket Layer Protocol (SSL)

ServerKeyExchange

C

Versions, suites, Ns,ServerKeyExchange

SServer responds with his public-key certificate containing either his RSA, orhis Diffie-Hellman public key (depending on chosen crypto suite)

C, Versionc, suitec, Nc

Page 36: The Secure Socket Layer Protocol (SSL)

“Abstract” Cryptography

We will use abstract data types to model cryptographic operations Assumes that cryptography is perfect No details of the actual cryptographic schemes Ignores bit length of keys, random numbers, etc.

Simple notation for encryption, signatures, hashes {M}k is message M encrypted with key k sigk(M) is message M digitally signed with key k hash(M) for the result of hashing message M

with a cryptographically strong hash function

Page 37: The Secure Socket Layer Protocol (SSL)

ClientKeyExchange

C

Versions, suites, Ns,sigca(S,Ks),“ServerHelloDone”

S

C, Versionc, suitec, Nc

ClientKeyExchange

Client generates some secret key materialand sends it to the server encrypted withthe server’s public key

Page 38: The Secure Socket Layer Protocol (SSL)

struct { select (KeyExchangeAlgorithm) { case rsa: EncryptedPreMasterSecret; case diffie_hellman:

ClientDiffieHellmanPublic; } exchange_keys} ClientKeyExchange

struct { ProtocolVersion client_version; opaque random[46];} PreMasterSecret

ClientKeyExchange (RFC)Let’s model this as

{Secretc}Ks

Page 39: The Secure Socket Layer Protocol (SSL)

“Core” SSL

C

Versions, suites, Ns,sigca(S,Ks),“ServerHelloDone”

S

C, Versionc, suitec, Nc

{Secretc}Ks

switch to key derivedfrom secretc

If the protocol is correct, C and S sharesome secret key material secretc at this point

switch to key derivedfrom secretc

Page 40: The Secure Socket Layer Protocol (SSL)

Participants as Finite-State Machines

M_SLEEPClientHello

Murj rules define a finite-state machine for each protocol participant

Client state

M_SERVER_HELLO

M_SERVER_KEY

M_SEND_KEY

M_CLIENT_HELLO

Server state

M_SEND_KEY

M_CLIENT_KEY

M_DONE

ServerHello

ServerKeyExchange

ClientKeyExchange

Page 41: The Secure Socket Layer Protocol (SSL)

Intruder Model

Intruder Model

AnalysisTool

Formal Protocol

Informal Protocol

Description

Find error

Murj codeRFC Murj code,

similar for all

protocols

Page 42: The Secure Socket Layer Protocol (SSL)

Intruder Can Intercept

Store a message from the network in the data structure modeling intruder’s “knowledge”ruleset i: IntruderId do choose l: cliNet do rule "Intruder intercepts client's message" cliNet[l].fromIntruder = false ==> begin alias msg: cliNet[l] do -- message from the net … alias known: int[i].messages do if multisetcount(m: known, msgEqual(known[m], msg)) = 0 then multisetadd(msg, known); end; end; end;

Page 43: The Secure Socket Layer Protocol (SSL)

Intruder Can Decrypt if Knows Key

If the key is stored in the data structure modeling intruder’s “knowledge”, then read messageruleset i: IntruderId do choose l: cliNet do rule "Intruder intercepts client's message" cliNet[l].fromIntruder = false ==> begin alias msg: cliNet[l] do -- message from the net … if msg.mType = M_CLIENT_KEY_EXCHANGE then if keyEqual(msg.encKey, int[i].publicKey.key) then alias sKeys: int[i].secretKeys do if multisetcount(s: sKeys, keyEqual(sKeys[s], msg.secretKey)) = 0 then multisetadd(msg.secretKey, sKeys); end; end; end;

Page 44: The Secure Socket Layer Protocol (SSL)

Intruder Can Create New Messages

Assemble pieces stored in the intruder’s “knowledge” to form a message of the right formatruleset i: IntruderId do ruleset d: ClientId do ruleset s: ValidSessionId do choose n: int[i].nonces do ruleset version: Versions do rule "Intruder generates fake ServerHello" cli[d].state = M_SERVER_HELLO ==> var outM: Message; -- outgoing message begin outM.source := i; outM.dest := d; outM.session := s; outM.mType := M_SERVER_HELLO; outM.version := version; outM.random := int[i].nonces[n]; multisetadd (outM, cliNet); end; end; end; end;

Page 45: The Secure Socket Layer Protocol (SSL)

Intruder Model and Cryptography

There is no actual cryptography in our model Messages are marked as “encrypted” or

“signed”, and the intruder rules respect these markers

Our assumption that cryptography is perfect is reflected in the absence of certain intruder rules There is no rule for creating a digital signature

with a key that is not known to the intruder There is no rule for reading the contents of a

message which is marked as “encrypted” with a certain key, when this key is not known to the intruder

There is no rule for reading the contents of a “hashed” message

Page 46: The Secure Socket Layer Protocol (SSL)

Running Murj Analysis

Intruder Model

AnalysisTool

Formal Protocol

Informal Protocol

Description

Find error

Murj codeRFC Murj code,

similar for all

protocols

Specify security conditions and run

Murj

Page 47: The Secure Socket Layer Protocol (SSL)

Secrecy

Intruder should not be able to learn the secret generated by the clientruleset i: ClientId do ruleset j: IntruderId do rule "Intruder has learned a client's secret" cli[i].state = M_DONE & multisetcount(s: int[j].secretKeys, keyEqual(int[j].secretKeys[s], cli[i].secretKey)) > 0 ==> begin error "Intruder has learned a client's secret" end; end;end;

Page 48: The Secure Socket Layer Protocol (SSL)

Shared Secret Consistency

After the protocol has finished, client and server should agree on their shared secretruleset i: ServerId do ruleset s: SessionId do rule "Server's shared secret is not the same as its client's" ismember(ser[i].clients[s].client, ClientId) & ser[i].clients[s].state = M_DONE & cli[ser[i].clients[s].client].state = M_DONE & !keyEqual(cli[ser[i].clients[s].client].secretKey, ser[i].clients[s].secretKey) ==> begin error "S's secret is not the same as C's" end; end;end;

Page 49: The Secure Socket Layer Protocol (SSL)

Version and Crypto Suite Consistency

Client and server should be running the highest version of the protocol they both supportruleset i: ServerId do ruleset s: SessionId do rule "Server has not learned the client's version or suite

correctly" !ismember(ser[i].clients[s].client, IntruderId) & ser[i].clients[s].state = M_DONE & cli[ser[i].clients[s].client].state = M_DONE & (ser[i].clients[s].clientVersion != MaxVersion | ser[i].clients[s].clientSuite.text != 0) ==> begin error "Server has not learned the client's version or suite

correctly" end; end;end;

Page 50: The Secure Socket Layer Protocol (SSL)

Finite-State Verification

......

Murj rules for protocol participants and the intruder define a nondeterministic state transition graph

Murj will exhaustively enumerate all graph nodes

Murj will verify whether specified security conditions hold in every reachable node

If not, the path to the violating node will describe the attack

Correctnesscondition violated

Page 51: The Secure Socket Layer Protocol (SSL)

When Does Murj Find a Violation?

Bad abstraction Removed too much detail from the protocol

when constructing the abstract model Add the piece that fixes the bug and repeat This is part of the rational reconstruction

process Genuine attack

Yay! Hooray! Attacks found by formal analysis are usually

quite strong: independent of specific cryptographic schemes, OS implementation, etc.

Test an implementation of the protocol, if available

Page 52: The Secure Socket Layer Protocol (SSL)

“Core” SSL 3.0

C

Versions=3.0, suites, Ns,sigca(S,Ks),“ServerHelloDone”

S

C, Versionc=3.0, suitec, Nc

{Secretc}Ks

switch to key derivedfrom secretc

If the protocol is correct, C and S sharesome secret key material secretc at this point

switch to key derivedfrom secretc

Page 53: The Secure Socket Layer Protocol (SSL)

Version Consistency Fails!

C

Versions=2.0, suites, Ns,sigca(S,Ks),“ServerHelloDone”

S

C, Versionc=2.0, suitec, Nc

{Secretc}Ks

C and S end up communicating using SSL 2.0 (weaker earlier version of the protocol)

Server is fooled into thinking he is communicating with a client who supports only SSL 2.0

Page 54: The Secure Socket Layer Protocol (SSL)

struct { select (KeyExchangeAlgorithm) { case rsa: EncryptedPreMasterSecret; case diffie_hellman:

ClientDiffieHellmanPublic; } exchange_keys} ClientKeyExchange

struct { ProtocolVersion client_version; opaque random[46];} PreMasterSecret

A Case of Bad AbstractionModel this as {Versionc,

Secretc}Ks

This piece matters! Need to add it to the model.

Page 55: The Secure Socket Layer Protocol (SSL)

Fixed “Core” SSL

C

Versions=3.0, suites, Ns,sigca(S,Ks),“ServerHelloDone”

S

C, Versionc=3.0, suitec, Nc

{Versionc,Secretc}Ks

switch to key derivedfrom secretc

If the protocol is correct, C and S sharesome secret key material secretc at this point

switch to key derivedfrom secretc

Prevents version rollback attack Add rule to check that received

version is equal to version in ClientHello

Page 56: The Secure Socket Layer Protocol (SSL)

Summary of Reconstruction

A = Basic protocol C = A + certificates for public keys

• Authentication for client and server E = C + verification (Finished) messages

• Prevention of version and crypto suite attacks F = E + nonces

• Prevention of replay attacks Z = “Correct” subset of SSL

Page 57: The Secure Socket Layer Protocol (SSL)

Anomaly (Protocol F)

C S

… SuiteC …

… SuiteS …

Switch to negotiated cipher

Finished Finished

data data

Page 58: The Secure Socket Layer Protocol (SSL)

Anomaly (Protocol F)

C S

… SuiteC …

… SuiteS …

Switch to negotiated cipher

Finished Finished

data dataX X

Modify

Modify

Page 59: The Secure Socket Layer Protocol (SSL)

Protocol Resumption

C S

SessionId, VerC= 3.0, NC, ...

Finished Finished

data data

VerS= 3.0, NS, ...

Page 60: The Secure Socket Layer Protocol (SSL)

Version Rollback Attack

C S

SessionId, VerC= 2.0, NC, ...

Finished Finished

data data

VerS= 2.0, NS, ...

XX{ NS } SecretKey { NC } SecretKey

SSL 2.0 Finished messages do not include version numbers or cryptosuites

Page 61: The Secure Socket Layer Protocol (SSL)

Basic Pattern for Doing Your Project

Read and understand protocol specification Typically an RFC or a research paper We’ll put a few on the website: take a look!

Choose a tool Murj by default, but we’ll describe many other

tools Play with Murj now to get some experience

(installing, running simple models, etc.) Start with a simple (possibly flawed)

model Rational reconstruction is a good way to go

Give careful thought to security conditions

Page 62: The Secure Socket Layer Protocol (SSL)

Background Reading on SSL 3.0

Optional, for deeper understanding of SSL / TLS

D. Wagner and B. Schneier. “Analysis of the SSL 3.0 protocol.” USENIX Electronic Commerce ’96.

Nice study of an early proposal for SSL 3.0 J.C. Mitchell, V. Shmatikov, U. Stern. “Finite-State

Analysis of SSL 3.0”. USENIX Security ’98. Mur analysis of SSL 3.0 (similar to this lecture) Actual Mur model available

D. Bleichenbacher. “Chosen Ciphertext Attacks against Protocols Based on RSA Encryption Standard PKCS #1”. CRYPTO ’98.

Cryptography is not perfect: this paper breaks SSL 3.0 by directly attacking underlying implementation of RSA