Detekce zranitelnosti Heartbleed pomocí rozšířených flow dat Václav Bartoš
[email protected]
Seminář o bezpečnosti sítí a služeb, 11. 2. 2015
Monitorování sítě CESNET2 • Monitorování na bázi IP toků (flow) pomocí dedikovaných sond • Všechny linky vedoucí z/do sítě CESNET2 (10x 10 Gb/s)
4x
Monitorovací sondy • Založeny na síťových kartách s HW akcelerací – Propustnost plných 10Gb/s (bez vzorkování)
• Exportér FlowMon od INVEA-TECH – – – –
Podpora pluginů Možnost extrahovat data i z payloadu paketů Umíme parsovat DNS, HTTP, SMTP a SIP protokoly Export dat ve formátu IPFIX
Monitorovací infrastruktura
IPFIX
ipfixcol
Monitorovací infrastruktura
IPFIX
Nemea framework
ipfixcol
preproc.
detection module
alert aggreg.
detection module
detection module
logging
Monitorovací infrastruktura Nemea • Modulární systém pro automatickou analýzu síťových dat • Umožňuje snadno a rychle implementovat nové detekční moduly
IPFIX
Nemea framework
ipfixcol
preproc.
detection module
alert aggreg.
detection module
detection module
logging
Monitorovací infrastruktura Warden alert sharing system Attack reports IPFIX
Nemea framework
ipfixcol
preproc.
detection module
alert aggreg.
detection module
detection module
logging
Monitorovací infrastruktura Warden alert sharing system Attack reports
Warden
IPFIX pro sdílení bezpečnostních Nemea framework • Systém hlášení mezi zapojenými organizacemi detection preproc. • Operátoři tak mohou být upozorněni na bezpečností module problémyipfixcol v jejich sítích, i když třeba sami síť nemonitorují detection module
detection module
alert aggreg. logging
Zranitelnost Heartbleed
Heartbleed • Heartbleed – – – –
Chyba v OpenSSL umožňující vzdáleně číst data z paměti serveru Zveřejněno 7. dubna 2014, současně s opravenou verzí knihovny Jeden z problémů – útok nezanechává žádné stopy Založeno na speciálně upraveném heartbeat paketu
• Heartbeat – Rozšíření TLS protokolu, které poskytuje „keep-alive“ funkcionalitu – Požadavek-odpověď, vrací se stejný payload
• Detekce ve flow datech? – Žádné zvláštní charakteristiky na úrovni flow dat – Umíme sice parsovat pakety a rozšířit flow záznamy o data z aplikační vrstvy, ale… • SSL/TLS = šifrování – Ale podívali jsme se na to blíže…
Útok na Heartbleed • TLS record: 24 for heartbeat msg. type
3
0-3
SSL ver.
Message length
Message up to 16kB
Útok na Heartbleed • TLS record: 24 for heartbeat msg. type
3
0-3
SSL ver.
Message length
Message up to 16kB
Nikdy není šifrováno !
Útok na Heartbleed • TLS record: 24 for heartbeat msg. type
3
0-3
SSL ver.
Message length
Message up to 16kB
Nikdy není šifrováno ! Zbytek zprávy může být šifrovaný.
V případě Heartbleed útoků většinou není.
Útok na Heartbleed • Normální heartbeat záznam: type = heartbeat
24
3
0-3
SSL ver.
≥16B
req./resp. Message length
1|2
Payload length
up to 16kB
Payload
Padding
Útok na Heartbleed • Odpověď na heartbeat požadavek nese stejný payload
Request:
24
3
0-3
Message length
3
0-3
Message length
1
Payload length
Payload
Padding
2
Payload length
Payload
Padding
Reply:
24
Útok na Heartbleed • Heartbleed záznam:
Request:
24
3
0-3
3
1
16384
Payload
Útok na Heartbleed • Heartbleed záznam:
Request:
24
3
0-3
3
1
16384
Payload
16384
2
16384
Random chunk of memory
Reply (OpenSSL):
24
3
0-3
Útok na Heartbleed • Jak detekovat Heartbleed: ≥16B
≥1B
24
3
0-3
Message length
1|2
Payload length
≥20 and ≤16kB
Payload
Padding
Útok na Heartbleed • Jak detekovat Heartbleed: ≥16B
≥1B
24
3
0-3
Message length
1|2
Payload length
Payload
≥20 and ≤16kB
message_length ≥ 1 + 2 + payload_length + 16
Padding
Útok na Heartbleed • Jak detekovat Heartbleed: ≥16B
≥1B
24
3
0-3
Message length
1|2
Payload length
Payload
≥20 and ≤16kB
message_length ≥ 1 + 2 + payload_length + 16 message_length ≥ 20
Padding
Útok na Heartbleed • Jak detekovat Heartbleed: ≥16B
≥1B
24
3
0-3
Message length
1|2
Payload length
Payload
≥20 and ≤16kB
message_length ≥ 1 + 2 + payload_length + 16 message_length ≥ 20 reply size = request size
Padding
Detekce Heartbleed útoků v CESNETu
Monitorovací infrastruktura Warden alert sharing system Attack reports IPFIX
Nemea framework
ipfixcol
preproc.
detection module
alert aggreg.
detection module
detection module
logging
Monitorovací infrastruktura Exporter plugin
Warden alert sharing system Attack reports
IPFIX
Nemea framework
(flow + HB info)
ipfixcol
preproc.
detection module
alert aggreg.
detection module
detection module
logging
Monitorovací infrastruktura Exporter plugin
Warden alert sharing system Attack reports Heartbleed Nemea framework detection module detection
IPFIX (flow + HB info)
preproc.
ipfixcol
detection module
module detection module
alert aggreg. logging
Plugin pro exportér • Napsali jsme plugin pro exportér FlowMon • Rozpoznává heartbeat pakety na základě: – – – – –
TCP port 443 tcp_payload[0] = 24 tcp_payload[1] = 3 tcp_payload[2] = 0..3 tcp_payload[5] = 1 | 2
HTTPS heartbeat message type major version minor version request / response
• Pro každý heartbeat paket je vytvořen speciální flow záznam • Nové položky v IPFIX: – Message size – Direction (request / response) – Payload size
Nemusí být validní, pokud je použito šifrování
Plugin pro exportér • Rozpoznávání není dokonalé: – TLS záznam nemusí začínat na začátku TCP segmentu • Jediné řešení by bylo rekonstruovat TCP stream – Prakticky nemožné na 10Gb/s
• Některé záznamy nám uniknou – Filtru mohou odpovídat náhodná data • Pravděpodobnost: 1.86 · 10-9 • Na portu 443 pozorujeme cca 25 milionů paketů za minutu • -> Jedna falešná detekce průměrně každých 20 minut – Ve skutečnosti o něco méně, protože na začátku paketu je častěji skutečně hlavička, ne data
Detekční modul • Přijímá záznamy o heartbeat paketech • Používá 4 pravidla pro detekci Heartbleed útoku: 1.
message length < payload length + 19 •
2.
message length < 20 •
3.
Požadavek menší než minimální velikost
size of request packet != size of reply packet •
4.
Neodpovídající políčka velikosti
Různá velikost požadavku a odpovědi
message length ≥ 8kB •
funguje i při použití šifrování
Neobvykle velká odpověď
• Každému páru zdrojová/cílová IP adresa je počítáno skóre – Každé pravidlo přidává určitý počet bodů – Pokud skóre překročí určitou mez, je nahlášen útok – Vše je lokálně logováno
Časový průběh • 7. dubna (pondělí) – Zveřejněny informace o zranitelnosti Heartbleed • 8. dubna (úterý) – Všimli jsme si, že se něco děje, a začali útok studovat • 10. dubna (čtvrtek) – Začali jsme implementovat plugin pro exportér a detekční modul • 11. dubna (pátek) – Dokončen plugin pro exportér • 14. dubna (pondělí) – Dokončen detekční modul – První výsledky hlášeny ručně emailem • Automatické hlášení do Wardenu až od 25. dubna
Výsledky
Heartbeat pakety • Běžné heartbeat pakety se téměř nevyskytují – V prvních dnech bylo 99,75% heartbeat požadavků rozpoznáno jako Heartbleed útok
• Většina útoků je neúspěšná Počet heartbeat paketů za den 100000 90000 80000 70000 60000 50000 40000 30000 20000 10000 0
Requests
Heartbleed req. (size<20)
Replies
Počet požadavků/odpovědí Počet Heartbleed požadavků a odpovědí za den 100000 Požadavky
90000
3000000
80000
Odpovědi
70000 60000 50000 40000 30000 20000 10000
•
Špičky způsobeny jen 4 zdrojovými adresami
27.6
25.6
23.6
21.6
19.6
17.6
15.6
13.6
11.6
9.6
7.6
5.6
3.6
1.6
30.5
28.5
26.5
24.5
22.5
20.5
18.5
16.5
14.5
12.5
10.5
8.5
6.5
4.5
2.5
30.4
28.4
26.4
24.4
22.4
0
27.6
25.6
23.6
21.6
19.6
17.6
6000
15.6
13.6
11.6
9.6
7.6
5.6
3.6
1.6
30.5
28.5
26.5
24.5
22.5
20.5
18.5
16.5
14.5
12.5
10.5
8.5
6.5
4.5
2.5
30.4
28.4
26.4
24.4
22.4
Počet útoků Počet párů IP adres za den
7000 Alespoň 1 požadavek
Alespoň 1 odpověď
5000 Obojí
4000
3000
2000
1000
0
16.12
9.12
2.12
25.11
18.11
11.11
6000
4.11
28.10
21.10
14.10
7.10
30.9
23.9
16.9
9.9
2.9
26.8
19.8
12.8
5.8
29.7
22.7
15.7
8.7
1.7
24.6
17.6
10.6
3.6
27.5
20.5
13.5
6.5
29.4
22.4
Počet útoků Počet párů IP adres za den
7000 Alespoň 1 požadavek
Alespoň 1 odpověď
5000 Obojí
4000
3000
2000
1000
0
16.12
9.12
2.12
25.11
18.11
400
11.11
450
4.11
28.10
21.10
14.10
7.10
30.9
23.9
16.9
9.9
2.9
26.8
19.8
12.8
5.8
29.7
22.7
15.7
8.7
1.7
24.6
17.6
10.6
3.6
27.5
20.5
13.5
6.5
29.4
22.4
Počet útoků Počet párů IP adres za den
500
Alespoň 1 požadavek
Alespoň 1 odpověď
Obojí
350
300
250
200
150
100
50
0
Množství přečtených dat Množství dat přečtené útočníkem / z cíle 90 80 70 60 50 40 30 20 10 0
from target
by attacker
• Ve skutečnosti jde jen o minimální množství dat (nevidíme vše)
Shrnutí • Metoda: – Pasivní monitorování perimetru sítě CESNET2 – Flow + Deep packet inspection
• Detekovány desetitisíce útoků denně – Většina neúspěšná, servery byly rychle záplatované
• Detekováno a nahlášeno mnoho zranitelných strojů – ~550 přes Warden – ~500 předtím ručně emailem
• Zpětná vazba od správců – Některé servery nepotřebovaly HTTPS – Našli jsme několik zapomenutých nepoužívaných serverů
CESNET2 (AS2852) • • • • • • • • • • • • • •
146.102.0.0/16 (VŠE) 147.228.0.0/16 (ZČU) 147.230.0.0/15 (TUL) 147.251.0.0/16 (MUNI) 147.32.0.0/15 (ČVUT) 158.194.0.0/16 (UPOL) 158.196.0.0/16 (VŠB) 160.216.0.0/15 (UNOB) 193.84.116.0/23 (CAS) 193.84.160.0/20 (UJV Řež) 193.84.192.0/19 (SLU) 193.84.32.0/20 (ČZU) 193.84.53.0/24, 193.84.55.0/24 (CUNI) 193.84.56.0/21 (CUNI)
• • • •
195.113.0.0/16 195.178.64.0/19 78.128.128.0/17 193.84.80.0/22
Test HB v CESNET2 # testovaných adres
# zranitelných
Síť 1
1659
5
Síť 2
65026
25
Síť 3
4100
3
Síť 4
4579
15
Síť 5
74617
267
Síť 6
5
0
Síť 7
2040
0
Síť 8
65534
98
Síť 9
8942
13
Síť 10
216
2
Síť 11
12
2
Síť 12
1016
2
Síť 13
65534
0
293280
432
Děkuji za pozornost Dotazy?