La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Alberto Rivera Tavera Microsoft Student Partner

Presentaciones similares


Presentación del tema: "Alberto Rivera Tavera Microsoft Student Partner"— Transcripción de la presentación:

1 Alberto Rivera Tavera Microsoft Student Partner arivera@iquos-bi.com

2 ATENCIÓN ESTA CHARLA ES ÚNICAMENTE CON FINES ACADÉMICOS. EN NINGÚN MOMENTO EL ORADOR BUSCA MOTIVAR EL USO DE PRÁCTICAS POCO ÉTICAS A NIVEL PROFESIONAL. POR EL CONTRARIO, PRETENDE CONTRIBUIR A LA PREVENCIÓN DE ESTE TIPO DE TÉCNICAS MALINTENCIONADAS SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)2

3 AGENDA ¿Qué es SQL Injection? ¿Cuándo se presenta este problema? Ataques a las bases de datos ¿Cómo prevenir estos ataques? Conclusión SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)3

4 ¿Qué es SQL Injection? Vulnerabilidad informática a nivel de base de datos de una aplicación El origen es el filtrado incorrecto de variables en las partes del programa con código SQL. Un programa hecho con descuido o ignorancia sobre el problema, podrá ser vulnerable y comprometerá la seguridad del sistema SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)4

5 ¿Cuando se presenta este problema? La inyección de código SQL ocurre cuando se inserta código SQL “invasor” dentro de otro código SQL para alterar su funcionamiento normal, y hacer que se ejecute maliciosamente el código “invasor” en la base de datos Tomado de: Wikipedia SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)5

6 Ataques a las bases de datos "SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';“ Asumimos que… nombreUsuario = “Camila” La consulta a la base de datos se ejecutaría así: SELECT * FROM usuarios WHERE nombre = ‘Camila’; SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)6

7 Un ataque sencillo de autenticación "SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';“ Primera inyección de código malicioso… nombreUsuario = “’ OR 1 = 1 --” La consulta a la base de datos se ejecutaría así: SELECT * FROM usuarios WHERE nombre = ‘’ OR 1 = 1 --’; SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)7

8 Ataques más peligrosos… Otro ejemplo de código malicioso: nombreUsuario = “'; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%’” La consulta a la base de datos se ejecutaría así: SELECT * FROM usuarios WHERE nombre = ‘’; DROP TABLE usuarios; SELECT * FROM datos WHERE nombre LIKE '%’; SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)8

9 Ataques más peligrosos… (Cont) Un caso grave: Eliminar la base de datos. nombreUsuario = “'; USE Master GO DROP DATABASE miBasedeDatos GO” La consulta a la base de datos se ejecutaría así: SELECT * FROM usuarios WHERE nombre = ‘’; USE Master GO DROP DATABASE miBasedeDatos GO; SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)9

10 ¿Cómo prevenir estos ataques? Utilizar variables por parámetros Limpieza de código “malicioso” Creación de procedimientos almacenados SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)10

11 Utilizar variables por parámetros Al pasar por parámetros las variables, garantizamos que la consulta a la base de datos no se concatene. Incorrecto Correcto SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)11 SqlConnection con = new SqlConnection(stringConnection); con. Open(); SqlCommand com = new SqlCommand("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "'", con) SqlDataAdapter da = new SqlDataAdapter(com) … SqlConnection con = new SqlConnection(stringConnection); con. Open(); SqlCommand com = new SqlCommand("SELECT * FROM usuarios WHERE nombre = @nombreUsuario”, con); SqlParameter par = new SqlParameter(@nombreUsuario,SqlDbType.VarChar,50); par.Value = nombreUsuario; com.Parameters.Add(par); SqlDataAdapter da = new SqlDataAdapter(com) …

12 Limpieza de código malicioso Antes de ejecutar la consulta en base de datos, eliminamos de las variables, los caracteres que son propios de una sentencia SQL. SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)12 String nombreUsuario = this.txtNombreUsuario.txt; nombreUsuario = nombreUsuario.Replace("--", ""); nombreUsuario = nombreUsuario.Replace("'", ""); nombreUsuario = nombreUsuario.Replace("SELECT", ""); nombreUsuario = nombreUsuario.Replace(“OR", ""); nombreUsuario = nombreUsuario.Replace(“AND", ""); nombreUsuario = nombreUsuario.Replace(“LIKE", ""); …

13 Creación de procedimientos almacenados La aplicación llama al procedimiento que se encuentra en el motor de bases de datos. No se arma la consulta en la aplicación. SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)13 SqlConnection con = new SqlConnection(ConnectionString); con.Open(); SqlCommand com = new SqlCommand(); com.CommandType = CommandType.StoredProcedure; com.CommandText = "up_IniciarSesión"; SqlParameter par = new SqlParameter(@nombreUsuario,SqlDbType.VarChar,50); par.Value = nombreUsuario; com.Parameters.Add(par); SqlDataAdapter da = new SqlDataAdapter(com); …

14 Conclusión SQL Injection es un problema de máxima prioridad para el equipo de desarrollo. Es importante realizar buenas prácticas de programación para prevenir ataques. NUNCA envíen sentencias SQL concatenadas desde la aplicación. SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)14

15 ¿Preguntas? Contacto. Alberto Rivera Tavera arivera@iquos-bi.com SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)15

16 Recursos Wikipedia – http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL Blog SQL Server – http://albertorivera.wordpress.com/ http://albertorivera.wordpress.com/ MSDN: Artículo: “Stop SQL Injection Attacks Before They Stop You” – http://msdn.microsoft.com/msdnmag/issues/04/09/SQ LInjection/ http://msdn.microsoft.com/msdnmag/issues/04/09/SQ LInjection/ Iquos-BI – http://www.iquos-bi.com http://www.iquos-bi.com SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)16

17 GRACIAS SQL INJECTION: AMENAZA PRESENTE. ALBERTO RIVERA TAVERA (MSP)17


Descargar ppt "Alberto Rivera Tavera Microsoft Student Partner"

Presentaciones similares


Anuncios Google