SQLインジェクションとは | 被害事例や具体的な対策方法を徹底解説
今回は、インターネットのWEBアプリケーションで典型的なサイバー攻撃の1つとされる「SQLインジェクション」とは何か、その具体的な仕組みや対策方法を詳しくまとめました。
情報セキュリティ対策の基礎知識として、ぜひとも押さえておいてください。
- 目次
- 1. そもそもSQLとは何か
- 2. SQLインジェクションとは?
- 3. SQL文の構造
- 4. SQLインジェクションの仕組み
- 5. SQLインジェクションの被害事例
- 6. SQLインジェクションによる影響
- 6. SQLインジェクションの対策
- 6. SQLインジェクションの対策を万全に
そもそもSQLとは何か
SQL(Structured Query Language)とは、「シーケル」「シークェル」と呼ばれるもので、リレーショナルデータベースにおいて利用される言語のことを意味しています。
データ作成・データ読み込み・データ削除・データ更新といった4種類の作業(CRUD)を実行することができ、ISO(国際標準化機構)によって規格化されているので、ほとんどのインターネット上のデータベースで汎用的に利用される言語となっています。
SQLインジェクションとは?
問題となるSQLインジェクションとは、先ほどお伝えしたSQLに対して、不正なプログラムを注入するサイバー攻撃の総称です。
Webサイトやアプリケーションの脆弱性を狙って、検索する際の入力フィールドなどに不正なSQLコードを挿入(入力)する方法により攻撃してきます。
不正入力により誤ったSQL文が生成され、データベースに送信されることで攻撃者によりデータベースを操作されてしまいます。
これにより、データベース内の情報の読み取りや改ざんといった被害が生じてきます。
1990年代後半から存在しており、古典的な攻撃方法であると言われていますが、今なお多くの被害事例があるため、適切な対策が必要です。
SQL文の構造
ここで、SQL文の構造について、お話しします。
例えば、「ユーザー情報が格納されているデータベースから入力された顧客情報に合致するデータを抽出する」場合、SQL文は下記の形式になります。
- SELECT * FROM users WHERE name = ‘クラウド太郎’
この場合、入力値が「クラウド太郎」のため、usersテーブルからnameが「クラウド太郎」である情報が抽出されます。
〈 各用語の意味 〉
- ● SELECT:データを抽出する
- ● *:テーブル内にある項目のすべて
- ● FROM users:usersの名称であるテーブルからデータを選択
- ● WHERE:抽出条件の指定
SQLインジェクションの仕組み
上記の入力値「‘クラウド太郎’」の部分に、「’ or ‘1’=‘1」がインジェクション(注入)されると、以下のSQL文が生成されます。
- SELECT * FROM users WHERE name = ‘クラウド太郎’ or ‘1’=‘1
この「‘1’=‘1」の入力値が注入されていることで、データベース内に格納されているすべてのデータが抽出されることになります。
これにより、情報漏えいの被害が発生しているのです。
SQLインジェクションの被害事例
ここでは、実際にSQLインジェクションによって被害を受けてしまった大規模な事例をいくつか紹介します。
年月日 | 攻撃対象 | 被害内容 |
2018年6月 | メールマガジン | メールマガジン会員の情報の一部合計約27万件が流出 |
2019年1月 | Webサイト | データベースに保管していた個人情報63,656件が流出 |
2020年4月 | ECサイト | 最大で12万件の顧客情報が流出 |
2022年6月 | Webサイト | 最大10万1,988件のメールアドレスと暗号化されたパスワードが流出 |
SQLインジェクションの被害に遭ってしまうと、Webサイトの削除やサービス停止に追い込まれる、情報漏えいによる損害賠償のリスクを負う可能性もあります。
企業の経営活動に甚大な支障をきたしてしまうことになりますので、常日頃からセキュリティレベルを管理していくことが非常に重要です。
SQLインジェクションによる影響
前述の被害事例の通り、SQLインジェクションによるサイバー攻撃を受けた場合、以下のような影響が想定されます。
- ● 個人情報・機密情報の漏えい
- ● ウェブサイトの改ざん
個人情報・機密情報の漏えい
SQLインジェクションによるサイバー攻撃を受けると、Webサイトを利用している全てのユーザーの個人情報が抽出(漏えい)されるリスクがあります。
これは、登録されている会員情報のすべてが対象となるため、決済のためのクレジットカード情報なども漏えいする可能性があるので、非常に危険です。
また、個人情報のみならず、Webサイトの運用に関わる運用ノウハウなどの機密情報も漏洩する可能性が潜んでいます。
取引先に関する情報などの企業秘密を知られてしまう可能性もあるため、厳格に管理する必要があります。
Webサイトの改ざん
WebサイトがSQLインジェクションを受けてしまうと、データベースの内容が書き換えられてしまうため、改ざんされた偽のサイトが表示されます。
これにより、サイトを訪問したユーザーに虚偽情報を伝えられてしまったり、偽サイトに誘導されるなど、大きな被害が想定されます。
SQLインジェクションの対策
SQLインジェクションの具体的な情報セキュリティ対策の方法としては、以下が挙げられます。
セキュリティサービスを導入する
まず、SQLインジェクションによるサイバー攻撃を予防することのできるセキュリティサービスやソフトウェアの導入を検討しましょう。
導入すれば、SQLインジェクションを含むさまざまなインターネットからのサイバー攻撃に対応することが可能となります。
ただし、Webサイトの利用者側への対策は実施できても、運営者側への対策にはならないケースもあるため、脆弱性診断サービスなどでWebサイトの脆弱性をチェックして、別途、情報セキュリティ対策を実施する必要がある旨は忘れないようにしましょう。
データベースのログを常に監視する
SQLインジェクションによるサイバー攻撃を早期発見するために、データベースのログを常に監視・解析して、データ書き換えが行われていないか、抽出されたデータの範囲はどれくらいかなどをチェックする方法も有効です。
常時、データベースのログを監視・解析することにより、システムログへの攻撃を検知することができたり、普段は使われていないSQL文が利用された形跡をキャッチすることができたりします。
エスケープ処理を実施する
エスケープ処理とは、「ユーザーから入力された特定の文字や記号を安全な形に変換する処理」のことを指します。
SQLインジェクション対策の中でも有効な対策方法として知られています。
SQLインジェクション対策を実施する場合のエスケープ処理では、「’(シングルクォート)」や「;(セミコロン)」などの記号が対象となり、これらの文字を普通の文字として認識するように設定を行うことにより、攻撃する側がSQLを送り込んできたとしても、その攻撃を無効化することができます。
想定している文字以外は利用しない
入力ボックスに入れることのできる文字を、半角数字の入力以外も入力禁止にするなどし、想定している文字以外は利用できないように設定することもSQLインジェクション対策としては有効です。
SQLインジェクションは特殊文字を利用しないと攻撃することができないという特性があるため、このような仕様にすることでSQLインジェクション対策を実施することができます。
SQLインジェクションの対策を万全に
SQLインジェクションの攻撃は、一度受けてしまうと大量の個人情報などが流出してしまう危険性があるため、甚大な被害を被る恐れがあります。
ここまでお伝えしてきた通り、SQLインジェクションは、典型的なサイバー攻撃であり、多くの被害が現在も報告され続けているものです。
情報セキュリティ対策を万全にして、Webサイトを利用しているユーザーや、サイトでリリースしているサービスを守りましょう。