web-dev-qa-db-ja.com

rootが所有していないディレクトリにrootがファイルを書き込むのはなぜ悪いのですか?

これは別の質問へのコメントで出てきました、そして誰かが私にこれの理由を説明することができれば私はそれが大好きです。

特定のVHostのエラーをユーザーのホームディレクトリにログに記録することをApacheに提案しました。これは安全ではなかったため撃墜されました。どうして?

返信コメントで説明を求めましたが、rootが所有していないフォルダにrootを書き込むのは安全ではないということだけがわかりました。繰り返しますが、誰かが説明できますか?

ありがとう、

バート。

29
Bart B

an evil userは、rootが別の場所に書き込んでいるファイルを悪意を持ってポイントしようとする可能性があるためです。これはそれほど単純ではありませんが、実際には可能です。

例として、ユーザーが想定されるApacheログからsymlinkを作成する方法を見つけた場合、たとえば/ etc/shadow突然使用できないシステムになります。 Apache(root)はユーザーの資格情報を上書きし、システムに障害を引き起こします。

ln -s /etc/shadow /home/eviluser/access.log

access.logファイルがユーザーによって書き込み可能でない場合、それを乗っ取るのは難しいかもしれませんが、その可能性を回避する方が良いでしょう!

logrotateを使用してジョブを実行し、まだ存在していないファイルへのリンクを作成する可能性がありますが、logrotateはすぐに上書きされますログが大きくなります:

ln -s /etc/shadow /home/eviluser/access.log.1

symlinkmethodは、概念実証として与えられた、考えられる攻撃の1つにすぎません。

セキュリティはホワイトリストマインドで作成する必要があります。問題となるもの知っているをブラックリストに登録するのではありません。

32
drAlberT

プロセスが所有または信頼していないディレクトリにプロセスを書き込まないという一般的な原則は、適切なものです。ただし、この特定のケースでは、ApacheコードがO_NOFOLLOWなどでログを開くと信頼するのが妥当です。ユーザーのホームディレクトリへのログインは一般的な設定です。

2
poolie