ITキーワード

SQL インジェクションに対する脆弱性をテストする方法|主なリスクや種類も解説

SQL インジェクションを受けた場合、情報漏えいやデータベースの改ざんなどのリスクがあります。サイト運営に大きな支障が出るばかりではなく、企業の信用を無くすこともあるため注意が必要です。

本記事では SQL インジェクションに対する脆弱性のテスト法と対策方法について解説します。

SQL インジェクションとは

SQL インジェクションとは、プログラムの脆弱性を狙ったサイバー攻撃の1つです。悪意ある者が故意に、プログラムに SQL を注入(インジェクション)してデータベースを攻撃します。

なお、SQL とはデータベースを操作するための言語で、データを挿入したり、検索したりする際に利用されます。

アプリケーションの脆弱性が攻撃され、個人情報などが盗まれたり、Web サイトを改ざんされたりする点が特徴です。EC サイトや会員サイトが攻撃の対象となりやすい傾向にあります。

SQL インジェクションの仕組み

SQL インジェクションは、不正な SQL 文が入力されるところからはじまります。入力される箇所は、主にログイン ID やパスワードの入力スペースです。

たとえば、すべてのユーザー情報が出力されるような SQL 文が入力されたとします。セキュリティに問題がなければ、ログイン ID やパスワードの入力スペースに、SQL 文が記入されても通常の文字列として扱われます。

しかしアプリケーションに脆弱性がある場合は、入力された文字列が SQL として読み取られてしまうのです。その結果、ユーザー情報が出力され、情報漏えいにつながります。

SQL インジェクションには複数のタイプがありますが、データベースに不正な SQL を注入する点では、どのタイプも同じような仕組みです。

SQL インジェクションのリスク

SQL インジェクションで情報漏えいやデータ改ざんなどが行われると、悪くすると Web サービスが閉鎖に追い込まれるリスクがあります。また企業の社会的信用を失う恐れもあるでしょう。

ここでは SQL インジェクションによる、情報漏えいやデータ改ざんなどのリスクについて解説します。

情報漏えい

SQL インジェクションにより、顧客情報が漏えいするリスクがあります。たとえば、氏名や住所、年齢などの個人情報やクレジットカード情報が盗まれると、顧客が大きな損害を被る可能性があるため注意が必要です。

個人情報を第三者に販売されたり、クレジットカード情報の不正利用につながったりします。

データの改ざん

SQL インジェクションにより、データが改ざんされたり、データ破壊されたりすることがあります。データ改ざんやデータ破壊を受けると、企業の業務に大きな支障をきたします。

またデータ復元のために、多大なコストが生じるでしょう。サイトにアクセスできないなどの問題が生じることもあります。

SQL インジェクションの種類

ここでは、SQL インジェクションの種類について、インバンド SQL インジェクションとブラインド SQL インジェクションの2つを説明します。

インバンド SQL インジェクション

インバンド SQL インジェクションでは、Web アプリケーションへの入力情報に対する応答から脆弱性の分析が行われます。攻撃者は分析により脆弱性を見つけると、そこを攻撃する SQL を実行し、個人情報や企業データを抜き取ります。

具体的な方法として、エラーベース SQL インジェクションと UNION インジェクションがあります。

エラーベース SQL インジェクション(脆弱性の分析)

エラーベース SQL インジェクションを実行する際は、まずは Web アプリケーションのログイン情報を入力します。さらに、パスワードや ID を入力する際に、意図的にエラーメッセージで応答させます。そこからエラーメッセージを分析して、脆弱性を探ります。脆弱性が判明すれば、そこを突いてサイバー攻撃が実行されます。

UNION インジェクション(情報漏えい)

UNION インジェクションとは、UNION 句と呼ばれる文字列を利用して実行する SQL インジェクションです。UNION 句を利用すると、もともと実行されるはずの SQL とは別のテーブルも読み出せます。不正なプログラムを実行させて、データベース内の情報を抜き取ります。

ブラインド SQL インジェクション

ブラインド SQL インジェクションとは、攻撃者が入力フォームではなく、Web サーバーに直接 Web アプリケーションの入力情報を送信して実行するサイバー攻撃です。入力情報を送信したあとに、送信に対する応答時間や True/False などの結果から、攻撃対象とする Web アプリケーションの構造を探ります。

Web サーバーの応答が直接、攻撃者に送信されないため、ブラインド SQL インジェクションと呼ばれます。

セキュリティテストの実施方法

ここでは、セキュリティテストの実施方法について、エラーメッセージから確認する方法を紹介します。さらに、カスタマイズされたエラー画面に対するテスト方法も解説します。ぜひ参考にしてください。

エラーメッセージで確認するテスト方法

エラーメッセージから脆弱性をチェックする場合は、まずはログインページや登録ページの入力スペースに「'」を入力します。「'」は SQL の命令文をクォーティングするための記号です。

もし SQL インジェクションに対する脆弱性がある場合は、SQL 命令文のクォーティングが崩れます。その結果データベースエラーが表示されます。

つまり、入力スペースに「'」を入力した場合に、データベースエラーが出た場合は、脆弱性が疑われることになります。

攻撃者の目線で言うと「このフォームから SQL インジェクションができそうだな」と判断するわけです。

エラーがカスタムエラー画面で出力される場合のテスト方法

エラーがカスタムエラー画面で出力される場合のテスト法について、解説します。なお、最近のエラー表示は、カスタマイズされたカスタムエラー画面である点に注意しましょう。

エラーはカスタムエラー画面で表示されることが多い点に注意

カスタムエラー画面は、ユーザーの利便性を考え、カスタマイズされたエラーの表示画面です。ユーザーが、エラーに対してとるべき行動がわかります。最近のログインや登録ページは、データベースに関するエラーが直接表示されることが少なくなっています。

そのため、前項のエラーメッセージで脆弱性を確認する方法が使えない場合も多いため注意しましょう。カスタマイズされた画面だと、SQL インジェクションに対する脆弱性に関するエラーなのかどうかがわかりづらいのです。

そこで次に紹介するカスタムエラー画面で脆弱性を見抜くテスト方法も、実行してみてください。

カスタムエラー画面で脆弱性を見抜くためのテスト方法の例

カスタムエラー画面の場合に、脆弱性を見抜くための方法について一例を紹介します。まずはユーザー ID に「test」と入力し、パスワードには次の SQL を打ち込みます。

' or 'A'='A

すると、正しいパスワードが入力されていなくても、ログインが成功する場合があります。テスト対象であるサイトの条件によっては、今回の手法で不正ログインされる可能性があります。たとえば、次のような SQL クエリにより認証情報を検索している場合は、注意してください。

SELECT * FROM usertable WHERE userid='(ユーザー ID)' AND password='(パスワード)';

(ユーザー ID)と(パスワード)部分に、SQL が挿入されると、不正にログインされてユーザーの個人情報が盗まれます。

WAF を利用したセキュリティ対策

ここでは、WAF の概要と利用するメリットを解説します。

WAF とは

WAF とは「Web Application Firewall」の略です。Web アプリケーションの脆弱性に対する攻撃から、Web アプリケーションとデータを守るためのセキュリティ対策です。WAF をアプリケーションの前面やネットワークに設置することで、個々のアプリケーションについての脆弱性のカバーが可能です。

OS の場合は、脆弱性をサポートするセキュリティパッチが定期的に配布されます。その一方でアプリケーションの場合は、Web サイトを自社で作ったりすることも多いため、脆弱性を認識していなかったり、修正されないままであることも多くあります。

つまり Web アプリケーションの脆弱性に対して、セキュリティ対策を講じるためには、自社でプログラムを修正する必要がありますが、稼働している Web アプリケーションの脆弱性を常時見つけ出し修正していくことはなかなか難しいことと思います。

WAF を導入すると、こうした Web アプリケーションへのセキュリティ対策が可能です。SQLインジェクションをはじめとしたさまざまな Web アプリケーションに対するサイバー攻撃から、アプリケーションを保護できます。

WAF を利用するメリット

WAF を利用するメリットは、脆弱性のあるアプリケーション内のプログラムでも、SQ Lインジェクションからデータベースを守れる点です。

アプリケーション内のプログラムの脆弱性を常時チェックして、修正できない場合に役立ちます。SQL インジェクション以外にも、DDoS 攻撃やゼロデイ攻撃などに対する防御も可能です。

まとめ

SQL インジェクションには、さまざまなタイプがありますが、プログラムの脆弱性を狙う点はどれも共通しています。SQL インジェクションに対するテストを実施すると、サイトやアプリケーション内の脆弱性が見つかることがあります。

脆弱性がある場合は、セキュリティ対策を講じる必要があります。しかし、自社でアプリケーションのセキュリティ対策が難しいこともあります。例えば社内にエンジニアが不在だったり、プログラム修正が難航していたりするケースです。

そのような場合、WAF を利用すると、アプリケーション以前に SQL インジェクションをはじめとしたサイバー攻撃を食い止められます。アプリケーションのセキュリティ対策を万全にしたい場合は、WAF の導入を検討してみてはいかがでしょうか。

弊社が提供する「Imperva App Protect」は信頼性の高いクラウド型 WAF および DDoS 対策サービスです。エンタープライズクラスの Web アプリケーションセキュリティとしてご利用いただけます。ご興味がある場合は、どうぞお問い合わせください。

セキュリティソリューションに関する資料請求・お問い合わせ

開催中のウェビナー