WordPressの隠しリンク改ざん、自分のブログは大丈夫か確認してみた

Xを見ていたら、WordPressで作ったサイトに人の目には見えない隠しリンクが仕込まれていた、という投稿が流れてきました。リンク先はギャンブル系のサイトで、WordPressのプラグイン経由でやられたらしい、とのことです。

このブログもWordPressで動いているので、他人事ではありません。ということで、ブラウザを操作できるAIに手伝ってもらいながら、自分のブログが大丈夫かを一通り確認してみました。

先に断っておくと、これは専門のセキュリティ診断ではなく、自分のブログで実際にやってみた記録です。「これをやれば安全」という手順ではないので、そのつもりで読んでもらえると助かります。


きっかけ:見えない隠しリンクと、Contact Form 7の脆弱性

隠しリンクは、ページの中に仕込まれているのに画面には表示されないリンクです。訪問者は気づかないし、運営者も普段は自分のサイトのHTMLなんて見ないので、気づきにくいのが厄介なところだと思います。目的は、検索エンジンからの評価を自分たちのサイトへ流すことだと言われています。

この話題と前後して、WordPressの定番お問い合わせフォームプラグインContact Form 7の脆弱性も公表されていました。開発元の発表を読むと、ざっくりこんな内容です。

  • ログインしていない第三者が、本来はじかれるはずのファイルをサーバーに置けてしまう問題
  • 対象はバージョン6.2〜6.2.3で、6.2.4で修正済み
  • 理論上は、ファイル添付欄のあるフォームで、かつサーバーがフォルダの中身を一覧表示する設定になっている場合に狙われうる

Xでは「隠しリンクはこの脆弱性経由では」という見方も出ていました。ただ、実際の被害がこの脆弱性によるものかどうかは、自分には確認できていません。あくまで「そういう見立てもある」くらいに受け止めています。

いずれにしても、確かめておいて損はないので、順番に見ていきました。

確認①:Contact Form 7が入っているか

まずは一番わかりやすいところから。WordPressの管理画面で「プラグイン」を開き、Contact Form 7が入っているかを見ました。

結果、このブログには入っていませんでした。

入っている人は、まず最新版に更新しておくのがよさそうです。あわせて、フォームでファイル添付欄を使っていないかも見直してみると、狙われる条件を減らせると思います。

確認②:ページのHTMLに怪しいリンクがないか

次に、ページそのものに隠しリンクが入っていないかを確認しました。ブラウザでページを開いて、ソースを表示します。

  • Mac(Chrome):Command + Option + U
  • Windows(Chrome):Ctrl + U

ただ、開いてみるとわかりますが、ソースはとにかく長いです。目で全部追うのは現実的ではないので、ページ内検索(MacはCommand + F、WindowsはCtrl + F)で怪しい言葉を探すのが手っ取り早いと思います。探す言葉は、たとえばこのあたりです。

  • casino、カジノ、slot など、ギャンブル系の言葉
  • display:none、visibility:hidden など、要素を見えなくする書き方

自分は今回、この作業をAIに頼んで、サイト内の全ページをまとめて調べてもらいました。その結果を見ると、「slot」という言葉が自分で入れている広告のコードに引っかかっていました。ヒットしたら即アウトではなく、前後を見て自分で入れたものかどうかを確かめるのが大事そうです。

あわせて、リンク先のドメインも一覧にしてもらいました。Amazonや楽天、記事で参考にした公式サイトなど、自分で貼ったリンク先ばかりで、怪しいリンクは見つかりませんでした。

こんなふうに、AIを使える人はそれに頼ってみるのもアリだと思います。ただ、AIが見落とすこともあるし、頼んだ範囲の外に仕込まれている可能性もあります。最後は自分の目で見るのが安心だと思うので、AIに任せた場合も、トップページくらいは自分でソースを開いて確かめておくのがおすすめです。

もう一つ注意点として、JavaScriptで後からリンクを差し込むタイプの改ざんは、「ページのソース」には出てこないことがあるようです。そういうものは、次のURL検査の方で見つかる可能性があります。


確認③:Googleからどう見えているか(URL検査)

調べていて知ったのですが、こうした改ざんには、普通のブラウザで見ると何もないのに、Googleのクローラーにだけ隠しリンクを見せる手口もあるらしいです。そうなると、確認②のやり方では見つけられません。

そこで使ったのが、Search Consoleの「URL検査」です。Googleが実際に取得したページの中身を見ることができます。

  1. Search Consoleを開き、上の検索欄に自分のサイトのURL(まずはトップページ)を入れる
  2. 「公開URLをテスト」を押して、しばらく待つ
  3. 「テスト済みのページを表示」を押す
  4. 右に出てくる「HTML」タブを開く
  5. 右上の虫眼鏡で検索するか、コピーボタンでHTMLを丸ごとコピーする

Search ConsoleのURL検査画面。上の検索欄(手順1)と「公開URLをテスト」ボタン(手順2)

ライブテスト後の画面。「テスト済みのページを表示」(手順3)、HTMLタブ(手順4)、検索とコピーのボタン(手順5)

画像の番号は上の手順の番号と対応しています(HTML部分はぼかしています)

画面の中でも検索できますが、HTMLをコピーしてテキストエディタに貼り付けてから探す方法もあります。探す言葉は確認②と同じです。ここに出てくるのはGoogleが読み込んだ後のHTMLなので、JavaScriptで差し込まれたリンクも、Googleが読み込めていれば含まれているはずです。

このブログのトップページでは、外部へのリンクはGoogleのフォントや広告、Xくらいで、Googleにだけ見せている怪しいリンクは見当たりませんでした。隠しリンクはヘッダーやフッターなど全ページ共通の部分に入ることが多いようなので、まずトップページで確認して、気になる記事があれば同じようにテストする、という流れにしました。

確認④:Search Consoleのレポートを見る

Search Consoleには、Googleが問題を見つけたときに知らせてくれるレポートもあります。左のメニューの「セキュリティと手動による対策」から、2つを開きました。

  • セキュリティの問題:改ざんやマルウェアなどをGoogleが検知した場合に表示される
  • 手動による対策:Googleのルール違反と判断された場合に表示される

どちらも「問題は検出されませんでした」でした。

ただ、これはGoogleが気づいたものだけが出るレポートなので、ここに何も出ていない=無事、とまでは言えないと思っています。確認③とセットで見るのがよさそうです。

確認⑤:管理画面を点検する

最後に、WordPressの管理画面をもう一度ぐるっと見ました。

  • プラグイン一覧:十数個入っていましたが、見覚えのないものはなく、更新待ちもありませんでした
  • ユーザー一覧:知らない管理者アカウントが増えていないか確認。自分のアカウントだけでした

ついでに、以前の作業で使わなくなり、停止したままになっていたプラグインを1つ削除しました。停止していても、ファイル自体はサーバーに残ります。もしそのプラグインに脆弱性が見つかったら、使っていないのに狙われる可能性があるので、使わないものは止めるだけでなく消しておくのがよさそうです。

あと、有料プラグインなどで自動更新をオフにしているものがある人は、それだけはたまに手動で更新を確認しておくと安心だと思います。

自分のWordPressでやった点検5ステップと、それぞれの結果

やってみて思ったこと

今回確認した範囲では、隠しリンクは見つかりませんでした。ただ、これは「少なくともこの範囲では見つからなかった」というだけで、安全が証明されたわけではありません。

とはいえ、やってみると特別な知識がなくてもできることばかりでした。一度手順がわかれば次からは早いので、大きな脆弱性のニュースを見たときに、また同じように見てみようと思います。

もし怪しいリンクが見つかった場合は、それを消して終わりにせず、入り込まれた経路が残っていないかまで考える必要があります。状況によっては、直すより作り直す方が早いこともあるようです。そのあたりは「直す」より「作り直す」時代へ|サイバー攻撃からの復旧判断でまとめています。

VPN機器の記事や、以前PHPの脆弱性でこのブログを確認した記事でも書きましたが、狙われるのは外に公開している入口です。ブログもその一つなんだな、と改めて感じました。

まとめ:自分がやった確認

  • Contact Form 7が入っているか(入っていれば最新版へ)
  • ページのソースで、ギャンブル系の言葉や見えなくする書き方を検索(今回はAIに全ページを調べてもらった)
  • Search Consoleの「公開URLをテスト」で、Googleから見たHTMLも同じように検索
  • 「セキュリティの問題」「手動による対策」のレポートを確認
  • プラグインとユーザーの一覧を点検し、使っていないプラグインは削除

自分なりに調べて試した内容なので、間違っているところや「他にもこう確認してるよ」があれば、Xで気軽に教えてください。


PR