Introduction
SQLインジェクションとは、Webサイトの入力エリアなどに不正なSQL文を入力することで、データベースに不正にアクセスするサイバー攻撃の手口です。SQLインジェクションの攻撃を受けると、サイトの改ざんやデータベースへの不正アクセスなどの被害が起こる可能性もあります。企業側としては、そのような被害を防がなければなりません。
この記事では、SQLインジェクションについてご説明し、具体的な被害事例、対策内容などについて解説します。
目次
SQLインジェクションとは?
SQLインジェクションとはどのようなものなのか、仕組みやクロスサイトスクリプティングとの違いなどについてご説明します。
SQL文の仕組み
SQLインジェクションについてご説明する前に、SQL文について簡単にご説明します。
SQL文とは、データベースを操作する命令文のことです。データベースには、顧客情報や取引情報、商品情報などのデータが格納されています。データベースを参照して顧客名をとり出す、情報を更新・削除するなどの操作を行う際に使用するのが、SQL文です。
たとえば、ECサイトでユーザーIDから顧客名と最近の取引内容を検索し、画面に名前と最近購入した商品名を表示するために、データベース操作が必要です。
SQLインジェクションの仕組み
SQLインジェクションとは、Webアプリケーションの脆弱性を利用して、第三者がデータベースを不正に操作する攻撃のことです。
インジェクションとは、注入という意味の言葉です。具体的には、Webサイトの入力フォームや検索エリアなどにSQL文を入力することで、データベースの不正な参照、データの改ざん、削除などを行います。たとえば、検索エリアに「すべてのデータを削除する」「顧客情報をすべて取得する」などのSQL文を入力して、データを破壊したり情報を取得したりします。
Webアプリケーションが適切に構築されていれば、このような不正なデータベース操作を行えません。しかし、WebアプリケーションにSQLインジェクションを防げないような脆弱性が存在する場合、不正な操作を許してしまうこともあります。
クロスサイトスクリプティングとの違い
SQLインジェクションとよく似たものに、クロスサイトスクリプティングがあります。
クロスサイトスクリプティングとは「サイトを横断したプログラムの記述」という意味です。Webサイトには動的に生成されるものがあり、ユーザーが動的なサイトにアクセスした際に、不正なスクリプトが実行されてしまうことがあります。クロスサイトスクリプティングも、脆弱性を利用して行われる攻撃です。
SQLインジェクションとよく似た動作ですが、クロスサイトスクリプティングはユーザー側の端末で不正なスクリプトを実行する点が異なります。そのうえで、ユーザー側の端末のクッキーや個人情報を盗むなどの不正が行われます。
クロスサイトスクリプティングについてはこちらもご覧ください。
>>クロスサイトスクリプティング(XSS)とは?手口や被害事例、対策をわかりやすく解説のページへ
SQLインジェクションによって起こりうる被害
SQLインジェクションによって、どのような被害が起こるのかをご説明します。
情報漏洩
SQLインジェクションの被害にあうと、Webアプリケーション内に保持しているデータベース内の情報が盗まれることがあります。たとえば、ECサイトなどで顧客の個人情報やクレジットカード情報などを盗み、不正利用するなどの被害が起こります。
Webサイトやデータベースの改ざん・消去
不正なSQLが実行されることで、Webサイトの表示内容やデータベースが改ざんされたり消去されたりする被害が起こります。
企業サイトなどが改ざんされてしまうと、企業の信用が大きく低下してしまいます。さらに、データベース内の顧客情報などが削除されてしまった場合、損害賠償を請求される可能性もあるでしょう。
マルウェア拡散の踏み台にされる
不正操作によりログイン情報を盗まれ、アカウントを乗っとられることがあります。そして、アカウントを悪用し、マルウェア拡散の踏み台に利用する手口も存在します。
たとえば、不正なアクセスでサーバーが乗っとられ、サイバー攻撃の踏み台にされるケースです。サーバーの設定が不正に書き換えられてバッグドアが仕かけられると、痕跡を残すことなく次の攻撃の踏み台にされ、ほかのサーバーに被害が拡大します。気づかぬうちにマルウェア拡散をほう助してしまうことになるため、非常に危険です。
SQLインジェクションの被害事例
実際に、SQLインジェクションの被害を受けた事例をご紹介します。
大学のWebサイトが狙われた事例
ある教育機関のWebサイトが狙われ、SQLインジェクションの被害にあいました。
その教育機関の情報システムに関する質問を受けるページが不正アクセスされ、メールアドレスが数千件単位で漏洩した可能性があります。その後、すぐにプログラムを修正して当該の脆弱性を解消し、メールアドレスが悪用されたという報告はなかったとのことです。
SQLインジェクションの被害にあうと、その教育機関のWebサイトの信頼度が大きく低下するとともに、教育機関自体の評判が落ちてしまう可能性もあります。
市場調査会社のWebサイトが狙われた事例
ある市場調査会社の会員サイトが、SQLインジェクションの被害にあいました。不正アクセスが行われ、サイトの会員のメールアドレスとパスワードが10万件単位で漏洩した可能性があるとのことです。
その結果、サイトの閉鎖、ログインパスワードの初期化などの対応が行われました。市場調査会社のWebサイトや会社自体の信用が大きく損なわれた可能性があります。
SQLインジェクションの被害にあいやすいケース
SQLインジェクションの被害にあいやすいケースとは、どのようなケースなのかを見ていきます。自社サイトがこのケースに当てはまらないかを確認してみてください。
個人情報などをデータベースに格納している
これは多くのケースに当てはまってしまうと思いますが、個人情報をデータベースに格納している場合は注意する必要があります。SQLインジェクションの被害にあい、顧客情報や社員情報などを盗まれると大問題です。そのようなWebアプリケーションは狙われやすいので、十分な対策を行っておかなければなりません。
たとえば、大量の顧客情報や決済情報を保有するECサイトや、顧客情報を保有している会員サイトなどは、対策を強化する必要があるでしょう。
大手企業の場合はセキュリティ対策に予算をかけていることが多く、そう簡単にSQLインジェクションを成功させられません。狙われやすいのは、小規模~中規模なECサイトや企業サイトなどです。知名度が低くても狙われる可能性があるので、規模に関係なく十分な対策が必要です。
脆弱性が存在する
脆弱性が放置されたままのWebアプリケーションやサイトなどは、注意が必要です。更新が滞っているサイトなどは、脆弱性対策も放置されている可能性が高いので、狙われることもあります。定期的に脆弱性対策を行い、日ごろから脆弱性をこつこつとつぶしていきましょう。
古い、または更新されていないOSやソフトウェアを使っている
OSやソフトウェアを古いバージョンのまま使っていると、脆弱性の対策が不十分です。OSやソフトウェアの更新が滞ると脆弱性が放置されてしまい、さまざまな被害にあう可能性があります。
定期的に更新を行い、古いハードウェアやソフトウェアを使いつづけないようにしましょう。
SQLインジェクションの対策
SQLインジェクションの対策として、どのようなことを行えばよいのでしょうか?ここでは、SQLインジェクション対策について、具体的な方法をご紹介します。
IPAが示すやり方に従って対策する
IPA(情報処理推進機構)が『安全なウェブサイトの作り方 – 1.1 SQLインジェクション』で紹介しているSQLインジェクションを防ぐための対策をいくつかご説明します。
プレースホルダの実装
プレースホルダとは、SQL文のひな型のなかにある変数の場所を示す記号のことです。このプレースホルダに機械的な処理で値を割り当てて、SQL文を実行します。
一方、Webアプリケーションで文字列を連結してSQL文を組み立てる方法だと、簡単に不正なSQL文を作成できてしまいます。しかし、プレースホルダは機械的な処理で値を割り当てるため、SQLインジェクションの被害を防ぐことが可能です。
エスケープ処理
SQL文には、SQL文を終了することを示す「;」や、文字列型であることを示す「’」「“」などの特殊な記号が存在します。このような特殊な記号をただの文字列として扱う処理が、エスケープ処理です。具体的には「’」で囲うことで、特殊な記号の「;」もただの文字列になります。
SQLインジェクションの手口として、SQL文を終了することを示す「;」を入力してSQL文を終わらせ、その後ろに不正なSQL文を埋め込む方法がよくあります。このような手口を防ぐ方法として「’」を囲うことで、不正に「;」でSQL文を終わらせるような処理を防ぐことが可能です。
エラーメッセージの詳細を非表示にする
IPA(情報処理推進機構)『安全なウェブサイトの作り方 – 1.1 SQLインジェクション』によると「エラーメッセージの内容に、データベースの種類やエラーの原因、実行エラーを起こしたSQL文等の情報が含まれる場合、これらはSQLインジェクション攻撃につながる有用な情報となりえます」と記されています。
たとえば、データベースの項目の名称がわかれば、その名称を利用してデータを取得するSQL文をつくれてしまうかもしれません。このようにエラーメッセージが悪用されることもあるので、画面表示されるエラーメッセージに詳細な内容を表示させないようにしましょう。
OSやソフトウェアを最新バージョンに保つ
脆弱性を確実につぶしていくために、OSやソフトウェアのバージョンをつねに最新の状態に保っておきましょう。更新作業をスケジュール化すると、バージョンアップ忘れを防げます。また、定期的に最新の状態であることを確認するフェーズを設けることも大事です。
WAF(ウェブアプリケーションファイアウォール)を導入する
WAF(ウェブアプリケーションファイアウォール)を導入すると、従来のファイアウォールでは防げない、アプリケーションの脆弱性を狙った攻撃を防ぐことが可能です。ネットワークレベルの防御だけではなく、アプリケーションレベルでの対策を行うことで、より強固なセキュリティレベルを維持できるでしょう。
定期的な脆弱性診断を行う
自社のネットワークやサーバー環境に脆弱性が潜んでいないかを確認するために、定期的な脆弱性診断を行うのも有効です。
脆弱性診断とは、ネットワークに対して網羅的に攻撃を行う、アプリケーションの脆弱性を突いた攻撃を行うなどにより、脆弱性の有無を診断するサービスです。徹底的に脆弱性を洗い出してくれるので、定期的に診断を受けることをおすすめします。
とくに、新しい社内システムを導入したとき、新サービスを開始したとき、機能追加やシステム更改を行ったときなどには、診断を受けた方がよいでしょう。そのうえで、定期的に診断を行えば安心です。
▼あわせて読みたい▼
>>脆弱性診断とは?診断の種類や必要な理由、やり方やツールについても解説のページへ
>>脆弱性診断とペネトレーションテストの違いとは?自社に必要なのはどちらか、選び方を解説のページへ
>>セキュリティ診断サービスとは?比較・選定ポイントについて解説のページへ
>>脆弱性診断の適切な頻度とは?項目ごとの違いやタイミングについて解説のページへ
SHIFTのセキュリティ(脆弱性)診断について
SHIFTでは、国際基準に基づいた判断基準で、次のようなセキュリティ(脆弱性)診断を対応しています。
<SHIFTのセキュリティ(脆弱性)診断>
・Webアプリケーション診断
・スマートフォンアプリケーション診断
・クラウド診断
・ペネトレーションテスト
・エンドポイント診断
・診断内製化支援
・負荷テスト
・プラットフォーム診断
・ソースコード診断
診断内容を可視化して網羅的に脆弱性を診断するので、お客様と診断方法や内容について明確に共有できます。
脆弱性診断を受けたことがない、診断内容や方針について詳細に検討したいという場合には、ぜひSHIFTにご相談ください。
関連サービスについて
脆弱性診断サービス資料
SHIFTの脆弱性診断は、ホワイトハッカーの診断プロセスを徹底的に標準化した、手動でもブレのない高い品質水準を誇る診断です。この資料では、脆弱性診断の課題やそれを解決するSHIFTのサービス、選ばれる理由などをまとめています。
SHIFTの脆弱性診断は、ホワイトハッカーの診断プロセスを徹底的に標準化した、手動でもブレのない高い品質水準を誇る診断です。この資料では、脆弱性診断の課題やそれを解決するSHIFTのサービス、選ばれる理由などをまとめています。
まとめ
この記事では、SQLインジェクションについてご説明し、具体的な被害事例、対策内容などについて解説しました。SQLインジェクションによる被害を防ぐためには、脆弱性診断を行うのが非常に有効です。社内システムやネットワークに潜む脆弱性を発見し、早期に対策することでサイバー攻撃を防げます。
脆弱性診断について不明点や相談したいことがあれば、SHIFTまでお気軽にお問いあわせください。
>>SHIFTのセキュリティソリューションのページへ
>>お問い合わせページへ
>>料金についてページへ