進化する Panchan ボットネット

進化する Panchan ボットネット

脅威をもたらす行為者は、常にインターネットをスキャンして、脆弱性を悪用したり、推測しやすいパスワードを推測したりして、脆弱なマシンにアクセスしようと試みます。マシンがオンラインになるとすぐに、そのマシンが公開しているサービスはすべて、ソフトウェアの脆弱性や認証メカニズムの脆弱性を調べるためにスキャンされます。悪用されたマシンは、暗号通貨のマイニングや DDoS 攻撃の実行など、さまざまな悪意ある目的に利用される可能性があります。Nozomi Networks Labs は、意図的に脆弱なマシンをホストするハニーポットのネットワークを展開し、攻撃対象となった際の攻撃者の行動を観察しています。この戦略により、攻撃者が使用する進化する技術やツールについて洞察を得ることができ、また、新たに登場するマルウェアファミリーの分析も可能になります。

最近、私たちの関心は、私たちのハニーポットによって捕獲されたマルウェアファミリーに集まりました。このマルウェアは、そのマシンの既存の SSH サーバーを自身のものに置き換えるという、一般的ではない動作をします。さらに、これはよくある Mirai のクローンではなく、Go ベースの異なるコードベースでした。私たちの調査により、このマルウェアサンプルは、2022年に Akamai によって検知/分析された P2P ボットネット "Panchan" に属することが判明しました。Panchan ボットネットは 2024年現在も依然として活動しており、コードベースは新しい機能を提供するために進化を続けています。

マイナーのペイロード

実行すると、Panchanは自身のコピーを/bin/systemd-workerに保存し、さらに/lib/systemd/system/systemd-worker.serviceに保存されたsystemdサービスを確立し、システムのリブート後でも持続性を確保する(図1参照)。PIDは/tmp/.jpecggmkwmcssjjに格納される。さらに、システム・サービスのコンフィギュレーションにはLimitNOFILEがあり、サービスが同時に開くことができるファイルの最大数を制御し、リソースの枯渇を防いでいる。同様に、LimitNPROCはサービスが作成できるプロセスの最大数を管理し、過剰なリソース消費を抑制することでシステムの安定性を守ります。

図1.パンちゃんが新しく作ったサービス。

Panchanサンプルには、さらに2つのELFバイナリがbase64文字列としてエンコードされて埋め込まれています。XMRig:RandomX、KawPow、CryptoNight、GhostRiderアルゴリズムをサポートするCPU/GPUマイナーと、ethash、etchashなどをサポートするGPUマイナーのNBMinerです。

各マイナーは、埋め込まれた base64 エンコード文字列をデコードし、メモリに保存された匿名ファイルへのファイルディスクリプタを返す memfd_create システムコールを使用し、次に/proc/self/fd/ を使ってデコードされた ELF をそこに書き込むことで展開されます (図 2を参照)。

図2.マイナーペイロードをドロップするために使用されるmain_loadpayload関数の逆アセンブル

伝播とロギング

システムへの侵入に成功すると、Panchan はすべてのユーザーのホームフォルダを列挙し、.ssh フォルダを解析して known_hosts ファイルを読み取り、存在するプライベート SSH 鍵を使用して各ホストへのログインを試みます (図 3を参照)。このアプローチは再帰的に機能するため、初期のホストが他のマシンに SSH 経由でアクセスし、プライベート鍵がパスワードで保護されていないと仮定すると、横方向の動きを行うことでボットネットを拡大する効果的な方法となります。

図3..ssh/known_hostsファイルを読むmain_spreader

このサンプルは、SSH 経由で拡散するだけでなく、パブリック IPv4 空間からランダムに IP アドレスをスキャンし、ハードコードされたユーザー名とパスワードの組み合わせを使用して SSH 経由でログインを試みます (図 4を参照)。

図4.main_spreader 関数で使用されるユーザー名/パスワード

Panchanは、Discord の Web フック API を使用して、情報をオペレーターに送信します。例えば、マルウェアが実行されると、新たに感染したマシンから "わあわあ" がというテキストが POST リクエストで Discord に送信されます。同じ Web フックは、main_healthchecker関数からマシンの外部 IP アドレスを定期的に報告するためにも使用されます。SSH 経由での伝搬に成功した試みも、main_sshtryから報告されます。

自己防衛

Panchan は、システム管理者による検知を回避し、他の悪意のあるソフトウェアから自身を守るために、さまざまなテクニックを使用しています。特に興味深いのは、システム上の既存の SSH サーバーを置き換える一方で、元の SSH ホストキーを保持している点です。これにより、システムに接続するユーザーが  "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!" というプロンプトに遭遇しないようになっています。さらに、crypto/ssh Goライブラリをベースとする新しい SSH サーバーでは、認証後に特定の文字列を入力して人間の身元を認証することがユーザーに義務付けられています (図 5を参照)。この対策により、インターネットを常時スキャンして Panchan に感染したマシンに侵入しようとする他のボットが、システムにアクセスするための正しい認証情報を取得できたとしても、そのプロンプトを処理できないため、侵入を阻止できる可能性があります。

図5.変更された SSH サーバーは、ユーザーが人間であることを確認するよう促す

Panchan は、top や htop などのプロセス監視ツールに関連付けられたプロセス名をチェックし、マイニング関連のプロセスを終了させるという追加の戦術を採用しています。この先を見越した対策は、実行中のプロセスリストを積極的に確認しているシステム管理者による検出を回避することを目的としており、これによりマイニングソフトウェアの存在を隠蔽することができます (図 6を参照)。

図6.main_antitaskmanager関数の逆アセンブル。topまたはhtopが実行されている場合、実行中のマイナーをキルする

多くの UNIX ベースのマルウェアに共通するものとして、Panchan は特定のシグナルをキャッチし、プロセスを終了させないようにするために、シグナルハンドラを signal.Notify を使用して設定します (図 7 を参照)。例えば、SIGTERM はキャッチされ、悪意のあるプロセスを終了させるには不十分です。SIGKILL のようなシグナルはキャッチできないため、プロセスを終了させるにはこれを使用する必要があります。

図7.main_antikill 関数の逆アセンブル

P2P

Panchan は P2P プロトコルを使用しており、感染したホスト間でピアの交換を促進します。感染したシステムは、この機能のためのサーバーとして動作し、ポート 1919 でアクセスできます。接続すると、ユーザーは、システムが認識している Panchan のピアの中からランダムに選択されたピアの一覧が表示されます (図 8を参照)。

図8.P2P サービスのバナー

P2Pプロトコルは、以下のコマンドをサポートしています。

  • sharepeer [ip]:感染したピアをホスト間で交換するために使用されます。このコマンドを使用すると、感染したマシンは、その時点では認識していない他の感染したマシンについて知ることができます。このようなコマンドを受信すると、Panchan は指定された IP アドレスのポート 1919 に接続しようと試みます。
  • sharerigconfig [config]:マイニングソフトウェアの構成を交換するために使用されます。構成は base64 エンコードされた JSON として送信されます。マイニング構成 (図 9を参照) は、ボットネットのオペレーターから送信されたものであることを保証するために署名されます。そのため、RSA PKCS #1 v1.5 署名の署名フィールドは、crypto/rsa Go ライブラリの VerifyPKCS1v15 関数と組み込みの公開鍵を使用して検証されます。
図9.マイニング構成を保持するための構造
  • shareupdateinfo [info]:ドロップラーの更新に使用される情報を交換するために使用されます。情報は、sharerigconfig と同様に、ダウンロード URL の送信元やピアから送信されたその他の情報を確認するために署名され、base64 エンコードされた JSON として送信されます (図 10を参照)。
図10. 更新情報を保持するための構造体

Panchanの古いバージョンでは、godmode 引数を指定すると管理パネルが表示されましたが、今回分析したサンプルのバージョンでは、この機能は削除されています。更新とマイニングの設定が署名および検証され、ピアが送信できることを考えると、このコードは削除され、個別に実装された可能性が高いと思われます。

感染指標

Panchan マルウェアファミリーに感染したデバイスは、Shodan のようなプラットフォーム上で "Go" のバナーを表示している SSH サーバーを検索することで特定できます。このバナーを表示しているサーバーがすべて正当なパンチャン感染であるわけではありませんが、パンチャンに感染したシステムは、P2P 機能のためにポート 1919 でサービスを公開しています。このサービスに接続するクライアントは、ランダムに選択された他の P2P ノードとともにパンチャンのバナーを受け取ります。Go ベースの SSH サーバーの初期データセットを使用し、ポート 1919 でサービスを実行していないものを除外し、予想される Panchan バナーとともに、感染したノードに問い合わせを行うことで、ボットネットの規模を正確に算出することが可能です。執筆時点での感染の地理的分布は以下の通りです。

大陸感染システム
アフリカ1
南北米14
アジア45
ヨーロッパ37

結論

これらのおとりシステムの展開により、現実のシナリオにおける悪意のある行為者の戦術、ツール、行動に関する貴重なインサイトを得ることができます。この情報は、新しいマルウェアの複雑性を理解するのに役立つだけでなく、将来の攻撃から保護するためのより効果的な対策を開発することも可能にします。進化し続ける脅威の状況を継続的に監視し、適応することで、デジタルインフラの保護とサイバー脅威からの防御という継続中の戦いにおいて、常に一歩先を行くことができます。

IoC

Panchan: 94f2e4d8d4436874785cd14e6e6d403507b8750852f7f2040352069a75da4c00

組み込み XMRig: 6f445252494a0908ab51d526e09134cebc33a199384771acd58c4a87f1ffc063

組み込み NBMiner: a819b4a95f386ae3bd8f0edc64e8e10fae0c21c9ae713b73dfc64033e5a845a1

PID:/tmp/.jpecggmkwmcssjj

永続化:/lib/systemd/system/systemd-worker.service。