Previous Topへ Next

「Appleは6ヶ月もsudoの重大な脆弱性を放置している」と
セキュリティベンダーが騒いでいるが正直何が問題なのかよくわからん

Fire in the Hole

「Appleは6ヶ月もsudoの重大な脆弱性を放置している」とセキュリティベンダーが騒いでいるが正直何が問題なのかよくわからん


数日前からこういうニュースが流れている。

OS Xに放置された脆弱性、root権限を取得される恐れ-ITmedia ニュース

そのソースになったSophosのサイト
Apple neglects OS X privilege escalation bug for six months, gets Metasploit on its case…

こちらはこの手順をスクリプト化したメタエクスプロイトについて解説したサイト
Mac OS X Sudo Password Bypass / Packet Storm

管理者がsudoつまり神の権限を持ったコマンドを実行してから15分以内にsudo -kを実行して時計を1970年1月1日に戻してごにょごにょするとrootのパスワードなしにすべてのことが実行できてしまうのだそうだ。

UNIX的にはこれは大問題だ。
UNIXはターミナルサーバーとして利用されることが多いので、あるユーザがsudoをリモートで実行してそのセッションが切れないうちに悪意あるユーザがコンソールをいじってこれを実行したら、root権限はほしいままに乗っ取られてしまう。
rootを取られたらリモートも自由自在、システムの破壊からユーザの個人情報の抜き取りまで何でもできる。
これは大変だ。

この脆弱性が発表された直後にUNIXのsudoは改修されこの脆弱性は修正されている。
Terminalを起動してsudo -Vと打って実行して
1.7.10~、あるいは1.8.6〜
以上なら問題無い。
しかしMacのTerminalは残念ながら今でもこれより低いバージョンを表示する。
この脆弱性はAppleにも当然報告され、同様のアップデートが勧告されている。
にもかかわらず6ヶ月も経ったのにAppleは未だにこの問題に対応していない。
「重大な脆弱性を放置するApple製品ユーザは置き去り…」
ということらしい。


でも、これ何が問題なのかよくわからん。
Macを例えばMac Proをターミナルサーバーとして使っているところってあるのかな?
東京大学?
よしんばそういうところでターミナルサーバーにしているとして、マルチユーザにsudoを許可してるのかな?
普通許可しないと思うのだが…
ましてや一般のMacBook ProなどをiPhoneの母艦として使っているような個人ユーザには全く関係ない話じゃないのかな?

この手順を試してみたのだけど
sudoを実行してrootのパスワードを入力する
15分以内にsudo -kを実行、時計を1970年1月1日にセット
あるいはroot権限でメタエクスプロイトのモジュールを実行


この条件が揃わないとこの問題は起きない。

エクスプロイト解説ページのコメントがふるっている。
「バカな質問かもしれないが、root権限を持っているユーザがroot権限を乗っ取ることができる…ってこれどこが問題点なの?」

このエクスプロイトをどうやってroot権限で走らせるのか、管理者ユーザがコンソールにsudoのパスワードを入れた後席を立ったというタイミングをどうやって悪意ある第三者は知り得るのか…
ここらの肝心の問題が何も解説されていない。

おそらくAppleは
「この問題は重大な脆弱性とは考えていない」
という回答なのだろう。


実はこれは目新しい問題でもなくて数年前に既にこの問題はAppleに警告されAppleは
「この問題がセキュリティの重大な脆弱性になるとは考えていない」
という結論を出してしまっている。
詳細はこちらのページ
未公認だが存在するTerminalの認証の弱点を防ぐ

この問題はsudoのパスワードが15分間免除されるMacの仕様を攻撃してroot権限を取ってコマンドを実行できる可能性があるという警告をし、実際その実行コマンドを試作した人がいたが、これに対してAppleは感謝するどころか上記のコメントを送りつけてきて、以降この問題は一切無視している。

これはもし管理者ユーザがrootコマンドを実行したタイミングを常駐するdaemonか何かに監視させ(securitylogのタイムスタンプを監視することで可能かもしれない)rootが実行されたらこのコマンドを実行してroot権限を乗っ取ってしまう、いわゆるピギーバッキング(日本語では「ただ乗り」と訳すんだろうか?)が可能ではないかと警告した。

しかしこの当時別に持ち上がっていたURIの脆弱性に関する改修をもってAppleはこの問題は解決したと宣言した。
未実行のURIを新規に警告なしに実行することはできなくなったので、知らない間にroot権限を乗っ取るスクリプトを走らせることは不可能だ…という言い分だ。

これで今さらrootパスワードの15分猶予を永久にのばすことができる…なんていう仕様を
「脆弱性だ!」
と騒がれても
「今更何言ってるの?」
という感じしかしない。

この問題の根本的な解決法はこのリンク先のページにも書いた。

/etc/sudoersを開いて"Defaults"セクションに

Defaults:ALL timestamp_timeout=0

を追記


この方法で15分のパスワード免除の仕様を無効にする。
常にパスワードを要求するという設定に変えればいい。
システムメンテナンスなどの作業が面倒になるが、大した手間ではない。

要はリモートでrootを取られる可能性をゼロにすればいいので、この対策がもっとも確実だと思う。

もし盗難にあったMacBook Proなどのroot権限が取られてしまうことが心配なら、そんな心配はするだけ無駄だ。

こちらでも解説したが、システムディスクがなくてもMacのパスワードはリセットできる。
ということはリセットしたパスワードでrootになることができるので、この場合は何をどうしても防ぎ様がない。
その詳細はこちらに書いた。
OSXのrootパスワードはシステムディスクがなくてもリセットできる〜ていうことはrootパスワードではプライバシーも何も守れない!?

つまりこの数日ニュースになっているメタエクスプロイトでMacを乗っ取れるというニュースも
「sudoer権限を持ったユーザがログインできればroot権限を乗っ取れる」
という問題でしかない。

「もともとroot権限を持ったユーザがroot権限を乗っ取って何が問題なのか?」
というのはけだし名言だった。

ウイルスにこれを仕込んでroot権限の防壁を無効にし、任意のMacを乗っ取るなんてことも可能になるかもしれない。
しかしそれにはまず、Macに自由に進入できるウイルスを作らなくてはいけない。
その進入の過程でroot権限がどうしても欲しい…これも堂々巡りだ。

結局ユーザが(偽セキュリティアプリにroot権限を渡してしまうような) 何も考えないで何でもかんでもOKを押してしまうユーザでなければ問題がないし、そういうユーザならどんな対策をしても無効だ。
そういうユーザにはrootパスワードを教えない…という対策しかないと思う。





sudoでrootパスワードを入力した後でsudo -k、時計を1970年1月1日にセット…
時代はベルボトムジーンズを履いた「なうなヤング」の時代に記憶は旅する…
などとのんきなことを言っている場合ではない
これで/var/db/sudo/usernameのタイムスタンプが無効になり
本来15分だけのrootパスワード猶予が永遠に伸びる
これを自動実行するエクスプロイトまで公表されてしまった…さあ大変だ!
これによっていつでも誰でもroot権限を乗っ取ることができる…というのだが…




これにはまず前提として前回root権限でsudoを実行して15分以内という条件がつく
sudo -Kを打ってsudoのタイムスタンプディレクトリを削除すればそもそも15分猶予もつかない
次回sudoを入力しようとすると「sudoをタイプする時はダブルチェック、manで詳細を読め」という警告が出る
これは昔はもっと味わい深い警告文だった(Linuxは今でもそうらしい)
1)他人のプライバシーは尊重せよ
2)タイプする前にまず考えろ
3)偉大なる力には偉大なる責任が伴う

(スパイダーマンだw)




sudoコマンドがこの脆弱性があるバージョンかどうかはsudo -Vで確認できる
Macは残念ながら問題あるバージョンらしい
ただエクスプロイト実行にはroot権限が必要なのでやはりこれ鶏と卵のような気がしてきた
結局15分のパスワード猶予を無効にするのがもっとも安全で確実な対処法と思う
それと何でもインストールしてOKをクリックするユーザにはrootパスワードを教えないこと
盗難に遭ったケースは実はMacはrootリセットが可能でこれを防ぐ方法はない
結局この「脆弱性」は別に目新しいものではない気がするが…



2013年9月3日















Previous Topへ Next





site statistics