...a jest to kontynuacja wątku o nadużywaniu funkcji skrótu. Prawdopodobnie opisywana przeze mnie technika jest specyficzną implementacją zasady, iż hasła użytkownika nie powinny być przechowywane w formie jawnej.
Jak zepsuć prostą rzecz
O co chodzi?
Praktycznie żaden współczesny system nie przechowuje haseł użytkowników w formie jawnej. Nie są to też (zwykle) hasła zaszyfrowane, lecz hasła są przechowywane jako rezultat funkcji skrótu (w uproszczeniu). Można sobie o tym poczytać na przykład tutaj.
Po co te hashe?
Wykorzystanie nieodwracalnych przekształceń ma na celu uniemożliwienie poznania hasła na postawie wykradzionej bazy haseł. Jeśli baza ta zawiera po prostu para login, hasło sprawa jest trywialna. W przypadku, gdy jest to na przykład login, md5(haslo), sprawa jest już bardziej złożona, choć dzięki rainbow tables łamani md5 staje się coraz łatwiejsze. Gdy wygląda to tak: login, salt+md5(salt+hasło), gdzie salt jest pewną losową wartością, wykorzystanie rainbow tables staje się mniej użyteczne. Nie wnikając w szczegóły, chodzi o to, by nawet wykradając bazę użytkowników z pewną reprezentacją ich haseł, atakujący nie mógł bezpośrednio zalogować się do systemu.
Jak wygląda proces uwierzytelnienia?
Prosto. Użytkownik wpisuje swój login i hasło, dane te przesyłane są do zaufanego komponentu w systemie operacyjnym, który z otrzymanych danych uwierzytelniających wylicza reprezentację hasła (hash) i porównuje ją z wartością zapisaną w bazie.
...przenosząc to na aplikacje internetowe...
Teoretycznie sprawa jest prosta, użytkownikowi prezentowana jest formatka, w której wpisuje swój login i hasło, dane te przekazywane są do serwera i dalej proces przebiega tak jak wcześniej opisany.
To co tu można zepsuć???
Cóż, wyniesienie procesu wyliczania hasha hasła do przeglądarki i przesyłanie do serwera pary login, hash(hasło) powoduje, że wracamy do punktu wyjścia. Dlaczego? Dlatego, że danymi uwierzytelniającymi przesyłanymi do serwera jest login i hash hasła, a nie hasło. Skoro mogę dowolnie modyfikować dane przesyłane między przeglądarką a serwerem (choć dla niektórych jest to zaskoczenie), to nie muszę wcale próbować zgadywać hasła, aż skrypty w przeglądarce wyliczą oczekiwany hash, tylko po prostu podmienię w wysłanym przez przeglądarkę żądaniu hash na ten, który udało się wykraść z bazy...
Kreatywne, prawda?
Istnieje przynajmniej jedna osoba, która usiłuje podołać wyzwaniu. Ktoś więcej próbuje? Patrząc w logi mam pewne wątpliwości... W każdym razie pora na kolejne wskazówki. Wiadomo już, że: można odróżnić istniejącego i nieistniejąceg
Przesłany: Jun 07, 22:44