近年、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アドレスからのアクセスを一時ブロックする設定も効果的です。加えて、管理者アカウントは必要最低人数にとどめ、不要になったユーザーは速やかに削除しましょう。こうした対策により、ブルートフォース攻撃や不正ログインによるマルウェア侵入リスクを大幅に減らせます。
強力なパスワードの作成例
❌ 危険なパスワードTOP10:
1. password123
2. admin123
3. 123456
4. [会社名]2024
5. admin@2024
6. wordpress
7. letmein
8. qwerty123
9. password!
10. [サイト名]123
✅ 安全なパスワードの例:
- Kj#8mP$nQ2@xLw9!vR5 (18文字、完全ランダム)
- MyD0g&Run5!nTh3P@rk2024 (パスフレーズ方式)
- 9#Yx$Lm2@Qw5&Np8*Zr3 (パスワードマネージャー生成)
パスワード強度の目安:
- 最低16文字以上
- 大文字・小文字・数字・記号をすべて含む
- 辞書に載っている単語を含まない
- 個人情報と関連しない
二要素認証(2FA)の設定
推奨プラグイン: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 SecurityやSucuri 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:データのコピーを3つ保持
2:2つの異なるメディアに保存
1:1つはオフサイト(別の場所)に保管
推奨バックアップスケジュール:
- データベース:毎日
- ファイル全体:週1回
- 重要な更新前:都度
- 保存期間:最低30日分
推奨バックアッププラグイン:
- UpdraftPlus
- BackWPup
- All-in-One WP Migration
マルウェア感染時の緊急対応手順
万が一マルウェア感染の兆候(サイトが別のページに転送される、大量のスパムメール送信、見覚えのない管理者ユーザーが追加されている等)があった場合は、早急な対処が肝心です。
感染の兆候チェックリスト
□ Googleから「このサイトは危険です」警告が表示
□ サイトが見知らぬサイトにリダイレクトされる
□ 管理画面にログインできない
□ 見覚えのないユーザーアカウントが追加されている
□ サイトの表示速度が異常に遅い
□ ホスティング会社から警告メールが届いた
□ Google Search Consoleでマルウェア警告
□ 訪問者から「ウイルス警告が出る」と連絡
□ サーバーの容量が異常に増加
□ 不明なファイルやディレクトリの出現
緊急対応フロー
1. 即座の対応(5分以内)
- サイトをメンテナンスモードに切り替え
- FTPパスワードを変更
- 管理者パスワードを変更
2. 被害調査(30分)
- 改ざんされたファイルの特定
- データベースの確認
- アクセスログの解析
- マルウェアスキャンツールの実行
3. 復旧作業(1-2時間)
- クリーンなバックアップからの復元
- マルウェアファイルの削除
- プラグイン・テーマの再インストール
- セキュリティホールの修正
4. 再発防止(1時間)
- すべてのパスワード変更
- セキュリティプラグインの導入
- WAFの設定
- 監視体制の強化
5. 事後対応(継続的)
- Google Search Consoleで再審査リクエスト
- 顧客への報告(必要に応じて)
- セキュリティポリシーの見直し
それでも不安な場合や自力での復旧が難しい場合は、無理をせず専門の復旧サービスやセキュリティのプロに相談することをおすすめします。
まとめ
WordPressのマルウェア感染は、初心者にとっては怖いイメージがあるかもしれません。しかし本記事で解説したように、その多くは日頃の基本対策の積み重ねで十分に防ぐことができます。
公式以外の怪しいプラグインやテーマは使わない、常に最新の状態に更新する、強力なパスワードと二段階認証でログインを厳重に管理する、そして怪しい動きがないか定期的にチェックする――これらを習慣づけるだけでも大部分の攻撃は跳ね返せるでしょう。
今すぐ実践すべきアクションプラン
🔴 最優先(今すぐ:10分以内)
□ 管理者パスワードを16文字以上の強力なものに変更
□ WordPress本体の更新確認と適用
□ 全プラグインの更新確認と適用
🟠 高優先(今日中:1時間以内)
□ 使っていないプラグイン・テーマを完全削除
□ 二要素認証プラグインの導入
□ バックアップの作成
🟡 中優先(今週中:3時間程度)
□ セキュリティプラグインの導入と設定
□ .htaccessによるアクセス制限設定
□ ファイルパーミッションの確認と修正
□ SSL証明書の導入(未対応の場合)
🟢 定期実施(毎月)
□ プラグイン・テーマの棚卸し
□ アクセスログの確認
□ バックアップの動作テスト
□ セキュリティスキャンの実施
大切なサイトを守るために、最新の知識と対策で万全の備えをしておきましょう。基本を押さえて継続することが、あなたの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
WordPressセキュリティに関する国内外の最新情報をもとに執筆