目が覚めたら、777 権限を持つ共有 Web ホストのすべてのフォルダーに 2 つの新しい PHP ファイルがあることがわかりました。ファイル内のコードは読み取れませんでした。デコードされたバージョンは次のとおりです。http://pastie.org/779226(何だこれ...?) そのコードはいくつかの PHP ファイル内にも挿入されていました。
誰がどうやってこんなことをするのか、私には理解できません。777 の権限を持つことは賢明なことではないことは分かっていますが、そもそもどうやって私のフォルダ システムに侵入したのでしょうか。
私は単なるクライアント側のプログラマーですが、今後このようなことが起こらないようにするためのアドバイスがあれば幸いです。
乾杯。
答え1
スクリプトの難読化を解除したバージョンは次のとおりです。http://pastie.org/private/iobgt7aetg8mezoepucsg
コードには別の Web サイトからの外部 PHP コードが含まれており、その際に訪問者に関する情報を収集しているようです。
これが発生する原因の 1 つは、外部からアクセス可能なディレクトリへのファイルアップロードを許可していることです。適切な検証を行わずにこれを行うと、悪意のあるユーザーが悪意のあるコードを含む PHP ファイル (画像アップロードを使用) をアップロードできるため危険です。Web サーバーが適切に構成されていない場合、要求されたときにコードが実行されます。
このような問題を回避するには、次の点を確認してください。
- PHP プロセスは制限されたユーザーによって実行されます。
- 編集する必要のないファイルは、所有者のみが書き込み可能に設定されます (実行ビットが必要かどうかに応じて 0644 または 0744)。
- アップロードディレクトリのみを書き込み可能に設定します。
- ウェブルート外のアップロードディレクトリを使用するようにしてください。
readfile()
ファイルを提供します。 - ファイルを検証します。フォームで画像のみを許可する場合は、マジック ビットを検証して画像が有効であることを確認します。これは非常に見落とされがちな手順です。他の形式にも同じことが当てはまります。クライアントから送信されたファイル拡張子や MIME タイプに頼らないでください。実際のファイル コンテンツを確認してください。
答え2
考えられる可能性は少なくとも 2 つあります。
- FTPパスワードが見つかりました
- PHPソフトウェアに欠陥が見つかりました
これらを防ぐためには:
- 複雑なパスワードを使用してください(最低9文字、大文字と小文字、数字、特殊文字が混在)
- 777を獣の数字のように実行し、ウェブサーバーにもうないスクリプトの読み取り権限よりも、書き込みが必要な (できればまれな) フォルダー/ファイルに特別な権限を付与します。
いくつかのログ(Apache からのアクセス ログと、Web サイトが実行している FTP サーバーからの FTP ログ)にアクセスできる場合は、何が起こったかを確認するのに役立つ可能性があります。
本当に広範囲にわたる欠陥 (ユーザーが好むものに対して fopen() のみをラップする保護されていないスクリプトがあるなど) でない限り、スクリプトの単純な欠陥でこれほど多くの変更を実行できたとは考えにくいので、FTP ログインの優先順位を確認します。