Właśnie przeczytałem w Internecie o nowo wykrytej luce w zabezpieczeniach w ASP.NET. Możesz przeczytać szczegóły tutaj.
Problem polega na tym, że ASP.NET implementuje algorytm szyfrowania AES w celu ochrony integralności plików cookie generowanych przez te aplikacje do przechowywania informacji podczas sesji użytkownika.
Jest to trochę niejasne, ale tutaj jest bardziej przerażająca część:
Pierwszy etap ataku wymaga kilku tysięcy próśb, ale gdy się powiedzie i atakujący zdobędzie tajne klucze, jest całkowicie podstępny. Wymagana wiedza kryptograficzna jest bardzo podstawowa.
Podsumowując, nie jestem wystarczająco zaznajomiony z tematem bezpieczeństwa / szyfrowania, aby wiedzieć, czy to naprawdę tak poważne.
Czy więc wszyscy programiści ASP.NET powinni obawiać się tej techniki, która może być właścicielem dowolnej witryny ASP.NET w ciągu kilku sekund ?
Jak ten problem wpływa na przeciętnego programistę ASP.NET? Czy to w ogóle wpływa na nas? Jakie są konsekwencje tej podatności w życiu? I wreszcie: czy istnieje jakieś obejście, które zapobiega tej podatności?
Dzięki za odpowiedzi!
EDYCJA: Pozwól, że streszczę otrzymane odpowiedzi
Jest to w zasadzie atak typu „padding oracle”. @Sri zapewniło doskonałe wyjaśnienie, co oznacza ten rodzaj ataku. Oto szokujące wideo na ten temat!
O powadze tej podatności: Tak, to naprawdę poważna sprawa. Pozwala atakującemu poznać klucz maszynowy aplikacji. W ten sposób może robić bardzo niechciane rzeczy.
- Posiadając klucz maszynowy aplikacji, osoba atakująca może odszyfrować uwierzytelniające pliki cookie.
- Co gorsza, może generować uwierzytelniające pliki cookie o nazwie dowolnego użytkownika. W ten sposób może pojawić się jako każdy na stronie. Aplikacja nie jest w stanie rozróżnić między tobą a hakerem, który sam wygenerował cookie uwierzytelniające z Twoim nazwiskiem.
- Pozwala mu również odszyfrować (a także wygenerować) sesyjne pliki cookie , chociaż nie jest to tak niebezpieczne jak poprzednie.
- Nie tak poważnie: może odszyfrować zaszyfrowany stan strony ViewState. (Jeśli używasz ViewState do przechowywania poufnych danych, i tak nie powinieneś tego robić!)
- Zupełnie nieoczekiwany : znając klucz maszynowy, osoba atakująca może pobrać dowolny dowolny plik z aplikacji internetowej, nawet te, których normalnie nie można pobrać! (W tym Web.Config itp.)
Oto kilka dobrych praktyk, które nie rozwiązały problemu, ale pomogły poprawić ogólne bezpieczeństwo aplikacji internetowej.
- Możesz szyfrować poufne dane za pomocą Protected Configuration
- Używaj plików cookie tylko HTTP
- Zapobiegaj atakom DoS
Teraz skupmy się na tym problemie.
- Scott Guthrie opublikował wpis na ten temat na swoim blogu
- W blogu ScottGu FAQ na temat podatności
- Aktualizacja ScottGu dotycząca luki w zabezpieczeniach
- Microsoft ma na ten temat poradnik bezpieczeństwa
- Zrozumienie luki w zabezpieczeniach
- Dodatkowe informacje o luce w zabezpieczeniach
Rozwiązanie
- Włącz customErrors i utwórz pojedynczą stronę błędów, na którą przekierowywane są wszystkie błędy . Tak, nawet 404 . (ScottGu powiedział, że rozróżnienie między 404 a 500 jest niezbędne dla tego ataku.) Również w swoim
Application_Error
lubError.aspx
umieść kod, który powoduje losowe opóźnienie. (Wygeneruj losową liczbę i użyj Thread.Sleep do spania przez tak długi czas). Dzięki temu atakujący nie będzie mógł zdecydować, co dokładnie wydarzyło się na twoim serwerze. - Niektóre osoby zalecały powrót do 3DES. Teoretycznie, jeśli nie użyjesz AES, nie napotkasz słabości bezpieczeństwa w implementacji AES. Jak się okazuje, wcale nie jest to zalecane .
Kilka innych myśli
Dziękuję wszystkim, którzy odpowiedzieli na moje pytanie. Wiele się nauczyłem nie tylko o tym problemie, ale ogólnie o bezpieczeństwie w sieci. Oznacziłem odpowiedź @ Mikael jako zaakceptowaną, ale inne odpowiedzi są również bardzo przydatne.