
ロードバランサーとは何ですか? これは、サーバー間でアプリケーショントラフィックを分散するネットワークデバイスであり、指定したルールに従ってその特性を制御および変更することもできます。 Webアプリケーションを使用する場合、同じサーバーがクライアントセッションを提供する必要があります。 これを行うために、BIG-IPバランサーは、クライアントにサービスを提供する特定のWebサーバーのアドレスを含むセッション情報を監視および保存します。 この情報は、1つのセッションで同じWebサーバーにクライアント要求を送信するために使用されます。
BIG-IPは、Cookieの永続性、ハッシュの永続性、宛先/ソースアドレスの永続性、SSLの永続性など、セッションをサポートするためのいくつかの方法を提供します。 HTTPトラフィックの場合、ほとんどの場合、Cookieの永続化メソッドが使用されます。 これには、HTTP Cookie挿入、HTTP Cookieリライト、HTTP Cookieパッシブ、およびCookieハッシュの4つのタイプが含まれます。 HTTP Cookie挿入のタイプが最も一般的です。これは、他とは異なり、各Webサーバーが特定のCookieを送信する必要がなく、バランサーで自動的に生成されるためです。
クライアントに送信されたCookieに含まれる情報を見てみましょう。

Cookie名は、BIGipServer <プール名>として形成されます。 クライアントは、BIG-IPバランサーの使用とサーバープールの名前に関する情報をすぐに受信します。
Cookieを見てみましょう。 サーバーのIPアドレス(4225695754)とそのポート(20480)の逆10進表現が含まれています。
IPアドレスとポートを使い慣れた形式に復元するには、2つの方法があります。
1. IPアドレスを処理する10進Cookie値を取得し、16進形式FBDF000Aに変換します。
バイトを分割し、逆の順序で並べます:0A00DFFB。
バイトを10進形式に変換します。各バイトはIPアドレスのオクテット10.0.223.251を開きます。
同じ原理で、ポートをデコードします(2バイト値が含まれています):
20480→5000→0050→80
2.コマンドラインで
“ping 4225695754”
入力し
“ping 4225695754”
。 出力には、IP:251.223.0.10があります。
最後から最初までオクテットを書くと、10.0.223.251が得られます。
ポート値
ping 20480
に対しても同様の操作を実行できます。
値は0.0.80.0になります。
ポートは2バイトで書き込まれるため、最初の2つの値は省略します。 2番目から2番目までの2つの極端なオクテットの値を書き込むと、080が得られます。
したがって、サービスを提供しているサービスのアドレス10.0.223.251:80を受け取りました。
プールメンバーがデフォルトルートドメインの一部ではない場合、異なるエンコードタイプが使用されます。

内容:
- rd524-ルートドメイン524は、ルートドメインの識別子を示し、
- ac174810-WebサーバーのIPアドレスの16進数表現-172.23.72.16、
- 5080は実際のWebサーバーポートです。
セッションを終了し(デフォルトではブラウザが閉じられると期限切れになります)、サイトに再度アクセスすると、プール内のすべてのサーバーに関する情報を取得できます。 これは、データセンターの内部構造に関する情報の完全に不必要な開示です。
前述のように、負荷を正しく分散するためにバランサーがインストールされます。 ただし、Cookie値を操作することで、攻撃者はプールから接続するサーバーを選択し、指定された負荷分散アルゴリズムをバイパスできます。
実際にどのように見えるか見てみましょう:
1. Cookieの値を、必要な対応するサーバーに変更します。

2.サーバーに戻り、バランサーが前の手順でCookieに設定した値に対応するサービスにリダイレクトすることを確認します。

合理的な質問が発生します:自分を守る方法は?
BIG-IPはCookie暗号化をサポートしています。 暗号化は192ビットAES暗号で実行され、その後、CookieはBase64アルゴリズムを使用してエンコードされます。
暗号化されたCookieの例:

Cookie暗号化を使用すると、攻撃者はWebサーバーのIPアドレスに関する情報を取得できなくなります。 ただし、これは特定のサーバーに対するDoS攻撃の可能性から保護するものではありません。 事実、暗号化されたCookieはクライアントに関連付けられていないため、Cookieを使用して、複数のソース(ボットネットなど)からサーバーを攻撃することができます。
この記事の冒頭のチャートは、BIG-IPバランサーとセッションのCookieサポートを使用して、100のランダムなWebサイトから収集された統計を示しています。 これらの統計によると、これらのサイトのほとんどの所有者は、内部インフラストラクチャに関するデータを隠すための追加のセキュリティ設定を気にしません。
投稿:キリルプザンコフ、ポジティブリサーチセンター