SQL インジェクションとは何ですか?
SQL インジェクションは、Web アプリケーションのユーザー指定データフィールドに完全または"partial"な SQL コマンドを挿入し、それらをデータベースサーバーで実行するために送信する手法です。
より簡単に言うと、SQL インジェクションとは、アプリケーション内の不適切に記述されたコードが原因で、悪意のある攻撃者がアプリケーションに悪意のあるコードを注入できる状態を指します。
SQL インジェクション攻撃はどのように機能しますか?
企業は、問い合わせフォーム、フィードバックフォーム、チェックアウトフォーム、検索バーなどのフィールドを使用して、Webサイトのユーザーとやり取りします。これらのフィールドにより、ユーザーは正当にビジネスのデータベースに情報を送信し、そこから情報を取得できます。ユーザーとデータベースの間にあるこの「オープンな経路」は、SQL インジェクションの影響を受けやすくなります。
フィールドのコーディングが正しくない場合、攻撃者はそれを使用して悪意のある SQL コマンドを挿入できます。挿入されたコードによって、データベースをだまして攻撃者のコマンドを実行させ、機密情報を抽出したり、データベーステーブルを変更または破壊したりする可能性があります。動的コンテンツとフィールドは、SQL インジェクションの影響を受けやすくなります。
SQL インジェクション攻撃では、攻撃者はどのような手順を取りますか?
攻撃者がフォームフィールドに操作された SQL コマンドを入力します
安全でないデータベースは、このクエリを有効と見なします。
攻撃者は、機密情報を含むデータベースからレスポンスを取得します。
攻撃者は、データベースの構造を理解するための情報(テーブル名など)を取得します。
攻撃者が悪意を持ってデータベース内のデータを改ざんします
SQL インジェクションの種類
SQLインジェクションには3つのカテゴリがあります:
推論型(ブラインド)SQLIインジェクション
ブラインドSQL攻撃では、攻撃者はサーバーにデータを送信し、そのレスポンスとしての挙動を観察します。攻撃者は、データベースのレスポンスに基づいて攻撃者のリクエスト/プロンプトへの反応を分析し、データベースに関する重要な情報を推測できます。十分に観察することで、攻撃者はデータベースとその構造の全体像を把握できるようになり、それによって最適な悪用方法を判断するための情報を得られます。このタイプのインジェクションが「blind」と呼ばれるのは、攻撃者が実際にはデータベースの内部を見ることができないためです。
インバンド SQL インジェクション
クラシック SQL インジェクションとも呼ばれるインバンド SQL インジェクション攻撃では、攻撃者は攻撃を実行したのと同じ「チャネル」で結果を取得します。たとえば、攻撃者が Web ブラウザに対して SQL インジェクションを実行したとします。その攻撃者は、その攻撃の結果を同じ場所(Web ブラウザ)で受け取ります。
帯域外 SQL インジェクション
帯域外 SQL インジェクション攻撃では、攻撃者は、攻撃対象のアプリケーションから、攻撃と同じ「チャネル」で結果(レスポンス)を取得しません。この攻撃は代わりに、アプリケーションにデータをリモートエンドポイントへ送信させます。このエンドポイントは攻撃者によってコントロールされているため、攻撃者はアプリケーションのレスポンスにアクセスできます。
SQL インジェクションの例
ユーザーがログインページで認証情報を送信すると、Web アプリケーションはそれらをSQLクエリで使用し、そのクエリが実行のためにデータベースに送信されます。送信されたユーザー名とパスワードが有効な場合、ユーザーはアクセス権を取得します。ユーザー名が「user1」、パスワードが「pass123」であるとすると、Web アプリケーションは検証のために次の SQL クエリをデータベースに送信します。
SELECT * FROM Users WHERE name = 'user1' AND password = 'pass123'
有効なユーザー名を使用する代わりに、攻撃者はユーザー名として「test’ OR “1 = 1–”」を送信し、パスワードには任意の値を入力します。この任意のSQLクエリは true 値を返します。任意のクエリは次のようになります。
SELECT * FROM Users WHERE name = 'test' OR 1 = 1 --' AND password = 'xxxxx'
クエリを入力すると、ハッカーはパスワードなしでログイン済みのセッションにアクセスします。その後、ハッカーはデータを盗んだり、Webサイトのデータベースを操作したりします。
SQL攻撃を防ぐ方法
攻撃者がデータベースへの管理者アクセスを取得することは、SQL インジェクションによって可能になる重大なセキュリティ侵害です。この種の攻撃により、ハッカーはデータベース全体の一部を変更または削除できます。攻撃者は、侵害されたサーバーから攻撃を仕掛けたり、データベースに保存されている機密情報にアクセスしたりすることもできます。この重大なセキュリティ脅威は、フィールドを適切にコーディングし、サーバーソフトウェアを最新のパッチで更新することで防止できます。
Fastlyの Next-Gen WAF のようなツールは、独自の検知エンジンである SmartParse により、悪意のあるまたは異常なペイロードが存在するかどうかをインラインで即座に判断します。SmartParse により、regex と手作業による負荷の高いチューニングが不要になります。
Fastly こちらでは、SQL インジェクション攻撃やその他の OWASP トップ10の攻撃の防止について詳しく学べます。




