WordPress GSyndicationマルウェアに感染すると、訪問者がサイトにアクセスするとスパム広告ページにリダイレクトされ、wp-config.phpファイルの上部にeval(base64_decode(…))の形式の不正コードが挿入されます。
このマルウェアは、WordfenceやSucuriなどのセキュリティプラグインでは検出と削除が困難なサーバーレベルのマルウェアで、defunctという悪意のあるバイナリとSSHバックドア、needrestart自動再起動メカニズムが複合的に噛み合い、ファイルを消去してもゾンビのように復活し続ける特性を持っています。
この記事では、CyberPanelベースのサーバーからGSyndicationマルウェアを完全に削除して再感染を防ぐまでの手順をまとめました。

GSyndicationマルウェアとは何ですか?
GSyndicationはサーバーレベルで動作します WordPress マルウェアとして、wp-config.phpファイルを修正してマルウェアJavaScriptコードを挿入します。挿入されたスクリプトはsync [.] gsyndication [.] comから読み込まれ、訪問者に不要な広告を表示したりスパムページにリダイレクトしたり、場合によってはユーザーデータを消去したりします。特に、このマルウェアは管理者パネル(/wp-admin)、REST API(/wp-json)、AJAXリクエストでは実行されないように設計されており、ログインした管理者には症状が見られず、一般訪問者にのみ悪意のある広告やリダイレクトが表示されます。このため、感染事実を遅く発見することが多い。
WordPress サイトのすべてのページの上部に次のスクリプトが挿入され、訪問者に公開されます。

そして WordPress サイトの上部に以下のスクリプトが追加されます。

これは、wp-config.phpファイルに注入されたマルウェアが実行されたとき base64でエンコードされたペイロードがデコードされて出力されたものです。
<script src="//async[.]gsyndication[.]com/"></script>
wp-config.phpファイルからマルウェアを削除し、 キャッシュプラグインのキャッシュを削除するとサイト上部に追加されるスクリプトが消えますが、時間が経つとまたマルウェアが挿入されます。
ゾンビのように復活する WordPress GSyndicationマルウェアを削除する方法
一般的な WordPress マルウェアは、感染したファイルやデータベースからマルウェアをスキャンして削除することで問題を解決します。
ただし、GSyndicationマルウェアはこれらのアクションだけでは完全に削除されず、削除後もwp-config.phpファイルにマルウェアが繰り返し再注入されるという特性があります。
これは単純なファイル感染ではなく、サーバーレベルで バックドアが植えられているからです。バックドアを完全に削除し、サーバーのセキュリティ対策を講じるまで、マルウェアがゾンビのように復活し続けることができるので、必ずサーバーレベルでの確認と対応が必要です。
ドイツベースのクラウドVPSホスティング会社であるContaboサーバーにCyberPanelをインストールして運用中 WordPress サイトからGSyndicationマルウェアの削除を依頼されました。コンタボはAWSに比べてコストが安く、海外でよく使われるホスティングサービスのようです。
最初は一般的なマルウェアと判断し、ファイルスキャンやマルウェアの削除など従来の方法で対応しました。しかし、時間が経つと、wp-config.phpファイルにマルウェアが再注入されるという現象が繰り返されました。
グーグルを使って原因を探していたところ、以下の記事でGSyndicationマルウェアの特性と削除方法を確認することができました。
上記の記事を参照してバックドアを見つけて削除し、wp-config.phpファイルが変更されないように追加の措置を講じました。しかし、数時間が過ぎると、マルウェアが再び復活しました。😥
何度もバックドアのナビゲーションと削除を繰り返しながら、1つの重要な事実に気づきました。単にバックドアファイルを見つけて削除するだけでは根本的な解決にはならないということでした。サーバーレベルでのセキュリティ対策は必ず並行する必要があり、特にセキュリティ脆弱性が発見されたバージョンのCyberPanelが使用されていたため、CyberPanelの脆弱性を通じて継続的に再感染が行われるのではないかという強い疑いがありました。
CyberPanelのアップデートはCyberPanel内で可能です。初めてCyberPanelをアップデートした後、サーバーはうまくいき、サーバーを復元した後に再びCyberPanelをアップグレードできました。そして、バックドアの両方を削除し、サーバーとCyberPanelのセキュリティ対策を実行したため、悪意のあるコードが再発されなくなりました。

上の図は、10分間隔で再感染するかどうかを自動的にチェックする監視画面です。幸いなことに、一日半が過ぎた現在まで再感染は発生していません。 (👉この記事を書いた後 4일この過ぎてもまた復活しませんね。一度マルウェアが治療されたと見なすことができます。😊)
ただし WordPress コア、テーマ、プラグインが最新バージョンに維持されていない場合、またはサーバーのセキュリティに抜け穴がある場合は、いつでも再発する可能性があります。 GSyndicationマルウェアだけでなく、ほとんど WordPress マルウェアは、古いソフトウェアのセキュリティの脆弱性を掘り下げることがよくあります。したがって、 WordPressとプラグイン、テーマは常に最新バージョンに保ち、サーバーのセキュリティ設定にも絶えず注意を払うのが安全なサイト運営の基本といえます。
AWSやVultrなどのサーバーを直接管理する環境では、ファイアウォール設定などのセキュリティ対策を正しく適用しないと、このケースのように深刻なセキュリティ問題が発生する可能性があります。また、サーバーを直接運営してみると、一人では解決しにくい問題にぶつかり、堕落を見ることも少なくありません。
このような負担を軽減したい場合 クラウドウェイズのようなマネージドホスティングサービスを考えてみましょう。サーバーまたは WordPressに問題が発生した時、年中無休ライブチャットで専門サポートを受けることができ、初心者でも比較的安心してサイトを運営できます。コストはやや高いですが、直感的な管理インターフェースと迅速なカスタマーサポートを考えると、十分に考慮することができます。参考までに、このブログは現在クラウドウェイズを通じてVultrソウルサーバーでホストされています。
サーバーの運営に関心が多い場合、最近では問題が発生したときにチャットGPTなどAIの助けを借りて直接問題解決を試みることもできるようです。過去には、数日に苦労するようにAIを活用すれば、1日以内にも問題を解決することができると考えられます。
GSyndicationマルウェア感染の原因の推定と対策プロセスのクリーンアップ
GSyndicationマルウェアの削除プロセスをまとめました。この問題で問題が発生している場合は、以下を参照して解決策を試すことができます。まず、サーバーのバックアップを確認してから進めてください。サーバーに問題が発生した場合は、すぐに復元が可能でなければ安全です。そのような措置がなければ、試さないことをお勧めします。
以下は、問題を解決しながらAIと交わした会話に基づいてAIがまとめたものです。
1.感染原因の推定
主な浸透経路(推定)
CyberPanelの脆弱性の悪用(最も有力)
この感染の最も有力な原因はCyberPanelのセキュリティの脆弱性です。
- CVE-2024-51567 — CyberPanel 2.3.x の upgrademysqlstatus エンドポイントで認証なしで root 権限で任意のコマンドを実行可能 (CVSS 10.0 満点)
- CVE-2024-51568 - ファイルマネージャのアップロードエンドポイントを介したリモートコードの実行
- 2024年10月、実際の攻撃で22,000を超えるCyberPanelサーバーが被害を受け、このサーバーも同じ攻撃グループによって感染していると推定されています。
WordPress 管理者アカウントの奪取
- WordPress 管理者パスワードが漏洩したり脆弱であった可能性
攻撃者情報(IPの後半はアスタリスクで処理)
| IP | 国 | 행위 |
|---|---|---|
| 155.4.xxx.xx | 🇸🇪 スウェーデン (Bahnhof AB) | SSH公開鍵によるrootアクセス、defunctの再インストール、サーバー全体のアカウントパスワードの変更 |
| 185.177.xx.xx | 🇫🇷 フランス (Bucklog) | PHPファイル一括スキャン |
| 5.252.xxx.xx | 🇺🇦 ウクライナ | 疑わしいアプローチ |
マルウェアの動作方法
① CyberPanel 취약점으로 최초 침투
↓
② defunct 악성 바이너리 + 서비스 설치
↓
③ wp-config.php 상단에 eval(base64_decode) 삽입
↓
④ 방문자 브라우저에서 gsyndication 악성 JS 실행
↓
⑤ fastapi_ssh_server 백도어 서비스 설치
⑥ /root/.ssh/authorized_keys에 악성 공개키 수백 개 삽입
⑦ /usr/bin/.ssh, /usr/sbin/.ssh 등 숨겨진 위치에도 백도어 키 저장
⑧ apt/needrestart 실행 시마다 defunct 자동 재시작 (재부활 메커니즘)
⑨ 스웨덴 IP가 SSH로 주기적으로 접속하여 defunct 재설치 반복
2. 処置プロセス
WordPress レベルでデータとDBからマルウェアをスキャンして削除し、次の手順でサーバーからマルウェアを削除しようとしました。
ステップ1 - defunct悪意のあるサービスを削除する
systemctl stop defunct.service
systemctl disable defunct.service
rm -f /usr/bin/defunct
rm -f /usr/lib/systemd/system/defunct.service
rm -f /usr/lib/systemd/system/defunct.dat
rm -f /lib/systemd/system/defunct.service
rm -f /lib/systemd/system/defunct.dat
systemctl daemon-reload
systemctl reset-failed
ステップ2 - fastapi_ssh_serverバックドアを削除する
systemctl stop fastapi_ssh_server.service
systemctl disable fastapi_ssh_server.service
rm -f /etc/systemd/system/fastapi_ssh_server.service
rm -f /usr/local/CyberCP/fastapi_ssh_server.py
rm -f /usr/local/CyberCP/fastapi_ssh_server.service
rm -f /usr/local/CyberCP/__pycache__/fastapi_ssh_server.cpython-312.pyc
systemctl daemon-reload
ステップ3 - SSHバックドアキーの削除
# authorized_keys 초기화
echo "" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
# 숨겨진 .ssh 디렉토리 전체 제거
find / -name ".ssh" -type d 2>/dev/null | grep -v "^/root\|^/home" | xargs rm -rf
# AuthorizedKeysFile 경로 제한
sed -i 's/^#*AuthorizedKeysFile.*/AuthorizedKeysFile .ssh\/authorized_keys/' /etc/ssh/sshd_config
systemctl restart ssh
ステップ4 - needrestartブラックリストを登録する(再復活をブロックする)
echo -e "\n# Block defunct malware service\n\$nrconf{blacklist_rc} = [\n qr(^defunct),\n];" >> /etc/needrestart/needrestart.conf
ステップ5 - wp-config.phpマルウェアを削除する
sed -i '/eval(base64_decode/d' /home/your-domain1.com/public_html/wp-config.php
sed -i '/eval(base64_decode/d' /home/your-domain2.com/public_html/wp-config.php
ステップ6 - 攻撃者IP永久ブロック
iptables -A INPUT -s 155.4.xxx.xx -j DROP
iptables -A INPUT -s 185.177.xx.xx -j DROP
iptables -A INPUT -s 5.252.xxx.xx -j DROP
netfilter-persistent save
3. 最終点検結果
| アイテム | 상태 |
|---|---|
| defunctファイル/サービス | ✅ 削除完了 |
| fastapi_ssh_server バックドア | ✅ 削除完了 |
| 隠し.sshディレクトリ | ✅ 削除完了 |
| 認可されたキー | ✅初期化完了 |
| wp-config.phpマルウェア | ✅通常 |
| DBマルウェア | ✅なし |
| uploads PHPファイル | ✅なし |
| .bashrc/.profile バックドア | ✅なし |
| needrestartブラックリスト | ✅登録済み |
| 攻撃者のIPブロック | ✅ 3つの永久ブロック |
| 52時間以上マルウェア未再発 | ✅確認 |
4. 今後の推奨措置
| 優先順位 | アイテム |
|---|---|
| 🔴緊急 | root パスワードの変更 (passwd root) |
| 🔴緊急 | WordPress 管理者パスワードの変更 |
| 🟠重要 | Contaboファイアウォールの8090ポートIP制限 |
| 🟠重要 | WordPress 管理者2FA設定(Wordfence) |
| 🟠重要 | Fail2banのインストール(SSH無差別代入ブロック) |
| 🟡推奨 | SSH公開鍵認証のみ許可 |
| 🟡推奨 | ClamAVのインストールと定期スキャン |
| 🟡推奨 | CyberPanel 2.4.5 アップグレード |
| 🟡推奨 | Contaboスナップショット定期作成 |
| 🟢選択 | サーバーOSの再インストール(最も確実な方法) |
👉 WordPress マルウェアの削除など WordPressまたはWebホスティングに関するトラブルシューティングが必要な場合 ここでサービス(有料)をご依頼することができます。
コメントを残す