wordpressのマルウェア対策 Linuxのmaldetectで実行する

2016/01/20 Linux

wp-malware
wordpressを実行しているウェブサイト、多いですよね。
このウェブサイトでも利用しています。機能が豊富でカスタマイズも自由。オープンソースと三拍子そろったCMSです。利用しているサイトが多いのもうなずけます。

スポンサーリンク


ただ、利用者が多いということは、ハッキングの対象となりやすく、wordpressもその例外ではありません。特に古いバージョンのwordpressでサイト運用することはとても危険です。
wordpress本体だけでなく、wordpress上で動作するpluginについても気をつける必要があります。
プラグインもwordpressと同じく脆弱性が多く、頻繁にバージョンアップしています。
今回は、そんなwordpressを動作させている環境で、OS側からの脆弱性対応の方法について紹介していきます。本記事の内容はwordpress以外のPHPなどで動作させているサイトにも利用できます。

1.OS側でのマルウェア対策について

ざっとウェブでwordpressのマルウェアの対策について調べてみましたが

  • プラグインでテーマをチェックする(TAC)
  • チェックサイトでチェックを行う

といったぐらいしか、対策を見つけることが出来ませんでした。
この二つは運用面で手間がかかることと、チェックサイトでは全てのマルウェアを確認することが出来ないので、対策というには、少し物足りない内容です。
今回のマルウェア対策はwordpressやサイト側アプリケーションやプラグインによるものではなく、OS側からのアプローチとして、オープンソースのLinux用アンチウイルスソフトウェア clamavと、clamdに加えて、同じくオープンソースのマルウェアチェックソフトウェアmaldetectを導入して、マルウェアに感染した場合に、ファイルのクリーンアップ(出来ない場合は検疫)と、検知時にメールでの警告を行うという内容になります。

マルウェアチェック用のmaldetectは単体でも動作するため、clamavとclamdは必須ではありませんが、maldetectのアンチウイルスエンジンとして、clamdを利用すると速度が向上するので、今回の記事では導入しています。(導入しない場合のチェックがかなり遅い)

ソフトウェアのインストール時に、コマンドでの操作が必要になるので、ホスティング環境でパッケージのインストールが出来ない、コマンド操作ができないという環境では実施が出来ません。ご注意下さい。
このような環境では、wordpressとプラグインのバージョンアップ、アクセス権の確認、複雑なパスワードを利用して成るべくマルウェアに感染しない予防措置が必要です。

余談になりますが、wordpressのログインに多要素認証を追加する、ワンマンワンウェーブプラグインの導入もお勧めです。ワンマンワンウェーブは、多要素認証として、スマートフォンなどモバイルデバイスに実装されている生体認証をwordpressのログイン時に追加します。個人ユーザー向けに無償で利用できます。後日、ワンマンワンウェーブについては詳細な利用方法を記載します。

2.環境について

マルウェア対策を行うwordpress(コンテンツ)はLinux上に配置されているものとしています。
LinuxのディストリビューションはCentOS6系の最新バージョンである 6.7を前提として記載しています。Debianや、SUSEなどはパッケージのインストール方法が異なりますので、その部分について、ご利用のディストリビューションに対応した手順に読み替えて頂ければ、そのまま流用できるかと思います。

アプリケーションサーバーや、データーベース、ウェブサーバには本記事では特に指定はありません。nginxやapache、MySQL・PostgreSQL、PHPなど既存の動作している環境で問題ありません。(基本的にはコンテンツの含まれるディレクトリのみをチェック対象とするため)

3.マルウェア対策の導入手順

ここから具体的なマルウェア対策の導入手順となります。
手順としては大凡

  • clamavとclamdパッケージのインストール
  • clamdの設定
  • maldetectのインストール
  • maldetectの設定変更

となります。手間がかかる作業は殆どありませんので、ご安心下さい。

3-1.clamavとclamdの導入

まず、clamavとclamdパッケージをインストールします。古いCentOS(6.4以前?)では、clamavはyumからインストールできませんので、リポジトリを追加する必要がありますが、CentOS 6.7では標準のリポジトリでインストールできます。ここでは古いCentOS向けのリポジトリ追加手順は割愛します。
clamavとclamdのインストールは、パッケージインストール用のyumコマンドで

と実行します。
yumコマンドの実行結果は以下のようになります。

コンプリートと表示されれば、clamavとclamdのインストールは完了です。

3-2.clamavのパターンファイル更新

初回のみ通常のウイルスソフトウェアと同様に、clamavでもパターンファイルの更新を行います。(実行しない場合でも、一日一回は自動で実行されます。)clamavのパターンファイルを手動で更新する場合、clamavパッケージ導入時にインストールされるfreshclamというコマンドを利用します。freshclamはオプション不要で、以下のように実行します。

freshclamコマンドの実行結果は以下の通りです。

エラーなどが表示されずに終了すれば、clamavは最新のパターンファイルに更新されています。
freshclamはインストール時に自動実行用のスクリプトを、/etc/cron.daily/以下にfreshclamとして配置します。cron.dailyの実行時間にfreshclamも実行されますので、以後はfreshclamの実行は不要です。

3-3.clamdの設定

通常clamavは手動、もしくはcronなどでタスク実行しますが、デーモンとして稼働させておくことも出来ます。デーモンとして稼働させる場合は、clamdを利用します。
maldetectから利用する場合はclamdとして稼働している必要がありますので、clamdの設定を行います。
ここではmaldetectからの利用のみを前提として、必要最小限の変更を行います。
clamdの設定ファイルは /etc/clamd.confになります。
/etc/clamd.confの以下の部分をコメントアウトします。

この設定の場合、clamdはclamユーザーとして動作します。root権限で動作しない場合、権限がないファイルのチェックができませんので、ユーザー指定をコメントアウトして、clamdをrootで動作させるように変更します。
変更後はファイルを保存して、設定は完了です。

3-4.clamdの起動

設定の完了後、clamdを起動します。clamdの起動スクリプトは /etc/init.d/clamd です。clamd に startオプションを付与して実行することでclamdを稼働できます。

OKと表示されれば、稼働完了です。念のため、clamdプロセスが稼働していることをpsコマンドで確認します。

上記のようにrootでclamdが稼働していることが確認できれば、clamdの起動は完了です。
clamdはデフォルトで、毎日一回、/配下にある全てのファイルをチェックするようになっています。
チェックの実行は/etc/cron.dailyに配置されたclamdファイルで指定していますので、本記事ではmaldetectと二重にチェックが実行されることを回避するため、/etc/cron.daily/clamdを適当な場所へ移動します。(ここでは/root以下に移動)

一旦、clamdを/root配下に移動させました。

3-5.clamdの自動起動設定

最後にclamdを自動起動するように設定します。
自動起動設定は、chkconfigコマンドを利用します。

ここまでで自動的にclamdが起動するようになりましたので、引き続き、maldetectのインストールを行います。

3-6.maldetectの導入

maldetectはインストーラー含んだアーカイブからインストールを行います。

3-6-1.maldetectのダウンロード

まず、maldetectをダウンロードします。

ダウンロードしたアーカイブを展開します。

3-6-2.maldetectのインストール実行

展開したフォルダに含まれる、install.shを利用して、maldetectをインストールします。

maldetectはインストール時に、パターンファイルを更新します。
maldetectの本体と、パターンファイルは今後、/etc/cron.dail/maldetで自動的に更新されますので、手動での更新は不要です。インストール先はデフォルトで、/usr/local/maldetect になります。
エラーなどが表示されなければ、インストールは完了です。

4.maldetectの設定変更

maldetectを利用するために、最低限の設定変更を行います。
設定ファイルは、/usr/local/maldetect/conf.maldet になりますので、これをバックアップし、ファイルを変更します。
設定ポリシーとして
・clamavと連携して検疫を行う。
・マルウェアが見つかった場合、クリーンアップを行う。
・マルウェアのクリーンアップが出来ない場合、検疫用フォルダへ移動する。
・マルウェアが発見されたことをメールで警告する。
を前提とします。

4-1.基本的な動作に必要な設定変更

設定ファイルの変更点は、以下の6点になります。

もしクリーンアップや、マルウェアの移動を行わずに、警告だけを出力したい場合

に変更します。(デフォルトの挙動です)
設定ファイルを変更して保存すれば、maldetectの設定は完了となります。

5.maldetectの実行

maldetectの実行手順は、maldetコマンドにオプションを付与する形で行います。
ここでは手動で実行するための、基本的な操作手順を説明します。

5-1.マルウェアのチェック

マルウェアをチェックするための基本的な実行手順は

となります。check-pathはマルウェアのチェックを行うパスを指定します。/home/www/public_html以下をチェックしたい場合

と実行します。

実際にmaldetを実行した例 (対象ディレクトリは /home/www/public_html になります。)

マルウェアが見つからなかった場合、malware hits 0と表示されます。
マルウェアが発見された場合、以下のように出力されます。

malware hits 1と表示されます。(1には見つかったマルウェアの数が入ります。)

5-2.マルウェアチェックのレポート表示

詳細なレポートを参照する場合、maldetコマンドに –reportオプションを付けて実行します。
report以下のIDは、上記の実行時に表示されているID –report 160113-0323.12561となります。
上記のチェック結果についてレポート表示を行う場合は

と実行します。

以下、実行結果になります。

上記では、php.base64.v23au.185 というマルウェアが/home/www/public_html/share/css/user91.php ファイルに見つかったことを示しています。
このファイルについてはクリーンアップが出来なかったため、 /usr/local/maldetect/quarantineディレクトリに、user91.php.1377324082ファイルとして移動したことを示しています。
クリーンアップ出来ないファイルは、殆どの場合、マルウェアによって作成されたファイルになります。

5-3.検疫されたファイルを元に戻す場合

元の場所に戻す場合、

で移動されたファイルが、元のパスへ戻ります。
クリーンアップが出来たファイルは、マルウェアの該当する部分が削除されます。これがmaldetectの基本的な操作になります。

6.運用について

maldetectは/etc/cron.dail/配下にmaldetectというスクリプトを配置します。
これで一日一回、主なフォルダのチェックを行いますが、上記のように /home/wwwなど、デフォルトではないパスがドキュメントルートになっている場合は、スクリプトの変更が必要です。
maldetectはパスを指定して実行するだけの操作になりますので、下記のように簡単なシェルを書いて
実行することでも運用ができます。

6-1.チェック用のシェル(参考)

以下のシェルは、チェック前にアーカイブでバックアップを取得して、チェックしログを同じフォルダに配置するシェルになります。

殆どの場合、マルウェアのチェックはコンテンツが配置されているディレクトリのみかと思いますので
上記のようなシェルスクリプトのほうが、利用しやすいかもしれません。

7.まとめ

wordpressのマルウェアは一旦、感染すると、かなりの勢いで進行が進んで行きます。
勿論、最新のバージョンを利用することを推奨しますが、バージョンアップができない環境も
多いと思います。そういった環境では、このようなマルウェアのチェックが力を発揮するはずです。
最新バージョンを利用している場合でも、設定に不備があったりした場合の対策に、マルウェアの
チェックを導入しておくと、安心できるかと思います。

wordpressのセキュリティ対策は、やりすぎるということはありませんので、是非、利用してみて下さい。

システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

関連する情報

redhat-subscription

redhat networkをRHN ClassicからRed Hat Subscription Management へ変更する

ここ最近のredhat enterprise Linuxを利用されている方なら気づいているかと思

linux-output

Linux/Unixで設定ファイルのコメント行「以外」を抜き出したい時

システムの設定書を作成するときに、コメント行以外(先頭に#のついた行)を抜き出したいと思ったこと

redhat-repositry

Redhat Enterprise Linux 6.4 (x64) でリポジトリを追加する

単純にphpの拡張機能でphp-mbstringをインストールしようとyumコマンドでsearc

linuxCVE-2015-0757

linux 危険なglibcのセキュリティ対応 centos redhatの場合 (CVE-2015-7547)

Linuxを利用している環境は多いと思います。クラウドやVPSなどでも手軽に利用できることから、

cron-time-setting

Linuxのcronを秒単位で設定・実行する方法

秒単位でcronを実行したいときって、思ったよりあるかと思います。先日、設定が必要になりましたの

centos-install

CentOS 7 インストール Linuxを始めるにはインストールからがお勧め

ここ最近、お客様と会話してみて思うのが、意外とLinux使ってないなーということ。 Linux

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク