Académique Documents
Professionnel Documents
Culture Documents
OWASP
Errores
comunes
Information Disclosure
Poltica de publicacin de informacin contraria
a la seguridad por oscuridad
Publicacin de informacin que afecta a una
aplicacin o que brinda informacin excesiva
sobre la misma y que podra ser aprovechada
en forma daina
Information Disclosure
Codificacin incorrecta
Lista incompleta
de parmetros
validados
<paranoico>
DA I NO
</paranoico>
OWASP
Top 10
Inyeccin
Una inyeccin ocurre cuando datos
no validados (ni confiables) son
enviados a un interprete como parte
de un comando o consulta. Los datos
hostiles del atacante pueden engaar
al interprete, ejecutar comandos, o
acceder datos no autorizados
Todo lo que viene del usuario debe
ser considerado daino!
Inyecciones
Las fallas de inyeccin son muy comunes, sobre
todo en cdigo legado
Es frecuente encontrarlo en consultas SQL, LDAP,
XPath, comandos de SO, parmetros, etc
Las inyecciones son fciles de descubrir por
WhiteBox (y tambin por BlackBox)
Inyecciones
Voto Electrnico en AR
Demo
Inyecciones
XSS Reflejados
Reflejados (no persistente): los datos (sin
sanitizar) proporcionados por el cliente generan
contenido HTML que es ejecutado en el browser, y
luego puede ser multiplicado a otros usuarios
(vctimas)
XSS Reflejados
Cualquier dato no validado, suministrado por el
usuario, es incluido en la pgina resultante sin
codificacin previa
XSS Reflejados
Un vector potencial de ataque es enviar la URL
generada por correo electrnico
http://bit.ly/xssreflected
XSS y Phishing
Demo
XSS Reflejado
Deteccin de XSS
Pixy: pruebas para aplicaciones PHP
FxCop: parte de Visual Studio 2010 Premium para
detectar vulnerabilidades
AntiXSSLibrary: plugin para Visual Studio que ayuda
a detectar XSS en el cdigo
Nikto, Wapiti y Arachni: scaners de vulnerabilidades
web
XSS-Me: extensin de FF para probar XSS reflejados
Fortify, NetSparker, Checkmarx (pagos): detectan
cualquier tipo de vulnerabilidad en muchos lenguajes
http://bit.ly/xsspixy
http://bit.ly/xsslibrary
http://bit.ly/xssfxcop
http://bit.ly/xsswapiti
http://bit.ly/arachni
http://bit.ly/xssnikto
http://bit.ly/xssfortify
http://bit.ly/xssnersparker
http://bit.ly/xssffme
j.mp/1KhQr7x
XSS Almacenado
Es posible almacenar el cdigo del XSS en la
base de datos del servidor
Una vez almacenado, cada usuario que
visualice la pgina, ser vctima del cdigo
Un vector potencial de ataque es dejar
comentarios en forma de scripts
1. A travs de un formulario, el atacante almacena el
script daino
2. Sin saberlo, la vctima ingresa a visualizar la
informacin y el script se ejecuta en el entorno de
su navegador
XSS Almacenado
Evitar XSS
En PHP, usar las funciones filter_var, urlencode,
HtmlEncode, htmlentities en todos las
variables tipo texto de entrada/salida
OWASP Java Encoder Project y ESAPI
En NET Utilizar Microsoft Web Protection
Library (antes conocida como AntiXSS).
Includa dentro del framework (v4.0+)
Consultar Cheat Sheet de OWASP
https://wpl.codeplex.com/
https://www.owasp.org/index.php/OWASP_Java_Encoder_Project
https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API/es
Demo
XSS Almacenado
Sesiones
Para mantener el estado de la sesin se
provee un identificador (Session_ID o Token)
que es compartido entre el usuario y la
aplicacin web
Los atacantes pueden ejecutar dos tipos de
Session Hijacking (secuestro de sesin):
Orientados: el atacante impersonaliza a un usuario
especfico y privilegiado
Genrico: impersonaliza a un usuario genrico del
cual desconoce sus accesos
https://www.owasp.org/index.php/Session_Management
https://www.owasp.org/index.php/Authentication_Cheat_Sheet
https://www.owasp.org/index.php/Session_Management_Cheat_Sheet
Sesiones
Nombre de la Sesin de las aplicaciones
PHP PHPSESSID
J2EE JSESSIONID
ColdFusion CFID y CFTOKEN
ASP ASPSESSIONID
ASP .NET ASP.NET_SessionId
Longitud de la sesin
Una Session_ID debe tener al menos 128 bits (16 bytes) para
evitar que sea predecible
Almacenamiento
La sesin no debe tener informacin sensible (o debe estar
cifrada) y debe ser almacenada en el servidor
Puede contener direccin IP, User-Agent, e-mail, nombre de
usuario, rol, privilegio, preferencias del usuario, ltimo acceso,
timeouts, etc.
Session Prediction
Las aplicaciones vulnerables generan credenciales
predecibles
Host: http://www.foo.bar
User-Agent: Mozilla/5.0
Cookie: ID=usuario1segu-info
Host: http://www.foo.bar
User-Agent: Mozilla/5.0
Cookie: ID=usuario2segu-info
Session Expiration
Las aplicaciones vulnerables no hacen caducar la
sesin y la misma se puede aprovechar hasta la
fecha de caducidad
Host: http://www.foo.bar
User-Agent: Mozilla/5.0
Cookie: ID=2074c519d665f5cf9eb3c52abd97865223f65b70;
Expires=Wed, 08 Sep 2015 23:59:00 GMT
https://www.owasp.org/index.php/Argument_Injection_or_Modification
http://php.net/manual/es/ini.core.php
Session Fixation
Una aplicacin vulnerable permite que un atacante
fije una sesin y que el usuario la utilice
Una aplicacin web autentica a un usuario sin
validar la sesin existente y por lo tanto la sesin es
asociada al usuario real anterior
Un atacante es capaz de forzar un identificador de
sesin de un usuario conocido y tiene acceso a la
sesin autenticada
Se asigna un identificador de sesin conocido a un
usuario, antes de que se autentique
https://www.owasp.org/index.php/Session_Fixation
http://www.worldofasp.net/tut/SessionHijack/Securing_Session_In_ASPNET_793.aspx
http://alexsmolen.com/blog/?p=17
http://www.acros.si/papers/session_fixation.pdf
3
Ingeniera Social
http://seguro.com/
login.xxx?SessionID=1234
2
seguro.com
http://www.acrossecurity.com/papers/session_fixation.pdf
http://shiflett.org/articles/session-fixation
http://projects.webappsec.org/w/page/13246960/Session%20Fixation
http://software-security.sans.org/blog/2009/06/14/session-attacks-and-aspnet-part-1/
http://software-security.sans.org/blog/2009/06/24/session-attacks-and-aspnet-part-2/
http://www.codeproject.com/KB/session/SessionFixation.aspx
CAPTCHA (I)
CAPTCHA (Completely Automated Public Turing
test to Tell Computers and Humans Apart Prueba de Turing pblica y automtica para
diferenciar a mquinas y humanos): mtodo que
genera una prueba desafo-respuesta que slo
los humanos deberamos ser capaces de resolver
(las mquinas/bot no deberan)
til para evitar el spam, ataques de DoS (bloqueo
de cuentas por intentos), el registro masivo de
cuentas y el abuso de los recursos ajenos por
partes de personas inescrupulosas
http://www.segu-info.com.ar/articulos/62-captcha.htm
CAPTCHA (II)
http://www.google.com/recaptcha
Captcha predecible
Otro ejemplo
URL Redirect
Para controlar los abandonos de la pgina
web, se redirecciona a sitios externos mediante
un script o pgina de salida (mal validada)
OK
ERROR
E
R
R
O
R
El secreto radica en la
administracin de
permisos
Registrar y administrar
las URL del sitio
Controlar que cada
usuario tenga acceso al
recurso solicitado
Prestar especial
atencin en registro
por pasos
Path Traversal
Vulnerabilidad que permite acceder a objetos
fuera del mbito de la aplicacin web
Dependiendo del sistema operativo, el servidor
web y la codificacin empleada, se podrn
escribir rutas de distintas maneras
Se basan en permisos de archivos incorrectos y
los errores de validacin de entradas
../ %2e%2e%2f ..%2f ../
..\ %2e%2e%5c ..%5c
..\ %252e%252e%255c
?file=/etc/passwd
?file=../../../etc/passwd
Codificacin de URL
http://programming4.us/security/598.aspx
Demo
Path Traversal
LFI y RFI
Vulnerabilidades que se hacen presentes cuando se
permite que el usuario incluya archivos en la
aplicacin
Local File Inclusion (LFI): inclusin de archivos
locales, donde se encuentre el sitio web vulnerable
Remote File Inclusion (RFI): permite la inclusin de
archivos que se encuentran en servidores externos
Principalmente presentes en PHP por la
configuracin incorrecta de la variables:
allow_url_fopen y allow_url_include = OFF
register_globals = OFF
Use E_STRICT (PHP >= 5.0)
http://www.php.net/manual/en/errorfunc.configuration.php
LFI y RFI
LFI y RFI
LFI y RFI
Otro ejemplo
Inclusin de Archivos
Demo
LFI y RFI
CSRF
Cross Site Request Forgery (CSRF): se fuerza al
navegador web autenticado de una vctima a
enviar una peticin a una aplicacin web
vulnerable, que ejecuta la accin enviada
Al contrario que los ataques XSS, que explotan
la confianza del usuario, el CSRF explota la
confianza que el sitio tiene en el usuario
Se realiza una peticin a nombre del usuario
(vctima)
Prevencin de CSRF
Aceptar POST: se pueden falsificar (no confiable)
Transacciones multi-pasos: se pueden predecir
los pasos (no confiable)
Reescritura de URL: se puede predecir la URL (no
confiable)
Comprobacin del HTTP_Referer (manipulable)
Usar una cookie secreta, token o variable de
sesin: una vez que la variable es establecida es
enviada en todas las peticiones hasta que la
sesin se cierre
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
http://shiflett.org/articles/foiling-cross-site-attacks
http://bit.ly/o2Azp4
Prevencin de CSRF
En Java utilizar libreras como ESAPI y CSRF Guard
de OWASP
En PHP existen decenas de clases: NoCSRF PHP
.NET incorpora Viewstate (no desactivar) y
AntiForgeryToken
En ASP 3.0 existen libreras de OWASP
Probar el Tester de CSRF de OWASP
https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project
https://www.owasp.org/index.php/Esapi
http://bkcore.com/blog/code/nocsrf-php-class.html
https://www.owasp.org/index.php/PHP_CSRF_Guard
http://j.mp/VTY0Wy
https://www.owasp.org/index.php/.Net_CSRF_Guard
https://www.owasp.org/index.php/Classic_ASP_Security_Project
https://www.owasp.org/index.php/Category:OWASP_CSRFTester_Project
Descargar BD completas
Aadir o eliminar informacin a la BD
Ejecutar comandos de SO
Comprometer la BD o el servidor
Aplicacin (servidor)
select * from productos where prod_id = X
Aplicacin (servidor)
select * from productos where prod_nombre = X
Aplicacin (servidor)
select * from productos where prod_id = X
Aplicacin (servidor)
select * from productos where prod_nombre = X
Lenguajes y motores de BD
PHP / MySQL
Lenguajes y motores de BD
.NET / SQL
.NET / Store Procedure
JAVA / SQL
MVC / SQL
Ejemplo de inyeccin
PHP / MySQL
Obtener login
1. SELECT * FROM u WHERE id=1 (ok)
2. SELECT * FROM u WHERE id=1 or 1=1 -Devuelve todos los usuarios o el 1er registro
5.
tabla.dbo.sysobjects
master.dbo.sysobjects
tabla.dbo.syscolumns
master.dbo.syscolumns
tabla.dbo.syspermissions
master.dbo.sysxlogins
tabla.dbo.systypes
master.dbo.sysservers
tabla.dbo.sysindexes
master.dbo.sysservers
tabla.dbo.sysindexes
master.dbo.*
tabla.dbo.sysfiles
http://msdn.microsoft.com/en-us/library/aa260604%28v=SQL.80%29.aspx
https://msdn.microsoft.com/en-us/library/ms187376.aspx
Funcin
SP_makewebtask
SP_addlogin
Agrega un usuario
SP_addsrvrolemember
XP_logininfo
XP_fileexist
XP_sendmail
XP_ActiveDirectory
XP_regXXX (R/W/D)
XP_servicecontrol
XP_cmdshell
Ejemplo de inyeccin
Inyeccin en Oracle
Se encuentran en Google!
Otras tcnicas
Uso de comentarios para evitar Blacklist
SELECT * FROM u WHERE id=1 UN/**/ION SELE/**/CT * FROM u
Uso de Hexadecimal
SELECT * FROM u WHERE id=1;
DECLARE @x AS VARCHAR(400);
SELECT @x=0x73656c656374202a2066726f6d207379736f626a65637473;
EXEC (@x);-SELECT * FROM sysobjects (en hexadecimal)
Uso de tautologas
SELECT * FROM u WHERE id=1 AND if ((select user) = 'sa')
select OK else select 1/0-Si usuario es sa, devuelve OK sino un error
SELECT * FROM u WHERE id=1 AND SELECT
ascii(substring((SELECT TOP 1 name FROM sysobjects WHERE
xtype = 'U'),1,1))) > 96-SELECT * FROM u WHERE id=1 AND SELECT
ascii(substring((SELECT TOP 1 name FROM sysobjects WHERE
xtype = 'U'),1,1))) < 122-Obtiene si existen tablas cuyo nombre comienzan entre a
(96) y z (122). Luego se debe acotar y comenzar a
obtener el nombre de cada usuario
SELECT * FROM u WHERE id=1 AND if ((select user) = dbo')
WAITFOR DELAY 0:0:10-Si usuario es dbo, espera 10 segundos
Ms inormacin: http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
http://www.php.net/manual/en/class.pdostatement.php
Demo
SQL Injection
Configuracin defectuosa
La configuracin defectuosa de aplicaciones,
permisos, usuarios y base de datos permite al
atacante obtener informacin (Information
Disclosure) y realizar un ataque efectivo
HTTP - Puerto 80
Configuracin defectuosa
Hardening de aplicaciones
Almacenamiento criptogrfico
inapropiado
El uso inseguro de mtodos criptogrficos
representa la principal vulnerabilidad
relacionada a la privacidad y al cumplimiento de
normativas (Ej: conformidad con PCI DSS)
Hashing y HMAC
HMAC (Hash-based Message Authentication
Code): generar un valor (MAC) en base a un
Hash cifrado con una clave secreta (conocida
como Salt)
Utilizado para verificar la integridad (hash) y
autenticidad (cifrado) del mensaje
Mensaje
MD5
SHA1
password
5f4dcc3b5aa765d61d8327deb882cf99
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
Mensaje
HMAC-MD5
HMAC-SHA1
SALT
password
5F4DCC3B5AA765D61D8327DEB882CF99
7DB5EEFE8BD10447855265E8EACB6F0BFDC59CFC
rnd(1)
password
A85A10CDE2C1852DBBD1FB1D670AB939
34FD02E4C516DE4760BACDB86FDDBC1DBC22B524
rnd(2)
Gracias!