Jak serwisy przechowują twoje hasło?

Każda usługa z której korzystasz musi mieć możliwość sprawdzenia, czy to to ty.
Zazwyczaj wykorzystuje się do tego celu hasła.
Zakładając, że skoro znasz hasło, to musisz być ty.

Najprostrzym sposobem, byłoby gdyby przy rejestracji zapisywać twoje hasło.
Wtedy przy logowaniu można sprawdzić, czy te hasła są te same.

Jednak w takim przypadku każdy kto uzyskałby dostęp do takich danych (np. haker) poznał by twoje hasło.

Bez twojego hasła

Dlatego serwisy internetowe (zazwyczaj) nie przechowują twojego hasła, przynajmniej nie w takiej formie w której wpisujesz!

Serwisy internetowe nie widzą jakie masz hasło.

Najlepiej nie mieć nic do ukrycia.
Serwisy nie wiedzą jakie masz hasło, ale mogą je sprawdzić.

Zamiast tego przechowuje się odpowiednio matematycznie przekształcone twoje hasło.

Gdy się logujesz, to serwis również wykona takie same matematyczne przekształcenie i porówna z tym zapamiętanym.
Ideą takich przekształceń polega na tym, że łatwo można wykonać takie przekształcenie, ale trudno wykonać je „w drugą stronę”. Trudno określić dla jakich danych można otrzymać wartość docelową.
Inaczej – nie wiadomo jakie użytkownik wpisał hasło.

By to sobie wyobrazić,
Zastanów się jakie liczy całkowite, należy pomnożyć by uzyskać wynik 187? 🙂
Ale gdyby dał ci dwie liczby 11 i 17, to z pewnością szybko obliczysz, że wynik to 187.
Ten przykład bardziej przypomina tzw. kryptografię asymetryczną :D.
Ale dobrze obrazuje, że pewne operacje matematyczne wykonuje się trudniej w drugą stronę.

Funkcje kryptograficzne (matematyczne) o których pisałem, nazywamy funkcjami skrótu / funkcjami mieszającymi lub po angielsku: „hash function„, a otrzymany nich wynik nazywamy hashem.

Szybko można obliczyć „hash”, ale trudno zgadnąć dla jakich danych (hasła) można otrzymać taki wynik (hash).

Zatem gdy wpisujesz np hasło „123456” i serwis używa funkcji starej znanej funkcji jako „MD5”, to otrzymamy wynik:
E10ADC3949BA59ABBE56E057F20F883E.

Funkcje mieszające (funkcje skrótu) mają to do siebie, że zmiana choćby jednego znaku powinna znacząco zmienić wynik.
Dlatego gdyby użytkownik zamiast: „123456” poda „123457”, to aplikując MD5 otrzymamy:
F1887D3F9E6EE7A32FE5E76F4AB80D63.

Wynik wygląda zupełnie inaczej.
E10ADC3949BA59ABBE56E057F20F883E (zakodowane "123456")
F1887D3F9E6EE7A32FE5E76F4AB80D63 (zakodowane "1234567")


W przykładzie powyżej użyłem MD5, jednak współcześnie użycie tej metody do zabezpieczania danych jest niedpouszczalne (niebezpieczne)!! Użyłem bo jest to znana funkcja, która generuje całkiem króki wynik (hash).

To zbyt proste

Wyobraź sobie, że haker posiada ściągawkę dla popularnych haseł i ich zakodowanych odpowiednikach.

W polsce popularne hasła to m.in:

  • 123456
  • qwerty
  • 123456789
  • 12345
  • zaq12wsx
  • polska
  • 111111
  • 1234
  • misiek
  • monika

Wystarczy, że haker policzy hashe raz i już będzie miał ściągawkę.

Gdy zauważy, zakodowane hasło jako: E10ADC3949BA59ABBE56E057F20F883E to od razu – bez liczenia będzie wiedział, że to hasło „123456”.

Tęczowe tablice (ang. rainbow tables) – baza skrótów wykorzystywana w łamaniu haseł zakodowanych jednokierunkową funkcją skrótu. Pozwala na zaoszczędzenie mocy obliczeniowej koniecznej do złamania hasła metodą brute force.

Czas łamania hasła skraca się przez to do kilkudziesięciu sekund na potężnych komputerach.
Tęczowe tablice pozwalają na złamanie większości popularnych funkcji skrótu, w tym MD5, SHA-1, NTLM czy Cisco Pix.

https://pl.wikipedia.org/wiki/Tęczowe_tablice
Reklama

Nie dla ściągawek!

By uniemożliwić korzystanie z takich ściągawek, używa się tak zwanej „soli” (ang salt).
Do zupy, dań dodajemy soli.
Podobnie można dodać „coś” (sól) do twojego hasła i potem je zakodować.

W takiej sytuacji zamiast kodować „123456”, to
będziemy kodowali wymyśloną ciąg znaków (sól) np. „sC&sxHy%N” i twoje hasło „123456”.

Ciąg znaków: sC&sxHy%N123456 po przekształceniu md5 daje: 6731a1d12d75417197bb8b22df7fd827 (zupełnie inną wartość niż wcześniej).

Oczywiście hasło: „sC&sxHy%N123456” nie najduje się na liście najpopularniejszych haseł.
Dlatego ściągawka w niczym nie pomoże!!

Sól (ang. salt) lub ciąg zaburzający – dane losowe dodawane do hasła podczas obliczania funkcji skrótu przechowywanej w systemach informatycznych.
Celem soli jest ochrona systemowej bazy haseł przed atakami słownikowymi.
Jako że sól jest przechowywana jawnie, nie ma ona znaczenia względem ataków brute-force. Podobne znaczenie i zastosowanie ma wektor inicjujący.

https://pl.wikipedia.org/wiki/Sól_(kryptografia)

„Sól” chroni przed atakami słownikowymi

Szybkie komputery

Z takimi algorytmami jest jak z kłudkami z kodem.
Jeśli twoja kłudka ma 3 cyfry od 0 do 9, i nie pamiętasz kodu.
To możesz spróbować sprawdzić wszystkie możliwe opcje.
W najgorszym wypadku będziesz musiał sprawdzić 10*10*10, czyli 1000 kombinacji.
Taką próbę złamania hasła nazywamy atakiem siłowym (brute force).
Mamy dużo siły (w tym przypadku moc obliceniową) i komputer może sprawdzać różne opcje po kolei.

Zgadywanie „hasła”

Atakujący nie wie jakie hasło może wygenerować dany hash, ale może próbować różnych kombinacji liter, cyfr aż znajdzie.

Może Ci się wydawać to niewykonalne.
Jednak współczesne procesory są bardzo szybkie. Karty graficzne w tego typu obliczeniach mogą je obliczać jeszcze szybciej np. 50-100x razy szybciej niż procesor.
Dla przykładu karta graficzna „Nvidia GTX 1080 Ti” – może obliczać 30 963 500 000 skrótów MD5 na sekundę!
W przypadku bezpieczniejszych skrótów SHA256 może obliczać nawet 4 453 200 000 na sekundę (źródło: Nvidia GTX 1080 Ti Hashcat Benchmarks)!
Powyższe dane dotyczą popularnego programu hashcat (służącego do łamania (odzyskiwania) haseł).

Wiele kryptowalut (np. Bitcoin) wymaga znalezienie odpowiedniego hasha.
A do tego używa się specjalnie zbudowanych ukłądów ASIC, lub kart graficznych!

Zatem odgadywanie haseł nie musi być czasochłonne!

Wydajne karty graficzne mogą być drogie. Ale haker wcale nie musi jej kupować!
Wystarczy, że ‚wypożyczy komputer’ wyposażony w taką kartę.
Takie komputery (‚instancje’) można wykupywać na minuty!

Kilka przykładów:

Są za szybcy!

Komputery są coraz szybsze. Zabezpieczenie, które było silne kilka lat temu, dziś może nie dawać rady!

Prawa Moore (które wynika z obserwacji) zakłąda, że co 18 miesięcy podwaja się ilość tranzystorów, co możemy przetłumaczyć: „Podwaja się moc obliczeniowa (szybkość) komputerów”.

Wzrost liczby tranzystorów w procesorach w latach 1971–2011 [wiki media]
Uwaga: skala logarytmiczna!!

Dlatego dobrą praktyką jest zapisywanie haseł, tak by móc zwiększać wymaganą pracę jaką musi wykonać haker.
Jeśli serwis używa np. BCRYPTa, to można podać parametr zwany kosztem (cost factor / work factor).

Polega to na tym, że dla większych wartości, algorytm po prostu wielokrotnie powtarza operację.
To znaczy wyliczona wartość zostaje zakodowana i ponownie zakodowana i tak dalej.

W przypadku BCRYPTA, koszt: 10, oznacza  210 czyli 1024 dodatkowych przeliczeń.
Koszt 20 oznacza 220 czyli 1048576 dodatkowych przeliczeń.
To duża ilość przliczeń, a ile czasu to zajmuje?

Według Auth0, wymagany czas w zależności od kosztu bcrypta może wyglądać tak:

koszt: 10, wymagany czas:    65.683 ms
koszt: 11, wymagany czas:   129.227 ms
koszt: 12, wymagany czas:   254.624 ms
koszt: 13, wymagany czas:   511.969 ms
koszt: 14, wymagany czas:  1015.073 ms
koszt: 15, wymagany czas:  2043.034 ms
koszt: 16, wymagany czas:  4088.721 ms
koszt: 17, wymagany czas:  8162.788 ms
koszt: 18, wymagany czas: 16315.459 ms
koszt: 19, wymagany czas: 32682.622 ms
koszt: 20, wymagany czas: 66779.182 ms
Reklama

Zalecenia są taki by wybrać możliwie największy koszt w zależności od naszego sprzętu, tak by nie przezkadzać użytkownikowi.
Zwróć uwagę, że koszt 20 z powyższego przykładu wymagałby od użytkownika czekania ponad minutę po kliknięciu zaloguj (bezpieczne, ale niedopuszczalne). Dopuki serwis nie sprawdziłby hasła, nie mógłby pokazać np. panelu.

Czasem zakłada się, że obliczenia nie powinne zajmować mniej niż 250 ms (1/4 sekundy) dla zwykłego użytkownika oraz nie mniej niż 1000 ms (1 sekunda) dla administratora!

Spryt

Jeśli ktoś zna się na zamkach, to może się okazać, że gdy jedna z cyfr będzie na odpowiedniej pozycji, to można np. poczuć np. mniejszy opór, albo kliknięcie, albo.. co kolwiek to jest – będziesz wiedziec, że jedna z cyfr jest dobra – a to drastycznie zmiania ilość opcji które trzeba sprawdzić by złamać szyfr (zatem, zajmie Ci to znacznie mniej czasu!).
Tak samo jest z algorytmami, naukowcy analizujący algorytmy w przypadku niektórych z nich znaleźli sposób, dzięki któremu nie muszą sprawdzać wszystkich opcji.
Dlatego niektóre algorytmy uznaje się za niebezpieczne.

Taką kłudkę możesz odblokować probując wszystkich możliwych kombinacj.

Kanał Go Experimental

Praktyka

Niestety czasem (żadko) hasła są zapisywane tak jak je wpisujesz.
Pani w okienku może Ci je nawet podać, albo sama użyć 😀
Dla przestępców jest to duże ułatwienie. Prawdopodobnie używasz tego samego hasła w innym serwisie.
Nawet jeśli nie masz tam ważnego, to mogą być tam informacje, które pozwolą na inny atak.

Hasła zazwyczaj są szyfrowane jednak nieraz nie są najlepiej zabezpieczone.
Niektóre serwisy używają mało bezpiecznych metod „kodowania” hasła (np. słaby algorytm np md5, sha1, …, mała ilość powtórzeń, brak tak zwanej „soli”).
Wpadki mieli nawet „najwięksi” np. swego czasu chodziły memy z wycieku z adobe.

Adobe używało m.in starego, niezbyt bezpiecznego „szyfrowania” (funkcji skrótu): MD5, które dziś są łatwe do złamania.

Krzyżówka inspirowana hasłami i podpowiedziamy z wycieku Adobe.
Taką krzyżówki można rozwiązywać na zed0.co.uk/crossword/.
Czy jesteś w stanie zgadnąć jakie było hasło na podstawie podpowiedzi?
Z Adobe wyciekło 38 mln danych kont.

Jeden serwis: różne zabezpieczenia!


Warto wiedzieć, że serwisy wprowadzają czasem lepsze zabezpieczenia.
Nowi użytkownicy zapisują hasła przy pomocy nowej (bezpieczniejszej) metody.
Jednak „stare konta” nadal będą miały zapisane hasła po staremu (mniej bezpiczne).
Wynika to z tego, że skoro serwis nie wie jakie masz hasło, to nie może go „przepisać” na nowo.

Analiza przypadku

Dzień w dzień wyciekają dane z różnych serwisów.
Nie ma czegoś takiego jak bezpieczny serwis, serwer, czy nawet komputer.
Może być jedynie bardziej zabezpieczony 🙂 niż mniej zabezpieczony.
Poniżej analizuję dane z wycieku z benchmark.pl (w chwili aktualizacji artykułu wybrałem w miarę ostatni z końcówką ‚.pl’).
Zatem bez hejtu, to tylko analiza 🙂

Reklama
Planuję rozszerzyć tą część.

W tym wycieku znalazło się tylko 183794 kont.
Serwis zgodnie z dobrymi praktykami nie przechowywał haseł w sposób jawny, czyli tak jak wpisuje je klient.
To znaczy każde hasło wpisane przez klienta było przekształcane kryptograficznie na tak zwany hash.
Ideą takich przekształceń jest to, że łatwo można wykonać pewne obliczenia matematyczne, by uzyskać wynik (hash), ale mając wynik, trudno stwierdzić dla jakich danych (tutaj hasła) można otrzymać taki wynik.
Dodatkowo, zmiana choćby jednego znaku powinna niemal całkowicie zmienić uzyskany hash (wynik – ciąg znaków)

Tak się składa, że we wspomnianym wycieku niektórzy mieli zabezpieczone hasła przy pomocy MD5, a część klientów przy pomocy silniejszego BCRYPTa.

Hasła zabezpieczone MD5 współcześnie dość szybko można odgadnąć.
Dlatego wiele haseł zabezpieczonych przez MD5 zostało złamane – nie wszyskie, ale większość.
Kilka silnych haseł się obroniło.

Przykładowy wyciek z rozkodowanymi hasłami dostępny na hashes.org.
„Złamane hasla” – to te zabezpieczone MD5
Format danych <nazwa algorytmu> <hash>:<hasło>.


Hasła zabezpieczone BCRYPTem, nie zostały złamane (na razie ruszone), poza kilkoma banalnymi hasłami.


Tzn, jeśli ktoś będzie chciał to je złamie, ale wymaga to więcej czasu (mocy obliczeniowealgorytmalgorytmalgorytmj).

algorytm

Ciąg znaków zaczyna się od $2v$10$, oznacza to że użyto poprawiony Blowfish-based crypt

Po kilku dniach 50% haseł zostało ‚odkodowane’.

Uwaga: poniżej będzie trochę bardziej technicznie.
Już wiesz, że dobrą praktyką jest przechowywanie haseł tak by nie można było ich bezpiśrednio odczytania (w sposób jawny).
Nie szyfruje się ich, ale wykonuje pewne operacje matematyczne uzyskując zupełnie inną wartość.
Gdy się logujesz, to również wykonuje się te same operacje matematyczne i porównuje się czy otrzymana wartość jest taka sama.
Jeśli tak, to użytkownik wpisał prawidłowe hasło.

Idea jest taka, że łatwo można obliczyć tą wartość docelową (hash), ale trudno zgadnąć / obliczyć, jaką wartość trzeba podać by otrzymać tą wartość.

Niektóre takie obliczenia mają nazwy (technicznie: funkcje skrótu / hash function) np. MD5, SHA, ..

Komputery mamy coraz szybsze, tak, że niektóre takie zabezpieczenia można szybko złamać. Dla niektórych metod naukowcy znaleźli sposób jak przyśpieszyć obliczenia.
Tak jest w przpadku MD5.
Dlatego hasła użytkowników, których kasła był zabezpieczone przez MD5 zostały złamane.
Część haseł użytkowników, było lepiej zabezpieczone – tzw. BCRYPTem.

Różne zabezpieczenia w tym samym serwisie?

Po prostu serwis w pewnym momencie wprowadził lepsze zabezpieczenie – i wszyscy nowi klienci byli już nim objęci zabezpieczani.

Czy serwis nie dba o „starych klientów”?

Problem, polega na tym, że z technicznego punktu widzenia serwis nie wie jakie masz hasło.
Dlatego też nie może „przeliczyć go”, na bezpieczniejszą formę (zabezpieczyć).

Co można było zrobić?

Unieważnić hasła zabezpieczone MD5

Klient musiałby zresetować hasło by dostać się do serwisu.
W czasie resetowania, system zapisałby hasło w nowej bezpieczniejszej formie.

ALE #1
Takie działania irytują użytkowników. Klient ma hasło, ale nie może się zalogować – musi je zresetować.
Dodatkow może to nienajlepiej wyglądać wizerunkowo.

Aktualizować hasło w czasie logowania
W momencie gdy system sprawdzi poprawność hasla, mógłby zapisać hasło w nowej bezpieczniejszej formie.

ALE #1.
Wdrożenie takiego rozwiązanie może być bardzo skomplikowane i kosztowne.
ALE #2
Jeśli użytkownik się nie zaloguje, bo np. już nie korzysta już z serwisu, to jego hasło nie będzie zabezpieczone.
Gdy dojdzie do wycieku (a w tym przypadku doszło), to jego hasło zostanie ujawnione. Problem w tym, że wiele osób używa tych samych haseł do różnych serwisów.

Dlaczego hasła nie zosta

Dla jasności nie oznacza to, że ze kilka dni zala baza zostanie zdekodowana.
Hasła zostały „zaszyfrowane” na dwa sposoby: z wykoryzstaniem starego MD5 (współcześnie łatwe do złamania) i nowszego bezpieczniejszego BCRYPTA.

Dlaczego serwis przechowuje hasła częściowo w MD5, a cześć w BCRYPT?
Serwis zaczął używać bezpieczniejszych szyfrów. Dlatego nowi klienci mają lepiej zabezpieczone hasła.
Serwis nie wie z jakiego hasła korzystasz, dlatego nie może zmienić sposobu jego kodowania bez twojej pomocy (np. resetu hasła)!
Z technicznego punktu widzenia można w trakcie logowania sprawdzić czy

Jaki menedżer haseł wybrać?

Twoje dane zostały skradzione! Mogę się założyć. Co chwilę doczhodzi do jakiegoś wycieku. Jeśli używasz tego samego/prostego hasła – przegrałeś. Mają już dostęp do wielu innych twoich usług. Gdybyś używał menadzera haseł…

Ciekawe? Newsletter?

Subscribe
Powiadom o
guest
0 komentarzy
Informacje zwrotne w treści
Wyświetl wszystkie komentarze