anchor
未公認だが存在するTerminalの認証の弱点を防ぐ
rooted(Freeware)
OS10.3Panther対応
OS10.4Tiger対応
OSXに現在でも残る脆弱性に関するデモ。
これはMyNetの作者さんのサイトで見つけた記事。
昨年にシステムのURIを突いた脆弱性が問題になってその実証コードまで発表されたためにMacOSXには重大なセキュリティホールがあるということが結構騒然と話題になっていた。
この脆弱性についてはいくつか対策ソフトがでたし、アップル自体からも対応したセキュリティアップデートが出たので一応事態は収束したようなことになっている。
しかしこの作者さんのサイトの記事によるとこのセキュリティの脆弱性の問題は完全に解決したわけではなく今でも同じ問題が残っているということを書いている。
書いているだけでなく作者さん自身が作った、それを証明するための実証コードがこのrootedということになる。
これを起動してテストしてみたところ、なんと確認なしにTerminalを起動してコマンドをそこに置こうとした。
私の場合、こちらの記事で書いた安全対策を施していたので、この実証コードはTerminalを起動したところで止まってしまった。
しかしもしこの安全策が施されていなかったらどうなるかというのがこのキャプチャー。この通りのことが起こるわけだ。
このアプリはあくまでただの実証コードだから、Terminal上で起こることは無意味な数列を表示して止まるだけの話だ。
だから安心して試してもらいたい。
この実証コードは何を実証しているかというと、この方法なら未知のアプリがはじめてTerminalを呼び出してコマンドを実行することができるということだ。
このコマンドはアプリの中のリソース
rooted/Rooted.app/Contents/Resources/expscreen
に記述されてアプリの実行ボタンのクリックでTerminalで実行される。
このコマンドは無意味な数列を表示するだけだが、この実証コードの「echo~」以下がもし
sudo rm -rf ~/
とかいうコマンドになっていたらどうなるだろうか。
ユーザ領域の全てのファイルは一瞬で消えてしまうかもしれない。
あるいはもし、
sudo rm -rf /
なんてコマンドを実行されたら一瞬で起動ボリュームの中身はすべて消えてしまう。
(実はこのコマンドは一度Linuxで試したことがあるのだが、システムの動作に支障があるところでコマンドは止まってしまうので実際には全てが消えてしまうわけではない。しかしシステムとユーザ領域に重大なダメージが残ることには変わりはない)
あるいは何かもっと狡猾なコードを書いて特定の場所にディスクの中の何かを勝手にアップロードするというようなこともできるかもしれない。
いずれにしてもこういうようなコードを悪用すれば、オンラインウエアを装ってシステムを破壊するようなコマンドを実行するアプリが作れてしまうわけだ。
作者さんが「この脆弱性の危機は去ったわけではない」と書いていた意味がよく分かった。
だからこのサイトを見ている皆さんは是非こちらの記事で書いたTerminalに関する安全対策を実行しておいてもらいたい。
これをやっておけばそういう悪質な偽装アプリをつかんだとしても
「世の中には気分悪いことをする奴がいるなぁ!」
と舌打ちするだけで済む。
しかしやっていなければ舌打ちだけでは済まないかもしれない。
rootedはTerminalを起動してコマンドを実行するということを実証するだけのアプリだ
しかしもしこれが「webブラウズを最適化するアプリだ」とか書いてあって
「高速化」なんてボタンが下にあって実際には中身は悪質なコードだとしたらどうだろう?
私の場合は上記の記事の通りアプリやファイルがTerminalを
呼び出して
何かのコマンドを実行しようとしてもこういう確認が出る設定を施している
また確認に無自覚にOKを出しても結局そういうコマンドは実行せずに
「このパスにあるコマンドを実行しようとしたよ」という記録を表示するだけだ
だからここに悪質なコマンドが仕込まれていても問題はない
気分が悪いだけの話だ
しかしもしその安全策が施されていなかったらこの通り
コードに含まれたコマンドを全く確認無しに実行してしまう
このrootedのコマンドは無意味で長大な数列を表示するだけだ
しかしここにシステムを破壊するような悪質なコマンドが
仕込まれていたら一体どういうことになるだろうか?
ここまでの記述を読んで
「しかしsudoで実行するプロセスはrootのパスワードを要求するはずだからこのコードは実害がないのでは?」
と思われた方も多いと思う。
その疑問は正しい。
しかしこの作者さんが問題にしている部分はまさにそこのところなのだ。
作者サイトを要約すると
「sudoで実行された認証は以下の3つの事実によりその妥協的な仕様を悪用される可能性がある
1)デフォルトではsudoは一度認証されると5分間の猶予期間は次のsudoを実行する時にパスワードを要求しない
2)sudoはグローバルに設定されていてttyに関連づけられていない。これはユーザーやシェルウインドウに縛られていないということだ
3)sudoは全てのエントリーを/var/log/system.logに書き込む。これは全ての管理者ユーザから閲覧ができてしまう
これでどういう問題が起きるかというと例えばトロイの木馬を作成する時に、バックグラウンドで潜伏しているようなものを作れば良い事になる。
sudo認証のエントリーは/var/log/system.logに書き込まれるのでここを監視していればsudoが実行されたことを知ることができる
それでユーザがsudo認証、またはそれに準ずる認証をした時に
「ピギーバッキング(便乗)」
して5分以内にTerminalを起動しsudoコマンドを実行するようなスクリプトを書けば良い。
そうすればOSX上ではいかなる権限も乗っ取ることができる」
というのだ。
Appleにはこの可能性は警告したそうだが
「ユーザはそのような不適切なスクリプトを走らせることはないだろう」
ということでこれは問題ではないと回答されたそうだ。しかし作者さんはこのAppleの見解は
「到底受け入れがたい」
と書いておられる。
私もこの記事を読むまではこういう可能性は知らなかったが、いわれてみれば確かに危うい感じはする。
例えばセキュリティに関するログの/var/log/secure.logはGUIのコンソールでも見ることができない
これはroot権限で保護されているので見られないような仕様になっている
しかしこのログはTerminal上なら一度sudoでパスワード認証をしてしまえば
5分以内ならパスワード無しで管理者グループのアカウントから見えてしまう
またここで示したようにsudo ls /var/db/shadow/hashというようなコマンドを使えば
パスワードの暗号化ハッシュ値もこのとおり見えてしまう
これを先ほどの実証コードと組み合わせてバックグラウンドで
自動的に動くトロイの木馬を書くことができたらどうだろうか?
全てが可能になってしまうのではないだろうか?
この対策は上記のようにTerminalに勝手にログインさせないというbashrcの追記でおそらくは防げると思う。
しかしこれでは不安だという向きには、作者サイトに掲げられた対策をお勧めする。
それは以下の内容だ。
1)トロイの木馬が監視する可能性がある/var/log/system.logへのsudoのエントリーの書き込み先を認証がないと閲覧不可能な/var/log/secure.logに変更する
/etc/sudoersを開いて"Defaults"セクションに
Defaults:ALL !syslog
Defaults:ALL logfile=/var/log/secure.log
と追記する
2)5分間のsudoの認証猶予を無効にする
/etc/sudoersを開いて"Defaults"セクションに
Defaults:ALL timestamp_timeout=0
と追記する
3)sudo認証を全てTTYに関連づけて、他のアカウントやセッションが利用できないようにする
/etc/sudoersを開いて"Defaults"セクションに
Defaults:ALL tty_tickets
と追記する
この3つの対策のうちのいずれかを実行していればこの危険性は除去できるという。
これも可能なら実行しておいた方が良い。
sudoersの編集はTerminalを起動してvisudoコマンドで実行する
visudoはルートでログインしないと使えないが
そのコマンドはUNIXのスタンダードなエディタのviと同じだ
iで編集モードに入ってラインを書き込み:wqで保存して終了だ
これを実行するとsudoコマンドを入力するたびにいちいちパスワードを
要求されるようになってしまうが上記の未知のトロイの木馬の脅威はなくなる
それにポカミスでsudoでやってはいけないコマンドを実行してしまうのを
防ぐというフールプルーフにもなるので一石二鳥ではないだろうか