22. května 2017

Druhé číslo newsletteru převážně o bezpečnosti, bezpečném vývoji převážně webových aplikací a bezpečnosti uživatelů.

Minulý týden světem bezpečnosti stále hýbal ransomware WannaCry(pt), který lehce zastínil i další zajímavé události. Tady je přehled toho, co mě zaujalo.

Pokud chcete newsletter dostávat pravidelně, tak využijte export všech článků nebo jenom newsletterů ve formátu Atom.

TLS, SSL, HTTPS

Certifikační autorita Symantec, která v minulosti vystavila minimálně 30 tisíc falešných certifikátů, se předběžně dohodla s Googlem. Ten původně navrhoval zkrátit platnost certifikátů od Symantecu na maximálně 9 měsíců a u tzv. EV certifikátů nezobrazovat příznak Extended Validation (tedy název firmy). Dohoda říká, že od 8. srpna budou certifikáty Symantecu vystavovány jednou nebo více nezávislými certifikačními autoritami („Managed CAs“), které budou moci vystavovat i EV certifikáty. Tyto „Managed CAs“ mohou být křížově podepsány Symantecem tak, aby se využily stávající kořenové certifikáty v prohlížečích. Certifikáty vydané Symantecem po 1. červnu 2016 budou fungovat i nadále. Ty starší by od Chrome 65 (datum vydání 18. ledna 2018) neměly být platné. Nezávislé certifikační autority budou muset od 1. února 2018 také ověřovat žádosti o certifikáty, do té doby mohou použít informace Symantecu. Ten musí vytvořit úplně novou certifikační autoritu, která bude muset být znovu přidána do úložišť důvěryhodných certifikátů.

Firefox i Chrome od ledna zobrazují varování na stránce načtené pomocí nezabezpečeného HTTP pokud je na ní políčko pro zadání hesla. To samozřejmě negativně ovlivnilo i falešné stránky loudící od uživatelů jejich přihlašovací údaje a tak počet phishingových stránek na HTTPS stoupl třikrát. Certifikáty jsou dnes zdarma dostupné pro každého (např. od certifikační autority Let's Encrypt), tedy i pro podvodníky. Mohlo to být ale i tím, že phishingové stránky jsou často hostované na hacknutých webech, které na HTTPS přešly. V každém případě doporučení že bezpečný web poznáte podle HTTPS a zámečku již dlouho neplatí.

Počet uživatelů, kteří ignorují varování Chrome o chybě při připojení na HTTPS servery klesl na 33 % (Windows) a 17 % na Androidu. V roce 2013 to bylo 70 %. To kdybyste potřebovali nějaká čísla do prezentací. Kdybyste sháněli i nějaká data nebo roky, tak je najdete v přehledu historie SSL/TLS. Mohlo by vás překvapit, že protokol SSL 3 je z roku 1995 a TLS 1.2 z roku 2008.

Certifikační autorita Let's Encrypt měla v pátek několikahodinový výpadek OCSP (Online Certificate Status Protocol) serverů. Ty slouží k ověření platnosti certifikátů, prohlížeč na ně může po obdržení certifikátu poslat dotaz aby zjistil, jestli certifikát nebyl revokován (zrušen). Browsery to většinou nedělají, protože to zdržuje načtení stránky, místo toho se používá technika zvaná OCSP Stapling. Spočívá v připojení („přicvaknutí“) OCSP odpovědi rovnou k počátečnímu navázání šifrovaného spojení mezi prohlížečem a serverem, takže browser má informaci hned a nemusí nikam nic posílat.

Jenže implementace OCSP Staplingu v serveru Apache je chybná. Pokud Apache obdrží chybu při dotazu na OCSP server, tak tou chybou nahradí stále platnou předchozí odpověď, ačkoliv by nemusel a neměl. Nginx začne „přicvakávat“ OCSP odpověď až když ji získá, takže v klidu pošle první odpověď bez OCSP statusu. To se dá řešit stahováním odpovědi mimo nginx a tomu pak říct, že ji má hledat v souboru, na který ukazuje direktiva ssl_stapling_file, ale ta nepodporuje více certifikátů pro jeden web. Více různých certifikátů se používá pro duální nasazení RSA („běžných“) a ECDSA certifikátů (ty používají tzv. eliptické křivky).

Výpadek Let's Encrypt popsal šéf Josh Aas. Ve zkratce: pro OCSP požadavky se používá kódování Base64, ve kterém se mohou vyskytnout dvě lomítka za sebou. V Let's Encrypt upravili webové servery tak, aby ze dvou lomítek nedělaly jen jedno, což je sice standardní chování, ale pro OCSP nevhodné. Jenže některé prohlížeče posílají na OCSP servery Let's Encrypt požadavek se dvěma lomítky mezi doménou a Base64 daty (http://ocsp.int-x3.letsencrypt.org//<base64>), což po „opravě“ znamenalo, že Base64 data nešla dekódovat a servery vracely chybu. Ta se nekešovala na CDN a tak skoro všechny požadavky šly až na servery Let's Encryptu, ty nápor nezvládly a celá infrastruktura Let's Encrypt se položila. Nešly ani vystavovat certifikáty a problémy hlásili i uživatelé webového serveru Caddy. Ten nemohl při startu kontaktovat Let's Encrypt pro vystavení nového certifikátu a tak se nespustil. Autor již vydal novou verzi, která se spustí i když nejde vystavit nový certifikát za předpokladu, že starý expiruje za více než 7 dní.

Prohlížeče

Mozilla plánuje z Firefoxu odstranit podporu pro Encrypted Media Extensions (EME) na nešifrovaném HTTP a nadále pro EME vyžadovat HTTPS. Chrome to samé udělal v aktuální verzi 58, Mozilla to chce stihnout do konce roku. Encrypted Media Extensions dovoluje používat zašifrovaný obsah ve videu v HTML5, využívá toho například společnost Netflix, která se zabývá mj. distribucí video obsahu po Internetu.

Safari od verze 30 (aktuálně jako Technology Preview) podporuje bezpečnostní hlavičku X-Content-Type-Options: nosniff. Tu by ze serveru do prohlížeče měly posílat všechny aplikace a hlavně ty, do kterých uživatelé mohou nahrávat své soubory. Některé prohlížeče totiž očmuchávají obsah dat a když se jim zdá, že to vypadá třeba jako JavaScript, tak to začnou za JavaScript považovat. A to i přesto, že to byl původně obyčejný textový soubor, který do prohlížeče dorazil s typem text/plain. Útočník by tak mohl například pomocí nahraného textového souboru spustit útok XSS a získat obsah cookies uživatele. Hlavička X-Content-Type-Options: nosniff takové „očmuchávání“ vypíná. Jestli hlavičku posíláte si můžete zkontrolovat na securityheader­s.io. V Safari Technology Preview 30 je nově také Subresource Integrity (SRI), tedy ochrana proti modifikaci souborů např. na CDN. SRI jsem detailněji popisoval minule.

Chyby a zranitelnosti

Populární nástroj pro správu obsahu (CMS) Joomla! verze 3.7 obsahuje jednoduše zneužitelnou chybu SQL Injection v komponentě com_fields. Chyba byla opravena ve verzi 3.7.1. SQL Injection mizerům umožní získat data z tabulek v databázi, ke kterým běžně nemají přístup, například uživatelská jména a hesla. Útok SQL Injection a ochranu proti němu si ukazujeme i na školení Bezpečnosti webových aplikací (nejbližší termín: termín zatím nevypsán). Aktualizace 22.5.: objevil se kód, který chybu umí zneužít.

Hacker s přezdívkou Procode701 nahlásil Uberu před sedmi měsíci chybu, která umožňovala unést účet jakémukoliv uživateli pomocí chyby v resetu zapomenutého hesla. Taková obnova by měla probíhat tak, že zadáte e-mailovou adresu, aplikace na ni pošle náhodně vygenerovaný a unikátní odkaz, vy na něj kliknete a můžete nastavit nové heslo. Uber ovšem náhodně vygenerovaný identifikátor zaslal zpátky i do prohlížeče uživatele. Útočník tak mohl zadat e-mailovou adresu jakéhokoliv zákazníka Uberu a z odpovědi serveru si zjistit i vygenerovaný identifikátor. Ten pak ručně mohl přidat do odkazu, načíst danou stránku a heslo k zadané adrese nastavit ve svém prohlížeči.

WordPress má bug bounty program. Když v něm naleznete nějakou bezpečnostní chybu, můžete ji nahlásit a získat finanční odměnu. Platí to i pro projekty BuddyPress, bbPress, GlotPress a WP-CLI a do programu odměn jsou zahrnuty hlášení bezpečnostních chyb na následujících doménách: wordpress.org, bbpress.org, wordcamp.org, buddypress.org, glotpress.org, api.wordpress.org. Detaily najdete na platformě HackerOne, na které WordPress svůj bug bounty program provozuje.

Nové verze a vlastnosti

End-to-End šifrování zajistí, že k vašim zprávám nemá přístup ani provozovatel serverů, přes které se posílají. Takové šifrování používá například WhatsApp, který je postaven na Signal Protocolu. Šifrování End-to-End používá i Facebook Messenger pro tzv. Secret Conversations, které jsou dostupné pro Android a iOS. Ty Facebook spustil již loni v létě, ale až teď mají uživatelé možnost používat více zařízení, což znamená, že zprávy můžete dostávat zároveň na mobil i na tablet. Podobně to umí i komunikátor Signal, podle kterého se jmenuje onen protokol, ale má navíc i klienta pro Chrome, který můžete ovládat všemi deseti i na počítači.

Nejlepší™ šifrovací knihovna pro PHP defuse/php-encryptionnovou verzi 2.1.0. Ta usnadňuje načítání šifrovacích klíčů ze souborů, ignoruje odřádkování (a další „bílé znaky“) na konci souborů s klíči. Pokud v PHP šifrujete data, měli byste používat tuto knihovnu, autoři se vyznají v kryptografii a snaží se knihovnu vytvářet tak, aby bylo těžké ji použít špatně.

Novou knihovnu pro šifrování v Javě a C++ s využitím cloudových úložišť šifrovacích klíčů vytvořila parta kryptologů a vývojářů z Google. Jmenuje se Tink, zatím není dokončená a nemá žádný release, ale vypadá nadějně právě díky podpoře úložišť jako např. Amazon KMS. V budoucnu by knihovna měla podporovat i Go, Python a JavaScript. Asi by se slušelo zopakovat, že šifrovací knihovny byste si nikdy neměli psát sami, je totiž velmi jednoduché navrhnout algoritmy, které vy sami nedokážete prolomit. Ale to neznamená, že to nedokáže ani váš soused na síti.

Když se vám při přihlašování na vzdálený SSH server objeví hláška, že se změnil klíč, pátrate po důvodu? Naprostá většina uživatelů nejspíš ne. Toho právě využívá SSH MITM, patch pro OpenSSH, který z něj udělá proxy server umožňující zachytávat procházející provoz, včetně hesel. SSH MITM se hodí jako nástroj pro testování nejen ostražitosti uživatelů při přístupu na vzdálené servery.

Úniky dat

Kanadská telekomunikační společnost Bell přiznala, že někdo získal 1,9 milionu uživatelských účtů z jejich databáze (ve skutečnosti to bylo 2,2 milionu). Data byla volně ke stažení na Internetu, útočníci vyhrožují uvolněním dalších dat, pokud Bell nebude „spolupracovat“ (asi překlep, chtěli spíš napsat „platit“). Podobný incident se odehrál počátkem roku 2014, tenkrát někdo získal zhruba 21 tisíc uživatelských účtů ze systémů dodavatele Bellu.

Skoro 700 tisíc účtů a hesel hashovaných pomocí MD5 získal útočník ze serveru na sdílení fontů DaFont. Využil k tomu zranitelnost SQL Injection, která mizerovi umožňuje upravit dotazy zasílané do databáze a získat tak data, která běžně nejsou zobrazována. Data uniklá z DaFont i ze společnosti Bell jsou již nahrána do služby Have I Been Pwned, tam můžete zjistit, jestli v úniku nebyl i váš e-mail a případně si nechat zasílat notifikace nebo prohledávat celou vaší doménu. Hashovací algoritmus MD5 je pro ukládání hesel zcela nevhodný, dovoluje útočníkům generovat miliardy hashů za vteřinu a porovnávat je s těmi, které získali z databáze a tím tak získat hesla uživatelů, kteří je často používají i třeba pro přístup k e-mailovým schránkám.

120000 hashovaných hesel ze seznamky PureMatrimony uniklo ze systémů dodavatele. Data byla volně ke stažení, hesla byla hashována opět pomocí nevhodného algoritmu MD5, překvapení!

Společnost DocuSign vytvářející software pro elektronické podepisování potvrdila, že kdosi získal seznam e-mailových adres uživatelů, kteří u DocuSignu měli účet. Seznam byl následně použit k rozesílání phishingu a zavirovaných příloh. Pokud vám kdykoliv dorazí nějaký wordovský soubor, který po vás bude chtít z nějakého důvodu povolit makra ve Wordu, tak to nedělejte, i kdyby vám slibovali hory+doly. Pravděpodobně je to nějaký zákeřný soubor, který vám pak zaviruje počítač.

Volně přístupná MongoDB databáze obsahovala (a nejspíš stále obsahuje) přes 560 milionů uživatelských účtů a hesel, z toho necelých 250 milionů unikátních. Jenže to je jen „kombo“ – kompilace z předchozích úniků dat, podobně jako seznamy nazvané „Anti Public“ a „Exploit.in“. Troy Hunt, provozovatel Have I Been Pwned, zjistil, že naprostá většina (98 %) účtů již v Have I Been Pwned je, takže tento nový seznam importovat nebude.

Společnost Zomato, vytváří aplikaci pro hledání restaurací, v létě 2014 koupila českou službu Lunchtime.cz i slovenskou Obedovat.sk. Ve čtvrtek Zomato oznámila, že si někdo odnesl 17 milionů uživatelských účtů včetně hesel, která byla hashována zcela nevhodnou a příliš rychlou funkcí MD5, překvapení? K heslu byla přidána kryptografická sůl (salt), ačkoliv mluvit o dvou znacích jako o „soli“ není správné. Salt musí být unikátní pro každého uživatele a heslo, aby si útočník nemohl nastavit například Password123 a pouhým pohledem do databáze nemohl zjistit, kdo má stejné heslo jako on. Dva hexadecimální znaky mohou obsahovat pouze 256 kombinací, což je pro miliony uživatelů naprosto nedostačující. V prohlášení firmy stojí, že berou bezpečnost velmi vážně a já začínám mít pocit, že když firma tohle musí prohlašovat, tak že to není tak úplně pravda. Útočník prý chybu objevil před rokem, nahlásil ji, ale firma report zcela ignorovala. Zomato se začalo o incident zajímat až ve chvíli, kdy hacker začal data prodávat. Ten nakonec nabídku smazal výměnou za příslib, že firma spustí „dospělý“ bug bounty program, ve kterém bude nahlášené chyby finančně odměňovat.

Soukromí

Twitter mění zásady ochrany osobních údajů, nové budou platit od 18. června. Zároveň spustil nové nastavení personalizace a rozšířil nastavení vašich údajů. Podívejte se, co všechno o vás Twitter ví a co všechno můžete vypnout. Pro některé bude překvapením, že Twitter na Androidu zjišťuje vaše nainstalované aplikace a používá to pro personalizaci obsahu, který vám nabízí, ale nebojte, i to lze vypnout. Když už v tom budete, podívejte se do nastavení, jestli nemáte nevědomky zapnuté třeba sdílení polohy. Patřičnou péči věnujte i seznamu aplikací, které mají přístup k vašemu účtu a ty neznámé nebo nepoužívané odstraňte. Nebo smažte rovnou všechno, když aplikace bude potřebovat přístup, tak vás o něj požádá. Často se totiž stává, že aplikaci někdo hekne nebo její autor dostane nabídku, kterou nemůže odmítnout, a pak za vás tweetuje třeba spam.

Akce

V estonském Tallinnu proběhlo před pár týdny mezinárodní cvičení věnující se kybernetické bezpečnosti nazvané Locked Shields. Od roku 2010 ho organizuje NATO a letos ho český tým vyhrál, gratuluju! Jak takové cvičení probíhá popisují Radka Nepejchalová a Martin Kunc: Radka měla na starosti e-shop, na kterém protivník úspěšně zneužil chybu SQL Injection, Martin pečoval o (nebo patchoval?) DNS a VPN servery.

V úterý 30. května pořádá česká větev sdružení OWASP v Praze další setkání nejen o webové bezpečnosti. Vstup (a pizza) zdarma, registrace nutná. Mluvit se bude o JavaScriptu, mobilních aplikacích, WordPressu a Internet Exploreru, těším se! Pozvání přijal například Michele Orru', hlavní vývojář frameworku BeEF, který tak rád používám ve svých přednáškách Aktualizace 23.5.: Michele Orru' bohužel nedorazí.

Aktualizace článku

27. května 2017 Popis výpadku Let's Encrypt odkazuje na oficiální post-mortem, ne na komentář na Hacker News

23. května 2017 Michele Orru' na akci OWASPu bohužel nedorazí

22. května 2017 Přidán odkaz na exploit na Joomlu

Michal Špaček

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu: