Zřeknutí se odpovědnosti : Vytvořil jsem PfP: hesla bez bolesti jako koníček, mohlo by to být považováno za konkurenta LastPass.
Byl jsem zkoumání bezpečnostních problémů několika správců hesel při mnoha příležitostech. Zejména jsem doposud hlásil dvanáct bezpečnostních problémů Lastly a analyzoval designová rozhodnutí, která k nim vedla. Takže i když paj28 poskytl velmi dobrou obecnou odpověď na správce hesel, mohu uvést několik podrobností.
Když lidé hovoří o bezpečnosti online správců hesel, obvykle se zaměřují na zabezpečení serveru. Důraz je kladen na to, jak snadné je kompromitovat server a co se pak stane. Toto je však pouze jeden vektor útoku, protože útok na vaši místní instanci správce hesel může vést ke stejným výsledkům. Ve skutečnosti může být útok na rozšíření prohlížeče slibnějším postupem, protože data jsou již zde dešifrována a nezanecháte stopy v žádných protokolech.
Podívejme se na tyto dva aspekty samostatně.
Útok na rozšíření prohlížeče
V rozšíření prohlížeče LastPass je spousta historických údajů o chybách zabezpečení. Všechny tyto chyby zabezpečení mohou zneužít libovolné webové stránky. Přinejmenším to jsou:
Všimli jste si zde nějakého vzoru? LastPass už roky bojuje se zabezpečením jejich funkce automatického vyplňování a omezení přístupu k jejich internímu API. Pokaždé, když nová zpráva prokázala, že jejich předchozí oprava byla neúplná.
Nyní není neobvyklé, že správci hesel nedokážou bezpečně implementovat automatické vyplňování, většina z nich měla při kontrole problémy v této oblasti. I když je zcela vyloučeno, tyto problémy jsou natolik běžné, že jsem dokonce sestavil seznam s doporučeními, abych se vyhnul pasti.
Ale problémy s interním API jsou docela pozoruhodné. LastPass vystavuje toto API webům mnoha různými způsoby. Má to být omezeno na lastpass.com, ale logika je tak složitá, že omezení byla v minulosti několikrát obcházena. A zatímco LastPass dělal vše pro to, aby snižoval závažnost jejich oficiálních oznámení, každý z těchto problémů umožňoval webům číst všechna hesla najednou. Ještě horší je, že poslední zpráva od Tavise Ormandyho dokázala, že interní API může být použito k tomu, aby binární komponenta LastPass spustila libovolný kód na počítači uživatele. Totéž lze pravděpodobně udělat se všemi předchozími chybami, které vystavovaly interní API.
Dalo by se samozřejmě zeptat, proč LastPass nedokázal správně omezit přístup k internímu API. Lepší otázkou však je, proč je toto API vůbec vystaveno webovým stránkám. Je to proto, že významná část funkce LastPass není obsažena v rozšíření, ale spíše se spoléhá na to, že bude fungovat web LastPass. To je velmi problematické rozhodnutí o designu, ale zatím se LastPass nezdál zájem o jeho opravu.
Útok na data na straně serveru
Uveďme to velmi jasně: serveru nedůvěřujeme. Není to tak, že bychom společnosti LogMeIn, Inc., zvláště nevěřili - přinejmenším ne více než jakékoli jiné společnosti. Ale naše hesla jsou velmi citlivá data a dokonce i ta nejetičtější společnost může mít nepoctivého zaměstnance. Přidejte k tomu možnost, že americké úřady požadují, aby poskytly vaše údaje, něco, co ani nemusí být nutně spojeno s vyšetřováním trestné činnosti. Nezáleží na tom, že jejich servery budou napadeny hackery, jak se to již stalo jednou.
Je tedy velmi důležité, aby vaše data na serveru byla šifrována a zbytečná pro kohokoli, kdo by podržte to. Co ale může útočníkům zabránit v dešifrování? Přesně jedna věc: neznají vaše hlavní heslo, které se používá k odvození šifrovacího klíče. Základní otázka tedy zní: chrání LastPass dostatečně vaše hlavní heslo a šifrovací klíč?
V této oblasti nevím o žádném propagovaném výzkumu, ale o svém vlastním, většina z toho je zapsána v této blogový příspěvek. Můj závěr zde: LastPass zde trpí řadou konstrukčních nedostatků, některé jsou nyní vyřešeny, zatímco jiné jsou stále aktivní.
Bruteforcing hlavního hesla
Pokud se útočníci dostali do rukou spousta šifrovaných dat, nejpřímější dešifrovací přístup je: uhodněte hlavní heslo použité k odvození šifrovacího klíče. Můžete vyzkoušet neomezený počet odhadů na místě, na jakémkoli hardwaru, který si můžete dovolit, takže tento proces bude srovnatelně rychlý.
LastPass používá k odvození šifrovacího klíče z hlavního hesla algoritmus PBKDF2. I když je tento algoritmus horší než novější algoritmy jako bcrypt, scrypt nebo Argon2, má důležitou vlastnost pomalé derivace klíčů, takže útočníci provádějící místní hádání budou zpomaleni. Potřebný čas je úměrný počtu iterací, což znamená: čím vyšší je počet iterací, tím těžší bude uhodnout hlavní heslo.
Po dlouhou dobu byla výchozí hodnota LastPass 5 000 iterací. Jedná se o extrémně nízkou hodnotu, která poskytuje velmi malou ochranu. Vypočítal jsem, že k testování 346 000 odhadů za sekundu lze použít jednu grafickou kartu GeForce GTX 1080 Ti. To je dost na to, abyste projeli databázi s více než miliardou hesel známých z různých úniků webových stránek za necelou hodinu.
Po mých zprávách LastPass zvýšil výchozí hodnotu na 100 000 iterací uprostřed -2018, což je mnohem vhodnější. Samozřejmě, pokud jste důležitým cílem, který by mohl očekávat, že při hádání vašeho hlavního hesla budou hozeny prostředky na úrovni státu, měli byste si zvolit extrémně silné hlavní heslo.
Získání dat bruteforce
Jedním z mých zjištění počátkem roku 2018 bylo, že skript https://lastpass.com/newvault/websiteBackgroundScript.php
lze načíst na libovolném webu. Tento skript obsahoval vaše uživatelské jméno LastPass i část šifrovaných dat (soukromý klíč RSA). Jelikož vaše uživatelské jméno LastPass je také solí pro odvození hesla, je to vše, co někdo potřebuje k lokálnímu vynucení vašeho hlavního hesla.
Tento problém byl samozřejmě rychle vyřešen. Chyba však byla dostatečně zřejmá, takže mě napadlo, jestli jsem ji objevil jako první. I když jsem vyzval LastPass, aby zkontroloval jejich protokoly, zda nevykazují známky této zranitelnosti využívané ve volné přírodě, podle mých znalostí k tomuto vyšetřování nikdy nedošlo.
„Kola na straně serveru“ jako zbytečná ochrana
Po bezpečnostním incidentu v roce 2011 LastPass implementoval další bezpečnostní mechanismus: kromě vašich iterací PBKDF2 na straně klienta by přidaly dalších 100 000 iterací na server. Teoreticky by tedy někdo mohl získat data ze serveru, což by zvýšilo úsilí potřebné k uhodnutí vašeho hlavního hesla.
V praxi bych mohl přesvědčivě dokázat, že těchto dalších 100 000 iterací se použije pouze na hodnotu hash hesla. Všechny ostatní uživatelské údaje (hesla, klíče RSA, OTP a další) jsou šifrovány pouze pomocí šifrovacího klíče odvozeného místně z vašeho hlavního hesla, zde zde není žádná další ochrana. Závěr: tato dodatečná „ochrana“ je úplným plýtváním zdroji serveru a neposkytuje žádnou hodnotu.
Vstup dovnitř zadními vrátky
Bez ohledu na to, jak slabá je ochrana, útoky hrubou silou budou vždy proti nejsilnějším hlavním heslům neúčinné. Design LastPass však obsahuje spoustu backdoorů, které by umožnily dešifrování dat bez vynaložení jakéhokoli úsilí.
Webové rozhraní
LastPass vám pohodlně poskytuje webové rozhraní pro přístup k vašim heslům bez pomoci rozšíření prohlížeče. Tato funkce je však pastí: kdykoli zadáte své hlavní heslo do přihlašovacího formuláře na webu, neexistuje způsob, jak zjistit, zda bude vaše hlavní heslo pomocí PBKDF2 hašováno před jeho odesláním na server, nebo zda jej bude přenášet jako jasné text.
Pamatujete si, že serveru nedůvěřujeme? Přesto triviální úprava kódu JavaScript obsluhovaného serverem stačí ke kompromisu všech vašich hesel. I když tento kód JavaScript zkontrolujete, je toho příliš mnoho na to, abyste si čehokoli všimli. Upravený kód by bylo možné poskytnout pouze konkrétním uživatelům.
Nastavení účtu
I když používáte rozšíření prohlížeče důsledně, kdykoli přejdete do nastavení účtu, bude načtěte web lastpass.com. Tady opět neexistuje způsob, jak zjistit, že tento web není kompromisem a nebude vám krýt data na pozadí.
Několik dalších částí funkce rozšíření je také implementováno přechodem zpět na web lastpass.com a LastPass zde nevidí problém.
Obnovení OTP
LastPass má koncept jednorázových hesel (OTP), která můžete použít k obnovení dat z účtu, pokud jste někdy zapomněli hlavní heslo. Tyto OTP umožňují dešifrovat vaše data, ale server je běžně nezná.
Aby byla obnova ještě spolehlivější, LastPass ve výchozím nastavení automaticky vytvoří OTP pro obnovení a uloží jej do dat rozšíření. Problém zde: proces obnovy byl navržen tak, aby rozšíření okamžitě poskytlo lastpass.com toto OTP obnovení na vyžádání, aniž by vás o tom vůbec informovalo. Takže kompromitovaný server LastPass může požádat rozšíření o vaše OTP pro obnovení a použít jej k dešifrování dat.
Podle LastPass byl tento problém vyřešen v srpnu 2018. Nevím, jak to vyřešili alespoň jsem však v jejich kódu neviděl žádné zjevné řešení.
Vystavení šifrovacího klíče
Existuje také řada příležitostí, kdy rozšíření přímo vystaví svůj místní šifrovací klíč k serverům LastPass. To má pomoci webovým funkcím LastPass lépe se integrovat s rozšířením prohlížeče, ale ruší to účinky místního šifrování dat. Následující akce jsou všechny problematické:
- Otevření nastavení účtu, bezpečnostní výzva, historie, záložky, sledování kreditu
- propojení s osobním účtem
- přidání identita
- Import dat, pokud není nainstalována binární komponenta.
- Tisk všech webů
- Kliknutí na oznámení o porušení
Poslední je obzvláště vážná, protože server LastPass vám může podle libosti zasílat oznámení o narušení. To umožňuje LastPass získat přístup k vašim datům, kdykoli se jim líbí, místo aby čekali, až sami použijete problematické funkce.
Další nedostatky v designu
- Jak sami vidíte, když otevřete https://lastpass.com/getaccts.php, když jste přihlášeni, úschovna LastPass v žádném případě není zašifrovaná blob dat. Spíše má sem tam šifrovaná data, zatímco jiná pole, jako je URL odpovídající účtu, používají pouze hexadecimální kódování. Na tento problém bylo poukázáno v této prezentaci z roku 2015 a od té doby byla šifrována další pole - zdaleka ne všechna. Zejména zpráva, kterou jsem podal, poukázala na to, že ekvivalentní domény, které nejsou šifrovány, umožnily serveru LastPass upravit tento seznam a extrahovat vaše hesla tímto způsobem. Tento konkrétní problém byl podle LastPass vyřešen v srpnu 2018.
- Stejná prezentace nadává LastPass za použití AES-ECB pro šifrování. Mimo jiné rozdává, která z vašich hesel jsou identická. LastPass od té doby přechází na AES-CBC, přesto když jsem se podíval do svého „trezoru“, viděl jsem tam spoustu pověření šifrovaných AES-ECB (můžete to říct, protože AES-ECB je pouze blob kódovaný v base64, zatímco LastPass varianta AES-CBC začíná vykřičníkem).
- Automatické OTP obnovy, které se vytváří a ukládá do dat rozšíření, znamená, že k vašemu účtu LastPass může mít přístup kdokoli s přístupem k vašemu zařízení a e-mailové adrese. Toto je ve skutečnosti zdokumentováno a je považováno za nízké riziko. Možná na vás jeden z vašich spolupracovníků zahrál žert zasláním e-mailu na vaše jméno, protože jste zapomněli zamknout počítač - příště by vám mohl převzít váš účet LastPass, i když jste z LastPass odhlášeni.
- Když už mluvíme o odhlášení, výchozí doba vypršení platnosti relace je dva týdny. I když je to jistě pohodlné, existuje důvod, proč má většina produktů zpracovávajících citlivá data mnohem kratší intervaly vypršení platnosti relace, obvykle výrazně pod jeden den.
- Pro kombinaci hodnoty s tajným klíčem (např. jako podpis) se obvykle používá SHA256-HMAC. LastPass místo toho používá vlastní přístup a dvakrát aplikuje hash SHA256. I když se zdá, že útoky, které má HMAC řešit, zde nehrají žádnou roli, nevsadil bych na někoho s lepšími znalostmi kryptografie než já, který zde nakonec nenalezne zranitelnost. Na straně serveru se také občas vytvoří nějaké tokeny SHA256 - zajímalo by mě, jaký druh humbugu se děje tam, kde ho nevidím a zda je opravdu bezpečný.