
Db Herramienta de Evaluación de Bases de Datos
Herramienta de Evaluación de Bases de Datos DbDat
DbDat realiza numerosas comprobaciones en una base de datos para evaluar la seguridad. Las categorías de comprobaciones realizadas son configuración, privilegios, usuarios e información. Las comprobaciones se realizan ejecutando consultas o leyendo archivos de configuración de la base de datos. El objetivo de esta herramienta es destacar los problemas que requieren atención inmediata e identificar ajustes de configuración que deben revisarse para determinar su idoneidad. Esta herramienta no está diseñada para identificar vulnerabilidades de inyección SQL en una aplicación; ya existen buenas herramientas para eso (por ejemplo, https://github.com/sqlmapproject). Además, esta herramienta no intenta determinar qué CVE pueden afectar la versión de la base de datos objetivo (pero podría hacerlo en el futuro, quizás). Más bien, esta herramienta puede ayudarle a comprender mejor el impacto potencial de un ataque de inyección SQL exitoso debido a una configuración débil o controles de acceso inadecuados. La mayoría de las comprobaciones provienen de los Benchmarks de Seguridad CIS (https://cisecurity.org) para bases de datos, ¡gracias a CIS! Los documentos de referencia se pueden encontrar aquí: https://benchmarks.cisecurity.org/downloads/browse/index.cfm?category=benchmarks.servers.database
Recomiendo encarecidamente descargar el documento de referencia para su base de datos objetivo, ya que contiene información adicional sobre las comprobaciones realizadas.
Finalmente, DbDat está diseñado para ser un marco que permita la creación fácil de nuevos plugins y comprobaciones. Las contribuciones de la comunidad de seguridad, o incluso de administradores de bases de datos, son lo que harán de esta una gran herramienta. El conjunto actual de comprobaciones no está completo, ciertamente se necesita hacer más. ¡Por favor, contribuya!
Desarrollando Nuevas Comprobaciones de Base de Datos
¡Las pull requests son muy bienvenidas! Las comprobaciones están organizadas por tipo de base de datos (por ejemplo, MySQL, Oracle, MS SQL, etc.) en la carpeta de plugins. Cada comprobación es un archivo Python que debe comenzar con check_ al inicio del nombre del archivo. Cada archivo contiene una clase con un método do_check. Este método es la lógica principal de las comprobaciones. La forma rápida de empezar es copiar un archivo de comprobación existente y modificarlo. Sin embargo, consulte la sección Desarrollo de Plugins a continuación para más detalles.
etc/dbdat.conf para cada base de datos que desee evaluar.python dbdat.py -p <nombre_del_perfil>cd al directorio de informes y ejecute python -m SimpleHTTPServer 9000 (o elija un número de puerto de su preferencia). Luego abra su navegador y navegue a http://localhost:9000.Para ver una lista de argumentos de línea de comandos adicionales, ejecute python dbdat.py -h
El informe organiza los resultados por niveles, que son ROJO, AMARILLO, NARANJA, GRIS y VERDE.
Hasta ahora, DbDat ha sido probado en Debian Linux, CentOS Linux y Windows 7 con Python 2.7
Ejecute: pip install MySQL-python
O en Debian, ejecute: apt-get install python-mysqldb
Ejecute: pip install psycopg2
Ejecute: pip install cx_Oracle
Nota: necesitará instalar las bibliotecas cliente de Oracle para que esto funcione.
Ejecute: pip install pymssql
Ejecute: pip install ibm_db o easy_install ibm_db
Nota: deberá asegurarse de que el usuario que ejecuta DbDat tenga acceso para ejecutar comandos CLP de DB2 (por ejemplo, db2 y db2level).
Ejecute: pip install pymongo
Para soportar archivos de configuración YAML de MongoDB, ejecute: pip install pyyaml
Ejecute: pip install couchdb
Dentro de la carpeta de plugins hay una carpeta para cada tipo de base de datos, y cada carpeta contiene archivos de comprobación. Esta es una estructura muy simple, pero también puede explorar la carpeta de plugins para familiarizarse https://github.com/foospidy/DbDat/tree/master/plugins
Las carpetas de base de datos contendrán:
__init.py - El archivo init tiene una declaración de importación para cada archivo de comprobación.check_ - Estos son los archivos que realizan las comprobaciones de la base de datos. El archivo y la clase definida dentro del archivo deben tener el mismo nombre.helper.py - Un archivo que contiene funciones comunes. Los archivos de comprobación pueden importar helper.py para aprovechar funciones comunes.Al agregar un nuevo archivo de comprobación, se debe agregar una declaración de importación al archivo __init__.py del directorio de plugins correspondiente. El patrón de código para las comprobaciones es bastante consistente. Revise los archivos existentes para tener una idea de cómo están estructurados. Observe la diferencia entre las comprobaciones de tipo sql y configuration_file.
Hay diferentes "tipos" de comprobaciones que se pueden definir. El tipo de comprobación está determinado por la variable TYPE y puede ser sql, configuration_file, nosql o clp. A continuación se presentan ejemplos de implementaciones para los diferentes escenarios de tipo de comprobación.
Para comprobaciones sql, la firma del método do_check debe ser: do_check(self, *results)
https://github.com/foospidy/DbDat/blob/master/plugins/mysql/check_user_empty_password.py
En este ejemplo, necesitamos la variable appuser de la clase padre que llama. El appuser debe agregarse dinámicamente a la sentencia sql, por lo que la variable self.SQL se establece en el método __init__. Además, dado que este método do_check necesita ejecutar el sql, también necesitamos el cursor DB (conexión), esto se establece en el método __init__ con self.dbcurs = parent.dbcurs.
https://github.com/foospidy/DbDat/blob/master/plugins/mysql/check_privilege_user_grants.py
Para comprobaciones configuration_file, la firma del método do_check debe ser: do_check(self, configuration_file)
https://github.com/foospidy/DbDat/blob/master/plugins/mysql/check_configuration_general_log.py
En este ejemplo, el archivo de configuración de PostgreSQL no tiene secciones (por ejemplo, [nombre_seccion]), por lo que el módulo helper en la carpeta de PostgreSQL contiene una función que maneja esto. Consulte la función get_config_value definida en helper.py.