root以外のユーザーがファイル変更時間を変更するのを防ぐ方法

root以外のユーザーがファイル変更時間を変更するのを防ぐ方法

私は誰かがファイルを生成してから作成日を古い日付に変更したくありません(たとえば、タッチまたはシステムコールを使用するなど)。

私のUbuntuホスティングアカウントからハッキングされたPHPコードをたくさん受け取りました。

ファイルが到着したときにファイルの時間を変更できないように無効にすると、新しいファイルを簡単に見つけるのに役立ちます。

これを達成する方法はありますか?どこでも答えが見つかりません!

答え1

私が知る限り、ユーザーが変更したファイルの変更時間を制限する方法はありません。変更時間を変更することは、たとえばアーカイブからファイルを抽出したり、別のコンピュータからファイルをコピーしたりするときに使用される一般的な機能です。

修正時間を表示する代わりに、inode変更時間(ctime)を見てください。 mtimeの代わりにctimeを一覧表示する-cオプションを渡します。ls

ctimeを一覧表示すると、最近変更または移動されたファイルを検出できます。もちろん、誤検知が発生する可能性があります。攻撃者がルートアクセス権を持っている場合、すべての賭けはキャンセルされます。

これは修理よりも法医学に有用です。明らかに感染したファイルを削除するなどの簡単な修正により、最も基本的な攻撃だけに対応できます。一般的に見つけることができるよりも多くの攻撃があります。攻撃を検出した場合:

  1. システムをオフラインに切り替えます。コピーを作成します。
  2. システム全体を再インストール~から既知の良いソース。感染したシステムのどれも再使用しないでください。信頼できません。既知のセキュリティ脆弱性がないすべてのソフトウェアの最新バージョンがインストールされていることを確認してください。
  3. 以下からデータを回復してください。既知の良好なバックアップ。同様に、破損したシステムによって生成されたデータは信頼できません。
  4. 感染したシステムのコピーを調べて、攻撃者がどのように侵入したかを調べます。攻撃者が侵入する方法(脆弱性)は、攻撃者が後で行う方法(ペイロード)とは大きく異なります。症状ではなく根本的な原因を見つける必要があります。この部分は専門家が必要な場合があります。
  5. 根本的な原因がもう存在しないと判断した場合(誤った設定やセキュリティのバグが修正された場合)、新しいシステムをオンラインにすることができます。

答え2

設定ファイルのオプションを使用してmtimeこれらのPHP機能を無効にすることで(たとえば)、touchハッカーがPHPコードを使用してWebサーバー上で書き込むことができるファイルの変更時間を変更するのを防ぐことができます。[disable_functions][1]php.ini

ただし、ファイルの変更時間はサーバーにアップロードされても変更されないため、修正時間を追跡することは正しいアプローチではありません(つまり、この時間はシステムが破損したときよりもはるかに高速になる可能性があります)。より良いアプローチは、ctimeinodeファイルの状態が変わる時期を追跡することです( )。私が意味するものを証明するには:

$ touch test.txt
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-28 05:51:10.329081380 +0000
Modify: 2014-10-28 05:51:10.329081380 +0000
Change: 2014-10-28 05:51:10.329081380 +0000

$ touch -t 10011234 test.txt 
$ stat test.txt
  File: ‘test.txt’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
...
Access: 2014-10-01 12:34:00.000000000 +0000
Modify: 2014-10-01 12:34:00.000000000 +0000
Change: 2014-10-28 05:52:57.669657564 +0000 <= unadulterated by touch

ルートアクセス権がなければ、修正はまったく不可能だと思いますctime

関連情報