SQLインジェクションとは? 攻撃の対策や被害事例をわかりやすく解説
Webアプリケーションを通じてデータベースを不正に操作する「SQLインジェクション」。今回はSQLインジェクションについて解説するとともに、攻撃に対してどのような対策を取れば良いか、また具体的にどのような被害を生じ得るかなどを紹介します。
- 目次
SQLインジェクションとは
「SQLインジェクション」は、Webアプリケーションの脆弱性を利用してデータベースを不正に操作する攻撃を指します。
「SQL」はデータベースを操作する言語の名称で、「インジェクション」は「注入」の意味です。具体的には検索ボックスや入力フォームなどに記入する文字列に不正な操作を行うSQL文を意図的に「注入」することにより、データベース内のデータの消去や改ざんといった操作やデータの盗用を図る攻撃です。
クロスサイトスクリプティングとの違い
SQLインジェクションと同様にWebアプリケーションの脆弱性を利用した攻撃に「クロスサイトスクリプティング」があります。
「クロスサイトスクリプティング」は直訳すると「サイト横断的(クロスサイト)なプログラム記述(スクリプティング)」になりますが、現在ではより広義に「動的に生成されるWebページにユーザーがアクセスしたときに不正なスクリプトが実行されてしまう脆弱性、またはその脆弱性を利用した攻撃」を指して使われます。
攻撃者が直接データベースを操作するSQLインジェクションとは異なり、クロスサイトスクリプティングではユーザーの端末上で不正なスクリプトが実行されることにより、クッキー漏出や個人情報流出などを図ります。
SQLインジェクションの5つの対策
では、SQLインジェクションに対してどのような対策が有効なのでしょうか。
- 入力値を制限する
-
検索ボックスやフォームなどに入力する文字列が英数字などに限定されている場合には、入力された文字列が仕様に沿ったものかをWebアプリケーション側で判定する「バリデーション処理」を実装するという対策が有効です。
規定外の文字が入力されていた場合には再入力を促す、などの処理を実装することで予期しないスクリプトの実行を防ぐことができます。
- 入力値をいったん変数に格納する
-
入力された文字列をそのままSQL文として利用せず、いったん変数に格納する方法も有効です。例えばJavaなどでは、あらかじめ「プリペアドステートメント」と呼ばれるSQL文を用意しておき、その一部を「プレースホルダ」と呼ばれる予約場所に設定しておきます。その後、プレースホルダに入力データを割り当てる(バインドする)ことによりスクリプトの実行を防ぐことができます。
- エスケープ処理、サニタイジングを行う
-
エスケープ処理、サニタイジングは、不正なSQL文の注入に使用される恐れのある危険な文字を無害な文字に置き換える処理を指します。例えばシングルクォート「'」をダブルクオート「''」に置き換えます。
単純に文字を置換する処理を実装しても良いですが、PHPでは「htmlentities()」、Railsでは「sanitize_sql_*」、Perlでは「DBI quote()」のようにエスケープ処理用の関数が用意されている言語もあります。
- 常に最新の環境を保つ
-
セキュリティの基本ですが、すべての動作環境を最新に保つことが重要です。
例えばサイトやブログの作成に使われるWordPressは、オープンソースのため無料で利用でき、またさまざまなプラグインが利用可能であることから人気ですが、過去にSQLに対する脆弱性のあるプラグインが報告されました。ツールやプラグインなどは常に最新の状態に保つよう留意しましょう。
- セキュリティソフトWAFを導入する
-
最も手軽で効果の高い方法は「WAF(Web Application Firewall)」を導入することです。WAFを導入すれば、従来のファイアウォールでは防ぐことが難しかった、Webアプリケーション脆弱性を狙った攻撃を防ぐことができます。
また、近年ではクラウド型のサービスや他のセキュリティ対策を併せて提供するサービスも登場しており、常に最新のセキュリティを維持できるというメリットもあります。
SQLインジェクション攻撃の対策なら
低コストで導入できるNTTPCのクラウド型WAFがおすすめ
NTTPCの「クラウドWAFセキュリティオペレーションサービス」は、クラウド型WAFに加え、ファイアウォールやIDS/IPSなどの防御機能までを実装したクラウド型のサービスです。
WAFの機能により、SQLインジェクションはもちろん、クロスサイトスクリプティング、OSコマンドインジェクション、ディレクトリ・トラバーサル、HTTPヘッダインジェクションなど、さまざまな脅威からWebアプリケーションを保護することができます。
さらに、高度で専門的なセキュリティオペレーション機能(SOC)を標準で提供。
また、オプションでDDoS対策サービスも付帯することが可能で、御社のWebサイトをさまざまな脅威から守ることができます。
SQLインジェクションの脅威
SQLインジェクションによるデータベースへの不正操作を受けると、どのような被害を受けるのでしょうか。攻撃される可能性の高いものをいくつか紹介します。
情報漏洩
不正な操作によりデータを読み出すことが可能です。データベースにクレジットカード情報などの個人情報やID/パスワードなどの情報が含まれる場合、それらを盗み見られたり、コピーを作成されたりして情報漏洩が発生する恐れがあります。特にこれらのデータを暗号化せずに登録している場合には不正利用によりかなりの損害を被る恐れがあります。
マルウェア拡散の踏み台として悪用
不正な操作によりデータを登録することも可能です。マルウェアそのものをデータとして登録するほか、悪質なサイトのURLを登録するなどの手段でマルウェアの拡散する踏み台として利用されてしまう危険性があります。
また、盗み出した管理者用のログイン情報を悪用してWebサイトそのものを書き換えられてしまうといった事態も考えられます。
データの改ざん
例えばECサイトなどで価格など販売に関わるデータを攻撃者の都合の良いように変更されてしまった場合、業務の混乱を招くだけでなく、ブランド価値や信用の低下などにつながる結果ともなりかねません。
企業の利益に直結するような情報を扱うWebアプリケーションでは、特にSQLインジェクションに注意する必要があるでしょう。
データベースの全消去
データの消去も可能です。本来SQL文はデータベースに含まれる膨大なデータから条件に合うもののみを抽出することを主目的としていますが、「*」(アスタリスク)を使用してすべてのデータを操作することもできます。
バックアップが適切に行われていない場合、すべてのデータを削除されてしまうと事業継続性の観点からも問題となるでしょう。
SQLインジェクションの被害事例
これまでに実際に発生したSQLインジェクションによる被害事例を紹介します。
アカウント流出
2006年4月、大手旅行サイトがSQLインジェクションを受け、ユーザー1000人以上のメールアドレスやパスワードが流出。比較的短時間で攻撃を感知したため、すぐに該当コンテンツを閉鎖。翌日にはWebアプリケーションを修正してサービスの再開を果たしました。
クレジットカード情報漏洩
2008年3月、国内の音響機器通販企業がSQLインジェクションを受け、3万件近いクレジットカード情報が流出。10万人以上に1人あたり1000円相当の補償を行ったほか、セキュリティ対策強化に6000万円以上の経費を費やすこととなりました。
Webページ改ざん
2008年5月、オンライン書店を運営する企業のSQLインジェクションを受け、Webページが改ざんされました。改ざん後のWebページにアクセスすると悪意あるサイトに誘導され、トロイの木馬型のウィルスに感染する危険性があったため、サイトを一定期間閉鎖せざるを得ない事態となりました。
まとめ
今回はSQLインジェクションについて解説するとともに、実際に攻撃を受けたときにどのような被害を受ける可能性があるかを具体的に紹介しました。
最後に紹介した被害事例の通り、SQLインジェクションにより業務の一時停止を余儀なくされるほか、金銭的な被害を受けたり、事業継続に問題を生じたりするようなことにもなりかねません。
今回の記事を参考に、自社のWebアプリケーションの安全性についていま一度確認してみてはいかがでしょうか。
※ICT Digital Columnに記載された情報は、リリース時点のものです。
商品・サービスの内容、お問い合わせ先などの情報は予告なしに変更されることがありますので、あらかじめご了承ください。