ワードプレスドクターで検出しているマルウェアファイルの半分以上で使われているevalという処理についてと、evalを停止する方法を解説いたします。


マルウェアによく利用されるeval関数とは?

eval関数とは、PHPプログラムの文字列を与えると、そのままPHPプログラムとして実行する命令です。
例えば下記のような書式で使用されます。

eval("echo 'Hello world';");

eval 関数に「echo ‘Hello world’;」 というPHPのプログラミングの文字列を渡すとそのままプログラムとして解釈され実行され Hello world と出力されます。

マルウェアになぜeval関数が利用されるのか?

eval関数は、PHPプログラムの難読化処理のツールでよく使われる関数であるため、マルウェアの多くはプログラムの処理内容を分かりにくくするためや、マルウェア検出されにくくするために難読化されますので、難読化の過程でeval関数が頻繁にコードの中に埋め込まれることになります。

※evalが利用されているマルウェアのコードの例

eval(base64_decode('JGJsY..難読化された文字列が続く..BLCiI7'));

このため、eval関数がマルウェアに含まれている割合が高くなると考えられます。

eval関数の停止の可否と方法

マルウェアの活動を止めるためや、セキュリティーの向上のためにeval関数が非常に頻繁にマルウェアで利用されることから実行自体を停止してしまうのは非常に有効です。
しかし、eval関数を停止してもサイトの動作に問題はないのでしょうか?

eval関数は現在のワードプレス本体では使用されていませんし、多くのプラグインでも使用されていません。現在ワードプレスの世界ではセキュリティー上の観点からeval関数をできるだけ使用しないようにする方向になっているかと思います。

ただ、TablepressやMail poet等一部普及度の高いプラグインで依然使用され続けているため、一律に停止してしまうとサイトの動作に悪影響を与える可能性があります

eval関数を停止する場合は、ワードプレスに含まれる全PHPファイルを内部検索するなどしてeval(という文字列がプログラムとして使用されていないことを確認してからの方がいいかと存じます。

eval関数の停止方法

eval関数はサーバーの管理画面の設定で停止できる場合があります。
その他、一部サーバーでは下記のような設定をphp.iniファイルに加えることで停止できる場合があります。

disable_functions = "eval"

VPSやAWS等サーバーのプログラムの構成を変えられる(ルート権限がある)場合は下記のようなモジュールをサーバーに組み込むことでevalを停止することができます。

https://github.com/sjinks/php-disable-eval

※eval関数を利用したマルウェアを検査・検出できます。ぜひご利用ください。
【無料】ワードプレス:マルウェアスキャン&セキュリティープラグイン [マルウェア・ウィルス検出と駆除]

WordPress ワードプレスのマルウェア駆除・セキュリティー対策のご相談・ご依頼はワードプレスドクターまでお気軽にお送りください