Ochrona przed atakami CSRF

Wikipedia: "Cross-site request forgery (w skrócie CSRF lub XSRF) – metoda ataku na serwis internetowy, która często (m.in. na skutek jednoczesnego wykorzystania) mylona jest z cross-site scripting (XSS) bądź jest uznawana za jej podzbiór. Ofiarami CSRF stają się użytkownicy nieświadomie przesyłający do serwera żądania spreparowane przez osoby o wrogich zamiarach. W przeciwieństwie do XSS, ataki te nie są wymierzone w strony internetowe i nie muszą powodować zmiany ich treści. Celem hakera jest wykorzystanie uprawnień ofiary do wykonania operacji w przeciwnym razie wymagających jej zgody".

Charakterystyka

Wikipedia: "Atak ma na celu skłonić użytkownika zalogowanego do serwisu internetowego do tego, aby uruchomił on odnośnik, którego otwarcie wykona w owym serwisie akcję, do której atakujący nie miałby w przeciwnym razie dostępu. Na przykład, użytkowniczka Małgosia, na stałe zalogowana do systemu CRM, może w pewnym momencie otworzyć spreparowany przez Jasia link, który zmieni jej dane kontaktowe albo usunie dane w systemie CRM. Jako link może również posłużyć obrazek, którego adres został odpowiednio przygotowany, a konsekwencje wykonanej akcji mogą być znacznie poważniejsze. Poniższe cechy charakteryzują atak CSRF:
  • Dotyczy serwisu wymagającego zalogowania lub innego ograniczenia np. dostępu tylko z sieci wewnętrznej lub określonej puli adresów IP.
  • Wykorzystuje zaufanie serwisu do tożsamości zalogowanego użytkownika.
  • Podstępem nakłania przeglądarkę internetową do wysłania żądania HTTP do serwisu.
  • Dotyczy żądania zmieniającego stan konta użytkownika lub wykonującego w jego imieniu operację".

Przeciwdziałanie

System YetiForce domyślnie ma wbudowany mechanizm obronny przez atakami CSRF. Zwykły użytkownik ma z nim do czynienia najczęściej w przypadku niewprowadzania poprawnie adresu do systemu CRM lub będąc zalogowanym w systemie, wciśnie link [np. z maila] będąc pod innym adresem niż domyślnie jest system CRM.  Aby nie powodować błędu CSRF w systemie należy pamiętać o kilku rzeczach:
  1. Nasze zabezpieczenie działa tylko wtedy, gdy jesteśmy zalogowani, gdy użytkownik nie jest zalogowany, wtedy otrzymuje stronę logowania i żadne niepożądane dane nie są wstrzykiwane.
  2. Zawsze powinniśmy używać do logowania adresu WWW, który został zdefiniowany w pliki config/config.inc.php [ustawiany jest on automatycznie podczas instalacji systemu]. Dla zabezpieczenia CSRF ma znaczenie, czy adres ma "www" czy też nie, czy ma https czy też tylko http oraz, czy na końcu mamy jakieś znaki np. "/", "/pl" itd.
  3. Domyślnie system pozwala na logowanie tylko z jednego adresu www. 

Tips & tricks

Jeżeli chcesz pozwolić użytkownikom na logowanie z różnych domen [np. sieć lokalna ma adres A, a sieć zewnętrzna adres B] to najlepszym rozwiązaniem zrobić to na poziomie DNS lub w strefie lokalnej serwera. Należy wykonać przekierowanie z adresu B na adres A.
  • Thursday, 10 August 2017