はじめに
今回のテーマは、SQLインジェクション攻撃です。代表的な攻撃であり、対策しないと多大な被害が出ることから今回のテーマとしました。
目次
- SQLインジェクションについて
- SQLインジェクションの攻撃例
- 対策の方法
- まとめ
SQLインジェクションについて
SQLインジェクションとはSQL文をインジェクションする攻撃です。
SQL文とはデータベースに命令を行う文です。。データベースに命令を行うにはSQL文を使用し、データの編集や参照を行います。そのSQL文を本来データベースを参照等できない第三者が不正にSQL文を使用しデータベース上の情報を操作することができ情報漏洩等行われます。これは脆弱性がある場合なので対策をすることで防ぐことは可能です。
SQLインジェクションの攻撃例
SQLインジェクションの攻撃を実際に行いました。くれぐれもDVWAサイト内だけで攻撃してください。法で罰せられる可能性があります。
DVWAという脆弱性があるサイトでは、SELECT WHERE user_id = xxx というクエリを流すシステムです。xxxが実際にユーザーが入力できる部分です。
xxxに下記コードを入力します。
1' or 'a'='a
入力すると下図のように出力されました。
この文字列の意味について解説します。入力した文字列の意味は1かaだった場合aである。と必ず正しい答えになるように用意された式になります。「'」このシングルクォーテーションを用いることでSQL構文であるとデータベースに認識させることができます。もしユーザーを識別する番号を使用し、識別したユーザーの登録情報が表示されるシステムがあったとします。
SQLインジェクションの脆弱性があった場合、ユーザーの識別する番号に1' or 'a'='a
を入力すると、データベースでは正しい答えと判断し、ユーザーの登録情報をすべて表示してしまいます。
またログイン画面で脆弱性があった場合、先ほどのコマンドをパスワード欄に入力すると、パスワードが正しいとデータベースが判断し、ユーザーIDが分かればログイン可能になってしまう。情報漏洩や二次被害にあう可能性が高く、多大な損害が発生する攻撃です。
対策の仕方
損害が多い攻撃ですが、どうやって対策ができるかまとめました。
1. エスケープ処理
エスケープ処理とは、エスケープ文字を用いてSQL命令文とデータベースに判断させないようにする手法です。構文の中で、ユーザーが入力する部分をエスケープ文字にします。
例えばSELECT WHERE user_id = 1' or 'a'='aと入力された場合は「'」の影響でa=aのため真であると判断してしまいます。なのでエスケープ処理を実施し「'」を「”」に書き換えることでSQL構文ではないとデータベースに判断させることができます。プログラム言語によってエスケープ文字が定められております。
2. プレースホルダ
プレースホルダとは、SQLインジェクションの対策の一つで、ユーザーの入力を判断する場所をプレースホルダに置き換えることでユーザーの入力をSQLの命令と判断しないようにする方法です。
先ほどのSELECT WHERE user_id = xxxの文にユーザーが入力できるxxxを?などの記号を使用します。
?に値を入力させるバインド変数を使用することにより1' or 'a'='aと入力されても、エスケープ処理によって「'」では無くなるため1” or ”a”=”aとなり命令文にはならずSQLインジェクション攻撃を回避できます。
3. WAF
根本的な脆弱性が修正できない場合(サービス停止ができないためプログラム修正できない等)や、脆弱性がもしあった場合の防御手段としてWAFの導入が対策となります。WAFはウェブアプリケーションファイアウォールの略で、ウェブサイトやアプリケーションを脅威から守るサービスです。
シグネチャと呼ばれるルールを使用し、攻撃と思わしき通信を遮断するブラックリスト型と、登録したIP以外はすべて遮断するホワイトリスト型があります。根本的な脆弱性の修正は必要だけど、日々攻撃が進化しているので多重防御という観点ではWAFの導入は必須といっても過言ではありません。
まとめ
SQLインジェクションは被害件数が多い攻撃です。対策を講じるのは必須となりますので、プログラムの脆弱性修正とWAFの導入で多重防御をしましょう。また、アプリケーションの脆弱性診断を行うことで、SQLインジェクションやXSSなど様々な脆弱性を発見することができます。セキュリティ対策は万全にすべきですが、コストとの兼ね合いもあるのでセキュリティの専門家に相談することをお勧めします。
スカイアーチネットワークスでは、WAFの導入、運用や脆弱性診断などのセキュリティサービスを取り扱っています。セキュリティについて分からないことがあれば、お気軽にご相談ください。
投稿者プロフィール
最新の投稿
- セキュリティ2024年6月17日脆弱性診断とは?
- セキュリティ2024年5月27日Burp Suiteで脆弱性診断してみた~診断編~
- セキュリティ2024年5月24日Burp Suiteで脆弱性診断してみた~環境準備編~
- セキュリティ2023年12月22日SQLインジェクション攻撃とは