Klient zaakceptował wygląd strony, programiści opracowali wszystkie skrypty, usability stoi na najwyższym poziomie… A jak jest z bezpieczeństwem witryny?
Specjaliści od bezpieczeństwa radzą, aby zabezpieczenia witryny nie zostawiać na sam koniec pracy, ale planować je od początku. Z tego powodu warto zwrócić uwagę na kilka często popełnianych błędów, które są łatwe do wyeliminowania jeśli będziemy mieli świadomość ich istnienia przy rozpoczynaniu projektu. Warto uczyć się na błędach, zwłaszcza, jeśli są to pomyłki największych konkurentów.
1. Haszuj
Przechowywanie haseł w czystej postaci to jeden z najczęściej popełnianych błędów. Po uzyskaniu dostępu do bazy danych włamywacz wie wszystko o użytkownikach. Kryptografia pozwala na znacznie bezpieczniejsze ich przechowywanie z wykorzystaniem funkcji jednokierunkowych, które każdemu hasłu przyporządkowują pewien ciąg znaków (np. zamiast „kot” dostaniemy tzw. hash o wartości „a986d9ee785f7b5fdd68bb5b86ee70e0”).
Uzyskanie hasła dającego poznany hash jest bardzo czasochłonne, więc kradzież bazy nie zda się na wiele. Aby uchronić się przed atakiem z użyciem tęczowych tablic warto dodać do hasła tzw. sól. Hasła przechowywane są jawnym teksem m.in. przez Gadu-Gadu.
2. Nie pozwól na wstrzyknięcie kodu…
Wiele projektów tworzonych od podstaw zawiera groźną, ale łatwą do wyeliminowania lukę pozwalającą na uzyskanie dostępu do bazy danych. Często wystarczy wpisać odpowiedni ciąg do paska adresu przeglądarki i już po stronie internauty pojawia się zawartość całej bazy. Aby temu zapobiegać należy filtrować każdy wprowadzany ciąg pod kątem niebezpiecznych znaków. Ofiarą takiego ataku stało się Yahoo! w październiku 2009 roku.
3. …ani całej strony
Dość często spotykanym błędem jest niefiltrowanie adresów wyświetlanych stron. Jeśli aplikacja adresuje je na zasadzie {stala}http://domena.pl/?strona=podstrona.html{/stala}, to zdarza się, że zamiast „index.html” można podstawić cokolwiek, np. „{stala}http://groznastrona.pl/wirus.exe{/stala}”, a zawartość groźnej strony wyświetli się w naszej aplikacji. Stąd tylko krok do sytuacji, w której przestępca wyśle wyglądający na zaufany link i przekieruje atakowanych użytkowników np. na własny formularz logowania wyświetlany jako fragment naszej strony.
Wiele witryn umożliwia też zejście poniżej katalogu głównego i wyświetlenie plików konfiguracyjnych, np. /etc/shadow, zawierającego hashe haseł do serwera lub bezpośredni dostęp do sessionID zalogowanego użytkownika.
4. Uaktualnij oprogramowanie
Zawsze należy aktualizować oprogramowanie. Dotyczy to zarówno serwera stron www jak i uruchomionych aplikacji (np. WordPress). Po opublikowaniu luki w oprogramowaniu następują tysiące ataków osób wykorzystujących gotowe narzędzia i atakujących co popadnie.
Pomóc może jedynie aktualizacja aplikacji. O aktualizację programów dbają zwykle firmy hostingowe, ale wielu bloggerów, np. Grzegorz Marczak z antyweb.pl, przekonało się, że nieaktualny WordPress to doskonała zachęta dla wandali.
5. Zmień domyślną konfigurację
Równie ważna jak aktualne oprogramowanie jest jego poprawna konfiguracja. „Poprawna” często kłóci się z „domyślna” – brak hasła do konta administratora, ustawienie go jako „admin” czy umożliwienie dostępu do bazy z każdego komputera to typowe opcje, które należy zmienić.
Wydaje się to oczywiste, ale nawet duże serwisy popełniają tego typu błędy. Najlepszym przykładem jest uzyskanie dostępu do bazy danych użytkowników serwisu Wykop sprzed kilku miesięcy – poprzez niepoprawną konfigurację nieupoważnione osoby uzyskały dostęp do bazy danych ponad 100 tysięcy użytkowników.
6. Dobierz dane do testów
W czasie testów nie używaj danych produkcyjnych – serwery testowe mogą być słabiej zabezpieczone („usunę na chwilę hasło i sprawdzę czy działa. Działa, to niech na razie zostanie bez hasła”). Z drugiej strony dane nie mogą być losowe, bo przetestowanie szybkości wyszukiwania w ciągu user1, user2,…, user1000000 z pewnością nie będzie miało wiele wspólnego z rzeczywistością.
Dobrym pomysłem jest zmodyfikowanie oryginalnych danych – np. pomieszanie użytkowników i odpowiadających im haseł, zamiana domen w adresach e-mail, przestawianie liter w nazwach itp. Również w tym przypadku błąd pojawił się m.in. w wersji testowej Wykopu.
7. Nie przyzwyczajaj do phishingu
Nie przyzwyczajaj użytkowników do klikalnych hiperłączy prowadzących do formularza logowania w wysyłanych e-mailach. Im częściej będą zmuszani do wejścia na stronę wpisując jej adres, a nie klikając w link, tym mniejsze szanse, że dadzą się nabrać na ataki phishingowe. Doskonałym przykładem są wiadomości od Allegro, w których informacje o niepodawaniu hasła w odpowiedzi na e-maile kończą się… linkiem przekierowującym an stronę logowania.
8. Szyfruj transmisję
Jeśli dane na których operujesz mogą mieć kluczowe znaczenie dla użytkowników (e-mail, usługi związane z pieniędzmi) konieczne jest prowadzenie transmisji bezpiecznym protokołem https zamiast zwykłego http. Umożliwia on szyfrowanie transmisji i utrudnia on przechwycenie danych między użytkownikiem a serwerem. Taki błąd popełnia m.in. agencja Blogvertising pośrednicząca w sprzedaży {link_wew 6224}reklam na blogi{/link_wew}.
9. Rób kopie bezpieczeństwa
Rób kopie bezpieczeństwa i sprawdź czy działają. Użytkownicy powierzają ci dane i liczą na to, że uchronisz je nie tylko przed atakiem cyberprzestępców, ale również przed zdarzeniem tak przyziemnym jak awaria dysku twardego.
Wszystkie systemy kopii bezpieczeństwa powinny być testowane w celu sprawdzenia, czy na pewno działają tak jak powinny. O tym, że nie zawsze tak jest przekonał się właściciel serwisu Magnolia, którego amatorski backup odmówił posłuszeństwa – w efekcie dane użytkowników zostały bezpowrotnie utracone, a serwis przestał działać.
10. Nie utrudniaj życia
Dla speców od bezpieczeństwa najlepiej byłoby, gdyby usability nie istniało – wiadomo przecież, że większość ataków spowodowana jest błędem użytkownika. Jednak projektując zabezpieczenia zwróć uwagę, czy zbyt mocno nie komplikujesz systemu. W utrudnianiu życia przodują operatorzy komórek, z Orange na czele, którzy w czasie logowanie wymagają podawania kodów, odbierania SMS-ów i podawania mnóstwa innych informacji.
Jeśli przedstawione błędy wydają ci się banalne – doskonale! Twoi klienci mogą czuć się choć trochę bezpiecznie. Teraz pora zabrać się za zarządzanie sesjami, ochronę przed XSS i edukację użytkowników.