Seguridad en bases de datos SQL y NoSQL

Las bases de datos son herramientas fundamentales para almacenar y procesar información, pero también pueden ser vulnerables a diferentes tipos de ataques. En particular, dos de los ataques más comunes son la inyección SQL y los problemas de seguridad en la configuración y manejo de roles de acceso a los datos.

Al igual que todos los otros componentes informáticos son vulnerables a ataques, veremos dos de los ataques más comunes y la mejor manera de poder prevenirlos.


Amenaza
DB´s RELACIONALES
DB´s NoSQL
Inyección SQL
Por errores en programación se puede permitir la inyección SQL en una base de datos.
Como las bases de datos NoSQL tienen menos restricciones en relaciones y chequeos de consistencia, son más vulnerables a ataques de inyección, sin embargo, el atacante debe ser experto en programación y sintaxis del lenguaje atacado.
Seguridad
La seguridad de las bases de datos puede ser atacada por problemas en configuración y manejo de roles en los datos.
Las Bases de Datos NoSQL tienen deficiencias en seguridad.
·        
o   Inyección SQL: ocurre cuando un atacante aprovecha un error de programación para insertar código externo en un campo de texto, lo que puede permitirle acceder a información confidencial. Las bases de datos NoSQL pueden ser más vulnerables a este tipo de ataques, debido a su mayor flexibilidad y menor chequeo de consistencia. Sin embargo, para aprovechar estas vulnerabilidades, el atacante debe tener conocimientos avanzados de programación y sintaxis del lenguaje de la base de datos.
o   Seguridad: Los problemas de seguridad en la configuración y manejo de roles de acceso pueden permitir que un usuario obtenga privilegios que exceden sus necesidades, lo que puede poner en riesgo la información almacenada en la base de datos. En las bases de datos NoSQL, esto puede ser particularmente problemático, ya que las medidas de seguridad no siempre están habilitadas por defecto.

Ejemplo de ataques:
·       
o   Inyección SQL DB Relacionales:
En un campo de texto cualquiera que ingrese información, se agrega una sentencia SQL que permita ejecutar código externo.
Un hacker puede tener acceso a nombres de usuarios o contraseñas en la base de datos simplemente insertando " OR ""=" en el campo de texto de usuario o contraseña:

Usuario:
Contraseña:

El Código del servidor creará una  sentencia SQL válida que se verá así:

SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""

Lo que le da acceso a la información al hacker.

Inyección en bases de datos NoSQL

Si un atacante puede manipular los datos pasados al operador $ where, ese atacante podría incluir JavaScript arbitrario para ser evaluado como parte de la consulta de MongoDB. Un ejemplo de vulnerabilidad se expone en el siguiente código, si la entrada del usuario se pasa directamente a la consulta MongoDB sin verificar.

db.myCollection.find( { active: true, $where: function() { return obj.credits - obj.debits < $userInput; } } );;

Seguridad:

Bases de datos SQL:

Cuando a los usuarios (o aplicaciones) se les otorgan privilegios de base de datos que exceden los requisitos de su función de trabajo, estos privilegios se pueden usar para obtener acceso a información confidencial.
Esto puede ocurrir, cuando se le dan permisos a un usuario para realizar funciones y acciones por fuera de su nivel de manejo, lo que en manos inescrupulosas puede poner en riesgo la base de datos.
La solución a este problema es el control de acceso a nivel de consulta. El control de acceso a nivel de consulta restringe los privilegios a operaciones y datos requeridos mínimamente. La mayoría de las plataformas de seguridad de bases de datos nativas ofrecen algunas de estas capacidades (activadores, RLS, etc.), pero el diseño manual de estas herramientas las hace poco prácticas en todas las implementaciones menos en las más limitadas.

Bases de datos NoSQL:

En la mayoría de motores de búsqueda NoSQL las medidas de seguridad no están habilitadas por defecto, por ejemplo:

Debilidad de autenticación: de manera predeterminada, el DB se instala sin contraseña, los desarrolladores de MongoDB han puesto la responsabilidad de la seguridad en manos de los desarrolladores de aplicaciones y si se ejecuta la base de datos en un entorno confiable, cosa que no se puede garantizar en la generalidad.

Debilidades en la autorización: Cualquier usuario creado tiene acceso de solo lectura a la base de datos WHOLE. Eso significa esencialmente que una vez que tiene un usuario, ha proporcionado acceso por defecto a todo lo almacenado en la base de datos, práctica que no es segura.

Debilidad de autorización de administrador: Un usuario con acceso a la base de datos de administración tiene acceso de lectura / escritura a todo. No hay granularidad en el manejo de permisos, así que todos los usuarios administradores tienen acceso ilimitado a todo.
·        

Como se pueden prevenir los ataques a las bases de datos?


Ataques de inyección SQL:

Para la prevención de ataques SQL se requiere que el programador de la interfaz y de la aplicación, generen métodos que validen las sentencias SQL y los datos ingresados en los formularios

Seguridad de base de datos:

La seguridad se mejora al implementar medidas que permitan realizar un control estricto de las consultas realizadas por los usuarios, adicionalmente la asignación de permisos generalizados y la falta de control en la parametrización generan riesgos de acceso a la base de datos.

Herramientas especializadas para escanear vulnerabilidades a las bases de datos relacionales y no relaciones NoSQL. 


Herramienta
Descripción
Herramienta gratuita que permite escanear vulnerabilidades y fallas de configuración, incluye Oracle, Microsoft SQL Server, SAP Sybase, IBM DB2 y MySQL
Detecta errores de configuración, errores de acceso e identificación, parches no instalados o configuraciones que pueden afectar al sistema. Soporta bases de datos Microsoft SQL Server, Oracle, SAP Sybase, MySQL, IBM DB2, Hadoop.
Es una herramienta que permite identificar ataques de inyección SQL en la base de datos, soporta Oracle, MSSQL y MySQL
Detecta vulnerabilidades y audita la configuración de la base de datos  en búsqueda de debilidades  en el sistema y la configuración, funciona para bases de datos relacionales  y NoSQL.
es una herramienta de Python de código abierto diseñada para auditar y automatizar los ataques de inyección y explotar las deficiencias de configuración predeterminadas en las bases de datos NoSQL y las aplicaciones web que utilizan NoSQL para divulgar o clonar datos de la base de datos.

Herramientas de software para hacer ataques a bases de datos relacionales y no relaciones NoSQL, 


Herramienta
Descripción
Ejemplo
sqlmap es una herramienta de prueba de penetración de código abierto que automatiza el proceso de detección y explotación de fallas de inyección de SQL y se hace cargo de los servidores de bases de datos. Viene con un poderoso motor de detección, muchas características de nicho para hacer pruebas.
NoSQLMap es una herramienta de Python de código abierto diseñada para auditar y automatizar los ataques de inyección y explotar los puntos débiles de configuración predeterminados en las bases de datos NoSQL y las aplicaciones web que utilizan NoSQL para divulgar o clonar datos de la base de datos.
BBQSQL es un framework de inyección SQL escrito en Python. Es extremadamente útil al atacar vulnerabilidades de inyección de SQL difíciles. BBQSQL es también una herramienta semiautomática que permite personalización para aquellos hallazgos de inyección SQL difíciles de activar. La herramienta está diseñada para ser independiente de la base de datos y es extremadamente versátil. También tiene una interfaz de usuario intuitiva para facilitar la configuración de ataques. Python gevent también se implementa, lo que hace que BBQSQL sea extremadamente rápido.

Plan de auditoría propuesto para prevenir ataques informáticos

1.   Auditoría y Planeación:

1.1        Auditoría de acceso y autenticación
¿Quién accedió a qué sistemas, cuándo y cómo?
1.2        Auditoría de usuario y administrador
Qué actividades realizaron en la base de datos tanto usuarios como administradores
1.3        Monitoreo de actividad de seguridad
Identifique y marque cualquier acceso sospechoso, inusual o anormal a datos confidenciales o sistemas críticos
1.4        Auditoría de vulnerabilidad y amenazas
Detecta vulnerabilidades en la base de datos, luego monitorea a los usuarios que intentan explotarlas
1.5        Cambiar la auditoría
Establecer una política de base para la base de datos; configuración, esquema, usuarios, privilegios y estructura, luego rastrear desviaciones de esa línea base.

2.   Evaluación de vulnerabilidad y monitoreo de actividad
2.1        Escanear "De afuera hacia adentro" y "Adentro hacia afuera" todas las aplicaciones de base de datos para evaluar
2.1.1          Fuerza de la seguridad
2.1.2          Vulnerabilidades de la base de datos
2.1.3          Descubrimiento de aplicaciones e inventario
2.2        Solucionar agujeros de seguridad y configuraciones incorrectas
2.3        Desarrollar políticas basadas en los resultados del análisis para identificar:
2.3.1.1     Vulnerabilidad de la base
2.3.1.2     Funcionalidad de roles y responsabilidades para segregar a los usuarios
2.3.2          Factores de riesgo de cumplimiento
2.4        Auditoría
2.4.1          Informes completos
2.5        Monitoreo en tiempo real
2.5.1          Defender contra el mal uso, fraude y abuso de usuarios internos y externos
2.5.2          Monitorear toda la actividad del usuario y los cambios del sistema (DDL, DML, DCL)
2.5.3          Sintonice los parámetros de detección para capturar eventos mientras se omiten falso positivos.
Lista de chequeo
Estas son las buenas prácticas que se deben realizar periódicamente para garantizar la seguridad en una base de datos.
1.   Verificar permisos de objeto y sistema:
1.1.             Comprobar las vistas, los procedimientos almacenados, las tablas, etc. permisos. Verificar archivo permisos de carpeta, registro, etc. Los cambios en los permisos podrían significar un compromiso o configuración errónea.
2.   Busque nuevas instalaciones de bases de datos:
2.1.             Los productos de terceros pueden instalar servidores de bases de datos y los nuevos servidores instalados podrían instalarse con contraseñas en blanco o débiles, sin parches, mal configurados, etc. Detecte nuevas instalaciones de bases de datos y protéjalas o elimínelas.
3.   Buscar usuarios con privilegios de DBA:
3.1.             Esto ayuda a detectar intrusiones, elevación de privilegios, etc.
4.   Audite las configuraciones de la base de datos:
4.1.             Si las configuraciones de seguridad o la configuración se cambian, por ejemplo, mediante una actualización del sistema, un parche, etc., sus bases de datos podrían estar abiertas al ataque. Si cambian y no hubo una actualización del sistema, podría significar un compromiso.
5.   Verifique los objetos del sistema de la base de datos contra cambios:
5.1.             Si detecta un cambio en un objeto del sistema y no ha aplicado una corrección o actualización a su servidor de base de datos, podría significar que hay un rootkit presente.
6.   Realizar auditoría de base de datos y detección de intrusos
6.1.             Implementar monitoreo en tiempo real
6.2.             Integrar con la auditoría de base de datos nativa escaneando registros
6.3.             Integrar con herramientas de gestión de auditoría
7.   Implementar alerta en tiempo real (integración SIEM)
8.   Mantenga una biblioteca de información de implementación de mejores prácticas




Comentarios

Entradas populares de este blog

BodBot, una excelente app para el ejercicio

Como rastrear a alguien utilizando una imagen