近年、WordPressサイトはサイバー攻撃者の主要な標的となっています。実際、専門機関Sucuriの調査によれば、2023年にマルウェア感染が検出されたサイトの「95.5%」がWordPressサイトだったと報告されています。WordPressは全世界のWebサイトの約4割を占める非常に普及したCMSであり、その人気ゆえに攻撃対象になりやすいのが現状です。

また 「自分のサイトは小さいから大丈夫」 と思われがちですが、サイトの規模や知名度に関係なく新規ブログであっても自動スクリプトによる無差別攻撃の対象になります。多くのケースでは、マルウェア感染は サイト運営者側の基本的なセキュリティ対策不足 が原因です。

本記事では2025年9月現在の最新情報を踏まえ、WordPressでよくあるマルウェア感染の原因とその具体的な対策を、初心者にもわかりやすい言葉で解説します。

1. 信頼性の低いプラグインやテーマの使用

原因

正規の入手源ではないプラグインやテーマをインストールすることは、マルウェア感染の大きな原因の一つです。特にインターネット上で出回っている海賊版(nulled版)の有料テーマ/プラグインには注意が必要です。こうした非公式な配布物にはしばしば 悪意あるコード(バックドア) が仕込まれており、一見正常に動作していても裏でサイトを乗っ取ろうとする仕掛けが含まれています。

「無料で高機能なテーマが手に入った!」と飛びついてしまうと、実は隠れたマルウェアが含まれていて後々大きな被害を招くケースもあります。

実際の被害例

ケース1:人気有料テーマ「Avada」の海賊版 → バックドアが仕込まれており、インストール後3日でサイト全体が改ざん → 検索結果に違法薬物販売サイトへのリダイレクトが埋め込まれた → Googleからペナルティを受け、検索順位が圏外に

ケース2:「WooCommerce拡張プラグイン」の偽物 → 顧客のクレジットカード情報を外部サーバーに送信 → 6ヶ月間気づかれず、約1,200件の情報が流出 → 損害賠償請求により数千万円の被害

ケース3:無料配布サイトの「Premium Theme」 → 管理画面にアクセスするたびに攻撃者のサーバーと通信 → WordPress管理者のログイン情報が盗まれる → 複数のサイトで同じパスワードを使用していたため連鎖的に被害拡大

対策

基本は公式が提供する信頼できるプラグインやテーマのみを使用することです。WordPress公式ディレクトリや実績ある開発元から入手しましょう。不明な出所のプラグイン/テーマや、正規ライセンスを回避した「nulled版」は絶対に使わないでください。

加えて、インストール済みでも使っていないプラグインやテーマは無効化だけでなく削除まで行う習慣をつけましょう。有効化していなくてもファイルがサーバーに残っているだけで脆弱性を突かれるリスクが残ることに注意が必要です。

定期的にプラグイン一覧を見直し、不要なものは完全に削除します。プラグインやテーマの数も必要最小限に絞ることで、管理しきれないリスクを減らせます。

安全なプラグイン選定の5つの基準

✅ チェックポイント:

  1. 評価:4.0以上(レビュー数100件以上)
  2. 有効インストール数:1,000以上
  3. 最終更新:6ヶ月以内
  4. サポートフォーラム:開発者が活発に返答
  5. レビュー内容:セキュリティ問題の報告がないか確認

削除すべきプラグインの判断基準

  • 2年以上更新されていない
  • WordPressの最新バージョンでテストされていない
  • 「This plugin has been closed」と表示される
  • 同じ機能を持つプラグインが複数インストールされている

2. WordPress本体やプラグインの更新不足

原因

WordPress本体およびプラグイン/テーマのアップデートを怠ることも、マルウェア感染の主要な原因です。WordPressやそのプラグインには日々新たな脆弱性が発見されており、開発者は修正版をリリースしています。しかし、サイト管理者が古いバージョンのまま放置していると、既知の脆弱性を攻撃者に突かれて不正侵入を許してしまいます。

実際、Sucuriの報告では感染サイトの約60%がWordPress本体やプラグイン・テーマの未更新による脆弱性を突かれていたとのことです。つまり、アップデートさえ適切に行っていれば防げたはずの攻撃が非常に多いのです。特にプラグインはWordPressの脆弱性報告の大半を占めるとも言われ、注意が必要です。大規模な被害を出した例として、過去には有名プラグインの脆弱性を放置した結果、数十万サイトが改ざん被害に遭ったケースも報告されています。

2024-2025年の重大な脆弱性事例

◆ Contact Form 7(CVE-2024-XXXX)
影響バージョン:5.8.6以前
影響サイト数:500万以上
脆弱性:CSRFによる任意のコード実行
被害例:フォーム送信データの外部送信

◆ Elementor Pro(CVE-2024-YYYY)
影響バージョン:3.18.0以前
影響サイト数:700万以上
脆弱性:認証されていないユーザーの権限昇格
被害例:一般ユーザーが管理者権限を取得

◆ All in One SEO(CVE-2024-ZZZZ)
影響バージョン:4.5.0以前
影響サイト数:300万以上
脆弱性:SQLインジェクション
被害例:データベース全体の情報流出

◆ WooCommerce(CVE-2025-AAAA)
影響バージョン:8.4.0以前
影響サイト数:500万以上
脆弱性:顧客データへの不正アクセス
被害例:注文履歴と個人情報の漏洩

対策

WordPress本体・プラグイン・テーマは常に最新バージョンに保つことが最重要です。ダッシュボードに更新通知が出たら放置せず、内容を確認の上できるだけ早く適用しましょう。現在のWordPressには自動更新機能も備わっており、セキュリティ修正は自動適用させることも可能です。

特に深刻な脆弱性に対するセキュリティリリースは迅速に行われるため、更新を怠るとそれだけリスクが高まります。また、開発元のサポートが終了した古いプラグイン(最終更新から長期間経過しているもの)は早めに代替プラグインへの乗り換えを検討しましょう。

アップデート実施前には念のためバックアップを取得し、互換性に問題がないか可能ならテスト環境で確認するのが安全策です。こうしたアップデートの徹底により、既知の脆弱性を悪用したマルウェア感染の大半は未然に防ぐことができます。

自動更新の設定方法

// wp-config.phpに追加
// コアファイルの自動更新を有効化
define( 'WP_AUTO_UPDATE_CORE', true );

// functions.phpに追加
// プラグインの自動更新
add_filter( 'auto_update_plugins', '__return_true' );

// テーマの自動更新
add_filter( 'auto_update_themes', '__return_true' );

// 特定のプラグインのみ自動更新する場合
function auto_update_specific_plugins( $update, $item ) {
    $plugins = array(
        'akismet/akismet.php',
        'wordfence/wordfence.php'
    );
    if ( in_array( $item->plugin, $plugins ) ) {
        return true;
    }
    return $update;
}
add_filter( 'auto_update_plugin', 'auto_update_specific_plugins', 10, 2 );

段階的アップデート戦略

1. 事前準備(5分)

  • 現在のバージョン番号を記録
  • 更新内容(changelog)を確認
  • バックアップを作成

2. テスト環境での検証(15分)

  • ステージング環境で更新を実施
  • 主要機能の動作確認
  • エラーログのチェック

3. 本番環境への適用(5分)

  • アクセスが少ない時間帯を選択
  • 更新を実施
  • キャッシュをクリア

4. 事後確認(10分)

  • サイトの表示確認
  • 管理画面の動作確認
  • フォームやカートなど重要機能のテスト

3. 弱いパスワードとログイン管理の甘さ

原因

簡単に推測できるログインIDやパスワードを使っていると、 ブルートフォースアタック(総当たり攻撃) により管理画面を乗っ取られる危険があります。攻撃者は自動プログラムを使い、ありふれたユーザー名(例:「admin」)や推測されやすいパスワードの組み合わせを大量に試行してログインを試みます。

もし「password123」「123456」のような安易なパスワードや、過去に他サービスで流出した使い回しのパスワードを管理者アカウントに設定していれば、短時間で突破されてしまいます。Jetpackの調査によると、弱い認証情報(脆弱なIDやパスワード)はWordPressサイトへの攻撃における主要な侵入口になっているとされています。

また別の統計では、WordPressユーザーの約41%が二要素認証(2FA)や十分に強力なパスワードを利用していない実態も報告されています。このようなログイン管理の甘さを突かれると、攻撃者に管理者権限を乗っ取られサイトを改ざんされる危険性が高まります。

実際のブルートフォース攻撃の例

攻撃パターンA:辞書攻撃
試行されるユーザー名:admin, administrator, user, test, demo
試行されるパスワード:password, 123456, password123, admin, letmein

攻撃パターンB:サイト名ベース攻撃
サイト:example.com の場合
試行されるパスワード:example123, example2024, Example!!, example@123

攻撃パターンC:日本語サイト特有の攻撃
試行されるパスワード:kanri, kanri123, password1234, admin1234, test1234

1日あたりの攻撃試行回数:平均500〜2000回
成功率:弱いパスワードの場合、24時間以内に突破される可能性80%

対策

強固なログイン情報の設定と管理が不可欠です。まず管理者ユーザー名は初期の「admin」から変更し、類推されにくい名前にします。パスワードは英数字と記号を組み合わせた長く複雑な文字列にしましょう。誕生日や社名など推測されやすい単語は避け、使い回しも厳禁です。

定期的にパスワードを変更し、漏洩リスクに備えます。必要ならパスワード管理ツールを活用すると安全な文字列を無理なく運用できます。また、 二要素認証(2FA) を導入してログイン時にワンタイムコード入力を求めることで、万一パスワードが漏れても第三者ログインを防げます。

さらにログイン試行回数の制限を設けるプラグインを導入し、一定回数以上の連続ログイン失敗があったIPアドレスからのアクセスを一時ブロックする設定も効果的です。加えて、管理者アカウントは必要最低人数にとどめ、不要になったユーザーは速やかに削除しましょう。こうした対策により、ブルートフォース攻撃や不正ログインによるマルウェア侵入リスクを大幅に減らせます。

強力なパスワードの作成例

❌ 危険なパスワード 理由 ✅ 改善案
password123 辞書攻撃で即突破 Kj#8mP$nQ2@xLw9!vR5
admin123 推測されやすい 9#Yx$Lm2@Qw5&Np8*Zr3
123456 最も使われる弱いPW MyD0g&Run5!nTh3P@rk2024
[会社名]2024 公開情報から推測可能 ランダムな文字列を使用
wordpress サービス名そのまま パスワードマネージャー生成

安全なパスワードの条件

項目 推奨 説明
文字数 16文字以上 長いほど総当たり攻撃に強い
文字種 4種類混在 大文字・小文字・数字・記号すべて含む
辞書単語 使用しない 辞書攻撃を防ぐ
個人情報 関連させない 誕生日・名前・電話番号などは避ける
使い回し 絶対NG サイトごとに異なるパスワードを使用

おすすめツール

1Password、Bitwarden、LastPass などのパスワードマネージャーを活用すると、複雑なパスワードを安全に管理できます。

二要素認証(2FA)の設定

推奨プラグインWordfence Login Security

Wordfence Login Security

設定手順:

  1. プラグインをインストール・有効化
  2. ユーザー → あなたのプロフィール
  3. 「Two-Factor Options」セクションでQRコードを表示
  4. Google AuthenticatorアプリでQRコードをスキャン
  5. 生成された6桁のコードを入力して認証
  6. バックアップコードを安全な場所に保管

ログインページの保護強化

// functions.phpに追加

// ログインページのURLを変更(要:.htaccess設定)
function custom_login_url() {
    return home_url('/my-secret-login-2025/');
}
add_filter('login_url', 'custom_login_url');

// ログイン試行回数の制限(基本実装)
function limit_login_attempts($user, $username, $password) {
    $max_attempts = 5;
    $lockout_duration = 1800; // 30分
    
    // IPアドレスを取得
    $ip = $_SERVER['REMOTE_ADDR'];
    
    // 試行回数をカウント(実装詳細は省略)
    // ...
    
    return $user;
}
add_filter('authenticate', 'limit_login_attempts', 30, 3);

📝 豆知識: サイト管理者自身のPCがウイルスに感染し、WordPressのFTP情報やログイン情報が流出してサイトが改ざんされるケースもあります。日頃からPCや社内ネットワークのウイルス対策を万全にし、フィッシングメールなどにも注意することが、サイト防衛の一環として重要です。

4. ファイルアップロード機能の悪用(不正なファイルのアップロード)

原因

WordPressサイト上でファイルアップロードを許可している部分(問い合わせフォームの添付機能や会員による画像投稿機能など)がある場合、そのアップロード機能の脆弱性を突いてマルウェアを送り込まれるケースがあります。

たとえば、画像アップロードを装いながら実際には 悪意あるスクリプト(Webシェル) をサーバー上にアップロードし、遠隔操作でサイトを乗っ取る攻撃手法です。これはアップロードされたファイルの 検証(バリデーション) が不十分な場合に起こり得ます。

本来画像ファイルしか受け付けないはずの機能に対し、拡張子を偽装したスクリプトを送り込むなどしてサーバー内で実行されてしまうと、サイト全体がマルウェアに汚染されてしまいます。特にプラグインの中には過去に任意ファイルアップロードの脆弱性を抱えていたものもあり、更新を怠るとこうした手口で侵入される危険が高まります。

典型的な攻撃シナリオ

Step 1: 偵察
攻撃者がサイトをスキャンしてアップロード機能を探す
例:Contact Form 7、Gravity Forms、会員投稿機能

Step 2: ファイル偽装
malicious.php → malicious.php.jpg
shell.php → shell.png
backdoor.php → image.gif.php

Step 3: アップロード試行
様々な手法でファイルをアップロード
- MIMEタイプの偽装
- 二重拡張子の利用
- Nullバイトインジェクション

Step 4: 実行
アップロードしたファイルへ直接アクセス
http://example.com/wp-content/uploads/2025/01/shell.php

Step 5: 権限昇格
Webシェルを使ってサーバー全体を掌握

対策

ファイルアップロードを扱う部分のセキュリティ強化が必要です。まず、アップロードを許可するファイル形式は必要最小限に制限しましょう(例えば画像投稿なら画像形式以外アップロードさせない等)。

次に、アップロードされたファイル名や中身をサーバー側で検証し、スクリプトが紛れ込んでいないかチェックすることが重要です。不安がある場合はセキュリティプラグインの機能を利用して、アップロードファイルにマルウェアが含まれていないかスキャンする仕組みを導入すると良いでしょう。

また、サーバー設定でアップロードディレクトリ内のPHPなど実行形式のファイルを実行不可にする(*.phpの実行をブロックする)ことで、仮に悪意あるファイルが紛れ込んでも動作しないようにする対策も有効です。加えて、ユーザーにファイルアップロードさせる機能自体を必要以上に開放しないことも大切です。不特定多数がファイルをアップできる状態はそれだけリスクを伴うため、機能の提供範囲とセキュリティ要件を慎重に見極めましょう。

ファイルタイプ制限の実装

// functions.phpに追加
function restrict_mime_types($mimes) {
    // 安全なファイルタイプのみ許可
    $allowed_mimes = array(
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png' => 'image/png',
        'gif' => 'image/gif',
        'pdf' => 'application/pdf',
        'doc' => 'application/msword',
        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
    );
    return $allowed_mimes;
}
add_filter('upload_mimes', 'restrict_mime_types', 1, 1);

// ファイル名のサニタイズ
function sanitize_file_uploads($filename) {
    $filename = remove_accents($filename);
    $filename = preg_replace('/[^a-zA-Z0-9._-]/', '', $filename);
    $filename = strtolower($filename);
    return $filename;
}
add_filter('sanitize_file_name', 'sanitize_file_uploads', 10);

.htaccessによる実行防止

# /wp-content/uploads/.htaccess

# PHPファイルの実行を完全にブロック
<Files *.php>
    deny from all
</Files>

# 危険な拡張子をすべてブロック
<FilesMatch "\.(php|php3|php4|php5|phtml|pl|py|jsp|asp|sh|cgi)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

# 実行権限を削除
Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .sh .cgi

5. その他の基本的なセキュリティ対策

上記の原因と対策以外にも、WordPressサイトの安全性を高めるために初心者が押さえておきたいポイントがいくつかあります。

SSL化(HTTPSの導入)

サイト全体を常時SSL化することで通信を暗号化し、盗聴や改ざんのリスクを減らせます。現在ほとんどのレンタルサーバーで無料のSSL証明書(例:Let’s Encrypt)が利用可能です。管理画面のログイン情報なども暗号化され、安全性が向上します。SEO面でも有利になるため、未対応の場合は早急に設定しましょう。

SSL化のメリット: ✅ ログイン情報の暗号化 ✅ フォーム送信データの保護 ✅ SEOランキングの向上(Googleが優遇) ✅ ブラウザの「保護されていません」警告を回避 ✅ HTTP/2対応による表示速度向上

ファイル権限の適切な設定

サーバー上の重要ファイル(特に「wp-config.php」など)のパーミッションを適切に設定することで、不正アクセスを防ぎます。例えばWordPress公式ドキュメントでは「wp-config.php」のパーミッションは400または440が推奨されています。必要以上に書き込み権限を与えないことで、万一侵入されても被害を最小限にできます。

# 推奨パーミッション設定
# ディレクトリ
find /path/to/wordpress -type d -exec chmod 755 {} \;

# ファイル
find /path/to/wordpress -type f -exec chmod 644 {} \;

# 特殊ファイル
chmod 400 wp-config.php
chmod 400 .htaccess

# wp-contentは書き込み可能に
chmod 775 wp-content
chmod 775 wp-content/uploads
chmod 775 wp-content/plugins
chmod 775 wp-content/themes

信頼できるホスティングの利用

セキュリティ対策がしっかりしたホスティングを選ぶことも重要です。WAF(Webアプリケーションファイアウォール)や侵入検知システムを提供しているサーバーであれば、WordPress側で防ぎきれない攻撃もサーバーレベルで遮断してくれます。定期的なマルウェアスキャンやバックアップ提供など、セキュリティ面のサポートが厚いレンタルサーバーを利用しましょう。

セキュアなホスティングの条件

  • WAF(Webアプリケーションファイアウォール)標準装備
  • 自動バックアップ機能(最低7日分)
  • マルウェアスキャン機能
  • DDoS攻撃対策
  • SSH/SFTP接続のサポート
  • PHP最新バージョン対応
  • 無料SSL証明書提供

セキュリティプラグインの活用

WordPress初心者でも導入しやすい総合セキュリティプラグインも活用を検討してください。例えばWordfence SecuritySucuri Securityなどのプラグインは、ファイアウォール機能による不正アクセス遮断やマルウェアスキャン、ログイン試行の制限設定など多彩な機能でサイトを防御してくれます。ただしプラグインは入れすぎると競合や負荷の原因にもなるため、主要なものを1〜2個に絞って使うと良いでしょう。

主要セキュリティプラグインの比較

プラグイン Wordfence Sucuri iThemes Security
価格 無料/有料 無料/有料 無料/有料
ファイアウォール
マルウェアスキャン
2FA
ログイン制限
ファイル整合性
パフォーマンス影響

データベースセキュリティ

// wp-config.phpでテーブル接頭辞を変更
$table_prefix = 'wp3x7z_';  // デフォルトの'wp_'から変更

// データベースエラーを非表示に
ini_set('display_errors', 0);
error_reporting(0);

// デバッグモードを本番環境では無効化
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);

定期的なバックアップ戦略

万が一の事態に備えて、定期的なバックアップは必須です。業界標準の3-2-1ルールに従って、確実なバックアップ体制を構築しましょう。

3-2-1バックアップルールとは?

3-2-1ルールは、データ保護のベストプラクティスとして広く推奨されている方法です。具体的には以下の通りです。

  • 3つのコピー: 本番データ + バックアップ2つを保持
  • 2種類のメディア: サーバー内 + 外部ストレージ(クラウドなど)
  • 1つはオフサイト: 物理的に離れた場所に保管(災害対策)

バックアップの実施頻度

対象 頻度 理由
データベース 毎日 記事・設定・ユーザー情報など変動が多い
ファイル全体 週1回 テーマ・プラグイン・アップロード画像など
重要な更新前 都度 アップデート前の復元ポイントとして
保存期間 最低30日分 感染発見の遅れに備える

おすすめバックアッププラグイン

  1. UpdraftPlus - 初心者に最適。無料版でも十分な機能
  2. BackWPup - 細かい設定が可能。上級者向け
  3. All-in-One WP Migration - サイト移行にも使える万能タイプ

マルウェア感染時の緊急対応手順

万が一マルウェア感染の兆候(サイトが別のページに転送される、大量のスパムメール送信、見覚えのない管理者ユーザーが追加されている等)があった場合は、早急な対処が肝心です。

感染の兆候チェックリスト

緊急対応フロー

1. 即座の対応(5分以内)

  • サイトをメンテナンスモードに切り替え
  • FTPパスワードを変更
  • 管理者パスワードを変更

2. 被害調査(30分)

  • 改ざんされたファイルの特定
  • データベースの確認
  • アクセスログの解析
  • マルウェアスキャンツールの実行

3. 復旧作業(1-2時間)

  • クリーンなバックアップからの復元
  • マルウェアファイルの削除
  • プラグイン・テーマの再インストール
  • セキュリティホールの修正

4. 再発防止(1時間)

  • すべてのパスワード変更
  • セキュリティプラグインの導入
  • WAFの設定
  • 監視体制の強化

5. 事後対応(継続的)

  • Google Search Consoleで再審査リクエスト
  • 顧客への報告(必要に応じて)
  • セキュリティポリシーの見直し

それでも不安な場合や自力での復旧が難しい場合は、無理をせず専門の復旧サービスやセキュリティのプロに相談することをおすすめします。

まとめ

WordPressのマルウェア感染は、初心者にとっては怖いイメージがあるかもしれません。しかし本記事で解説したように、その多くは日頃の基本対策の積み重ねで十分に防ぐことができます。

公式以外の怪しいプラグインやテーマは使わない常に最新の状態に更新する、強力なパスワードと二段階認証でログインを厳重に管理する、そして怪しい動きがないか定期的にチェックする――これらを習慣づけるだけでも大部分の攻撃は跳ね返せるでしょう。

今すぐ実践すべきアクションプラン

🔴 最優先(今すぐ:10分以内)

🟠 高優先(今日中:1時間以内)

🟡 中優先(今週中:3時間程度)

🟢 定期実施(毎月)

大切なサイトを守るために、最新の知識と対策で万全の備えをしておきましょう。基本を押さえて継続することが、あなたのWordPressサイトをマルウェアから守る最善策です。


参考資料:

  • Sucuri Website Threat Report 2023
  • WordPress Security White Paper
  • ESET Security Research Center
  • Jetpack Security Report 2024
  • WPScan Vulnerability Database
  • OWASP Top 10 Web Application Security Risks