You are on page 1of 43

Web :

Ataque y Defensa.

Claudio Salazar
Estudiante Ing. Civil Informtica UTFSM
Pinguinux Team

Temario
1.
2.
3.
4.
5.
6.
7.

Introduccin
Cross Site Scripting (XSS)
Inyeccin SQL
Nuestro cdigo en el servidor
Ataques NG
Previniendo ..
Medidas en el servidor

Introduccin
Seguridad, tanta importancia ?

Robo de datos
Violacin de privacidad
Personificacin
Ejecucin remota de cdigo
Suplantacin de contenido (phishing)
Cambio de contenido (deface)

Introduccin

90% de los sitios son vulnerables.


75% de los sitios son blanco de XSS.

En Chile ..
La mayora de los atacantes son
extranjeros.

Script kiddies efectan mass deface.

Linux lidera sistemas atacados.

Existen organismos fiscales que velan


por polticas de seguridad.

go ?

Cross-Site Scripting (XSS)

En el futuro, XSS ser el buffer overflow


y JavaScript el shellcode

Cross-Site Scripting (XSS)

Tipo de ataque que aprovecha la mala


validacin de datos en pginas generadas
dinmicamente.
El atacante puede incluir cdigo
malicioso (JavaScript) que ser ejecutado
en el navegador de la vctima.

Cross-Site Scripting (XSS)


2 tipos de XSS

Persistente: Cdigo inyectado que luego


es guardado y mostrado cada vez que se
visita el sitio.
No Persistente: Cdigo inyectado en una
url aprovechando el mtodo GET y
entregado a la vctima ocultado en
enlaces, preferentemente.

Cross-Site Scripting (XSS)


Descubriendo XSS

Cualquier sitio que devuelva datos


ingresados por el usuario puede ser
vulnerable (form, db, etc).

Probando con el conocido


<script>alert(xss);</script>

Cross-Site Scripting (XSS)


Peligros de XSS
Fcil de encontrar

til para el phishing

Prdida de cookies

Alteracin de pginas hacia el cliente

Patrones cada vez ms creativos

La gran mayora de los usuarios tiene


activado Javascript.

IE ms vulnerable que Mozilla Firefox.

Cross-Site Scripting (XSS)


Y ahora estamos en la Web 2.0, qu ?
Ajax amplia el abanico de posibilidades
en que un atacante pueda inyectar
cdigo.

Ajax expone funciones internas al cliente

Puentes (Ajax Bridging) pueden ocultar


ataques a sitios externos.

Ajax y XSS como w0rm.

Cross-Site Scripting (XSS)

Muy aburrido ?

Inyeccin SQL

Inyeccin SQL
Se inyecta cdigo SQL en variables
ingresadas
por
el
usuario
que
posteriormente son parte de consultas a la
base de datos

Un mal saneamiento de los datos nos lleva


a ejecutar sentencias no esperadas en la
DB

No es problema de la DB.

Inyeccin SQL
El atacante no sabe la organizacin de la
db, a menos que se trate de una aplicacin
open source.

Mediante el ingreso de caracteres que


tienen significado especial en la consulta,
va recopilando informacin a partir de los
errores.

1' OR 1 = 1; --

Inyeccin SQL
Ejemplo 1
$r = pg_query($conexion, "SELECT * FROM
usuarios WHERE usuario='{$user}' AND
pass='{$pass}'");
$usr = pg_fetch_array($r);
if($usr[0] == $user)
echo "OK";
http://sitio.com/?user=admin&pass=meechemate
http://sitio.com/?user=admin&pass=1' OR 1=1;--

Inyeccin SQL
Datos importantes sobre la db en los
esquemas de informacin.

Oracle, MSSQL Server y Mysql estn bien


documentadas sus formas de explotacin.

Postgresql, la gran duda


documentado o ms seguro ?

poco

Nuestro cdigo en el servidor

Inclusin de archivos
Una mala programacin puede llevar a la
inclusin de archivos con cdigo tanto local
como remota.

Este tipo de ataque es el ms peligroso.

Permite inclusin de archivos de sistema


con informacin relevante, si est al
alcance del usuario del proceso.

Inclusin de archivos
2 tipos de inclusin
Local : Se pueden incluir archivos de
sistema u otros como los que contienen
informacin sobre db, usuarios, etc.

Remota : Involucra la inclusin de


archivos
externos
al
servidor,
probablemente
programados
por
el
atacante.

Ejecucin de comandos
Ataque producido por mal saneamiento en
los datos introducidos por el usuario y que
pasan a ser parte de comandos al sistema.

No slo referente a PHP, cualquier


lenguaje web que tenga acceso al sistema y
antes visto en cgi-bins.

Nuestro cdigo en el servidor

Vamos a estirar los dedos :)

Ataques Nueva Generacin

Cross-Site Request Forgery


CSRF se aprovecha de la autenticacin de
la vctima en un sitio para efectuar
peticiones sin conocimiento de esta.

Estas peticiones son de acuerdo a las


acciones que el usuario puede hacer en el
sitio ( comprar, agregar, pagar, etc) .

http://sitio.com/vender.php?id=1000&usuario=87

Cross-Site Request Forgery

Feed Injection
Los lectores de feed tambin son
vulnerables a ataques XSS y CSRF. Actan
de diferente manera:
Lectores tratan '<' y '>' como literales.

Lectores cambian entidades html a sus


valores reales. Ademas copian en disco.

Lectores evaden un tipo de feed, pero


caen en otro.

Blind SQL Injection


Usa la misma vulnerabilidad de SQL
Injection simple.

En vez de ir recopilando informacin de


los errores, compara la respuesta de la db
frente a dos peticiones.

til cuando el servidor no entrega


informacin.

Su lgica es preguntar al servidor y de


acuerdo a la respuesta tomar caminos
diferentes.

Otros nuevos muchachos

Xpath Injection

LDAP Injection

Previniendo ..

Previniendo ..
Cross-Site Scripting (XSS)
Caracteres no alfanmericos no
interpretarlos (entidades html).

Para la validacin, aceptar lo que


concuerda con el patrn y lo dems negarlo
( white-listing ).

Validar input y sobre todo output.

Como usuario, desactivar la carga de


scripts no provenientes de la pgina que
visitamos.

Fijarnos a lo que lleva cada link o imagen.

Previniendo ..
Inyeccin SQL
Validacin correcta de las variables que
sern parte de la consulta.

Ocupar funciones destinadas a cada motor


de base de datos.

Ser cauteloso con la salida de errores.

Privilegios mnimos del usuario que accede


a la bd.

Uso de consultas parametrizadas.

Previniendo ..
Inclusin de Archivos
No llamar archivos de sitios de terceros.

Si las pginas son llamadas por GET, hacer


una contravalidacin eficiente.

Preferir el uso de constantes que de


variables.

Funciones como basename() previenen


inclusiones locales (Divergencia entre SO).

Previniendo ..
Ejecucin de comandos
Ocupar funciones que provee PHP para
prevenir comandos no deseados.

Limitar uso de recursos para no consumir


al servidor.

Limitar comandos al uid de Apache(


mediante PATH o permisos)

Previniendo ..
Cross-Site Request Forgery (CSRF)

Uso de token especial


CAPTCHA
Redireccin
POST sobre GET

Previniendo ..
Generalidades
Cuidado con los errores (Path Disclosure,
XSS, etc).

No confiar 100% en herramientas


externas.

Estar al tanto de nuevos vectores de


ataque.

Tener claro que funciones son peligrosas


de usar y evitar su uso.

Medidas en el
servidor

Medidas en el servidor

Apache
Denegar acceso a archivos fuente (*.inc,
*.phps, *.bak, etc).

Buena configuracin de timeouts y


conexiones para evitar DoS.

Medidas en el servidor
PHP
Modo seguro (safe_mode).

No permitir pginas de terceros


(allow_url_fopen).

No variables globales.

No magic_quotes_gpc.

Cuidado con llamadas a sistema.

Cuidado uploads.

Guardar informacin delicada en el


servidor y no en archivos (db info).

Medidas en el servidor

Postgresql
Configurar permisos claros para los
usuarios.

Si no es necesario, bloquear conexin


remota a la bd.

Medidas en el servidor
A tener en cuenta ..
Restringir Google Hacking.

Usar
otra
capa
de
seguridad
(mod_security, grasp core, suhosin).

Entre hosting dedicado y compartido,


dedicado.

Estar al tanto de nuevas versiones del


software ocupado.

Tener conciencia de seguridad.

Medidas en el servidor
A tener en cuenta ..
Restringir Google Hacking.

Usar
otra
capa
de
seguridad
(mod_security, grasp core, suhosin).

Entre hosting dedicado y compartido,


dedicado.

Estar al tanto de nuevas versiones del


software ocupado.

Tener conciencia de seguridad.

Links

http://www.securityfocus.com
http://blog.php-security.org
http://www.milw0rm.com
http://www.kriptopolis.org
http://ha.ckers.org
http://www.seguridad-informatica.cl
http://www.insecuremag.com
http://www.owasp.org
http://www.honeypot.org

Preguntas ?