[flisol2011] seguridad en el desarrollo de aplicaciones web php

24
Seguridad en el Desarrollo de Aplicaciones Web PHP Iván Rico - @7th_sign Iván Rico - @7th_sign Jesus Reyna - @jgreyna Jesus Reyna - @jgreyna PHPmx : http://phpmexico.mx/

Upload: 7thsign

Post on 03-Jul-2015

1.490 views

Category:

Technology


1 download

DESCRIPTION

presentación utilizada en la plática de Seguridad en el Desarrollo de Aplicaciones Web PHP impartida por Jesus Reyna e Iván Rico en el flisol 2011 Mty NL México

TRANSCRIPT

Page 1: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Seguridad en el Desarrollo de Aplicaciones Web PHP

Seguridad en el Desarrollo de Aplicaciones Web PHP

Iván Rico - @7th_signIván Rico - @7th_signJesus Reyna - @jgreynaJesus Reyna - @jgreynaPHPmx : http://phpmexico.mx/

Page 2: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Conceptos

Page 3: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Qué es la seguridad?

La seguridad es una medida, no una característica

La seguridad es difícil de medirse, no tiene unidades

También es un problema que está creciendo y que requiere una continua solución evolutiva

Así como el diseño de una aplicación, la seguridad debe de ser considerada todo el tiempo (especificaciones iniciales, implementación, pruebas y durante el mantenimiento)

Page 4: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Necesidades de Seguridad en una Aplicación Web

Que exista un ambiente seguro

Hay que darle valor a la privacidad

Hay que darle más valor a la información de los clientes

Debemos recordar, son los usuarios los que harán uso del sistema

Hay que hacer la experiencia del usuario segura y mejorada

Los usuarios pueden ser buenos, pero también pueden ser malos

Page 5: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

PHP en hechos

Es un lenguaje muy popular para el desarrollo de aplicaciones web

Sencillo de aprender y adoptar

Popular entre los “newbies”

Durante el desarrollo, regularmente se olvida un pequeño gran aspecto, la seguridad.

Se tiene la tendencia de “después lo hacemos”, dando como resultado aplicaciones con severos hoyos de seguridad.

Page 6: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Importancia de la seguridad en PHP

PHP es y seguirá siendo extensamente usado para el desarrollo de Aplicaciones Web

PHP esta marcando camino en el desarrollo de aplicaciones empresariales y el mercado corporativo

Es muy efectivo, pero a menudo se pasan por alto medidas para prevenir usuarios maliciosos

Las aplicaciones web PHP a menudo terminan trabajando con datos extremadamente sensibles.

Page 7: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Seguridad en el ambiente

Page 8: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Aspectos a considerar

Quién debe de tener acceso físico a los servidores?

Quién debe de tener acceso mediante shell?

Podrá el servidor web escribir en el sistema de archivos?

Es necesario tener lenguajes de programación o servicios adicionales en el servidor?

Los servicios de pueden dividir en varios servidores?

Page 9: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Bloqueos básicos en el SO

Apagar servicios sin uso, actualizar los componentes del sistema, usar los archivos de configuraciones recomendadas.

Habilitar un analizador de logs (bitácoras)

Habilitar un analizador de integridad del sistema

Configurar un firewall local con los puertos estrictamente necesarios (web: 80, 443)

Page 10: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Configuración de Apache

Antes de realizar cambios, buscar problemas potenciales que puedan afectar en el contexto del servidor

Deshabilitar los módulos innecesarios

Cambiar los directorios por defecto

Cambiar los archivos índices por defecto

Usar módulos que proporcionen seguridad adicional a Apache como mod_dosevasive y mod_security

Page 11: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

mod_dosevasive

Fácil de configurar

Nos ayuda a evadir ataques DoS bloqueando direcciones IP o URL temporalmente

Podemos bloquear si:

Una solicitud hecha a la misma página X veces por segundo de desde un mismo origen

Mas de X solicitudes concurrentes por segundo son hechas

Se puede comunicar con un firewall o un router y ejecutar comandos

Page 12: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

mod_security

Muy poderoso

Es un firewall personal de nuestra aplicación

Configuración detallada, requiere de muchas pruebas

Utilizar en la medida de lo posible cuando se corran aplicaciones en el servidor

Características:

Filtra las peticiones antes que apache

Filtra incluso SSL

Aplicación de reglas basadas en expresiones regulares y capacidad de logs (bitácoras)

Page 13: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

mod_ssl

Usarlo obligatoriamente

Es sencillo de configurar

Hace que la comunicación ente el servidor y el cliente se haga de manera cifrada

Se basa en el intercambio de certificados digitales (PKI)

Nos protege de ataques de sniffers y previene el MITM

Requiere que el certificado sea firmado por una entidad certificadora ($)

Page 14: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Configuración de PHP

Nunca dejar las configuraciones por defecto en versiones menores a la 4.8

Utilizar siempre las nuevas versiones estables (Rama 5)

Ampliamente recomendable revisar las configuraciones por defecto, algunas vulnerabilidades pueden ser explotadas

Evitar en la medida de lo posible la ejecución de comandos del sistema operativo

Page 15: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Configuraciones recomendadas

display_errors = Off

log_errors = On

error_reporting = E_ALL

session.gc_maxlifetime = 600 (10 mins)

magic_quotes_gpc = Off

register_globals = Off

safe_mode = On

safe_mode_gid = On

Page 16: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Configuraciones recomendadas

allow_url_fopen = Off

allow_url_include = Off

open_basedir = /ruta

short_open_tag = Off

Page 17: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Seguridad en el desarrollo

Page 18: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Vulnerabilidades en desarrollos en PHP

Ejecución Remota de Código (Remote Code Execution)

Cross-site scripting (XSS)

SQL Injection

Ataques al sistema de archivos

Page 19: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Ejecución Remota de Código

Afecta a las aplicaciones que aceptan nombres de archivos por parte del usuario cuando el sitio web maneja el ingreso y la inclusión de archivos y URLs sin chequeo previo.

Las causas de este problemas son:

Deficiente validacion antes de invocar los archivos con

fopen

require

include

Page 20: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Cross-site scripting (XSS)

Algunas recomendaciones

Verificar que todos los parámetros en la aplicación sean validados y/o

encodeados antes de ser incluídos en la página HTML

La mejor protección para XSS es una combinación de validación

“whitelist” y un encodeo apropiado de todos los datos de salida.

htmlspecialchars() para convertir los caracteres “, &, < y > en &amp; “

&lt; y &gt;. (PHP tiene otra función htmlentities() que convierte todos los

caracteres que tienen entidades equivalentes HTML)

Page 21: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Cross-site scripting (XSS)

echo '<td>';

echo htmlspecialchars($unaFila['mensaje']);

echo '</td>'; ...

La aplicación no debería depender de register_globals

Page 22: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

SQL Injection

Validar datos antes de usarlos en queries SQL dinámicos

Preferir validación positiva a validación de casos inválidos

Usar PDO (PHP Data Objects)

Usar declaraciones parametrizadas MySQLi’s

Al menos, usar funciones como mysql_real_escape_string()

OJO:

El uso de addslashes() no es suficiente.

magic quotes (eliminado en PHP6) da una falsa sensación de seguridad.

Page 23: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

Ataques al sistema de archivos

Upload Injection de archivos locales

Inclusión de archivo local (tal como /etc/passwd, archivos de configuración, o logs)

Manipulación de sesiones locales

La mayoría de los administradores del sitio corren PHP sin usuario (nobody) bajo Apache, las vulnerabilidades sobre el sistema de archivos local afectan a todos los usuarios dentro de un host simple.

Page 24: [Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

¿Preguntas?

Iván Rico - @7th_signIván Rico - @7th_signJesus Reyna - @jgreynaJesus Reyna - @jgreynaPHPmx : http://phpmexico.mx/