• 【初心者向け】SQLインジェクションとは?実例や対策方法3つを紹介

    公開日:2021年09月15日 最終更新日:2021年12月16日

    SQLインジェクションが具体的にどのようなサイバー攻撃かわからない方もいるでしょう。この記事では初心者向けにSQLインジェクションを詳しく解説します。SQLインジェクション対策に興味がある方は、ぜひ参考にしてください。

    1. SQLとは

    【初心者向け】SQLインジェクションとは?実例や対策方法3つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    SQLとは、リレーショナルデータベース(RDB)を操作するためのデータベース言語です。リレーショナルデータベースとは、表形式にデータを管理するデータベースといいます。

    SQLを利用することで、データベースにデータを登録したり、検索したりすることが可能です。

    SQLでデータベースに対して行える操作には、次のような項目があります。

    • データの検索

    • データの登録

    • データの更新

    • データの操作

    • テーブルの定義

    • テーブルの主キーの設定

    • ビューの定義

    • データベースにアクセスするユーザー権限の付与

    ▲ページトップへ戻る

    2. SQLインジェクションとは

    【初心者向け】SQLインジェクションとは?実例や対策方法3つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    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つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    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インジェクションとは?実例や対策方法3つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    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インジェクションとは?実例や対策方法3つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    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インジェクション対策・情報漏洩対策関連の求人動向

    【初心者向け】SQLインジェクションとは?実例や対策方法3つを紹介【フリーランスエンジニア案件情報 | プロエンジニア】

    弊社が運営する「プロエンジニア」には多数のセキュリティ関連の案件が掲載されています。近年では投資システムや商社向けのAWS基盤などインフラエンジニアのスキルにニーズがあり、特にAWSなどのクラウドコンピューティングサービス向けのセキュリティ対策に関するニーズが高い傾向があります。

    セキュリティの脆弱性を狙った攻撃が多く、今後も対策が必要です。そのため、ニーズが見込まれることから、SQLインジェクションを含むセキュリティの案件には堅調なニーズがあるでしょう。

    プロエンジニアでSQL関連の求人案件を見る

    ▲ページトップへ戻る

    7. まとめ

    SQLインジェクションは、不当な「SQL」文を作成し、「注入(インジェクション)」されることによって、データベースのデータを不正に操作される攻撃をいいます。

    セキュリティの脆弱性を狙う攻撃の中でもメジャーで、Webアプリケーションを構築する上で対策が必要な攻撃です。この記事を参考にSQLインジェクションの対策を検討して頂けたら幸いです。

    ▲ページトップへ戻る


    最新の求人情報をチェック!

    月額単価60万円〜70万円
    勤務地 東京都 港区
    月額単価70万円〜80万円
    勤務地 東京都 港区
    月額単価70万円〜
    勤務地 東京都 新宿区
    月額単価70万円〜
    勤務地 東京都 港区

    フリーランスの方でこのようなお悩みありませんか?

    • 定期的に案件を紹介してほしい
    • 完全フルリモートワークや、週1出勤など、働き方を選びたい
    • 単価交渉など営業周りが苦手なので、誰かに任せたい

    プロエンジニアにお任せください!

    プロエンジニアはほとんどEND直案件!高額単価案件ならお任せください。
    完全フルリモートや、週1出勤など、希望に合わせた働き方ができる案件を多数ご用意しています。
    単価や契約交渉などは弊社キャリアコンサルタントに全てお任せください。

    無料登録して、あなたの希望に合った案件をチェック!

    簡単60秒!無料登録はこちらから

    おすすめ記事

  • ピックアップ

    フリーランス

    NEW 【PHP/Laravel/他】PM/テックリード★自社プロダクト開発

    医院開業/経営コンサルティング事業を行なう企業にて、自社プロダクトの開発に携わっていただきます。 ...

    月額単価:60万円〜70万円

    フリーランス

    NEW 【PHP/AWS/Nuxt.js/他】フルスタックエンジニア★自社プロダクト開発

    医院開業/経営コンサルティング事業を行う企業にて、自社プロダクトの開発に携わっていただきます。 ...

    月額単価:70万円〜80万円

    フリーランス

    NEW 【Python/TypeScript】フルスタックエンジニア★SaasAIの新規プロダクト開発

    デジタルマーケティング事業を展開する企業にて、SaasAI 新規プロダクトの開発に伴いフルスタックエンジ...

    月額単価:70万円〜

    フリーランス

    NEW 【Linux】インフラエンジニア★Webサイトのインフラ構築・運用サポート

    デジタルマーケティング、デジタルコンテンツ制作事業を展開している企業にインフラエンジニアとしてご...

    月額単価:70万円〜

SCROLL TOP