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

2022年10月26日
SQL インジェクション攻撃とは - CDNetworks

コンテンツ

CDNetworksを無料でお試しください

当社のほとんど全ての製品に、14 日間の無料試用版があります。登録時、クレジットカードは必要ありません。

この投稿を共有

ハッキング手法がより高度になり、悪意のあるアクターが新しい攻撃ベクトルを利用できるようになったとしても、一部の古い方法は依然として効果的です。 

SQL インジェクションは、サイバー犯罪者が何十年も使用してきた手法の 1 つです。そのため、SQL インジェクションは定期的に Open Web Application Security Project (OWASP) 上位 10 の Web 脆弱性.実際、タイプが「SQL インジェクション」の約 1162 のサイバーセキュリティの脆弱性が、CVE (Common Vulnerabilities and Exposures) として承認されています。これは、一般に知られている情報セキュリティの脆弱性を文書化するためのシステムです。 

SQL インジェクションとは

SQL インジェクションは、サイバー攻撃で使用される一般的な手法であり、攻撃者が悪意のあるコードを入力して、他の方法では制限されている可能性があるデータベース内のデータにアクセスします。 

SQL は、SQL クエリと呼ばれるコマンドを介してデータベースにアクセスして操作するために使用される構造化クエリ言語です。 SQL インジェクション攻撃には、Web ページ上の Web フォームなどのユーザー入力検証方法による SQL コマンドまたはクエリ文字列の挿入が含まれます。

SQL インジェクションの脆弱性は、MySQL、Oracle、SQL Server などの SQL データベースに依存するアプリケーションに影響を与える可能性があります。 SQL インジェクションにより、攻撃者はアプリケーションのセキュリティ対策を迂回し、認証プロセスを回避して、データベースへの不正アクセスを取得できます。 

たとえば、会社の機密文書、ユーザーのデータ、顧客データ、およびその他の機密情報に許可なくアクセスする可能性があります。ハッカーは、データを変更または削除したり、データベースで管理操作を実行したり、データベース管理システムをシャットダウンしたりすることもできます。基盤となる SQL サーバーやオペレーティング システムに対してコマンドを実行することさえあり、ビジネスに深刻な損害を与える可能性があります。 

SQL インジェクション攻撃はどのように機能しますか?

SQL インジェクション攻撃は、SQL コマンドをユーザー入力フィールドに挿入して、データベースで特定のコマンドを実行することによって機能します。これらのデータベース クエリへの応答に基づいて、攻撃者はデータベース アーキテクチャを理解し、アプリケーション内から制限された情報にアクセスできます。 

たとえば、ハッカーは SQL インジェクションを実行して、「1=1」などの常に true であるステートメントを使用して、アプリケーションからデータを取得する場合があります。このステートメントは常に true であるため、クエリ文字列はテーブルの詳細を含む応答を返します。 

攻撃者は、バッチ SQL インジェクションを使用することもできます。この場合、"105; DROP TABLEサプライヤー」。ここで、セミコロンの後のステートメントは、アプリケーション データベースからサプライヤー テーブルを削除します。

SQL インジェクション攻撃のリスク – どの程度危険か?

SQL インジェクション攻撃の危険性は、ハッカーが許可されていないデータにアクセスできることにあります。また、このデータがパスワード、クレジット カードの詳細、またはユーザーや顧客の個人を特定できる情報などの機密データに関連している場合、攻撃者はビジネスに重大な経済的および評判の損害を与える可能性があります。場合によっては、SQL インジェクション攻撃により、攻撃者が気付かれずに組織のシステムに長期間アクセスできるようになることもあります。

過去には、SQL インジェクションを使用した注目を集めたデータ侵害が数多くありました。たとえば、 APT グループからの GhostShell 攻撃 2013 年に SQL インジェクションを使用して、53 の大学の学生とスタッフの 36,000 件の個人記録を盗み、公開しました。そして同年、別のグループ RedHack 集団が SQL インジェクションを使用 トルコ政府の Web ページを侵害し、政府機関への債務を消去すること。

SQL インジェクション攻撃の種類

データベースへのアクセスに使用される方法に基づいて、SQL インジェクション攻撃の種類をいくつかのカテゴリに分類できます。

  • インバンド SQLi (クラシック): 

これは、攻撃者が攻撃の開始と結果の取得に同じ通信チャネルを使用する一般的なタイプの SQLi 攻撃です。これは、データベースの構造に関する情報を明らかにするデータベース エラー メッセージであるエラー ベース、または攻撃者が利用できるデータを含む単一の HTTP 応答を取得するために複数の選択ステートメントを融合するユニオン ベースの SQLi である可能性があります。

  • 推論 SQLi (ブラインド)

これらのタイプの SQLi 攻撃では、攻撃者は、送信されたデータ ペイロードに基づいてサーバーの動作パターンを観察し、その構造についてさらに学習します。ブラインド SQL インジェクションは、クエリが true か false かによって異なる結果をアプリケーションに返すように要求するブール型 SQL インジェクション攻撃、または SQL コマンドが反応する前にデータベースを待機させる時間ベースの SQL インジェクション攻撃である可能性があります。この待機時間に基づいて、攻撃者はクエリが true か false かを知ることができます。

  • 帯域外 SQLi

帯域外 SQLi 攻撃は、攻撃と情報の取得に同じチャネルを使用できない場合、または SQL サーバーが遅すぎる場合に、他の 2 つの方法の代わりとして攻撃者によって使用されます。このタイプの攻撃は、アプリケーションが使用するデータベース サーバーで有効にする特定の機能に依存します。 

SQL インジェクションの例

ハッカーが SQL インジェクションの脆弱性を悪用する方法は多数あります。攻撃者が探しているものと、データベースで利用可能な情報の種類に応じて、SQL インジェクションの例は一般的に次の種類に分類されます。

  • 非表示のデータを取得するには:SQLクエリを改変してショッピングサイトで未発売商品などの隠し結果を表示させる攻撃。
  • アプリケーション ロジックを無効にするには: これには、クエリ文字列を変更してアプリケーションのロジックに干渉することが含まれます。たとえば、パスワードが true かどうかをチェックするクエリのパーティをコメント アウトすることで、パスワードを入力せずにユーザーとしてログインします。
  • データベースを調べるには: データベースに関する情報 (構造、バージョン、およびテーブル自体を含む) を取得する攻撃。 
  • 追加のテーブルを取得するための UNION ベースの SQL インジェクション: これらは、攻撃者が元の正当なクエリの結果に UNION select などのキーワードを使用して追加のクエリを追加し、SQL データベース内の他のテーブルから機密性の高いデータを取得する攻撃です。

CDNetworks が SQL 攻撃から保護する方法

ほとんどの場合、SQL インジェクション攻撃は、パラメーター化されたクエリまたは SQL コードで準備されたステートメントを使用することで防ぐことができます。これらには、ユーザー入力がクエリ構造に干渉しないようにコードを書き直すことが含まれます。

ビジネスを SQL インジェクション攻撃から保護する方法の 1 つは、Web アプリケーション ファイアウォール (WAF) を使用することです。 WAF は、アプリに出入りするトラフィックを監視し、一連のカスタマイズ可能な Web セキュリティ ルールに基づいて悪意のあるトラフィックをブロックします。 脆弱性スキャン ツールは、攻撃者が SQL インジェクションを成功させるために悪用できるアプリケーションや SQL データベースの弱点を検出するのにも大いに役立ちます。

CDNetworks は企業に Application Shield
(マルチレイヤWAF)
は、Web アプリケーション ファイアウォール (WAF) を他のセキュリティ機能と統合するクラウドベースのソリューションです。 1000 を超える組み込みの WAF 保護ルールが付属しており、そのうち 200 は SQL インジェクション攻撃に固有のものであり、これらの種類の脅威に対する防御を強化できます。同時に、SQL 攻撃の進化に対処し、将来の新しい手法を阻止する準備を整えるために、新しい WAF ルールも追加されています。 

もっと詳しく知る

HTTP ヘッダーの最適化
CDN

CDNetworks が HTTP ヘッダーを最適化する方法

HTTPヘッダーはHTTPリクエストとレスポンスで送信されるキーと値のペアであり、クライアントとサーバー間の通信に関する重要な情報を提供します。コンテンツタイプ、エンコーディング、キャッシュ制御、認証などの詳細が含まれます。

続きを読む >>