No muchos saben cuando se descubrió SQL injection, fue descubierto un 25 de diciembre de 1998 (día de navidad) por un paper de Jeff Forristal,
más conocido con el alias Rain Forrest Puppy (Link paper). Si
echamos cuentas sabemos qué hace 20 navidades.
SQL injection consiste en la inyección de consultas SQL, por medio de inputs, que puede hacer un cliente. ¿Suena complicado? Pues para un
atacante es tan fácil como meter una comilla en esta URL www.dominio.com/informes.asp?numero=(Meta
usted la comilla aquí).
¿Cómo ha sido el desarrollo de SQL Injection a lo largo de su historia?
Ante tanto ataque SQL los administradores y programadores perezosos, que
no quisieron arreglar el problema, decidieron que era buena idea simplemente
hacer que no apareciera ningún error cuando metas la comilla y otros trucos. Para
que puedas programar como si fueras un mono. Esto dio la popularidad a las
Blind SQL injection, porque decían que PHP era invulnerable a SQL injection
porque quitaba las comillas.
El blind SQL injection se basaba en realizar preguntas lógicas al servidor y ver como respondía a los verdaderos y falso,
para distinguir estos estados, deberemos saber que siempre contestara a las
consultas verdaderas y a la falsas no responderá. Pero los ataques se siguieron innovando, en el 2002 salió un paper llamado Time-Based Blind SQL injection:
Este paper explicaba que la mejor forma de identificar que nos estaba contestando la base de datos, en una petición de true o false era con el tiempo de
respuesta.
Consultas SQL injection a la zurda (Chema Alonso): Una
anécdota contada por Chema Alonso es que se encontraron una aplicación que
hacia las consultas SQL al revés así que decidieron pasarlo por la mayoría de
scanner de vulnerabilidades y ninguno lo detecto esto derivo a Arimetic blind SQL
injection.
Y para solucionar todos estos tipos de inyecciones se les ocurrió la maravillosa
idea de poner un WAF, pero esto no sirve de nada ya que con smuggling podemos
saltarlo.
¿Es cosa del Pasado?
Pues desgraciadamente parece que no pues en 2013, Yahoo! tuvo que pagar una recompensa por un Time base blind SQL injection.
Además es el número 1 en las vulnerabilidades web según el
informe de OWASP en 2017
¿Por qué debería preocuparme si soy vulnerable a este ataque?
Deberías preocuparte, porque SQL injection no solo vale para
saltarse un login con el típico 'or '1'='1. Si no que le dejamos a nuestro
atacante que muestre sus habilidades en el lenguaje SQL para poder atacarte a
su gusto pudiendo realizar las siguientes acciones:
- Extraer información.
- Modificar datos.
- Comprometer cuentas administrativas
- Eliminar información
Esto se podría traducir a las siguientes amenazas
- Robar Información (usuarios, claves y otros datos).
- Subirte una Shell.
- Hacerte un deface.
- Infectar tu web con malware.
- Borrar todas las tablas.
- Y muchos más a gusto e imaginación del atacante.
¿Cómo puedo protegerme de SQL injection?
- Deberemos de escapar caracteres utilizados en las consultas SQL
- Delimitar los valores de las consultas.
- Verificar en todo momento que valores nos introduce el usuario.
- La última y más IMPORTANTE programar bien.
¿Es SQL inseguro?
Definitivamente SQL no es inseguro, ni el demonio. Las inyecciones se pueden hacer en todo tipo de lenguajes y debemos de vigilar no cometer estos errores porque como
hemos visto en la imagen facilitada por OWASP siguen siendo el TOP y no
todo el pastel es de SQL.
Comentarios
Publicar un comentario