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


28

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

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

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

おかげで、

バート。


4
Apacheがrootとして実行しているのは何ですか-最小特権の原則はそれに対して叫びます!
ジョナサンレフラー

1
Apacheはwwwとして実行されていますが、通常どおりポート80にバインドできるようにrootとして起動されています。どうやらそれはまた、rootとしてログに記録します。
バートB

回答:


31

ので悪のユーザーが悪意を持ったファイルを指すように試みることができる別の場所に書き込んでいます。これはそれほど単純ではありませんが、本当に可能です。root

例として、想定されるApacheログから、たとえば/ 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

シンボリックリンクの方法は、概念実証として与えられ、攻撃の可能性のうちの1つにすぎません。

セキュリティは、問題であることがわかっているものブラックリストに載せるのではなく、ホワイトリストの考え方で作成する必要があります。


ファイルに読み取りのみを許可し、削除、編集、または他の何か(chown、chmodなど)を実行できないように、アクセス許可を設定する方法はありますか?
ジョシュア

可能なすべてのターゲットファイルでこの操作を行う必要があります。この書き込み可能なファイルは、攻撃者が作成したリンク自体ではなく、気に入ったファイルです。
drAlberT

2
@Joshua:chownはrootのみが実行できます。chmodは、ファイルの所有者が実行できます。IIRC、ディレクトリの所有者が名前を変更できます。AlberTが述べているように、rootがファイルを作成する前にリンクを作成することは、ディレクトリに書き込むことができる人なら誰でも行うことができます。
ATK

2
@atk:さらに、ディレクトリの所有者は誰でもファイルから削除できます(スティッキー+tビットが設定されていない場合)。たとえファイル自体への書き込み権限がない場合でも(unlink()はディレクトリへの書き込みであり、ファイル)。rootが事前にファイルを作成した場合でも、ディレクトリ所有者はそれを削除して、他のシンボリックリンクに置き換えることができます。
ジェームズ・スニーリンガー

1
eviluserが/ home / eviluserに書き込むことができる場合(またはディレクトリのアクセス許可を変更できる場合-IOWを所有している場合)、access.logのアクセス許可が何であるかは関係ありません。eviluserはファイルを(再)移動し、その場所にシンボリックリンクを配置できます。もう1つの質問は、ソフトウェアが開くものに注意を払うかどうかです。
ジョナサンレフラー

1

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.