web-dev-qa-db-ja.com

PHP / Apache / Linuxのコンテキストでは、chmod 777が危険なのはなぜですか?

この質問 の議論に触発された、おそらく愚かな質問。

LinuxベースのWebホスティングでディレクトリまたはファイルを777の権限レベルのままにしておくことは悪いことであり、常に必要最小限の権限を設定することは、すべての人に教えられてきました。

特にPHP/Apacheコンテキスト)で、正確にが悪用の危険のどこにあるのか私は今興味があります。

結局のところ、PHPスクリプトファイルは、「実行可能」としてマークされているかどうかに関係なく、外部から(つまり、Webサーバーへの呼び出し、続いてインタープリターへの呼び出しを通じて)実行できます。コマンドラインのphpインタープリターを介して呼び出されるファイルにも同じことが当てはまりますよね?

では、777の脆弱性はどこにあるのでしょうか?同じマシン上の他のユーザーが、誰でも書き込み可能にされたファイルにアクセスできるというのは事実ですか?

45
Pekka

これが1つのシナリオです。

  1. ユーザーがアップロードできる保護されていないディレクトリがあります。
  2. シェルスクリプトと、シェルスクリプトへのsystem()呼び出しが含まれるphpファイルの2つのファイルをアップロードします。
  3. ブラウザでURLにアクセスして、アップロードしたばかりのphpスクリプトにアクセスし、シェルスクリプトを実行します。

このディレクトリが777の場合は、誰でも(phpスクリプトの実行方法であるApacheを含む)誰でも実行できることを意味します!そのディレクトリとおそらくディレクトリ内のファイルに実行ビットが設定されていない場合、上記の手順3は何もしません。

コメントから編集:重要なのはPHPファイルの権限ではなく、実行されるのはPHPファイル内のsystem()呼び出しですLinuxユーザーApache(またはApacheを実行するように設定したもの)によるLinuxシステムコールとして、実行ビットが重要なのはまさにそれです。

29
Mike Sherov

1つのアカウントに侵入するだけでよいため、悪意のあるアクティビティに対するWebサイトの脆弱性プロファイルが大幅に増加します。

ログインしてシステムにアクセスできる人は誰でも、「このWebサイトは本当に安全ではないので、クレジットカード情報を教えてください」と読むように変更するなど、ページに対して好きなことを行うことができます。

編集:(コメントを明確にして対処するため)

多くのサーバーには、人生において複数の目的があります。彼らは複数のサービスを実行しています。それぞれに一意のユーザーを割り当て、それに応じてファイルのアクセス許可を管理することにより、これらのサービスを互いに慎重に分離すると、はい、誰かがアカウントの資格情報を侵害した場合でも、あなたはまだお湯の中にいますが、彼らができる被害はその1つのサービスに限定されています。汎用アカウントが1つだけで、ファイルシステム全体を777に設定すると、侵害された1つのアカウントがマシン上のすべてを危険にさらします。

サーバーがApache/PHPの実行専用であり、他の目的を果たさず、Apache/PHPが実行されているアカウントが1つしかない場合、その1つのアカウントを侵害することは、マシン全体を侵害することと同じです。アプリケーションの観点(ただし、PHPの実行に使用されるアカウントによってシステムファイルが保護され、書き込み不可である必要があります...それでも管理者アカウント/ルートでのみ可能である必要があります)。

彼らがファイルを書き込むことができ、それが実行可能である場合、彼らはそれをあなたのマシンで実行されるもの(実行可能またはスクリプト)に変更し、PHPのShell_execを使用してその実行可能ファイルを実行できます。 Shell_execを許可しないように設定している場合、それらは設定を変更することもできます

4
Eric J.

アクセス許可に関しては、ミニマリズムに従うべき多くの一般的な理由がありますが、LAMPウェブホストのコンテキストでは、すぐに頭に浮かぶものはいくつかあります。

  • 共有ホスティングプラットフォームでは、ホストを共有している他のユーザーがスクリプトの読み取りと書き込みを行えるようになりました。
  • 専用ホストでは、不正なプロセスがファイルの読み取り/書き込みを行ったり、誤ってファイルを削除したりする可能性があります。カスタムロギングプロセスがユーザーnobodyとしてバックグラウンドで実行されており、rm -rf /を試行するバグが発生しているとします。誰も書き込み権限を持ってはならないファイルはほとんどないので、これは一般的に無害ですが、この不正なプロセスはファイルを取得します。
  • Webサイトを改ざんするには、誰かがnobodyやそのようなダミーアカウントと言っても、ユーザーとしてアクセスするだけです。一般に、攻撃者は、何らかのダメージを与えることができる場所に到達するために、さらにユーザーレベルのエスカレーション攻撃を行う必要があります。これは本当の脅威です。一部の重要ではないサービスはダミーアカウントで実行されている可能性があり、脆弱性が含まれている可能性があります。
2
anshul

サーバーにソフトウェアパッケージがインストールされていて、ゼロデイ脆弱性があるとすると、攻撃者はファイルのアップロード機能を使用して管理コントロールパネルにアクセスできます。すべてを777に設定すると、攻撃者がアップロードするのは簡単です。彼が望むどこでもシェルスクリプト。ただし、権限を適切に設定すると、誰も/ www-data/etcに書き込み権限がないため、彼はそれを行うことができません。

1
D.Snap