最近、新しいDjangoベースのAPIを起動しましたが、すぐにINVALID_Host_HEADER SOME RANDOM URLエラーが発生し始めました。これは、誰かが手動でホストヘッダーを変更したか、他のドメインを介して私のAPI。
これはおそらく基本的な質問ですが、ポイントは何ですか?彼らは何を達成しようとしていますか?おそらくそれは通常のMITM攻撃ではないでしょう。なぜなら、ミドルサーバーから出る途中でホストヘッダーを修正するのは十分簡単であり、そうしないからです。
プロキシを使用する必要はありません。 PowerShellモジュール SocketHttpRequest を作成しました。これにより、カスタムHTTPリクエストを宛先に送信できます。 DNSまたはローカルホストファイルを変更せずにアプリケーションをテストするために作成されました。
netcat
は別のオプションです: netcatを使用して手動でHTTP GETリクエストを行う方法?
彼らが達成しようとしていることに関して:
多くのインターネットスキャナーは、脆弱なWebサーバーを探すためにIPアドレス範囲をスキャンするだけです。ウェブサーバーが見つかると、宛先IPアドレスをホストヘッダー値として使用してリクエストを送信します(例:Host: 1.1.1.1
)。実際にホストされているWebサイトを特定するための追加の手順は行われません(たとえば、DNSの逆引き).
ときどき、不明なホストヘッダー値のリクエストが送信されます。これは、Webサーバーが「デフォルト」のWebサイトで応答するかどうかを確認するためのものです。これにより、任意のホストヘッダー値が許可され、回避する必要があります。これは、リンクやその他のタスクを生成するためにホストヘッダー値に依存する可能性があるWebアプリケーションおよびコンテンツ管理システム(CMS)にとって最大の懸念事項です。
例:Webサイトが任意のホストヘッダー値を許可するように構成されていて、すべてのリンクがその値に基づいて動的に生成されているとします。ドメイン
bad.com
をウェブサーバーのIPアドレスに登録します。bad.com
にアクセスすると、bad.com
に解決されるすべてのリンクが含まれたWebサイトが表示されます。
場合によっては、Host:
値の変更が、セキュリティフィルタリングをバイパスまたは列挙しようとする試みです。これは、Webアプリケーションファイアウォール(WAF)、ロードバランサー、Webサーバー、またはアプリケーション自体内のモジュールである可能性があります。
これに対する最善の修正は2つあります。
Host
値を使用し、この値を提供するサーバーに依存しないでください。この多層防御により、設定ミスのリスクが軽減されます。