最近何件かのサイトでウェブサイトがウイルスに感染したのでウイルスを削除してほしいという依頼があり対応しましたが,対応が思ったよりも大変でした。
具体的には以下のポイントで手こずりました。
-
ファイルを削除してもすぐに復活する
-
ファイルの一部改ざんがあったので正しい内容に修正してもすぐに改ざんされる
-
ディレクトリのパーミッションを変更してもすぐに戻される
これらの原因と対応について記載していきます。
目次
ウイルスに感染したときの対応
まずは侵入経路の特定して,そこを塞ぐ必要があります。
ただ,実際にはこれがなかなか難しいですので,CMSやそのプラグインの脆弱性,スクラッチで作成したフォーム部分のセキュリティーホール,などの可能性があるところを確認して対応していきます。
CMSやFTPのパスワード変更も念のために実施しておくと安心です。
経路を塞いだはずなのにすぐに改ざんされる原因
セキュリティーホールを塞いだはずなのに,怪しいファイルを削除してもすぐに復活したり,ファイルの一部の改ざんが何度も行われたり,ディレクトリやファイルのパーミッションを変更してもすぐに更新される,などの現象が発生するときがあります。怖いですね・・・。
今回これに悩まされました。
ディレクトリ以下のファイルを削除コマンドで全て消したはずなのにすぐに復活する,という厄介な状況になっていました。
原因は,裏で動き続けているプログラムの存在でした!
実行中のプログラムのプロセスを表示できる ps -aux コマンドを使うと以下のように怪しいプロセスがたくさんありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* ▼PHPパターン▼ */ useruser+ 9396 1.3 0.0 495328 31500 ? S 07:33 0:12 php [path_2_wp]/wp-content/c583ddf useruser+ 11503 1.2 0.0 495328 31804 ? S 07:34 0:11 php [path_2_wp]/wp-content/3abf72a useruser+ 24761 1.4 0.0 495328 31884 ? S 07:37 0:10 php [path_2_wp]/wp-content/ed72ef useruser+ 31673 1.2 0.0 495328 31796 ? S 07:38 0:07 php [path_2_wp]/wp-content/91071b3c /* ▼apacheパターン▼ */ useruser 2470 17.0 0.5 256652 75864 - R 04:49 66:13.22 /usr/local/apache/bin/httpd -f /home/config/users/themes/http/user-httpd.conf useruser 3038 17.0 0.5 256780 76700 - R 05:01 45:23.09 /usr/local/apache/bin/httpd -f /home/config/users/themes/http/user-httpd.conf useruser 5439 17.0 0.5 254732 75904 - R 05:53 18:09.00 /usr/local/apache/bin/httpd -f /home/config/users/themes/http/user-httpd.conf useruser 5851 17.0 0.5 256396 77808 - R 06:03 18:56.94 /usr/local/apache/bin/httpd -f /home/config/users/themes/http/user-httpd.conf |
PHPパターンの方は,wp-content/[変な文字列の羅列] という形でのプログラムが実行されていました。当然こんなプログラムは,WPにはありません。
apacheパターンの方では,普通の httpd のプロセスが動いているだけに見えますが,プロセスの継続時間が異常に長いです。明らかに不自然です。
これらのプロセスを kill コマンドで削除することにより,怪しいファイルの更新やパーミッションの変更が止まり,正しい形に修正をすることができました。
復旧の方法
復旧に際しては,サイトを丸ごと作り直して,一度全てのファイルを削除する,という方法と,
怪しいファイルを頑張って見つけ出して全て削除 or 修正する,という方法があります。
どちらが簡単かは,そのサイトの構造などによると思いますので適切に判断する必要があります。
怪しいファイルを見つけて対応する場合,以下の点も参考になるかもしれません。
怪しいファイルの見つけ方
確実な方法,というものは無いのですが,参考になるかもしれない方法を3点挙げます。
目視で探す
以下のようなポイントに注意して,頑張って目視で探す,という方法です。
-
正しいファイルに似せた名前のもの(1ndex.phpなど)
-
そこに普通はないもの(imgフォルダの中にある phpファイルなど)
-
更新してないはずの時間帯に更新されているもの(夜中の2時に更新など)
更新日付を絞って探す
目視で探すのはなかなか大変なので,以下のコマンドなどを使って,ウイルスに侵入されたであろう日付以降に更新されているファイルを探す方が現実的です。
1 2 3 4 |
/* 最近の3日間で更新されたファイルをリストアップするコマンド */ find . -mtime -3 -ls |
ただ,ウイルスは,ファイルの日付を更新せずに中身だけ変えてくる,ということをする場合があるので,上記コマンドだけではリストアップしきれないことがあります。
それでも何らかのファイルの更新があれば,上記コマンドにより,更新があったディレクトリは教えてくれるので,そのディレクトリ内で上記の目視パターンで怪しいファイルを探す必要があります。
ファイルの中身で怪しい記述が無いかを探す
怪しい記述がないかどうかをファイルのテキスト検索を行って探す,ということもできます。
今回の対応では,PHPベースのCMSでしたので,色々な悪意を持った記述の直前に「error_reporting(0);」というプログラムが書かれていてエラー表示をさせないような仕組みになっていました。
それで,以下のコマンドで候補を絞り込んで怪しいファイルを探す,という対応も行いました。今回これはけっこう有効でした。
1 2 3 4 |
/* error_reporting(0)の文字列が入ったファイルを全てリストアップするコマンド */ find ./ -type f | xargs grep -s "error_reporting(0)" |
まとめ
ウイルスに侵入されてしまったサイトから改ざんされたファイルを探し出して削除する方法について考えました。
ウイルスもあの手この手で隠れて増殖してきますので駆除には経験が必要です。
もちろんウイルスに侵入されないようにするのが一番ですが,悪意を持ったユーザーからの攻撃自体は,実際にはほとんどのサイトがかなりの回数受けています。
ただ,攻撃内容としては,脆弱性を狙った無作為な攻撃がほとんどなので,CMSやミドルウェアの脆弱性が見つかったらすぐにアップデート対応するだけでほとんどの攻撃を事前に防ぐことができます。
それでも,万が一攻撃が成功してウイルスに侵入されてしまったらかなりの労力がかかり,サイトを丸ごと作り直し,というケースに発展することもあるかもしれません。
車を買った後に定期的にオイル交換や車検を行う必要があるように,ウェブサイトも作った後も継続的に保守運用をしていく必要があります。
BRISKでは,新規ウェブサイト制作のお客様に3ヵ月間の無料保守サービスを提供していますので是非ご検討ください。