セキュリティ対策
サイトやサーバーが不正アクセスされたか調べる方法:レンタルサーバー・WordPress・VPS別の確認手順と、見つけたときの順番
自分のサイトやサーバーが不正アクセス・改ざんされていないかを調べる手順を、レンタルサーバー・WordPress・VPS(Linux)・Google Search Console の環境別に解説。管理者ユーザー、wp core verify-checksums、ログイン履歴、authorized_keys、cron、待ち受けポートの確認と、見つけたときの対応の順番をまとめます。
対象:個人や小さな会社で、レンタルサーバー・WordPress・VPS を使ってサイトを運営している人。「もしかして乗っ取られた?」と思ったときに、自分のサイトとサーバーを自分で確認する手順をまとめます。本記事は WordPress.org・WP-CLI・Google 検索セントラル・各コマンドの公式マニュアル・IPA・JPCERT/CC・個人情報保護委員会の公開情報にもとづきます。攻撃の手順は扱いません。
いま異常が出ているなら、先にこれだけ
サイトのファイルを消したり上書きしたりする前に、ログとサイト全体(ファイルとデータベース)のコピーを取ってください。消してしまうと、どこから入られたかを後から調べられなくなります。パスワードの変更は、ウイルス対策ソフトでスキャンした、普段と別のきれいな端末から行います。
侵入を疑うべき兆候
次のどれかに当てはまったら、下の「環境別の確認手順」に進んでください。WordPress.org の「FAQ My site was hacked」も、ハッキングの明確な兆候として、検索エンジンのブロックリストへの掲載、ホスティング事業者によるサイトの停止、許可していない新しいユーザーの作成などを挙げています。
| 兆候 | どこで気づくか |
|---|---|
| Search Console に「セキュリティの問題」が出た、または Google からメールが来た | Google Search Console |
| 検索結果に「このサイトは第三者によってハッキングされている可能性があります」と出る | Google 検索 |
| ブラウザが「危険なサイト」と警告する、訪問者のウイルス対策ソフトが反応する | 訪問者からの連絡 |
| レンタルサーバー事業者から、改ざん・スパム送信・負荷超過の通知が来た、サイトを止められた | 事業者からのメール |
| 作った覚えのない管理者ユーザーがいる | WordPress の管理画面 |
| 作った覚えのないページ(薬・ブランド品・日本語の大量のページなど)が検索に出る | site: 検索 |
| スマートフォンで、または検索結果から開いたときだけ、別のサイトへ転送される | スマホでの確認 |
| サーバーから迷惑メールが送られている、送信の上限に引っかかった | 事業者からの通知、メールの不達 |
| 何もしていないのに CPU 使用率や通信量が急に増えた | サーバーの監視画面 |
「自分のパソコンで開くと普通」は、判断の材料にならない
Google(web.dev)は、ハッキングされたサイトの中には、相手によって違う内容を見せるもの(クローキング)があり、所有者がページを開くと何もないように見えても、Google がアクセスするとスパムの語句やリンクが見える場合があると説明しています。また Google 検索セントラルのブログは、ハッキングの結果としてモバイルの利用者だけがスパムのドメインへ転送される場合があるとし、スマートフォンの Google 検索結果からサイトを開いて確認するよう勧めています。
環境別の確認手順
自分の環境に当てはまる行を確認してください。WordPress をレンタルサーバーで使っているなら、上の2行の両方が対象です。
| 環境 | 確認する場所 | 見るポイント |
|---|---|---|
| レンタルサーバー(共用) | コントロールパネルのアクセスログ・エラーログ、ファイルマネージャー、メール送信の履歴 | 覚えのないURLへのアクセスや大量のPOST、更新日時の新しいファイル、覚えのない .htaccess やPHPファイル、送信数の急増 |
| WordPress | 管理画面の「ユーザー一覧」「インストール済みプラグイン」、WP-CLI | 覚えのない管理者、入れた覚えのないプラグインやテーマ、本体ファイルの改変 |
| VPS(Linux) | SSH のログ、authorized_keys、cron、ユーザー一覧、待ち受けポート、パッケージの検証 | 覚えのないログイン元、知らない公開鍵、知らない定期実行、新しいユーザー、知らないプログラムの待ち受け |
| Google Search Console | 「セキュリティの問題」、URL 検査ツール、site: 検索 | Google が見つけた問題とサンプルURL、Google から見たページの内容 |
レンタルサーバー(共用)
SSH が使えない契約でも、コントロールパネルから次の3つは確認できることが多いです(画面の名前は事業者ごとに違います)。
- ファイルマネージャーで公開フォルダを開き、更新日時の新しい順に並べる。自分が更新していない日付に変わったファイル、意味のない名前のPHPファイル、画像フォルダ(
uploadsなど)の中のPHPファイルに注意する - アクセスログとエラーログをダウンロードし、管理画面(WordPress なら
/wp-login.phpや/wp-admin/)へのアクセス元と時刻、見覚えのないURLへのアクセスを見る - メールの送信数や送信の履歴を見られるなら、送った覚えのない大量の送信がないかを確認する
サイトの中にある .htaccess も確認してください。WordPress.org は、感染の種類にかかわらず最もよく書き換えられ、悪用されるファイルの1つとして .htaccess を挙げ、index.php・header.php・footer.php なども全ページに影響するため狙われやすいとしています。
WordPress
管理画面で次の2か所を確認します。
- 「ユーザー」→「ユーザー一覧」で、権限グループが「管理者」のユーザーに、作った覚えのない人がいないか
- 「プラグイン」→「インストール済みプラグイン」で、入れた覚えのないプラグインがないか。テーマも「外観」→「テーマ」で同じように確認する
サーバーで WP-CLI(WordPress をコマンドで操作する公式ツール)が使えるなら、ファイルが公式の配布物と一致するかを機械的に確かめられます。
# WordPress 本体のファイルが WordPress.org のチェックサムと一致するか
wp core verify-checksums
# WordPress のルートディレクトリに WordPress 以外のファイルがあれば警告する
wp core verify-checksums --include-root
# WordPress.org で配布されているプラグインを検証する
wp plugin verify-checksums --all
# 管理者権限のユーザーを登録日つきで一覧する
wp user list --role=administrator一致すれば Success: WordPress installation verifies against checksums. と表示されます。一致しないファイルがあると、Warning: File doesn't verify against checksum: に続いてファイル名が出ます。プラグインの検証は WordPress.org のチェックサムと照合する仕組みなので、有料プラグインや自作のテーマはこの方法では確かめられません。それらは、配布元から同じ版を取り直して見比べます。
VPS(Linux)
VPS では、侵入者が次に来るための仕掛け(公開鍵・定期実行・新しいユーザー・待ち受けるプログラム)を残していないかを見ます。どれも自分のサーバーで、管理者として実行するものです。
# SSH のログイン記録(Debian/Ubuntu のユニット名は ssh、RHEL 系は sshd)
sudo journalctl -u ssh --since "2026-10-01"
# 最近のログインの一覧(Debian 13 では last の代わりに wtmpdb last。wtmpdb と libpam-wtmpdb のインストールが必要)
last -a
# 各ユーザーの最終ログイン(Debian 13 では lastlog の代わりに lastlog2。lastlog2 と libpam-lastlog2 のインストールが必要)
lastlog
# SSH の公開鍵:実行中のユーザーの分(他のユーザーは /home/*/.ssh/authorized_keys)と root の分
cat ~/.ssh/authorized_keys
sudo cat /root/.ssh/authorized_keys
# 定期実行(ユーザーごと・システム全体)
crontab -l
sudo crontab -l -u root
sudo cat /etc/crontab
sudo ls -la /etc/cron.d
# ユーザーと、管理者権限を持つグループ(RHEL 系は wheel)
getent passwd
getent group sudo
# 待ち受けている TCP ポートと、そのプログラム
sudo ss -tlnp
# 公開フォルダで、7日以内に内容が変わったファイル
sudo find /var/www -type f -mtime -7
# パッケージのファイルが配布時から変わっていないか
sudo debsums -s # Debian/Ubuntu(debsums パッケージが必要)
sudo rpm -Va # RHEL 系結果は次のように読みます。
journalctlの出力で、ログインに成功した記録(Accepted)の接続元に、自分のものでないIPアドレスがないか。何も表示されないときはユニット名が違う可能性があるので、systemctl list-units --type=serviceで SSH のサービス名を確かめるauthorized_keysに、登録した覚えのない公開鍵がないか。サーバーに入る鍵の管理は SSH鍵の最小権限 で解説しています- cron に、知らないURLからファイルを取ってきて実行するような行がないか
ssの一覧に、自分で起動していないプログラムの待ち受けがないかdebsums -sは問題のあるファイルだけを表示し、rpm -Vaは変わったファイルについて、サイズ(S)・ダイジェスト(5)・更新日時(T)などの違いを記号で示す
ログやコマンドの出力に頼りすぎない
find -mtime が見るのはファイルの更新日時で、これは書き換えられることがあります。debsums のマニュアルも、このツールはセキュリティの道具としては用途が限られると書いています。ログも保存期間を過ぎると消えます。Debian 13 では、last・lastb・lastlog が 2038年問題を理由に提供されなくなりました。どの確認も「見つかれば侵入の証拠」にはなりますが、「見つからない」は安全の証明になりません。
Google Search Console
Search Console にサイトを登録していない場合は、まず登録して所有権を確認します。
- 「セキュリティの問題」レポートで、問題が出ていないかを確認する。問題の種類は大きく「ハッキングされたコンテンツ」「マルウェアや望ましくないソフトウェア」「ソーシャル エンジニアリング」の3種類で、問題ごとにサンプルURLが示される。ただしサンプルURLが表示されない問題もあり、Google はその場合も影響を受けたページがないわけではないとしている
- Google 検索で
site:自分のドメインと検索し、作った覚えのないページがないかを見る。Google は、ハッカーが追加したページを含めて、サイトのページの一覧を確認できるとしています - 疑わしいページは URL 検査ツールに入れて、Google からどう見えているかを確かめる
用語の整理として、ここで探しているような「すでに起きた侵害の痕跡」を IOC(侵害指標)と呼びます。詳しくは IOC(侵害指標)とは、進行中の動きで気づく考え方は IOA(攻撃指標)とは を参照してください。
見つけたときの対応の順番
順番を間違えると、証拠が消えたり、侵入者の入口が残ったまま戻されたりします。上から順に進めてください。
1 広がりを止める
サイトを一時的に非公開またはメンテナンス表示にする
2 証拠を残す
ログ・ファイル・データベースのコピーをサーバーの外へ
3 認証情報を全部変える
管理画面・FTP・SSH鍵・DB・APIキー(きれいな端末から)
4 きれいな状態に戻す
侵入前のバックアップから戻すか、作り直す
5 入口を塞ぐ
更新・不要なプラグインの削除・原因の特定
6 再審査と報告
Search Console の再審査、必要なら個人情報保護委員会へ報告
広がりを止める:サイトを一時的に非公開にする
訪問者にマルウェアや詐欺ページを見せ続けないよう、サイトを一時的に非公開かメンテナンス表示にします。VPS なら、調査に必要な接続を残して外部との通信を絞ります。共用のレンタルサーバーなら、事業者のサポートに連絡して、止め方と事業者側の対応を確認します。WordPress.org も、共用サーバーでは被害が自分のサイトだけにとどまらない場合があるので、事業者に確認するよう勧めています。
証拠を残す:掃除の前にコピーを取る
WordPress.org は、掃除の段階に進む前に、感染した状態のままでも環境のスナップショットをもう1つ取るよう勧めています。Google も、掃除の前にサイト全体とデータベースをサーバーの外にバックアップするよう案内しています。アクセスログ・エラーログ・SSH のログは保存期間で消えるので、最初に手元へ保存してください。バックアップと復旧の基本 の考え方がそのまま使えます。
認証情報を全部変える:きれいな端末から
WordPress.org は、FTP/SFTP・WordPress の管理画面・コントロールパネル・MySQL のすべての入口のパスワードを変え、管理者だけでなく環境にアクセスできる全ユーザーを対象にするよう求めています。あわせて wp-config.php の秘密鍵(ソルト)を作り直すと、ログイン中の人を全員ログアウトさせられます。VPS では SSH 鍵を作り直し、authorized_keys を自分の鍵だけにします。.env などに書いた外部サービスの API キーも再発行します。
WordPress.org は、侵入の入口が管理者のパソコン側にある場合も多いとして、手元のパソコンもスキャンするよう勧めています。変更は、ウイルス対策ソフトでスキャンしたきれいな端末から行い、多要素認証 を有効にします。
きれいな状態に戻す:侵入前のバックアップか、作り直し
侵入前に取ったと分かっているバックアップがあれば、そこから戻します。いつ侵入されたか分からない場合、新しいバックアップほど汚れている可能性があります。WordPress なら、同じ版の wp-admin と wp-includes を公式の配布物で置き換え、wp-content の中のテーマとプラグインも配布元から取り直します。VPS で管理者権限まで取られた疑いがあるなら、掃除より、新しいサーバーを作ってデータだけを確認しながら移すほうが確実です。
入口を塞ぐ:同じ穴から再び入られないように
WordPress 本体・プラグイン・テーマを最新にし、使っていないものは削除します。原因として多いのは、古いプラグインの脆弱性、使い回したパスワード、公開フォルダに置いた設定ファイルの漏えいです。Google も、感染を許した脆弱性を直さないと再び感染する可能性があると説明しています。WordPress の固め方は WordPressのセキュリティ対策、設定ファイルの置き場所は 公開ディレクトリに秘密ファイルを置き忘れていないか で解説しています。WordPress.org は、掃除が済んだ後にパスワードをもう一度変えるよう勧めています。
再審査と報告:Search Console と、個人情報の漏えい
Search Console に問題が出ていた場合は、報告されたすべての問題をサイト全体で直してから「セキュリティの問題」レポートで「審査をリクエスト」を選びます。リクエストには、問題の内容、行った修正、その結果を書きます。Google によれば、審査には数日から数週間かかり、受付時と完了時にメールが届きます。結果が出る前に再送信すると、審査が長引くことがあります。
問い合わせフォームや会員情報などの個人データが漏れたおそれがある場合は、下の「個人情報が漏れたおそれがあるとき」を確認してください。
当サイトの視点:確認作業の価値は「侵入されていない」と言えることではなく、「どこまで信じてよいか」を決められること
小さなサイトの運営者がやりがちなのは、怪しいファイルを1つ見つけて消し、それで終わりにすることです。けれども、1つ見つかったファイルは侵入の結果であって、入口ではありません。入口と、侵入者が残した次の入口(公開鍵・管理者ユーザー・定期実行)を塞がなければ、同じことが繰り返されます。
だから当サイトは、確認の結果を「どこまで信じてよいか」で判断することを勧めます。WordPress の本体ファイルだけが書き換えられていたなら、本体の置き換えと認証情報の変更で戻せる見込みが高い。サーバーの管理者権限まで取られた疑いがあるなら、そのサーバー上のログもコマンドの出力も信じられないので、作り直す。この線引きを先に決めておくと、掃除に何日も費やして結局作り直す、という遠回りを避けられます。
個人情報が漏れたおそれがあるとき
事業として個人情報を扱っていて、問い合わせフォームの送信内容や会員情報などが漏れたおそれがある場合は、個人情報保護委員会の「漏えい等の対応とお役立ち資料」を確認してください。
- 報告が必要になるのは、要配慮個人情報、財産的被害のおそれ、不正の目的によるおそれ、本人の数が1,000人を超える、の4類型。不正アクセスによる漏えいは「不正の目的」の例として挙げられている
- 期限は、速報が発覚日から3〜5日以内、確報が30日以内(不正の目的によるおそれがある場合は60日以内)
- 報告は委員会の「漏えい等報告フォーム」から行う。業種によっては、権限委任先の省庁に報告する
- 報告対象になる場合は、本人への通知も必要になる(個人情報保護法第26条第2項)
相談・届出の窓口
| 窓口 | できること |
|---|---|
| 契約しているレンタルサーバー・VPS の事業者 | サイトの停止、事業者側のログの確認、同じサーバーへの影響の調査 |
| JPCERT/CC「インシデント対応依頼」 | 一般からのインシデントの報告を受け付けている。改ざんされたWebサイトについて、管理者への連絡と対処の依頼も行っている。Webフォームかメールで報告する |
| IPA「コンピュータウイルス・不正アクセスに関する届出」 | 不正アクセスの被害を届け出る(実被害がなかった未遂も対象)。相談したい場合は「情報セキュリティ安心相談窓口」へ |
| 個人情報保護委員会 | 個人データの漏えい等の報告 |
| WordPress.org の日本語フォーラム | 症状を具体的に書いて、利用者どうしで相談する |
出典(公式情報)
- WordPress.org「FAQ My site was hacked」 — wordpress.org
- WordPress.org「管理画面」(日本語版ドキュメント) — ja.wordpress.org
- WP-CLI「wp core verify-checksums」 — developer.wordpress.org
- WP-CLI「wp plugin verify-checksums」 — developer.wordpress.org
- WP-CLI「wp user list」 — developer.wordpress.org
- Google「セキュリティの問題レポート」(Search Console ヘルプ) — support.google.com
- Google「サイトがハッキングされているかどうかを確認する方法」(web.dev) — web.dev
- Google「キーワードとリンクのクローキングによるハッキングを解決する」(web.dev) — web.dev
- Google 検索セントラル ブログ「望まない不正なモバイル リダイレクトを検出して除去する」(2015年10月) — developers.google.com
- Google 検索ヘルプ「Google 検索の問題を報告する」(「ハッキングされている可能性があります」の表示について) — support.google.com
- Debian マニュアルページ:journalctl(1)、last(1)、lastlog(8)、sshd(8)、crontab(1)、cron(8)、ss(8)、find(1)、debsums(1) — manpages.debian.org
- RPM「rpm(8)」(--verify の出力の読み方) — rpm.org
- Debian 13(trixie)リリースノート 5.1.9「The last, lastb and lastlog commands have been replaced」 — debian.org
- 個人情報保護委員会「漏えい等報告・本人への通知の義務化について」 — ppc.go.jp
- 個人情報保護委員会「漏えい等の対応とお役立ち資料」 — ppc.go.jp
- JPCERT/CC「インシデント対応依頼」 — jpcert.or.jp
- IPA「コンピュータウイルス・不正アクセスに関する届出について」 — ipa.go.jp
次に読む
- 個人のアカウントの場合:不正アクセスされていないか確認する方法(ログイン履歴・ログイン中の端末・転送設定)
- 事業者側が侵害されたとき:レンタルサーバーが不正アクセスされたとき、利用者は何をすべきか(自分の設定では防げない場合の備え)
- 置き場所の点検:公開ディレクトリに秘密ファイルを置き忘れていないか / レンタルサーバーで .env を公開しないための配置と設定
- WordPress:WordPressのセキュリティ対策 / 入口の典型:ファイルアップロードの脆弱性
- 用語:IOC(侵害指標)とは / IOA(攻撃指標)とは / バックドアとは / マルウェアとは
- 復旧:バックアップと復旧の基本
よくある質問
Q自分のサイトが改ざんされているか、確認する方法は?
まず Google Search Console の「セキュリティの問題」レポートを開き、問題が報告されていないかを見ます。次に Google 検索で「site:自分のドメイン」と検索し、作った覚えのないページが登録されていないかを確かめます。さらに、スマートフォンで Google の検索結果から自分のサイトを開き、別のサイトへ転送されないかを確認します。改ざんは、管理者のパソコンからの直接アクセスでは見えないように作られていることがあるためです。
QWordPress が乗っ取られていないか確認するには?
管理画面の「ユーザー」→「ユーザー一覧」で、作った覚えのない管理者がいないかを見ます。「プラグイン」→「インストール済みプラグイン」で、入れた覚えのないプラグインがないかも確認します。WP-CLI が使えるなら、wp core verify-checksums で WordPress 本体のファイルが公式の配布物と一致するかを確かめられます。WordPress.org で配布されているプラグインは wp plugin verify-checksums --all で確認できます。
Q自分で開くと普通に表示されるのに、検索結果に「ハッキングされている可能性」と出ます。
クローキング(相手によって違う内容を見せる仕組み)が使われている可能性があります。改ざんされたページは、検索エンジンや、スマートフォンで検索結果から来た人にだけスパムやリダイレクトを見せることがあります。Google はこの表示について、サイトの所有者が Search Console でセキュリティの問題を修正し、審査をリクエストするまで消えないと説明しています。Search Console の「セキュリティの問題」に出ているサンプルURLと、URL 検査ツールで Google から見た内容を確認してください。
Qレンタルサーバーで SSH が使えない場合は、どう調べればいいですか?
コントロールパネルのファイルマネージャーで更新日時の新しいファイルを探し、アクセスログやエラーログをダウンロードして、覚えのないURLへのアクセスや管理画面へのログインがないかを見ます。WordPress なら管理画面のユーザーとプラグインを確認します。分からないときは、契約しているレンタルサーバーのサポートに相談してください。共用サーバーでは、同じサーバーの他の利用者への影響も含めて事業者が調べられることがあります。
Q調べて何も見つからなければ、安全だと考えていいですか?
いいえ。ファイルの更新日時は書き換えられることがあり、ログは保存期間を過ぎると消えます。管理者権限まで取られたサーバーでは、サーバー上のコマンドの出力そのものが信用できなくなります。Search Console の警告や事業者からの通知のように外部の根拠がある場合は、見つからなくても侵入されたものとして、認証情報の変更と作り直しを検討してください。
Qサイトから個人情報が漏れたかもしれません。どこに報告しますか?
事業として個人情報を扱っているなら、個人情報保護委員会の案内を確認してください。不正アクセスによる漏えい(そのおそれを含む)は、委員会への報告が必要な類型の例として挙げられています。委員会のページでは、速報は発覚日から3〜5日以内、確報は30日以内(不正の目的によるおそれがある場合は60日以内)とされています。あわせて IPA への届出や、JPCERT/CC へのインシデント対応依頼もできます。