Zabawy z PHP em Błażej Miga, Jaroslaw Sajko, PCSS blazej.miga@man.poznan.pl jaroslaw.sajko@man.poznan.pl 1
Agenda Wprowadzenie Kilka słów o PHP Konfiguracja php Moduł vs cgi Zamiast phpinfo() Niebezpieczne funkcje Scenariusze ataków Obrona systemu 2
Zespół Bezpieczeństwa PCSS Praca operacyjna w ramach ogólnopolskiej szerokopasmowej sieci PIONIER oraz zasobów Centrum Praca badawczo naukowa w ramach projektów krajowych oraz europejskich (CLUSTERIX, EGEE, UNIZETO, itvp) Usługi komercyjne (audyty, testy penetracyjne, analizy kodów źródłowych i binarnych, szkolenia, etc...) Praca po godzinach (komunikatory, analizatory kodów źródłowych) http://security.psnc.pl/ 3
PHP - Historia i dzień dzisiejszy 1994 r. Rasmus Lerdorf Personal Home Page Tools 1997 r. Zeev Suraski, Andi Gutmans (Israel Institute of Technology) PHP3 PHP: Hypertext Preprocessor Sierpień 2006 19 milionów domen, 1.3 miliona adresów IP Aktualne wersje (5.1.6, 4.4.4) 4
Więcej informacji Oficjalna strona internetowa http://www.php.net Listy mailingowe news.php.net php.announce php.doc.pl 5
PHP w pigułce Język skryptowy Możliwość zagnieżdżania w HTML Integracja z serwerem www jako moduł lub skrypt cgi Składnia bazująca na językach C, Java i PERL Brak jawnych typów danych 6
PHP w pigulce 4239 funkcji 81 rozszerzen (19 wkompilowanych standardowo) 10 najpopularniejszych projektow PHP korzysta z 790 funkcji z 10 rozszerzen 7
Konfiguracja php Plik konfiguracyjny php.ini Dyrektywy Apache a php_value php_flag php_admin_value php_admin_flag PHPINIDir 8
php.ini Nazwa Wartosc defaultowa Zmiana w allow_url_fopen 1 PHP_INI_SYSTEM auto_append_file NULL PHP_INI_PERDIR auto_prepend_file NULL PHP_INI_PERDIR disable_functions php.ini only display_errors 1 PHP_INI_ALL extension_dir /path/to/php PHP_INI_SYSTEM memory_limit 8M PHP_INI_ALL open_basedir NULL PHP_INI_SYSTEM safe_mode 0 PHP_INI_SYSTEM sendmail_path /usr/sbin/sendmail -t PHP_INI_SYSTEM PHP_INI_PERDIR PHP_INI_SYSTEM PHP_INI_ALL php.ini,.htaccess, httpd.conf php.ini httpd.conf Ustawiane wszedzie 9
Modul vs CGI Modul CGI Sposob dzialania ID usera uruchamiajacego skrypt disable_functions Safe_mode W praktyce niemozliwy do realizacji Dziala bez probemow Wynik generuje proces Taki sam jak processu Jedna wartosc dla Uruchamiany jest nowy Mozliwosc dowolnej Mozliwosc dowolnej Apache'a Apache wszystkich serwisow proces, generujacy wynik konfiguracji konfiguracji Ochrona filesystemu Uzytkownicy maja mozliwosc podgladania skryptow innych osob Brak mozliwosci podgladania skryptow Zagrozenia Uzytkownik moze przejac kontrole na serwerem, odczytac konfiguracje, zablokowac dzialanie serwera Wydajnosc Duza Niska 10
Zamiast phpinfo() Modul czy cgi? php_sapi_name() get_defined_constants() get_loaded_extensions() $_SERVER PHP_SAPI Przyklad 1 11
Zamiast phpinfo() Wersja PHP zend_version() phpversion() get_defined_constants() phpcredits(); $_SERVER PHP_VERSION Przyklad 2 12
Zamiast phpinfo() Dolaczone rozszerzenia, funkcje get_defined_constants() get_defined_functions() function_exists() get_loaded_extensions() extension_loaded() get_extension_funcs() is_callable() Przyklad 3 13
Zamiast phpinfo() Konfiguracja php.ini ini_get() ini_get_all() get_cfg_var() ini_set() ini_alter() Przyklad 4 14
Zamiast phpinfo() Srodowisko $_ENV getenv() apache_getenv() Przyklad 5 15
Zamiast phpinfo() Informacje systemowe getmypid() getmyuid() posix_get_pid() posix_geteuid() posix_getlogin() posix_getuid() phpuname() Przyklad 6 16
Niebezpieczne funkcje Uruchomienie kodu w procesie Apache'a dl Uruchomienie kodu '', pcntl_exec, system, exec, passthru, popen, proc_open, shell_exec, mail, mb_send_mail 17
Niebezpieczne funkcje Funkcje pocztowe mail, mb_send_mail Inne funkcje chmod, link, symlink, posix_kill, syslog, shmop_open 18
Scenariusze atakow DOS z apache_setenv(), i virtual DOS systemu z syslog() 19