$Id: report-ipattack.html,v 1.1.1.1 1999/10/26 17:19:17 sakane Exp $

注意:	これは 1996年春に調査したものであり情報が古いかもしれない。
	またTCP/IP素人が書いたので情報に誤りがあるかもしれない。
	とりあえずもったいないので公開する。そのうち見直して更新します…。

%Hd: 4層以下の攻撃の方法と対策

* パケットを目標へ到達させるための技術と、目標に危害を加える技術に分ける。

  1. IP Source Routing Attack
  2. IP Spoofing Attacks
  3. IP Fragment Attack
  4. UDP Port Denial-of-Service Attack
  5. Routing Information Protocol Attack
  6. Exterior Gateway Protocol Attack
  7. The Internet Control Message Protocol Attack
  8. Replay-Reflection
  9. Man-in-the-Middle
 10. Connection Hijacking

0. 残案件

  - IP Fragment Attackは、CA-95:01*の調査が完了しだい詳細にする。
  - UDP Port Denial-of-Service Attackは、RFC1858,CA-95:01*を調査する必要がある。
  - The Internet Control Message Protocol Attackは、RFC792,RFC950を調査する
    必要があるかもしれない。
  - 全て文献からの引用なので、実証する必要があるだろう。
  - これらを総括して、SSの仕様へどの様に反映出来るかの考察。

1. IP Source Routing Attack

  1-0. 参考

    [1]. 山本和彦, "転ばぬ先のセキュリティ 20", UNIX MAGAGINE, Dec 1995
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993
    [3]. INTERNET PROTOCOL, RFC791, Sep 1981
    [4]. Cisco Router Packet Handling Vulnerability, CERT Advisory, Apr 1993

  1-1. 概要

    IPオプションの一つに、送信者にインターネットの経路(中継点)を指定するため
    の方法を提供する始点経路制御オプション(source route)がある。このオプショ
    ンを使用すると中継点が終点の様に見せることが出来るので、IPデータグラムの
    始点経路制御オプションを検査していないフィルタを通過することができる。

  1-2. 始点経路制御オプション

    SSRR(Strict Source and Recorded Route)と、LSRR(Loose Source and Recorded
    Route)の2つの指定方法がある。

                           図1. IP datagram format

     +--------+--------+-----------------+-----------------+-----------------+
     | VERRS  |  HLEN  |   SERVICE TYPE  |           TOTAL LENGTH            |
     +--------+--------+-----------------+------+----------+-----------------+
     |           IDENTIFICATION          |FLAGS |      FRAGMENT OFFSET       |
     +-----------------+-----------------+------+----------+-----------------+
     |   TIME TO LIVE  |     PROTOCOL    |          HEADER CHECKSUM          |
     +--------+--------+---+-------------+-----------------+-----------------+
     |                           SOURCE IP ADDRESS                           |
     +--------+------------+-------------+-----------------+-----------------+
     |                         DESTNATION IP ADDRESS                         |
     +--------+------------+-------------+-----------------+-----------------+
     |                  IP OPTIONS (IF ANY)                  |    PADDING    |
     +--------+------------+-------------+-----------------+-----------------+
     :                                                                       :

                           図2. source route option

     +--------+--------+-----------------+-----------------+
     |      CODE       |      LENGTH     |     POINTER     |
     +--------+--------+-----------------+------+----------+-----------------+
     |                        IP ADDRESS OF FIRST HOP                        |
     +--------+------------+-------------+-----------------+-----------------+
     |                        IP ADDRESS OF SECOND HOP                       |
     +--------+------------+-------------+-----------------+-----------------+
     |                        IP ADDRESS OF THIRD HOP                        |
     +--------+------------+-------------+-----------------+-----------------+
     :                                                                       :
        DST : DESTINATION IP ADDRESS
        HP1 : IP ADDRESS OF FIRST HOP
        HP2 : IP ADDRESS OF SECOND HOP

      - SSRR(Strict Source and Recorded Route): CODE=137
        指定された中継点だけを通って終点にだどりつかなければならない。
        中継点がSSRRに従うことが出来ない場合は、エラーが起こる。
        ※ どんなエラー?(ICMP?)

      - LSRR(Loose Source and Recorded Route): CODE=131
        必ず通らなければならない中継点を指定する。終点にたどり着くまでに、
        指定されていない中継点を経由しても良い。

                         図3. 始点経路制御の仕組

     (1)    +----+  (2)    +----+  (3)    +----+  (4)    +----+
     DST=B  | A  |  DST=R1 | R1 |  DST=R2 | R2 |  DST=B  | B  |
     HP1=R1 +-+--+  HP1=R2 +-+--+  HP1=R1 +-+--+  HP1=R1 +-+--+
     HP2=R2   |     HP2=B    |     HP2=B    |     HP2=R2   |
              +--------------+--------------+--------------+

    (1) 送信者は、 DSTにB、HP1にR1、HP2にR2を指定して送信要求
    (2) ノードAは、DSTをR1に置き換えて、HP1にR2、HP2にBを設定して送信
    (3) 中継点R1は、DSTをR2に置き換えて、HP1にR1を設定して送信
    (4) 中継点R2は、DSTをBに置き換えて、HP2にR2を設定して送信

    DSTを中継点に置き換えていることにより、中継点が送信先であるように見える。

  1-3. 終点アドレス偽造攻撃(IP Source Routed Attack)の方法

    外部から内部へアクセス許可があるホストを利用して、内部へパケットを
    送り込むことが出来る。

    外部からメールサーバBへのアクセスを許可している場合。(図4)
    外部から出島B、出島BからAへのアクセスを許可している場合。(図5)
    共に、侵入者のマシンZは DST=A,HP1=Bと指定すれば良い。

                  図4. メールサーバが存在する場合

                            -----+---------+----- 外部
                                 |         |
            +---+    +---+     +-+--+    +-+-+
            | A |    | B |     | R2 |    | Z |
            +-+-+    +-+-+     +-+--+    +---+
              |        |         |
          ----+--------+---------+----- 内部

                     図5. 出島が存在する場合

                    ---+---------+---------+----- 出島
                       |         |         |
            +---+    +-+--+    +-+-+     +-+--+   +---+
            | A |    | R1 |    | B |     | R2 |   | Z |
            +-+-+    +-+--+    +---+     +-+--+   +-+-+
              |        |                   |        |    
     内部 ----+--------+----          -----+--------+------  外部

    ※ 実験してみたい。

  1-4. 終点アドレス偽造攻撃(IP Source Routed Attack)の対策

    一般のユーザは始点経路制御を使う必要はまったくないので、組織の入口で
    始点経路制御を指定されたパケットを破棄すべきである。

    例: Cisco
        no ip source-route

        注: Cisco foftware release 8.3(7.2), 9.0(5), 9.1(4), 9.17(2.1)と
            それ以降にリリースされたものについて

    ※ 必要十分か?

2. IP Spoofing Attacks

  2-0. 参考

    [1]. 山本和彦, "転ばぬ先のセキュリティ 13", UNIX MAGAGINE, May 1995
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993
    [3]. IP Spoofing Attacks and Hijacked Terminal Connections,
         CERT Advisory, Jan 1995
    [4]. Security Considerations for IP Fragment Filtering, RFC1858, Oct 1995

  2-1. 概要

    TCPの接続を確立する手段として、3ウェイ・ハンドシェイクと呼ばれるものがあ
    る。この方法では互いで管理している番号を交換して、認証の一つとして利用し
    ている。始点アドレス偽造攻撃は、この番号を推測して目標となったホストへ、
    始点アドレスを偽造してパケットを送り込むことが出来る。

  2-2. TCPの3ウェイ・ハンドシェイク(3 Way Handshake)

                           図1. TCP segment format

     +-----------------+-----------------+-----------------+-----------------+
     |            SOURCE PORT            |          DESTINATION PORT         |
     +-----------------+-----------------+-----------------+-----------------+
     |                            SEQUENCE NUMBERR                           |
     +-----------------+-----------------+-----------------+-----------------+
     |                         ACKNOWLEDGEMENT NUMBER                        |
     +--------+------------+-------------+-----------------+-----------------+
     |  HLEN  |  RESERVED  |  CODE BITS  |              WINDOWS              |
     +--------+------------+-------------+-----------------+-----------------+
     :                                                                       :
        SRC : SOURCE PORT
        DST : DESTINATION PORT
        SQ  : SEQUENCE NUMBER
        ASQ : ACKNOWLEDGEMENT NUMBER
        CB  : CODE BITS

    (1) ノードAは、SQに初期値100、CBにSYNを設定してBへ送信
    (2) ノードBは、SQに初期値300、ASQに101、CBにACK|SYNを設定してAへ送信
        注: ASQに+1するのは、次のセグメントのSQが101であることを期待している為
    (3) Aは、SQに101、ASQに301、CBにACKを設定してBへ送信
    (4) Aは、SQに101、ASQに301、CBにACKを設定してデータをBへ送信
        注: BからのACKを待たず送信するのは、ACKのACKは返さない規則による
        注: SQが101なのは、ACK目的のSQは消費されない規則による
        ※ CBにACKが設定されているのは、ピギーバックなのか?
    (5) Bは、SQに301、ASQに102、CBにACKを設定してAへ送信
    (6) Aは、SQに102、ASQに301、CBにACKを設定してデータをBへ送信
    (7) Bは、SQに301、ASQに103、CBにACKを設定してAへ送信

                        図2. 3ウェイ・ハンドシェイク
              A                                            B

     CLOSED   |                                            | LISTEN
              | (1) SQ=100 CB=SYN                          |
     SYN_SENT |------------------------------------------->| SYN_RCVD
              |                                            |
              |              (2) SQ=300 ASQ=101 CB=SYN|ACK |
     ESTAB    |<-------------------------------------------| SYN_RCVD
              |                                            |
              | (3) SQ=101 ASQ=301 CB=ACK                  |
     ESTAB    |------------------------------------------->| ESTAB
              |                                            |
              | (4) SQ=101 ASQ=301 CB=ACK DATA1            |
     ESTAB    |------------------------------------------->| ESTAB
              |                                            |
              |                  (5) SQ=301 ASQ=102 CB=ACK |
     ESTAB    |<-------------------------------------------| ESTAB
              |                                            |
              | (6) SQ=102 ASQ=301 CB=ACK DATA2            |
     ESTAB    |------------------------------------------->| ESTAB
              |                                            |
              |                  (7) SQ=301 ASQ=103 CB=ACK |
     ESTAB    |<-------------------------------------------| ESTAB

  2-3. 始点アドレス偽造攻撃(IP Spoofing Attack)の方法
 
    (1) 攻撃者のノードCがノードAを名乗ってBへ送信
    (2) Bは、ACK|SYNをAへ送信する
    (3) CはBのSQの初期値がわからず、BへACKを送信することができない

                        図3. アドレス偽造しただけの時 

             A            B                                       C

    CLOSED   |   LISTEN   |                                       | CLOSED
             |            |               (1) SRC=A SQ=200 CB=SYN |
             |   SYN_RCVD |<--------------------------------------| SYN_SENT
             |            |                                       |
             | (2) SQ=300 ASQ=201 CB=SYN|ACK                      |
    ??????   |<-----------| SYN_RCVD                              |
             |            |                                       |
             |            |             (3) SQ=201 ASQ=??? CB=ACK |
             |            |                      ?..--------------| ESTAB


    BSD系UNIXのTCPのシーケンス番号管理の実装
      a. 大域的変数で保持している。
      b. 500(ms)毎に定数α増加させる。
      c. ソケットの状態がLISTENからSYN_RCVDに移行する毎に定数β増加させる。
        ※ BSD-OS2.1の実際の実装は?

    ここで、Bの初期値:300、Bの定数β:500とした時

    (1) Cが、Bに対してダミーのコネクションを要求
    (2) Bは、SQに大域変数300を設定してCへ送信
        この結果、CはBの大域変数値を推測する因子を得ることが出来る
        注: ソケットの状態が移行したので大域変数を+500して800とする
    (3) Cは、SRCをAとして、Bに対してコネクションを要求
        注: 500(ms)以内に要求を行なう
    (4) Bは、SQに大域変数800を設定してAへ送信
    (5) Cは、ASQに推測値801を設定、SRCをAとしてACKをBへ送信
        推測値が正解ならば、あたかもBはAとコネクションを張っていると
        思わせることに成功。
    (6) 仮に、BがAのルートを信用している場合、Cはコマンドをルート権限で
        実行できる。

                        図4. アドレス偽造攻撃

             A            B                                       C

    CLOSED   |   LISTEN   |                                       | CLOSED
             |            |               (1) SRC=C SQ=200 CB=SYN |
             |   SYN_RCVD |<--------------------------------------| SYN_SENT
             |            |                                       |
             |            | (2) SQ=300 ASQ=201 CB=SYN|ACK         |
             |   SYN_RCVD |---------------------------------------| ESTAB
             |            |                                       |
             |            |                                  500(ms)以内
             |            |                                       |
             |   LISTEN   |                                       | CLOSED
             |            |               (3) SRC=A SQ=400 CB=SYN |
             |   SYN_RCVD |<--------------------------------------| SYN_SENT
             |            |                                       |
             | (4) SQ=800 ASQ=401 CB=SYN|ACK                      |
    ??????   |<-----------| SYN_RCVD                              |
             |            |                                       |
             |            |       (5) SRC=A SQ=401 ASQ=801 CB=ACK |
             |      ESTAB |<--------------------------------------| ESTAB
             |            |                                       |
             |            |  (6) SRC=A SQ=401 ASQ=801 CB=ACK DATA |
             |      ESTAB |<--------------------------------------| ESTAB
             |            |                                       |

    (4)でAが奇妙なセグメントを受け取ると、Bに"何か変だよ"と教えるために…
    CがAにたくさんパケットを送ってそれどころではなくする。
    Aが落ちているときにBを攻撃する。
      注: 文献より、そのまま引用…
      ※ "変だよと"教える方法は?(ICMP?)

  2-4. 始点アドレス偽造攻撃(IP Spoofing Attacks)の対策

    2-4-1. 方向指向フィルタ

           図5. 方向指向フィルタ

        内部                  外部
      -----+----            ----+-----
           |     +--------+     |
           +-----| router |-----+
              I1 +--------+ I2

      - 始点アドレスとして内部アドレスをもつパケットが、
        外部から侵入することを防止する。

        I2入力部: 禁止 SRC=内部アドレス DST=全て
                  許可 SRC=全て         DST=内部アドレス

      - 始点アドレスが内部アドレスと一致しないパケットが、
        外部へ通過することを防止する。

        I2出力部: 許可 SRC=内部アドレス DST=全て
                  禁止 SRC=全て         DST=全て

    2-4-2. フラグ指向フィルタ

          図6. 出島ホストがある場合

        内部                  外部          出島ホスト 
      -----+----            ----+-----          D
           |     +--------+     |               |
           +-----| router |-----+---------------+-------
              I1 +--------+ I2

      - SYNフラグだけのパケットが、外部から侵入することを防止する。

        許可 SRC=内部アドレス DST=全て
        許可 SRC=全て         DST=内部アドレス CB=ACK
        禁止 SRC=全て         DST=全て

        注: 外部からの無意味なACKを大量に送りつけられる攻撃(?)には無力だが、
            コネクションが確立出来ないTCPパケットは無意味なので…無視…
        ※ 本当に問題ないのか?

      - 出島ホストDがある場合、SRCがDで、DSTが内部のパケットは無条件に
        通過を許可する。

        許可 SRC=内部アドレス DST=全て
        許可 SRC=D            DST=内部アドレス
        許可 SRC=全て         DST=内部アドレス CB=ACK
        禁止 SRC=全て         DST=全て

    ※ 2-4-1と2-4-2の具体的な使い分け方は?

3. IP Fragment Attack

  3-0. 参考

    [1]. 山本和彦, "転ばぬ先のセキュリティ 20", UNIX MAGAGINE, Dec 1995
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993
    [3]. Security Considerations for IP Fragment Filtering, RFC1858, Oct 1995

  3-1. 概要

    外部からのTCPの接続要求(SYN==1)を破棄するような設定を施しているフィルタ
    に対して、IPパケットの分割機能を利用すると、このフィルタを通過することが
    出来る。また、多くのルータは、TCPフラグの検査を第1分割片のみしか行なって
    いないことも利用する。

  3-2. IPパケットの分割機能/再構成機能

  3-3. IPパケット分割攻撃(IP Fragment Attack)の方法

    3-3-1. 極小分割攻撃(Tiny Fragment Attack)

      概要: TCPパケットを8オクテットの分割片にして送りつける。
            この時、CODE BITS フィールドは第2分割片に収納されるので、
            第1分割片で検査をしているフィルタは、これを破棄することが
            出来ない。

    3-3-2. 重複分割攻撃(Overlapping Fragment Attack)

      概要: TCPパケットのヘッダが重複するように分割して送りつける。
            第1分割片にACK=1,SYN=0、第2分割片にACK=0,SYN=1(接続要求)、分割
            オフセットを第1分割片と重なる様に設定する。
            受信ノードが再構成時に、第2分割片が第1分割片を上書きしてしまう
            実装の場合、第1分割片はフィルタを問題無く通過してしまうので、
            再構成時に接続要求に化けてしまう。

  3-4. IPパケット分割攻撃(IP Fragment Attack)の対策

    概要: 分割片の最小オクテット数を設定することにより、極小分割攻撃は回
          避できる。
          再構成時に、第2分割片が第1分割片を上書きしない実装を行なう。
            ……    
          ルータでフラグメント・オフセットが1の、TCPパケットは
          破棄するようにする。

4. UDP Port Denial-of-Service Attack

  4-0. 参考

    [1]. UDP Port Denial-of-Service Attack, CERT Advisory, Feb 1996
    [2]. Echo Protocol, RFC 862, May 1983
    [3]. Character Generator Protocol, RFC 864, May 1983

  4-1. 概要

    入力によって、何らかの出力を返すようなUDPのサービス間で接続が設定される
    と、それら2つのサービス間で、マシンの動作に影響が出るような非常に沢山の
    パケットを生むことが出来る。

  4-2. 利用されるUDPサービス

    入力に対して何らかの出力を返すサービスとして、代表的なものにCHARGENサー
    ビス、ECHOサービスがある。このサービスは、ネットワークに接続できる誰もが
    利用できる。

    4-2-1. ECHOサービス

      受信したデータを単純に送信元へ送り返すサービスである。サーバはUDPのポ
      ート7番でUDPデータグラムをlistenして、データグラムが受信されると、デー
      タグラム応答で送り返される。このサービスはTCPでも利用できる。

    4-2-2. CHARGENサービス

      データグラムを受信すると、そのデータグラム内のデータを破棄して、ある決
      まったデータを単純に送信するサービスである。サーバは、UDPのポート19番
      でUDPデータグラムをlistenして、データグラムが受信されると、データグラ
      ム応答は、0から512のランダムなキャラクタを含んで送られる。このサービス
      はTCPでも利用できる。

  4-3. UDPサービス拒否?攻撃(UDP Port Denial-of-Service Attack)の方法

    CHARGEN/ECHOサービスは、ネットワークに接続できる誰もが利用できるので、
    この攻撃は誰もが行なうことが出来る。

                           図1. UDP datagram format

     +-----------------+-----------------+-----------------+-----------------+
     |          UDP SOURCE PORT          |       UDP DESTINATION PORT        |
     +-----------------+-----------------+-----------------+-----------------+
     |        UDP MESSAGE LENGTH         |           UDP CHECKSUM            |
     +-----------------+-----------------+-----------------+-----------------+
     |                                 DATA                                  |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :
        SRCPT : UDP SOURCE PORT
        DSTPT : UDP DESTINATION PORT

    [1]から察すると以下の図1の様な攻撃方法になる。

           図1. UDP ECHOサービスによる攻撃

            +-----+ (1)     (2) +-----+
            |  X  +-------------+  A  |
            +-----+             +-----+

    (1) 攻撃者のノードXが、SRCPT=19(chargen),DSTPT=7(echo)として、
        ノードBへダミーデータを送信
    (2) Aは、Echoプロトコル[2]に基づきDSTPT=19で、Xへデータを送信
    (3) Xは、Character Generatorプロトコル[3]に基づき、Aへデータを送信
    (4) 永久にパケット交換が発生する。

    図1の方法だと、結果的にXも攻撃の対象に入ることになるので、図2の方法で
    攻撃することになるだろう。

           図2. UDP ECHOサービスによる攻撃

            +-----+ (2)     (3) +-----+
            |  A  +-------------+  B  |
            +-----+             +--+--+
                                   |
                                   | (1)
                                +--+--+
                                |  X  |
                                +-----+

    (1) 攻撃者のノードXが、SRC=A, SRCPT=19,DSTPT=7として、Bへデータを送信
    (2) Bは、DSTPT=19で、Aへデータを送信
    (3) Aは、DSTPT=7で、Bへデータを送信
    (4) AとBで、永久にパケット交換が発生する。

    ※ TCPでも可能だが、パスを張るのが面倒

  4-4. UDPサービス拒否?攻撃(UDP Port Denial-of-Service Attack)の対策

    4-4-1. CHARGEN/ECHOサービスをフィルタリングし、無効にする。

      この攻撃は、CHARGENサービス、またはECHOサービスが最も容易に利用される。
      ところが、どちらのサービスも一般的には必要とされないので、ホストでの両
      サービスを無効にし、ファイアウォールやインターネット・ゲートウェイにお
      いて、これらをフィルタリングするべきである。
      これらサービスを無効にするには、inetd.confを編集することにより行う。

    4-4-2. その他の使用されていないUDPサービスをフィルタリングし、無効にする。

      ホスト上の全ての使用されていないUDPサービスを無効にし、DNS(port 53)の
      様な特別に必要としているサービスを除いた、900以下の全てのUDPポートを
      ファイアウォールで無効にする。

      ※ RFC 863, 867, 868

    4-4-3. 外部へアクセスを必要とするUDPサービスに対しては、代理機構を使用する。

      ※ Building Internet Firewalls by Chapman and Zwicky
         第8章"Configuring Internet Services" 参照

    4-4-4. 外部にUDPサービスを提供するならば、ネットワーク監視を行うようにする。

      Argus, tcpdump, netlog 等を利用する。

    4-4-5. IP spoofing に対する処置を施す。

5. Routing Information Protocol Attack

  5-0. 参考

    [1]. Security Problems in the TCP/IP Protocol Suite,
         Computer Communication Review, Apl 1989
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993

  5-1. 概要

    経路制御情報を交換するために使用されるRIPは、受信された時にそのメッセージの
    正当性の検査が行われない。この事実を利用し攻撃者は偽りの経路制御情報をホスト
    に送り付け、パケットを自分の意図する場所へ経路付けることが出来る。

    ※ コード未確認

  5-2. RIPメッセージの転送

    RIPメッセージの転送には、UDPのポート520番が用いられる。
    RIP要求は他のUDPポートで発信することも可能だが、終点ポートは常に520番で
    なければならない。また、RIPメッセージは長さを明示するフィールドを含んで
    いないので、その長さのカウントをUDPに依存している。

                           図1. RIP message format

     +-----------------+-----------------+-----------------+-----------------+
     |     COMMAND     |     VERSION     |           MUST BE ZERO            |
     +-----------------+-----------------+-----------------+-----------------+
     |           FAMILY OF NET 1         |           MUST BE ZERO            |
     +-----------------+-----------------+-----------------+-----------------+
     |                          IP ADDRESS OF NET 1                          |
     +-----------------+-----------------+-----------------+-----------------+
     |                             MUST BE ZERO                              |
     +-----------------+-----------------+-----------------+-----------------+
     |                             MUST BE ZERO                              |
     +-----------------+-----------------+-----------------+-----------------+
     |                           DISTANCE TO NET 1                           |
     +-----------------+-----------------+-----------------+-----------------+
     |           FAMILY OF NET 2         |           MUST BE ZERO            |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :
        CMD  : COMMAND
        DSTN : DISTANCE TO NET 1

    ゲートウェイやホストは経路制御情報要求メッセージ(CMD=1)を、他のゲートウェイ
    に送ることにより情報を尋ねる事が出来る。しかし大部分の場合(*)、ゲートウェイ
    は周期的に要求されていない経路制御情報応答メッセージ(CMD=2)をブロードキャス     トしている。
    ここでDSTNは、特定のネットワークの距離の整数値である。距離はゲートウェイの
    ホップで数えられるが、その値は1から15の範囲に限られ、16は無限遠(距離が存在
    しない)を意味するために使用される。

    ※ 大部分の場合ではない、RIP転送は?

  5-3. RIP攻撃(Routing Information Protocol Attack)の方法

    受信されたRIPメッセージの検査は行われない事実に基づく。

    ※ コード未確認

  5-4. RIP攻撃(Routing Information Protocol Attack)の対策

    5-4-1. フィルタリング

      始点または終点アドレスでパケットのフィルタリングをする。

    5-4-2. 経路情報の検査/認証

      RIPのブロードキャストの認証を行う。

      ※ ブロードキャストの認証の仕組み

6. Exterior Gateway Protocol Attack

  6-0. 参考

    [1]. Security Problems in the TCP/IP Protocol Suite,
         Computer Communication Review, Apl 1989
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993

  6-1. 概要

    EGPで使用されている順序番号を予測することにより、TCPのIP Spoofing Attacksの
    様な攻撃の可能性がある。

                           図1. EGP message format

     +-----------------+-----------------+-----------------+-----------------+
     |     VERSION     |      TYPE       |      CODE       |     STATUS      |
     +-----------------+-----------------+-----------------+-----------------+
     |             CHECKSUM              |      AUTONOMOUS SYSTEM NUMBER     |
     +-----------------+-----------------+-----------------+-----------------+
     |          SEQUENCE NUMBER          |                                   :
     +-----------------+-----------------+                                   :
     :                                                                       :

  ※ BGP との関連は?
    - A Border Gateway Protocol (BGP), RFC 1163
    - Application of the Border Gateway Protocol in the Internet, RFC 1164

  6-2. 対策

  ※ この文書[1]では解が得られない。攻撃自体が困難であるとの記述はあった。

7. Internet Control Message Protocol Attack

  7-0. 参考

    [1]. Security Problems in the TCP/IP Protocol Suite,
         Computer Communication Review, Apl 1989
    [2]. 村井純/楠本博之 訳, TCP/IPによるネットワーク構築 Vol.I, Aug 1993

  7-1. 概要

    TCP/IPプロトコルの特別な目的のためのメッセージ機構として、ICMPがある。
    このICMPが持っている悪用のするための様々な可能性を利用して攻撃を行う。

  7-2. Internet Control Message Protocol (ICMP)

    ICMPは、4バイトの固定ヘッダとメッセージ固有のフィールドで構成される。
    IPデータグラム中にカプセル化される。

                           図1. ICMP message format

     +-----------------+-----------------+-----------------+-----------------+
     |       TYPE      |      CODE       |             CHECKSUM              |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :

    ICMPには以下の種類のメッセージがある。

    Type Field  ICMP Meaage Type
    ----------  -------------------------------
        0       Echo Reply
        3       Destination Unreachable
        4       Source Quench
        5       Redirect (change a route)
        8       Echo Request
       11       Time Exceeded for a Datagram
       12       Parameter Problem on a Datagram
       13       Timestamp Request
       14       Timestamp Reply
       15       Infomation Request (obsolete)
       16       Infomation Reply (obsolete)
       17       Address Mask Request
       18       Address Mask Reply

  7-3. ICMP攻撃の方法

    7-3-1. 方向転換(Redirect)メッセージの利用

      方向転換メッセージの正当性検査を行わないホストが実在する。
      この様な場合、RIP攻撃と同様の攻撃が可能となる。

                           図2. ICMP Redirect message format

     +-----------------+-----------------+-----------------+-----------------+
     |       TYPE      |      CODE       |             CHECKSUM              |
     +-----------------+-----------------+-----------------+-----------------+
     |                        GATEWAY INTERNET ADDRESS                       |
     +-----------------+-----------------+-----------------+-----------------+
     |               INTERNET HEADER + FIRST 64BITS OF DATAGRAM              |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :

     ※ BSD/OS2.1 では、ICMPのIPヘッダ部の ip.ip_hl, ip.ip_dst と、
        パケットを受信したインターフェイス、ICMP Redirectの送信元を
        チェックしている。

    7-3-2. サービス拒否攻撃の方法

      ICMPメッセージの中には、存在する接続をリセットするために使われるものが
      ある。侵略者がローカルやリモートのTCP接続のポート番号を知っていれば、
      その接続に向けられたICMPのパケットを偽造することができる。
      このような情報はnetstatサービスを通して入手することができる場合がある。

      7-3-2-1. 終点到達不可能(Destination Unreachable)メッセージ

        ゲートウェイがIPデータグラムを配送出来ない時に、始点に送るメッセージ。
        このメッセージを送信後、データグラムは破棄される。

                  図3. ICMP Destination Unreachable message format

     +-----------------+-----------------+-----------------+-----------------+
     |     TYPE(3)     |    CODE(0-5)    |             CHECKSUM              |
     +-----------------+-----------------+-----------------+-----------------+
     |                         UNUSED (MUST BE ZERO)                         |
     +-----------------+-----------------+-----------------+-----------------+
     |               INTERNET HEADER + FIRST 64BITS OF DATAGRAM              |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :

      7-3-2-2. 全体時間経過済(Time Exceeded)メッセージ

        ホップカウントがゼロに達しているか、フラグメント再構成の時間切れに
        なった場合に、始点に送るメッセージ。
        このメッセージを送信後、データグラムは破棄される。

                     図4. ICMP Time Exceeded message format

     +-----------------+-----------------+-----------------+-----------------+
     |    TYPE(11)     |    CODE(0|1)    |             CHECKSUM              |
     +-----------------+-----------------+-----------------+-----------------+
     |                        GATEWAY INTERNET ADDRESS                       |
     +-----------------+-----------------+-----------------+-----------------+
     |               INTERNET HEADER + FIRST 64BITS OF DATAGRAM              |
     +-----------------+-----------------+-----------------+-----------------+
     :                                                                       :

      7-3-2-3. サブネットマスク応答(Subnet Mask Reply)メッセージ

        ローカルネットワークで使用されているサブネットマスクをホストに知らせ
        るために使用する。サブネットマスク要求メッセージと対に利用されるが、
        実装によっては要求をしなくても応答を受け取ってしまうホストがある。

        ※ 影響は?

                     図5. ICMP Subnet Mask Reply message format

     +-----------------+-----------------+-----------------+-----------------+
     |    TYPE(18)     |     CODE(0)     |             CHECKSUM              |
     +-----------------+-----------------+-----------------+-----------------+
     |            IDENTIFIER             |          SEQUENCE NUMBER          |
     +-----------------+-----------------+-----------------+-----------------+
     |                              ADDRESS MASK                             |
     +-----------------+-----------------+-----------------+-----------------+

  7-4. ICMP攻撃の対策

    7-4-1. 方向転換(Redirect)メッセージ

      経路制御情報テーブルはICMP方向転換メッセージに応じて変更されるべきでない。

    7-4-2. 終点到達不可能(Destination Unreachable)メッセージ

    7-4-3. 全体時間経過済(Time Exceeded)メッセージ

    7-4-4. サブネットマスク応答(Subnet Mask Reply)メッセージ

      サブネットマスク応答メッセージは、ブート時にのみ受け取る。

    ※ その他は?