ブラインドSQLインジェクションから保護する方法

データベースの世界における主要な問題の1つは、SQLインジェクションです。これは、OWASPでさえ、Webアプリケーションを標的とする最大の脅威として継続的にリストされているほどに蔓延しています。SQLインジェクションには多くの種類があり、そのうちの1つがブラインドSQLインジェクションです。このブログ投稿では、このような攻撃がどれほど有害であるかについて説明します。

SQLインジェクションとは何ですか?そのカテゴリーは何ですか?

以前のブログ投稿のいくつかですでに説明したように、SQLインジェクションはデータベースに向けられた主な攻撃です。ユーザーから提供された入力がサニタイズされて適切にデータベースに転送されない場合、アプリケーションはSQLインジェクションに対して脆弱です。対処しました。

SQLインジェクションのカテゴリは、いくつかの重要な理由から理解することが非常に重要です。

  • さまざまなタイプのSQLインジェクションは、さまざまな方法でWebアプリケーションに影響を与えます。
  • 一部のタイプのSQLインジェクションは、他のタイプよりも簡単に防ぐことができます。
  • 一部のタイプのSQLインジェクションは、Webアプリケーションの機能に直接依存します(たとえば、ブラインドSQLインジェクション攻撃が成功した結果は、Webアプリケーションがエラーを表示しているかどうかに直接依存します)。
  • 一部のタイプのSQLインジェクション攻撃には、サブタイプがあります(時間ベースのブラインドSQLインジェクションを考えてください)。これらのサブタイプは、特定の要因に直接依存しているため、悪意のある当事者にとっても取引を成立させたり、破ったりする可能性があります。場合、制御することはできません、そしてそれでそれらは直接です—時間。

SQLインジェクションには、次の2つのカテゴリがあります。

ご覧のとおり、SQLインジェクションに該当するカテゴリはそれほど多くありませんが、従来のSQLインジェクションが最も頻繁に使用されていますが、従来のSQLインジェクション攻撃が機能しない場合、攻撃者は通常SQLのブラインドサイドに目を向けます。ブラインドSQLインジェクションでアプリケーションを攻撃します。

ブラインドSQLインジェクションの王国

アプリケーションを城と考えてください。これは少なくとも少し奇妙に思えるかもしれませんが、我慢してください。ここで、Webアプリケーションを城として想像してください。終わり?さて、槍を持った盲目の兵士の束がそれを攻撃していて、彼らの槍が城の要塞化された防御をしばしば逃していると想像してください。あなたはどう思いますか—槍を持った盲目の兵士があなたの城の防御を行うためにどれくらいの時間を割く必要がありますか?しばらく時間がかかりますが、兵士たちはやがて通り抜​​けます。それは本当です—そして兵士が通り抜けると、あなたがあなたの城に保存する宝物(あなたのウェブアプリケーション内のデータ)はサボテンです—彼らはすべてを盗みます。

兵士は設備が整っており、盲目であっても、最終的には防御を実行します—ああ、いや!これは、現実の世界でブラインドSQLインジェクションがどのように機能するかとほぼ同じなので、別の例を挙げましょう。

  1. 攻撃者は、特定のパラメータの後に一重引用符を追加することにより、Webアプリケーションがブラインド形式のSQLインジェクションに対して脆弱であることに気付きます。その後、Webアプリケーションはエラーを返します。
  2. 攻撃者はSQLクエリを作成し続けます—エラーを返すものはありません。ただし、あるタイプのクエリを実行すると、別のタイプのクエリを実行した後、Webアプリケーション内のデータが画面に表示されることにすぐに気付きます。データは消えます。「あはは!」—攻撃者は考えます。「ゴッチャ。ブラインドSQLインジェクションの欠陥があります。」

すでにお気づきかもしれませんが、ブラインドSQLインジェクションは、データベースにクエリの形式で「質問」を求め、Webアプリケーションの応答に基づいてそれらが真か偽かを判断しようとする攻撃です。ブラインドSQLインジェクションは、次のようなクエリを実行することで最も頻繁に検出されます。

Webアプリケーションが「肯定的な」応答を返す場合(つまり、Webページで目に見える違いを返す場合)、Webアプリケーションはそのような攻撃を受けやすくなりますが、アプリケーションが無関心である場合は、おそらくそうではありません。最初のシナリオでは、攻撃者はデータベースに問題があることを認識し、防御をさらに突破しようとします。そして、ゲームが始まります—攻撃者は、Webアプリケーションがどのような応答を返すかを認識しようとしています。クエリは結果のあるページを返します— OK、彼はさらに調査し、クエリは空白のページを返します—うーん…彼はクエリを変更して再試行します。そのため、悪意のある当事者が関心を持つすべてのデータがデータベースから抽出されるまで、ゲームは続行されます。はい、そのような種類のクエリ長い時間がかかります(これは、ブラインドSQLインジェクションが最もよく知られていることの1つです)が、悲しいことに、システムに危害を加えることを目的とした攻撃者を阻止することはできないことを覚えておいてください。可能な限り、またはすべてのデータを盗みます。

一部のWebアプリケーションは、GETまたはPOSTパラメーターでパーツをフィルター処理する場合もあります。これは、使用されている一重引用符または二重引用符を「キャッチ」する可能性があることを意味しますが、これはパズルの1つのピースにすぎません。このような機能は、多くの場合、Webアプリケーションファイアウォールタイプの機能の一部です。WAF(Webアプリケーションファイアウォールの略)については、別の記事ですでに説明しているので、あまり詳しくは説明しませんが、次の点に注意してください。 Webアプリケーションファイアウォールは、サービス拒否からSQLインジェクションに至るまで、あらゆる種類の攻撃を阻止します。世界で最大かつ最速のデータ侵害検索エンジンの1つであるBreachDirectoryのWebサイトにアクセスすると、Webアプリケーションファイアウォールの実例を見つけることができますが、今のところ、トピックに戻りましょう。

ブラインドSQLインジェクションの種類

ブラインドSQLインジェクションには、ブールベースと時間ベースの2種類があります。ブールベースのブラインドSQLインジェクションは、特定のSQLクエリをデータベースに送信して、クエリがアプリケーションの応答を調べて結果を返すかどうかを判断することに依存していTRUEますFALSE。一方、時間ベースのSQLインジェクションは、時間に依存しています。ブラインドタイムベースのSQLインジェクション用のWebアプリケーションは、応答を返す前にデータベースを数秒待機させます。指定された正確な秒数が経過した後に応答が返された場合、攻撃者はアプリケーションがアプリケーションであると判断できます。ブラインドの時間ベースのSQLインジェクションの影響を受けやすい。2つのタイプの主な違いと類似点は次のとおりです。

ブラインドSQLインジェクションからの保護

ブラインドタイプのSQLインジェクションからの保護は、一般的な信念に反して、多くのスキルや労力を必要としません。基本的なセキュリティ対策を使用して防ぐことができます。はい、それはそれと同じくらい簡単です!PHPでPreparedDataObjects(PDO)を使用することで(ユーザーから提供された入力とクエリの残りの部分を分割するため、どのような種類のSQLインジェクションも不可能です)、自動テストソリューションを使用してそれを実現できます。アプリケーションがSQLiの影響を受けやすいかどうか、またはもちろん、ホワイトリストセキュリティコントロールを使用します。開発者として、データと何らかの形で相互作用するあらゆる種類のパラメータをフィルタリングおよびサニタイズする習慣が必要です。そうすることで、あらゆる種類のSQLインジェクション攻撃やその他の種類のセキュリティ問題から保護することで、Webアプリケーションを次のセキュリティレベルに置くことができます。

Webアプリケーションを次のレベルのセキュリティに設定したら、自分のアカウントのセキュリティにも注意を払う必要があります。BreachDirectoryを検索して、アカウントが危険にさらされているかどうかを確認し、与えられたアドバイスに従って行動することができます。私たちに。そうすれば、アカウントも安全になります。勝つ—勝つ!

概要

ブラインドSQLインジェクションはSQLインジェクションの一種であり、攻撃者はWebアプリケーションがどのように「考える」かを理解できないため、代わりに、Webアプリケーションが提供する出力に依存するか、どちらの方法に応じて時間に依存する必要があります(ブールベースまたは時間ベース)が使用されています。ブールベースのSQLインジェクションに依存する場合、攻撃者はWebアプリケーションが通常とは異なって見える可能性があるという事実を信頼しますが、時間ベースのSQLインジェクションを使用する場合、攻撃者は時間に大きく依存します。

攻撃者が使用するSQLインジェクションのタイプに関係なく、データを取得するための迅速な方法を攻撃者に提供するタイプはありません。攻撃者は、文字通り数時間、数日、さらには数か月かけて関心のあるデータを取得する可能性があります。攻撃は成功裏に達成され、通常はダークウェブで数千ドルで他の悪意のある当事者に販売され、このサイクルが続きます。

ブラインドSQLインジェクションから保護するために、安全なコーディング手法を採用し、ユーザー入力をデータベースに直接転送しないようにし、Webアプリケーションでエラーが返される方法を改善してください。

さらに、 BreachDirectoryなどの既知のデータ侵害検索エンジンを介して検索を実行し、昼夜を問わず、次回までデータが安全であることを確認してください。次のブログでお会いしましょう! 

ソース:https ://betterprogramming.pub/blind-sql-injection-threat-or-childs-play-6080d955a933

#sql 

What is GEEK

Buddha Community

ブラインドSQLインジェクションから保護する方法

ブラインドSQLインジェクションから保護する方法

データベースの世界における主要な問題の1つは、SQLインジェクションです。これは、OWASPでさえ、Webアプリケーションを標的とする最大の脅威として継続的にリストされているほどに蔓延しています。SQLインジェクションには多くの種類があり、そのうちの1つがブラインドSQLインジェクションです。このブログ投稿では、このような攻撃がどれほど有害であるかについて説明します。

SQLインジェクションとは何ですか?そのカテゴリーは何ですか?

以前のブログ投稿のいくつかですでに説明したように、SQLインジェクションはデータベースに向けられた主な攻撃です。ユーザーから提供された入力がサニタイズされて適切にデータベースに転送されない場合、アプリケーションはSQLインジェクションに対して脆弱です。対処しました。

SQLインジェクションのカテゴリは、いくつかの重要な理由から理解することが非常に重要です。

  • さまざまなタイプのSQLインジェクションは、さまざまな方法でWebアプリケーションに影響を与えます。
  • 一部のタイプのSQLインジェクションは、他のタイプよりも簡単に防ぐことができます。
  • 一部のタイプのSQLインジェクションは、Webアプリケーションの機能に直接依存します(たとえば、ブラインドSQLインジェクション攻撃が成功した結果は、Webアプリケーションがエラーを表示しているかどうかに直接依存します)。
  • 一部のタイプのSQLインジェクション攻撃には、サブタイプがあります(時間ベースのブラインドSQLインジェクションを考えてください)。これらのサブタイプは、特定の要因に直接依存しているため、悪意のある当事者にとっても取引を成立させたり、破ったりする可能性があります。場合、制御することはできません、そしてそれでそれらは直接です—時間。

SQLインジェクションには、次の2つのカテゴリがあります。

ご覧のとおり、SQLインジェクションに該当するカテゴリはそれほど多くありませんが、従来のSQLインジェクションが最も頻繁に使用されていますが、従来のSQLインジェクション攻撃が機能しない場合、攻撃者は通常SQLのブラインドサイドに目を向けます。ブラインドSQLインジェクションでアプリケーションを攻撃します。

ブラインドSQLインジェクションの王国

アプリケーションを城と考えてください。これは少なくとも少し奇妙に思えるかもしれませんが、我慢してください。ここで、Webアプリケーションを城として想像してください。終わり?さて、槍を持った盲目の兵士の束がそれを攻撃していて、彼らの槍が城の要塞化された防御をしばしば逃していると想像してください。あなたはどう思いますか—槍を持った盲目の兵士があなたの城の防御を行うためにどれくらいの時間を割く必要がありますか?しばらく時間がかかりますが、兵士たちはやがて通り抜​​けます。それは本当です—そして兵士が通り抜けると、あなたがあなたの城に保存する宝物(あなたのウェブアプリケーション内のデータ)はサボテンです—彼らはすべてを盗みます。

兵士は設備が整っており、盲目であっても、最終的には防御を実行します—ああ、いや!これは、現実の世界でブラインドSQLインジェクションがどのように機能するかとほぼ同じなので、別の例を挙げましょう。

  1. 攻撃者は、特定のパラメータの後に一重引用符を追加することにより、Webアプリケーションがブラインド形式のSQLインジェクションに対して脆弱であることに気付きます。その後、Webアプリケーションはエラーを返します。
  2. 攻撃者はSQLクエリを作成し続けます—エラーを返すものはありません。ただし、あるタイプのクエリを実行すると、別のタイプのクエリを実行した後、Webアプリケーション内のデータが画面に表示されることにすぐに気付きます。データは消えます。「あはは!」—攻撃者は考えます。「ゴッチャ。ブラインドSQLインジェクションの欠陥があります。」

すでにお気づきかもしれませんが、ブラインドSQLインジェクションは、データベースにクエリの形式で「質問」を求め、Webアプリケーションの応答に基づいてそれらが真か偽かを判断しようとする攻撃です。ブラインドSQLインジェクションは、次のようなクエリを実行することで最も頻繁に検出されます。

Webアプリケーションが「肯定的な」応答を返す場合(つまり、Webページで目に見える違いを返す場合)、Webアプリケーションはそのような攻撃を受けやすくなりますが、アプリケーションが無関心である場合は、おそらくそうではありません。最初のシナリオでは、攻撃者はデータベースに問題があることを認識し、防御をさらに突破しようとします。そして、ゲームが始まります—攻撃者は、Webアプリケーションがどのような応答を返すかを認識しようとしています。クエリは結果のあるページを返します— OK、彼はさらに調査し、クエリは空白のページを返します—うーん…彼はクエリを変更して再試行します。そのため、悪意のある当事者が関心を持つすべてのデータがデータベースから抽出されるまで、ゲームは続行されます。はい、そのような種類のクエリ長い時間がかかります(これは、ブラインドSQLインジェクションが最もよく知られていることの1つです)が、悲しいことに、システムに危害を加えることを目的とした攻撃者を阻止することはできないことを覚えておいてください。可能な限り、またはすべてのデータを盗みます。

一部のWebアプリケーションは、GETまたはPOSTパラメーターでパーツをフィルター処理する場合もあります。これは、使用されている一重引用符または二重引用符を「キャッチ」する可能性があることを意味しますが、これはパズルの1つのピースにすぎません。このような機能は、多くの場合、Webアプリケーションファイアウォールタイプの機能の一部です。WAF(Webアプリケーションファイアウォールの略)については、別の記事ですでに説明しているので、あまり詳しくは説明しませんが、次の点に注意してください。 Webアプリケーションファイアウォールは、サービス拒否からSQLインジェクションに至るまで、あらゆる種類の攻撃を阻止します。世界で最大かつ最速のデータ侵害検索エンジンの1つであるBreachDirectoryのWebサイトにアクセスすると、Webアプリケーションファイアウォールの実例を見つけることができますが、今のところ、トピックに戻りましょう。

ブラインドSQLインジェクションの種類

ブラインドSQLインジェクションには、ブールベースと時間ベースの2種類があります。ブールベースのブラインドSQLインジェクションは、特定のSQLクエリをデータベースに送信して、クエリがアプリケーションの応答を調べて結果を返すかどうかを判断することに依存していTRUEますFALSE。一方、時間ベースのSQLインジェクションは、時間に依存しています。ブラインドタイムベースのSQLインジェクション用のWebアプリケーションは、応答を返す前にデータベースを数秒待機させます。指定された正確な秒数が経過した後に応答が返された場合、攻撃者はアプリケーションがアプリケーションであると判断できます。ブラインドの時間ベースのSQLインジェクションの影響を受けやすい。2つのタイプの主な違いと類似点は次のとおりです。

ブラインドSQLインジェクションからの保護

ブラインドタイプのSQLインジェクションからの保護は、一般的な信念に反して、多くのスキルや労力を必要としません。基本的なセキュリティ対策を使用して防ぐことができます。はい、それはそれと同じくらい簡単です!PHPでPreparedDataObjects(PDO)を使用することで(ユーザーから提供された入力とクエリの残りの部分を分割するため、どのような種類のSQLインジェクションも不可能です)、自動テストソリューションを使用してそれを実現できます。アプリケーションがSQLiの影響を受けやすいかどうか、またはもちろん、ホワイトリストセキュリティコントロールを使用します。開発者として、データと何らかの形で相互作用するあらゆる種類のパラメータをフィルタリングおよびサニタイズする習慣が必要です。そうすることで、あらゆる種類のSQLインジェクション攻撃やその他の種類のセキュリティ問題から保護することで、Webアプリケーションを次のセキュリティレベルに置くことができます。

Webアプリケーションを次のレベルのセキュリティに設定したら、自分のアカウントのセキュリティにも注意を払う必要があります。BreachDirectoryを検索して、アカウントが危険にさらされているかどうかを確認し、与えられたアドバイスに従って行動することができます。私たちに。そうすれば、アカウントも安全になります。勝つ—勝つ!

概要

ブラインドSQLインジェクションはSQLインジェクションの一種であり、攻撃者はWebアプリケーションがどのように「考える」かを理解できないため、代わりに、Webアプリケーションが提供する出力に依存するか、どちらの方法に応じて時間に依存する必要があります(ブールベースまたは時間ベース)が使用されています。ブールベースのSQLインジェクションに依存する場合、攻撃者はWebアプリケーションが通常とは異なって見える可能性があるという事実を信頼しますが、時間ベースのSQLインジェクションを使用する場合、攻撃者は時間に大きく依存します。

攻撃者が使用するSQLインジェクションのタイプに関係なく、データを取得するための迅速な方法を攻撃者に提供するタイプはありません。攻撃者は、文字通り数時間、数日、さらには数か月かけて関心のあるデータを取得する可能性があります。攻撃は成功裏に達成され、通常はダークウェブで数千ドルで他の悪意のある当事者に販売され、このサイクルが続きます。

ブラインドSQLインジェクションから保護するために、安全なコーディング手法を採用し、ユーザー入力をデータベースに直接転送しないようにし、Webアプリケーションでエラーが返される方法を改善してください。

さらに、 BreachDirectoryなどの既知のデータ侵害検索エンジンを介して検索を実行し、昼夜を問わず、次回までデータが安全であることを確認してください。次のブログでお会いしましょう! 

ソース:https ://betterprogramming.pub/blind-sql-injection-threat-or-childs-play-6080d955a933

#sql