web-dev-qa-db-ja.com

「ルーズソースとレコードルート」はソースアドレスをドロップしますか?

人が「ルーズなソースおよびレコードルート」を使用し、宛先アドレスがルーティングが発生するアドレスのリストの最後の前に置かれると、ソースIPv4アドレスは失われますか?

RFC791 からは、リストの最初の値が送信元アドレスであるか、リストの最初の値が最初のホップであるかは明確ではありませんでした。

Additionally

ルーティングが「緩い」ので、攻撃者が自分のアドレスも、接続しているルーターのアドレスもパケットに含めることを仮想的に許可することはできないのでしょうか?

And... by extension...

誰かが信頼できるホストのIPを偽装してファイアウォールを迂回したり、インターネットに接続されたボックスがDoS/DDoS攻撃の無意識の部分として機能することを許可したりできません(ホストの送信元アドレスでパケットを送信することにより)攻撃される、攻撃者が到達することを知っているアドレスへ、攻撃者が応答を送信することを知っているサービスのために)?

そうでない場合、この種のことはどのように防止されますか?

(私はこれらがすべて愚かな質問である可能性を完全に受け入れています。私はn00bであることを知っています。)

4
root

@ mr.spuraticからのメッセージを完了するには、RFC 791からのテキストは次のとおりです。

  Loose Source and Record Route

    +--------+--------+--------+---------//--------+
    |10000011| length | pointer|     route data    |
    +--------+--------+--------+---------//--------+
     Type=131

    The loose source and record route (LSRR) option provides a means
    for the source of an internet datagram to supply routing
    information to be used by the gateways in forwarding the
    datagram to the destination, and to record the route
    information.

    The option begins with the option type code.  The second octet
    is the option length which includes the option type code and the
    length octet, the pointer octet, and length-3 octets of route
    data.  The third octet is the pointer into the route data
    indicating the octet which begins the next source address to be
    processed.  The pointer is relative to this option, and the
    smallest legal value for the pointer is 4.

    A route data is composed of a series of internet addresses.
    Each internet address is 32 bits or 4 octets.  If the pointer is
    greater than the length, the source route is empty (and the
    recorded route full) and the routing is to be based on the
    destination address field.

    If the address in destination address field has been reached and
    the pointer is not greater than the length, the next address in
    the source route replaces the address in the destination address
    field, and the recorded route address replaces the source
    address just used, and pointer is increased by four.

    The recorded route address is the internet module's own internet
    address as known in the environment into which this datagram is
    being forwarded.

    This procedure of replacing the source route with the recorded
    route (though it is in the reverse of the order it must be in to
    be used as a source route) means the option (and the IP header
    as a whole) remains a constant length as the datagram progresses
    through the internet.

    This option is a loose source route because the gateway or Host
    IP is allowed to use any route of any number of other
    intermediate gateways to reach the next address in the route.

    Must be copied on fragmentation.  Appears at most once in a
    datagram.

「ソースアドレス」という表現を再利用すると、混乱が生じる可能性があります。 IPパケットには送信元アドレスフィールド宛先アドレスフィールドがあり、これらはこのオプションの一部ではありません。オプションの内容(上の図のroute data)はIPv4アドレスのシーケンスで構成され、pointerフィールドはそのリスト内のインデックスです。

パケットが最初に送信されたとき、送信者は(このオプションにより)指定されたルーターのシーケンスを通過するようにパケットに指示することを望みます。呼びましょうi1i2 ... iこれらのルーターのIPアドレス。 let dはパケットの最終宛先であり、sは送信者自身のアドレスです。パケットは、リストにない中間マシンを通過することが許可されます(それが「ルーズソースとレコードルート」と「厳密なソースとレコードルート」の違いです)。

ルーターは本来、2つ(またはそれ以上)のローカルネットワークの間にあり、それぞれに1つのIPアドレスを持っています。したがって、アドレスikルーターの場合kはルーターのアドレスの1つです。パケット送信者は、パケットがik

最初はsource address fieldsに設定されています。 宛先アドレスフィールドiに設定されます1;ルーズソースとレコードオプションの内容はi1i2、... idpointerフィールドはi1

パケットがルーター1に到達すると、ルーターはdestination field addressが自身のIPの1つと一致することに気付きます。次に、以下を実行します。destination field addressをリスト内の次のIPに置き換えます(i2)次に、自身のアドレスをリストに記録します。ある場所i1、ルーター1 puts o1oとは1?これは、ルーター1が使用するoutputアドレスです。これは、次にパケットが送信される他のローカルネットワーク上のアドレスです。これはルータのアドレスです1と同様にi1ですが、「別の面」にあります。 pointerフィールドもインクリメントされるため、-iを含むスロットを指すようになります。2

このプロセスは、最後のアドレスに到達するまで続きます。すなわち、ルータnに達したとき、-destination address fielddと書き、-oと書きました。値の上iオプションで。最終的な宛先ホストに到達すると、オプションにはo1o2、... od。しかし、送信元アドレスフィールド(これはオプションではありません)は、プロセス全体を通じて変更されません。 s(初期ソースアドレス)がまだ含まれています。

ソースの概念recordingは、宛先ホストが独自の「ルーズソースとレコードルート」を使用してパケットを送信することでソースホストに応答し、記録されたアドレスを使用してパケットが同じパス、逆順。応答パケットには、最初は次のものが含まれます。

  • 送信元アドレスフィールド:d
  • 宛先アドレスフィールド:o
  • ゆるいソースとルートコンテンツを記録:oon-1、... o1s

回答がパスを逆順にたどるので、各ルーターの「出力アドレス」は「入力アドレス」になります。そしてルーターは[ik戻る途中のアドレス。等々。

このオプションの意味は何ですか?概念的には、これは Network Address Translation ;を置き換えます。または、より正確には、ルートオプション自体に含まれるいくつかの状態情報を使用する「アドレス変換」を使用してNATを実装します。

最初の送信者[〜#〜] a [〜#〜]にアドレス10.0.7.34(ローカルネットワークのプライベートアドレス)があり、外部ホストに連絡したいと想像してみてください[ 〜#〜] b [〜#〜]アドレス237.23.56.171を使用します。送信者は「出口ゲートウェイ」を知っています[〜#〜] g [〜#〜]これはプライベートIP(10.0.1.1)を持っていますが、「インターネット上」にある外部IPも持っています(たとえば、243.157.4.28)。したがって、送信者はルーズソースとレコードルートオプションを使用して、パケットが10.0.1.1を通過する必要があることを示します。次に、宛先ホストは10.0.7.34(宛先ホストには意味のないIPアドレス)から送信されたパケットを受信しますが、243.157.4.28を通過したことを記録します(これは、「出口ゲートウェイ"パケットが通過したときにオプションに記録されます)。

[〜#〜] b [〜#〜]ホストは同じオプションを使用して[〜#〜] a [〜#〜]に応答し、パッセージを示します〜243.157.4.28[〜#〜] g [〜#〜]の外部向けアドレス)。この回答の最終的な宛先アドレスは10.0.7.34であり、これは[〜#〜] b [〜#〜](これは別のネットワークのプライベートアドレスです)には意味がありませんが、パケットは最初に[〜#〜] g [〜#〜]に移動し、-[〜#〜] g [〜#〜]10.0.7.34に関するすべてを知っています。

このようにして、プライベートネットワーク内の何百万ものマシンが[〜#〜] g [〜#〜]の外部アドレスを「共有」し、すべてが外部サーバーにアクセスできるようになります。 2つのゲートウェイを経由するソースルーティングを使用して、個別のプライベートネットワーク上にある2つのホスト間の接続を行うこともできます。

NATを実行する場合、実行する変換を記憶している状態がどこかにあるはずです。 NATで一般的に使用されるため、この状態はルーター内のテーブルです[〜#〜] g [〜#〜][〜# 〜] g [〜#〜]は、参照を維持するためにports(UDP/TCPの概念)を使用しますが、実際の状態、つまり、使用および置き換えが必要なアドレスパケットに書き込まれたものは[〜#〜] g [〜#〜]のRAMにあります。ルースソースとレコードルートオプションを使用すると、その状態をパケット自体に入れることができるため、 [〜#〜] g [〜#〜]何も使用せずに数百万の組み合わせを処理するRAM(IPv4が設計された場合、RAMは非常に高価でした; 1981年にRFC 791が書かれたとき、64 kBはhuge)でした。

ただし、状態をパケットに入れると、状態が外部から変更される可能性があります。 1981年、インターネット上の誰もが協力していた。 2013年には悪い人がいます。邪悪な人々。 攻撃者。これらの人々は、ソースとレコードルートオプションを使用して、パケットを予期しないルートを通過させ、巧妙にファイアウォールをかわす可能性があります。ファイアウォールを実装および構成して、ソースおよびレコードルートを使用するパケットを検査およびブロックするのはpossibleですが、さらにthinkingが必要です。システム管理者はそれを好まない。彼らは通常のNATすべての状態がtheirマシン上にある場合に問題を簡単にするため、マシンを優先します。そのため、ソースルーティングは1990年代に非推奨になりました。IPv6設計者はそれを復活させます、しかしそれはすぐにそれを殺すことを好むファイアウォールベンダーとシステム管理者からのサポートの同じ欠如に遭遇しています。

5
Tom Leek

誤解がある場合に備えて、それは " lose "ではなく、 " loose "、のように、リラックスした方法で指定されますIPヘッダーの送信元アドレスはこれによって変更されません(宛先アドレスは途中で変更される可能性があります)。このコンテキストでは、単に「送信元アドレス」ではなく、「送信元指定アドレス」を選択的に読み取ることが役立つと思います。

RFCセクションをもう一度読みましたが、送信システムのアドレスをオプションの最初のフィールドに配置するかどうかは明確ではありません。禁止も必須もありません。完了した場合、ポインタは後続の(ネクストホップ)エントリを指す必要があるため、変更されません。ホストがゲートウェイ(マルチホーム)である場合、それが存在する必要があると主張するかもしれません。

これは、ルートが過剰に指定されている、ルートが使い果たされる前にパケットが宛先に到達することを示唆していると私が考えるケースをカバーしています。受信ホストはソースルートオプションを処理すべきではありません。ただし、それがゲートウェイの場合、パケットは転送されますが、指定されたルートがすべて処理されたときにパケットが返されることを期待しています。

オプションの最初の値は、通常のルーティングで選択されたものよりも優先して使用する最初のゲートウェイ/ルーターです。ゲートウェイに到達すると、ゲートウェイの出力アドレスに置き換えられ、IPヘッダーの宛先アドレスが置き換えられますそのゲートウェイアドレス(中間ゲートウェイがパスを中断しないようにするため)。各一致ゲートウェイ(オプションがサポートされている場合)は、次のエントリのプロセスをエントリ数まで繰り返します(その後、必要に応じて通常どおりルーティングします) 。緩やかなソースルーティングは、完全または連続している必要はありません。

ソースIPを偽造するのは簡単です。これは通常はあまり有用ではありませんが、これらのオプションは、それをもう少し便利にするのに役立つ場合があります。

loose (または strict )ソースルーティングは、ルーティングがsenderによってIPオプション(IPヘッダー内)を介して指定できることです。オプション番号および 9 ;また、単純な「レコードルート」については、オプション番号 7 も参照してください)。 「ルートレコード」機能は、ルートをリクエストすることの副作用として発生します。各ルーターは、リクエストされたホップを自身のホップに置き換えます(進入出力)アドレス。 「状態」もヘッダーの一部です(つまり、TTLの検査ではありません)。次のルートエントリへのポインターがあり、オプションを処理するときに各ルーターによって更新されます。

ご想像のとおり、これらのオプションがネットワークの境界を越えることを許可することはかなり悪い考えです:送信者指定のルーティングは プローブネットワーク の機会を開き、ポリシールーティングやその他の 悪意のあるアクティビティ =。ネットワーク管理や診断にはかなり役立つかもしれませんが、現在のところ実際には使用されていません。 簡単に使用したモバイルIP のタイプですが、現在はより従来型のトンネリング/カプセル化が使用されています。それは IPv6に引き継がれた でしたが、その特定のオプションは 非推奨 は、設計が不十分であるため(特に、DOS攻撃への適用性)です。

緩和策は次のとおりです。ルーター/ファイアウォールのオプションを取り除くか、そのようなオプションでパケットをドロップします。もちろん、厳密な入力/出力フィルタリングおよび/またはRPF /アンチスプーフィングです。 RFC 6274 、特に §3.13.2 も参照してください。

実験したい場合は、このリンクを参照してください: http://www.synacklabs.net/OOB/LSR.html

2
mr.spuratic