mremap()にローカルセキュリティホール: 2.4.24と2.6.1-rc2緊急リリース 50
ストーリー by Oliver
境界チェックは確実に 部門より
境界チェックは確実に 部門より
k3c 曰く、 "Linuxカーネル2.2.25以前および2.4.23以前および2.6.0以前のバージョンにおいて、mremap(2)システムコールのメモリ管理コードにバグが見つかり、ローカルユーザがroot権限を不正に取得できることが分かった(参考:iSEC情報、CAN-2003-0985)。現在のところバージョン2.4.24と2.6.1-rc2だけがこのバグに対応しており、2.2系列には対応したバージョンはないとのこと(日本のLinux情報による)。"
先日のbrk()のセキュリティホール以来、プロセスのメモリ管理に関するコードの監査を進めている人が何人かいて、今回の発見もその一環だ。発見者はproof-of-conceptな悪用コードを作成できたと言っているが、いまのところ一般に流通している悪用ツールは存在しない。また、前回の時のリリースポリシーが一部で問題視をされたのを受け、2.4.24は2.4.23に対しこの問題とRTC回りでメモリが使用前にzeroで上書きされいなかったので、前の利用者の情報が数バイト洩れうる、というバグを修正しただけの緊急リリースとなった。実際、パッチはわずか264行だ。2.4.24-preXはそのまま2.4.25-preXになる。
どういった対策がなされたか (スコア:4, 参考になる)
Linuxはどうだとかいう話で白熱してるようですけど
どういった変更が加えられたか追ってみようと人はいないのかな
2.6の場合はmremap.cにこれを加えただけです
/* Don't allow the degenerate cases */
if (!(old_len | new_len))
goto out;
2.4の場合はこちら
/*
* Allow new_len == 0 only if new_addr == addr
* to preserve truncation in place (that was working
* safe and some app may depend on it).
*/
if (unlikely(!new_len && new_addr != addr))
goto out;
Re:どういった対策がなされたか (スコア:2, 参考になる)
- if (!(old_len | new_len))
+ if (!old_len || !new_len)
修正したLinus自身が誤りを認めています [theaimsgroup.com]。
Re:どういった対策がなされたか (スコア:1)
Change Log [kernel.org]には以下の洒落た文章が記述されています ;-)
Re:どういった対策がなされたか (スコア:0)
>> if (!(old_len | new_len))
>> goto out;
gentoo の gs-source の最新版(2.4.23_pre8-r2)は上記のように
なっていますが、間違ったままと考えていいんでしょうか?
Re:どういった対策がなされたか (スコア:0)
ひっどいコードだね、それ。
と書いて欲しいぞ。
Re:どういった対策がなされたか (スコア:1)
まー最適化されれば同じなのかもしれませんね。
Re:どういった対策がなされたか (スコア:1)
# ごくごく普通の書き方だと思ったりする自分は終わってるんだろうな、などと釣られてみる
-- Takehiro TOMINAGA // may the source be with you!
Re:どういった対策がなされたか (スコア:0)
if (old_len == 0 && new_len == 0)に
した所で体感出来るほどは遅くはならないだろうし
意味が分かりやすいように書いた方が後で読みやすいと思う。
#近い将来にコンパイラが解決出来る問題なら尚更。
Re:どういった対策がなされたか (スコア:2, 興味深い)
あと結構古いgccしか使えないという人も意外と多かったりする。gccのサポートが切れてしまったアーキテクチャとかいった本質的なのとかどうでもいいような理由とかで。
今回みたいな場面でこういう書き方がアレだというのはまったくもってその通りなんですが。ええ。
-- Takehiro TOMINAGA // may the source be with you!
2.2系列には影響は無い、との追加情報 (スコア:3, 参考になる)
「2.2 カーネルはMREMAP_FIXED flagをサポートしていないので脆弱性の影響を受けない」とのことです。
Re:2.2系列には影響は無い、との追加情報 (スコア:1)
関連記事 (スコア:2, 参考になる)
TurboLinuxのアップデートサイトで、2.4.18のセキュリティ修正版が出ていたので、何だろうと思ってたら、この記事を発見。早々、アップデートしましたが。
Exploit code 出ましたね (スコア:2, 参考になる)
VMWARE 上のRHL9(インストール直後ツルシのまま)で試したら、さっくり落ちました。
RedHatのErrata (スコア:2, 参考になる)
2004/01/05付けでErrata [redhat.com]がそれぞれ出てますね。
うはぁ、面倒だけど更新しなければ。(鬱)
Re:RedHatのErrata (スコア:1, 参考になる)
Re:RedHatのErrata (スコア:1)
上のコメントを書き込んだとき、そこまで読んでなかったです^^;(読めよって…)
さて、他にも12/31以前に準備してるものはあるのかしら(文脈からしたらなさげだけど)。
# で、現在、全マシンのkernelアップグレード中(再起動が面倒くさ~
2.6.1 は出ないの? (スコア:1)
「2.6 なんて人柱しか使ってないし rc でいいや」というメインテナの思し召し?
#なんか 2.6.1-rc2 のパッチ行数多いしいきなり当てるの怖いのさ
Re:2.6.1 は出ないの? (スコア:0)
Re:2.6.1 は出ないの? (スコア:1)
ChangeLog を見るほどのやる気がないだけです(弱。
#ネタにマジレスの気配
Re:2.6.1 は出ないの? (スコア:0)
Re:2.6.1 は出ないの? (スコア:1)
ご指摘のブツとあわせて こっち [kernel.org] を読むほどの気力は目下ありませんですはい。
#普段は rc から正式版に昇格したら入れ替えてます
#こんな感じで rc が取れたら入れてみるって人は少数派?
Re:2.6.1 は出ないの? (スコア:0)
| は 182番になってるし、
_ は …何番だろう。
コピペ失礼 (スコア:1, 参考になる)
patching file `Makefile'
patching file `arch/cris/drivers/ds1302.c'
patching file `arch/cris/drivers/pcf8563.c'
patching file `arch/m68k/bvme6000/rtc.c'
patching file `arch/m68k/mvme16x/rtc.c'
patching file `arch/ppc64/kernel/rtc.c'
patching file `drivers/acorn/char/i2c.c'
patching file `drivers/char/ds1286.c'
patching file `drivers/char/efirtc.c'
patching file `drivers/char/ip27-rtc.c'
patching file `drivers/char/mips_rtc.c'
patching file `drivers/char/rtc.c'
patching file `drivers/hil/hp_sdc_rtc.c'
patching file `drivers/macintosh/rtc.c'
patching file `drivers/sbus/char/rtc.c'
patching file `mm/mremap.c'
patching file `net/ipv4/netfilter/ip_fw_compat_masq.c'
patching file `net/irda/irnet/irnet.h'
/usr/src/linux-2.4.23 #
UMLでも影響するのかな (スコア:1)
10art-ni の RedHat サポートサービス (スコア:1, 興味深い)
失敗したかな?
またかよ・・・ (スコア:0, フレームのもと)
正直Windowsサーバーのほうが手間かからなくて良いんじゃないかと思える。
Re:またかよ・・・ (スコア:1, すばらしい洞察)
Re:またかよ・・・ (スコア:1)
使ってるdistributionによってはさほど手間もかからないのではないでしょうか?
distributorが公開するまで待つ必要がありますけど
待つと言えばWindowsの場合月に一回ということになったので 作業時間を集中させたりとかそういう点では楽になると思いますが それまでの間ほったらかしってのも怖くないですか?
『またかよ…』というかタイミング悪いっていうか……
Re:またかよ・・・ (スコア:1)
自分が使っているコードの監査をしてくれている人がいることは感謝してもしきれないぐらいすばらしいことではあるけれども、今後、同様にバグがfixされていくとするとその度に最新版カーネルでサーバを再起動する必要があるんですよね。
我々がWindowsでうんざりした月数回のパッチ当て->再起動がLinuxにもやってくるのでしょうか。
#ソース配布なのでパッチ検証なんかはマシでしょうが
Re:またかよ・・・ (スコア:1, 参考になる)
今2.6でサーバ立てようなんて冒険者は当然そういうリスクを考えるでしょうな。
それに企業ユーザーで2.6を使うのはまだ早すぎなんで
そのリスクを背負ってる人は居ないでしょう。
ちなみに2.6は現実問題としてまだベータから脱してきれていません。
あなたはkernel2.4ユーザーであると見受けましたが
あなたが管理しているサーバは何度再起動しましたか?
私が管理しているWindowsサーバはWindowsUpdateが週間だったころは
ほぼ毎週再起動かかってました。
#月間になっても回数は然程かわらず
よって実用に耐えかねるとして
それを補佐する意味でLinuxサーバを導入する事になったのですが
稼働してから一年で再起動は今回で二度目です。
その間、不具合の発生により我社が受けた被害は0です。
また、対応が迅速であったため二次被害も全く発生いたしませんでした。
来期からは完全にWindowsサーバをLinuxにリプレースする事が決定したので
後、3年から4年は2.4.24の世話になる予定です。
Re:またかよ・・・ (スコア:2, 興味深い)
その仮定の下では、セキュリティの代償として一時的にサーバの稼働率が下がるわけで、それがどの程度に収まっていくのか興味深いところです。
#残念ながら、サーバの再起動の回数は憶えてません
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:0)
まあ、どれくらい見逃されていたかに依存する訳だけどもね。
Re:またかよ・・・ (スコア:1)
そうすれば、悪夢の再起動三昧なんてことには……
そういえば、いまだWindowsにホットパッチ機構がないのは、お手軽さを追求しているMSにしては意外に感じますね。
何か越えがたいハードルがあるのかなぁ。
巧妙に潜伏したバグは心霊現象と区別が付かない。
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:0)
次はNetBSD [bse.org]がきます
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:1)
ある意味BSEは今かなり「キテる」けど…
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:0)
逆に「リーナス憎し」って人はあまりいない。(よね?)
攻撃されやすさならWindows>Linux?
Re:またかよ・・・ (スコア:0)
バグの存在を無視すればね。
「どうせ直らねーし もう気にするのやーめた」といって
セキュリティ対策やめちゃった人を何人かしってます。
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:0)
Re:またかよ・・・ (スコア:0)
短絡的な発言ですね
Re:またかよ・・・ (スコア:0)
短絡的な発言ですね。
…ちがうな、レッテル貼りしたがるこいつが厨なだけだな。(w
Re:またかよ・・・ (スコア:0)
ローカルユーザがroot権限を不正に取得 (スコア:0)
Re:ローカルユーザがroot権限を不正に取得 (スコア:0)
Re:ローカルユーザがroot権限を不正に取得 (スコア:0)
Re:ローカルユーザがroot権限を不正に取得 (スコア:0)
ほんとに大丈夫?
# ネタにマジレス