web-dev-qa-db-ja.com

HTTPリクエストのソースIPを信頼できますか?

私が理解している限り、スプーフィングされたIPアドレスを使用してHTTPリクエストを発行しようとすると、TCPハンドシェイクが失敗するため、HTTPリクエストを完了することはできません。SYNサーバーからの/ ACKが悪質なクライアントに到達しない...

...ほとんどの場合。しかし、今は主にこれらの4つのケースを無視しましょう:
-中間者攻撃(MITM)
-悪意のあるクライアントがWebサーバーのネットワークを制御する場合
-悪意のあるクライアントが自身のローカルネットワークで別のIPを偽装する場合
- BGP攻撃

次に、本当にHTTPリクエストのIPアドレスを信頼できますか?

背景:IPアドレスとリソース使用量のマップを作成し、リソースを消費しすぎるIPアドレスをブロックすることを考えています。しかし、たとえば、Webサーバーのresource-usage-byになるように、(偽のIPで成功したHTTP要求を発行することによって)無限の数のIPアドレスを偽造する方法があるかどうか疑問に思っています-IP-buffersが大きくなり、メモリ不足エラーが発生します。

(うーん、おそらく悪質なインターネットルーターは非常に多くの要求を偽造する可能性があります。しかし、それらは悪意のあるものではありません。(これはMITM攻撃でしょうか?それで、私は主に無視します、上記))

41
KajMagnus

はい(クライアントがスプーフィングされたIPでハンドシェイクの戻りを傍受できることを無視しているという前提で)正しく実行した場合。 HTTP要求はTCPを介して行われます。ハンドシェイクが完了するまで、WebサーバーはHTTPリクエストの処理を開始しません。ランダムなユーザーがハンドシェイクの終わりになりすまそうとすることを認めました。しかし、サーバーが生成したACKを推測する必要があるため、成功する確率は2 ^ 32分の1(約40億)にすぎません。

Ladadadadaがコメントしたので、WebアプリケーションでリモートIPアドレスの間違った値を取得していないことを確認してください。 IPデータグラムヘッダー からのIPアドレスが必要です(具体的には、送信元IPアドレス)。 X-Forwarded-For/X-Real-IP のような値は、HTTPヘッダーに設定されているので簡単に偽造できません。一部のIPアドレスをスプーフィングして、確実にテストします。例えば ブラウザプラグイン または手動でtelnet yourserver.com 80

これらのフィールドの目的は、Webプロキシ(キャッシュコンテンツをより高速に提供する場合がある)が、プロキシIPアドレス(何百ものユーザーの場合がある)ではなく、ユーザーの実際のIPアドレスとWebサーバーに通信できるようにすることです。ただし、このフィールドは誰でも設定できるため、信頼すべきではありません。

23
dr jimbob

HTTPリクエストのソースIPを信頼できますか?

HTTP要求の送信元IPアドレスが、要求を生成したTCP接続の送信元アドレスであることが合理的に保証されます。

いつIPアドレスを信頼するかは、複雑なコンテキスト固有の質問ですが、それは実際に求めていることではありません。

アプリケーションレイヤーでのIPごとのレート制限の使用/実装の影響、およびサービス拒否攻撃に対するその他の脆弱性について懸念していますか?

そうすることで、アプリレイヤーで追加の脆弱性が発生するのではないかと思います

それは、ポリシーとテクノロジーの両方の実装に完全に依存します。

  • 消費をレート制限したいのはどのようなリソースですか?
  • このレート制限を作成して何を達成したいですか?
  • どのくらいの期間、会計を実行しますか?
  • 制限をどこに適用しますか?
  • IPアドレスはレート制限の最適なキーですか?
  • 過剰摂取の考えられる理由は何ですか?
  • 過剰消費の場合、ユーザーエクスペリエンスはどうあるべきですか?

これらの質問への回答によっては、レート制限をサービスインフラストラクチャの別の場所、たとえば専用ファイアウォール、ローカルファイアウォール。または、アクセスが認証された場合、認証されたクレデンシャルはレートアカウンティングのより良いキーであり、境界が定義されます。

2
MattH

TCPハンドシェイクを続行するつもりがない場合に、偽装されたSYNをHTTPサーバーに発行するポイントは何ですか?(おそらく偽造されていない限り)WebサーバーはHTTPリクエストを認識しません。クライアントはSYN/ACKを取得し、TCPセッションを確立し続け、HTTPリクエストを送信します。

データベースをディスクに保存し、高速な検索のために(ツリーのように)巧妙に構造化します。

クライアントがスプーフィングされているかどうかは、本当に違いがありますか?スプーフィングされていてもいなくても、振る舞いを誤ると誤動作します。

Webサーバーの観点からは、リモートIPを真のリモートIPと見なします。

1
MattBianco