このメールは, announce-jp に流れた Subject: ANNOUNCE: FreeBSD Security Advisory: FreeBSD-SA-00:70.ppp-nat From: FreeBSD Security Advisories Date: Tue, 14 Nov 2000 14:32:03 -0800 (PST) Message-Id: <20001114223203.72E6B37B4D7@hub.freebsd.org> X-Sequence: announce-jp 602 を日本語訳したものです. この勧告の中で紹介されている WWW サイト http://www.FreeBSD.org/ および FTP サイト ftp://ftp.FreeBSD.org/ には, 日本のミラーサイトが存在します. ミラーサイトを利用するには, http://www.FreeBSD.org/ を http://www.jp.FreeBSD.org/www.freebsd.org/ に, ftp://ftp.FreeBSD.org/ を ftp://ftp.jp.FreeBSD.org/ に, それぞれ置き換えてください. ネットワークの混雑を緩和するため, まずはミラーサイトの利用を 考慮するようお願いします. ミラーサイトに関する詳細は http://www.FreeBSD.org/handbook/mirror.html (英文) http://www.FreeBSD.org/ja/handbook/mirror.html (日本語訳) に, また, 過去の日本語版セキュリティ勧告は http://www.FreeBSD.org/ja/security/ にまとめられています. 原文は PGP 署名されていますが, この日本語訳は PGP 署名されていません. パッチ等の内容が改竄されていないことを確認するために PGP のチェックを 行なうには, 原文を参照してください. 日本語訳は FreeBSD 日本語ドキュメンテーションプロジェクト (doc-jp) が参考の ために提供するもので, doc-jp は その内容についていかなる保証もいたしません. 日本語訳についてのお問い合わせは doc-jp@jp.FreeBSD.org までお願いします. --(ここから) ============================================================================= FreeBSD-SA-00:70 Security Advisory FreeBSD, Inc. トピック: ppp "deny_incoming" does not correctly deny incoming packets 分類: core モジュール: ppp 告知日: 2000-11-14 クレジット: Robin Melville 影響範囲: FreeBSD 3.5, 3.5.1, 4.1, 4.1.1 修正日以前の FreeBSD 3.5.1-STABLE および 4.1.1-STABLE 修正日: 2000-10-30 (FreeBSD 4.1.1-STABLE) 2000-10-30 (FreeBSD 3.5.1-STABLE) FreeBSD に固有か: Yes I. 背景 - Background ppp(8) ユーティリティには, 公開アドレスとプライベートアドレスを変換する, ネットワークアドレス変換機能 (訳注: いわゆる NAT のこと) が含まれています. この機能は, libalias ライブラリを用いて実現されています. II. 問題の詳細 - Problem Description ppp のドキュメントによると, "nat deny_incoming" コマンドは 「外側からのすべての接続を拒否する」となっています. これは 外部のユーザが内部ネットワークのサービスへ接続できないようにし, ppp を簡易的なファイアウォールとして利用するために良く使われる コマンドです. しかし, 3.x ブランチと 4.x ブランチの両方の ppp の コードは FreeBSD 4.1 および 3.5 のリリース前 (4.x は 2000-06-05, 3.x は 2000-06-03) の時期に, 認識できないパケット, たとえば IPSEC パケットや他の IP プロトコルのパケットなど, ppp の処理コードで 「外側からの接続要求」とみなされないパケットについては通過を許可する ように変更されました. これ自体もおそらく正しい動作とは言えないもの だったのですが, ppp の処理コードはさらに到着する「すべての」パケットの 通過も誤って許可するため, 結果的に "deny_incoming" の機能を無効なものに してしまいます. したがって, 既存の NAT セションに含まれるパケットのみの通過を許可する, 「デフォルトで拒否」のファイアウォールを実現するために deny_incoming を 使っているユーザは, 実際には内部ネットワークに対して, ある種の意図しない IP パケット (訳注: 新しい外側からの接続要求や ICMP など) の侵入を 許してしまいます. 問題となっていた ppp の動作は, 有効な NAT セションに含まれる 到着パケットの通過のみを許可するように修正されました. そのため, 一般的に望まれるようなパケットフィルタの動作を実現するように なっています. libalias が認識できない外向きの IP パケット (VPN に 使われる外向きの IPSEC パケットなど) は, 対応する送信元アドレス, 送信先アドレスおよびプロトコル番号を持つ到着パケットを許可し, その他を拒否する NAT セションを一つ確立します. この動作は, ほとんどのユーザにとってセキュリティ的に十分なものであると 思われます. より複雑なフィルタやセキュリティポリシが要求される場合は, ipfw(8) や ipf(8) が提供している, 詳細な設定が可能なパケットフィルタを 利用してください. これらはそのような要求にも対応できます. この問題の影響を受ける FreeBSD リリースは, FreeBSD 3.5, 3.5.1, 4.1, 4.1.1 のみです. 問題点の修正は FreeBSD 4.2-RELEASE の公開前の 4.1.1-STABLE ブランチで行なわれました. III. 影響範囲 - Impact 既存の NAT セションに含まれないリモートユーザからの到着パケットは, NAT ゲートウェイを通過することができます. このパケットの通過は, セキュリティポリシに反するものである可能性があります. IV. 回避方法 - Workaround PPP ゲートウェイで ipfw(8) や ipf(8) といった専用のパケットフィルタを 使い, 所望のセキュリティポリシに適合するように到着パケットを 拒否してください. V. 解決策 - Solution 次のいずれかに従ってください. 1) 弱点を持った FreeBSD システムを, 修正日以降の 4.1.1-STABLE もしくは 3.5.1-STABLE にアップグレードします. 2) 下の修正パッチを適用し, 関連ファイルを再構築します. この勧告をファイルに保存するか, 修正パッチと PGP 署名を以下の場所から ダウンロードし, PGP ユーティリティを使って署名を確認します. ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:70/ppp.patch ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-00:70/ppp.patch.asc そして root 権限で次のコマンドを実行します. # cd /usr/src/usr.sbin/ppp # patch -p < /path/to/patch_or_advisory # make depend && make all install 弱点を持ったシステム用の修正パッチ: Index: nat_cmd.c =================================================================== RCS file: /mnt/ncvs/src/usr.sbin/ppp/nat_cmd.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -r1.49 -r1.50 - --- nat_cmd.c 2000/07/11 22:11:31 1.49 +++ nat_cmd.c 2000/10/30 18:02:01 1.50 @@ -421,7 +421,11 @@ break; case PKT_ALIAS_IGNORED: - - if (log_IsKept(LogTCPIP)) { + if (PacketAliasSetMode(0, 0) & PKT_ALIAS_DENY_INCOMING) { + log_Printf(LogTCPIP, "NAT engine denied data:\n"); + m_freem(bp); + bp = NULL; + } else if (log_IsKept(LogTCPIP)) { log_Printf(LogTCPIP, "NAT engine ignored data:\n"); PacketCheck(bundle, MBUF_CTOP(bp), bp->m_len, NULL, NULL, NULL); } $hrs: announce-jp/FreeBSD-SA/00:70,v 1.4 2000/11/23 17:43:49 hrs Exp $