Suhosin é um avançado sistema de proteção que foi desenvolvido com o objetivo de proteger servidores e usuários de falhas nas aplicações escritas em PHP e implementar correções à própria base da linguagem. É separado em duas partes independentes que podem ser utilizadas em conjunto ou individualmente, sendo que uma delas é um patch a ser aplicado no core do PHP que implementa proteção contra vulnerabilidades do sistema (Engine Protection) e a outra parte é uma extensão que coloca em funcionamento todas as outras proteções e implementações de segurança.
Para aplicar o patch Suhosin será necessário recompilar o PHP do servidor!
Para descrever os processos de instalação estarei me baseando em sistemas RedHat (RPM), porém os procedimentos principais são os mesmos em qualquer distribuição…
Aplicando Suhosin Patch
Primeiramente faça o download do pacote Suhosin, da signature key da release a partir do site oficial e os fontes do PHP que utilizaremos para embutir o patch, e não se esqueça de verificar o md5 em todos os arquivos após o download para garantir que os fontes estão intactos.
Baixando a signature key e importando para nosso GNU Privacy Guard keychain:
wget http://www.hardened-php.net/hardened-php-signature-key.asc
gpg –import < hardened-php-signature-key.asc
Como este tutorial está baseado em RedHat, baixe e instale o pacote source da sua versão do php (ie. rpm -ivh php-5.1.6-12.el5.src.rpm) e entre em seu diretório source do rpmbuild (ie. /usr/src/redhat/SOURCES), lembrando que em outras distribuições é necessário entrar no diretório onde o fonte do PHP se encontra.
Agora, faça a checagem da gpg no arquivo .sig baixado:
gpg suhosin-patch-5.1.6-0.9.6.patch.gz.sig
Descompacte o patch do Suhosin na pasta dos sources e renomeie o patch nos padrões RedHat (é mais frescura mesmo, somente para quem usa distro RPM based) , e então entre na pasta dos SPECs e edite o arquivo referente ao PHP:
mv suhosin-patch-5.1.6-0.9.6.patch
php-5.1.6-suhosin.patchcd /usr/src/redhat/SPECS/
vi php.spec
Adicione “Patch0: php-5.1.6-suhosin.patch” no bloco onde são definidos os patches a serem aplicados, mas lembre-se que caso o patch “ecalloc” estiver presente no spec ele deve ser desativado por apresentar conflitos com suhosin.
Adicione também a linha “%patch0 -p1 -b .suhosin” ao bloco %setup -q para entrar na compilação, segue exemplo:
[...]
Source51: php.iniPatch0: php-5.1.6-suhosin.patch
Patch1: php-5.1.4-gnusrc.patch
Patch2: php-5.1.4-warnings.patch
Patch5: php-4.3.3-install.patch
Patch6: php-5.0.4-norpath.patch
Patch7: php-4.3.2-libtool15.patch
Patch13: php-5.0.2-phpize64.patch
# Patch14: php-5.1.6-ecalloc.patch
[...]
%setup -q
%patch0 -p1 -b .suhosin
%patch1 -p1 -b .gnusrc
%patch2 -p1 -b .warnings
%patch5 -p1 -b .install
%patch6 -p1 -b .norpath
%patch7 -p1 -b .libtool15
%patch13 -p1 -b .phpize64
# %patch14 -p1 -b .ecalloc
[...]
Após as modificações recompile o PHP com:
rpmbuild -ba php.spec
Podem ser apresentadas diversas dependências que necessáriamente devem ser instaladas no sistema antes da compilação, para usuários RHEL, Fedora e CentOS podem utilizar o yum ou up2date. Para instalação a partir dos fontes ou em outras distribuições, instale todos os pacotes necessários antes de iniciar o processo de compilação.
Após o final da compilação e empacotamento os pacotes estarão disponíveis em /usr/src/redhat/RPMS/i386 e já podem ser instalados com o suhosin-patch embutido.
Instalando a extensão Suhosin
Descompacte os fontes e compile com:
tar xvfz suhosin-0.9.20.tgz
cd suhosin-0.9.20
phpize
./configure
make
make install
Para habilitar a extensão vamos incluir um novo arquivo de include para o PHP com o conteúdo “extension=suhosin.so“, ou adicione a linha diretamente ao php.ini. Para ativar o novo módulo apenas reinicie o Apache.
Apesar da instalação padrão já atender a maioria dos usuários, você pode personalizar as configurações do Suhosin para atender as necessidades de seu ambiente, para isso é disponível um manual diretamente no site oficial.