アカウント名:
パスワード:
リンク先のITmediaの記事に書かれていますが、root権限がなくてもシステムの時刻を変更することができます。
このため管理者パスワードを入力しなくても、「systemsetup」ユーティリティを使って簡単にOS Xに変更を加えることができてしまうという。
$ systemsetup -setdate mm:dd:yy$ systemsetup -settime hh:mm:ss
実際の挙動は知らないけれど、 ITmedia の記事には「root 権限がなくてもシステムの時刻を変更することができる」なんて書いてないよ。それに、システム全体に影響のある設定が root 権限なしでできるってのは、さすがにないだろうという気がする。
そこに書いてあるのは、「システムの日付が 1970 年 1 月 1 日になっていれば、過去に sudo したことのあるユーザーが再度 sudo するのにパスワードを入力する必要がない」とい
僕は勘違いしていましたが、「/var/db/sudo/username ディレクトリーが未来の時刻になっていると sudo がパスワードを要求しない」というわけではないみたいですね。 /var/db/sudo/username ディレクトリーの時刻に合わせてシステム時刻を変えて、あたかも /var/db/sudo/username ディレクトリーが過去 5 分以内に作られたかのような振りをしてやれば、パスワードを入力することなく sudo ができるということのようです。特に sudo -k が「次回はパスワードを要求するようにする」という意味だと思って使っていると、じつは前回入力を epoch として扱うだけな
リンク先に書いてあるとおりだとすると、正規のユーザがsudoやsudo -kを行ったかどうかは関係無いのでは?
「If … the user has ever run the "sudo" command」と書いてあるので、過去に少なくとも 1 度 sudo を使ったことがあることは必要です。 sudo -k は既にある /var/db/sudo/username ディレクトリーの時刻を epoch に変えるだけで、ディレクトリーが存在しない場合に作るわけではないということだと思います。 Sophos のブログ記事にも、 sudo -K を使えば /var/db/sudo/username が削除されるので対策になると書いてあります。
僕は sudo できるユーザーが離席している間に、攻撃者 (root 権限を取りたい通りがかりの人) が離席中の人のアカウントからシステム時刻を設定すれば良い、という点を完全に見落としていました。 #2453590 でも全然駄目でした。
sudo -k を使わなくても、 /var/db/sudo/username ディレクトリーの時刻に合わせてシステム時刻を変えれば良いと思うので、 sudo -k は本質ではないと思います…が、まだ何か間違えているかも。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
そもそも (スコア:0)
この操作にroot権限が必要だったりしません?
Mac OSはどうなのか知りませんが。
Re: (スコア:2)
リンク先のITmediaの記事に書かれていますが、root権限がなくてもシステムの時刻を変更することができます。
$ systemsetup -setdate mm:dd:yy
$ systemsetup -settime hh:mm:ss
Re: (スコア:2)
実際の挙動は知らないけれど、 ITmedia の記事には「root 権限がなくてもシステムの時刻を変更することができる」なんて書いてないよ。それに、システム全体に影響のある設定が root 権限なしでできるってのは、さすがにないだろうという気がする。
そこに書いてあるのは、「システムの日付が 1970 年 1 月 1 日になっていれば、過去に sudo したことのあるユーザーが再度 sudo するのにパスワードを入力する必要がない」とい
Re: (スコア:0)
特別な意味を持ってるみたいです。
こんな大事な場所での素朴な実装が時代を感じさせます。
Re: (スコア:2)
僕は勘違いしていましたが、「/var/db/sudo/username ディレクトリーが未来の時刻になっていると sudo がパスワードを要求しない」というわけではないみたいですね。 /var/db/sudo/username ディレクトリーの時刻に合わせてシステム時刻を変えて、あたかも /var/db/sudo/username ディレクトリーが過去 5 分以内に作られたかのような振りをしてやれば、パスワードを入力することなく sudo ができるということのようです。特に sudo -k が「次回はパスワードを要求するようにする」という意味だと思って使っていると、じつは前回入力を epoch として扱うだけな
Re:そもそも (スコア:0)
前提条件は、sudoが可能なユーザがログインした状態で放置されている端末で、
パスワードなどの入力無しにシステムクロックを変更可能、だけかと。
・そういう端末でsudo -kを実行
・sudo-kにより、sudoは、「前回1970/1/1 00:00に実行された」と、実行記録を書き換える
・システムクロックをその直後に設定すれば、sudoはそれを「制限時間内の再実行」と見なして通す
と。
sudoは、
(1) その端末上で、パスワードが入力されるなど、正しくsudoが実行された
(2) 1から一定時間(デフォルトでは5分?)以内である
の2つの条件が成立する場合は、パスワードの入力無しに実行する、と言う仕様。
だけど、最適化大好きなsudo実装者が、2だけをチェックする実装にしちゃったと言うのが胆。
「前回、世界の始まりの時刻にsudoが実行された」と記録されていれば、2はまず成立しないので、
この記録の設定で、「まだsudoは実行されていない」というフラグの代わりに出来る。
その上で、sudo -kは、「前回の実行をなかったことにして、次回のsudoを邪魔する」という、誰がどう実行しても
安全性を上げるだけの行動だから、と、いつでも問答無用で実行できるように設計された。
ところが一方でその実装は、「前回、遙か昔に『sudoが実行された』ことにする」という、安全性を下げかねないフラグを立てる実装になっていた。
ただ、「その立て放題のフラグが危なくない」と言うことを、「前回」と言うのが、絶対にあり得ないぐらいの昔である、という前提に依存して保証していた。
なので、システムクロックを、その、あり得ないぐらいの昔に設定できる人に対しては、セキュリティ上の穴になった、と。
Re:そもそも (スコア:2)
「If … the user has ever run the "sudo" command」と書いてあるので、過去に少なくとも 1 度 sudo を使ったことがあることは必要です。 sudo -k は既にある /var/db/sudo/username ディレクトリーの時刻を epoch に変えるだけで、ディレクトリーが存在しない場合に作るわけではないということだと思います。 Sophos のブログ記事にも、 sudo -K を使えば /var/db/sudo/username が削除されるので対策になると書いてあります。
僕は sudo できるユーザーが離席している間に、攻撃者 (root 権限を取りたい通りがかりの人) が離席中の人のアカウントからシステム時刻を設定すれば良い、という点を完全に見落としていました。 #2453590 でも全然駄目でした。
sudo -k を使わなくても、 /var/db/sudo/username ディレクトリーの時刻に合わせてシステム時刻を変えれば良いと思うので、 sudo -k は本質ではないと思います…が、まだ何か間違えているかも。