マイニングマルウェアの自己除去ハンドブック

1. マイニングマルウェアとは

マイニングマルウェアはCPUを占有してオーバークロック演算を行い、ホストのCPUリソースを大量に消費するため、サーバ上の他のアプリケーションの正常な動作に深刻な影響を与えます。ハッカーはより多くの計算リソースを得るために、通常はネットワーク全体を無差別にスキャンし、SSHブルートフォース攻撃や脆弱性を利用した攻撃などでホストに侵入します。

一部のマイニングマルウェアはワームのように振る舞い、ホストへの侵入に成功した後、内部ネットワークに侵入し、被害サーバに永続的に潜伏して最大の利益を得ようとします。

マイニングマルウェアの全体的な攻撃フローは以下の図のようになります。

攻撃フロー図

2. マイニングマルウェア感染の兆候

マイニングマルウェアはユーザーに気づかれずにホストの計算能力を利用してマイニングを行います。最も顕著な特徴はホストのCPU使用率が高くなることです。クラウドホストのCPU使用率を確認する方法は2つあります。

1. コンソールのインスタンスモニタリング

コンソールモニタリング画像

2. ホストでTOPコマンドを実行

top -c

topコマンド出力例

クラウドホストのCPU使用率が高い状態が続く場合、ホストはマイニングマルウェアに感染している可能性が高く、サーバ上の他のアプリケーションの正常な動作に影響を与えるため、すぐに調査する必要があります。

3. マイニングマルウェアの除去

1. ホストの早期隔離

ワーム機能を持つ一部のマイニングマルウェアは、ホストの制御権を取得した後、他の公開ホストや同一LAN内の他のホストに水平展開を行うことがあります。そのため、感染が発見されたら、業務に影響を与えない範囲で、感染ホストをすぐに隔離し、次の分析と除去作業を進めるべきです。

Tencent Cloudホストはセキュリティグループを設定して隔離できます。詳細は以下のリンクを参照してください。
https://cloud.tencent.com/document/product/215/20089

2. 異常なネットワーク通信の遮断

マイニングマルウェアはマイニングプールに接続するだけでなく、ハッカーのC2サーバに接続してC2命令を受信・実行したり、他の悪意のあるマルウェアを送り込んだりするため、迅速なネットワーク遮断が必要です。

(1)ホストファイアウォールの現在有効なiptablesルールに、業務範囲外の疑わしいアドレスやポートがないか確認します。これらはマイニングプールやC2アドレスである可能性があります。

iptables -L -n

(2)iptablesルールから疑わしいアドレスやポートを削除します。

vi /etc/sysconfig/iptables

(3)マイニングマルウェアのネットワーク通信を遮断します。

iptables -A INPUT -s 疑わしいアドレス -j DROP
iptables -A OUTPUT -d 疑わしいアドレス -j DROP

3. 計画タスクの削除

ほとんどのマイニングマルウェアは、感染したホストに計画タスクを書き込むことで永続化を図ります。マイニングプロセスを削除するだけでは根本的な解決にはなりません。設定された時刻になると、システムは計画タスクを通じてハッカーのC2サーバからマイニングマルウェアを再ダウンロードして実行します。

マイニングマルウェアの一般的な計画タスクは、shスクリプトをダウンロードして実行するものです。以下の図を参照してください。

計画タスクの例

以下のコマンドを実行して、疑わしい定期タスクがあるか確認します。ある場合は、後で分析するために記録を保存し、その後削除します。

システムの現在のユーザーの計画タスクを表示:

crontab -l

システムの特定ユーザーの計画タスクを表示:

crontab -u username -l

その他の計画タスクファイルを確認:

cat /etc/crontab
cat /var/spool/cron
cat /etc/anacrontab
cat /etc/cron.d/
cat /etc/cron.daily/
cat /etc/cron.hourly/
cat /etc/cron.weekly/
cat /etc/cron.monthly/
cat /var/spool/cron/

4. スタートアップ項目の削除

計画タスク以外にも、マイニングマルウェアはスタートアップ項目を追加することで永続化を実現します。以下のコマンドを使用して、起動時に自動起動するサービスに異常なサービスがないか確認できます。

CentOS7未満:

chkconfig –list

CentOS7以降:

systemctl list-unit-files

悪意のあるスタートアップ項目が見つかった場合は、以下のコマンドで無効にできます。

CentOS7未満:

chkconfig サービス名 off

CentOS7以降:

systemctl disable サービス名

さらに、以下のディレクトリとファイルも注意深く確認し、疑わしいスタートアップ項目を削除します。

/usr/lib/systemd/system
/usr/lib/systemd/system/multi-user.target.wants
/etc/rc.local
/etc/inittab
/etc/rc0.d/
/etc/rc1.d/
/etc/rc2.d/
/etc/rc3.d/
/etc/rc4.d/
/etc/rc5.d/
/etc/rc6.d/
/etc/rc.d/

確認の際は、ファイルの変更日時でソートし、最近作成されたサービス項目に注目します。以下の図のように、最近 bot.service というサービスが作成されており、起動時に /etc/kinsing というマルウェアファイルを起動します。そのため、botサービスを無効にし、/etc/kinsing ファイルを削除する必要があります。

bot.service の例1 bot.service の例2

5. プリロードsoの削除

/etc/ld.so.preload を設定することで、プログラム起動前に優先して読み込まれる動的リンクライブラリをカスタマイズできます。一部のマルウェアはこのファイルを変更して悪意のあるsoファイルを追加し、マイニングプロセスの隠蔽などの悪質な機能を実現します。
/etc/ld.so.preload(デフォルトは空)をチェックし、異常な動的リンクライブラリを削除します。以下のコマンドで削除できます。

> /etc/ld.so.preload

ld.so.preload チェック例

6. SSH公開鍵の削除

マイニングマルウェアは、~/.ssh/authorized_keys ファイルにハッカーのSSH公開鍵を書き込むことがよくあります。これにより、ユーザーがマルウェアを完全に削除しても、ハッカーはパスワードなしでホストにログインでき、サーバの制御権を保持する一般的な手段です。

~/.ssh/authorized_keys ファイルを確認し、疑わしいSSH公開鍵があれば削除します。

7. マイニングマルウェアの除去

(1)マイニングプロセスの除去

マイニングマルウェアの最大の特徴は、ユーザーに気づかれずにホストの計算能力を利用してマイニングを行い、CPUリソースを大量に消費することです。以下のコマンドを実行して、CPUリソースを大量に消費しているプロセスを調査します。

top -c
ps -ef

top コマンド出力例

該当プロセスがマイニングプロセスであることを確認したら、以下の手順で削除します。
マイニングプロセスのファイルパスを取得して記録:

ls -l /proc/$PID/exe

マイニングプロセスを強制終了:

kill -9 $PID

マイニングプロセスに対応するファイルを削除します。

プロセス削除例

(2)その他の関連する悪意のあるプロセスの除去

悪意のあるプロセスは外部のC2サーバと通信する際に、ポートを開いて待ち受けることがよくあります。以下のコマンドを実行して、許可されていないポートが待ち受けていないか確認します。

netstat -antp

netstat 出力例

許可されていないプロセスがある場合は、以下の手順で削除します。
許可されていないプロセスのファイルパスを取得して記録:

ls -l /proc/$PID/exe

許可されていないプロセスを強制終了:

kill -9 $PID

許可されていないプロセスに対応するファイルを削除します。

プロセス削除例2

以下のコマンドを使用して、最近追加されたファイルを調査し、関連するマルウェアを削除することもできます。

find /etc -ctime -2   (ここではディレクトリを /etc に指定し、過去2日以内に追加されたファイルを取得)
lsof -c kinsing        (ファイル名が kinsing のプロセス情報を表示)

find/lsof 例

8. リスク調査とセキュリティ強化

システムのリスク調査とセキュリティ強化を行い、マイニングマルウェアの再発を防ぎます。詳細は以下のリンクを参照してください。
https://cloud.tencent.com/document/product/296/9604

4. よくある質問

1. マイニングマルウェアを削除したばかりなのに、すぐに再発するのはなぜ?

多くのユーザーは、マイニングマルウェアがなかなか完全に除去できないと報告しています。プロセスをkillし、マルウェアファイルを削除しても、すぐにCPU使用率が再び上昇します。その根本的な原因は、除去が不十分なことにあります。多くのユーザーはマイニングプロセスと対応ファイルをkillするだけで、計画タスクやデーモンプロセスを削除していません。

一般的には、まず計画タスク、スタートアップ項目、デーモンプロセスを削除し、その後マイニングプロセスや他の悪意のあるプロセスを削除することをお勧めします。

除去順序の図

2. 疑わしいプロセスが悪意のあるものかどうか、どのように判断するか?

下図のように、未知のプロセス kinsing がローカルポート31458をリッスンしており、非常に疑わしいです。以下の方法で判断できます。

(1)ls -al /proc/$PID/exe を実行して疑わしいプロセスに対応するファイルを確認します。
(2)ファイルが削除されていない場合は、ファイルをVirustotalにアップロードして検出するか、ファイルのmd5を計算してmd5をVirustotalで検索します。ファイルが削除されている場合は、cat /proc/$PID/exe > /tmp/t.bin を実行してプロセスを特定のディレクトリにダンプし、そのファイルをVirustotalにアップロードするか、ダンプファイルのmd5を計算してVirustotalで検索します。複数のアンチウイルスエンジンが同時に検出した場合、そのプロセスは悪意のあるものと判断できます。

プロセス情報1 プロセス情報2

VirustotalのURL:https://www.virustotal.com/gui/s

3. システムのCPU使用率が100%に近いのに、どのプロセスが原因かわからないのはなぜ?

下図のように、システムのCPU使用率が100%に近いのに、原因となるプロセスが表示されません。これは通常、システムコマンドがマルウェアに改ざんされ、マルウェアプロセスの痕跡が隠蔽されているため、ユーザーがトレース分析できなくなっていることを示します。

CPU使用率の例

コマンドの改ざんにはいくつかの方法があります。

(1)topのソースファイルが改ざんされ、悪意のあるプロセス情報がフィルタリングされて返される

top改ざん例

以下のコマンドを実行して復元できます。

rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top

【関連記事】
https://blog.csdn.net/chenmozhe22/article/details/112578057

(2)プリロードsoファイルが改ざんされ、ls、top、psなどのコマンドがマルウェアの動的リンクライブラリにハイジャックされ、マルウェアプロセスに関する情報を取得できない

プリロードso改ざん例

以下のコマンドを実行して復元できます。

# 悪意のあるsoファイルのパス
/etc/ld.so.preload && rm -rf

【関連記事】
https://cloud.tencent.com/developer/article/1744547

(3)その他の未知の手段によるシステムコマンドの改ざん

以下の2つの方法を試してください。

i. 同じバージョンの他のシステムからコマンドのソースファイルを現在のシステムにコピーして上書きします。uname -a で現在のシステムバージョンを確認できます。

ii. またはbusyboxをインストールしてシステムを調査します。
busyboxは300以上の一般的なLinuxコマンドとツールを統合したソフトウェアです。busyboxを使用してシステムコマンドの代わりにシステムを調査できます。

yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-devel
wget http://busybox.net/downloads/busybox-1.33.0.tar.bz2
tar -jxvf busybox-1.33.0.tar.bz2
cd busybox-1.33.0 && make && make install

【関連記事】
https://www.cnblogs.com/angryprogrammer/p/13456681.html

タグ: マイニングマルウェア Linuxセキュリティ マルウェア除去 CPU使用率 crontab

6月3日 18:40 投稿