SQLインジェクションってなに?引き起こすリスクや対策方法7つをご紹介

SQLインジェクションってなに?引き起こすリスクや対策方法7つをご紹介のアイキャッチイメージ

そもそもSQLってなに?


SQLとは、リレーショナルデータベースの操作を行う言語です。コンピューターで扱う言語ですが、プログラミング言語とは異なります。

SQLでは、データベースに対しデータを問い合わせ(検索)したり、データベースそのものの構造を作成・変更が可能です。また、蓄積されているデータを条件に応じて抽出できるほか、データを蓄積するテーブルを丸ごと削除してしまうような操作もできてしまいます。

SQLインジェクションとは


SQLインジェクションは、Webサイトの入力フォームにSQL文を含む文字列を入力し、アプリケーションとして想定していないSQL文を実行させる攻撃です。

例えば、アプリケーションで使用しているデータベースの値を改ざんされたり、必要なテーブルを削除されたりする危険性があります。さらに、IDとパスワードがなくてもグインできてしまうこともあります。

ここではSQLインジェクションの仕組みや種類を紹介します。

仕組み

Webサイトの入力フォームに入力された文字列はサーバーに渡され、データベースの検索条件や登録されるデータの要素として使われます。

攻撃者は、Webアプリケーションサーバーで実行されるSQL文を想定し、入力フォームから実行可能なSQL文を含む文字列を入力します。

そのため、Webサイトとしては入力された値によりアプリケーションのSQLが無効化されたり、入力されたSQL文が実行されたりしないよう対策が必要です。

種類

代表的なSQLインジェクションの種類として「インバンドSQLインジェクション」と「ブラインドSQLインジェクション」があります。

インバンドSQLインジェクションは、簡単にできる攻撃なので多く見られます。SQL文を実行してエラーメッセージを生成させることもでき、テーブルを結合させてアプリケーションテーブルすべてを参照することさえ可能です。

ブラインドSQLインジェクションは、直接データを盗み出すのではなく、データベースの管理情報を盗み出します。

クロスサイトスクリプティングとの違いとは?

クロスサイトスクリプティングは、Webサイトやメールを利用して不正なコードを実行させ、Webのプログラムコードを書き換えたりCookie情報を盗んだりする攻撃です。

SQLインジェクションもクロスサイトスクリプティングもセキュリティの脆弱性を攻撃する点では同じですが、前者は不正なSQL文を実行させる攻撃であり、後者はプログラムコードを用いる攻撃である点で異なります。

SQLインジェクションが引き起こす3つのリスク


SQLインジェクションはWebアプリケーションが利用しているデータベースを直接操作できるので、実行されてしまうと多大な影響や被害を受けることになりかねません。

SQLインジェクションを使った攻撃の中でも、アプリケーション管理者に致命的な結果となるリスクを3つ紹介します。攻撃の方法ともたらされる結果や影響から、SQLインジェクションの怖さをイメージしてみてください。

SQLインジェクションのリスク1:情報改ざん

ショッピングサイトでよく見かける「商品名」を入力して該当商品の検索を行うページでは、検索ボタンをクリックするとSQL文が発行される仕組みになっています。

入力された商品名は「’(シングルクォーテーション)」で囲んでSQL文のキーとして使われ、SQL文の最後は「;(セミコロン)」で閉じます。

SQL文の構成を知っている攻撃者が「’;攻撃に使うSQL文」を入力すれば、脆弱性のあるサイトでは攻撃に使うSQL文が実行されてしまいます。管理者が意図しない更新用SQLを攻撃用のSQL文として発行することも可能です。

SQLインジェクションのリスク2:機密・個人情報の漏洩

SQL文はデータベースからデータを抽出するときにも使われる言語なので、SQLインジェクションの脆弱性があるサイトから情報を抜き取るのは簡単な作業です。

会員登録フォームのようにデータベースへのデータ登録を目的とするフォームで、データ抽出のSQL文を含む文字列を入力します。データベースにはSQL文を含んだデータが登録され、次回該当データを検索するときに、攻撃としてのデータ抽出SQL文も実行されてしまいます。

SQLインジェクションのリスク3:データの消去

SQLインジェクションの攻撃によりデータを消去する方法は、データ改ざんの方法とほぼ同じです。

SQL文の構成を知っている攻撃者が「’;攻撃に使うデータ削除用のSQL文」を入力すれば、脆弱性のあるサイトではデータ削除のSQL文が実行されてしまいます。

そして、データ削除文が無条件で実行されれば該当テーブルにある全データが削除されてしまいます。さらに悪質の場合は、テーブルそのものを削除してしまうことも可能です。

SQLインジェクションの対策方法7選


SQLインジェクションはよく知られている攻撃であり、対応策も豊富です。管理するWebサイトに適した対応策を採用することが大切ですが、対応策は1種類だけでなく、可能な限り網羅した方がリスクを減らせます。

ここで紹介する対策方法は、Webサイトの構成やアプリケーションのプログラムで対応する必要があります。なお、Webサイト構築後はSQLインジェクションに関するテストが必須です。

SQLインジェクションの対策1:サーバーを使う

SQLインジェクションはWebアプリケーションのプログラムに問題があることによって起きるといわれています。

SQLインジェクションを使ってSQL文を入力された場合、アプリケーションはそれを命令文として認識していまいます。そのため入力エリアの文字や文字数などに入力制限を設け、SQL文を成立させないようにします。

SQLインジェクションの対策2:WAFを導入する

WAFはWebアプリケーションファイヤーウォールという技術で、アプリケーションそのものに組み込むことなく、脆弱性を突いた攻撃を検出できます。

後付けで行える対策なので、Webアプリケーションの改修が難しい場合や脆弱性が明らかになっていてもどう改修したらよいか不明な場合に有効です。WAFを導入すれば、SQLインジェクションだけでなく、クロスサイトスクリプティングによる攻撃も防御・低減できます。

SQLインジェクションの対策3:エスケープ処理

SQLインジェクションによる攻撃の対策として、入力フォームで入力された文字列を特殊な文字に変換したうえでデータベースに渡すエスケープ処理も有効です。

エスケープ処理はサニタイジングとも呼ばれ、SQLインジェクションやクロスサイトスクリプティング対策として有効です。環境により異なりますが、「<」を「<」に置き換えたり、空白を「 」に置き換えたりします。

SQLインジェクションの対策4:Webの脆弱性を確認する

管理しているWebサイトに脆弱性があるかを確認してくれるサービスがあります。これはセキュリティ会社が疑似攻撃をしかけてくれるもので、無償のサービスもあります。

無償のサービスは、セキュリティに関する知識を必要とするものもあるので、サイトの安全性を確実に確認しておきたい場合は、有償サービスを利用した方が確実です。また、診断方法も手動とツールがあるので、予算に応じて選択可能です。

SQLインジェクションの対策5:バインド機能を使う

SQLインジェクションを避けるため、実装の際はSQL文に入力フォームの入力値を直接使うのではなく、プレースホルダを使うのが一般的です。

プレースホルダとは、プログラム内で実行されるSQL文で外部パラメータを使う部分を「?」で表記しておき、実際に入力された値はSQL文とは別にバインドされるものです。

バインド機能を使っておけば、バインド機構に不具合がない限り、SQLインジェクションは不可能とされています。

SQLインジェクションの対策6:データベースサーバーの監視・解析を活用

地道な作業ですが、データサーバーへのアクセスログやクエリーログを監視し、解析しておくこともSQLインジェクションの有効な対策になります。

アクセスログからは不正なアクセスを検知でき、クエリーログからは想定したSQL文とは異なる不正なSQL文の実行を検知できます。また、監視や解析を行っていれば、攻撃が開始された時点で検知することもでき、被害や影響を最小限に抑えることも可能です。

SQLインジェクションの対策7:開発言語を使う

SQLインジェクションを防ぐ対策として、プログラムでSQL文を生成するのではなく、ロジックと合わせてSQL文を記述できる開発言語を使うことも有効です。

.net LinqやPL/SQLなどは、ロジックの中にSQL文を記述できる開発言語です。すでにほかの開発言語でプログラム開発を行っている場合、SQL文部分のみ抜き出してほかの開発言語に置き換えるのは、時間も費用もかかりすぎるので難しいでしょう。

SQLインジェクションの痕跡を見つける


SQLインジェクションはデータベース接続を利用した不正アクセスです。例えば、このような事例があります。

ある会社は自社製品を販売するショッピングサイトを作ったのですが、その会社にはIT関連に精通した社員がいませんでした。業者にホームページの製作とシステム構築を依頼し、サイトを公開、販売を始めました。

しかしそのページに目をつけた人物が、ログインページに「SQLインジェクション」を試みます。特殊な文字列を入力することで、パスワードを入力しなくても会員ページにログインできてしまいました。

そのため会員の氏名、電話番号、クレジットカード番号まで漏洩しまったのです。

iLogScanerを使って痕跡を見つける

このような被害を防ぐためには、まずSQLインジェクションの標的となるページの対策を採らなくてはいけません。例えばiLogScaner(SQLインジェクション検出ツール)を使って痕跡を検出しましょう。

ログを解析することで、攻撃の痕跡を確認できます。また攻撃が成功した可能性を見ることも可能です。さらにSSHやFTPサーバーのログを見て、攻撃と思われるような痕跡を検出する機能もあります。

SQLインジェクション対策でデータベースを守りましょう


SQLインジェクションは、自社のデータベースや顧客情報などを危険にさらす脅威です。

ホームページを製作する際には、SQLインジェクション対策を行い、大切なデータベースを守るようにしましょう。

インフラエンジニア専門の転職サイト「FEnetインフラ」

FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。

転職をお考えの方は気軽にご登録・ご相談ください。

合わせて読みたい

Firewall(ファイアウォール) Firewallとは? Firewall(ファイアウォール)とは、企業等の内部ネットワークをインターネットを通して侵入してくる不正なアクセスから守るための“防火壁”のような役割を果たすソフトウェアや機器、システム等のことです。 Firewallの誕生 WANの発展により、企業内のネットワー...
IoTデバイスのセキュリティ設計その3【脆弱性対策】... IoTデバイスに脆弱性があると、そこを狙って攻撃されることがあります。 そのため脆弱性対策は必須です。 今回はIoTデバイスの脆弱性対策についてご紹介します。 製品開発段階での対応 IoTの脆弱性対策としては、まず開発段階から対応を始めます。 具体的には以下のような対応が推奨されていま...
ネットワークセキュリティの新たな概念「ゼロトラストネットワーク」とは... ほとんどの企業では、社外からのトラフィックに関しては検査やログ取得を行っています。一方で、社内のトラフィックに関しては信用しているため、特にセキュリティ対策を講じていないことが多いです。 しかし、それでは充分な安全性を確保できないことが増えてきました。 そのような中で注目されているゼロトラストネ...
シャドーITとは?セキュリティリスク対策5つと具体事例を紹介... シャドーITの概要 シャドーITとは、個人が所有し、会社が把握していないIT機器などを無断で持ち込み、従業員が業務を行うことです。また会社のクラウドサービスを無断で使用することも含まれます。 近年、オンラインストレージやチャットアプリなど、便利なサービスが次々と登場しています。これらを使...
【不正アクセス防止のために】侵入防止システム(IPS)による不正アクセスの対策をご紹介... セキュリティに欠かせないシステムであるIPSは、不正なアクセスを防止する対策システムの代表格です。 では同じセキュリティシステムとして有名なIDSとはどう違うのでしょうか。 今回はIPSとIDSの違いや侵入防止システムの働きなどをご紹介します。 IPSとIDSの違い どちらも不正アクセス...