SQLインジェクション(SQLi)とは?
SQLインジェクションは、 サイバー攻撃 これは、SQLクエリでの入力検証の不備を利用します。 アプリケーションがデータベースへの SQL クエリで信頼できないユーザー入力を使用する場合、意図的に不正な形式のユーザー入力によってクエリが変更される可能性があります。 SQLインジェクション攻撃は、データベースのデータへのアクセス、変更、または削除に使用される可能性があります。
SQLインジェクション攻撃の実行方法
ユーザー入力に基づいて SQL クエリを実行するアプリケーションは、SQL インジェクション攻撃に対して脆弱である可能性があります。 たとえば、Webアプリケーションでは、SQLクエリを使用して認証プロセスを実装できます。 ユーザーがユーザー名を入力すると、アプリケーションはそのユーザー名を使用して、そのユーザーのアカウントのパスワードのハッシュを検索します。 ユーザーが指定したパスワードのハッシュがこのパスワードハッシュと一致する場合、ユーザーは正常に認証され、自分のアカウントにアクセスできます。
Webアプリケーションがユーザー名をSQLクエリに含める前に検証を実行しない場合、意図的に不正な形式のユーザー名がプログラムによって誤って解釈される可能性があります。 たとえば、SQL クエリでは、通常、コマンド内のデータを示すために一重引用符 (') または二重引用符 (") を使用します。 たとえば、ユーザー名 user に基づいてデータベース内の顧客のレコードを検索するコマンドは、次のようになります。 SELECT * FROM customers WHERE username="user".
コマンドに対してSQLインジェクション攻撃を実行する攻撃者は、入力に二重引用符を含めて、データの一部をコードとして解釈する可能性があります。 たとえば、ユーザー名について考えてみます user" OR "1"="1.
SQL クエリに挿入すると、クエリは SELECT * FROM customers WHERE username="user" OR "1"="1".このクエリでは、ユーザー名がユーザー指定の値と一致するレコードを検索する代わりに、2 つの条件のいずれかに一致するレコードが返されます。 1 つ目は、目的のテストです ユーザー名="ユーザー"これは、ユーザーのレコードを返します。
2 番目の条件はテストです "1"="1".これは常に true であるため、データベース内のすべてのレコードが返されます。 これにより、攻撃者は他のユーザーに関する機密情報を抽出したり、認証をバイパスしたり、別のユーザーとして認証したりする可能性があります。
SQLインジェクションの種類
SQLi攻撃は、さまざまな目的を達成するために使用でき、さまざまな方法で実行できます。 SQLi には、主に次の 3 つのタイプがあります。
- インバンドSQLi: インバンド SQLi 攻撃では、HTTP 要求などの同じメディアを使用して攻撃を実行し、結果を収集します。 インバウンド SQLi 攻撃の 2 つの一般的な形式は、攻撃で使用するターゲット データベースに関する情報を提供するエラー メッセージを生成しようとするエラー ベースの SQLi 攻撃と、SQL UNION 演算子を使用して SQL SELECT ステートメントをマージするユニオン ベースの SQL です。
- ブラインドSQLi: ブラインドSQLi攻撃では、攻撃者は要求に基づいてサーバーからデータを受信しません。 代わりに、攻撃者はサーバーの動作に基づいて攻撃を変更します。 たとえば、入力が異なると、操作が成功または失敗したり、操作の実行にかかる時間に影響を与えたりする可能性があります。
- アウトオブバンドSQLi: 帯域外 SQLi 攻撃は、1 つのメディアに対して攻撃を実行し、別のメディアに対してデータを収集します。 この攻撃は、データベース サーバー上の特定の機能の可用性に依存しています。 たとえば、攻撃者は、データベース サーバが攻撃者の制御するサーバへの HTTP 要求または DNS 要求を強制的に生成できるかどうかに基づいて、SQLi 攻撃の成功を測定できます。
SQLIを防ぐ方法
SQLi攻撃は、SQLコマンドに信頼できないデータを使用する場合に、入力検証が不十分であることを悪用します。 多くのSQLi攻撃では、ユーザー入力内で一重引用符や二重引用符などの予期しない文字を使用します。
ユーザー提供のデータを SQL クエリに含める前に入力検証を実行すると、SQLi 攻撃の脅威を軽減するのに役立ちます。 たとえば、アプリケーションでは、英数字のユーザー名のみを許可するなど、ユーザー入力を特定の文字セットに制限したり、ユーザー入力に特定の文字が含まれないようにブロックしたりできます。 ただし、入力検証は重要ですが、SQLインジェクション攻撃から保護するには十分ではありません。 攻撃者は、予期しない文字の組み合わせを使用してブロックを回避することで、許可リストまたはブロックリストをバイパスできる可能性があります。
このため、企業は Webアプリケーションファイアウォール (WAF)または、理想的には、 Web アプリケーションおよび API 保護 (WAAP) を Web アプリケーションや SQL クエリを実行する API の前に配置します。 これらのソリューションは、SQLi を悪用しようとする悪意のある要求や、Webアプリケーション や API に対するその他の攻撃を特定してブロックするのに役立ちます。
チェック・ポイントによるSQLiの防止
SQLi 攻撃は、組織の アプリケーション セキュリティ (AppSec)です。 組織は、オンプレミスとクラウドの両方でインターネットに接続するアプリケーションとデータベースを保護できるセキュリティソリューションを必要としています。
チェック・ポイント チェック・ポイント AppSec provides automated WAAP capabilities that learn how an application works and prevents illegitimate and malicious requests from reaching vulnerable applications. To learn more about Check Point AppSec and its ability to protect against SQLi and other attacks, check out this eブック.あなたも大歓迎です 無料デモに申し込む to see the capabilities of Check Point AppSec for yourself.
