SQLインジェクションによる被害と対策について

SQLとは、「Structured Query Language」の略称で、データベースにアクセスし、検索や登録、更新、削除などを行う際に使用される言語です。
SQLインジェクションはWebサイトの入力フォームに脆弱性が存在すると、SQL文を入力してデータベースを直接操作することを可能にします。
そして「SQLインジェクション」とは、
主に企業が保有するデータベース上にある情報を窃取する目的で行われる攻撃で、システムの脆弱性が突かれます。
本記事では、SQLインジェクションに関係する被害と対策方法についてご紹介します。

SQLインジェクションで想定される被害

SQLインジェクションはデータベースに直接アクセスする攻撃です。したがって次のような被害が想定されます。

・データベースに記録された情報の窃取
・データベースの改ざん、消去

情報漏洩に遭った場合、損害賠償等の対象になりえるため、経済的な損失はもちろんのこと、社会的信用を低下させる結果を招き、以後の事業に悪影響を及ぼすという重大な損害に拡大する可能性があります。
また、データベースが改ざんされたり、消去されたりすると、事業の継続に必要な情報が不正確もしくは存在しないという事態を招くので、事業の存続そのものが危ぶまれると言っても過言ではないでしょう。

SQLインジェクションへの対策

主に以下の4つの対策が有効とされています。

サーバでの対策

SQLインジェクションが突いてくる脆弱性は、ログイン機能などのWebアプリケーションに存在します。具体的には、入力フォームなどにSQL文を仕込まれた場合に、それを正しい命令と認識してしまうことにあります。
それを防ぐためには、フォームに入力された文字列がSQL文として認識されないよう「エスケープ処理」を行う必要があります。
エスケープ処理とは、SQL文で特別な意味を持つ記号や文字列を、別のものに置き換えたり、削除したりする処理です。
こうすることで、入力されたSQL文は文法として間違ったものになるので、実行不可能となります。

ネットワークでの対策

SQLインジェクションがWebアプリケーションの脆弱性を突いてくることから、OSやブラウザだけでなく、Webアプリケーション自体に存在する脆弱性についても迅速なアップデートが必要となります。
一般にOSやブラウザの場合は、ソフトウェアベンダーがその更新プログラムを適用することで、OSやブラウザの本来の動作が損なわれないかどうか検証した上で配布されます。
ところがWebアプリケーションの場合は、アップデートすることにより、企業内で使用している他のアプリケーションに影響がないかどうかを検証する必要があります。
この検証には当然それなりの時間がかかってしまうため、その間にも標的になってしまう恐れがあります。
そこで、最近注目されているのが「Webアプリケーション・ファイアウォール(WAF)」です。WAFは様々なWebアプリケーションの脆弱性を突いた攻撃パターンを記憶していて、それに一致する攻撃を無効化する働きを持っています。

Webアプリケーション開発段階での対策

Webアプリケーションは企業の目的に合わせて開発されることが多いため、開発の際にSQLインジェクションなどの攻撃を受けないよう脆弱性に対する徹底した対策を講じておくことが必須です。
SQLインジェクションはデータベースのみを狙った限定的な攻撃ではありますが、データベースに保存されている情報は多くの場合、顧客の氏名、メールアドレス、携帯電話番号などが保管されています。

また、ECサイトなどであれば、クレジットカード情報などが含まれています。
Webアプリケーションにおいてデータベースは切り離せない存在なので、その脆弱性には最新の注意を払う必要があります。
ただ、先に述べたように、Webアプリケーションは業務システムの一部を構成していることが多く、そのアップデートによって業務システム自体が不具合を起こす可能性も考えられます。
不具合が発生するかどうか、発生するのであればどうやって回避するのかといった対策には時間がかかります。今後はWAFの導入を積極的に検討し、Webアプリケーションに内在する脆弱性を突かれないように対策を施すことが急務です。