「eval+base64_decode」を見たらサイト改ざんを疑え!

evalとbase64_decodeと聞いて、PHPの経験がある方はピンとくるかもしれませんが、この2つは単なるPHPの命令のコンビではありません。もしかすると、サイトがハッキングされて改ざんされていることの兆候かもしれません。ここでは、WordPressでも増えている「eval+base64_decode」による改ざんの仕組みを紹介します。

パッと見て改ざんに気づかないコードの仕組み

あなたのサイトにアクセスすると見知らぬサイトに飛ばされたり、画面が真っ白になる。おかしな問題が起きるので、もしかして改ざんされたかもと思って原因を調べていて、ふと開いたPHPファイルに次のようなコードが書いてあったら、どうでしょうか。

<?php
header("Location: http://example.com/");
?>

PHPの厳密な意味がわからなくても、身に覚えのないURLが突然出てくれば、なんとなく「このファイル、改ざんされている?」とか「このコードが問題の原因?」とピンとくるかもしれません。実際、このコードのせいで、ページを表示すると「http://example.com/」に飛ばされてしまいます。

この例は親切なハッカーによるサイト改ざんと言えるかもしれません。パッと見て不正なコードかどうか判別しやすいからです。

では、次のコードはどうでしょうか?

<?php
eval(base64_decode('aGVhZGVyKCJMb2NhdGlvbjogaHR0
cDovL2V4YW1wbGUuY29tLyIpOw=='));
?>

開いたPHPファイルにこのようなコードが書いてあっても「なんとなく難しそうなコードが書いてあるな」くらいの印象かもしれませんが、実は、サンプルコード2はサンプルコード1と同じ結果になります。

サンプルコード1の「header…」を暗号化すると、「aGVhZGVyKCJMb2N」のような意味がわからない文字になります。これを復号して実行しているのがサンプルコード2だということです。

eval+base64_decode=改ざんの定番

これが、改ざんされたWordPressでよく見られる不正なコードの定番パターンで「eval」と「base64_decode」の組み合わせが目印です。

<?php
eval(base64_decode(暗号化された怖いコード));
?>

暗号化された怖いコードをbase64_decodeで復号して実行する仕組みにすることで、改ざんされていることに気づきにくいので注意が必要です。

そもそも、正規のWordPressシステム内では「eval」と「base64_decode」を組み合わせた処理は存在しません(WordPress 4.6.1時点)。eval+base64_decode=改ざんの兆候だと疑ってみた方が良いでしょう。

「100%改ざん確定」は保証できませんのでコード削除時は注意してください。

改ざん原因のNo.1は簡単すぎるパスワード

とりあえずの対策は、見つかった「eval+base64_decode」のコードを削除することですが、システムのあちこちに埋め込まれていることが考えられるので再インストールするのが現実的です。

それ以前に、改ざんされる原因のダントツ1位は簡単すぎるパスワードです。4桁の数字などは論外ですが、サイトのURLやユーザー名から類推されるパスワードも危険です。たとえば、「http://example.com/」で使っているパスワードがexample1234だったりするのは、「どうぞ、お入りください」と言っているようなものです。ご注意ください。

パスワードの強度をアップするヒントは以下のページも参考にしてください。

簡単すぎて危険なパスワードにひと手間かけて強度アップするヒント

2016年9月24日WordPressトラブル