NetBSD Security Advisory 2004-006 ================================= トピック: TCP プロトコルと実装におけるセキュリティー上の弱点 (TCP protocol and implementation vulnerability) バージョン: NetBSD-current: 2004 年 4 月 22 日より前のソース NetBSD 2.0: 影響あり。リリース版には修正が含まれる予定。 NetBSD 1.6.2: 影響あり NetBSD 1.6.1: 影響あり NetBSD 1.6: 影響あり NetBSD 1.5.3: 影響あり NetBSD 1.5.2: 影響あり NetBSD 1.5.1: 影響あり NetBSD 1.5: 影響あり 影響範囲: 深刻 (TCP 接続が悪意を持った第三者によって切断されたり、 意図しないデータが TCP ストリームに挿入される可能性がある) Serious (disconnected by malicious party, unwanted data injected into TCP stream) 修正日: NetBSD-current: 2004 年 4 月 22 日 NetBSD-2.0 branch: 2004 年 4 月 22 日 NetBSD-1.6 branch: 2004 年 4 月 22 日 (1.6.3 には修正が含まれる予定) NetBSD-1.5 branch: 2004 年 4 月 22 日 概要 - Abstract =============== 従来から長く使われている TCP プロトコル規格 (RFC 793) には、いくつかの 弱点があります。 - - 悪意を持った第三者が捏造・送信した RST パケットを受け取ると、 TCP セションが切れてしまう。 - - 悪意を持った第三者が捏造・送信した SYN パケットを受け取ると、 TCP セションが切れてしまう。 - - 悪意を持った第三者は、既存の TCP セションへ比較的容易にデータを 挿入することができてしまう。 また NetBSD には、これらの攻撃をより簡単なものにしてしまうような、 実装上の不具合も含まれています。 技術的な詳細 - Technical Details ================================ 現在の TCP プロトコル規格では、これらのセキュリティー上の弱点に対して 完全に対応することができません。そのため、攻撃の成功率を下げるための 改善が加えられました。この改善は、最近公開されたインターネットドラフト draft-ietf-tcpm-tcpsecure-00.txt に基づいたものです。 また、NetBSD のネットワークスタックのもととなった 4.4BSD のスタックでは、 ウィンドウに含まれる RST のシーケンス番号をチェックしておらず、 ウィンドウに含まれる RST はすべて、有効なものとして扱われています。 今までは RST/SYN DoS 攻撃がそれほど多くなかったため、この事実は 長い間注目されていなかったのですが、TCP の問題が広く認識されるにつれて、 問題視されるようになってきました。 SSH や SSL など、TCP をベースにしたセキュリティープロトコルは この DoS 攻撃を防ぐことができません。これらのプロトコルを使った接続も、 切断を目的とする攻撃に対して弱点を持っています。これらのプロトコルは ペイロード部分に電子署名を施しているため、データの挿入をおこなうことは 不可能ですが、データを挿入しようとする攻撃を受けると、その副作用として 接続が切断される可能性はあります。 攻撃者がこれらの攻撃をおこなうには、攻撃対象の接続に関する 5 種類の 情報が必要になります。サーバーの IP アドレスとポート番号は既知で あることがほとんどですが、クライアントの IP アドレスとポート番号を 知ることは、簡単ではありません。 信頼できないユーザーにシェルアクセスを提供しているシステムでは、 多くのシステムツールが、クライアントの IP アドレスとポート番号の情報を 漏洩させることに注意してください。この問題が公開された以上、 開発者やユーザーは、このような情報をデフォルトで隠蔽すべきか否かという 議論をおこなうべきかも知れません。 http://www.uniras.gov.uk/vuls/2004/236929/index.htm http://www.us-cert.gov/cas/techalerts/TA04-111A.html http://www.ietf.org/internet-drafts/draft-ietf-tcpm-tcpsecure-00.txt 回避方法と解決策 - Solutions and Workarounds ============================================ TCP を使っているすべての NetBSD システムが影響を受けます。 この問題を完全に解決する唯一の方法は、IPSec や TCP-MD5 など、 TCP 層よりも下位の層で動作するセキュリティープロトコルを使うことです。 しかし NetBSD プロジェクトでは、現在のスタックに実装されている改良で、 今回の問題で実際に発生する深刻な影響は回避できると考えています。 NetBSD は、IPSec にも対応しています。 現時点で NetBSD は TCP-MD5 に対応していませんが、まもなくその機能が統合される 予定です。ただし TCP-MD5 は鍵管理と cipher 選択における問題があるため、 有効なのは BGP セションを守る場合だけです。BGP を運用しているシステムは、 非常に小さな割合に限られています。 BGP のシステムオペレーターは、ingress/egress フィルターを使って、これらの 攻撃を防ぐことができます。BGP ルーターは、送信元がその BGP ピアーに なっているにも関わらず BGP ピアーと直接接続されていないインターフェースに 到着したパケットや、送信元が自分自身になっているにも関わらず 外部のインターフェースに到着したパケットを、受け取るべきではありません。 これらのルールは、NetBSD の IP Filter 機能を使うことで、 簡単に設定することが可能です。 悪意を持った第三者は、送信元アドレスを詐称した TCP パケットを作成することが できます。RFC 3013 で説明されている ingress フィルターを設定していれば、 イントラネット上の TCP セションが今回の問題の影響を受けることはありません。 もし設定していないなら、詐称した送信元アドレスを使って外部のホストへ攻撃 できないようにするための egress フィルターを含めて、設定することを 考慮しましょう。 次に示す手順は、ソースツリーを更新してカーネルバイナリーを再構築し、 新しいバージョンのカーネルをインストールする方法を説明したものです。 新しいカーネルを使うと、攻撃の成功率をずっと低く抑えることができます。 * NetBSD-current: 2004 年 4 月 21 日より前の NetBSD-current は、 2004 年 4 月 22 日、もしくはそれ以降の NetBSD-current に アップグレードする必要があります。 CVS ブランチ netbsd-current (別名 HEAD) において 更新が必要なファイルは、次のとおりです。 sys/netinet CVS を使ってファイルを更新し、カーネルを 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P sys/netinet # cd arch/ARCH/conf # config CONFIG # cd ../compile/CONFIG # make clean depend; make # cp netbsd / # reboot * NetBSD 1.6, 1.6.1, 1.6.2: NetBSD 1.6, NetBSD 1.6.1, NetBSD 1.6.2 のバイナリー配布物には、この セキュリティー上の弱点が含まれています。 2004 年 4 月 21 日より前の NetBSD 1.6 のソースは、 2004 年 4 月 22 日、もしくはそれ以降の NetBSD 1.6 のソースに アップグレードする必要があります。 NetBSD 1.6.3 には、この弱点に対する修正が含まれる予定です。 CVS ブランチ netbsd-1-6 において更新が必要なファイルは、 次のとおりです。 sys/netinet CVS を使ってファイルを更新し、カーネルを 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P -r netbsd-1-6 sys/netinet # cd arch/ARCH/conf # config CONFIG # cd ../compile/CONFIG # make clean depend; make # cp netbsd / # reboot * バイナリーパッチ *** NetBSD 1.6 カーネルは現在構築中です。ここの文章は、カーネルの 準備が完了次第、更新される予定です。 次の説明は、バイナリーパッチのディレクトリーと各アーキテクチャー用の パッチ本体が提供された時に、従うべき手順を示したものになっています。 NetBSD-1-6 ブランチでは、GENERIC カーネルの設定で構築された 新しいカーネルに置き換えるための、バイナリーパッチが提供されています。 あなたが独自に設定したカーネルを使っている場合は、使わない方が適切かも 知れません。 バイナリーパッチを適用するには、次の手順を行ないます。 ARCH の部分は、あなたが実行している NetBSD のアーキテクチャー (たとえば i386 など) に置き換えてください。 ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2004-006-kernel/netbsd-1-6/ARCH-kernel.tgz cd / && cp /path/to/ARCH-kernel.gz / gzip -d ARCH-kernel.gz この tar ファイルは、次のファイルの新しいコピーを展開するものです。 ARCH-kernel 古いカーネルをバックアップします。 mv netbsd netbsd.old そして、新しいカーネルのファイル名を次のように変更するか、 mv ARCH-kernel netbsd もしくはハードリンクを作成します。 ln ARCH-kernel netbsd どちらを選ぶかは、システムの管理ポリシーに従ってください。 最後に、システムを再起動します。 * NetBSD 1.5, 1.5.1, 1.5.2, 1.5.3: NetBSD 1.5 から NetBSD 1.5.3 までのバイナリー配布物には、 このセキュリティー上の弱点が含まれています。 2004 年 4 月 21 日より前の NetBSD 1.5, 1.5.1, 1.5.2, 1.5.3 のソースは、 2004 年 4 月 22 日、もしくはそれ以降の NetBSD 1.5 のソースに アップグレードする必要があります。 CVS ブランチ netbsd-1-5 において更新が必要なファイルは、 次のとおりです。 sys/netinet CVS を使ってファイルを更新し、カーネルを 再構築・再インストールするには、次のコマンドを実行してください。 # cd src # cvs update -d -P -r netbsd-1-5 sys/netinet # cd arch/ARCH/conf # config CONFIG # cd ../compile/CONFIG # make clean depend; make # cp netbsd / # reboot 謝辞 - Thanks To ================ NISCC JPCERT/CC Markus Friedl Randall Stewart 改訂履歴 - Revision History =========================== 2004-04-21 初版公開 詳細と参考資料 - More Information ================================= 新しい情報が判明した場合、セキュリティー勧告は更新されることがあります。 PGP 署名されたこの勧告の最新版は、次の場所から入手できます。 ftp://ftp.NetBSD.org/pub/NetBSD/security/advisories/NetBSD-SA2004-006.txt.asc NetBSD および NetBSD のセキュリティーに関する情報は、次の場所から入手できます。 http://www.NetBSD.org/ http://www.NetBSD.org/Security/ Copyright 2004, The NetBSD Foundation, Inc. All Rights Reserved. Redistribution permitted only in full, unmodified form. $NetBSD: NetBSD-SA2004-006.txt,v 1.2 2004/04/21 17:34:50 david Exp $ $Id$