30. června 2018 Report URI, XSS, CSP

Začal jsem pracoval na Report URI, na nástroji, který sbírá reporty z prohlížeče v reálném čase. A to už vlastně před rokem. 27. června 2017 jsem totiž udělal první změnu v kódu. O té doby jsem přidal 709 402 řádků a odstranil jich 1 981 599.

Logo Report URI

Službu Report URI založil Scott Helme někdy v roce 2015. Ten rok jsme se potkali na konferenci DEF CON v Las Vegas a krátce pokecali o počasí a XSS. Od té doby Report URI často zmiňuji ve svých přednáškách, přičemž lehce zapamatovatelný a úderný název jedné z nich, XSS PHP CSP ETC OMG WTF BBQ, se Scottovi zalíbil natolik, že začal podobný název používat také. A to už něco znamená, že!

CSP STS PKP SRI ETC OMG WTF BBQ… parádní název Scottovo přednášky

Foto: Scott Helme

Poté, co jsem ve Skype dělal na různých platebních systémech, měnil a vylepšoval ve Slevomatu nejen hashování hesel a pracoval jako „security engineer“ v Apiary (teď už Oracle), jsem se víc věnoval školení a přednášení a začalo mi tak trochu zase chybět programování aplikací. Často něco bořím (ehm, zkoumám) a hledal jsem něco dalšího, co bych mohl naopak stavět.

Jednoho pozdního letního večera léta Páně 2017 mi Scott zavolal a zeptal se Hej, chceš na Report URI dělat se mnou? Bez váhání jsem odpověděl Si piš. A tak jsme na tom začali makat spolu. Konec příběhu. Teda vlastně ne, tenkrát veškerá ta sranda teprve začala.

Report URI je nástroj sbírající reporty z prohlížeče. V praxi to znamená, že když na váš web přijde návštěvník a jeho prohlížeč na něm zjistí nějaký bezpečnostní prohřešek, tak ten samý prohlížeč vám o tom pošle detailní report. Paráda, co?

Aktuálně je v prohlížečích asi 5 fíčur (a přibývají), které takový report umí někam poslat. Prohlížeče vás mohou upozornit, pokud jim to přikážete, že se něco stalo, například:

  • Tato stránka chtěla nahrát skript, který bych nahrávat neměl
  • Tuhle stránku jsem nahrál přes HTTPS, ale obsahuje obrázek vložený přes HTTP (tomu se říká mixed content a dá se detekovat posíláním HTTP hlavičky Content-Security-Policy-Report-Only: default-src https:; report-uri https://….report-uri.com/ poté, co jste váš web přesunuli na HTTPS)
  • Nebo dokonce i na této stránce jsem detekoval útok Cross-Site Scripting
  • A mnohem víc…

Agregátor takových reportů si celkem pracně můžete postavit i sami, nebo můžete použít službu jako např. Report URI. Nástroj na sběr reportů jsem si začal nejdřív samozřejmě vytvářet sám, ale i z mého webu s pár návštěvníky přicházelo strašně moc reportů, které jsem nakonec úplně ignoroval. A to se bavíme jen o 10 reportech za den. Report URI má grafy a filtry a vůbec nabízí lepší přehled toho co se na vašem webu stalo. Takže jsem nakonec svůj rozpracovaný nástroj zahodil a začal používat a doporučovat Scottovo službu. Tohle bylo nějaké 2 roky předtím, než mi Scott dal nabídku, kterou jsem nemohl odmítnout.

Grafy CSP na Report URI

Grafy z reportů Content Security Policy

„Nové“ Report URI jsme spustili 1. listopadu 2017 a při té příležitosti zároveň prasklo, že v tom s námi jede i Troy Hunt! Troy již několik let za sebou získává ocenění Microsoft MVP (Most Valuable Professional), je zároveň i Regional Director pro cloud a bezpečnost (to je skupina na Microsoftu nezávislých profíků, ne pozice ředitele, přesně to znamená tohle) a autor kurzů na Pluralsightu. Má na svědomí i Have I Been Pwned? – službu, kterou můžete (a měli byste) používat pro sledování, jestli vaše e-mailová adresa, doména nebo nějaké heslo nebylo součástí známého úniku dat. Ten web (i téma) můžete důvěrně znát také z mých přednášek a článků.

Za tu dobu, co na Report URI pracuju, přibylo už docela dost nových vlastností:

  • Předplatné – pokud vám nestačí 10 tisíc reportů zdarma, můžete si jich přikoupit víc (oznámení)
  • Podpora pro týmy a 2FA
  • CSP Wizard, pomůže vám s konfigurací Content Security Policy, stačí klikáním povolovat nebo blokovat domény (víc o wizardu)
  • Drobnosti jako lepší grafy, ve kterých můžete skrývat věci, které zrovna nechcete vidět
  • Filtrování s hvězdičkovou syntaxí
  • Report URI JS pro posílání reportů ze stránek, které jsou hostované na platformách jako např. GitHub Pages a Ghost Pro

Předělali jsme i infrastrukturu, abychom zvládali narůstající počet reportů, které zpracováváme. Začali jsme používat Cloudflare Workery, aby to bylo všechno trochu rychlejší. Aktuálně máme něco přes 40 serverů pro veřejnou část a pak i nějaké privátní instance pro firemní zákazníky. Ve špičkách zpracováváme přes 15 tisíc požadavků za vteřinu. Celkově nám prohlížeče návštěvníků poslali přes 60 miliard reportů. Další čísla v článku Report URI: A week in numbers.

Celkový počet požadavků za posledních 24 hodin: 437 699 578; 41,21 milionu za hodinu ve špičce

Celkový počet požadavků za posledních 24 hodin: 437,67M; 41,21M za hodinu ve špičce

Naši službu (a posílání Content Security Policy reportů) už používá docela dost webů, např. jedna holandská banka („Marketingovému týmu fungují kampaně a bezpečáci dostávají další info“ – Jesse Houwing), a další ji plánují brzo nasadit, jako např. vývojáři EVE Online, hry z kategorie „massively multiplayer online role-playing game“ („A to všechno bylo díky @reporturi o dost jednoduší!“ – Stefán Jökull Sigurðarson).

A aby se nezapomnělo, Report URI vyhrálo cenu „Best Emerging Technology“ v anketě SC Awards Europe 2018, která oceňuje to nejlepší z oblasti bezpečnosti. Pořád tomu nemůžu nějak uvěřit, ale přímo z místa činu to potvrdili ScottTroy, krátce se o Report URI zmínil i SC Magazine UK, takže to asi bude pravda. Tak teda na zdraví! 🥂

Pokud byste se chtěli dozvídat o dalších novinkách, tak sledujte blog Scotta Helmeho. Já jen mažu kód, he he. Jo a ty 2 miliony smazaných řádků? Většina z nich byla odstraněna v této změně:

+5,005 −1,422,024 ■■■■□

Smazat 1,4 milionu řádků kódu 3 týdny po nástupu? Co se může stát…

To byla knihovna Microsoft Azure SDK, kterou jsme celou nepotřebovali, resp. potřebovali jsme jen Azure Storage SDK.

Jop, pracovat na Report URI je sranda.


Mohlo by vás také zajímat

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:

Bezpečnost PHP aplikací
(11.–12. prosince 2018 Praha)

HTTPS pro vývojáře a správce
(13. prosince 2018 Praha)