Bezpieczeństwo heterogenicznej platformy hostingowej Gerard Frankowski, Marcin Jerzak Zespół Bezpieczeństwa PCSS Poznań, 19.07.2011 MIC Summer School 1
Agenda Wprowadzenie Przykładowe zagrożenia dla aplikacji webowych Bezpieczeństwo silnika bazy danych MySQL MS SQL Server Bezpieczeństwo języka stron ASP/ASP.NET PHP Zestaw użytecznych narzędzi do testowania konfiguracji oraz kodu 2
Cel prezentacji Przedstawienie możliwości budowy mieszanego środowiska hostingowego w kontekście bezpieczeństwa IT Szkolenie jest przeznaczone głównie dla administratorów serwerów WWW oraz twórców aplikacji webowych Częściowo skorzystają specjaliści bezpieczeństwa IT
Czy i dlaczego środowisko heterogeniczne? Kryteria wyboru Kwestie finansowe (MŚP, użytkownicy indywidualni) Doświadczenie Szybkość nauki Możliwości języka Dostępność specjalistów na rynku Docelowe wymagania stawiane przed aplikacją Preferencje i przekonania osobiste 4
Bezpieczeństwo wieloelementowego środowiska hostingowego Bezpieczeństwo komponentów System operacyjny serwera Serwer WWW Serwer baz danych Interpreter języka stron Inne (np. aplikacje CMS, usługa FTP) Wzajemna współpraca heterogenicznych składników środowiska Możliwe problemy z bezpieczeństwem interfejsów 5
Zagrożenia aplikacji webowych 6
Ile to kosztuje?
Najważniejsze zagrożenia (według OWASP TOP 10) Injections Cross-Site Scripting (XSS) Błędna obsługa sesji Insecure Direct Object References Cross-Site Request Forgery (CSRF) Security Misconfiguration
Injections (1) Zmuszenie aplikacji, aby wysłany przez użytkownika ciąg znaków przesłała do interpretera stron SQL Injection OS Command Injection Xpath Injection HTML Injection XML Injection LDAP Injection
Injections (2) ochrona Wykorzystanie: Procedur składowanych Prepared statements Walidacja danych przesyłanych przez użytkownika (white list) Zasada minimalnych uprawnień
Cross-sitesite scripting (XSS) (1) Dane pochodzące od atakującego przekazane są do przeglądarki użytkownika Reflected XSS Persistent XSS Zagrożenia: Kradzież identyfikatora sesji Kradzież danych Phishing
Cross-sitesite scripting (XSS) (2) Filtrowanie danych pochodzących od użytkownika przy użyciu białych list Przekodowanie danych pochodzących od użytkownika http://www.owasp.org/index.php/xss
Błędna obsługa sesji (1) HTTP to protokół bezstanowy Szyfrowanie wykorzystywane jedynie w momencie logowania Łatwe do przewidzenia identyfikatory sesji Sesje w ukrytych polach lub w URL-u Przechwycenie sesji = kradzież poświadczeń Firesheep http://security.psnc.pl/reports/sklepy_interne towe_cookies.pdf
Błędna obsługa sesji (2) ochrona Sesje losowe Przycisk wyloguj powoduje unieważnienie aktualnej sesji Wykorzystanie SSL Identyfikator sesji zmienia się po zalogowaniu Ochrona przed tzw. session fixation
Insecure Direct Object References Błędna polityka dostępu do zasobów www.jakiśbank.pl/client/10002341 www.jakiśbank.pl/client client/10002342 Każdorazowa weryfikacja uprawnień przy próbie dostępu do obiektu
Cross Site Request Forgery (CSRF) (1) Zmuszenie przeglądarki ofiary do wykonania akcji na atakowanej stronie Wykorzystanie przeglądarki: Sesje Adres IP User-Agent Certyfikat SSL Poświadczenia domeny Windows <img src=http:// ://www.jakiśbank.pl/deleteuser.php?id=123& width=1&height=1>
Cross Site Request Forgery (CSRF) (2) ochrona Token dodawany do każdego wrażliwego zapytania: W ukrytym polu O losowej wartości CSRF za pomocą XSS
Bezpieczeństwo silnika bazy danych 18
Wybieramy silnik bazodanowy Kryteriów wyboru może być wiele Znajomość rozwiązania Współpraca z innymi elementami środowiska Wydajność Skalowalność Prostota użytkowania Łatwość migracji Bezpieczeństwo Wykonywanie poleceń systemowych Multiple statements Dostęp do plików Problemy specyficzne dla silnika 19
Współpraca technologii: PHP + MSSQL Możliwe trudności z połączeniem technologii na co zwrócić uwagę? Uaktywnienie w php.ini rozszerzenia MS SQL [usunięcie];extension=php_mssql.dll Odpowiednia wersja biblioteki ntwdblib.dll 2000.80.194.0, nie 2000.2.8.0 Mixed authentication mode dla SQL Servera HKLM\Software\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\LoginMode = 2 Umożliwienie logowania się na określone konto ALTER LOGIN sa ENABLE ALTER LOGIN sa WITH PASSWORD <strong_pass> 20
Współpraca technologii: PHP + MSSQL (2) Możliwe trudności kontynuacja SQL Server Configuration Manager Uaktywnienie odpowiednich protokołów dla SQL Servera Wyłączenie szyfrowania (do testów) Lokalny firewall Sprawdzenie plików logu SQL Servera [Install_dir]\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG 21
Uruchamianie poleceń systemowych Nie chodzi tu o eksploitację innych podatności, dającą w rezultacie dostęp do powłoki systemu Mamy na myśli nadużycie istniejącej funkcjonalności odwołującej się do poleceń systemu operacyjnego Zagrożenia napastnik działa w systemie z uprawnieniami serwera baz danych Wyciek (bardzo wielu) informacji podstawa do dalszych ataków Zniszczenie lub modyfikacja bazy danych Wykonywanie działań w systemie operacyjnym DoS na serwer bazy danych i/lub system 22
Uruchamianie poleceń MySQL Brak bezpośredniego wsparcia dla uruchomienia polecenia systemowego Istnieje jedynie możliwość wykonania polecenia z narzędzia linii komend > system <command> Działa tylko w systemach uniksowych 23
Uruchamianie poleceń MS SQL Rozszerzona procedura składowana xp_cmdshell Domyślnie wyłączona (duży plus!) Wymaga uprawnień CONTROL SERVER Uaktywnienie poprzez: SQL Server Management Studio Klienta linii poleceń EXEC sp_configure 'show advanced options', 1 EXEC sp_configure 'xp_cmdshell', 1 Powinniśmy uaktywnić tylko jeśli jest to absolutnie niezbędne! 24
Uruchamianie poleceń MS SQL (2) Konfiguracja xp_cmdshell w MS SQL Server 2008 SQL Server Management Studio [Server_Name] + RMB Facets Facet: Surface Area Configuration 25
Uruchamianie poleceń MS SQL (3) Jeżeli niezbędne jest udzielenie prawa wykonania procedury xp_cmdshell pojedynczemu użytkownikowi Nie poprzez GRANT CONTROL SERVER Lepiej: EXEC sp_grantdbaccess user GRANT exec ON xp_cmdshell TO user Podsumowując: Istnieją możliwości wykonania ataku, ale skonfigurowanie serwera zgodnie z zasadą minimalnych przywilejów radykalnie je zmniejsza 26
Multiple Statements Możliwość podania kolejnego zapytania po znaku specjalnym (zwykle ; ) Umożliwia wykonanie dowolnego polecenia, do którego użytkownik bazy danych ma uprawnienia Np. SELECT * FROM users WHERE user= test ; INSERT INTO users (user, pass) VALUES ( hacker, )-- Zwiększenie stopnia zagrożenia w przypadku istnienia podatności SQL Injection Jak ten mechanizm obsługiwany jest w MySQL oraz MS SQL? 27
Multiple statements MySQL Domyślnie mechanizm NIE JEST wspierany Bardzo dobre założenie! Włączenie obsługi: Dodatkowy parametr mysql_connect() $dbconn = mysql_connect( db, user, pass, FALSE, 65536); //CLIENT_MULTIPLE_STATEMENTS Uwaga! Z poziomu PHP otrzymamy wynik tylko pierwszego zapytania! Z punktu widzenia bezpieczeństwa nie powinniśmy używać tej opcji 28
Multiple statements MS SQL MS SQL umożliwia domyślnie wykonanie multiple statements Znakiem separatora jest średnik (;) Brak mechanizmu zabraniającego takiego zachowania Podobnie, jak w przypadku MySQL otrzymamy wynik tylko pierwszego zapytania Jedyną formą obrony jest filtrowanie danych i odpowiednia konstrukcja zapytań QUOTENAME 29
Wbudowany dostęp do plików MySQL Niebezpieczne możliwości SELECT LOAD_DATA( c:/boot.ini ) LOAD DATA INFILE ( c:/boot.ini ) INTO table Warunki powodzenia LOAD_DATA Plik na tej samej maszynie, co serwer MySQL Należy podać pełną ścieżkę do pliku Prawa do odczytu dla pliku i ścieżki Uprawnienie FILE dla użytkownika bazy danych Wielkość pliku mniejsza od max_allowed_packets Uwzględnia parametr secure_file_priv 30
Wbudowany dostęp do plików MySQL (2) Błędy w konfiguracji powodują zagrożenie wyciekiem informacji nawet przy braku multiple statements SELECT id, name FROM user where id = 2 UNION SELECT 1, LOAD_FILE( c:/boot.ini ); DrugiSELECT musi cechować się identyczną liczbą i rodzajem kolumn (można je wykryć metodą prób i błędów) LOAD_FILEnie zwróci tutaj więcej znaków niż szerokość odpowiadającej mu kolumny name (np. 30) należy zastosować wymaganą liczbę razy funkcję SUBSTRING: SELECT id, name FROM user where id = 2 UNION SELECT 1, SUBSTRING(LOAD_FILE( c:/boot.ini ), 30); 31
Dostęp do plików w MS SQL Wykorzystanie procedury xp_cmdshell Mechanizmy OLE Automation Wykorzystanie sp_oacreate, sp_oamethod Domyślnie wyłączone podobnie jak xp_cmdshell Konstrukcja OPENROWSET SELECT BulkColumn FROM OPENROWSET (BULK c:\boot.ini, SINGLE_CLOB) MyFile Wykorzystywane uprawnienia konta serwera SQL 32
Kilka uwag na temat bezpieczeństwa MS SQL Server 33
Przegląd cech bezpieczeństwa Różnice między SQL Server 2005 a 2008 (przykłady) Brak niektórych narzędzi lub znaczące zmiany w korzystaniu z nich Inne, np. usunięcie polecenia DBCC BYTES Nowe lub ulepszone mechanizmy bezpieczeństwa Extensible Key Management Transparent Data Encryption SQL Server Audit Zarządzanie oparte na zasadach (policies) 34
Ulepszenia w zakresie szyfrowania Extensible Key Management Możliwość rejestracji zewnętrznych urządzeń bezpieczeństwa (HSM) w SQL serwerze Dostępne są dodatkowe, zaawansowane funkcje (np. wygasanie klucza) Dostęp z poziomu poleceń T-SQL Transparent Data Encryption Realizacja szyfrowania i deszyfrowania plików danych i logu w czasie rzeczywistym (AES, 3DES) Brak konieczności jakichkolwiek zmian na poziomie aplikacji korzystającej z danych Zabezpieczenie także kopii zapasowych! 35
Uwierzytelnianie i logowanie Większe możliwości uwierzytelniania Kerberos Rozszerzenie na wszystkie protokoły komunikacyjne Zaawansowane usługi raportowania (Reporting Services) SQL Server Audit Poprawiona wydajność logowania informacji Bardzo duża granularność konfiguracji poziom serwera, bazy danych, rodzaju instrukcji (np. SELECT, INSERT) wydawanych przez poszczególnych użytkowników Zapis informacji do dziennika systemu (SQL Server musi mieć niezbędne uprawnienia), aplikacji lub do osobnego pliku Możliwość zatrzymania serwera w przypadku błędu 36
Policy-based Management Zasady stosowane na poziomie bazy, serwera lub grupy serwerów Możliwość definicji polityki i eksportu na wszystkie posiadane serwery Kolejność działania Tworzenie warunków odnoszących się do różnych aspektów (ang. facet) Tworzenie polityk grupujących różne warunki Ewaluacja i/lub stosowanie polityk w odniesieniu do serwera lub serwerów Narzędzie: SQL Server Management Studio Możliwość eksportu bieżącej konfiguracji jako polityki 37
Zmiany w zakresie narzędzi bezpieczeństwa W przeciwieństwie do SQL Server 2005, nie są już dostępne Surface Configuration Tool (SCT) oraz Best Practices Analyzer (BPA) Analogiczną funkcjonalność do SCT można uzyskać za pośrednictwem SQL Server Management Studio lub SQL Server Configuration Manager BPA - Microsoft uznał, że narzędzia, które jedynie wskazują problemy, ale ich nie naprawiają, nie są przydatne użytkownikom (?) Większość ustawień można zdefiniować na zasadzie zarządzania politykami 38
Tryb uwierzytelniania w MS SQL Server 2 tryby uwierzytelniania SQL (Mixed Mode) Windows (Trusted Mode) Mixed Mode Trusted Mode 39
Którą metodę wybrać? Mixed mode oferuje szersze możliwości Lepsza kompatybilność i interoperacyjność Umożliwia łączenie się użytkownikom o różnych tożsamościach(np. aplikacje webowe!) ale powoduje więcej problemów z bezpieczeństwem Dodatkowe uwierzytelnienia do zapamiętania Mniejsze możliwości wymuszenia polityki kontroli dostępu Konieczność każdorazowego uwierzytelniania Serwer musi gdzieś sprawdzać/przechowywać hasła O ile to możliwe, należy korzystać z uwierzytelniania zintegrowanego z systemem 40
Weryfikacja trybu uwierzytelniania Zapytanie EXEC xp_loginconfig login mode SSMS [SERVER_NAME] + RMB Properties Security Zwróćmy też uwagę na ustawienia logowania! 41
Przegląd błędów 42
Chociaż Bardzo ciekawy błąd SQL Server Cleartext Password Exposure Data ogłoszenia: 2 września 2009 (Sentrigo) Podatne wersje SQL Server 2000, 2005, 2008 Hasła użytkowników łączących się z serwerem są przechowywane w pamięci w formie niezaszyfrowanej Dotyczy SQL (Mixed) Authentication Mode Odczyt wymaga uprawnień lokalnego administratora W związku z powyższym producent nie uznał odkrycia za lukę bezpieczeństwa oraz odmówił przygotowania poprawki 43
Zachęcamy do eksperymentów Spróbuj sam obejrzeć hasło w pamięci! Dołączenie się do procesu SQL Server przy pomocy debuggera Przeglądanie zaalokowanej pamięci Po wydaniu polecenia CREATE LOGIN Po podłączeniu się użytkownika do serwera (za pomocą różnych interfejsów) Użycie narzędzia Sentrigo Passwordizer i ponowne przejrzenie pamięci Więcej: prezentacja dostępna na stronie MIC: http://mic.psnc.pl/download/mic_091119.pdf 44
Hasło w pamięci Ślad definicji hasła użytkownika Utworzono użytkownika: CREATE LOGIN supertajny WITH PASSWORD = 'Teg0NIKT_nie_zgadn1E:)' Wyczyszczono pamięć, po czym użytkownik supertajny połączył się z serwerem 45
Możliwe zagrożenia Administrator systemu i tak ma praktycznie pełną władzę nad kontami użytkowników SQL Servera Nie chodzi więc o to, że np. zobaczy ich dane Złośliwy administrator może jednak: Odczytać hasła (nie skróty!) użytkowników i próbować wykorzystać je w innych serwisach Podszyć się niepostrzeżenie pod użytkownika i wykonać niepożądane działania w jego imieniu Hasła w otwartej postaci nigdy nie powinny być ujawniane w pamięci (pliku) Gdyby tak było, obronilibyśmy się na tym polu także przed złośliwym administratorem 46
Próba naprawienia sytuacji Unikanie SQL Authentication Mode Zastosowanie narzędzia Sentrigo Passwordizer Do bezpłatnego pobrania ze strony producenta Wymaga wypełnienia krótkiego formularza rejestracyjnego Czyści pamięć alokowaną przez SQL Server (nie rozwiązuje problemu, tylko usuwa jego skutki) Jest możliwe, że spowoduje efekty uboczne! Musi być uruchamiane regularnie (mogą nadejść nowe połączenia ) Naprawdę złośliwy administrator systemu nie ma żadnego powodu, aby je zastosować 47
Ciekawostka: sytuacja gorsza w edycji 2005 W SQL Server 2005 (i wersjach wcześniejszych) nie był potrzebny administracyjny dostęp do systemu, wystarczyła możliwość zadawania zapytań Uzyskanie listy zaalokowanych obszarów pamięci SELECT * FROM sys.dm_os_virtual_address_dump Przeglądanie poszczególnych obszarów pamięci: DBCC TRACEON(3604) DBCC BYTES(adres, liczba bajtów) DBCC BYTES nie działa już w SQL Server 2008 48
Zasada minimalnych przywilejów Dobrze zaprojektowana konfiguracja domyślna, ale nadal można wykonać dodatkowy hardening Wybór nisko uprzywilejowanych kont dla usług SQL Servera podczas instalacji lub po niej Usługa Sieciowa, optymalnie dedykowane osobne konta dla usług Zastrzeżenie dostępu do wybranych procedur składowanych Zwłaszcza dla roli public Zmiana nazwy konta sa (domyślnie zablokowane) Zablokowanie dostępu konta guest do baz systemowych Rozważenie usunięcia wbudowanej domyślnie grupy BUILTIN\Administrators (wymaga analizy) Uaktywnienie weryfikacji polityki wygasania hasła 49
Procedury składowane ciekawostka (1) Możliwość enumeracji kont Windows z poziomu konta gościa przy pomocy procedury składowanej xp_revokelogin Uwaga: wbrew nazwie, nie jest to procedura rozszerzona ;) Testy przeprowadzono na domyślnej instalacji systemu Różne komunikaty błędów dla istniejących i nieistniejących nazw kont Podobna sytuacja występuje dla sp_revokelogin, ale już nie dla xp_grantlogin czy sp_grantlogin 50
Procedury składowane ciekawostka (2) 51
Sprawdzanie i zastrzeganie listy procedur Weryfikacja SELECT object_name(major_id) AS securable FROM sys.database_permissions WHERE grantee_principal_id = user_id('public') AND objectproperty(major_id, 'IsExtendedProc') = 1 ORDER BY securable lub IsProcedure dla procedur zwykłych Odebranie praw do procedur REVOKE EXECUTE ON xp_revokelogin TO public Zastosować np. dla xp_dirtree, xp_fileexist, xp_getnetname, xp_instance_regread, xp_regread Należy przeanalizować, czy funkcjonalność nie jest niezbędna! Np. zamiast xp_revokelogin może być DROP LOGIN 52
Podsumowanie bezpieczeństwa SQL Servera SQL Server 2008 to ogromny kombajn i nie jest łatwo ogarnąć wszystkie aspekty bezpieczeństwa Producent czyni wiele wysiłków: Coraz lepsza (dobrze chroniona) domyślna konfiguracja Nowe, zaawansowane mechanizmy ochrony Prawdopodobnie mało błędów bezpieczeństwa w kodzie Wsparcie ze strony innych elementów infrastruktury (jak system operacyjny) Nie zawsze można je wykorzystać ze względu na chęć zapewnienia interoperacyjności Dlatego nadal niezbędny jest nadzór i uważne przystosowanie konfiguracji do swych potrzeb 53
Bezpieczeństwo języka stron oraz kodu 54
Konfiguracja ASP.NET oraz PHP Nie będziemy bezpośrednio porównywać rozwiązań pod kątem bezpieczeństwa Są zbyt różne (np. PHP to tylko jeden język, ponadto ma otwarty kod łatwiej znaleźć błędy) Dokonamy przeglądu możliwych błędów bezpieczeństwa w kontekście konfiguracji języka 55
Konfiguracja ASP.NET Pliki tekstowe w formacie XML Edycja ręczna lub modyfikacja części opcji w IIS Manager Dla całego serwera machine.config + web.config (katalog %SystemRoot%\Microsoft.NET\Framework\%wersja%\CONFIG) Dla aplikacji webowej web.config(w katalogu głównym i/lub podkatalogach) Możliwe problemy Nieprawidłowy poziom zaufania CAS Często spotykane błędne ustawienia konfiguracji 56
Konfiguracja CAS (1) Aplikacji można przypisać 1 z 5 poziomów zaufania Full, High, Medium, Low, Minimal Konfiguracja: web.config, machine.config Możliwe jest także przygotowanie własnej definicji poziomu zaufania CAS działa jedynie dla kodu zarządzanego Kod zarządzany (.aspx) wykonywany pod kontrolą środowiska CLR (aspnet_wp.exe), kod niezarządzany (.asp) obsługiwany przez asp.dll ASP wymaga konwersji do ASP.NET Nie ma możliwości tworzenia zarządzanego kodu PHP 57
Konfiguracja CAS (2) Uprawnienia Code Access Security Full brak ograniczeń (z dokładnością do uprawnień konta, na którym działa aplikacja) High brak możliwości wykonania kodu niezarządzanego (unmanaged code) Medium dostęp jedynie do katalogu aplikacji Low blokada odwołań do innych środowisk (sieć, baza danych itd.) Minimal dostępne wyłącznie najprostsze operacje (np. obliczenia) Domyślnie aplikacje uruchamiane z poziomem Full Zły pomysł, szczególnie dla współdzielonego hostingu 58
Utwardzenie konfiguracji CAS Poziom Medium (jeśli nie jest potrzebny wyższy) Zabronienie nadpisania przez pliki podrzędne 59
Najpoważniejsze błędy konfiguracji ASP.NET Poniższe błędne praktyki dotyczyć mogą wszystkich aplikacji webowych opartych na ASP.NET Custom Errors Disabled Leaving Tracing Enabled Leaving Debugging Enabled Cookies Accessible Through Client-Side Script Cookieless Session State Enabled Więcej informacji: http://www.devx.com/dotnet/article/32493 60
Custom Errors Disabled Nieprawidłowa konfiguracja <configuration> <system.web> <customerrors mode="off"> Prawidłowa konfiguracja <configuration> <system.web> <customerrors mode="remoteonly"> Znaczenie: Wyłączenie trybu customerrors spowoduje, że zdalny użytkownik ujrzy szczegółowy opis błędu, także z fragmentami kodu Dla lokalnych żądań warto pozostawić tryb debugowy 61
Własne komunikaty o błędach To jeszcze nie jest sytuacja idealna Właściwe będzie przygotowanie własnych plików niezawierających informacji konfiguracyjnych, a np. przekazujących kontakt do administratora systemu lub helpdesku Odpowiednia sekcja pliku Web.config: <customerrors mode="remoteonly"> <error statuscode="404" redirect="errors/e404.htm"> <error statuscode= 500" redirect="errors/e500.htm"> </customerrors> 62
Leaving Tracing Enabled Nieprawidłowa konfiguracja <configuration> <system.web> <trace enabled="true" localonly="false"> Prawidłowa konfiguracja <configuration> <system.web> <trace enabled="false" localonly="true"> Znaczenie: Włączenie flagi powoduje, że zdalny użytkownik może uzyskać dostęp do dużej ilości wrażliwych danych, np. struktury poprzednich żądań do serwera, szczegółów jego konfiguracji, danych przesłanych w formularzach... 63
Leaving Debugging Enabled Nieprawidłowa konfiguracja <configuration> <system.web> <compilation debug="true"> Prawidłowa konfiguracja <configuration> <system.web> <compilation debug="false"> Znaczenie: Pozostawienie włączonej flagi debug umożliwia ujawnienie większej ilości informacji Ustawienie customerrors nie wystarczy (niektóre narzędzia deweloperskie ujawniają treść komunikatów błędów) 64
Cookies Accessible Through Client-Side Script Nieprawidłowa konfiguracja <configuration> <system.web> <httpcookies httponlycookies="false"> Prawidłowa konfiguracja <configuration> <system.web> Znaczenie: <httpcookies httponlycookies="true"> Ustawienie true spowoduje, że aktywna zawartość strony nie będzie mieć dostępu do cookies 65
Najpoważniejsze błędy konfiguracji ASP.NET Poniższe błędne praktyki dotyczą aplikacji webowych opartych na ASP.NET, w których wykorzystuje się uwierzytelnianie Windows Forms Cookieless Authentication Enabled Failure to Require SSL for Authentication Cookies Sliding Expiration Used Non-Unique Authentication Cookie Used Hardcoded Credentials Used Więcej informacji: http://www.devx.com/dotnet/article/32493 66
Wybrane aspekty konfiguracji PHP (1) Tekstowy plik konfiguracyjny php.ini Możliwość wpływania na konfigurację w runtime Polityka ujawniania informacji error_reporting = E_ALL & ~E_NOTICE expose_php = off display_errors = off log_errors = on error_log = c:\mylogs 67
Wybrane aspekty konfiguracji PHP (2) Limity memory_limit = 8M max_input_time = 60 max_execution_time= 120 Ograniczenie inwencji użytkownika file_uploads = off register_globals = off magic_quotes_gpc = off (!!!) allow_url_fopen = off disable_functions = passthru, exec,... 68
Lista niebezpiecznych funkcji (dla IIS) chmod exec get_cfg_var getenv ini_get ini_get_all ini_set mail passthru pcntl_exec phpuname popen proc_open send_mail shell_exec syslog system Dodatkowe funkcje dla serwera Apache, Uniksów, POSIX Jeśli powyższe funkcje nie są niezbędne, powinny być dopisane do php.ini w klauzuli disable_functions 69
Ciekawe narzędzia 70
Przykłady narzędzi bezpieczeństwa MS Web Application Configuration Analyzer Konfiguracja Windows, IIS, MS SQL Server ASP.NET Configuration Analyzer Konfiguracja ASP.NET MS Source Code Analyzer for SQL Injection Kod ASP PHPSecInfo RIPS Konfiguracja PHP Kod PHP 71
Przydatne narzędzia MS WACA Microsoft Web Application Configuration Analyzer Wersja 2.0 najnowsza aktualizacja z maja 2011 Wymagania: Microsoft.NET 4.0 Pobieramy instalator.msi spod adresu: http://www.microsoft.com/download/en/details.aspx?id=573 159 reguł testujących Ustawienia ogólne (głównie systemu operacyjnego) 62 Ustawienia serwera Microsoft IIS 75 Ustawienia serwera MS SQL 22 Uwaga! Jeżeli nazwa instancji SQL Servera nie jest domyślna, należy ją bezpośrednio podać jako FQDN (np. KOMPUTER\SQLEXPRESS) 72
73
Charakterystyka narzędzia Prosty interfejs Możliwość skanowania zdalnego komputera po podaniu FQDN (i zapewnieniu dostępu) Wiele użytecznych informacji oraz wyjaśnień z dziedziny zabezpieczeń Możliwość eksportu wyników Do arkusza MS Excel Współpraca z MS Team Foundation Server Wraz z instalatorem dostarczany przydatny poradnik WACA User Guide 74
75
76
Wyniki Microsoft WACA Zwróćmy uwagę na szczegółowość oraz podanie sposobu sprawdzenia wyników 77
Eksport do MS Excel 78
ASP.NET Security Analyzer (ANSA) Autor: Dinis Cruz, OWASP http://www.owasp.org/index.php/ansa Wersja 0.31 (dawno nie rozwijana, ale wskazuje najważniejsze podatności) Narzędzie uruchamiamy z katalogu wewnątrz witryny http://127.0.0.1/ansa_v0_31b/default.aspx Uruchomienie na witrynie skojarzonej z niestandardowym portem może generować błędy 79
80
MS Source Code Analyzer for SQL Injection Narzędzie do statycznej analizy kodu ułatwiające wykrycie podatności SQL Injection w kodzie ASP Wersja 1.3 (listopad 2008) Działa tylko dla kodu w języku VBScript Mogą występować pewne błędy analizy (w międzyczasie powstał nowy parser) Narzędzie linii komend Przykład użycia: msscasi_asp /input="c:\source\logon.asp /output= o.xml Więcej informacji: http://support.microsoft.com/kb/954476 81
82
PHPSecInfo Projekt PHP Security Consortium Najnowsza wersja: 0.2.1, kwiecień 2007 http://phpsec.org/projects/phpsecinfo Narzędzie napisane w PHP ;) Prosta analiza konfiguracji środowiska PHP Wgrywamy np. pod http://127.0.0.1/phpsecinfo Narzędzie uruchamia kilkanaście prostych testów (nie wszystkie testy działają w środowisku Windows) Przyjazny interfejs Obszerne objaśnienia 83
84
85
RIPS Skaner kodu źródłowego PHP Najnowsza wersja: 0.40 (czerwiec 2011) http://rips-scanner.sourceforge.net Napisany również w PHP Częściowe wsparcie dla kodu obiektowego Wykrywa między innymi podatności: XSS SQL Injection Local/Remote File Inclusion Remote Code Execution LDAP/XPath Injection 86
87
RIPS dalsze informacje Projekt aktywnie rozwijany Bardzo ciekawe możliwości konfiguracyjne Różne poziomy dokładności (i prędkości) skanowania Zaawansowane informacje w plikach w podkatalogu config Interesująca funkcjonalność Możliwość generowania exploitów dla CURL-a Użyteczne narzędzia, np. grep + wyrażenia regularne Konfigurowanie wyglądu wyników Uwaga jeśli serwer WWW hostujący RIPS-a nie ma włączonej obsługi PHP short tags (<??>), narzędzie nie przeskanuje skryptów PHP tak oznaczonych 88
Podsumowanie 89
Najważniejsze przesłanie Podczas prezentacji przedstawiliśmy wybrane aspekty bezpieczeństwa alternatywnych składników mieszanej platformy hostingowej Elementy porównań Dodatkowe aspekty bezpieczeństwa rozwiązań Microsoftu Poznaliśmy kilka użytecznych darmowych narzędzi, działających w środowisku Windows na różnych poziomach Ani stosowanie bezpieczniejszych rozwiązań, ani korzystanie z narzędzi nie uchroni nas przed tworzeniem odpornego kodu! 90
Pytania, dyskusja Dziękujemy za uwagę! 91