Hosting WWW Bezpieczeństwo hostingu WWW Dr Michał Tanaś (http://www.amu.edu.pl/~mtanas)
Najgroźniejsze ataki na serwer WWW Najgroźniejsze ataki na serwer WWW Cross-site scripting (XSS) SQL injection Denial of Service (DoS)
Cross-site scripting (XSS) Typowa strona WWW składa się z wielu elementów, takich jak tekst, obrazki, multimedia... oraz zawartość wykonywalna (tzw. skrypty). Jeżeli strona wymaga autoryzacji, trudno żeby użytkownik potwierdzał swoją tożsamość przy dostępie do każdego elementu z osobna dlatego w przeglądarkach powszechnie stosowana jest zasada same origin pozwalająca przeglądarce na automatyczne pobieranie kolejnych elementów z tej samej strony którą użytkownik przegląda
Cross-site scripting (XSS) Ta sama strona jest identyfikowana przez trójkę: protokół, nazwa serwera i port Oznacza to że jeżeli serwer pozwala na przekierowania (np. proxy czy redirect) będzie on autoryzował elementy umieszczone na innych serwerach! Ponieważ URL może prowadzić do zewnętrznego serwera przy źle skonfigurowanym serwerze i źle napisanej stronie można spowodować niejawną autoryzację cudzej strony WWW która może być skryptem np. kradnącym hasła.
Cross-site scripting (XSS) Sposób wykonania ataku XSS: 1) Znaleźć serwer dopuszczający przekazywanie pełnych URL'i w parametrach skryptu, np. http://www.kiepskibank.com 2) Stworzyć URL zawierający niejawne przekierowanie, np. http://www.kiepskibank.com?mirror= http://zlodziej.com/zlodziej.js 3) Wysłać taki URL mailem lub umieścić na własnej stronie WWW
Cross-site scripting (XSS) Sposób wykonania ataku XSS: 4) Po kliknięciu na URL użytkownik loguje się na stronę www.kiepskibank.com 5) jednocześnie nieświadomie wykonując skrypt ze strony zlodziej.com 6) który np. spyta o hasło do www.kiepskibank.com
Cross-site scripting (XSS) Sposoby obrony przed XSS: Na poziomie strony WWW: Zawsze sprawdzać poprawność danych przesyłanych przez użytkownika!!! Na poziomie konfiguracji serwera WWW: Testowanie zewnętrznych URL'i w parametrach skryptów (np. przez RewriteCond) Usuwanie parametrów skryptów przesyłanych z zewnątrz (np. przez RewriteRule)
SQL injection Większość zaawansowanych stron WWW korzysta z bazy danych która zazwyczaj jest bazą SQL-ową co oznacza że język poleceń dla tej bazy jest powszechnie znany Przy źle napisanej stronie WWW istnieje możliwość przesłania w parametrze skryptu polecenia SQL które zostanie wykonane przez bazę i np. ujawni lub zniszczy wrażliwe dane znajdujące się w bazie
SQL injection Sposoby obrony przed SQL injection: Na poziomie strony WWW: Zawsze sprawdzać poprawność danych przesyłanych przez użytkownika!!! Na poziomie konfiguracji serwera WWW: Testowanie słów kluczowych SQL (np. SELECT czy DROP) w parametrach skryptów (np. przez RewriteCond) Usuwanie parametrów skryptów przesyłanych z zewnątrz (np. przez RewriteRule)
Denial of Sevice Liczba urządzeń podłączonych do Internetu przekroczyła 5 mld (w 2010 r.) i szacuje się że przekroczy 20 mld w 2020 r. Co będzie jeżeli kilkadziesiąt/kilkaset tysięcy urządzeń zacznie co chwilę łączyć się z jednym konkretntym serwerem? Żaden, nawet najsilniejszy, serwer nie będzie w stanie obsłużyć takiego ruchu i przestanie działać.
Denial of Sevice Atak DoS powoduje czasową niedostępność serwera dla użytkowników Co może być wykorzystywane do: Szkodzenia operatorowi danego serwera (cyberwandalizm, cyberterroryzm, cyberaktywizm) Uruchomienia fałszywej kopii danego serwera (np. przechwytującej hasła) Do ataków DoS najczęściej wykorzystywane są komputery nad którymi kontrolę przejęli cyberprzestępcy (tzw. zombie nety)
Denial of Service Obrona przed dobrze przeprowadzonym DoS jest w praktyce niemożliwa ponieważ ochrona przed DoS utrudnia również korzystanie z serwera prawdziwym użytkownikom można co najwyżej wprowadzać limity jednoczesnych połączeń czy ilości żądań na sekundę z pojedynczego adresu Serwery wewnętrzne nie powinny być w ogóle dostępne z Internetu.
Inne ataki na WWW Code injection Directory traversal Cross site request forgery (CSRF) CRLN injection
Code injection Atak podobny do SQL injection... tylko że zamiast polecenia SQL przekazuje się program wykonywalny (np. wirusa) lub polecenie systemowe (np. rm -rf / ) Potencjalnie znacznie groźniejszy niż SQL injection ponieważ może dać pełną kontrolę na serwerem WWW (a nie tylko nad bazą danych) ale znacznie trudniejszy do wykonania.
Directory traversal Próba dostępu do pliku, spoza strony WWW np. poprzez../../../../../../../../../../../etc/passwd Niebezpieczna tylko przy nieprawidłowo skonfigurowanym serwerze WWW ponieważ normalnie serwer powinien działać z uprawnieniami, które nie dają mu dostępu do wrażliwych danych systemu operacyjnego Można się dodatkowo zabezpieczyć uruchamiając tzw. chroot (fałszywy rootfs) uruchamiając Apache przy pomocy polecenia systemowego chroot
Cross site request forgery Atak podobny do cross site scripting z tą różnicą że odbywa się poprzez bezpośrednie wysłanie żądania HTTP do zewnętrznego serwera bez wykorzystania skryptów Np. <img src= http://www.kiepskibank.com/przelewy?kwota=100000000&k onto =... alt= height=1 width=1> Sposoby obrony takie jak przed cross site scripting
CRLN injection Jeżeli dane dostarczane z zewnątrz są przekazywane jako parametr do poleceń systemowych... to odpowiednio fabrykując taki parametr napastnik jest w stanie wykonać dowolne polecenie systemowe na serwerze, z efektywnymi prawami serwera WWW! Również takie o których twórca strony nie pomyślał!
CRLN injection Przykład Strona WWW testuje istnienie pliku o nazwie podanej w formularzu lub w adresie URL przy pomocy polecenia systemowego: test -f nazwapliku Co się stanie jeżeli ktoś poda następującą nazwę pliku : bylejakanazwa; /bin/rm -rf * System wykona DWA polecenia systemowe: 1) Najpierw: test -f bylejakanazwa 2) a potem rm -rf * z wiadomymi skutkami