Panchan のマイニング装置:Golang ベース、ピアツーピアの新しいボットネットの誕生
著者:Stiv Kupchik
エグゼクティブサマリー
Akamai セキュリティ研究者が発見した Panchanは、新しいピアツーピアボットネット兼 SSH ワームであり、2022 年 3 月に登場して以降、Linux サーバーに積極的に侵入しています。
Panchan は Golang で記述されており、組み込まれた同時実行機能を利用して、拡散性を最大化し、マルウェアモジュールを実行します。
このマルウェアは、ほとんどのワームで一般的となっている「基本的な」SSH 辞書攻撃に加えて、SSH 鍵を収集して ラテラルムーブメント(横方向の移動)も実行します。
Akamai のセキュリティ研究者は、このマルウェアの通信プロトコルと管理者パネルにアクセスし、それらを使用してマルウェアの感染範囲を分析することができました。
Panchan の被害を最も受けている業種は教育です(通信/VPS 導入後)。Akamai では、異なる教育機関のコラボレーションにより SSH 鍵がネットワーク間で共有されるようになったと推測しています。これが業種リストのトップになっている理由だと考えられます。Akamai のセキュリティ研究者は、被害に遭った各 IP に関連する悪用された E メールを突き止めました。
このマルウェアは、検知を回避し、トレースを無効化するために、ディスクを使用せずに、クリプトマイナーをメモリーマップファイルとしてドロップします。また、プロセスの監視を検出した場合は、クリプトマイナープロセスを終了します。
このマルウェアのアクティビティと被害者のジオロケーション、管理者パネルの言語、攻撃者の Discord ユーザーアクティビティに基づき、Akamai ではその攻撃者が日本人であると考えています。
Akamai MFA は、SSH 鍵の収集によって生じるリスクを緩和できます。また、このマルウェアが非常に基本的なデフォルトパスワードのリストを使用して拡散するため、強力な SSH パスワードを設定することで阻止できるはずです。Akamai は、感染していないかテストする場合に使用できる IOC、クエリー、シグネチャー、スクリプトも公開しています。
概要
Panchan のマイニング装置は機能が豊富な Golang ボットネット兼クリプトジャッカーです。そのピアツーピアプロトコルは単純なものであり、TCP を介したプレーンテキストですが、それでもボットネットを分散させるのに十分な効果があります。潜伏可能で執拗であり、回避策を監視する能力も備えています。
このマルウェアには「godmode」が組み込まれています。これは、マイニング設定を編集できる管理者パネルであるため、他のピアに拡散します。望ましくない改ざんを防止するためには、godmode にアクセスするための秘密鍵が必要です。アクセス後にこれを使用して、マイニング設定に署名します。このマルウェアには、指定されている秘密鍵の検証に使用される公開鍵が含まれています。 管理者パネルは日本語で書かれており、このことが作成者のジオロケーションを示唆しています。
このボットネットは、SSH 鍵を収集するというラテラルムーブメントに対する独自の(そしておそらく新しい)アプローチを使用しています。このマルウェアは、ほとんどのボットネットのようにランダム化された IP アドレスに対して、単にブルートフォースや辞書攻撃を行うのではなく、 id_rsa と known_hosts ファイルを読み取り、既存の認証情報を収集し、それらを使用してネットワーク上でラテラルムーブメントします。
このマルウェアは Golang で記述されており、Golang の同時実行機能を使用して、メインロジックのほとんどを同時実行 Go ルーチンとして実行します。この攻撃者は最新の Go リリースを熟知しています。マルウェアの最も古いバージョン(2022 年 3 月以降)は Go 1.17.7(2022 年 2 月リリース)を使用してコンパイルされていましたが、最新のサンプルは Go 1.18(2022 年 3 月リリース)を使用してコンパイルされています。また、Go 1.18 では内部データ構造に何らかの変更を加えていたため、いずれのオンラインツールでも IDA 逆アセンブラーでもこのマルウェアを正しく解析して関数名と関数ポインターを照合できませんでした。「 付録 A:Go 言語のリバースを簡単に解説」では、私たちの行った方法を解説しています。
このレポートで、マルウェアの機能の詳細、検知した方法、マルウェアの属性付けを試みるために実行したプロセスについて説明します。
IoC のリストについては、 こちらから GitHub リポジトリーをご覧ください。
マルウェアのアクティビティ
Akamai セキュリティ調査チームは、Akamai のグローバル・センサー・ネットワークでボットネットとマルウェアのアクティビティを予防的に監視しています。Panchan のアクティビティに初めて気づいたのは、2022 年 3 月 19 日でした。このマルウェアのピアツーピア通信と攻撃性に注目して、さらに調査を実施しました。
マルウェアをリバースエンジニアリングしながら、ボットネットのネットワークに「チューニング」するスクリプトを開発しました。これにより、チームは感染したマシン(ボットネットピア)の完全なリストを収集できました。209 台のピアを発見し、そのうち 40 台は現在アクティブです。
標的は世界中に分散していますが、集中しているのはアジアのようです。
攻撃者が日本出身者(詳細は後述)だと考えると、アジアの標的数が多いことは説明可能です。このマルウェアの背後に組織が存在するようには思えないため、身近でよく知っているものを対象にするのが攻撃者にとって簡単だったと考えることが妥当です。
被害者の業種を見ると、被害者の IP のほとんどはホスティング/VPS プラットフォームに登録されているため、そこにはあまり情報がありません。監視した被害者の中で最も一般的な業種は教育でした。これは、パスワードの保護が不十分であること、または盗んだ SSH 鍵を使用するこのマルウェア固有のラテラルムーブメントに関連していることが可能性として考えられます。異なる教育機関の研究者は、ビジネス部門の従業員よりも頻繁にコラボレーションを行うため、組織やネットワークの外部にあるマシンに対する認証情報を必要としている可能性があります。関係する大学が同じ国(スペインなど)や同じ地域(台湾、香港など)に所属していたことが判明したため、この仮説が裏付けられました。
マルウェアの機能を調べる
感染ベクトル — SSH ワーム
このマルウェアは SSH を介して自己拡散できます。以下の 2 つの方法で標的と認証の詳細を生成します。
既存の SSH 鍵
このマルウェアは、実行中のユーザーの HOME ディレクトリで SSH 設定と鍵を探します。秘密鍵を ~HOME/.ssh/id_rsa で読み取り、それを使用して ~HOME/.ssh/known_hostsに見つかった IP アドレスに対する認証を試行します。これは、他のマルウェアでは見られない認証情報の新しい収集方法です。
ブルートフォースによる認証情報取得
このマルウェアは、IP アドレスをランダム化し、定義済みのユーザーとパスワードのリストを使用して辞書攻撃を試行できます。ブルートフォーススプレッダーは、個別のプロセスで何度も発生し、OS が設定したオープンファイルの制限によってのみ制限されます。ユーザー名とパスワードはかなり単純で、「ubuntu」、「root」、「user」、「debian」、「pi」などのデフォルト文字列を組み合わせたものです。
標的に対する認証が成功すると、マルウェアは root directory / の下にランダムな名前を持つ隠しフォルダーを作成し、sftp を使用してその名前 xinetd で隠しフォルダーに自らをコピーします。
マルウェアは、コピーされたバイナリーを標的マシン上でリモートから実行し( nohupを使用)、コマンドラインを介してピアのリストを渡します。 感染が成功すると、マルウェアは Discord Webhook に対して HTTPS POST 操作を開始します。これはおそらく被害者の監視に使用されます。
ピアツーピア通信
このボットネットのピアツーピアプロトコルはかなり単純です。すべてがプレーンテキストで、 TCP ポート 1919を介して送信されます。すべてのピアをそのポートでリッスンし、 許可するルールを iptables に作成します。各メッセージの先頭には「pan-chan's mining rig hi!」が付き、末尾には「finish」が付きます。このマルウェアは、これらの間に、改行で区切られた設定コマンドを指定して送信します。発見した設定オプションは、 sharepeer と sharerigconfigの 2 つだけです。
sharepeer はかなり簡単です。この後ろに IP が続き、それがマルウェアの内部ピアリストに追加されます。
sharerigconfig の後ろには、base64 エンコード文字列が続きます。これは、実際にはマイニング設定をエンコードする JSON 構造体、およびその設定のシグネチャーであり、以下のようになります。
シグネチャーの検証には、信頼性を確保するために、内部に保存された公開鍵を使用しています。通信ロジックも単純です。ピアとの接続時に、このマルウェアはメモリーに保存された設定を解析し(実行を開始したときに取得済みの設定)、メッセージ文字列を生成して送信します。反対側からも同様のメッセージを受信して解析します。新しいピアはピアリストに追加されますが、新しいバージョンの場合は設定が上書きされます。
更新がないかをチェックするために、マルウェアは定期的に保存されたピアに接続します。
Godmode
これはおそらくこのマルウェアの中で最もユニークな機能です。管理者パネルがマルウェアのバイナリーに直接組み込まれています。管理者パネルを起動するためには、最初のコマンドライン引数としてマルウェアに文字列 godmode を渡す必要があります(その後ろにピアリストが続く)。
アクセスの確認
管理者パネルはマルウェアに組み込まれていますが、誰もアクセスできません。管理者パネルへの望ましくないアクセスを防ぐために、マルウェアはまず秘密鍵を要求し、検証された後にのみ、そのインターフェースにアクセスできます。
私たちは必要な秘密鍵を持たなかったため、鍵の検証をスキップし、指定された秘密鍵を受け入れるプログラムをパッチとして適用しました(JZ から JMP に 1 回のみ変更する必要がありました)。
管理者パネル:統計情報
秘密鍵を入力して「ログイン」すると、現在の設定に関するステータス画面が表示されます。
最初のセクションはピアの統計情報で、godmode の起動前に問い合わせたものであり、マルウェアのコマンドラインで渡したピアリストに基づいています(ピアリストは分析中に指定しなかったため、0 です)。
2 番目のセクションはクリプトマイニングの設定です。これは、ピア間で送信されるマイニング設定と同じ形式ですが、英語ではなく日本語のテキストが使用されています。言語の違いは、プログラミングが容易なことが理由だと推測されます。日本語テキストの表示は簡単ですが、解析は困難です。したがってマルウェアの作成者は、ピア間で送信される設定には英語を使用しました。
最後に、以下のオプションメニューが表示されます。
ステータス情報の画面を更新する
アクティブなピアリストを表示する
マイナーの設定を更新する
終了
ファイルレスマイナー
このマルウェアは、 xmig と nbhashの 2 つのマイナーを展開します。どちらのマイナーバイナリーも、マルウェアバイナリー自体の内部で base64 でエンコードされ、実行時に抽出され、実行されます。しかし、実行方法に目新しさがあり、 マイナーはディスクにまったく抽出されません。代わりに、マルウェアが UNIX 関数 memfd_create を使用して、マイナーのバイナリーコンテンツを使用してメモリーマップファイルを作成します。このため、トレース可能なファイルシステムパスなしで、メモリーから直接実行できます。私たちは、ボットネットのさまざまなピアから抽出した設定から、このマルウェアが NiceHash をマイニングプールとウォレットに使用していると推測しています。 NiceHash ウォレットはブロックチェーンウォレットではありません。そのため トランザクションとマイニングの詳細を表示して実際の利益を把握することはできません。
kill コマンドに対抗
このマルウェアは、Linux に送信される Linux の終了シグナル(具体的には SIGTERM — 0xF と SIGINT — 0x2)を捉え、無視します。これにより、SIGKILL が処理されないため、マルウェアの終了は困難になりますが、不可能ではありません( POSIX 標準、313 ページに準拠していれば SIGKILL を無視できないため)。
監視に対抗
このモジュールは内部的には antitaskmanagerと呼ばれていますが、その名前に反し、タスクマネージャーの操作を妨げません。その代わり、このマルウェアは継続的にプロセス top と htopを探します。これらを探し出すと、現在実行中のマイナープロセスを終了します。
潜伏
このマルウェアは自らを /bin/systemd-worker にコピーし、同じ名前を持つ systemd サービスを作成します。おそらく、疑われないようにして調査を回避することを目的に、正当な systemd サービスを模倣するためです。
属性
秘密鍵の検証中に、godmode パネルに表示される追加の画面が存在します。
著作権の主張は非常に興味深いものです。Panchan と実在する Discord サーバーの両方に言及しています。リンクをたどっていくと、実際にそのサーバーに参加できるようなので、私たちは Panchan が使用する実際の Discord ユーザー名も取得しました。このサーバーは、SSH 接続の成功後にマルウェアが報告するサーバーと同じであると推測しました。
私たちはサーバーに参加して、攻撃者に関する情報が見つかることと、このマルウェアが感染フローの一部として送信する Discord 通知を確認できることを期待しました。しかし何も見つかりませんでした。3 月に発生した別のメンバーからの挨拶を除き、メインチャットは空でした。他のチャットは、より上位の権限を持つサーバーのメンバーのみが利用できるため、チャットが表示されなかった可能性があります。私たちが発見した唯一の有用な情報は、2022 年 3 月初旬にサーバーが作成されたことでした。私たちがこのマルウェアを最初に確認した頃です。
そのユーザーから他のアクティビティを検索すると、Privex(VPS プロバイダー)の Discord サーバーでもそのユーザーがアクティブになっていることを確認できました。
Privex は、通常の VPS 以外に、ブロックチェーン・ノード・ソフトウェアがプリインストールされた VM も提供しています。これは、攻撃者が自分自身のサーバーをホストするためにそれらを使用しているか、またはクリプトジャッキングのために VM を積極的に標的にしている可能性があることを示唆します。
検知と緩和
私たちは検知を支援するために、 リポジトリー と、感染のテストに使用できる IOC、Yara、Snort シグネチャーを作成しました。また、VM 上で実行できる bash スクリプトも開発しました。スクリプトは、以下の Panchan インジケーターを検索します。
プロセス systemd-worker
プロセス xinetd(/bin または /sbin とは異なるパスから実行される場合)
TCP ポート 1919 をリッスンしているプロセス
この他に、TCP ポート 3380 と 3387 を介した発信通信は、クリプトマイニングプールへのトラフィックを示している可能性があります。
ネットワークを積極的に防御したい読者の方には、以下をお勧めします。
セキュリティを確保した複雑なパスワードを使用すること。このマルウェアは、本番環境のマシンで設定するべきではない非常に限られた数のデフォルトのユーザー名とパスワードの組み合わせを使用します。強力なパスワードを作成することで、マルウェアの影響を大幅に緩和できます。
可能な場合は多要素認証(MFA)を設定すること。MFA の使用は不正なログインの試行を防止します。Akamai MFA は、SSH 鍵の収集を防止するためにも役立ちます。
可能な場合はネットワークをセグメント化すること。マシンを SSH 経由でインターネットに接続するのは合法ですが、インターネットから接続できるユーザーと、ネットワーク内で接続できるユーザーを制御することをお勧めします。これらのアクセス制御を設定することで、侵害されたマシンがネットワークに与える影響を緩和し、全体的なアタックサーフェスも縮小できます。
VM のリソースアクティビティを監視すること。このようなボットネットの最終目標はクリプトジャッキングであるため、マシンリソースの使用率が異常に上昇する可能性があります。常に監視することで、疑わしいアクティビティを警戒することができます。Panchan のケースでは、リソース使用率の監視によってクリプトジャッキングも完全に停止できたはずです。
付録 A:Go 言語のリバースを簡単に解説
Go 実行ファイルは静的にコンパイルされます。つまり、実行ファイルの依存関係はすべてバイナリーに直接コンパイルされます。これにより、多くの機能を備えた大規模なバイナリーが作成されます(参考情報:私たちが作成したマルウェアは 30 MB、関数はおよそ 3,700 です)。
Go には、スタックトレースで支援するために、バイナリー内の関数名とポインターを照合する pclntab 構造体があります。これは、ストリップされたバイナリーにも存在するため、関数名の検索に使用できます。
Go 1.18 では、この構造体が変更されました。この構造体は、以前はバイナリー内の場所へのポインターを保持していましたが、今ではその代わりに特定の場所からのオフセットを保持するようになりました。現在の関数ポインターは、最初の Go 関数からのオフセットです(上記の図では pcln 構造体に text_start としてコメントを付けてポイントしています)。名前ポインターは、function-name 配列の先頭からのオフセットです。両方とも、関数データを保持する別の配列へのオフセットによって参照されます。