Radoslav Bodó, Jakub Urbanec: (Ne)Bezpečnost v roce 2019
Bezpečnost se v poslední době zase vrací na svůj začátek. Po různých sofistikovaných útocích, zneužití zranitelností v aplikací a podobně jsme zase u původního problému: uživatelského vstupu. Ten může představovat prakticky cokoliv a některé překvapivé zneužitelné vstupy popsala úvodní přehledová přednáška semináře.
Před deseti lety se objevily útoky na počítače pomocí hardwarových zařízení, která jsou schopna simulovat klávesnici a velmi rychle přes uživatelský vstup napadnout počítač a nainstalovat malware. Tohle se může stát někde v kavárně, kde necháte počítač odemčený bez dozoru. Vy si ale všichni při odchodu zamykáte plochu, takže tohle riziko se vás netýká,
začal Jakub Urbanec.
Do sítě se ale dá dostat nejen přes nezabezpečený počítač, ale dnes do nich připojujeme mnoho dalších zařízení: třeba chytré televize. Pomocí běžného ovladače je možné zapnout vývojářský režim, povolit instalaci aplikací z neznámého zdroje a v prohlížeči stáhnout a nainstalovat vlastní APK. Proč televizi? Protože ty dnes mají nejen reproduktory, ale i mikrofony. Můžete ji tak snadno proměnit v odposlouchávací zařízení, přestože třeba ani nejste ve stejné místnosti.
Podobně je možné zneužít třeba reproduktory k ovládání domácího asistenta v cizím obýváku.
Podobné fyzické útoky na zařízení jsou dávno známé, ale objevují se jejich nové formy. Různá chytrá zařízení dnes používají mikrofony, které reagují nejen na zvuk, ale i na světlo.
Útočník tak může využít modulovaný laser a na vzdálenost delší než sto metrů zařízení „oslovit“. Můžeme mu říct, ať zhasne světla, zapne hudbu a otevře přední dveře,
varoval Urbanec.
Vstup do sítě či aplikace může zajistit i na první pohled nevinná funkce. Radoslav Bodó popsal chybu ve webové aplikaci, která dovolovala ovlivňovat vstup předávaný verzovacímu systému Git na pozadí. Nebylo sice možné spouštět jiný příkaz než git, ale i to už stačí.
Příkaz sám dokáže editovat svůj konfigurační soubor a nastavovat například informace o uživateli. Mezi nimi je ale také cesta k editoru, který se má spustit například pro vyplňování popisu nového commitu. Stačilo pak poslat několik webových požadavků, které umožnily nakonfigurovat nový repozitář, který místo editoru spustil shell a stáhl exploit,
popsal Bodó. Vývojáři by si měli uvědomit, že podobné verzovací nástroje jsou velmi mocné a neměly by být slepě používány jako bod důvěry.
Pro šifrování komunikace s GPG/PGP je potřeba k samotným klíčům asymetrické šifry přidat také prvek důvěry. Nemůžeme prostě použít nějaké klíče, které jsme našli na internetu. Musíme k nim dodat důvěru,
řekl Urbanec. K tomu vznikly key servery, což jsou jednoduché nástroje pro nahrání, sdílení a vyhledávání klíčů a jejich podpisů. Když byl tenhle koncept navrhován, důraz se kladl na nenapadnutelnost. Proto platí pravidlo, že se klíče nikdy nemažou. Můj 22 let starý klíč tam pořád ještě leží, přestože k němu dávno nemám privátní část.
Servery si ke každému klíči mohou uložit také podpisy od dalších uživatelů, čímž vzniká zmíněná důvěra. To je v pořádku a tak to má fungovat. Co když ale bude těch podpisů třeba 150 000?
V takovém případě bude import trvat déle než půl hodiny a klient ho nakonec odmítne kvůli velikosti přidat do klíčenky. To se dá při běžné komunikaci přežít, prostě se použije jiný způsob ověření. Teď si představte, že třeba v Debianu jsou balíky podepsané pomocí GPG a jejich aktualizace by po půl hodině selhala.
To už je skutečný problém, který podle Urbance navíc nemá řešení. Kdyby někdo takhle zaspamoval klíče Debianu nebo Red Hatu, je to skutečný problém.
OpenBSD podepisuje balíčky úplně jiným způsobem.
Problém šifrovacích klíčů je vůbec už v tom, odkud je bezpečně získáme. V posledních několika letech se hodně diskutuje o zranitelnostech procesorů, které se nebrání problémům vyplývajícím ze sdílení keší a kvůli dalším problémům s vykonáváním instrukcí mimo pořadí si může útočník říct, kterou část paměti jiného procesu si přeje přečíst. Objevují se navíc stále nové a nové zranitelnosti v dalších částech procesorů a když je zneužíváte dostatečně dlouho, přečte si užitečná data,
vysvětlil Bodó. Objeveny byly už také síťové karty, které mají přímý přístup do keše procesoru. Dokonce je možné vzdáleně přečíst L2 keš ve vašem počítači.
Tvůrci ransomware stojí před otázkou, jak přepsat původní soubory jejich zašifrovanými verzemi. Buď je možné obsah zapsat do už existujícího souboru, nebo vytvořit nový a ten starý smazat, případně je možné vytvořit nový soubor a přejmenovat. Microsoft se snaží alespoň částečně bránit pomocí nástroje Endpoint Detection and Response, který u vybraných adresářů umožňuje zvolit, které aplikace do nich mohou zapisovat. Pro adresář Dokumenty tak zvolíte jen Word, Průzkumník a dalších pár aplikací a ransomware má smůlu. Jenže ve Windows je staré dosovské volání, které dovoluje vytvořit takzvané junction points v souborovém systému. Útočník tak má možnost si požadované soubory přejmenovat a pak do nich může zapisovat.
Michal Kostěnec, Martin Kylián: Bezpečnost Wi-Fi sítí
Už v roce 1901 provedl Guglielmo Marconi první transatlantické rádiové spojení, tehdy přenesl tři tečky. Takovou zprávu mohl snadno zachytit kdokoliv. Dnes jsou naše požadavky jiné, dnes používáme malé radiotelegrafy implementované pomocí technologie Wi-Fi a chceme, aby byla jejich komunikace šifrovaná a zabezpečená pro každé dva komunikující partnery.
Prvním protokolem, který šifrování na Wi-Fi zajišťoval, byl WEP. Ten používá proudovou šifru RC4, kontrolu integrity zajišťuje pomocí CRC32 a může fungovat v režimu 64bitového nebo 128bitového klíče. Používá dvoucestný handshake, takže je pro útočníka velmi snadné získat data už v průběhu autentizace,
vysvětlil Michal Kostěnec.
Na začátku autentizace se použije inicializační vektor, který je vždy 24 bitů dlouhý. K němu se přidává ještě sdílený klíč, jehož délka je daná tím, zda pracujeme v 64 nebo 128bitovém režimu. Obě strany si pak vymění inicializační vektor a vzniká tak key stream, který se používá ke xorování dat,
vysvětlil Martin Kylián. Inicializační vektor má jen 24 bitů, což je velmi málo. To je jen šestnáct milionů variant. Ukázalo se, že už při přenosu 5000 vektorů je 50% šance na kolizi,
dodává Kostěnec. Po objevu této bezpečnostní mezery se začaly objevovat různé útoky na WEP.
Nejúspěšnější známý útok je založen na statistice a pro stoprocentní získání klíče je potřeba 40 nebo 80 tisíc inicializačních vektorů. Každý rámec má unikátní inicializační vektor. My je můžeme pasivně odposlechnout, pokud je na síti hodně intenzivně komunikujících klientů.
Druhou možností je vynutit si vysílání uměle pomocí šíření ARP paketů. AP je přijme a rozešle všem klientům, ale každému s novým inicializačním vektorem. Pokud mám deset klientů, získám deset vektorů.
S tímto postupem je možné získat libovolně komplexní heslo do sítě během několika minut.
V reakci na prolomení WEP v roce 2002 přišlo WPA. Už v tu chvíli se počítalo s příchodem WPA2, jenže tehdejší hardware na něj nestačil.
Předpokládalo se, že časem dojde k softwarovému povýšení. Protokol nadále používal RC4 a CRC32, ale nově přibyl čtyřcestný handshake a je poprvé použit protokol TKIP. Šifrovací klíč je prodloužen na 128 bitů a inicializační vektor má 48 bitů a zavádí se další algoritmus pro integritu jménem Michael. Autentizace může probíhat pomocí sdíleného hesla nebo takzvaná Enterprise, kde se používá autentizační server,
vysvětlil Kostěnec.
V té době se poprvé zavádí role suplikanta, což je démon pro správu klíčů a šifrování. Zároveň se zavádí pořadové číslo rámce, kdy je každý rámec šifrován jiným klíčem. Kromě toho přichází také ochrana proti replay útokům, tedy ochrana proti přehrání dříve zaznamenané komunikace. Algoritmus Michael je 64bitový a zavádí další integritu v podobě MIC. Administrativně je zařízeno, že pokud se v síti dvakrát za minutu objeví chybné MIC, dojde k přegenerování klíčů.
Jde o velkou kvalitativní změnu, která zkomplikovala útoky. Útočník není schopen získat heslo do sítě, podobně jako to dělal u WEP.
Stále je ale možné získat key stream, kterým se komunikace šifruje. Opět se používají krátké ARP rámce, u kterých známe téměř celý obsah. Musíme se ale vypořádat s omezeným počtem pokusů. Nakonec se ale ukázalo, že je tam opět malá skulina.
V kanálech pro QoS (kvalita služby) se tahle omezení neuplatňují. Útočník tak může podnikat mnohem větší množství dotazů ke získání key streamu. Jakmile jej má, může podepsat vlastní data a poslat je do sítě. Může pak provést třeba ARP poisoning a ovlivňovat tak provoz.
V roce 2004 pak přišel předpokládaný WPA2, který je tu s námi dodnes. Přestal se používat TKIP a nahradil jej AES CCNP, integrita se zvyšuje na 128 bitů. Stále to ale používá čtyřcestný handshake. V době zavádění nepodporovali nový protokol všichni klienti, takže se často používal takzvaný mixed mód, kdy se na jednom SSID používal WPA i WPA2.
Čtyřcestný handshake je podobný Diffieho–Hellmanově výměně klíčů a cílem je, aby se obě strany dohodly na šifrovaném klíči, který ale není přenášen otevřeným médiem.
Klient i přístupový bod sice znají společné sdílené tajemství v podobě hesla, ale my potřebujeme zajistit, aby každý klient používal jiné klíče pro své spojení. Klient se tedy nejprve asociuje, obě strany si vygenerují a předají náhodné číslo, podle kterého si vygenerují PTK pro šifrování další komunikace. Ve třetí zprávě se pak z přístupového bodu posílá GTK pro multicastový a broadcastový provoz, které je sdílené mezi všemi klienty. V posledním kroku pak klient potvrdí přijetí informací a pokud jsou obě strany schopné si zprávy dešifrovat, mají k dispozici klíče a přenos může začít. Pokud útočník odposlechne první dvě zprávy, má veškeré podklady pro následující útok hrubou silou.
Jedinou neznámou pak zůstane heslo k síti. Na jednom procesorovém jádře je možné hádat tisíce hesel za sekundu, na osmi grafických kartách je pak možné vyzkoušet zhruba tři miliony pokusů za sekundu.
Pro lámání hesla dokonce není nutné být blízko napadané Wi-Fi sítě. Každé zařízení totiž aktivně volá známé sítě v okolí, aby se k nim mohlo rychle připojit. Pokud tedy útočník vytvoří falešný přístupový bod se stejným jménem, klient se k němu začne připojovat. Nepodaří se mu to, protože uměle vytvořený přístupový bod nezná sdílené tajemství, tedy heslo sítě. Začátek komunikace ale proběhne a je tak možné zachytit první dvě zprávy, přestože máme jen jednu legitimní komunikující stranu. Dokonce je možné nastavit slabší šifrování, klientovi je to úplně jedno, toho zajímá jen název sítě. Po zachycení komunikace je zase možné začít hrubou silou prolamovat.
Pro WPA či WPA2 je tedy rozhodně vhodné mít velmi silné heslo, které se bude hrubou silou prolamovat velmi těžko. Takové heslo je pak ale zároveň velmi těžké přidat do dalšího zařízení, zejména pokud obsahuje spoustu speciálních znaků. Proto vznikl doplněk jménem WPS, kde probíhá autentizace pomocí osmi číslic. Zařízení se pak samo nastaví, klíče se přenesou a všechno se připraví automaticky.
Osm číslic je poměrně hodně, ale ukázalo se, že protokol po několika chybných zadáních klientovi oznámí, ve které polovině číselného hesla je chyba. Zároveň osmou číslici tvoří kontrolní součet, takže ta je známá. Tím se velmi snižuje množství kombinací. Kdybych hádal rychlostí jeden pokus za sekundu, tak do tří hodin mám k dispozici celý PIN.
Rozhodně je tedy dobrý nápad WPS na přístupovém bodu vypnout.
WPA2 Enterprise využívá autentizační server. Stále se používá čtyřcestný handshake, ale klient se v prvním kroku baví přímo s autentizačním serverem pomocí protokolu EAP. Posílá své údaje jako jméno a heslo. Pokud jsou správné, server vygeneruje tajemství, které pošle na přístupový bod. Stejné tajemství si zná i klient a pak se pokračuje dál.
Celá bezpečnost závisí na tom, zda komunikuji skutečně se správným serverem. To je možné ověřit jen pomocí důvěryhodného certifikátu vydaného správnou autoritou. Pokud klient odsouhlasí libovolný certifikát, je možné snadno podvrhnout přístupový bod s falešným autentizačním serverem, kterému zařízení dobrovolně předá jméno a heslo. Chyba je jednoznačně na straně špatně nastaveného klienta.
Protokol 802.11r umožňuje takzvaný bezvýpadkový roaming mezi přístupovými body stejné sítě. Nedochází pak ke ztrátě žádných dat. Klient musí vědět, že při přechodu k jinému přístupovému bodu s rozdílnou MAC adresou není potřeba provádět handshake a znovu vytvářet klíče.
Přístupový bod hned na začátku navazování komunikace posílá klientovi PMK ID, což je zahašované heslo k síti. Pokud tedy přijdu k neznámému bodu, který podporuje roaming, hned dostanu zahašované heslo, které můžu zkoušet prolomit hrubou silou.
V roce 2018 přišel standard WPA3, který přináší nový oportunistický režim šifrování. Ten zajišťuje, že se mezi klientem a přístupovým bodem šifruje, i když se používá otevřená síť bez hesla. Používá se Diffieho–Hellmanova výměna klíčů založených na eliptických křivkách.
Režim PSK je také nahrazen pomocí SAE (Simultaneous Authentication of Equals), kdy se začne mezi klientem a přístupovým bodem šifrovat výrazně dříve. Útočník pak už do komunikace nevidí a nemůže prolamovat hesla offline.
Kromě toho WPA3 přináší povinně podepsané managementové rámce, takže útočník nemůže snadno vytvářet vlastní zprávy a například deasociovat klienty podle svých potřeb. Podpora WPA3 nabíhá zatím velmi pozvolna.
Velmi brzy po představení WPA3 se objevila sada útoků nazvaná Dragonblood. Je tak možné například zahltit zařízeni při asociaci, v režimu zpětné kompatibility přejít na slabý protokol WPA, případně je možné provádět útoky postranním kanálem či časovací útoky. Hodně toho je už opraveno, většina je velmi těžká na realizaci, ale ukazuje to, že se další útoky opět objeví.
Přestože je WPA3 jednoznačně velkým krokem vpřed, WPA2 tu s námi podle autorů přednášky bude minimálně ještě 15 let.
Jan Chvojka: Certifikáty včera, dnes a zítra
Před několika lety bylo možné generovat certifikáty přímo v prohlížeči pomocí tagu <keygen>
, která ale skončila v Chrome 57 i Firefoxu 69. Zatím je k dispozici v Safari a Firefoxu ESR. Současný Microsoft Edge také už nepodporuje žádnou variantu. V současných prohlížečích je jedinou šancí využít javascriptovou knihovnu.
Ta umožňuje vygenerovat klíč, pomocí javascriptového volání předá žádost serveru a získá certifikát. Nakonec se na disku objeví soubor PKCS12, který musí uživatel naimportovat do systému. Vypadá to, že to je v současné době to správné řešení.
Prohlížeč není jediná platforma, na které se dá certifikát generovat. Klasickou možností je použití OpenSSL, což ale pro běžného uživatele není schůdná cesta. Některé autority mají vlastní nativní aplikace, obvykle jen pro Windows. Certifikační autority začaly používat protokol ACME, se kterým přišel původně Let's Encrypt. Současný trend je co nejvíc zjednodušit vydávání certifikátu.
Organizace obvykle projde ověřením, poté už o certifikáty žádá právě pomocí ACME.
Ještě nedávno byla platnost certifikátu omezena na tři roky, poté se hlasovalo o dalším zkrácení až na rok. To zatím neprošlo, tvůrci prohlížečů jsou pro, ale proti jsou téměř všechny autority.
Začal se ale výrazně rozšiřovat protokol ACME, který dovoluje obnovovat certifikát automatizovaně. Pokud by se doba platnosti stále zkracovala a neměli bychom ACME, bylo by hrůzostrašné neustále ručně certifikáty vyměňovat.
Pro autority je tedy jedinou šancí pro udržení v byznysu zavádět automatizaci.
CA/B fórum vytváří tlak na lepší validaci organizací po špatných zkušenostech s některými autoritami, které se podařilo přesvědčit k neoprávněnému vydání certifikátů. Bohužel to naráží na praktické problémy s telefony, kdy některá oficiální telefonní čísla končí na vrátnici, kde nikdo netuší, jak s validačním hovorem naložit.
Případně se autorita dovolá na hlasový automat, který ovšem mluví jen česky.
Postupně také umírají EV certifikáty, které tvořily základ byznysu mnoha autorit. Vystavení takového certifikátu znamená validovat nejen organizaci, ale i samotného žadatele.
Poznat dnes EV certifikát v prohlížeči není snadné, protože zmizel zelený proužek. Pokud si necháte zobrazit detailní informace, poznáte EV jen podle vydavatele. Pokud EV stojí víc a nijak se neliší, nedává smysl si je pořizovat. EV certifikáty to mají spočítané.
Vydáním certifikátu práce správce nekončí, ale je možné udělat další kroky pro zvýšení bezpečnosti. Je možné přidat do DNS záznamy typu CAA, který vyjmenovává autority oprávněné k vydání certifikátu pro danou doménu. Vedle toho je možné na serveru nakonfigurovat OCSP Stapling, který umožňuje držiteli certifikátu požádat autoritu o podepsaný záznam s platností a ten pak posílá klientovi. Typická doba platnosti je sedm dnů, během kterých uživatel nezaznamená výpadek OCSP responderu.
Databáze Certificate Transparency umožňuje správci kontrolovat, zda někdo nevydal neoprávněně certifikát pro jeho doménu. Je možné to hlídat automatizovaně pomocí Cert Spotter, aplikace Sectigo crt.sh nebo Facebook CT Monitor.
Radoslav Bodó: WebAuthn is comming to town!
V současné době se nejen na webu používá několik autentizačních metod. Tou tradiční je jméno a heslo, které se dá rozšířit o druhý faktor. Druhou variantou jsou certifikáty X.509, které naráží na problémy s uživatelskou přívětivostí a podporu v aplikacích. Rozšířené jsou pak systémy SSO, které přes centrální systém dovolují přihlášení do mnoha různých aplikací. To vám umožňuje eliminovat potřebu desítek či stovek hesel pro různé služby, ale zavádí to kritické místo, které když nefunguje, nedostanete se nikam.
Od loňského roku máme v této oblasti nového hráče, který zatím není příliš známý. Jedná se o standard WebAuthn, který vyvinulo konsorcium FIDO Alliance. Cílem je vytvořit standard pro přihlašování uživatelů do aplikací a webových služeb na základě kryptografie veřejného klíče. Není to magická krabička, která vyřeší všechny vaše problémy. Na druhou stranu má potenciál změnit celou hru.
Už dnes je WebAuthn k dispozici v prohlížečích Chrome, Firefox, Edge a v některých jazycích jako Java, PHP, Python, Ruby, Go a dalších.
Umožňuje vyměnit nutnost uživatele starat se o heslo, za povinnost starat se o nějaké zařízení. V tom jsou uživatelé obvykle lepší, protože se dokáží postarat o své vlastní klíče k bytu.
Může jít o specializované zařízení ve formátu flash disku, nebo to může být chytrý telefon, případně TPM čip uvnitř zařízení. WebAuthn zlepšuje odolnost služeb proti útoku hrubou silou, eliminuje útoky typu MitM a nabízí aplikacím odolnost proti phishingu.
Na rozdíl od standardu X.509 se z autentizačního procesu vynechává TLS terminátor a definuje se, jak má vypadat komunikace klienta (prohlížeče) přímo s koncovou aplikací. Vývojář má v aplikaci možnost zavolat rozhraní zabudované do prohlížeče a ověřit uživatelovu identitu.
Volitelně může být autentikátorem buď přímo počítač nebo nějaké externí zařízení. To je značné zjednodušení, protože se tu neuplatňuje přenosová vrstva a počítač se autentizuje přímo proti koncové aplikaci.
Při doplňování podpory WebAuthn musí být splněno několik věcí: prohlížeč musí umět komunikovat s autentikátory, uživatelské úložiště musí mít položky pro uložení těchto zařízení a aplikace samotná pak musí být doplněna o knihovnu podporující celý mechanismus. Není to tak složité, jak se může zdát. Podpora v prohlížečích je už napsaná, stejně jako podpora pro aplikace v nejpoužívanějších jazycích.
Programátor musí jen rozšířit svou tabulku uživatelů o informaci o autentikátoru a zajistit komunikaci s prohlížečem.
Aplikace pak může prohlížeč požádat o registraci nových přihlašovacích údajů, prohlížeč osloví autentikátor a požádá ho o vytvoření nových klíčů. Veřejným klíčem je pak podepsán náhodný řetězec v původní žádosti a ten je vrácen přes prohlížeč serveru. Server ověří, že dostal zpět správná data a otisk veřejného klíče si uloží k sobě do databáze.
Při přihlášení se prohlížeč zeptá aplikace na potřebné volby, které předá k potvrzení autentikátoru a pošle je zpět aplikaci. Aplikace pak dokáže ověřit, že výzva byla podepsána známým už registrovaným klíčem, čímž je uživateli přiřazena správná identita a dojde k přihlášení. WebAuthn říká, co si má prohlížeč s aplikací říct, ale neříká, jak. Na vývojáři je, aby si data zabalil a nějakým způsobem přenesl.
Je možné například použít data odesílaná v rámci formuláře na stránce.
Taková autentizace má mnoho dalších možností, například je možné se obejít úplně bez uživatelského jména a jako klíčenku je možné použít chytrý telefon. Cílem je, abyste si u poskytovatele identity neregistrovali nové heslo, ale jen přidáte autentizační zařízení.
Součástí standardu je i mechanismus, kterým si umí aplikace vynutit použití konkrétního typu autentikátoru. Facebook se asi spokojí s čímkoliv, ale nějaký citlivější systém může vyžadovat konkrétní token vydaný vaší společností.