
Pare-feu de base de données écrit en Go
Protège vos données en inspectant les requêtes entrantes de votre serveur d'application et en rejetant celles qui sont anormales.
Par exemple, voici comment un serveur web interagit normalement avec le serveur de base de données :

En ajoutant DBShield devant le serveur de base de données, nous pouvons le protéger contre les requêtes anormales. Pour détecter les requêtes anormales, nous exécutons d'abord DBShield en mode apprentissage. Le mode apprentissage laisse passer toutes les requêtes mais enregistre des informations à leur sujet (motif, nom d'utilisateur, heure et source) dans la base de données interne.

Après avoir collecté suffisamment de motifs, nous pouvons exécuter DBShield en mode protection. Le mode protection peut distinguer un motif de requête anormal, l'utilisateur et la source, et prendre des mesures en fonction des configurations.

Pour la démo, nous utilisons sqlmap (outil automatisé d'injection SQL et de prise de contrôle de base de données) pour exploiter la vulnérabilité d'injection SQL dans user.php
Dans le premier scénario, sqlmap exploite avec succès l'injection SQL lorsque l'application web est connectée directement à la base de données (MySQL). Dans le second scénario, nous modifions user.php pour que DBShield s'intercale entre l'application web et la base de données, ce qui annulera la tentative d'injection et fera échouer sqlmap.

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
Interface Web

Récupérez-le
$ go get -u github.com/nim4/DBShield
Ensuite, vous pouvez afficher l'aide en utilisant l'argument -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
et exécutez-le avec votre configuration, par exemple :
$ $GOPATH/bin/DBShield -c config.yml
voir exemple de fichier de configuration
⚠️ ATTENTION : Ne PAS utiliser les certificats par défaut dans les environnements de production !
(Trié par priorité)
| Base de données | Protection | SSL |
|---|
| DB2 | ![]() | ![]() |
| MariaDB | ![]() | ![]() |
| MySQL | ![]() | ![]() |
| Oracle | ![]() | ![]() |
| Postgres | ![]() | ![]() |