2016-03-24 4 views
0

おはようございます!今日の問題は簡単です。不正なソフトウェアの正規表現スキャナ(PHP)

共有サーバーには多くのサイトがあり、マルウェアによってハッキングされたり、メールを送信したり、近隣のサイトに感染しようとしたりします。

多くのサーバーでファイルをクリーンアップする時間を費やした後、私はPHPファイルを見ているスクリプトを持っているのが本当に助けになるかもしれないと考え始めました。

ウェブサイトごとに完全なアンチウイルスを持っているのは、私が望むものが「あまりにも多すぎる」ということです。リモートで管理できるものがあり、スキャンされたウェブサーバーに手がかりを与えます。

私は単純なPHPスクリプトについて考えました。疑わしいパターンを探してすべてのディレクトリとすべてのファイルをスキャンするだけです。私は実際にこれらの二つの正規表現を使用します。

/eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i 

/mail\(/i 

私が知っている、二つ目は非常にナイーブであるが、私はいくつかのPHPファイルでメールの呼び出しがあるかどうかを知りたいので、それは、仕事になります。

私はtoken_get_allを使用しようとしましたが、私が見つけた唯一の便利なトークンはT_EVALでしたので、私は正規表現の方法に戻りました。

私の問題は、実際にこれらの二つの正規表現であるということです。

  1. 最適化されていない(私は正規表現を感じている消費するビットだけのCPU /時間である)遠く
正確には

私は何を求めているです:

  1. は、同じ結果を達成するためのいくつかのより良いアイデアを得ましたか。
  2. 私はまた、これらのパターンにマッチしたいと思います:
    ev​al(gzinflate(base​64_de​code('...');
    ev​al(gzuncompress(base​64_de​code('...');
    ev​al(gzinflate(str_rot13(base​64_de​code('...');

私はeval|base64|gzinflate|gzuncompress|gzinflateを検索する「初期」のパターンであることを感じるが、に正規表現を・修正:

/eval\((base64|eval|gzinflate|gzuncompress|gzinflate\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i 

私が納得した結果は得られません。

もちろん、あなたが良いアイデアを持っているならば、歓迎以上のものになります。

NOTE

私は質問が非常に広いことを理解し、それは保護の任意の種類せずにウェブサイトの数百を処理することがかかり、何か非常に時間があるので、私はこのトピックに関するアイデアを持っていると思います。 これはこの質問を投稿する適切な場所でない場合は、私はそれを削除します、私はボードをうんざりしたくありません。

別のノート

これは、単に「ソリューション」私だけの問題の場合にして開始するための構造化されたツールが欲しい、私は自宅から(またはCRONで)簡単に使用することができます何か、ではありません奇妙な何かについて私に警告してください、実際には偽陽性トンがたくさんあります。

+2

監査ログを使用して、サイトがどのようにハッキングされているかを確認し、脆弱なサイトを修正/中断する方が良いかもしれません。 – JimL

+0

これは最後のオプションになることができます。ウェブサイトの所有者は自分のサイトを常に稼働させたいと思っています。アンチウィルスを支払う必要はなく、警告する方法を見つけなければなりません。 また、共有サーバーでは、PHPログを簡単に作成できません。 –

+1

そのようなツールはあなたの兵器に有益なものかもしれませんが、してください、これは実際の解決策だとは思わないでください。このような頻繁な感染を許している穴があれば、本当の解決策を絞るべきです! – deceze

答えて

1

私の最初の考えは、プロのウイルススキャンとマルウェア除去ソフトウェアです。あなた自身でこれをやりたければ、PHPスクリプトのmd5()ダイジェストのデータベースを作ることを検討するかもしれません。ディレクトリをスキャンし、ダイジェストを作成し、データベースに格納します。再スキャンで、ダイジェストを比較します。新しいダイジェスト(新しいPHPファイルが出現した)や欠けているダイジェスト(PHPファイルがなくなった)や変更されたダイジェスト(PHPファイルが変更された)があれば、何かが違っていたことを素早く確認できます。変化は予想外でした。

+0

mmh、これは素晴らしいアイデアです。シンプルでシンプルで、サーバー上で何が起こっているのかを知ることができます。ありがとう。 –

0

サーバーがハッキングされると、それをクリーニングする方法はありません

感染が検出された後続行する唯一の安全な方法は、(これらのデータの確認後)に新しいサーバーを構築し、そこにデータをインポートすることです

サーバーが感染している場合、あなたがすることはできませんファイルの内容のような何かについて彼があなたに嘘をつくことができるので、もうそれを信頼してください。

私はそれが苦しいと思いますが、感染から完全に回復し、あなたがそれから回復したことを確かめることはできません。

+0

これは面白いです、私はこれについて何かを読むことができる場所を持っていますか? –

+1

https://serverfault.com/questions/218005/how-do-i-deal-with-a-compromised-serverは十分に文書化されています。たいていの場合、いくつかのPHPファイルを整理するだけで感染をきれいにすることができますが、問題は唯一の問題であることを確認できません。感染が深刻な場合、攻撃者がルートアクセス権を取得した場合など、サーバーが完全に侵害され、すべてのことがわかるようになります。 – Tom