メインコンテンツにスキップする

SQLインジェクション攻撃は最も古いWebアプリケーションの脆弱性の1つです。これは1990年代後半から議論されていますが、現在でも関連性があります。この説明では、その概要、仕組み、および予防方法について説明します。

SQL インジェクション- 意味と定義

SQLインジェクション(「SQLi」と略されることもある)は、脆弱性の一種で、攻撃者がSQL (構造化照会言語) コードを使用してデータベースを操作し、価値が高いと思われる情報にアクセスします。この攻撃は、SQLベースのデータベースを使用しているすべてのWebアプリケーションやWebサイトが対象となり、最も被害が多く危険なタイプの攻撃の1つです。

SQLインジェクション攻撃の仕組みは?

SQLインジェクションを理解するには、構造化照会言語(SQL)を知っておくことが重要です。SQLは、リレーショナルデータベースに格納されているデータにアクセス、変更、および削除するためのプログラミングで使用される照会言語です。WebサイトやWebアプリケーションの大部分はSQLデータベースに依存しているため、SQLインジェクション攻撃は組織に深刻な影響を与える可能性があります。

SQLクエリとは、データの検索やSQLコードなど、何らかの操作や機能を実行するためにデータベースに送信するリクエストのことです。たとえば、Webフォームを利用してログイン情報を送信し、ユーザーにサイトへのアクセスを許可する場合などです。通常、このようなWebフォームでは、名前および/またはパスワードなど特定のデータのみ入力できるよう設計されています。入力された情報はデータベースと照合され、情報が一致した場合、ユーザーはアクセスが許可されますが、そうでない場合は、アクセスが拒否されます。

問題が発生する潜在的な理由は、多くのWebフォームでは、付加的な情報を入力できないように対策が取られていないためです。この弱点を悪用すると、攻撃者はフォームの入力ボックスを利用して自身のリクエストをデータベースに送信することが可能です。これによって、サイバー犯罪者は自身の目的のために、機密データの盗難やデータベース内の情報操作などあらゆる不正行為を実行できるようになります。

データベースを利用するWebサイトやサーバーは広く普及しており、SQLインジェクションの脆弱性は、サイバー攻撃の中で最も古くて一般的な攻撃の1つです。現在サイバー犯罪者のコミュニティにおけるいくつかの「発展」により、このタイプの攻撃を受けるリスクが高まりました。典型的なのはSQLインジェクションの検出、悪用するツールの登場です。オープンソース開発者から無料で入手できるこれらのツールを利用して、サイバー犯罪者はクリックするだけで、簡単にデータベース内の任意のテーブルや列にアクセスし、わずか数分間で自動的に攻撃プロセスを行うことができます。

SQLiの症状

SQLインジェクション攻撃が成功すると、症状がまったく表れない可能性があります。ただし、以下のような外的兆候がある場合もあります。

  • 短い時間に過剰な数のリクエストを受信。たとえば、ウェブページの連絡先フォームから多数のメールが表示される場合があります。
  • 不審なウェブサイトにリダイレクトする広告。
  • 怪しいポップアップとメッセージエラー。

SQLインジェクションのタイプ

バックエンドデータへのアクセス方法と、それによる潜在的なダメージの範囲によって、SQLインジェクションは次の3つのカテゴリに分類されます。

帯域内SQLi。

このタイプのSQLi攻撃は、同じ通信チャネルを使って攻撃を仕掛け、結果を収集するため、攻撃者にとっては簡単です。このタイプのSQLi攻撃には、2つのサブバリエーションがあります。

  • エラー・ベースのSQLi: データベースは、攻撃者のアクションのためにエラーメッセージを生成します。攻撃者は、これらのエラーメッセージによって生成されたデータに基づいて、データベースインフラストラクチャに関する情報を収集します。
  • ユニオンベースのSQLi: 攻撃者は、UNION SQL演算子を使用して、1つのHTTP応答で複数のselect文を融合することによって、必要なデータを取得します。

参照SQLi (ブラインドSQL インジェクションとも呼ばれます)。

このタイプのSQLiには、データペイロードを送信した後にサーバーの応答パターンと動作パターンを使用して、その構造の詳細を取得する攻撃者が含まれます。データはWebサイトデータベースから攻撃者に転送されないため、攻撃者は攻撃に関する情報を帯域内に表示しません(ゆえに「ブラインドSQLi」と呼ばれる)。基本SQLi は、次の2つのサブタイプに分類できます。

  • 時間ベースのSQLi: 攻撃者はSQLクエリをデータベースに送信し、データベースを数秒待機させてから、クエリにtrueまたはfalseとして応答します。
  • 真偽値型SQLi: 攻撃者はSQLクエリをデータベースに送信し、trueまたはfalseの結果を生成してアプリケーションに応答させます。

帯域外SQLi。

このタイプのSQL攻撃は、2つのシナリオで行われます。

  • 攻撃者が同じチャネルを使用して攻撃を開始したり、情報を収集したりできない場合、
  • 又はサーバが遅すぎるか不安定で、これらのアクションを実行できない場合。
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

SQLインジェクション攻撃の影響

SQLインジェクション攻撃が成功すると、ビジネスに深刻な影響を与える可能性があります。これは、SQLインジェクション攻撃が以下の可能性があるためです。

  • 機密データの公開。 攻撃者はデータを取得できます。これは、SQLサーバに保存されている機密データを公開する危険があります。
  • データの完全性を損なう。 攻撃者は、システムから情報を変更または削除できます。
  • ユーザーのプライバシーを侵害する。 SQLサーバに保存されているデータに応じて、攻撃により、アドレス、電話番号、クレジットカードの詳細などの機密ユーザー情報が公開される場合があります。
  • 攻撃者にシステムへのアクセス権を付与する。 データベースユーザに管理者権限がある場合、攻撃者は悪意のあるコードを使用してシステムにアクセスできます。
  • 攻撃者にシステムへの一般的なアクセス権を付与する。 弱いSQLコマンドを使用してユーザ名とパスワードをチェックすると、攻撃者はユーザの資格情報を知らずにシステムにアクセスできます。そこから、攻撃者は機密情報にアクセスし操作することでハボックを侵すことができます。

SQLインジェクション攻撃のコストは、単なる財務的なものではありません。名前、住所、電話番号、クレジットカードの詳細などの個人情報が盗まれた場合、顧客の信頼と評判の低下を招く可能性もあります。顧客の信頼が損なわれると、回復が非常に困難になる可能性があります。

SQLインジェクションの例

長年にわたり、多くの組織がSQLiの犠牲になってきました。次のような有名な例があります。

フォートナイト(Fortnite)、2019年

フォートナイトは3億5000万人以上のユーザーを擁するオンラインゲームです。2019年、SQLインジェクションの脆弱性が検出されました。これにより、攻撃者はユーザアカウントにアクセスできます。脆弱性がパッチされました。

シスコ(Cisco)、2018年

2018年、Cisco Prime License ManagerでSQLインジェクションの脆弱性が検出されました。攻撃者は脆弱性により、ライセンスマネージャが導入されたシステムへのシェルアクセスを取得できました。シスコはその後、脆弱性にパッチを適用しました。

テスラ(Tesla)、2014年

2014年、セキュリティ研究者は、SQLインジェクションを使用してテスラのウェブサイトに違反し、管理者権限を取得し、そのプロセスでユーザーデータを盗むことができたと発表しました。

SQLインジェクション攻撃に関するよくある質問

SQLiに関するよくある質問は次のとおりです。

SQLインジェクション攻撃とは?

SQLインジェクション攻撃では、バックエンドデータベースの操作に悪意のあるSQLコードを使用してプライベート情報にアクセスします。この情報には、機密の会社データ、ユーザーリスト、顧客の詳細などが含まれます。SQLは「構造化照会言語」を意味し、SQLインジェクションはSQLiと略されることがあります。

SQLインジェクションの仕組みは?

SQLインジェクション攻撃により、攻撃者はIDの偽装、既存のデータの変更、システム上のデータの公開、データの破棄、またはデータベースサーバの管理者になることができます。SQLインジェクション攻撃は、機密ユーザデータに違反した場合に顧客の信頼を失うなど、企業に深刻な損害を与える可能性があります。

SQLインジェクション攻撃はどのくらい一般的ですか?

実装が比較的容易であり、潜在的な報酬が大きいため、SQLインジェクション攻撃は珍しくありません。統計は異なりますが、SQLインジェクション攻撃がソフトウェアアプリケーションに対する攻撃の大半を占めていると見積もられます。オワスプ(Open Web Application Security Project )によれば、SQLインジェクションを含むインジェクション攻撃は、 2021年で3番目に深刻なWebアプリケーションセキュリティリスクでした

SQLインジェクション攻撃を防ぐ方法

SQLインジェクション防止について懸念する企業にとって、WebサイトおよびWebアプリケーションの防御に役立つ重要な原則は次のとおりです。

スタッフトレーニング:ウェブアプリケーションを担当するチーム内でSQLiベースのリスクに関する認識を生成し、必要なロールベースのトレーニングをすべてのユーザーに提供します。

ユーザ入力を差し控える:SQLクエリで使用されるユーザ入力にはリスクが生じます。認証済みおよび/または内部ユーザからのアドレス入力は、検証されるまで、パブリック入力と同じ方法で入力されます。SQLデータベースに接続するアカウントに必要な最小限の権限のみを付与します。ブラックリストの代わりにホワイトリストを標準プラクティスとして使用して、ユーザー入力を検証およびフィルタリングします。

最新バージョンを使用する:古いバージョンは現在の安全機能を欠いている可能性があるため、保護を最大化するために開発環境の最新バージョンを使用することが重要です。最新のソフトウェアおよびセキュリティパッチが利用可能な場合は、必ずインストールしてください。

Webアプリケーションの連続スキャン。

包括的なアプリケーションパフォーマンス管理ツールを使用します。Webアプリケーションを定期的に スキャンする と、深刻な損傷が発生する前に、潜在的な脆弱性が特定され、対処されます。

ファイアウォールを使用する: SQLi やその他のオンライン脅威をフィルタするために、ウェブアプリケーションfirewall (WAF) がよく使用されます。WAFは、大量かつ頻繁に更新されるシグネチャのリストに依存しているため、悪意のあるSQLクエリを除外できます。通常、リストには特定の攻撃ベクトルに対処するためのシグネチャが保持され、新たに発見された脆弱性に応じて定期的にパッチが適用されます。

関連するカスペルスキー製品:

さらに読む:

SQLインジェクションとは?定義と説明

SQLインジェクションを使用すると、攻撃者はデータベースへの不正なアクセスを取得し、企業に損害を与えることができます。SQLインジェクションの仕組みについてさらに紹介します。
Kaspersky Logo