Sunteți pe pagina 1din 20

Vulnerabilidades en Aplicaciones Web PHP

CIISA 2007
You can't consider the problem of defense without first understanding the problem of attack
- Doug Tygar -
Moiss H. Silva
1
Agenda
2. SQL Injection
* Qu es?
* Cmo Atacar?
* Cmo Protegerme?
3. Code Injection
* Qu es?
* Cmo Atacar?
* Cmo Protegerme?
4. Session Hijacking
* Qu es?
* Cmo Atacar?
* Cmo Protegerme?
1. Vulnerabilidades en PHP
* PHP, lenguaje inseguro?
* Estadsticas
2
- Poder, Versatilidad y Facilidad son una frmula 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 programacin es inversamente proporcional a
la cantidad de responsabilidad delegada al programador.



- Slo un programador debera escribir programas , PHP se lo permite a otros.
PHP, Lenguaje Inseguro?
3
Estadsticas
Fuente: http://www.netcraft.com/Survey/
- Crecimiento de PHP
4
- Servicios de red ms usados
Fuente: http://www.securityseer.com/
5
- Top 10 de vulnerabilidades web
Fuente: http://www.owasp.org/
6
SQL Injection
- SQL injection es el trmino usado para la introduccin de datos en una aplicacin
con la intencin de ejecutar sentencias SQL para las que el sistema no fu diseado
y/o para las cuales el usuario no tiene privilegios.



- Cualquier aplicacin 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 ms vulnerables debido a:

* La mayora de los sitios web tienen al menos 1 base de datos.
* Anonimato del atacante y miles de aplicaciones online.
* Ejecucin remota y automatizada de ataques.
* Aplicaciones de comercio online ( objetivo: tarjetas de crdito ).

Qu es?
7
SQL Injection
Cmo funciona un ataque?
- Se buscan los puntos de entrada de datos de la aplicacin. En web, usualmente
los formularios.

- Deliberadamente se introducen datos incorrectos o posiblemente inesperados.

* Letras donde solo nmeros son esperados.
* Caracteres de significado especial en sentencias SQL, en especial, comillas.
* Texto de longitudes no esperadas. ( Nombre de 500 caracteres? )
* Lmites 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 estn siendo usados.

- Usar la informacin obtenida para intentar inyectar SQL.

8
SQL Injection
Formas de Proteccin
- Validar TODOS los datos que ingresan a la base de datos.

- No confiar en datos externos. Los datos externos ms comunes son:

* HTTP/GET
* HTTP/POST
* FileSystem

- Estos datos no son confiables, ningn 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 ms poderoso, el objetivo es ejecutar cdigo
arbitrario.

- La causa es la incorrecta validacin de datos que pueden provenir de fuentes no
confiables.

- Uno de los ataques ms 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 intrprete de PHP.

10
Code Injection
Cmo funciona un ataque?
- Se busca la entrada de datos que alimenta la inclusin de un archivo.

- Una vez encontrado, se alimenta la inclusin del archivo con un script que
contenga el cdigo que se desea ejecutar.

- Debido a que el cdigo ser evaluado en el servidor de la vctima, se adquiere
control completo sobre la aplicacin pudiendo inclusive comprometer el servidor.

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

11
Code Injection
Formas de Proteccin
- 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 solucin
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 trmino utilizado para referirse a un tipo de ataque web en la que el
atacante logra personificarse ante la aplicacin web como un usuario que ya
ha iniciado una sesin.

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

- HTTP es tambin un protocolo textual y sin proteccin 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 sesin 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 sesin pueda ser comprometida.

13
Session Hijacking
- Flujo del establecimiento de una sesin web con cookies
14
Session Hijacking
Cmo funciona un ataque?
- Para secuestrar una sesin se requiere conocer el session id (sessid)

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

- 3 formas comunes de obtener el sessid son:

* Fuerza Bruta
* Intercepcin
* Fixation ( pre-establecimiento de la sesin )

- 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 intercepcin requiere que el atacante se encuentre en el mismo segmento
de red que la vctima, o en algn punto por el que los paquetes TCP de la vctima
sean ruteados.

15
Session Hijacking
Cmo funciona un ataque?
- El pre-establecimiento del sessid requiere de cierta confianza o ingenuidad
de parte de la vctima ( factores comunmente encontrados )

- Sniffear el trfico web de la red en la que se encuentra la vctima.

- Es posible usar ARP spoofing para obligar al switch o al usuario a que sus
paquetes pasen por la mquina 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
sesin, sin embargo otras protecciones pueden existir.

- Adems de obtener el sessid, puede ser requerido conocer algunos datos de
la vctima, como su direccin IP.
16
Session Hijacking
Formas de Proteccin
- El pre-establecimiento de sesin puede evitarse habilitando PHP para slo
usar cookies para la sesin y no aceptarlas por URL.

- Siempre crear un nuevo session id al recibir los datos de autenticacin.

- Todas las sesiones deben tener un tiempo de expiracin por inactividad y
absoluto.

- La intercepcin 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 proteccin extra se puede crear el session id de acuerdo a la direccin
IP o algn otro dato proveniente del cliente de forma que desde otra direccin
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
Moiss Humberto Silva Salmern

http://www.moythreads.com/

moises.silva@gmail.com

moyhu@mx1.ibm.com
Gracias.
20

S-ar putea să vă placă și