Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (3,583)  
CrystalDiskInfo  (1,811)  
Tera Term  (1,787)  
HandBrake Japanese Language Version  (1,743)  
CrystalDiskMark  (980)  
FFFTP  (765)  
ffdshow  (719)  
mixfont-mplus-ipa  (615)  
MergeDoc  (571)  
10  TortoiseSVN  (555)  
11  Amateras  (437)  
12  BathyScaphe  (396)  
13  FreeMind  (372)  
14  Cabos  (327)  
15  ギコナビ  (316)  
More >>

GreenSQLでMySQLデータベースをSQLインジェクション攻撃から守る

2008年09月03日 12:49 Ben Martin 1 2 3
 SQLインジェクションとは、Webサイト経由で不正なSQLコマンドをデータベースに対して実行するという攻撃手法だ。こうした攻撃を防ぐには、ユーザがWebフォームに入力し、HTTP POSTやCGIパラメータなどによって送られてくるすべてのデータについて、想定外の情報が含まれないことをチェックする必要がある。GreenSQLはSQL用のファイアウォールである。WebサイトとMySQLデータベースの間に置かれ、実行すべきSQL文とそうでないSQL文を判別する。考え方としてはSQLインジェクション対策にうってつけのものだが、実行してみるといくつか抜け穴が見つかった。

 GreenSQLは、MySQLデータベースのプロキシとして利用するように作られている。MySQLデータベースとWebサイトを直接つながずに、GreenSQLを間に置くわけだ。GreenSQLは、正当なSQLをMySQLデータベースに転送し、その結果を返す。ホワイトリストになく、かつ危険または疑わしい命令を含むSQLを検出した場合は、そのSQLをブロックし、MySQLデータベースとのやりとりを行わずに空の結果を返す。GreenSQLによるSQLインジェクション攻撃の阻止については、デモ用のページがWebに用意されている。

 GreenSQLは、Fedora、openSUSE、Ubuntuのいずれのリポジトリにも入っていないが、Fedora 8とopenSUSE 10.3には、ワンクリックでインストール可能なパッケージがある。また、GreenSQLのダウンロードページには、Fedora 7、openSUSE 10.2、FreeBSD、Feisty Fawn以前のUbuntuに対応したパッケージが用意されている。ここでは、greensql-fwのバージョン0.8.4のインストールを64ビット版Fedora 9マシンで行う。

 autotoolsはインストールに使われておらず、設定ファイル、システムユーザ、MySQL、ログファイル、「/etc/init.d」ファイルなどの設定は自力で行うことになるが、その手順は「install.txt」にしっかりと記されている。また、こうした設定の大半は、「scripts」ディレクトリにあるいくつかのシェルスクリプトの実行で済ませることができる。コンパイルは、トップディレクトリ内でmakeを実行するだけでよい(下記のコマンドを参照)。私のFedora 9では、コンパイルを開始してすぐに次のエラーが出たが、これはlibevent-develがインストールされていないためだった。

$ tar xzf /.../greensql-fw-0.8.4.tar.gz
$ cd greensql-fw-0.8.4/
$ make
...
connection.hpp:29: error: field 'proxy_event' has incomplete type
connection.hpp:30: error: field 'client_event' has incomplete type

 libevent-develをインストールしたあと、イベントコードをコンパイルするために、次のように「/usr/include/event.h」を編集して「sys/types.h」をインクルードする必要があることに気付いた。

vi /usr/include/event.h
...
#include <sys/time.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdarg.h>

 この段階でも、ヘッダファイル「string.h」をインクルードしていなかったため、strcasecmpのような文字列関数を呼び出すいくつかのファイルで「make -k」の実行に失敗した。利用するgccのバージョンによっては、こうした問題がGreenSQLのコンパイル時に起こらない場合もある。

gccの問題
 本文に書いたようなビルドの問題が生じるのは、「string.h」内の特定の関数を利用するコードのコンパイル時にgccのチェックがかなり厳しくなっているためだ。以前はこのヘッダファイルをインクルードしなくてもstrlenが使えたが、今はこれをインクルードしないとgccによるコンパイルができない。

 また、64ビット版のライブラリパスの変更は、そうした変更を自動的に処理するautotoolsのようなシステムによる検出方法が使われていないこと、Makefileが32ビット版のディストリビューション向けに作られていることに起因する。どちらもあまり注目されていないが、GreenSQLを64ビット版Fedora 9マシンにインストールしようとする場合には面倒な事態を引き起こす。
$ cd src
$ vi mysql/mysql_con.cpp
...
// License: GPL v2 (http://www.gnu.org/licenses/gpl.html)
//

#include <string.h>
#include "mysql_con.hpp"
...

$ vi config.hpp
...
#ifndef GREEN_SQL_CONFIG_HPP
#define GREEN_SQL_CONFIG_HPP

#include <string.h>
...

$ vi ../src/parser/expression.hpp
...
#ifndef _SQL_EXPRESSION_HPP_
#define _SQL_EXPRESSION_HPP_

#include <string.h>
...

 GreenSQLのビルドを64ビット版のディストリビューションで行う場合は、次のように、ビルド時に「lib」ディレクトリだけでなく「lib64」ディレクトリもチェックするようにMakefileの変更も行う必要がある。

$ vi src/Makefile
...
LIBS:=-L/usr/local/lib -L/usr/local/lib/mysql -L/usr/lib64/mysql -lmysqlclient -levent -lpcre

greensql-fw: $(OBJS)
...
$ make
最終更新:2008年11月03日 17:07
SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.