_______ __ __ _______
| ___ || |_| || |
| | | || || ___|
| |___| || || |___ Webshell finder,
| ___|| || ___| kiddies hunter,
| | | ||_|| || | website cleaner.
|___| |_| |_||___|
潜在的に悪意のあるPHPファイルを検出します。
PHP-malware-finder は、難読化された/怪しいコードや、マルウェア/ウェブシェルでよく使われるPHP関数を含むファイルを検出するために最善を尽くします。
以下のエンコーダー/難読化ツール/ウェブシェルのリストも検出対象です。
もちろんPMFを突破するのは簡単ですが、 目的はキッズや馬鹿を捕まえることであり、 まともな頭脳を持つ人ではありません。 PMFのための愚かな回避策を報告するなら、あなたはそのどちらか(または両方)に該当する可能性が高く、前述の文をもう一度読むべきです。
ファイルシステムをクロールし、ファイルをYARAルールのセットに対してテストすることで検出を行います。そうです、とてもシンプルです!
ハッシュベースのアプローチではなく、
PMFは可能な限り意味的なパターンを使用して、例えば「$_GET変数が2回デコードされ、解凍され、その後systemのような危険な関数に渡される」といったものを検出しようとします。
git clone https://github.com/jvoisin/php-malware-finder.gitcd php-malware-finder && makeまたは、最後の2ステップを go install github.com/jvoisin/php-malware-finder に置き換えると、
PMFが直接コンパイルされ、${GOROOT}/bin フォルダにインストールされます。
$ ./php-malware-finder -h
Usage:
php-malware-finder [OPTIONS] [Target]
Application Options:
-r, --rules-dir= 代替ルールの場所(デフォルト: 埋め込みルール)
-a, --show-all 一致したすべてのルールを表示
-f, --fast YARAの高速モードを有効化
-R, --rate-limit= 1秒あたりの最大ファイルシステム操作数、0で制限なし(デフォルト: 0)
-v, --verbose 詳細モード
-w, --workers= スキャン用に起動するワーカー数(デフォルト: 32)
-L, --long-lines 長い行をチェック
-c, --exclude-common 一般的な拡張子のファイルをスキャンしない
-i, --exclude-imgs 画像ファイルをスキャンしない
-x, --exclude-ext= 除外する追加のファイル拡張子
-u, --update ルールを更新
-V, --version バージョン番号を表示して終了
Help Options:
-h, --help このヘルプメッセージを表示
または、yara を使用する場合:
$ yara -r ./data/php.yar /var/www
YARA 3.4以上を使用してください。ホワイトリストシステムと貪欲な正規表現にハッシュを使用しているためです。yaraをソースからビルドする予定がある場合は、ハッシュサポートのためにlibssl-devがシステムにインストールされている必要があることに注意してください。
また、make tests で包括的なテストスイートを実行できます。
Goやlibyaraのインストールを避けたい場合は、Dockerイメージを使用し、スキャンしたいフォルダをコンテナの/dataディレクトリにマウントするだけです:
$ docker run --rm -v /folder/to/scan:/data ghcr.io/jvoisin/php-malware-finder
whitelist.yarファイルを確認してください。 面倒な場合は、generate_whitelist.pyスクリプトを使用してフォルダ全体のホワイトリストを生成できます。
なぜなら:
PHP-malware-finderは GNU Lesser General Public License v3 の下でライセンスされています。
素晴らしい YARAプロジェクトはApache v2.0ライセンスの下でライセンスされています。
パッチ、ホワイトリスト、サンプルはもちろん大歓迎です。