top of page
  • Foto del escritorTeam Inntesec

Cómo Prevenir Ataques de Inyección SQL


Cómo Prevenir Ataques de Inyección SQL

La inyección de SQL es una técnica de piratería que se descubrió hace más de quince años y aún hoy está demostrando ser sumamente efectiva, y sigue siendo una de las principales prioridades de seguridad de la base de datos. Se usó en el período previo a las elecciones presidenciales de 2016 en Estados Unidos para comprometer los datos personales de 200,000 votantes de Illinois, así como en ataques de alto perfil contra organizaciones como Sony Pictures, PBS, Microsoft, Yahoo, Heartland Payment Systems y incluso la CIA. E incluso en nuestro país hemos visto que distintas entidades gubernamentales, bancos y hasta le mundo político se ha visto afectado.


SQL, o lenguaje de consulta estructurado, es el lenguaje de comando y control para bases de datos relacionales como Microsoft SQL Server, Oracle y MySQL. En el desarrollo web moderno, estas bases de datos a menudo se usan en el extremo posterior de las aplicaciones web y los sistemas de administración de contenido escritos en PHP, ASP. NET u otros lenguajes de script, lo que significa que tanto el contenido como el comportamiento de muchos sitios web se basan en datos de un servidor de base de datos.


Un ataque exitoso en la base de datos que maneja un sitio web o una aplicación web, como un ataque de omisión de inicio de sesión de inyección SQL, puede potencialmente otorgarle a un ciberatacante una amplia gama de poderes, desde la modificación del contenido del sitio web ("desfiguración") hasta la captura de información sensible como credenciales de cuenta o datos empresariales internos. Una lista de comandos de inyección de SQL es esencialmente la misma que una lista de comandos de base de datos, incluidos los potencialmente catastróficos, como DROP TABLE.



¿Estás Preparado para un Ataque de Inyección SQL?


El primer paso para prevenir un ataque de inyección SQL es establecer qué aplicaciones (si las hay) son vulnerables. La mejor manera de hacerlo es lanzar tus propios ataques para ver si tienen éxito. Pero el SQL es un lenguaje complejo, por lo que no es una tarea trivial construir fragmentos de código que se puedan inyectar en una consulta para intentar comprometer una base de datos. La buena noticia es que esto no es necesario: todo lo que necesitas hacer es ejecutar una herramienta automatizada de ataque de inyección SQL para que haga el trabajo por ti.




Herramientas de Análisis para Inyección SQL


Existe un arsenal de herramientas de inyección SQL en el marcado, algunas gratuitas y otras comerciales. A continuación veremos una conocida con el nombre de Havij, es una herramienta desarrollada por profesionales de la seguridad Iraní, donde puedes dirigirla a un objetivo potencial y Havij sondea el sitio para determinar qué tipo de base de datos está en uso. Usando ese conocimiento, Havij luego construye consultas para probar las características de la base de datos. Havij requiere poca o ninguna experiencia en SQL del usuario final, potencialmente puede extraer campos, tablas y, a veces, incluso todos los datos completos de un destino.

Quizás lo más importante es que Havij tiene una función de corrección de errores que puede ayudar a eliminar algunas de las vulnerabilidades que encuentra. Havij está disponible en una versión gratuita, y también en una versión comercial más completa.


Otras herramientas de inyección de SQL automatizadas (de código abierto) incluyen SQLmap y jSQL. Tyrant SQL es una versión GUI de SQLmap.

Estas herramientas ponen un poderoso arsenal de ataques de inyección SQL, que de lo contrario se limitaría a expertos, en las manos de cualquier persona que desee atacar sus aplicaciones. Por esa razón, vale la pena probar sus aplicaciones con estas herramientas y corregir las vulnerabilidades que traen a la luz antes de que alguien malintencionado las encuentre.



Estrategia para Prevenir Ataques de Inyección SQL


Ahora veremos una estrategia de ciberseguridad que las empresas u organizaciones pueden implementar para evitar la inyección de SQL en sus sitios web. Si bien no existe una solución infalible en la seguridad de la red, se pueden colocar obstáculos o barreras que ayudarán a mitigar los intentos de inyección SQL con el objetivo de no ser víctimas de los ciberatacantes tal y como lo mencionamos a continuación:


  1. No confíes en nadie: Suponga que todos los datos enviados por los usuarios son riesgosos, así que usa la validación de entrada a través de una función como mysql_real_escape_string () de MySQL para asegurarse de que no se pasen caracteres peligrosos como 'a una consulta SQL en los datos. También debes desinfectar todo, filtrando los datos del usuario por contexto. Por ejemplo, las direcciones de correo electrónico deben filtrarse para permitir solo los caracteres permitidos en una dirección de correo electrónico, los números de teléfono deben filtrarse para permitir solo los dígitos permitidos en un número de teléfono, y así sucesivamente.

  2. No uses SQL dinámico, no construyas consultas con la entrada del usuario: Incluso las rutinas de desinfección de datos pueden ser defectuosas, así que usa declaraciones preparadas, consultas parametrizadas o procedimientos almacenados cuando sea posible. Pero no olvides que, si bien los procedimientos almacenados previenen algunos tipos de ataques de inyección SQL, no protegen a muchos otros, por lo que no confíes exclusivamente en su uso para su seguridad.

  3. Actualización y parches: Las vulnerabilidades en las aplicaciones y bases de datos que los ciberatacantes pueden explotar utilizando la inyección SQL se descubren regularmente, por lo que es vital aplicar parches y actualizaciones tan pronto como sea posible. Una solución de administración de parches podría valer la pena la inversión.

  4. Ethical Hacking Web Application e Infrastructure: En tus políticas de seguridad debes considerar un Ethical Hacking orientado a las aplicaciones web e infraestructura que soporta dichos servicios, con el objetivo de realizar una investigación acabada de todo el entorno que rodea al sitio web para buscar vulnerabilidades conocidas o desconocidas y sobre todo brechas de seguridad que podrían dar paso a un data breach (violación de datos) que afecte la imagen de la empresa o bien pérdidas financieras.

  5. Firewall: Considera un firewall de aplicación web (WAF), ya sea software (SaaS) o basado en appliance, para ayudar a filtrar los datos maliciosos. Las mejores WAF tendrán un conjunto completo de reglas predeterminadas y facilitarán la adición de nuevas cuando sea necesario. Pueden ser particularmente útil para proporcionar cierta protección de seguridad contra una nueva vulnerabilidad antes de que esté disponible un parche. Un ejemplo popular es el módulo gratuito de código abierto ModSecurity, que está disponible para servidores web Apache, Microsoft IIS y nginx. ModSecurity proporciona un conjunto de reglas sofisticadas y en constante evolución para filtrar solicitudes web potencialmente peligrosas. Las defensas de inyección de SQL pueden capturar la mayoría de los intentos de infiltrarse a través de los canales web, otras soluciones como F5, Fortinet, Imperva e inclusive Microsoft poseen características muy avanzadas y que están disponibles para todo tipo de empresas y sobre todo en modalidad de pago por uso como es el caso de Microsoft WAF, donde puedes habilitar estos servicios en la nube de Azure y pagar según el uso mensual que le des.

  6. Reduce la superficie de ataque: Elimina cualquier funcionalidad de base de datos que no necesites para evitar que un ciberatacante se aproveche de ella. Por ejemplo, el procedimiento almacenado extendido xp_cmdshell en MS SQL genera un shell de comandos de Windows y pasa una cadena para su ejecución, lo que podría ser muy útil para un hacker. El proceso de Windows generado por xp_cmdshell tiene los mismos privilegios de seguridad que la cuenta de servicio de SQL Server.

  7. Usa los privilegios apropiados: No te conectes a tu base de datos utilizando una cuenta con privilegios de nivel de administrador a menos que haya alguna razón convincente para hacerlo. Usa una cuenta de acceso limitado ya que es mucho más segura y puede limitar lo que un hacker podría hacer. Por ejemplo, el código detrás de una página de inicio de sesión debe consultar la base de datos utilizando una cuenta limitada solo a la tabla de credenciales relevante. De esta manera, una brecha en este canal no puede aprovecharse para comprometer toda la base de datos.

  8. Manten tus secretos en secreto: Si tu aplicación no es segura y lo sabes, debes actuar en consecuencia, para ello debes aseguriar tus contraseñas mediante el cifrado o hash de estas y otros datos confidenciales, incluidas las cadenas de conexión. Adicionalmente, debes incorporar un certificado válido SSL y otra medida mitigatoria sería incorporar un segundo o multifactor de authenticación como Microsoft Authenticator, donde puedes habilitar estos servicios en la nube de Azure y pagar por usuario y según el uso mensual que le des.

  9. No divulgues mas información de la que necesitas: Los ciberdelincuentes pueden aprender mucho sobre la arquitectura de la base de datos a partir de los mensajes de error, así que asegúrate de mostrar información mínima. Utiliza el modo CustomErrors de "RemoteOnly" (o equivalente) para mostrar mensajes de error detallados en la máquina local mientras se asegura de que un ciberdelincuente o atacante externo no reciba nada más que el hecho de que sus acciones hayan resultado en un error no manejado.

  10. Supervisa continuamente las sentencias de SQL desde aplicaciones conectadas a las bases de datos: Esto ayudará a identificar sentencias y vulnerabilidades de SQL fraudulentas. Las herramientas de monitoreo que utilizan el aprendizaje automático y/o el análisis del comportamiento pueden ser especialmente útiles.

  11. Compra un mejor software: Asegúrate que los desarrolladores de códigos sean responsables de verificar el código y de corregir fallas de seguridad en aplicaciones personalizadas antes de entregar el software. Una recomendación entregada por SANS sugiere que incorpores los términos de este contrato de muestra en su acuerdo con cualquier proveedor de software con el objetivo de mejorar la seguridad desde el origen del desarrollo de la aplicación web.



¿Qué Hacer si Somos Víctimas de un Data Breach?


Algunas consideraciones que se deben tener presente si la empresa u organización es víctima de un data breach (violación de datos) a corto y mediano plazo son las siguientes.


Actividades a CORTO plazo y COSTOS asociados:

  1. Investigación y análisis forenses para determinar la causa

  2. Respuesta y recuperación de incidentes

  3. Actualizaciones del sistema y mejorar la seguridad

  4. Comunicación y relaciones públicas

  5. Documentar e informar a las víctimas y reguladores

  6. Procedimiento de respuesta y entrenamiento especializado

  7. Pérdida de ingresos por servicios afectados

  8. Pérdida de productividad al usar recursos adicionales

  9. Costos de horas extra de los empleados

  10. Soporte de escalamiento hacia proveedores de servicios


Actividades a LARGO plazo y COSTOS asociados:

  1. Pérdida de la confianza de los clientes

  2. Impacto en el precio de las acciones

  3. Compensación de servicios gratuitos o descuento a las víctimas

  4. Servicios adicionales para proteger la identidad e imagen

  5. Pérdida de negocios basado en la fuga de clientes e ingresos

  6. Costos por programa de fidelización y captación de clientes


Fuente: Inntesec y eSecurityPlanet.

312 visualizaciones0 comentarios
bottom of page