Wyłączenie odpowiedzialności : jako hobby stworzyłem PdP: bezbolesne hasła, można to uznać za konkurenta LastPass.
Byłem przyglądając się problemom bezpieczeństwa kilku menedżerów haseł przy wielu okazjach. W szczególności zgłosiłem do LastPass dwanaście problemów z bezpieczeństwem i przeanalizowałem decyzje projektowe, które do nich doprowadziły. Więc chociaż paj28 udzielił bardzo dobrej ogólnej odpowiedzi na temat menedżerów haseł, mogę podać kilka szczegółów.
Kiedy ludzie mówią o bezpieczeństwie menedżerów haseł online, zwykle koncentrują się na bezpieczeństwie serwerów. Skupiono się na tym, jak łatwo jest włamać się do serwera i co się wtedy stanie. Jest to jednak tylko jeden wektor ataku, ponieważ atakowanie instancji lokalnego menedżera haseł może prowadzić do tych samych wyników. W rzeczywistości atakowanie rozszerzenia przeglądarki może być bardziej obiecującym sposobem działania, ponieważ dane są już tam odszyfrowane i nie pozostawiasz śladów w żadnych dziennikach.
Spójrzmy na te dwa aspekty osobno.
Atakowanie rozszerzenia przeglądarki
Istnieje wiele danych historycznych dotyczących luk w rozszerzeniu przeglądarki LastPass. Wszystkie te luki mogą zostać wykorzystane przez dowolne strony internetowe. Są to przynajmniej:
Czy zauważyłeś tutaj wzór? LastPass od lat zmaga się z zabezpieczeniem funkcji autouzupełniania i ograniczeniem dostępu do ich wewnętrznego interfejsu API. Za każdym razem, gdy nowy raport potwierdzał, że poprzednia poprawka była niekompletna.
Nie jest niczym niezwykłym, że menedżerowie haseł nie potrafią bezpiecznie zaimplementować funkcji autouzupełniania, większość z nich miała problemy w tym obszarze, kiedy sprawdzałem. Chociaż całkowicie możliwe do uniknięcia, problemy te są na tyle powszechne, że skompilowałem nawet listę z zaleceniami, aby uniknąć pułapek.
Ale wewnętrzne problemy z API są dość niezwykłe. LastPass udostępnia ten interfejs API na stronach internetowych na wiele różnych sposobów. Ma być ograniczone do lastpass.com, ale logika jest tak złożona, że ograniczenia były omijane kilka razy w przeszłości. I chociaż LastPass dołożył wszelkich starań, aby zbagatelizować powagę w swoich oficjalnych ogłoszeniach, każdy z tych problemów umożliwiał witrynom odczytanie wszystkich haseł jednocześnie. Co gorsza, ostatni raport Tavisa Ormandy'ego dowiódł, że wewnętrzne API można wykorzystać do wykonania dowolnego kodu na maszynie użytkownika przez binarny komponent LastPass. To samo można by prawdopodobnie zrobić ze wszystkimi poprzednimi błędami, które ujawniły wewnętrzny interfejs API.
Można oczywiście zapytać, dlaczego LastPass nie ograniczył poprawnie dostępu do wewnętrznego API. Ale lepszym pytaniem jest, dlaczego ten interfejs API jest w ogóle narażony na strony internetowe. Dzieje się tak, ponieważ znaczna część funkcjonalności LastPass nie jest zawarta w rozszerzeniu, ale raczej opiera się na witrynie LastPass do działania. To bardzo problematyczna decyzja projektowa, ale jak dotąd LastPass nie wydawał się zainteresowany naprawą tego.
Atakowanie danych po stronie serwera
Powiedzmy to bardzo jasno: nie ufamy serwerowi. Nie chodzi o to, że szczególnie nie ufamy LogMeIn, Inc. - przynajmniej nie bardziej niż jakiejkolwiek innej firmie. Ale nasze hasła są bardzo wrażliwymi danymi i nawet najbardziej etyczna firma może mieć nieuczciwego pracownika. Dodaj do tego możliwość, że władze USA zażądają od nich przedstawienia twoich danych, co niekoniecznie musi być związane z dochodzeniem. Nieważne, że ich serwery zostały zhakowane, tak jak to już zdarzyło się raz.
Dlatego bardzo ważne jest, aby Twoje dane na serwerze były zaszyfrowane i bezużyteczne dla każdego, kto może trzymaj się tego. Ale co może powstrzymać atakujących przed odszyfrowaniem go? Dokładnie jedno: nie znają twojego hasła głównego, które jest używane do wyprowadzenia klucza szyfrowania. Więc podstawowe pytanie brzmi: czy LastPass wystarczająco chroni twoje hasło główne i klucz szyfrowania?
W tym obszarze nie znam żadnych opublikowanych badań poza moimi własnymi, większość z nich zapisanych w tym post na blogu. Mój wniosek tutaj: LastPass cierpi z powodu wielu błędów projektowych, niektóre są już rozwiązane, podczas gdy inne są nadal aktywne.
Bruteforsowanie hasła głównego
Jeśli napastnicy dostali swoje ręce zbiór zaszyfrowanych danych, najprostszym podejściem do odszyfrowania jest: zgadnij główne hasło używane do wyprowadzenia klucza szyfrowania. Możesz spróbować lokalnie nieograniczoną liczbę domysłów, na jakimkolwiek sprzęcie, na jaki Cię stać, więc ten proces będzie stosunkowo szybki.
LastPass używa algorytmu PBKDF2 do uzyskania klucza szyfrującego z hasła głównego. Algorytm ten jest gorszy od nowszych algorytmów, takich jak bcrypt, scrypt lub Argon2, ale ma ważną właściwość polegającą na spowolnieniu pozyskiwania klucza, więc atakujący wykonujący zgadywanie lokalnie będą spowolnieni. Wymagany czas jest proporcjonalny do liczby iteracji, co oznacza: im większa liczba iteracji, tym trudniej będzie odgadnąć hasło główne.
Przez długi czas wartość domyślna LastPass wynosiła 5000 iteracji. Jest to niezwykle niska wartość, która zapewnia bardzo małą ochronę. Obliczyłem, że pojedyncza karta graficzna GeForce GTX 1080 Ti może posłużyć do przetestowania 346 000 domysłów na sekundę. To wystarczy, aby przejść przez bazę danych z ponad miliardem haseł znanych z różnych wycieków witryn w zaledwie godzinę.
Po moich raportach LastPass zwiększył wartość domyślną do 100 000 iteracji w połowie -2018, co jest o wiele bardziej odpowiednie. Oczywiście, jeśli jesteś ważnym celem, który może oczekiwać, że podczas odgadywania hasła głównego będą rzucane zasoby na poziomie stanu, nadal powinieneś wybierać niezwykle silne hasło główne.
Zdobywanie danych w celu brutalnej siły
Jednym z moich ustaleń na początku 2018 roku było to, że skrypt https://lastpass.com/newvault/websiteBackgroundScript.php
można załadować z dowolnej witryny internetowej. Ten skrypt zawierał zarówno twoją nazwę użytkownika LastPass, jak i fragment zaszyfrowanych danych (prywatny klucz RSA). Ponieważ twoja nazwa użytkownika LastPass jest również solą do tworzenia haseł, to wszystko, czego ktoś potrzebuje, aby lokalnie brutalnie zmodyfikować twoje hasło główne.
Ten problem został oczywiście szybko rozwiązany. Jednak wada była na tyle oczywista, że zastanawiałem się, czy odkryłem ją jako pierwszy. Podczas gdy nalegałem LastPass, aby sprawdził ich dzienniki pod kątem oznak wykorzystania tej luki w środowisku naturalnym, o ile wiem, to dochodzenie nigdy nie miało miejsca.
„Rundy po stronie serwera” jako bezużyteczna ochrona
Po incydencie związanym z bezpieczeństwem w 2011 r. LastPass zaimplementował dodatkowy mechanizm bezpieczeństwa: oprócz iteracji PBKDF2 po stronie klienta dodaliby kolejne 100 000 iteracji na serwerze. Więc teoretycznie, gdyby ktoś mógł pobrać dane z serwera, zwiększyłoby to wysiłek potrzebny do odgadnięcia hasła głównego.
W praktyce mógłbym ostatecznie udowodnić, że te dodatkowe 100 000 iteracji jest stosowanych tylko do skrótu hasła. Wszystkie inne fragmenty danych użytkownika (hasła, klucze RSA, OTP i inne) są szyfrowane tylko przy użyciu klucza szyfrowania uzyskanego lokalnie z hasła głównego, bez dodatkowej ochrony. Wniosek: ta dodatkowa „ochrona” jest całkowitym marnotrawstwem zasobów serwera i nie zapewnia żadnej wartości.
Przedostanie się tylnymi drzwiami
Bez względu na to, jak słaba jest ochrona, ataki brute force zawsze będą nieskuteczne wobec najsilniejszych haseł głównych. Jednak projekt LastPass zawiera wiele backdoorów, które pozwoliłyby odszyfrować dane bez wysiłku.
Interfejs sieciowy
LastPass zapewnia wygodny interfejs sieciowy umożliwiający dostęp do haseł bez pomocy rozszerzenia przeglądarki. Ta funkcja jest jednak pułapką: za każdym razem, gdy wprowadzasz swoje hasło główne do formularza logowania w Internecie, nie ma możliwości dowiedzenia się, czy hashuje twoje hasło główne za pomocą PBKDF2 przed wysłaniem go na serwer, czy też prześle je jako jasne tekst.
Pamiętasz, że nie ufamy serwerowi? Jednak prosta modyfikacja kodu JavaScript obsługiwanego przez serwer wystarczy, aby złamać wszystkie Twoje hasła. Nawet jeśli przyjrzysz się temu kodowi JavaScript, jest go zbyt dużo, abyś mógł cokolwiek zauważyć. Możliwe byłoby udostępnienie zmodyfikowanego kodu tylko określonym użytkownikom.
Ustawienia konta
Nawet jeśli konsekwentnie korzystasz z rozszerzenia przeglądarki, za każdym razem, gdy przejdziesz do ustawień konta, załaduj witrynę lastpass.com. Tutaj znowu nie ma sposobu, abyś wiedział, że ta witryna nie jest zagrożona i nie wykradnie twoich danych w tle.
Kilka innych elementów funkcji rozszerzenia jest również zaimplementowanych poprzez powrót do witryna lastpass.com, a LastPass nie widzi tutaj problemu.
Recovery OTP
LastPass ma koncepcję haseł jednorazowych (OTP), których możesz użyć do odzyskania danych z konta, jeśli kiedykolwiek zapomnisz hasła głównego. Te OTP umożliwiają odszyfrowanie danych, ale zwykle nie są znane serwerowi.
Aby odzyskiwanie było jeszcze bardziej niezawodne, LastPass domyślnie automatycznie utworzy hasło odzyskiwania OTP i zapisze je w danych rozszerzenia. Problem tutaj: proces odzyskiwania został zaprojektowany w taki sposób, aby rozszerzenie natychmiast dawało lastpass.com odzyskiwanie hasła jednorazowego na żądanie, nawet bez powiadomienia. Tak więc zhakowany serwer LastPass może poprosić o rozszerzenie o hasło odzyskiwania hasła i użyć go do odszyfrowania danych.
Według LastPass ten problem został rozwiązany w sierpniu 2018 roku. Nie wiem, jak go rozwiązali Jednak przynajmniej nie widziałem żadnego z oczywistych rozwiązań w ich kodzie.
Ujawnienie klucza szyfrowania
Jest również wiele sytuacji, w których rozszerzenie bezpośrednio ujawni Twój lokalny klucz szyfrowania do serwerów LastPass. Ma to pomóc w lepszej integracji funkcji LastPass opartej na sieci Web z rozszerzeniem przeglądarki, ale niweluje skutki lokalnego szyfrowania danych. Następujące działania są problematyczne:
- Otwieranie ustawień konta, wyzwanie bezpieczeństwa, historia, zakładki, monitorowanie kredytu
- Łączenie z kontem osobistym
- Dodawanie tożsamość
- Importowanie danych, jeśli składnik binarny nie jest zainstalowany
- Drukowanie wszystkich witryn
- Kliknięcie powiadomienia o naruszeniu
Ta ostatnia jest szczególnie poważna, ponieważ serwer LastPass może wysyłać Ci powiadomienia o naruszeniach do woli. Dzięki temu LastPass może uzyskać dostęp do twoich danych, kiedy tylko chcą, zamiast czekać, aż sam użyjesz problematycznych funkcji.
Więcej błędów projektowych
- Jak sam widzisz, otwierając https://lastpass.com/getaccts.php po zalogowaniu, skarbiec LastPass w żadnym wypadku nie jest zaszyfrowaną porcją danych. Ma raczej zaszyfrowane dane tu i tam, podczas gdy inne pola, takie jak adres URL odpowiadający kontu, używają tylko kodowania szesnastkowego. Na ten problem zwrócono uwagę w tej prezentacji z 2015 roku i od tamtej pory więcej pól zostało zaszyfrowanych - jednak zdecydowanie nie wszystkie. W szczególności raport, który złożyłem, wskazał, że nieszyfrowanie domen równoważnych pozwala serwerowi LastPass na modyfikację tej listy i wyodrębnienie haseł w ten sposób. Ten konkretny problem został rozwiązany w sierpniu 2018 r. Zgodnie z LastPass.
- Ta sama prezentacja krytykuje LastPass za korzystanie z AES-ECB do szyfrowania. Między innymi zdradza, które z Twoich haseł są identyczne. LastPass przechodzi na AES-CBC od tamtej pory, ale kiedy spojrzałem na mój "sejf", zobaczyłem tam zestaw danych uwierzytelniających zaszyfrowanych przez AES-ECB (możesz to stwierdzić, ponieważ AES-ECB jest tylko blobem zakodowanym w base64, podczas gdy LastPass wariant AES-CBC zaczyna się od wykrzyknika).
- Odzyskiwanie OTP tworzone automatycznie i przechowywane w danych rozszerzenia oznacza, że każdy, kto ma dostęp do Twojego urządzenia i adresu e-mail, może uzyskać dostęp do Twojego konta LastPass. W rzeczywistości jest to udokumentowane i uznane za niewielkie ryzyko. Może jeden z twoich współpracowników zrobił ci żart, wysyłając wiadomość e-mail w twoim imieniu, ponieważ zapomniałeś zablokować komputer - następnym razem może przejąć twoje konto LastPass, nawet jeśli jesteś wylogowany z LastPass.
- Mówiąc o wylogowaniu, domyślny czas wygaśnięcia sesji to dwa tygodnie. Chociaż z pewnością jest to wygodne, istnieje powód, dla którego większość produktów obsługujących poufne dane ma znacznie krótsze okresy wygaśnięcia sesji, zwykle znacznie poniżej jednego dnia.
- Do łączenia wartości z sekretem (np. jako podpis) zazwyczaj używa się SHA256-HMAC. LastPass używa zamiast tego niestandardowego podejścia, dwukrotnie stosując haszowanie SHA256. Chociaż ataki, którym ma się zająć HMAC, nie wydają się odgrywać tutaj roli, nie założyłbym się, że ktoś z lepszą wiedzą kryptograficzną niż ja nie znajduję tutaj luki. Ponadto strona serwera od czasu do czasu produkuje również tokeny SHA256 - zastanawiam się, jakiego rodzaju bzdury mają miejsce, gdy ich nie widzę i czy jest to naprawdę bezpieczne.