Convergence: Difference between revisions
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 |
|||
== |
=== 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/ |
|||
== |
==== 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
- 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
- Comodo
- Diginotar
- Lawful(?) Interception
- wer ist vertrauenswürdig?
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
- 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/
- https://github.com/moxie0/Convergence
- http://www.youtube.com/watch?v=Z7Wl2FW2TcA
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
- HTTPS API
- feste (self sign.) Zertifikate
- implementierte verifier
- network perspective
- Zertifikat fingerprint
- google certificate catalog
- network perspective
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?
- disconnect
- 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
- tls 1.0 http://www.ietf.org/rfc/rfc2246.txt
- tls 1.1 http://www.ietf.org/rfc/rfc4346.txt
- tls 1.2 http://www.ietf.org/rfc/rfc5246.txt
- ssl connection walkthrough http://www.mozilla.org/projects/security/pki/nss/ssl/traces/index.html
- 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://files.cloudprivacy.net/ssl-mitm.pdf
- http://pki.net.in.tum.de/
- cert pinning https://addons.mozilla.org/en-US/firefox/addon/certificate-patrol/