Convergence: Difference between revisions

From
Jump to navigation Jump to search
(link dump)
 
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
== TLS CAs Theorie ==
* Vertrauensanker
* Schutz gegen MITM
* Authentication

== TLS CAs Praxis ==

* gängige Browser "vertrauen" in der default Einstellung mehreren hundert Organisationen
** https://www.eff.org/observatory
** https://www.eff.org/files/colour_map_of_CAs.pdf
** eine einzige kompromittierte CA reicht aus, jede CA darf alles signieren.

* unzureichende Validation
** https://bugzilla.mozilla.org/show_bug.cgi?id=556468

* Comodo
* Diginotar

* Lawful(?) Interception
** http://files.cloudprivacy.net/ssl-mitm.pdf

* wer ist vertrauenswürdig?
** https://bugzilla.mozilla.org/show_bug.cgi?id=647959 ;)


== Perspectives ==

* Suche nach einer Alternative zu Authentifizierung via PKI
* TOFU - trust on first use
** ssh trust model
** Unbekannte Schlüssel (für einen spez. host) müssen durch Benutzer bestätigt werden
** Bestätigte Schlüssel/Host Paare werden gecacht und erfordern keine weitere Benutzer-Interaktion
** Ändert sich ein Schlüssel muss dieser wiederum vom Benutzer bestätigt werden

* Problem: MITM/First Use
** Manuelle Überprüfung i.d.R. nicht praktikabel.
** Risiko minimieren durch Notare
*** Notare geben Auskunft welche Schlüssel sie "sehen".
*** network perspective
* Annahme: MITM-Angriff von dem alle Notare betroffen sind sehr unwahrscheinlich
* Neues Problem: Was wenn sich die Notare nicht einig sind?
** Benutzer entscheidet
* "irgendeine CA hat den Schlüssel signiert" vs. "x von y Notaren sehen den selben Schlüssel"
** kompromittierter Notar weniger fatal als kompromittierte CA.

* http://perspectives-project.org/
* http://perspectivessecurity.files.wordpress.com/2011/07/perspectives_usenix08.pdf

== Convergence ==
== Convergence ==

* will CAs komplett ersetzen
* basiert auf der Perspectives Idee
* Notare prinzipiell nicht nur auf Zertifikate beschränkt
** DNSSEC, Content, ...
** momentan aber nur Zertifikat Verifier (network perspective) implementiert
* Privacy
** Notar als Proxy zu anderen Notaren
* Benutzer soll letztendlich selbst entscheiden wem er vertraut
** Trust Agility


* http://convergence.io/
* http://convergence.io/
Line 5: Line 63:
* http://www.youtube.com/watch?v=Z7Wl2FW2TcA
* http://www.youtube.com/watch?v=Z7Wl2FW2TcA


=== Convergence Firefox Add-On ===
== Perspectives ==
* installiert lokale CA
* MITM jeder TLS-Verbindung
* Unbekannte (Hostname, Port, Zertifikat) Tupel werden über Notare verifiziert
** generiert neues Zertifikat für Hostname (lokale CA sig.)
** Cache
* Browser "sieht" nur noch Zertifikate die von der lokalen CA signiert sind.


=== Convergence Notary ===
* http://perspectives-project.org/
* HTTPS API
* http://perspectivessecurity.files.wordpress.com/2011/07/perspectives_usenix08.pdf
* feste (self sign.) Zertifikate
* implementierte verifier
** network perspective
*** Zertifikat fingerprint
** google certificate catalog
*** http://googleonlinesecurity.blogspot.com/2011/04/improving-ssl-certificate-security.html


== foo ==
=== Notar Protokoll ===
https://github.com/moxie0/Convergence/wiki/Notary-Protocol
* http://files.cloudprivacy.net/ssl-mitm.pdf
* http://pki.net.in.tum.de/
* cert pinning https://addons.mozilla.org/en-US/firefox/addon/certificate-patrol/


== bar ==
==== Notary Request====
* HTTP POST request /target/*<host>*+*<port>*
* fingerprint (SHA1 des Zertifikats)
<pre>
POST /target/www.google.de+443 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
Host: convergence.crypto.is:8843
Connection: close

fingerprint=40:50:62:E5:BE:FD:E4:AF:97:E9:38:2A:F1:6C:C8:7C:8F:B7:C4:E2
</pre>

==== Notary Response ====
* HTTP Response Status Code
** 200 fingerprint match
** 409 fingerprint mismatch
** ...

<pre>
{
"fingerprintList":
[
{
"timestamp": {"start": "1312537562", "finish": "1315604078"},
"fingerprint": "51:1F:8E:C6:22:82:5B:ED:A2:75:CB:3E:95:AB:63:7F:69:D3:18:1C"
}
],
"signature": "MHu+jKdTJhRiNqTZleFnTY...RDYcPWuWBawQcReP3N82y54ZcEl3g=="
}
</pre>

== Convergence Proxy ==

* Convergence momentan nur für Firefox verfügbar
** Implementierung in anderen Browsern unwahrscheinlich (fehlende APIs)
* Probleme mit Clientzertifikaten

* Plan
** externer TLS Proxy
** Passives Mitlesen des TLS-Handshakes
** kein MITM / keine eigenen Zertifikate
** Überprüfung der Zertifikate analog zu Convergence Plugin
** Im Prinzip "Dual-Mode" Convergence + herkömmliche Zertifikats-Validierung des Browsers/Client.

=== HTTP Tunnel ===
http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt


=== TLS Handshake ===
<pre>
Client Server

ClientHello -------->
ServerHello
Certificate
ServerKeyExchange
<-------- ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished -------->
ChangeCipherSpec
<-------- Finished
Application Data <-------> Application Data
</pre>


=== TLS Handshake / Proxy ===
<pre>
Client Proxy Server

ClientHello --> ------> -->
<-- <------ <-- ServerHello
/-- <-- Certificate
|
verify(certificate)
|
<-- --/
<-- <----- <-- ServerKeyExchange
<-- <----- <-- ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished --> -----> -->
ChangeCipherSpec
<-- <----- <-- Finished
Application Data <-> <----> <-> Application Data
</pre>

=== Probleme ===

* sauberes beenden der TLS Verbindung falls das Zertifikat nicht verifiziert werden kann
** disconnect
*** erneuter Verbindungsaufbau
** TLS-Alert
*** welcher?
* UI


== Misc ==
* http://convergence.io/
* https://github.com/moxie0/Convergence
* http://www.youtube.com/watch?v=Z7Wl2FW2TcA
* http://perspectives-project.org/
* http://perspectivessecurity.files.wordpress.com/2011/07/perspectives_usenix08.pdf
* http://googleonlinesecurity.blogspot.com/2011/04/improving-ssl-certificate-security.html
* ssl 3.0 http://www.mozilla.org/projects/security/pki/nss/ssl/traces/index.html
* ssl 3.0 http://www.mozilla.org/projects/security/pki/nss/ssl/traces/index.html
* tls 1.0 http://www.ietf.org/rfc/rfc2246.txt
* tls 1.0 http://www.ietf.org/rfc/rfc2246.txt
Line 23: Line 195:
* http 1.1 http://www.ietf.org/rfc/rfc2616.txt
* http 1.1 http://www.ietf.org/rfc/rfc2616.txt
* http tunnel http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt
* http tunnel http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt
* http://files.cloudprivacy.net/ssl-mitm.pdf
* http://pki.net.in.tum.de/
* cert pinning https://addons.mozilla.org/en-US/firefox/addon/certificate-patrol/

Latest revision as of 15:03, 15 October 2011

TLS CAs Theorie

  • Vertrauensanker
  • Schutz gegen MITM
  • Authentication

TLS CAs Praxis

  • Comodo
  • Diginotar


Perspectives

  • Suche nach einer Alternative zu Authentifizierung via PKI
  • TOFU - trust on first use
    • ssh trust model
    • Unbekannte Schlüssel (für einen spez. host) müssen durch Benutzer bestätigt werden
    • Bestätigte Schlüssel/Host Paare werden gecacht und erfordern keine weitere Benutzer-Interaktion
    • Ändert sich ein Schlüssel muss dieser wiederum vom Benutzer bestätigt werden
  • Problem: MITM/First Use
    • Manuelle Überprüfung i.d.R. nicht praktikabel.
    • Risiko minimieren durch Notare
      • Notare geben Auskunft welche Schlüssel sie "sehen".
      • network perspective
  • Annahme: MITM-Angriff von dem alle Notare betroffen sind sehr unwahrscheinlich
  • Neues Problem: Was wenn sich die Notare nicht einig sind?
    • Benutzer entscheidet
  • "irgendeine CA hat den Schlüssel signiert" vs. "x von y Notaren sehen den selben Schlüssel"
    • kompromittierter Notar weniger fatal als kompromittierte CA.

Convergence

  • will CAs komplett ersetzen
  • basiert auf der Perspectives Idee
  • Notare prinzipiell nicht nur auf Zertifikate beschränkt
    • DNSSEC, Content, ...
    • momentan aber nur Zertifikat Verifier (network perspective) implementiert
  • Privacy
    • Notar als Proxy zu anderen Notaren
  • Benutzer soll letztendlich selbst entscheiden wem er vertraut
    • Trust Agility

Convergence Firefox Add-On

  • installiert lokale CA
  • MITM jeder TLS-Verbindung
  • Unbekannte (Hostname, Port, Zertifikat) Tupel werden über Notare verifiziert
    • generiert neues Zertifikat für Hostname (lokale CA sig.)
    • Cache
  • Browser "sieht" nur noch Zertifikate die von der lokalen CA signiert sind.

Convergence Notary

Notar Protokoll

https://github.com/moxie0/Convergence/wiki/Notary-Protocol

Notary Request

  • HTTP POST request /target/*<host>*+*<port>*
  • fingerprint (SHA1 des Zertifikats)
POST /target/www.google.de+443 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 71
Host: convergence.crypto.is:8843
Connection: close

fingerprint=40:50:62:E5:BE:FD:E4:AF:97:E9:38:2A:F1:6C:C8:7C:8F:B7:C4:E2

Notary Response

  • HTTP Response Status Code
    • 200 fingerprint match
    • 409 fingerprint mismatch
    • ...
{
  "fingerprintList":
  [
    {
      "timestamp": {"start": "1312537562", "finish": "1315604078"},
      "fingerprint": "51:1F:8E:C6:22:82:5B:ED:A2:75:CB:3E:95:AB:63:7F:69:D3:18:1C"
    }
  ],
  "signature": "MHu+jKdTJhRiNqTZleFnTY...RDYcPWuWBawQcReP3N82y54ZcEl3g=="
}

Convergence Proxy

  • Convergence momentan nur für Firefox verfügbar
    • Implementierung in anderen Browsern unwahrscheinlich (fehlende APIs)
  • Probleme mit Clientzertifikaten
  • Plan
    • externer TLS Proxy
    • Passives Mitlesen des TLS-Handshakes
    • kein MITM / keine eigenen Zertifikate
    • Überprüfung der Zertifikate analog zu Convergence Plugin
    • Im Prinzip "Dual-Mode" Convergence + herkömmliche Zertifikats-Validierung des Browsers/Client.

HTTP Tunnel

http://curl.haxx.se/rfc/draft-luotonen-web-proxy-tunneling-01.txt


TLS Handshake

Client                                             Server

ClientHello                -------->
                                              ServerHello
                                              Certificate
                                        ServerKeyExchange
                           <--------      ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished                   -------->
                                         ChangeCipherSpec
                           <--------             Finished
Application Data           <------->     Application Data


TLS Handshake / Proxy

Client                   Proxy                    Server

ClientHello        -->  ------>   -->
                   <--  <------   <--        ServerHello
                          /--     <--        Certificate
                          |
                   verify(certificate)
                          |
                   <--  --/
                   <--  <-----    <--   ServerKeyExchange
                   <--  <-----    <--     ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished           -->  ----->    -->
                                         ChangeCipherSpec
                   <--  <-----    <--            Finished
Application Data   <->  <---->    <->    Application Data

Probleme

  • sauberes beenden der TLS Verbindung falls das Zertifikat nicht verifiziert werden kann
    • disconnect
      • erneuter Verbindungsaufbau
    • TLS-Alert
      • welcher?
  • UI


Misc