Podstawy bezpieczeństwa PHP – Suhosin
Napisał: Patryk Krawaczyński
30/12/2011 w Bezpieczeństwo Brak komentarzy. (artykuł nr 337, ilość słów: 382)
S
uhosin jest zaawansowanym systemem bezpieczeństwa dla języka PHP. Został on zaprojektowany tak, aby chronić serwery przed już znanymi, jak i dopiero nowymi lukami w aplikacjach oraz samym rdzeniu PHP. Składa się z dwóch niezależnych części: łaty nakładanej na sam interpreter jak i rozszerzenia, które można dołączyć do już skompilowanej instalacji. Mogą zostać one wykorzystane oddzielnie lub równocześnie. Pierwsza z nich implementuje kilka niskopoziomowych mechanizmów ochrony przed przepełnieniem buforów (ang. buffer overflows), czy nadużyciami z wykorzystaniem ciągów formatujących (ang. format string vulnerabilities). Druga część jest potężnym rozszerzeniem, które pozwala na implementację reszty ochrony.
Jednymi z ważniejszych funkcji jakie oferuje Suhosin to:
- Transparentne szyfrowanie ciasteczek i sesji,
- Ochronę przed manipulacją zmiennej memory_limit w PHP,
- Możliwość ochrony przed takimi atakami jak: Remote File / URL Inclusion, Directory / Path traversal, czy HTTP Response Splitting
- Kontrolę limitów żądań HTTP z rozróżnieniem na metody: GET, POST, COOKIE
- Kontrolę obiektów / plików wrzucanych przez upload,
- Białe i czarne listy funkcji, adresów URL i użycia eval()
- Możliwość logowania adresów IP wyciągniętych z nagłówka HTTP: X-Forwarded-For, jeśli host znajduje się za reverse proxy.
Przykład ręcznej instalacji rozszerzenia w systemie CentOS 6.2:
yum install php-devel re2c wget http://download.suhosin.org/suhosin-0.9.32.1.tar.gz tar -xvf suhosin-0.9.32.1.tar.gz cd suhosin-0.9.32.1 phpize ./configure make make test make install cp suhosin.ini /etc/php.d/
Po restarcie serwera WWW, polecenie: php -v powinien zwrócić nam mniej więcej komunikat:
PHP 5.3.3 (cli) (built: Nov 3 2011 11:45:59) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH
Suhosin mimo standardowej konfiguracji wprowadza wiele nowych ograniczeń dla aplikacji PHP, co może spowodować czasami problemy w poprawnym jej działaniu. Dlatego bardzo dobrym pomysłem jest włączenie na początku rozszerzenia w trybie symulacji, które będzie logowała wszystkie naruszenia np. do pliku /var/log/suhosin.log
:
suhosin.simulation = On suhosin.log.syslog = 511 suhosin.log.syslog.facility = 9 suhosin.log.syslog.priority = 1 suhosin.log.sapi = 511
Dodatkowo do daemona logowania rsyslog należy dodać wpis:
user.* /var/log/suhosin.log
Następnie go przeładowując: /etc/init.d/rsyslog restart. Tak pasywnie działające rozszerzenie możemy zostawić na jakiś starając się użytkować normalnie aplikację i spoglądając od czasu do czasu w log, aby wykrywać i dopasowywać wykryte naruszenia do naszych potrzeb:
Dec 29 22:43:04 stardust suhosin[31582]: ALERT-SIMULATION - configured request variable value length limit exceeded - dropped variable '__utmb' (attacker '79.8.8.8', file '/var/www/test.php')
Po danym okresie czasu można wyłączyć tryb symulacji i wprowadzić działanie mechanizmu w środowisku produkcyjnym.
Więcej informacji: Hardened-PHP