SlideShare una empresa de Scribd logo
Vulnerabilidades en Aplicaciones Web PHP
Moisés H. Silva

CIISA 2007

“ You can't consider the problem of defense without first understanding the problem of attack ”
- Doug Tygar -

1
Agenda
1. Vulnerabilidades en PHP

2. SQL Injection

* PHP, lenguaje inseguro?

* Qué es?

* Estadísticas

* Cómo Atacar?
* Cómo Protegerme?

3. Code Injection

4. Session Hijacking

* Qué es?

* Qué es?

* Cómo Atacar?

* Cómo Atacar?

* Cómo Protegerme?

* Cómo Protegerme?
2
PHP, Lenguaje Inseguro?
•

- Poder, Versatilidad y Facilidad son una fórmula para la inseguridad.

•
•

- PHP ha crecido de forma desorganizada.

•

- Zend está intentando poner un orden, PHP5 es un gran paso.

- La seguridad de un lenguaje de programación es inversamente proporcional a
•
la cantidad de responsabilidad delegada al programador.
•

•

- Sólo un programador debería escribir programas , PHP se lo permite a otros.

3
Estadísticas
- Crecimiento de PHP

Fuente: http://www.netcraft.com/Survey/

4
- Servicios de red más usados

Fuente: http://www.securityseer.com/

5
- Top 10 de vulnerabilidades web

Fuente: http://www.owasp.org/

6
SQL Injection
Qué es?
- SQL injection es el término usado para la introducción de datos en una aplicación
•
con la intención de ejecutar sentencias SQL para las que el sistema no fué diseñado
•
y/o para las cuales el usuario no tiene privilegios.
•

- Cualquier aplicación que haga uso de datos externos para crear consultas SQL
•
puede ser vulnerable sin importar el lenguaje en el que se encuentre escrita.
•

•

•
•
•
•

- Las aplicaciones web son más vulnerables debido a:
* La mayoría de los sitios web tienen al menos 1 base de datos.
* Anonimato del atacante y miles de aplicaciones online.
* Ejecución remota y automatizada de ataques.
* Aplicaciones de comercio online ( objetivo: tarjetas de crédito ).

7
SQL Injection
Cómo funciona un ataque?
- Se buscan los puntos de entrada de datos de la aplicación. En web, usualmente
•
los formularios.
•

- Deliberadamente se introducen datos incorrectos o posiblemente inesperados.

•
•
•
•
•
•

* Letras donde solo números son esperados.
* Caracteres de significado especial en sentencias SQL, en especial, comillas.
* Texto de longitudes no esperadas. ( Nombre de 500 caracteres? )
* Límites impuestos en el formulario localmente pueden ser excedidos con cURL.

- Esperamos errores SQL incorrectamente mostrados junto con el HTML, esto puede
•
darnos una idea del esquema de la base de datos o de la forma en que los datos del
•
formulario están siendo usados.
•

- Usar la información obtenida para intentar inyectar SQL.

•
SQL Injection
Formas de Protección
•

- Validar TODOS los datos que ingresan a la base de datos.

•

- No confiar en datos externos. Los datos externos más comunes son:

•
•
•

•

* HTTP/GET
* HTTP/POST
* FileSystem
- Estos datos no son confiables, ningún usuario es confiable.

•
•

- register_globals = off, pero eso todo mundo lo sabe, correcto?

•

- Usa mysql_escape_string, pg_escape_string y similares..

•

- Si es posible, utiliza PDO ( PHP Data Objects ) y prepared statements.
9
Code Injection
Qué es?
- Similar al SQL injection, pero más poderoso, el objetivo es ejecutar código
•
arbitrario.
•

- La causa es la incorrecta validación de datos que pueden provenir de fuentes no
•
confiables.
•

- Uno de los ataques más conocidos se basa en una funcionalidad de PHP
•
configurada mediante la directiva allow_url_fopen y allow_url_include.
•

- Archivos incluidos con include(), include_once(), require_once() son ejecutados
•
por el intérprete de PHP.
•

10
Code Injection
Cómo funciona un ataque?
•

- Se busca la entrada de datos que alimenta la inclusión de un archivo.

- Una vez encontrado, se alimenta la inclusión del archivo con un script que
•
contenga el código que se desea ejecutar.
•

- Debido a que el código será evaluado en el servidor de la víctima, se adquiere
•
control completo sobre la aplicación pudiendo inclusive comprometer el servidor.
•

•

- Otro tipo de ataque puede basarse en el constructor de php eval().

11
Code Injection
Formas de Protección

- allow_url_fopen = off en php.ini puede ayudar, sin embargo muchas aplicaciones
•
actuales confian en tener esta directiva habilitada.
•

- A partir de php 5.2, la directiva allow_url_include fué incluida como una solución
•
al problema que presentaba allow_url_fopen = off.
•

•

- Validar todos los datos utilizados para incluir y ejecutar archivos.

12
Session Hijacking
Qué es?
- Es el término utilizado para referirse a un tipo de ataque web en la que el
•
atacante logra personificarse ante la aplicación web como un usuario que ya
•
ha iniciado una sesión.
•

•
•

- Las aplicaciones web son mas vulnerables debido a que dependen de HTTP,
un protocolo sin conciencia de la existencia de sesiones.

- HTTP es también un protocolo textual y sin protección alguna de los datos
•
transmitidos. Cualquier dato puede ser expuesto mediante sniffers como
•
tcpdump y ethereal.
•

- Las aplicaciones web usan un session id para identificar una sesión iniciada.
•
Esto significa que el session id tiene que ser enviado en cada request del
•
cliente.
•

- El session id es el objetivo principal de un atacante. Si el session id es conocido,
•
es muy probable que la sesión pueda ser comprometida.
13
•
Session Hijacking
- Flujo del establecimiento de una sesión web con cookies

14
Session Hijacking
Cómo funciona un ataque?
•

- Para secuestrar una sesión se requiere conocer el session id (sessid)

•

- El session id es transmitido usando cookies o por la URL de las páginas web.

•

- 3 formas comunes de obtener el sessid son:

•
•
•

* Fuerza Bruta
* Intercepción
* Fixation ( pre-establecimiento de la sesión )

- Fuerza bruta requiere de enviar HTTP request al sitio web con diferentes
•
sessid's. Algunos de estos sessids pueden ser obtenidos del directorio /tmp
•
de un hosting compartido.
•

- La intercepción requiere que el atacante se encuentre en el mismo segmento
•
de red que la víctima, o en algún punto por el que los paquetes TCP de la víctima
•
sean ruteados.
15
•
Session Hijacking
Cómo funciona un ataque?
- El pre-establecimiento del sessid requiere de cierta confianza o ingenuidad
•
de parte de la víctima ( factores comunmente encontrados )
•

- Sniffear el tráfico web de la red en la que se encuentra la víctima.

•

- Es posible usar ARP spoofing para obligar al switch o al usuario a que sus
paquetes pasen por la máquina del atacante.

•
•

- Una vez que el sessid es conocido solo resta hacer un request HTTP con el
•
sessid obtenido.
•

- El conocimiento del sessid suele ser suficiente para tomar el control de la
•
sesión, sin embargo otras protecciones pueden existir.
•

- Además de obtener el sessid, puede ser requerido conocer algunos datos de
•
la víctima, como su direcciòn IP.
•

16
Session Hijacking
Formas de Protección
- El pre-establecimiento de sesión puede evitarse habilitando PHP para sólo
•
usar cookies para la sesión y no aceptarlas por URL.
•

•

- Siempre crear un nuevo session id al recibir los datos de autenticación.

- Todas las sesiones deben tener un tiempo de expiración por inactividad y
•
absoluto.
•

- La intercepción puede ser evitada utilizando HTTPS ( SSL ) para la conexiones
•
que requieran ser seguras.
•

- Los ataques de fuerza bruta y otros ataques basados en el conocimiento de un
universo de sessid's pueden ser protegidos guardando los sessid's en una base
•
de datos utilizando session_set_save_handler().
•
•

•

- Para protección extra se puede crear el session id de acuerdo a la dirección
•
IP o algún otro dato proveniente del cliente de forma que desde otra dirección
•
IP o cliente no se pueda utilizar el mismo session id.
17
•

•
More people are killed every year by pigs than by sharks,
which shows you how good we are at evaluating risk.
- Bruce Schneier -

Being able to break security doesn't make you a hacker
anymore than being able to hotwire cars makes you an automotive engineer.
- Eric Raymond -

The only truly secure system is one that is powered off, cast in a block of
concrete and sealed in a lead-lined room with armed guards
- Gene Spafford 18
Referencias.
http://www.hardened-php.net/
http://www.php-security.org/
http://blog.php-security.org/
http://www.secunia.com/

19
Gracias.
Moisés Humberto Silva Salmerón
http://www.moythreads.com/
moises.silva@gmail.com
moyhu@mx1.ibm.com

20

Más contenido relacionado

PDF
Vulnerabilidades en sitios web(español)
PPTX
Los 10 principales riesgos en aplicaciones web #CPMX5
PDF
Seguridad en el desarrollo de aplicaciones web
PPTX
Seguridad en sitios web
PDF
Seguridad web
PDF
OWASP Top 10 2017
PPTX
Temas owasp
PPTX
OpenSouthCode '18 - OWASP Top 10 (2017) [2018-June-01]
Vulnerabilidades en sitios web(español)
Los 10 principales riesgos en aplicaciones web #CPMX5
Seguridad en el desarrollo de aplicaciones web
Seguridad en sitios web
Seguridad web
OWASP Top 10 2017
Temas owasp
OpenSouthCode '18 - OWASP Top 10 (2017) [2018-June-01]

La actualidad más candente (20)

PPTX
Owasp top 10 2017
PDF
Owasp top 10 2010 final (spanish)
PPTX
Seguridad en Aplicaciones Web
PPS
Seguridad en Aplicaciones Web
PPTX
Argentesting 2017 - Proyecto OWASP Top 10
PDF
Seguridad Web
PDF
10 riesgos más críticos que deben afrontar las organizaciones sobre sus aplic...
DOCX
Seguridad En Base De Datos
PPTX
Seguridad web
PDF
Owasp top 10_2007_spanish
PDF
Webinar Gratuito: "Escanear Vulnerabilidades Web con Zed Attack Proxy"
PPTX
Owasp top ten 2019
PPT
Owasp Top10 Spanish
PPTX
sistemas de seguridad para desarrollar web
PDF
Hacking web con OWASP
PDF
2 - Curso Navegación Segura - Tipos de amenazas asociadas a los navegadores
PDF
3 - Curso Navegación Segura - Seguridad y prevención
PDF
Seguridad en la web no confíes en el usuario
PPT
Hackers en los sistemas de las administraciones públicas
PDF
Webinar Gratuito "Reconocimiento Web"
Owasp top 10 2017
Owasp top 10 2010 final (spanish)
Seguridad en Aplicaciones Web
Seguridad en Aplicaciones Web
Argentesting 2017 - Proyecto OWASP Top 10
Seguridad Web
10 riesgos más críticos que deben afrontar las organizaciones sobre sus aplic...
Seguridad En Base De Datos
Seguridad web
Owasp top 10_2007_spanish
Webinar Gratuito: "Escanear Vulnerabilidades Web con Zed Attack Proxy"
Owasp top ten 2019
Owasp Top10 Spanish
sistemas de seguridad para desarrollar web
Hacking web con OWASP
2 - Curso Navegación Segura - Tipos de amenazas asociadas a los navegadores
3 - Curso Navegación Segura - Seguridad y prevención
Seguridad en la web no confíes en el usuario
Hackers en los sistemas de las administraciones públicas
Webinar Gratuito "Reconocimiento Web"
Publicidad

Similar a Vulnerabilidades en Aplicaciones Web PHP (20)

PPT
Seminario Seguridad con PHP
PPTX
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
PDF
Seguridad en Aplicaciones Web y Comercio Electrónico
PDF
Phish and tricks
PDF
Riesgos de Seguridad
PPTX
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
PPTX
Cer tuy capacitaciones2011_v1
PDF
Hack & beers lleida seguridad en desarrollo fullstack
PDF
Summer boot camp sciende umh
PDF
Robo desesionesfinal
PPT
Incorporando la Seguridad de la Información en el Desarrollo de Aplicaciones
PPTX
Seguridad web para desarrolladores - OWASP
DOCX
Seguridad En Base De Datos
PDF
Owasp proyecto
PDF
Wordpress hardening (Campus Party Mexico 4)
PPTX
El hacking desde el punto de vista de la seguridad informática
PDF
Webinar - Seguridad en WordPress
PDF
Curso de Práctica Operativa en Investigación. Módulo 5. Internet Security Aud...
PPT
Seguridad informática y de ti
PDF
Desarrollo seguro en NodeJS (OWASP top ten y JWT)
Seminario Seguridad con PHP
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Seguridad en Aplicaciones Web y Comercio Electrónico
Phish and tricks
Riesgos de Seguridad
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
Cer tuy capacitaciones2011_v1
Hack & beers lleida seguridad en desarrollo fullstack
Summer boot camp sciende umh
Robo desesionesfinal
Incorporando la Seguridad de la Información en el Desarrollo de Aplicaciones
Seguridad web para desarrolladores - OWASP
Seguridad En Base De Datos
Owasp proyecto
Wordpress hardening (Campus Party Mexico 4)
El hacking desde el punto de vista de la seguridad informática
Webinar - Seguridad en WordPress
Curso de Práctica Operativa en Investigación. Módulo 5. Internet Security Aud...
Seguridad informática y de ti
Desarrollo seguro en NodeJS (OWASP top ten y JWT)
Publicidad

Más de Moises Silva (15)

PDF
FreeSWITCH Monitoring
PDF
Scaling FreeSWITCH Performance
PPT
Interfaces de Scripting para librerias en C
PPT
Manejo de Medios en FreeSWITCH
PPTX
Implementation Lessons using WebRTC in Asterisk
PDF
SIP Testing with FreeSWITCH
PPT
FreeSWITCH Modules for Asterisk Developers
PPT
FreeSWITCH: Asterisk con Esteroides
PPT
Negociacion de Codecs en Asterisk
PDF
Sangoma en el Ecosistema Open Source
PDF
Media Handling in FreeSWITCH
PPT
FreeTDM PRI Passive Recording
PDF
Asterisk PRI Passive Call Recording
PDF
OpenR2 in Asterisk
PPTX
FreeSWITCH as a Kickass SBC
FreeSWITCH Monitoring
Scaling FreeSWITCH Performance
Interfaces de Scripting para librerias en C
Manejo de Medios en FreeSWITCH
Implementation Lessons using WebRTC in Asterisk
SIP Testing with FreeSWITCH
FreeSWITCH Modules for Asterisk Developers
FreeSWITCH: Asterisk con Esteroides
Negociacion de Codecs en Asterisk
Sangoma en el Ecosistema Open Source
Media Handling in FreeSWITCH
FreeTDM PRI Passive Recording
Asterisk PRI Passive Call Recording
OpenR2 in Asterisk
FreeSWITCH as a Kickass SBC

Vulnerabilidades en Aplicaciones Web PHP

  • 1. Vulnerabilidades en Aplicaciones Web PHP Moisés H. Silva CIISA 2007 “ You can't consider the problem of defense without first understanding the problem of attack ” - Doug Tygar - 1
  • 2. Agenda 1. Vulnerabilidades en PHP 2. SQL Injection * PHP, lenguaje inseguro? * Qué es? * Estadísticas * Cómo Atacar? * Cómo Protegerme? 3. Code Injection 4. Session Hijacking * Qué es? * Qué es? * Cómo Atacar? * Cómo Atacar? * Cómo Protegerme? * Cómo Protegerme? 2
  • 3. PHP, Lenguaje Inseguro? • - Poder, Versatilidad y Facilidad son una fórmula para la inseguridad. • • - PHP ha crecido de forma desorganizada. • - Zend está intentando poner un orden, PHP5 es un gran paso. - La seguridad de un lenguaje de programación es inversamente proporcional a • la cantidad de responsabilidad delegada al programador. • • - Sólo un programador debería escribir programas , PHP se lo permite a otros. 3
  • 4. Estadísticas - Crecimiento de PHP Fuente: http://www.netcraft.com/Survey/ 4
  • 5. - Servicios de red más usados Fuente: http://www.securityseer.com/ 5
  • 6. - Top 10 de vulnerabilidades web Fuente: http://www.owasp.org/ 6
  • 7. SQL Injection Qué es? - SQL injection es el término usado para la introducción de datos en una aplicación • con la intención de ejecutar sentencias SQL para las que el sistema no fué diseñado • y/o para las cuales el usuario no tiene privilegios. • - Cualquier aplicación que haga uso de datos externos para crear consultas SQL • puede ser vulnerable sin importar el lenguaje en el que se encuentre escrita. • • • • • • - Las aplicaciones web son más vulnerables debido a: * La mayoría de los sitios web tienen al menos 1 base de datos. * Anonimato del atacante y miles de aplicaciones online. * Ejecución remota y automatizada de ataques. * Aplicaciones de comercio online ( objetivo: tarjetas de crédito ). 7
  • 8. SQL Injection Cómo funciona un ataque? - Se buscan los puntos de entrada de datos de la aplicación. En web, usualmente • los formularios. • - Deliberadamente se introducen datos incorrectos o posiblemente inesperados. • • • • • • * Letras donde solo números son esperados. * Caracteres de significado especial en sentencias SQL, en especial, comillas. * Texto de longitudes no esperadas. ( Nombre de 500 caracteres? ) * Límites impuestos en el formulario localmente pueden ser excedidos con cURL. - Esperamos errores SQL incorrectamente mostrados junto con el HTML, esto puede • darnos una idea del esquema de la base de datos o de la forma en que los datos del • formulario están siendo usados. • - Usar la información obtenida para intentar inyectar SQL. •
  • 9. SQL Injection Formas de Protección • - Validar TODOS los datos que ingresan a la base de datos. • - No confiar en datos externos. Los datos externos más comunes son: • • • • * HTTP/GET * HTTP/POST * FileSystem - Estos datos no son confiables, ningún usuario es confiable. • • - register_globals = off, pero eso todo mundo lo sabe, correcto? • - Usa mysql_escape_string, pg_escape_string y similares.. • - Si es posible, utiliza PDO ( PHP Data Objects ) y prepared statements. 9
  • 10. Code Injection Qué es? - Similar al SQL injection, pero más poderoso, el objetivo es ejecutar código • arbitrario. • - La causa es la incorrecta validación de datos que pueden provenir de fuentes no • confiables. • - Uno de los ataques más conocidos se basa en una funcionalidad de PHP • configurada mediante la directiva allow_url_fopen y allow_url_include. • - Archivos incluidos con include(), include_once(), require_once() son ejecutados • por el intérprete de PHP. • 10
  • 11. Code Injection Cómo funciona un ataque? • - Se busca la entrada de datos que alimenta la inclusión de un archivo. - Una vez encontrado, se alimenta la inclusión del archivo con un script que • contenga el código que se desea ejecutar. • - Debido a que el código será evaluado en el servidor de la víctima, se adquiere • control completo sobre la aplicación pudiendo inclusive comprometer el servidor. • • - Otro tipo de ataque puede basarse en el constructor de php eval(). 11
  • 12. Code Injection Formas de Protección - allow_url_fopen = off en php.ini puede ayudar, sin embargo muchas aplicaciones • actuales confian en tener esta directiva habilitada. • - A partir de php 5.2, la directiva allow_url_include fué incluida como una solución • al problema que presentaba allow_url_fopen = off. • • - Validar todos los datos utilizados para incluir y ejecutar archivos. 12
  • 13. Session Hijacking Qué es? - Es el término utilizado para referirse a un tipo de ataque web en la que el • atacante logra personificarse ante la aplicación web como un usuario que ya • ha iniciado una sesión. • • • - Las aplicaciones web son mas vulnerables debido a que dependen de HTTP, un protocolo sin conciencia de la existencia de sesiones. - HTTP es también un protocolo textual y sin protección alguna de los datos • transmitidos. Cualquier dato puede ser expuesto mediante sniffers como • tcpdump y ethereal. • - Las aplicaciones web usan un session id para identificar una sesión iniciada. • Esto significa que el session id tiene que ser enviado en cada request del • cliente. • - El session id es el objetivo principal de un atacante. Si el session id es conocido, • es muy probable que la sesión pueda ser comprometida. 13 •
  • 14. Session Hijacking - Flujo del establecimiento de una sesión web con cookies 14
  • 15. Session Hijacking Cómo funciona un ataque? • - Para secuestrar una sesión se requiere conocer el session id (sessid) • - El session id es transmitido usando cookies o por la URL de las páginas web. • - 3 formas comunes de obtener el sessid son: • • • * Fuerza Bruta * Intercepción * Fixation ( pre-establecimiento de la sesión ) - Fuerza bruta requiere de enviar HTTP request al sitio web con diferentes • sessid's. Algunos de estos sessids pueden ser obtenidos del directorio /tmp • de un hosting compartido. • - La intercepción requiere que el atacante se encuentre en el mismo segmento • de red que la víctima, o en algún punto por el que los paquetes TCP de la víctima • sean ruteados. 15 •
  • 16. Session Hijacking Cómo funciona un ataque? - El pre-establecimiento del sessid requiere de cierta confianza o ingenuidad • de parte de la víctima ( factores comunmente encontrados ) • - Sniffear el tráfico web de la red en la que se encuentra la víctima. • - Es posible usar ARP spoofing para obligar al switch o al usuario a que sus paquetes pasen por la máquina del atacante. • • - Una vez que el sessid es conocido solo resta hacer un request HTTP con el • sessid obtenido. • - El conocimiento del sessid suele ser suficiente para tomar el control de la • sesión, sin embargo otras protecciones pueden existir. • - Además de obtener el sessid, puede ser requerido conocer algunos datos de • la víctima, como su direcciòn IP. • 16
  • 17. Session Hijacking Formas de Protección - El pre-establecimiento de sesión puede evitarse habilitando PHP para sólo • usar cookies para la sesión y no aceptarlas por URL. • • - Siempre crear un nuevo session id al recibir los datos de autenticación. - Todas las sesiones deben tener un tiempo de expiración por inactividad y • absoluto. • - La intercepción puede ser evitada utilizando HTTPS ( SSL ) para la conexiones • que requieran ser seguras. • - Los ataques de fuerza bruta y otros ataques basados en el conocimiento de un universo de sessid's pueden ser protegidos guardando los sessid's en una base • de datos utilizando session_set_save_handler(). • • • - Para protección extra se puede crear el session id de acuerdo a la dirección • IP o algún otro dato proveniente del cliente de forma que desde otra dirección • IP o cliente no se pueda utilizar el mismo session id. 17 • •
  • 18. More people are killed every year by pigs than by sharks, which shows you how good we are at evaluating risk. - Bruce Schneier - Being able to break security doesn't make you a hacker anymore than being able to hotwire cars makes you an automotive engineer. - Eric Raymond - The only truly secure system is one that is powered off, cast in a block of concrete and sealed in a lead-lined room with armed guards - Gene Spafford 18
  • 20. Gracias. Moisés Humberto Silva Salmerón http://www.moythreads.com/ moises.silva@gmail.com moyhu@mx1.ibm.com 20