Cómo endurecer el php?

Imagen de Epe

Wow, aquí una bonita que he aplicado hace un tiempo.

Texto original lo pueden encontrar aqui:
http://www.ernestoperez.com/staticpages/index.php?page=20050210104424911

Endureciendo el php, mejorando su seguridad con hardened - php
Endureciendo PHP

PHP es al momento, uno de los lenguajes de programación (fundamentalmente para web) más populares al momento. Es un lenguaje de programación multiplataforma, es decir, puede ejecutarse tanto sobre linux, unix SCO, windows, macos, OSF o cualquier otro sistema operativo usado en el mercado.

¿Qué ventajas me da esto? Pues que una aplicación hecha en PHP puede sencillamente ser portada entre diferentes sistemas operativos con pocos o ningún cambio.

Debido a la amplia distribución del php en el mercado, php necesita ahora más que nunca de una fortaleza extraordinaria, una gran resistencia ante ataques de gusanos o usuarios malintencionados (fallas de seguridad).

En este texto, ayudaremos a los interesados a comprender un poco más las diferentes técnicas de protección contra fallas de seguridad que han ideado los autores del Hardened PHP.

Partes de este documento han sido extraídas del sitio de hardened php.

¿Qué es el hardened-php?

El php endurecido (hardened-php) agrega características de endurecimiento al php para proteger los servidores de:

1.Proteger el php contra un número de scripts php pésimamente escritos
2.Potenciales fallas de seguridad desconocidas que puedan existir en el motor de php en sí.

Una de las características que vemos más prometedoras es precisamente este segundo punto, ya que no basta sólo con protegernos contra fallas de seguridad desconocidas, siempre es bueno tener algoritmos y programas endurecidos que sean capaz de soportar de una forma y otra ataques a sus fallas de seguridad desconocidas. Gracias a que el PHP es código abierto, los autores de hardened-php han podido aplicar estas ideas al php.

¿Qué provee el hardened php?

*Protección con canarios en el manejador de memoria del Zend
*Protección con canarios de las listas enlazadas del Zend
*Protección contra exploits (fallas) en el manejo de formato de cadenas
*Protección contra inclusión de código arbitrario
*Histórico de los atacantes vía syslog

¿Qué es un canario?

Los mineros usaban hace años, para detectar monóxido de carbono (CO) en las minas donde trabajaban unos canarios enjaulados. Los llevaban delante, los canarios eran más sensibles al CO que el ser humano, por tanto al incrementarse un poco la concentración de CO en la mina, el canario moría y los mineros podían determinar que debían salir inmediatamente del sector afectado.

En la programación se usa la misma técnica, un canario es un área con ciertos datos que se ponen inmediatamente después de una variable (en la memoria) cuando un atacante intenta, por ejemplo, sobreescribir el área de datos mediante un exploit de desbordamiento (de una variable), escribe en el área de la variable, pero aprovecha una determinada vulnerabilidad que escribe más allá del tamaño de la variable y sobre escribe otras áreas hasta potencialmente escribir en el área de código (el área de datos y código son contiguas). Ahora, con esta protección el sistema una vez se escriba los datos, verificará si el canario ha sido envenenado (al estar después de la variable, si lo sobreescriben lo que harán será cambiar la información que se suponía no variara) y el programa al ver datos diferentes a los puestos por él, determinará que el canario está envenenado y procederá a terminar la aplicación.

Instalación del php endurecido

Bajar el php de www.php.net

Abrirlo a un directorio, digamos: /usr/src:

cd /usr/src

tar -zxvf /root/php-x.y.z.tar.gz (x.y.z serán los numeros de la vesión de php que bajamos, sugiero sea la última).

cd php-x.y.z

Bajar el hardened-php de: http://www.hardened-php.net/download.php

wget hardened-php-x.y.z-a.b.c.patch.gz

gunzip hardened-php-x.y.z-a.b.c.patch.gz
patch -p 1 < hardened-php-x.y.z-a.b.c.patch

Compilar php como usualmente se hace.

Compatibilidad

hardened php ha sido diseñado para sistemas linux. Cualquier problema al usar hardened php para otro sistema operativo, por favor referirlo a los autores.

Impacto en el desempeño

Los autores piensan que unos pocos ciclos adicionales gastados a favor de la seguridad son negligibles respecto a la resistencia que añade al php.

Uso de la memoria

Al añadirse protecciones de canario y elementos de listas y listas, el hardened php incurre en un uso de memoria un poco mayor al normal.

Versiones ya compiladas de php

Para los que tengan RHEL 3 o sus clones (WBEL4, CentOS3) pueden bajar una versión recompilada de los rpm de php de mi sitio web:
http://cursos.ernestoperez.com/php
y
http://cursos.ernestoperez.com/pcre

así pueden usar el hardenedphp sin tener que recompilar ni pasar todo este trabajo. Yo a medida que vayan saliendo versiones de php y de hardened-php iré poniendo las recompilaciones que haga en estos sitios.

saludos
epe

Comentarios

correcciones en el hardened-php

Imagen de Epe

disculpen no es para WBEL4 que tengo el rpm sino WBEL3 (TRES) así como para centos3 y para rhel3 me equivoqué completo.

otra cosa que olvidé mencionar yo uso estas rpm y yo uso hardened-php hace rato, es decir, no experimentaré con uds mucho.

Una ultima, si usan un CMS o alguna aplicacion basada en php que requiera de grandes cantidades de texto ser entradas en una variable, entonces deben subir el tamaño máximo de caracteres que acepta una variable, esto se hace en /etc/php.ini y se pone así (al final de php.ini puede ser):
varfilter.max_value_length = 30000

el valor por defecto es 10000 caracteres, si van a pasarle más de 10000 caracteres a una variable, entonces súbanle al valor que crean adecuado, tampoco mucho, esto es una buena previsión para evitar que hagan overflows.

saludos
epe
--
EcuaLinux.com
(02)3412402 - (09)9246504

Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre