SQLインジェクションが具体的にどのようなサイバー攻撃かわからない方もいるでしょう。この記事では初心者向けにSQLインジェクションを詳しく解説します。SQLインジェクション対策に興味がある方は、ぜひ参考にしてください。
1. SQLとは
SQLとは、リレーショナルデータベース(RDB)を操作するためのデータベース言語です。リレーショナルデータベースとは、表形式にデータを管理するデータベースといいます。
SQLを利用することで、データベースにデータを登録したり、検索したりすることが可能です。
SQLでデータベースに対して行える操作には、次のような項目があります。
• データの検索
• データの登録
• データの更新
• データの操作
• テーブルの定義
• テーブルの主キーの設定
• ビューの定義
• データベースにアクセスするユーザー権限の付与
2. SQLインジェクションとは
SQLインジェクションとは、セキュリティの脆弱性を狙った攻撃の1つです。システムが想定していない不当な「SQL」の文を作成し、「注入(インジェクション)」されることによって、データベースのデータを不正に操作される攻撃をいいます。
データベースはWebアプリケーションと連携し、ユーザーが入力した情報を元にデータベースを操作し、処理結果をユーザーに表示することが多いです。
攻撃者はWebアプリケーションに用意されたフォームに、SQLのコマンドを直接的に入力し、情報を送信します。Webアプリケーションに脆弱性があると、入力情報が適切に処理されず、コマンドとしてSQLに組み込まれてしまいます。そして、組み込まれたSQLがデータベースに認識されることで、データ漏えいや改ざんが起こります。
近年はWebアプリケーションでSQLインジェクションの脆弱性が多く発見されており、被害が報告されています。
2.1 SQLインジェクションによって想定される被害
SQLインジェクションによって想定される被害には、次のような項目があります。
• 販売サイトからのクレジットカード番号や個人情報の漏えい
• Webサイトにウイルスを埋め込む改ざん
• オンラインゲームや関連サイトにアカウント(※パスワードを含む)を盗むウイルスを仕込む改ざん
特にパスワードを盗むウイルスは、オンラインゲームのアカウントを狙うケースが多いです。オンラインゲームが狙われる理由は、ゲームのアカウントやアイテムなどを現金で売買できること(RMT)。攻撃者にとって、得たアカウントやパスワードを直接的に「お金」に変えやすいのです。
2.2 SQLインジェクションの実例
SQLインジェクションの実例には次の被害が報告されています。大手サービスでもSQLインジェクションによる大規模な情報漏えいが度々起きており、企業のセキュリティ部門にとっては決して軽視できる内容ではありません。
• 2011年に「PlayStation Network」から約7,700万人の個人情報が漏えい
• 2016年にUbuntuのフォーラムサイトから約200万人の個人情報が漏えい
• 2019年に釣りビジョンのWebサイトから入力情報6万3,656件が漏えい
2.3 クロスサイトスクリプティングとSQLインジェクションの違い
SQLインジェクションと並んで有名なアプリケーションの脆弱性に、クロスサイトスクリプティングがあります。クロスサイトスクリプティングとは、攻撃対象となる入力フォームを備えたWebサイトに対して、悪意のあるスクリプトを埋め込む攻撃です。
スクリプトが埋め込まれたWebページを閲覧したユーザーは、偽ページに遷移され個人情報を取られたり、コンピュータ上の情報(Cookieなど)を取られたりするなどの被害があります。
クロスサイトスクリプティングはユーザーを偽ページに遷移させるスクリプトを使うことが多いのに対し、SQLインジェクションは入力フォームなどを経由して直接SQLを実行してデータや個人情報を盗み出します。
2.4 DoS/DDoS攻撃とSQLインジェクションの違い
「DoS/DDoS攻撃」というアプリケーションの脆弱性を突く攻撃手法も有名です。DoS/DDoS攻撃とは、さまざまな手段で攻撃対象のリソース(ネットワーク帯域・CPUなど)が逼迫するような大量の通信を行い、サービスを停止させようとする攻撃です。DoS/DDoS攻撃は、SQLインジェクションやクロスサイトスクリプティングのように「データを盗むこと」を目的とするものではなく、サービスの停止やクラッシュそのものを目的としています。
3. SQLインジェクションの種類
SQLインジェクションにはいくつかの種類・攻撃手法があります。代表的な攻撃手法を紹介します。
3.1 インバンドSQLインジェクション
インバンドSQLインジェクションとは、Webアプリケーションへの入力情報の結果を収集して脆弱性を分析する手法です。脆弱性を見つけると、Webアプリケーションで脆弱性をつくSQLを実行し、個人情報や機密データを抜き取ります。
SQLインジェクションの攻撃の中で簡単にでき、一番被害も多く報告されています。
3.1.1 エラーベースSQLインジェクション
エラーベースSQLインジェクションとは、Webアプリケーションに入力した情報からデータベースへ意図的にエラーメッセージを返却させるインジェクションです。攻撃の目的はデータベースから返却されるエラーメッセージを元に、データベースの脆弱性やセキュリティの強度を確認することです。
返却されたエラーメッセージから次のSQLインジェクションの方針や内容を決めたりなど、攻撃するための準備をします。
3.1.2 UNIONインジェクション
SQLはセミコロンなどの区切り文字で区切り、複数のSQL文を連結させることが可能です。また、UNION句を使うと、他のテーブルを結合して1つの検索結果にまとめられます。
UNIONインジェクションとは、UNIONを利用して、本来実行されるSQLとは別のテーブルに対して実行する攻撃です。
ただし、UNIONインジェクションには次の条件を満たす必要があります。
• SELECT句に同じデータ型のカラムがある、または変換可能
• SELECT句のカラムが同数
3.2 ブラインドSQLインジェクション
ブラインドSQLインジェクションとは、攻撃者がWebアプリケーションの入力情報をWebサーバーに送信し、送信結果と動作を観察・分析して、攻撃方針を検討する方法です。
Webサーバーからの送信結果から直接データを盗むのではなく、不正なSQLと送信結果の違いを見て、データベースのテーブル情報などを分析します。直接個人情報などが攻撃者に送信されないため、ブラインドSQLインジェクションと呼ばれています。
直接データを盗まれている訳ではないですが、テーブル情報などを分析され、今後データ漏えいに繋がるため、リスクは他のSQLインジェクションと同じといえるでしょう。
4. SQLインジェクションのやり方・攻撃例
SQLインジェクションの危険性をご理解いただけたかと思いましたが、具体的にどのような攻撃をされるのか、イメージが湧かない方もいるでしょう。そこでログイン処理でのSQLインジェクションの攻撃例を紹介します。
次のようなSQLを実行して、ログインを許可すると判定するとします。
SELECT ID FROM users WHERE id='ユーザーのID' AND password='パスワード';
ログイン画面でユーザーのIDとパスワードを入力し、usersテーブルに入力情報の組合せで検索するのです。そして、該当するデータが見つかった場合、ログインを許可し、そのあとの処理を実行されます。
本来ならユーザーのIDとパスワードが正しい組み合わせでないと、該当データがないためログインは許可されません。
しかし、アプリケーションに脆弱性がある場合、ログイン画面のパスワード欄に「' OR 1=1」と入力すると、次のSQLが実行されるため、ユーザーのIDとパスワードが正しくなくてもログインできてしまいます。
SELECT ID FROM users WHERE id='ユーザーのID' AND password='' OR 1=1;
5. SQLインジェクションの対策方法
SQLの攻撃例を紹介しましたが、次に代表的なSQLインジェクションの対策方法を紹介します。
5.1 エスケープ処理
エスケープ処理とは、コンピュータ言語で特殊な意味を持つ文字や記号が入力された際に、無害な別の文字に書き換えることをいいます。SQLインジェクションの対策方法の中で、最も行われる方法です。
SQLインジェクションの対策としては、SQLで特別な意味を持つシングルクォーテーション(')やセミコロン(;)などの記号を普通の文字として認識できるようにプログラミングします。
このようにプログラミングすると、攻撃者が不正なSQLを作成するような入力をされても、不正なSQLを無効化することが可能です。
5.2 WAFの導入
WAF(Web Application Firewall)とはWebアプリケーションのアプリケーションレベルで防御するファイアウォールのことです。
一般的なファイアウォールはネットワークを監視するため、ネットワークレベルで不正なアクセスを遮断します。しかし、SQLインジェクションはネットワークレベルでは正常な通信のため、遮断することができません。
そこでWAFは攻撃者がWebアプリケーションにアクセスした後に「不正と認識される動作がないか」アプリケーションレベルで検知できます。そして、不正な動作を認識した場合は攻撃者の操作をブロック可能です。
5.3 脆弱性診断サービス
脆弱性診断サービスとは、攻撃者の視点でさまざまな疑似攻撃を行い、セキュリティの脆弱性を洗い出すサービスです。脆弱性診断サービスには無料・有料のサービスが数多くリリースされています。
無料・有料 | サービス名 | 概要 |
---|---|---|
無料 | OWASP ZAP | Webアプリケーションに潜在する脆弱性を無料で診断できるオープンソースのツールです。チェック方法が簡易スキャン・静的スキャン・動的スキャンの3種類から選べます。
▸ URL:OWASP |
Burp Suite | Webアプリケーションに潜在する脆弱性を診断できるツールです。エディションが「Enterprise Edition」、「Professional」、「Community Edition」の3種類あります。Webサーバーとブラウザ間のデータをやり取りをチェックするだけであれば、無料版の「Community Edition」で利用できます。
▸ URL:Burp Suite |
|
有料 | SCT SECURE ASVスキャン | クラウド型の自動脆弱性診断サービスです。他社のサービスに比べて価格が安く、契約期間中は何度でも診断可能です。
▸ URL:SCT SECURE ASVスキャン |
セキュリティ診断サービス | セキュリティ診断ツールに加え、セキュリティの専門家による手動診断を提供するサービスです。専門家による診断を受けられるため、徹底的に脆弱性をチェックすることが可能です。
▸ URL:セキュリティ診断サービス |
脆弱性診断サービスではSQLインジェクションも診断できるサービスもあります。そういったサービスを利用して、SQLインジェクションが発生する箇所を特定するのもおすすめです。
6. SQLインジェクション対策・情報漏洩対策関連の求人動向
弊社が運営する「プロエンジニア」には多数のセキュリティ関連の案件が掲載されています。近年では投資システムや商社向けのAWS基盤などインフラエンジニアのスキルにニーズがあり、特にAWSなどのクラウドコンピューティングサービス向けのセキュリティ対策に関するニーズが高い傾向があります。
セキュリティの脆弱性を狙った攻撃が多く、今後も対策が必要です。そのため、ニーズが見込まれることから、SQLインジェクションを含むセキュリティの案件には堅調なニーズがあるでしょう。
▸ プロエンジニアでSQL関連の求人案件を見る
7. まとめ
SQLインジェクションは、不当な「SQL」文を作成し、「注入(インジェクション)」されることによって、データベースのデータを不正に操作される攻撃をいいます。
セキュリティの脆弱性を狙う攻撃の中でもメジャーで、Webアプリケーションを構築する上で対策が必要な攻撃です。この記事を参考にSQLインジェクションの対策を検討して頂けたら幸いです。