ネットワーク・セキュリティー講座
第27回 「 Webアプリの脆弱性を狙う−SQLインジェクション 」
(2007/11/5)
データベースの破壊/情報漏洩に要注意
インターネット上で各種サービス(オンラインショップやブログなど)を提供/利用する企業の多くが、Webアプリケーションとデータベースを組み合わせて利用しています。SQLというデータベース言語を使い、Webアプリとデータベース間で各種データのやりとりをすることで、さまざまな機能を実現しています。たとえば、Webアプリ上でユーザーIDやパスワードが入力された時、入力内容をデータベースに照会してログインを許可する……などです。
こうしたサービスを提供/利用している企業にとって、セキュリティー上の大きな課題となっているのが「SQLインジェクション」と呼ばれる攻撃への対策です。これは、Webアプリのセキュリティーホールを突いて不当なSQL文を実行させる攻撃手法。この攻撃を受けると、データベースに記録した内容が破壊されたり、盗み出されるなどの被害を受ける場合があります。また、攻撃を受ける側の対応が甘いと、Webの構成自体を書き換えたり、プログラムの改竄など、「ありとあらゆる変更を許してしまう」可能性もあります。
SQLインジェクションへの対応策
SQLインジェクションを用いた攻撃は、2004年頃から急増しました。2005年には、大手の価格比較サイトや、人気のオンラインゲームサイトなどが続々と被害に遭い、大きく報道されました。セキュリティー対策専門企業の調査によれば、SQLインジェクションを利用した攻撃の件数は急増しており、2007年には2006年の約6倍の被害が報告されています。まさに喫緊の課題といえるでしょう。
SQLインジェクションへの対応策は、大きく分けて二つあります。入力値チェックと変換処理(サニタイジング)を適切に行うことです。まず、Webにアクセスしたユーザーが入力した内容をチェックし、SQLが各パラメータごとに設定している値に合致するかを調べます。さらにSQLの特殊文字として設定されている文字(たとえば、ダブルクォーテーションやスペースなど)を、“無害な”ものに変換します。さらに、特殊文字自体の入力ができないように入力フィールドを区切る、といった対策も有効です。
日常的な監視と素早い対応がカギ
残念ながら、上記の対応策は「一度やったから、後は大丈夫」という性格のものではありません。SQLインジェクションの攻撃手法が変化/進化し続けているからです。ますます増加するSQLインジェクション攻撃からWebを守るには、定期的な監視と、素早い対応が必要になってきます。
Webサーバーのログは、定期的にチェックしましょう。ログを調べることで攻撃の兆候がつかめます。たとえば、SQL関連のアクセス量が急増したら、SQLインジェクション攻撃を受けている可能性があります。さらにログを詳しくチェックし、データベース名/データテーブル名を直接指定するアクセスが増えていないか確認してみて下さい。もし双方のアクセス量が同じ時期に急増しているなら、SQLインジェクション攻撃を受けている可能性が非常に高くなっています。すぐに対応策をとりましょう。
進化するSQLインジェクションが持つ、新たな攻撃手法への対応策は次々に生み出されています。Webアプリ専用のファイアウォール製品、Webアプリのセキュリティーホールを埋めるツールやバッチ、Webアクセスを監視するサービス……などです。攻撃の兆候を見つけたら、最新情報をチェックして、もっとも効果的と思われる対応策を素早くとるようにしましょう。初期の攻撃を“水際”で食い止めることで、被害の拡大を防ぐことができるようになります。
