
Go로 작성된 데이터베이스 방화벽
애플리케이션 서버에서 들어오는 쿼리를 검사하고 비정상적인 쿼리를 거부하여 데이터를 보호합니다.
예를 들어, 일반적으로 웹 서버가 데이터베이스 서버와 상호 작용하는 방식은 다음과 같습니다.

데이터베이스 서버 앞에 DBShield를 추가하면 비정상적인 쿼리로부터 보호할 수 있습니다. 비정상적인 쿼리를 탐지하기 위해 먼저 DBShield를 학습 모드로 실행합니다. 학습 모드는 모든 쿼리를 통과시키지만, 내부 데이터베이스에 해당 쿼리의 패턴, 사용자 이름, 시간 및 소스 정보를 기록합니다.

충분한 패턴을 수집한 후에는 DBShield를 보호 모드로 실행할 수 있습니다. 보호 모드는 비정상적인 쿼리 패턴, 사용자 및 소스를 구별하고 구성에 따라 조치를 취합니다.

데모를 위해 sqlmap(자동 SQL 인젝션 및 데이터베이스 장악 도구)을 사용하여 user.php의 SQL 인젝션 취약점을 악용합니다.
첫 번째 시나리오에서는 웹 애플리케이션이 데이터베이스(MySQL)에 직접 연결되었을 때 sqlmap이 성공적으로 SQL 인젝션을 악용합니다. 두 번째 시나리오에서는 user.php를 수정하여 DBShield가 웹 애플리케이션과 데이터베이스 사이에 위치하게 하여 인젝션 시도를 차단하고 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
웹 인터페이스

다운로드
$ go get -u github.com/nim4/DBShield
그런 다음 "-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
그리고 구성 파일과 함께 실행합니다.
$ $GOPATH/bin/DBShield -c config.yml
샘플 구성 파일을 참조하세요.
경고: 프로덕션 환경에서는 기본 인증서를 사용하지 마십시오!
(우선순위별 정렬)
| Database | Protect | SSL |
|---|
| DB2 | ![]() | ![]() |
| MariaDB | ![]() | ![]() |
| MySQL | ![]() | ![]() |
| Oracle | ![]() | ![]() |
| Postgres | ![]() | ![]() |