12:36
17/9/2013

Boleśnie mogli przekonać się o tym właściciele aplikacji napisanych we frameworku Django — standardowa funkcja hashująca przy dłuższych danych wejściowych mogła spowodować zawieszenie pracy serwera.

Wielkość ma znaczenie ;)

Długie hasło w tym przypadku oznaczało naprawdę długie — np. ciąg znaków o rozmiarze 1MB. Dlaczego przetwarzanie tak długiego ciągu mogło zawiesić serwer? Otóż Django wykorzystuje algorytm PBKDF2 do generowania hashy. Algorytm ten poddaje dane wejściowe wielokrotnemu hashowaniu, dzięki czemu atakujący musi poświęcić więcej czasu na “łamanie” skrótu. Negatywnym skutkiem jest jednak obciążenie, jakie może wygenerować ten algorytm podczas przetwarzania dużych danych wejściowych.

Django potrzebowało ok. 1 minuty na przetworzenie hasła o wielkości 1MB. Łatwo sobie wyobrazić, jak zachowałby się serwer, gdyby atakujący co chwila podsyłał mu tej wielkości ciągi na wejście funkcji skrótu.

Długie hasła a łatwość ich przełamywania wedle wskaźnika z GMailowego formularza zakładania konta

Na błąd, 14 września natknął się Josh Wright, a już dzień później Django wypuściło aktualizację wprowadzającą ograniczenie długości dla danych wchodzących na funkcję skrótu do 4096 bytes (co przy założeniu przechowywania jednego znaku na 2 bajtach daje ciągle możliwość wykorzystywania haseł o długości 2048 znaków). Dalej więc zachęcamy do korzystania z możliwie długich haseł.

Przy okazji Django przypomniało o procedurze responsible disclosure. Błędy tego kalibru “bezpieczniej” jest zgłaszać prywatnie do producenta, a nie umieszczać w publicznie dostępnym internecie.

Przeczytaj także:

10 komentarzy

Dodaj komentarz
  1. Ech, łezka się w oku kręci, aż sobie przypomniałem czasy zip-bomb :-)

    • fork-bomb szybsze i skuteczniejsze. I wkurzające przy programowaniu równoległym.

  2. “Przy okazji Django przypomniało o procedurze responsible disclosure. Błędy tego kalibru “bezpieczniej” jest zgłaszać prywatnie do producenta, a nie umieszczać w publicznie dostępnym internecie.” Jestem pewien, że jakby zgłoszono tą lukę prywatnie, nie publicznie to aktualizacja nie wyszła by tak szybko…

    • Raczej się mylisz. Zespół Django reaguje naprawdę szybko na zgłaszane błędy krytyczne dla działania frameworka lub jego bezpieczeństwa.

    • Internauci lubią zamieniać “swoje widzimisie” na “jestem pewien że…” ;]

    • TĘ lukę.

  3. Guys,

    Żadna “funkcja hashująca” tylko funkcja skrótu.

    • Dude,

      Nikt nie używa nazwy „funkcja skrótu”. Z resztą tutaj akurat chodzi o KDF a nie hash, skoro, jak czytam, Django używa PBKDF2.
      I choć hashowanie w kontekście haseł jest określeniem błędnym to nikt nie ma pomysłu jak to lepiej nazwać (nawet po angielsku, od czasu do czasu tylko odżywają dyskusje na ten temat; a co dopiero po polsku gdzie praktycznie nie ma publikacji z tej dziedziny) więc zwyczajowo mówi się o hashowaniu. A skoro tak to i „funkcja hashująca” razić nie powinna.

      Dobrze, że przycięli do 2k tak jak być powinno, a nie do 20 znaków jak czasami niektórym się zdarza…

  4. Z hasłem też jest problem przy hostingu ut.pl. Dokładnie
    mówiąc w poczcie np. jak ustalimy hasło
    gjhHG65^$uhgjki7hiytytuyiuij66rfyff, będzie wywalać błąd przy
    logowaniu. Problemem jest długość hasła ;)

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: