ethical hacking course sql injection

26
Ing. Pablo Daniel Pazmiño Naranjo CEC-EPN

Upload: santy-cadena

Post on 03-Dec-2014

916 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Ethical hacking course   sql injection

Ing. Pablo Daniel Pazmiño Naranjo

CEC-EPN

Page 2: Ethical hacking course   sql injection

Lo más importante en una operación militar es la victoria y no la persistencia. Esta última no es beneficiosa. Un ejército es como el fuego: si no lo apagas, se consumirá por sí mismo

Tsun-Tsu El arte de la guerra

Page 3: Ethical hacking course   sql injection

OBJETIVOS

Aprender el concepto fundamental de un ataque SLQ Injection

Conocer cómo se arman ataques de este estilo y qué consecuencias se tienen.

Aprender a proteger aplicaciones web con ingreso de campos.

Page 4: Ethical hacking course   sql injection

SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)

Descripción del ataque Cómo armar ataques Qué busca un atacante Cómo proteger sistemas web

Page 5: Ethical hacking course   sql injection

DESCRIPCIÓN DEL ATAQUE Es un método de infiltración de código intruso que se vale

de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.

El origen de la vulnerabilidad radica en el incorrecto chequeo y/o filtrado de las variables utilizadas en un programa que contiene, o bien genera, código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o script que esté embebido dentro de otro.

Se conoce como Inyección SQL, indistintamente, al tipo de vulnerabilidad, al método de infiltración, al hecho de incrustar código SQL intruso y a la porción de código incrustado.

Page 6: Ethical hacking course   sql injection

DESCRIPCIÓN DEL ATAQUE

Ejemplo: este código reside en una aplicación web y existe un parámetro “usuario" que contiene el nombre de usuario a consultar. Dentro del código original y vulnerable se tiene: consulta := "SELECT * FROM usuarios

WHERE nombre = '" + usuario + "';"

Page 7: Ethical hacking course   sql injection

DESCRIPCIÓN DEL ATAQUE

En el ejemplo se tiene que si en el parámetro usuario se coloca un nombre válido (Ej.: admin) la consulta se ejecuta normalmente.

Pero supongamos que en vez de eso se ingresa algo como lo siguiente: admin'; DROP TABLE usuario; SELECT *

FROM data WHERE name LIKE '% El resultado será un Drop de la tabla

usuario!!!!

Page 8: Ethical hacking course   sql injection

SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)

Descripción del ataque Cómo armar ataques Qué busca un atacante Cómo proteger sistemas web

Page 9: Ethical hacking course   sql injection

CÓMO ARMAR ATAQUES

La manera de armar ataques es insertando uno o varios de los siguientes caracteres especiales:

○ “ ○ ; ○ -- o - ○ , ○ %

Page 10: Ethical hacking course   sql injection

CÓMO ARMAR ATAQUES El siguiente paso es armar una sentencia

de consulta básica, por ejemplo: ‘; select * from tab; --

Esta consulta nos mostrará un resultado en el browser que despliega todas las tablas existentes en la base de datos

Este tipo de consultas dependerá del motor de base de datos ya que a pesar de que el lenguaje base es el PL-SQL las implementaciones varían entre motores.

Page 11: Ethical hacking course   sql injection

CÓMO ARMAR ATAQUES Otra manera común de armar ataques es

analizar el servidor buscando puertos abiertos.

Se encuentran puertos abiertos de bases de datos: 1433/tcp Microsoft-SQL-Server 3306/tcp MySQL sistema de gestión de bases

de datos 5432/tcp PostgreSQL sistema de gestión de

bases de datos 8000/tcp SQLite

Page 12: Ethical hacking course   sql injection

CÓMO ARMAR ATAQUES Otra manera común de armar ataques es

analizar el servidor buscando puertos abiertos.

Se encuentran puertos abiertos de bases de datos: 1433/tcp Microsoft-SQL-Server 3306/tcp MySQL sistema de gestión de bases

de datos 5432/tcp PostgreSQL sistema de gestión de

bases de datos 8000/tcp SQLite

Page 13: Ethical hacking course   sql injection

SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)

Descripción del ataque Cómo armar ataques Qué busca un atacante Cómo proteger sistemas web

Page 14: Ethical hacking course   sql injection

QUÉ BUSCA UN ATACANTE

Los objetivos de un atacante varían según las expectativas: Enumeración de usuarios.- Se pretende

comprometer información de usuarios, claves y datos de contacto para su comercialización (SPAM)

Espionaje industrial.- Se intenciona un ataque para obtener información sensitiva respecto a clientes, procesos o documentos internos anexados a un aplicativo web (intranet)

Page 15: Ethical hacking course   sql injection

QUÉ BUSCA UN ATACANTE Los objetivos de un atacante varían según

las expectativas: Destrucción de información.- mediante una

alteración de las tablas de sistema se daña la consistencia de las bases de datos haciendo que el aplicativo no funcione. Esto puede ser intencionado o accidental.

Desprestigio.- un ataque de este estilo puede perseguir un objetivo de daño de imagen de la víctima, en cuyo caso resultará en una pérdida de cuota de mercado significativa y mejor posición de su competencia.

Page 16: Ethical hacking course   sql injection

SQL INJECTION (INYECCIÓN DE CÓDIGO SQL)

Descripción del ataque Cómo armar ataques Qué busca un atacante Cómo proteger sistemas web

Page 17: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Mejor codificación Los sistemas web deberán ser codificados de

mejor manera de modo que se tienda a la seguridad de los aplicativos como parte del ciclo de desarrollo. Ej.: ○ PHP .- se puede utilizar la función

mysql_real_escape_string: $query_result = mysql_query("SELECT * FROM

usuarios WHERE nombre = \"" . mysql_real_escape_string($nombre_usuario) . "\"");

Esto ayudará a evitar un ataque de inyección de código ya que al ingresar caracteres especiales o consultas generará un error que para la ejecución de la aplicación.

Page 18: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Mejor codificación ○ Java .- se puede usar la clase PreparedStatement

En lugar de: Connection con = (acquire Connection) Statement stmt =

con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario + "';");

se puede usar parametrización o escape de variables, como se indica en los siguiente apartados.

○ Parametrización de sentencias SQL Connection con = (acquire Connection); PreparedStatement pstmt = con.prepareStatement("SELECT *

FROM usuarios WHERE nombre = ?"); pstmt.setString(1, nombreUsuario); ResultSet rset = pstmt.executeQuery();

Page 19: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Mejor codificación ○ Escape de las variables a insertar en la

sentencia SQL Escapar el texto contenido en la variable

reemplazando los caracteres especiales en SQL por su equivalente textual, de tal forma que SQL interprete todo el contenido de la variable como si fuera texto.

Connection con = (acquire Connection) Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM usuarios WHERE nombre = '" + nombreUsuario.replace("\\", "\\\\").replace("'", "\\'") + "';");

Page 20: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Mejor codificación ○ También se puede utilizar el método

escapeSQL de la clase StringEscapeUtils procedente de la librería de Apache Commons Lang Connection con = (acquire Connection); Statement stmt = con.createStatement(); ResultSet rset = stmt.executeQuery("SELECT *

FROM usuarios WHERE nombre = '" + StringEscapeUtils.escapeSQL(nombreUsuario) + "';");

Page 21: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Validación de campos: Es necesario que se validen los campos de

ingreso mediante el uso de expresiones regulares con JavaScript, por ejemplo, de modo que donde se ingresen números y letras no se permitan caracteres especiales.

La validación evita más de un 80% de los ataques.

La validación de campos junto con una buena codificación evitan más del 85% de los ataques de SQL injection

Page 22: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Separación de las capas de aplicación de la de base de datos Un error común es que en el mismo servidor

donde se ejecuta la aplicación (web) se instale y ejecute la base de datos del mismo aplicativo. Esto puede ser detectado e identificado mediante un escáner (nmap) y según eso ya se pueden armar ataques con un aplicativo de conexión (por ejemplo un programa pequeño php)

Page 23: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Implementar un analizador de contenidos La implementación de un analizador de

contenidos bloqueará cualquier intento de inyección de código en el aplicativo, asegurando la ejecución correcta del mismo.

Page 24: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Usar ‘stored procedures’ en las bases de datos Cuando la base de datos soporte

procedimientos almacenados hay que usarlos ya que eso evitará el ingreso de inyección de código porque los procedimientos pueden encapsular acciones (query, update, delete, etc.) en un solo procedimiento.

Si se inyectase código, este genera un error a nivel de base de datos y para la ejecución de la sentencia.

Page 25: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Limitar los permisos de la base de datos y segregar usuarios Los permisos de la base de datos y del

usuario que se conecta NO DEBEN tener permisos de DBA (administrador) ya que con eso se evitan problemas asociados a la alteración de las tablas y estructura de la base de datos.

Page 26: Ethical hacking course   sql injection

CÓMO PROTEGER SISTEMAS WEB

Configurar el reporte de errores Esta acción permitirá al administrador de la

base de datos conocer en detalle errores asociados a intentos de alterar la base de datos y por tanto ayudará a tomar correcciones y acciones preventivas para futuros ataques.