Vous êtes sur la page 1sur 114

Desarrollo Seguro

Orientado a OWASP Top 10

Lic. Cristian Borghello, CISSP MVP


www.segu-info.com.ar
@seguinfo
@CursosSeguInfo

OWASP

OWASP Top 10 (I)


Basado en The OWASP Risk Rating Methodology
El objetivo principal de OWASP Top 10 es educar
desarrolladores, diseadores, arquitectos, gerentes,
y organizaciones sobre las consecuencias de las
vulnerabilidades de seguridad en aplicaciones web
Provee informacin sobre cmo evaluar los riesgos
en las aplicaciones web
Describe la probabilidad general de ocurrencia y sus
consecuencias
Presenta una orientacin sobre cmo verificar los
problemas y cmo evitarlos
http://segu.info/otop
http://segu.info/guia

Enfoque de Riesgo de OWASP

Enfoque de Riesgo de OWASP 2013

Errores
comunes

Validacin incorrecta de parmetros


Conocido como el Softwares Killer
No se valida ni la entrada ni la salida de
variables
No se inicializan variables ni se validan sus tipos
Los atacantes pueden modificar sus entradas y
producir valores inesperados

Todas las validaciones


se deben realizar en
ambos lados:
cliente y servidor

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

Archivos con informacin


Sitemap: archivos con mapas del sitio, contienen sus
directorios y pginas e indican cada cunto deben ser indexados
Robots: archivos que brindan informacin a los buscadores para
permitir/negar la indexacin
.listing: generado localmente por la herramienta WGET
Pueden ser utilizados por robots ilcitos para recolectar informacin para un ataque

Codificacin incorrecta
Lista incompleta
de parmetros
validados

Nota: si bien es recomendado, en .NET validateRequest=true puede dar falsos positivos

<paranoico>

Todo lo que viene del usuario es DA-I-NO


Todo lo que viene del usuario es DA-I-NO
Todo lo que viene del usuario es DA-I-NO
Todo lo que viene del usuario es DA-I-NO

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 (Cross Site Scripting)


Cross Site Scripting (XSS): ejecucin de
scripts y comandos no deseados a travs de
aplicaciones web, explotando la confianza del
usuario
Se originan por la validacin incorrecta de
variables que permiten ejecutar scripts en
campos de entrada
El atacante inyecta cdigo malicioso (HTML y
scripts) que son ejecutados en el entorno del
navegador del cliente afectado
Confused Deputy Program: realizar acciones en nombre de otros programas o personas

XSS (Cross Site Scripting)


Mediante el control del navegador del usuario
es posible realizar ataques de:
Robo de sesin e identidad, mediante la
manipulacin de las cookies
Phishing, mediante la modificacin de la
interface normal del sitio
Redireccin a sitios dainos

Existen tres tipo de XSS:


Reflejados/No almacenados
Almacenados
DOM-XSS

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

Al hacer clic, el ataque se refleja en el browser


del usuario vctima, y se ejecuta con sus
permisos
<img src="http://URL" onerror=alert(document.cookie);>

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

Se debera generar una sesin no predecible,


mediante el uso de hash y variables no repetibles
(timestamp)
Host: http://www.foo.bar
User-Agent: Mozilla/5.0
Cookie: ID=2074c519d665f5cf9eb3c52abd97865223f65b70
SHA1: usuarioXsegu-info20150810120945-ClaveSecreta
https://www.owasp.org/index.php/Session_Prediction

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

Obligar el log-out y hacer que las sesiones


caduquen, respetando las regulaciones vigentes

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/

Session Fixation (otros)


Si se enva (fija) al usuario una sessionid, se
comprueba la existencia de la sesin y, si no
existe, se crea y se asigna al usuario
Si este se autentica, el atacante, que conoce
su sessionid, puede impersonarlo
http://www.foo.bar/login.php?PHPSESSID=123456 (123456 valor conocido)
http://www.foo.bar/login.jsp?JSESSIONID=123456
http://www.foo.bar/login.aspx?ASP_NETSESSIONID=123456

http://www.codeproject.com/KB/session/SessionFixation.aspx

Evitar Session Fixation


Para evitarlo
Evitar las sesiones por querystring
(session_less)
En aplicaciones crticas, utilizar SSL/TLS
Obligar los Time-out y log-out (relogin del
usuario)
Manejar otro ID propio (Token extra a la
sesin)
Regenerar la sesin una vez que el usuario es
autenticado
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

Referencia directa a objetos


Se expone una referencia hacia un objeto
interno de la aplicacin, archivo, directorio,
registro de base de datos, cdigos, URL, etc.

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

Bad URL Redirect (I)


OK

ERROR

Bad URL Redirect (II)

E
R
R
O
R

Control de URL (I)


La solicitud de URLs vulnerables se puede
realizar en forma manual y/o automtica
ERROR

Con conocer el nombre


del PHP y el parmetro
es suficiente para
descargar la BD completa

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 &#46;&#46;&#47;
..\ %2e%2e%5c ..%5c
..\ %252e%252e%255c
?file=/etc/passwd
?file=../../../etc/passwd

Al utilizar codificacin se pueden saltear los filtros de las


aplicaciones y los WAF (Web App Firewall)
https://www.owasp.org/index.php/Path_Traversal

Codificacin de URL

Evitar Path Traversal


Controlar y validar las funciones de inclusin
de archivos include(), include_once(), require(),
require_once()
En php.ini, utilizar open_basedir
Limitar el acceso a archivos crticos
Utilizar ACL y permisos en File-System
IIS es seguro por defecto out-the-box

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

Validacin al subir archivos

Inclusin de Archivos

Demo
LFI y RFI

Evitar RFI y LFI


UrlScan por defecto bloquea: exe, bat,
cmd, com, htw, ida, idq, htr, idc, printer,
ini, pol, dat, etc.
En PHP se puede utilizar Mod_Security
y/o Suhosin

Todas las validaciones se deben realizar


en ambos lados: cliente y servidor

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)

Alice realiza una transferencia de $100 a Bob (va POST)


POST http://bank.com/transfer.do HTTP/1.1
...
Content-Length: 19;
acct=BOB&amount=100

Pero, esa transaccin tambin puede realizarse va GET


GET http://bank.com/transfer.do?acct=BOB&amount=100 HTTP/1.1

Entonces, Charles construye una URL pero con una


transferencia de $1000 desde la cuenta de Alice:
http://bank.com/transfer.do?acct=CHARLES&amount=1000

Charles engaa a Alice para que haga clic en un enlace daino


<a href="http://bank.com/transfer.do?acct=CHARLES&amount=1000">
Viste lo que han publicado de t en Facebook?
</a>
<img src="http://bank.com/transfer.do?acct=CHARLES&amount=1000"
width="1" height="1" border="0">

Asumiendo que Alice est autenticada en su cuenta,


si hace clic en el enlace, la transferencia se realizar

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

SQL Injection (I)


SQL Injection: ejecucin de sentencias SQL
inyectadas y no deseadas a travs de aplicaciones
mal validadas
Se originan por la validacin incorrecta de variables
que permiten ingresar sentencias SQL
La sentencia SQL que genera la aplicacin es
controlada por el atacante
El atacante puede:

Descargar BD completas
Aadir o eliminar informacin a la BD
Ejecutar comandos de SO
Comprometer la BD o el servidor

SQL Injection (II)


Solicitud numrica (cliente)
http://www.foo.bar/ver_productos.XXX?id= 1

Aplicacin (servidor)
select * from productos where prod_id = X

Solicitud Alfanumrica (cliente)


http://www.foo.bar/ver_productos.XXX?nombre= Azucar

Aplicacin (servidor)
select * from productos where prod_nombre = X

SQL Injection (III)


Solicitud numrica (cliente)
http://www.foo.bar/ver_productos.XXX?id= 1 or 1=1

Aplicacin (servidor)
select * from productos where prod_id = X

Solicitud alfanumrica (cliente)


http://www.foo.bar/ver_productos.XXX?nombre= nada or a=a

Aplicacin (servidor)
select * from productos where prod_nombre = X

SQL Injection (IV)


Cualquier motor de BD pueden ser afectado
Cualquier punto de entrada de la aplicacin
puede ser utilizado para inyectar sentencias
Las sentencias pueden ser inyectadas a travs de
cualquier comando del Header (GET, POST,
cookies, etc.)
Se debe realizar filtrado de caracteres como:
* , ; : & % -( ) / < > + \

Todas las validaciones se deben realizar


en ambos lados: cliente y servidor

Ejemplo SQL Injection

select * from tabla_usuario where


nombre_usuario = md5(a) or 1=1 #

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

Information Disclosure y SQLi


Los errores no controlados permiten
Information Disclosure que facilitan el SQLi

Information Disclosure y SQLi

Information Disclosure y SQLi

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

3. SELECT * FROM u WHERE id=a or a=a


Devuelve todos los usuarios o el 1er registro

A partir de las consultas adecuadas es


posible adquirir conocimiento acerca
de la estructura de la base de datos

Enumeracin de Base de Datos


La enumeracin consiste en obtener el nombre de cada
una de las tablas utilizadas por la aplicacin as como
sus campos y tipos
1. SELECT * FROM u WHERE id=1 (ok)
2. SELECT * FROM u WHERE id=1 HAVING 1=1 -Devuelve el nombre de la tabla y el 1er campo

3. SELECT * FROM u WHERE id=1 GROUP BY


tabla.id HAVING 1=1 -Devuelve el nombre del 2do campo

4. SELECT * FROM u WHERE id=1 GROUP BY u.id,


u.nombre HAVING 1=1 -Devuelve el nombre del 3er campo

5.

Obtener tipos de datos


1. SELECT * FROM u WHERE n=seguinfo (ok)
2. SELECT * FROM u WHERE n= UNION SELECT
SUM(n) FROM u Si el dato es Char, devuelve error de cast conversin de tipo

3. SELECT * FROM u WHERE n= UNION SELECT


MIN(n) FROM u -Idem

4. SELECT * FROM u WHERE n= UNION SELECT


MAX(n) FROM u -
Idem

Tablas y variables de MySQL


information_schema
character_sets
collations
collation_character_set_applicability
columns
column_privileges
key_column_usage
profiling
routines
schemata
schema_privileges
statistics
tables
table_constraints
table_privileges
triggers
user_privileges
views

SELECT * FROM u WHERE id=1


UNION SELECT table_name,
column_name, data_type FROM
information_schema.columns; --

Tablas y variables de SQL Server


Vistas del sistema (compatibilidad)
master.dbo.sysdatabases

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

SELECT * FROM u WHERE id=1


UNION SELECT name FROM
sysobjects WHERE xtype=U; --

http://msdn.microsoft.com/en-us/library/aa260604%28v=SQL.80%29.aspx
https://msdn.microsoft.com/en-us/library/ms187376.aspx

Store Procedure del sistema


Store

Funcin

SP_makewebtask

Crea un archivo con el resultado de la consulta

SP_addlogin

Agrega un usuario

SP_addsrvrolemember

Agrega un usuario al rol

XP_logininfo

Informacin del login del usuario

XP_fileexist

Verifica la existencia de un archivo

XP_sendmail

Enva un correo con el resultado de la consulta

XP_ActiveDirectory

Control del Active Directory

XP_regXXX (R/W/D)

Controla el registro (XXX es la funcin Read/Write/Delete, etc.)

XP_servicecontrol

Controla servicios del sistema

XP_cmdshell

Ejecuta comandos del sistema (desactivado en SQL Server 2005+


SELECT * FROM u WHERE id=1; exec master.dbo.xp_cmdshell
dir c:\-type c:\inetpub\sitio\conexion.asp
net user seguinfo /add

Ejemplo de inyeccin

Inyeccin en Oracle

Se encuentran en Google!

Todos los registros

Otras tcnicas
Uso de comentarios para evitar Blacklist
SELECT * FROM u WHERE id=1 UN/**/ION SELE/**/CT * FROM u

Uso de Char para evitar escapes \


SELECT * FROM u WHERE id=1 UNION SELECT * FROM u WHERE
user = char(39) + char(115) + char(101) + char(103) +
char(117) + char(39)

Uso de Hexadecimal
SELECT * FROM u WHERE id=1;
DECLARE @x AS VARCHAR(400);
SELECT @x=0x73656c656374202a2066726f6d207379736f626a65637473;
EXEC (@x);-SELECT * FROM sysobjects (en hexadecimal)

Blind SQL Injection


Inyeccin que se realiza a ciegas porque la
aplicacin no brinda informacin o mensajes
de error
La aplicacin tambin filtra el UNION y otras
sentencias SQL
El atacante puede obtener informacin en
base a consultas por TRUE o FALSE
SELECT * FROM u WHERE id=1 AND 1=1-- TRUE (Tautologa)
SELECT * FROM u WHERE id=1 AND 2=1-- FALSE

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/

Entonces, Cmo se hace?


.Net - Store Procedure parametrizado (3 capas)
using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet userDataset = new DataSet();
SqlDataAdapter myCommand = new SqlDataAdapter("SP_Login", connection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
myCommand.SelectCommand.Parameters.Add("@user", SqlDbType.VarChar, 11);
myCommand.SelectCommand.Parameters["@user"].Value = usuario.Text;
myCommand.Fill(userDataset);
}

.Net - Query parametrizada (2 capas)


using (SqlConnection connection = new SqlConnection(connectionString))
{
DataSet userDataset = new DataSet();
SqlDataAdapter myDataAdapter = new SqlDataAdapter("SELECT nombre FROM
autores WHERE autor = @autor", connection);
myCommand.SelectCommand.Parameters.Add("@autor", SqlDbType.VarChar, 11);
myCommand.SelectCommand.Parameters["@autor"].Value = autor.Text;
myDataAdapter.Fill(userDataset);
}

Entonces, Cmo se hace?


PDO es una extensin de acceso a datos para PHP 5
y que permite parametrizacin
Query parametrizada en PHP 5
//Conexin PDO a BD
$db = new PDO('mysql:host=' . $host . ';dbname=' . $db, $user, $pass);
$db->query('SET NAMES UTF8');
//Preparar consulta
$query= $db->prepare('SELECT nombre FROM autores WHERE autor = :valor');
//Parametrizacin
$consulta->bindValue(':valor', $autor, PDO::PARAM_STR);
//Ejecutar consulta
$consulta->execute();
$resultado = $consulta->fetchAll(PDO::FETCH_ASSOC))

Query parametrizada en JAVA


Query q=em.createQuery("SELECT nombre FROM autores WHERE autor = :autor");
q.setParameter("autor", autor);
List autores = q.getResultList();

http://www.php.net/manual/en/class.pdostatement.php

Uso de herramientas (I)

Uso de herramientas (II)

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

HTTPS (Puerto 443)

Configuracin defectuosa

Hardening de aplicaciones

Cambiar directorios de instalacin por defecto


Cambiar configuraciones por defecto
Utilizar contraseas fuertes
NO utilizar protocolos inseguros (FTP, Telnet,
POP, SMTP, etc). Utilizar SSH
Al hacer Upload de archivos, configurar
directorios y permisos adecuados
Utilizar mensajes de errores genricos y no
brindar informacin del servidor/aplicacin
Validar, validar, validar

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)

Han pasado ms de 2000 aos!

Pequea gua criptogrfica


Cifrar todos los datos sensibles (en trfico,
almacenamiento, y backups)
NO utilizar algoritmos propios (seguridad por
oscuridad). No crear algoritmos propios!
Cuidar la implementacin de algoritmos seguros
NO utilizar algoritmos antiguos o con probadas
vulnerabilidades
NO Hardcodear claves en el cdigo fuente o
almacenar las claves en forma insegura
NO utilizar cifrado de dos vas en contraseas
(utilizar hashing)

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)

Hashing Para qu?

Control de URL y Salt


Utilizar HMAC para generar datos codificados y
checksum en informacin sensible

En PHP >= 5.5:


http://www.php.net/manual/en/function.password-hash.php
http://www.php.net/manual/en/function.password-verify.php

Proteccin insuficiente en la Capa


de Transporte

La aplicacin no utiliza SSL para las pginas que


requieren autenticacin o transmisin de datos
sensibles
Se transmiten cookies por canales inseguros
Se utilizan protocolos no seguros o dbiles
La aplicacin utiliza un certificado SSL
configurado incorrectamente, vencido o
revocado. Al mostrarse la advertencia los
usuarios la ignoran
Se utilizan back-ends pblicos y sin cifrado

Gracias!

Lic. Cristian Borghello, CISSP MVP


www.segu-info.com.ar
@seguinfo

Vous aimerez peut-être aussi