Bei den Diskussionen über Heartbleed fällt häufig die Tatsache unter dem Tisch, das nicht nur Server betroffen sind, sondern auch bei Clients das Exploit verwendet werden kann, um Remote 64 KiB aus dem Speicher zu lesen. Hinzu kommt die Erkenntnis, das hierfür nicht mal ein Zertifikat bei der Gegenstelle vorhanden sein muss, da Heartbeats in betroffenen OpenSSL Versionen bereits vor dem Austausch von Zertifikaten oder Schlüsseln akzeptiert werden.
Die Vorgehensweise ist recht simpel:
- Auf das ClientHello mit der TLS Version und der Cipher Suite warten
- Senden des ServerHello mit der gleichen TLS Version und Cipher Suite (um Handshake Fehler zu vermeiden)
- Ab diesem Zeitpunkt können vom vermeintlichen Server beliebig viele Heartbeats gesendet werden
Für gewöhnliche Web-Anwendungen ist dieses Proof of Concept uninteressant, dennoch bietet es bei clientseitigen Zertifikaten ein Angriffsszenario an – beispielsweise bei OpenVPN Clients ist hiermit eine Man in the Middle Attacke denkbar, um den privaten Schlüssel eines Clients zu erbeuten.
Zur Demonstration hat Peter Wu hierzu das Proof of Concept pacemaker veröffentlicht und stelle die Ergebnisse gerne vor.
Dies ist ein Beispiel einer gepatchten OpenSSL Version mit wget:
user@patched-system:~$ wget https://host.name:4433/ --2014-04-13 15:32:04-- https://host.name:4433/ Auflösen des Hostnamen »host.name (host.name)«... yy.yy.yy.yy Verbindungsaufbau zu host.name (host.name)|yy.yy.yy.yy|:4433... verbunden. Es ist nicht möglich, eine SSL-Verbindung herzustellen.
Und so sieht das Ergebnis in dem Tool pacemaker aus:
Connection from: zz.zz.zz.zz:49119 Possibly not vulnerable
Hier das Gegenbeispiel:
user@vulnerable-system:~$ wget https://host.name:4433/ --2014-04-13 15:35:18-- https://host.name:4433/ Auflösen des Hostnamen »host.name (host.name)«... yy.yy.yy.yy Verbindungsaufbau zu host.name (host.name)|yy.yy.yy.yy|:4433... verbunden. Es ist nicht möglich, eine SSL-Verbindung herzustellen.
Und in pacemaker können wir hier den 64 KiB Dump vom Client sehen (Inhalte wurden verfälscht):
Connection from: xx.xx.xx.xx:56784 Client returned 65534 (0xfffe) bytes 0000: ed 2d 03 02 52 34 c6 6d 86 fd e8 40 b3 da ee 7e .-..R4.d...!...~ 0010: 21 c4 1d 2e 9f e9 60 5f 05 b0 ce af 7e b7 95 8c !.....`_....~... 0020: 33 42 3f d5 00 c0 14 00 00 05 00 0f 00 01 01 00 3B?............. 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ * 4530: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c1 44 ...............D 89f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 81 00 ................ 8a00: 00 00 00 00 00 00 08 78 e7 e5 ba 7f 00 00 08 78 .......x.......x 8a10: e7 e5 ba 7f 00 00 00 00 00 00 00 00 00 00 01 00 ................ 8a20: 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ff ff ................ 8a30: ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 8a50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 01 ..............$. 8a70: 00 00 00 00 00 00 80 00 00 00 00 00 00 00 20 00 .............. . 8a80: 00 00 00 00 00 00 03 00 00 00 ba 7f 00 00 60 17 ..............`. 8a90: d7 01 00 00 00 00 00 00 00 00 00 00 00 00 31 00 ..............1. 8aa0: 00 00 00 00 00 00 00 00 00 00 ba 7f 00 00 50 3b ..............P; 8ab0: d7 01 00 00 00 00 00 00 00 00 04 00 00 00 00 00 ................ 8ac0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 00 ..............!. 8ad0: 00 00 00 00 00 00 40 17 d7 01 00 00 00 00 00 00 ......@......... 8ae0: 00 00 00 00 00 00 03 00 00 00 00 00 00 00 41 00 ..............A. 8af0: 00 00 00 00 00 00 00 0e 00 0d 00 19 00 0b 00 0c ................ 8b00: 00 18 00 09 00 0a 00 16 00 17 00 08 00 06 00 07 ................ [...]