Debian サーバ侵入の調査報告
2003 年 12 月 2 日
Debian 管理チームとセキュリティエキスパートは、ようやくプロジェクトマシン 四台への不法侵入に使用された方法を突き止めることができました。 しかし、誰がこれを行ったのかはまだわかっていません。
パッケージアーカイブが侵入者によって変更されることはありませんでした。
Debian の管理、セキュリティチームは調査と再インストールを行う過程の、 かなり早い段階でこれらのアーカイブ (security, us, non-us) をチェックしました。そんなわけで、 プロジェクトは再びセキュリティアーカイブを調査し、安定版の更新 (3.0r2) が汚染されなかったことを確認することができました。
安定版の更新と同時に侵入されることをプロジェクトが予測していれば、 関係者はそれを延期したでしょう。しかし、更新されたパッケージは、 不法侵入が発見された時間には既に安定版アーカイブとミラーサーバに入っていたので、 それを取り消すことはもうできませんでした。
異なる制御データを基にして複数の方法によりパッケージを確認しました。 するためとアーカイブが攻撃者によって変更されなかったことを保証します:
- 外部の侵入されていないマシンに保存された、過去数週間の MD5 sum のリスト
- 外部の侵入されていないマシンの debian-devel-changes のデジタル署名された .changes ファイル
- それぞれのアーカイブサーバ上のデジタル署名された .changes ファイル
- 外部に保存されたミラーログファイル
時系列
以下は、侵入されたマシンの発見、復旧を時系列で挙げたものです。 時刻はすべて UTC です。会話には正確な時間は入らないので、 時刻は推定でしかないものがあります。
- 09/28 01:33 Linus Torvalds が do_brk() を修正した 2.6.0-test6 をリリース
- 10/02 05:18 Marcelo Tosatti が do_brk() 境界チェックを適用
- 11/19 17:00 探り出したパスワードで攻撃者が klecker にログイン
- 11/19 17:08 ルートキットが klecker にインストールされる
- 11/19 17:20 同じパスワードで攻撃者が master にログイン
- 11/19 17:47 ルートキットが master にインストールされる
- 11/19 18:30 攻撃者が master からサービスアカウントを使って murphy にログイン
- 11/19 18:35 ルートキットが murphy にインストールされる
- 11/19 19:25 murphy で Oopses が始動
- 11/20 05:38 master で Oopses が始動
- 11/20 20:00 master と murphy で Oopses を発見
- 11/20 20:54 ルートキットが gluck にインストールされる
- 11/20 22:00 debian.org への侵入を確認
- 11/21 00:00 全アカウント停止
- 11/21 00:34 security.debian.org をシャットダウン
- 11/21 04:00 gluck (www, cvs, people, ddtp) をシャットダウン
- 11/21 08:30 www.debian.org が www.de.debian.org を指すように設定
- 11/21 10:45 公示
- 11/21 16:47 開発者情報更新
- 11/21 17:10 murphy (lists) と master をシャットダウン
- 11/22 02:41 security.debian.org がオンライン復旧
- 11/25 07:40 lists.debian.org がオンライン復旧
- 11/28 22:39 Linux 2.4.23 リリース
発見
11 月 20 日、木曜日の夕方 (GMT)、管理チームはカーネル oopses が master にいくつかあることに気付きました。 そのシステムは長期にわたり問題なく動作していたので、 システムは、ハードウェア問題の可能性について、 より詳細に調査しようとしていました。 しかし、同時に二台目のマシン、murphy で全く同じ問題が発生していたことで管理者たちは不審に思いました。
また、klecker, murphy 及び gluck に "Advanced Intrusion Detection
Environment" (パッケージ aide)
をインストールしてファイルシステムの変更を監視するとほぼ同時に
/sbin/init
が置き換えられていると警告が始まり、
/usr/lib/locale/en_US
の変更時刻と作成時刻が変わっていました。
さらなる調査によりこれらの問題の原因が両方とも SucKIT root-kit (1.3b) であることが明らかになりました。これには、パスワードを探ったり、 検出を回避する機能 (つまりプロセスやファイルを隠すツール) があり、 これがカーネルに直接インストールされました。そのことが oopses に気付かせることになりました。
詳細な攻撃分析
11 月 19 日、水曜日、午後五時頃、探り出したパスワードを使用してホスト klecker (.debian.org) 上の特権がない開発者アカウントにログイン。 攻撃者はそれから HTTP を通してソースコードを取得し、(当時は) 未知であったローカルに対するカーネルの弱点を突き、そこから root 権限を獲得しました。その後、SucKIT root-kit がインストールされました。
同じアカウントとパスワードデータが、マシン master へのログイン、 同じ弱点をついた攻撃、SucKIT root-kit のインストールに使用されました。
攻撃者はそれから、同じアカウントでホスト murphy の権限を得ようとしました。 これは murphy が制限されたマシンであったことから失敗しました。 このマシンは目的がメーリングリストのサーバだけで、 一部の開発者しかログインできなかったのです。 最初の試行がうまくいかなかったので、master の root 権限を使って、バックアップ目的で使用される管理アカウントの権限を獲得、 murphy の権限も獲得しました。
翌日、攻撃者は master で探り出したパスワードを使用して gluck にログイン、 root を獲得して、さらに SucKIT root-kit をインストールしました。
分析の結果、/sbin/init
プログラムの上書きとルートキット
のインストールが行われた日時、時刻が明らかになりました。
アナリストはさらに、マシン上で root
権限を得るのに使用された実行ファイルを発見しました。これは
Burneye により保護され、暗黒化されていました。
セキュリティエキスパートは、弱点を細かく調べ、
どのカーネルバグが利用されたかを突き止めました。
brk システムコールにおける整数オーバフローが、カーネルメモリ (ページ変更保護ビット) の上書きに利用されました。 そうすることで、攻撃者はカーネルのメモリ空間を制御を掌握し、 メモリのどの値でも変更することが可能になりました。
このカーネルコードは九月に Andrew Morton により改善され、十月以降のリリース前カーネルにコピーされたのですが、 この改良がセキュリティとして考慮されることはありませんでした。 なので、セキュリティ報告はどのベンダからも出されませんでした。 しかし、それがローカル root 不正使用に使われることが発見されると、 Common Vulnerabilities and Exposures project プロジェクトは CAN-2003-0961 をこの問題に割り当てました。これは先週リリースされた Linux 2.4.23 で修正されています。Debian の勧告は DSA 403 です。
Linux 2.2.x ではこの前に境界チェックが行われるので、この弱点はありません。Sparc や PA-RISC のアーキテクチャではユーザとカーネルのアドレスが異なるアドレス 空間にあるため、それらカーネルにはこの弱点は無いものとも思われます。
使用された弱点を私たちが知らない誰にでも知らせるということはできない、 いうことをわかってください。そして、それを聞かないでください。
復旧
マシンのシャットダウン後に侵入されたハードディスクのイメージが作成され、 別個のマシン上に保存されました。それらは分析をしている人に分配されました。 米国にある三台のマシン (master, murphy, gluck) はその後再インストールされ、 サービスは調査の後に適切なサービス管理者により一つずつ復旧されました。
しかし、klecker では、定期保守のためにこれは延期されたので、 セキュリティアーカイブは他のサービスよりも早くオンラインにすることができました。 その時、klecker に対してコンソールアクセスもできなかったので、 復旧はリモートから行う必要がありました。ファイアフォールで分離された ネットワーク上でシリアル経由でローカルマシンにコンソールログインし、 ディスクイメージの作成後にルートキットの削除、カーネルの交換、hardened 、 バイナリの再確認、 複数の異なる外部ソースによるセキュリティアーカイブの確認が行われました。 このマシンは次の数週で再インストールされます。
セキュリティの防止策として、全開発者アカウントの LDAP の無効化、さらに重要なマシンからの SSH 鍵の削除が行われたので、 これ以上マシンに侵入することができなくなりました。しかし、これは事実上、 ファイルのアップロードや CVS リポジトリへのアクセスを伴う公開型の Debian の作業をすべてできなくすることになりました。
quantz (つまり Alioth, arch 及び subversion) で使用されていたパスワードもすべて同様に無効にされました。 SSH authorized keys もすべて同様に削除されました。 lost password system を使用して新しいパスワードを受け取ってください。
サービスがすべて再始動すると、マシンは十分に安全になり、LDAP はリセットされます。開発者は新しいパスワードを再び作成することができます。 これがいつ起こるものなのかは現在予測することができませんが。
復旧において、SSH は侵入されたマシンに再インストールされました。 そのため、これらのホストでは RSA host keys 及びそのフィンガープリントが新しくなっています。鍵は、作成されると同時に LDAP に含められます。また、ここから取得することができます。
結論
パスワードを更新してください!
侵入されたホストにおいてパスワードが探り出されたということは、 パスワードが関係する発信接続についてもすべて探り出されたと考えられる、 つまり、パスワードは攻撃者に知られていると考えるべきです。 したがって、パスワードはすぐに変更すべきです。
さらに、Debian マシンにアクセス可能で、 他のマシンや鍵に同じパスワードやパスフレーズを使っている場合は、 それぞれのパスワードやパスフレーズをできるだけ早く変更することを強く勧めます。
これらのマシンのどれかで SSH 鍵を生成または保存していて、
他のマシンへのログインに使われている
(つまり、.ssh/authorized_keys
にインストールしている)
場合は、それも同様に削除すべきです。
debian.org のマシンにあった GnuPG/PGP の秘密鍵は Debian キーリングから除去、使用停止されます。
自分のマシンについて心配する開発者は少なくとも chkrootkit を実行し、その出力を確認すべきです。Matt Taggart が、以下のアドレスで現行バージョンの woody へのバックポートを保守しています:
- deb http://lackof.org/taggart/debian woody/chkrootkit main
- deb-src http://lackof.org/taggart/debian woody/chkrootkit main
さらに、Wichert Akkerman と Matt Taggart により、問題予防措置 の詳細なリストが提供されています。
SucKIT Root-Kit
SucKIT は Phrack 58 号の記事 0x07 ("Linux on-the-fly kernel patching without LKM", by sd & devik). で公開されているルートキットです。これは、/dev/kmem を通してロードされる完全に機能するルートキット、つまり、 カーネルがカーネルモジュールのロードに対応している必要がありません。 これは偽装されたパケット (ほとんどのファイアウォール設定を迂回する)によって開始された再接続シェルへの、 パスワード保護されたリモートアクセスを提供し、 プロセスやファイル、接続を隠蔽することができます。
通常、SucKIT はシステム起動時に /sbin/init として開始され、
フォークして自分自身をカーネルにインストールし、バックドアを起動して、
元の "init" バイナリのコピーを親プロセス (pid 1) から開始させます。
以降の /sbin/init
の実行は元の init
にリダイレクトされます。
TESO's Burneye 防護
Burneye は、Phrack 58 号の記事 0x05 ("Armouring the ELF: Binary encryption on the UNIX platform", by grugq & scut) で公開されている、UNIX プラットフォーム上の ELF バイナリを暗黒化する方法です。 TESO's Burneye のようなツールを使って攻撃者は実行可能プログラムを変更し、 その真の目的を隠し、ファイアウォールフィルタ、侵入検出システム、 アンチウィルスソフトウェア、及び調査者の詮索から逃れます。
謝辞
- James Troup と Ryan Murray は全ホストに対する全体的な作業に
- Adam Heath と Brian Wolfe は master 及び murphy に対する作業に
- Wichert Akkerman は klecker に対する作業に
- Dann Frazier と Matt Taggart は gluck に対する作業に
- Michael Stone と Robert van der Meulen は分析作業に
- Marcus Meissner は使用された弱点の調査に
- Jaakko Niemi は lists.debian.org の確認、復旧に
- Colin Watson は bugs.debian.org の確認、復旧に
- Josip Rodin はメーリングリストのウェブアーカイブの確認、復旧に
報道の反応
- Slashdot, Nov 21, 2003
- eWeek, Nov 21, 2003
- InternetNews, Nov 21, 2003
- Heise Newsticker, Nov 21, 2003 (German)
- Pro-Linux, Nov 21, 2003 (German)
- Linux-Community, Nov 21, 2003 (German)
- BarraPunti, Nov 21, 2003 (Spanish)
- Newsforge, Nov 21, 2003
- SearchEnterpriseLinux.com, Nov 22, 2003
- Debian Planet, Nov 22, 2003
- PC World, Nov 24, 2003
- ZDNet UK, Nov 24, 2003
- Enterprise Linux IT, Nov 24, 2003
- The Age, Nov 24, 2003
- Sydney Morning Herald, Nov 24, 2003
- Windows & .NET Magazine, Nov 24, 2003
- Infoworld, Nov 24, 2003
- Linux Insider, Nov 24, 2003
- eCommerce Times, Nov 24, 2003
- TechNewsWorld, Nov 24, 2003
- The Register, Nov 28, 2003
- Newsforge, Nov 28, 2003
- Slashdot, Nov 28, 2003
- Slashdot, Dec 1, 2003
- The Age, Dec 1, 2003
- Sydney Morning Herald, Dec 1, 2003
- Pro-Linux, Dec 2, 2003 (German)
- Heise Newsticker, Dec 2, 2003 (German)
- Golem, Dec 2, 2003 (German)
- LWN, Dec 2, 2003
- The Register, Dec 2, 2003
- ZDnet DE, Dec 2, 2003 (German)
- Linux-Community, Dec 2, 2003 (German)
- Heise, Dec 2, 2003 (German)
- Heise Newsticker, Dec 2, 2003 (German)
- Symlink, Dec 2, 2003
- Pro-Linux, Dec 3, 2003 (German)
- Heise Newsticker, Dec 4, 2003 (German)
- Symlink, Dec 4, 2003 (German)
- Symlink, Dec 4, 2003
- Newsforge, Dec 4, 2003
- Newsforge, Dec 5, 2003
- OSnews, Dec 10, 2003
- Cnet, Dec 10, 2003
- Newsforge, Dec 30, 2003
連絡先
より詳しい情報を希望する場合は、Debian のウェブページ https://www.debian.org/ を参照するか、 press@debian.org にメールを送ってください。