Cross-Site Request Forgery (CSRF) to jeden z najstarszych sposobów wykorzystywania luk w zabezpieczeniach witryny. Jego celem są przełączniki sieciowe po stronie serwera, które zwykle wymagają uwierzytelnienia, takiego jak logowanie. Podczas ataku CSRF atakujący dąży do zmuszenia swojej ofiary do wykonania nieautoryzowanego, złośliwego żądania internetowego w jego imieniu.
Słabe lub słabe praktyki bezpieczeństwa witryny i nieostrożność na ścieżce użytkownika to tylko niektóre z najczęstszych przyczyn udanego ataku CSRF.
Przyjrzyjmy się, czym jest atak CSRF i możliwymi sposobami, w jakie możesz się przed nim uchronić jako programista lub jako użytkownik.
Jak ataki CSRF wpływają na Ciebie?
CSRF to atak używany do implementowania nieautoryzowanych żądań podczas akcji internetowych, które wymagają logowania lub uwierzytelnienia użytkownika. Ataki CSRF mogą wykorzystywać identyfikatory sesji, pliki cookie, a także inne luki w zabezpieczeniach serwerów, aby wykraść dane uwierzytelniające użytkownika.
Na przykład włączenie procedur anty-CSRF zapobiega złośliwym interakcjom między domenami.
Po przełamaniu tej bariery osoba atakująca może szybko wykorzystać identyfikator sesji użytkownika za pośrednictwem plików cookie utworzonych przez przeglądarkę użytkownika i osadzić tag skryptu w zagrożonej witrynie.
Manipulując identyfikatorem, osoba atakująca może również przekierować odwiedzających na inną stronę internetową lub wykorzystać metody socjotechniki, takie jak poczta e-mail, w celu wysłania linków, zachęcając ofiarę do pobrania złośliwego oprogramowania.
Gdy ofiara wykona takie działania, wysyła żądanie HTTP do strony usługi użytkownika i autoryzuje działanie żądania na korzyść atakującego. To może być druzgocące dla niczego niepodejrzewającego użytkownika.
Udany atak CSRF może spowodować, że autoryzowani użytkownicy stracą swoje dane uwierzytelniające dostęp na rzecz atakującego, zwłaszcza podczas działań na serwerze, takich jak żądania zmiany hasła lub nazwy użytkownika. W gorszych scenariuszach atakujący przejmuje całą sesję i działa w imieniu użytkowników.
CSRF został wykorzystany do przejęcia transakcji finansowych przez Internet, a także do zmiany nazw użytkowników i haseł, co prowadzi do utraty przez użytkowników dostępu do usługi, której dotyczy problem.
Jak atakujący przechwytują Twoje sesje za pomocą CSRF: Przykłady
Głównymi celami ataków CSRF są akcje internetowe obejmujące uwierzytelnianie użytkownika. Aby odnieść sukces, potrzebne są niezamierzone działania ofiary.
Podczas ataku CSRF głównymi celami atakującego są akcje GET, DELETE i PUT, a także podatne na ataki żądania POST.
Przyjrzyjmy się znaczeniu tych terminów:
- GET: Żądanie pobrania wyniku z bazy danych; na przykład wyszukiwarka Google.
- POST: Zwykle do przesyłania wniosków za pośrednictwem formularzy internetowych. Żądanie POST jest powszechne podczas rejestracji lub logowania użytkownika, znane również jako uwierzytelnianie.
- USUŃ: Aby usunąć zasób z bazy danych. Robisz to za każdym razem, gdy usuwasz swoje konto z określonej usługi internetowej.
- PUT: Żądanie PUT modyfikuje lub aktualizuje istniejący zasób. Przykładem jest zmiana nazwy na Facebooku .
W praktyce atakujący wykorzystują przejmowanie sesji, aby wykonać kopię zapasową ataku CSRF. Korzystając z tej kombinacji, atakujący może użyć przejęcia, aby zmienić adres IP ofiary.
Zmiana adresu IP następnie loguje ofiarę na nowej stronie internetowej, na której atakujący umieścił oszukańcze łącze, które przesyła zreplikowany formularz lub zmodyfikowane żądanie serwera utworzone przez CSRF.
Następnie niczego niepodejrzewający użytkownik myśli, że przekierowanie pochodzi od usługodawcy i klika łącze na stronie atakującego. Po wykonaniu tej czynności hakerzy przesyłają formularz podczas ładowania strony bez ich wiedzy.
Przykład GET Request CSRF Attack
Wyobraź sobie, że próbujesz dokonać płatności online za pośrednictwem niezabezpieczonej platformy handlu elektronicznego. Właściciele platformy wykorzystują żądanie GET do przetworzenia Twojej transakcji. To zapytanie GET może wyglądać tak:
https://websiteurl/pay?amount=$10&company=[company ABC's account]
Porywacz może łatwo ukraść Twoją transakcję, zmieniając parametry żądania GET. Aby to zrobić, wszystko, co muszą zrobić, to zamienić twoje imię na swoje, a co gorsza zmienić kwotę, którą zamierzasz zapłacić. Następnie dostosowują oryginalne zapytanie do czegoś takiego:
https://websiteurl/pay?amount=$20000&company=[attacker's account]
Po kliknięciu linku do zmodyfikowanego żądania GET następuje niezamierzony transfer na konto osoby atakującej.
Transakcja za pośrednictwem żądań GET jest złą praktyką i sprawia, że działania są podatne na ataki.
Przykład ataku CSRF Request POST
Jednak wielu programistów uważa, że korzystanie z żądania POST jest bezpieczniejsze przy dokonywaniu transakcji internetowych. Chociaż to prawda, niestety żądanie POST jest również podatne na ataki CSRF.
Aby skutecznie przejąć żądanie POST, atakujący potrzebuje tylko bieżącego identyfikatora sesji, niektórych zreplikowanych niewidocznych formularzy, a czasem odrobiny socjotechniki.
Na przykład formularz żądania POST może wyglądać tak:
Jednak osoba atakująca może zamienić Twoje dane uwierzytelniające, tworząc nową stronę i modyfikując powyższy formularz w następujący sposób:
W zmanipulowanym formularzu atakujący ustawia wartość pola kwoty na „30000”, zamienia numer konta odbiorcy na jego, przesyła formularz podczas ładowania strony, a także ukrywa pola formularza przed użytkownikiem.
Po przechwyceniu bieżącej sesji strona transakcji inicjuje przekierowanie na stronę atakującego, co powoduje wyświetlenie monitu o kliknięcie łącza, o którym wiedzą, że najprawdopodobniej go odwiedzą.
Kliknięcie tego spowoduje załadowanie zreplikowanego formularza, który przeniesie Twoje środki na konto atakującego. Oznacza to, że nie musisz klikać przycisków takich jak „wyślij”, aby transakcja miała miejsce, ponieważ JavaScript robi to automatycznie po załadowaniu następnej strony internetowej.
Alternatywnie, osoba atakująca może również przygotować wersję roboczą wiadomości e-mail osadzonej w formacie HTML, która monituje o kliknięcie łącza w celu wykonania tego samego przesłania formularza ładowania strony.
Inną akcją, która jest podatna na atak CSRF, jest zmiana nazwy użytkownika lub hasła, przykład żądania PUT. Atakujący replikuje Twój formularz zgłoszeniowy i zastępuje Twój adres e-mail swoim.
Następnie kradną twoją sesję i albo przekierowują cię na stronę, albo wysyłają ci e-mail z prośbą o kliknięcie atrakcyjnego linku.
Następnie przesyła zmanipulowany formularz, który wysyła łącze do resetowania hasła na adres e-mail hakera zamiast na Twój. W ten sposób haker zmieni Twoje hasło i wyloguje Cię z konta.
Jak zapobiegać atakom CSRF jako programista?
Jedną z najlepszych metod zapobiegania CSRF jest używanie często zmieniających się tokenów zamiast polegania na plikach cookie sesji w celu uruchomienia zmiany stanu na serwerze.
Powiązane: bezpłatne przewodniki dotyczące bezpieczeństwa cyfrowego i ochrony prywatności
Wiele nowoczesnych frameworków backendowych oferuje zabezpieczenie przed CSRF. Jeśli więc chcesz uniknąć technicznych aspektów wzmacniania się przeciwko CSRF, możesz łatwo sobie z tym poradzić, korzystając z frameworków po stronie serwera, które są dostarczane z wbudowanymi tokenami anty-CSRF.
Gdy używasz tokena anty-CSRF, żądania oparte na serwerze generują losowe ciągi zamiast bardziej statycznych, podatnych na ataki plików cookie sesji. W ten sposób możesz chronić swoją sesję przed odgadnięciem przez porywacza.
Wdrożenie systemu uwierzytelniania dwuskładnikowego (2FA) do uruchamiania transakcji w Twojej aplikacji internetowej również zmniejsza szanse na CSRF.
Możliwe jest zainicjowanie CSRF za pomocą skryptów między witrynami (XSS), które obejmują wstrzykiwanie skryptu do pól użytkownika, takich jak formularze komentarzy. Aby temu zapobiec, dobrą praktyką jest włączenie automatycznego wyjścia HTML we wszystkich polach formularzy użytkownika w witrynie. Ta akcja zapobiega interpretowaniu elementów HTML przez pola formularzy.
Jak zapobiegać atakom CSRF jako użytkownik
Jako użytkownik usługi sieciowej, która obejmuje uwierzytelnianie, masz do odegrania rolę w zapobieganiu kradzieży danych uwierzytelniających i sesji przez atakujących również za pośrednictwem CSRF.
Upewnij się, że korzystasz z zaufanych usług internetowych podczas czynności związanych z transferem środków.
Oprócz tego używaj bezpiecznych przeglądarek internetowych, które chronią użytkowników przed ujawnieniem sesji, a także bezpiecznych wyszukiwarek, które chronią przed wyciekiem danych wyszukiwania.
Powiązane: Najlepsze prywatne wyszukiwarki, które szanują Twoje dane
Jako użytkownik możesz również polegać na zewnętrznych usługach uwierzytelniających, takich jak Google Authenticator lub jego alternatywach, jeśli chodzi o weryfikację swojej tożsamości w internecie.
Chociaż możesz czuć się bezradny, aby powstrzymać atakującego przed przejęciem Twojej sesji, nadal możesz temu zapobiec, upewniając się, że Twoja przeglądarka nie przechowuje informacji, takich jak hasła i inne dane logowania.
Wzmocnij swoje bezpieczeństwo w sieci
Deweloperzy muszą regularnie testować aplikacje internetowe pod kątem naruszeń bezpieczeństwa podczas opracowywania i wdrażania.
Jednak często wprowadza się inne luki, próbując zapobiec innym. Dlatego uważaj, aby upewnić się, że nie naruszyłeś innych parametrów bezpieczeństwa podczas próby zablokowania CSRF.