Dai registri di accesso di un servizio (nginx, Dovecot, ecc.), non puoi vedere se sei stato colpito o meno. A meno che tu non abbia precedentemente acquisito tutto il traffico SSL, non puoi vedere se sei stato attaccato in passato.
Il pattern da abbinare in una cattura di pacchetti è molto semplice:
- Viene inviata una richiesta di heartbeat dannosa.
- Viene restituita una risposta heartbeat eccessivamente lunga (per versioni con bug).
Se la richiesta Heartbeat non è crittografata (cioè è stata inviata prima che l'handshake sia completata), i dati nel livello di trasporto (UDP, TCP o un livello specifico dell'applicazione aggiuntivo) sono:
18 # Content Type Heartbeat
vv vv # TLS version (e.g. 03 01 is TLS 1.0, 03 03 is TLS 1.2)
ll ll # Record length (length of the following data)
01 # Message type (1 = request, 2 = response)
xx xx # Payload length
[payload]
[at least 16 bytes of padding]
Se il payload non è esattamente la lunghezza xx xx
(big-endian), allora probabilmente sei stato attaccato. Avrebbe successo se si ottiene una risposta:
18 vv vv # Same record layer header
ll ll # Length of following data
02
xx xx # Same length as requested
[data of length xx xx]
Un comando di esempio (che richiede root) che cattura tutti i dati futuri dall'interfaccia di rete eth0
fino all'interruzione:
tcpdump -i eth0 'tcp port 443' -w ssl.pcap
Puoi utilizzare Wireshark per esaminare il file ssl.pcap
. Il filtro di visualizzazione ssl.heartbeat_message
mostra tutte le richieste e i messaggi Heartbeat. Nota: a volte il filtro SSL non viene applicato. In tal caso, fai clic con il pulsante destro del mouse su un pacchetto, fai clic su Decodifica come .. e seleziona SSL
. Poiché git commit 3f81af22e0116a2f83c0298de7874959b3967da2 (11 aprile 2014), puoi anche utilizzare il filtro esperto ssl.heartbeat_message.payload_length.invalid
per indirizzare le richieste heartbeat malformate (se non crittografate).
Come per gli heartbeat crittografati ... non è normale vedere gli heartbeat, quindi quando ne hai uno per le connessioni TCP, diventa già sospetto. Alcuni suggerimenti per heartbeat crittografati che potrebbero aiutare:
- Una richiesta di heartbeat seguita da gigantesche risposte heartbeat è un segno di un server vulnerabile che è stato sfruttato con successo.
- Una richiesta di heartbeat non seguita da una risposta heartbeat può segnalare un tentativo di sfruttare il server, ma il server viene riparato e non risponde.
- Una richiesta di heartbeat seguita da un avviso crittografato potrebbe segnalare un tentativo di sfruttare il server, ma il server non esegue OpenSSL e rifiuta la richiesta non valida.
- Un gran numero di battiti cardiaci successivi (anche se piccoli) può avere successo con tentativi di sfruttamento con lunghezze di carico ridotte.