
Firewall de base de datos escrito en Go
Protege tus datos inspeccionando las consultas entrantes de tu servidor de aplicaciones y rechazando las anormales.
Por ejemplo, así es como un servidor web interactúa normalmente con el servidor de base de datos:

Al agregar DBShield delante del servidor de base de datos, podemos protegerlo contra consultas anormales. Para detectar consultas anormales, primero ejecutamos DBShield en modo de aprendizaje. El modo de aprendizaje permite que cualquier consulta pase, pero registra información sobre ella (patrón, nombre de usuario, hora y origen) en la base de datos interna.

Después de recopilar suficientes patrones, podemos ejecutar DBShield en modo de protección. El modo de protección puede distinguir patrones de consulta anormales, usuario y origen, y tomar medidas según las configuraciones.

Para la demostración, estamos usando sqlmap (herramienta automática de inyección SQL y toma de control de bases de datos) para explotar la vulnerabilidad de inyección SQL en user.php
En el primer escenario, sqlmap explota con éxito la inyección SQL cuando la aplicación web se conecta directamente a la base de datos (MySQL). En el segundo escenario, modificamos el user.php para que DBShield se interponga entre la aplicación web y la base de datos, lo que eliminará el intento de inyección y hará que sqlmap falle.

CLI
$ go run main.go
2016/10/15 16:25:31 [INFO] Config file: /etc/dbshield.yml
2016/10/15 16:25:31 [INFO] Internal DB: /tmp/model/10.0.0.21_postgres.db
2016/10/15 16:25:31 [INFO] Listening: 0.0.0.0:5000
2016/10/15 16:25:31 [INFO] Backend: postgres (10.0.0.21:5432)
2016/10/15 16:25:31 [INFO] Protect: true
2016/10/15 16:25:31 [INFO] Web interface on https://127.0.0.1:8070/
2016/10/15 16:25:33 [INFO] Connected from: 10.0.0.20:35910
2016/10/15 16:25:33 [INFO] Connected to: 10.0.0.21:5432
2016/10/15 16:25:33 [INFO] SSL connection
2016/10/15 16:25:34 [DEBUG] Client handshake done
2016/10/15 16:25:34 [DEBUG] Server handshake done
2016/10/15 16:25:34 [INFO] User: postgres
2016/10/15 16:25:34 [INFO] Database: test
2016/10/15 16:25:34 [INFO] Query: SELECT * FROM stocks where id=-1 or 1=1
2016/10/15 16:25:34 [WARN] Pattern not found: [53 55 51 52 55 52 50 53 55 51 53 49 115 116 111 99 107 115 53 55 51 53 50 105 100 54 49 52 53 53 55 51 55 57 53 55 52 48 52 53 55 51 55 57 54 49 53 55 51 55 57] (SELECT * FROM stocks where id=-1 or 1=1)
2016/10/15 16:25:34 [WARN] Dropping connection
Interfaz web

Descárgalo
$ go get -u github.com/nim4/DBShield
Luego puedes ver la ayuda usando el argumento "-h":
$ $GOPATH/bin/DBShield -h
DBShield 1.0.0-beta3
Usage of DBShield:
-a get list of abnormal queries
-c file
config file (default "/etc/dbshield.yml")
-h show help
-k show parsed config and exit
-l get list of captured patterns
-version
show version
y ejecútalo con tu configuración, como:
$ $GOPATH/bin/DBShield -c config.yml
consulta el archivo de configuración de ejemplo
⚠️ ADVERTENCIA: ¡No utilices los certificados predeterminados en entornos de producción!
(Ordenado por prioridad)
| Base de datos | Protección | SSL |
|---|
| DB2 | ![]() | ![]() |
| MariaDB | ![]() | ![]() |
| MySQL | ![]() | ![]() |
| Oracle | ![]() | ![]() |
| Postgres | ![]() | ![]() |