Detekce zranitelnosti Heartbleed pomocí rozšířených flow dat Václav Bartoš bartos@cesnet.cz 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. alert aggreg. 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. alert aggreg. logging
Monitorovací infrastruktura Warden alert sharing system Attack reports IPFIX Nemea framework ipfixcol preproc. alert aggreg. logging
Monitorovací infrastruktura Warden alert sharing system Warden Systém IPFIX pro sdílení bezpečnostních Nemea hlášení framework mezi zapojenými organizacemi preproc. Attack reports Operátoři tak mohou být upozorněni na bezpečností problémy ipfixcol v jejich sítích, i když třeba sami síť nemonitorují 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. Message length type 3 0-3 Message SSL ver. up to 16kB
Útok na Heartbleed TLS record: 24 for heartbeat msg. Message length type 3 0-3 Message SSL ver. up to 16kB Nikdy není šifrováno!
Útok na Heartbleed TLS record: 24 for heartbeat msg. Message length type 3 0-3 Message SSL ver. 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 req./resp. 16B Message length Payload length 24 3 0-3 1 2 Payload Padding SSL ver. up to 16kB
Útok na Heartbleed Odpověď na heartbeat požadavek nese stejný payload Request: Message length Payload length 24 3 0-3 1 Payload Padding Reply: Message length Payload length 24 3 0-3 2 Payload Padding
Ú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 Reply (OpenSSL): 24 3 0-3 16384 2 16384 Random chunk of memory
Útok na Heartbleed Jak detekovat Heartbleed: 1B 16B Message length Payload length 24 3 0-3 1 2 Payload Padding 20 and 16kB
Útok na Heartbleed Jak detekovat Heartbleed: 1B 16B Message length Payload length 24 3 0-3 1 2 Payload Padding 20 and 16kB message_length 1 + 2 + payload_length + 16
Útok na Heartbleed Jak detekovat Heartbleed: 1B 16B Message length Payload length 24 3 0-3 1 2 Payload Padding 20 and 16kB message_length 1 + 2 + payload_length + 16 message_length 20
Útok na Heartbleed Jak detekovat Heartbleed: 1B 16B Message length Payload length 24 3 0-3 1 2 Payload Padding 20 and 16kB message_length 1 + 2 + payload_length + 16 message_length 20 reply size = request size
Detekce Heartbleed útoků v CESNETu
Monitorovací infrastruktura Warden alert sharing system Attack reports IPFIX Nemea framework ipfixcol preproc. alert aggreg. logging
Monitorovací infrastruktura Exporter plugin Warden alert sharing system Attack reports IPFIX (flow + HB info) ipfixcol Nemea framework preproc. alert aggreg. logging
Monitorovací infrastruktura Exporter plugin Warden alert sharing system IPFIX (flow + HB info) ipfixcol Heartbleed Nemea framework preproc. Attack reports alert aggreg. logging
Plugin pro exportér Napsali jsme plugin pro exportér FlowMon Rozpoznává heartbeat pakety na základě: TCP port 443 HTTPS tcp_payload[0] = 24 heartbeat message type tcp_payload[1] = 3 major version tcp_payload[2] = 0..3 minor version tcp_payload[5] = 1 2 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 Neodpovídající políčka velikosti 2. message length < 20 Požadavek menší než minimální velikost 3. size of request packet!= size of reply packet Různá velikost požadavku a odpovědi 4. message length 8kB 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 funguje i při použití šifrování
Č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á 100000 90000 80000 70000 60000 50000 40000 30000 20000 10000 0 Počet heartbeat paketů za den Requests Heartbleed req. (size<20) Replies
22.4 24.4 26.4 28.4 30.4 2.5 4.5 6.5 8.5 10.5 12.5 14.5 16.5 18.5 20.5 22.5 24.5 26.5 28.5 30.5 1.6 3.6 5.6 7.6 9.6 11.6 13.6 15.6 17.6 19.6 21.6 23.6 25.6 27.6 Počet požadavků/odpovědí 100000 90000 80000 70000 60000 50000 40000 30000 20000 10000 0 Počet Heartbleed požadavků a odpovědí za den 3000000 Požadavky Odpovědi Špičky způsobeny jen 4 zdrojovými adresami
22.4 24.4 26.4 28.4 30.4 2.5 4.5 6.5 8.5 10.5 12.5 14.5 16.5 18.5 20.5 22.5 24.5 26.5 28.5 30.5 1.6 3.6 5.6 7.6 9.6 11.6 13.6 15.6 17.6 19.6 21.6 23.6 25.6 27.6 Počet útoků 7000 Počet párů IP adres za den 6000 5000 Alespoň 1 požadavek Alespoň 1 odpověď Obojí 4000 3000 2000 1000 0
22.4 29.4 6.5 13.5 20.5 27.5 3.6 10.6 17.6 24.6 1.7 8.7 15.7 22.7 29.7 5.8 12.8 19.8 26.8 2.9 9.9 16.9 23.9 30.9 7.10 14.10 21.10 28.10 4.11 11.11 18.11 25.11 2.12 9.12 16.12 Počet útoků 7000 Počet párů IP adres za den 6000 5000 Alespoň 1 požadavek Alespoň 1 odpověď Obojí 4000 3000 2000 1000 0
22.4 29.4 6.5 13.5 20.5 27.5 3.6 10.6 17.6 24.6 1.7 8.7 15.7 22.7 29.7 5.8 12.8 19.8 26.8 2.9 9.9 16.9 23.9 30.9 7.10 14.10 21.10 28.10 4.11 11.11 18.11 25.11 2.12 9.12 16.12 Počet útoků 500 Počet párů IP adres za den 450 400 350 Alespoň 1 požadavek Alespoň 1 odpověď Obojí 300 250 200 150 100 50 0
Množství přečtených dat 90 80 70 60 50 40 30 20 10 0 Množství dat přečtené útočníkem / z cíle 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?