クラウドコンピューティングが必要ですか? 今すぐ始める

「Hi」が見えたときには手遅れ - Mirai ベースの NoaBot

Stiv Kupchik

執筆者

Stiv Kupchik

January 10, 2024

Stiv Kupchik

執筆者

Stiv Kupchik

Stiv Kupchik は、Akamai の Security Researcher Team Lead です。彼のリサーチプロジェクトは、OS 内部、脆弱性調査、マルウェア分析を軸に進んでいます。Black Hat、Hexacon、44CON などの会議で研究発表を行っています。サイバーセキュリティの専門家であるだけでなく、物理学でも理学士を有しています。

NoaBot は、Mirai ベースのボットネットの 1 つです。Mirai ボットネットは、Linux ベースのモノのインターネット(IoT)デバイスを標的とする、ワーム可能なボットネットです。

エグゼクティブサマリー

  • Akamai のセキュリティ研究者は、2023 年の初めから活動している新しい暗号マイニングキャンペーンを発見しました。

  • このマルウェアは、攻撃者が変更を加えたカスタム Mirai ボットネットを使用して SSH プロトコルで拡散されます。

  • この新しいボットネット NoaBot の機能には、追加のバイナリーをダウンロードして実行したり、新たな被害者に拡散したりするための、ワーム化可能なセルフスプレッダーと SSH キーバックドアが含まれています。

  • 攻撃の一環として、XMRig マイナーの修正バージョンがドロップされます。マイナーは設定を難読化し、さらにはカスタム・マイニング・プールを使用して、マイナーが使用するウォレットアドレスを公開しないようにします。

  • Akamai は、このボットネットと P2PInfect ワームの関連を示す証拠を確認しました。P2PInfect ワームは 2023 年 7 月に Unit 42 によって発見されました

  • このマルウェアの難読化とカスタムコードは、運用セキュリティが高度であることを表します。これは通常、成熟した攻撃者であることを意味しますが、マルウェアのバイナリーとそれに含まれる一部の文字列の命名はかなり幼稚です。これにより、アトリビューションが困難になります。

  • 2023 年には 800 を超える攻撃 IP が確認されており、それらは世界中に均一に分散していました。

  • Akamai は、感染していないかテストする場合に使用できる痕跡情報(IOC)、クエリー、シグネチャー、スクリプトを 公開 しています。

はじめに

NoaBot は新たな Miraiベースのボットネットです。Mirai ボットネット は、Linux ベースのモノのインターネット(IoT)デバイスを標的とする、ワーム化可能なボットネットであり、分散型サービス妨害 (DDoS)攻撃に使用されます。最初の Mirai ボットネットは 2016 年に 特定 されましたが、ソースコードが 公開されており、現在は多くのバリエーションが見られます。

Akamai が初めて NoaBot キャンペーンを検知したのは、2023 年初めのことです。それ以降、難読化が追加されたり、コマンド & コントロール(C2)やマイニング・プール・ドメインが変更されたりしたことにより、このマルウェアには 2 度の進化が見られました(図 1)。また、 P2PInfect ワームのサンプルをドロップするインシデントもいくつか見られており、これは 2 つのキャンペーンが関連していることを示唆しています。

マルウェアのアクティビティの経時的な推移を表すグラフ。2023 年 1 月の少し前から 2023 年 11 月の少し後までのグラフです。 図 1:NoaBot マルウェアのアクティビティの経時的推移

ボットネット

NoaBot ボットネットには元の Mirai ボットネットのほとんどの機能(スキャナーモジュールや攻撃者モジュール、プロセス名を隠すなど)がありますが、Mirai の 元のソースコードとの違いも多数見られます。まず、このマルウェアのスプレッダーは、Mirai のように Telnet をベースとするのではなく、SSH をベースにしています。

SSH スキャナーはカスタムメイドのようであり、非常に特殊です。接続が確立されると、このボットネットは単に文字列「hi」を送信し、接続を終了します(図 2)。接続を開いたままにする必要がなく、存在を確認する必要があるだけであるため、スキャナーのコンテキストにおいては接続を即座に終了することは理に適っています。しかし、なぜ「hi」を送信する必要があるのでしょうか。これは謎です。

SSH hi パケットの Wireshark パケット画面のスクリーンショット。 図 2:「hi」文字列を含む SSH パケット。有効な SSH パケットではないため、Wireshark は不正としてマークします。

このマルウェアのもう 1 つの奇抜な点は、歌詞が埋め込まれていることです。このボットネットの初期のサンプルには、Rat Boy と IBDY の楽曲「Who's Ready for Tomorrow」の歌詞が使用されていました(図 3)。私たちの知る限りでは、このような歌詞には目的がなく、やがてサンプルに歌詞は見られなくなります。

ボットネットサンプルに埋め込まれた歌詞の IDA からの逆コンパイル。 図 3:目的はないと思われる歌詞の埋め込み。

Mirai からのその他の変更点として、このボットネットは SSH スキャナー用の異なる認証情報辞書を使用することや、侵害後の機能(新しい SSH 認証キーをバックドアとしてインストールし、追加のバイナリーをダウンロードして実行したり新たな被害者に拡散したりするなど)を多数備えていることが挙げられます(図 4)。

ボットネットがサポートするさまざまな感染後コマンドのスイッチケースの逆コンパイル。 図 4:ボットネットのコマンド・スイッチ・ケース

また、Mirai は通常 GCC でコンパイルされますが、少なくともソースコードと 作成者のガイドによると、NoaBot は uClibc でコンパイルされます。これにより、ウイルス対策エンジンがこのマルウェアを検知する方法が変化するようです。他の Mirai のバリアントは通常、Mirai シグネチャーで検知されますが、NoaBot のウイルス対策シグネチャーは SSH スキャナーまたは汎用的なトロイの木馬のシグネチャーです(図 5)。

また、このマルウェアは静的にコンパイルされてあらゆるシンボルが取り除かれています。この非標準的なコンパイルにより、このマルウェアに対するリバースエンジニアリングが極めて困難になっています。

このボットネットの比較的新しいサンプルでは、文字列がプレーンテキストとして保存されるのではなく難読化されていました。これにより、バイナリーから詳細を抽出したり、分解した一部を調べたりすることが困難になりましたが、エンコーディング自体は高度ではなく、リバースエンジニアリングを行いやすくなりました。 

また、しばらくするとコマンドライン引数が追加されたことがわかりました。最も興味深いのは「noa」フラグです。このフラグにより、このボットネットのインストールは、再起動後に実行される crontab エントリー形式の永続的な方法になりました。

ちなみに、ボットネットサンプルのウイルス対策検知の一部に「Noa-」というプレフィックスが付いていたことから、このフラグは出回っており、頻繁に使用されていると思われます。

もう 1 つの進化は、図 4 に示すとおり、侵害後の運用に見られます。これは Akamai が調査した初期のサンプルでは見られませんでした。

左側:VirusTotal からの NoaBot 検知。ほとんどの検知は、「Trojan.Linux.Generic」または「SSHScan」のようなものです。右側:VirusTotal からの Mirai バリアントサンプル検知。ほとんどの検知は明確に Mirai であることを示しています。 図 5:NoaBot 検知(左)と別の Mirai バリアント(右)

マイナー — ウォレットアドレスを見つけられなかった理由

マイナー自体はそれほど複雑ではありません。これは標準的な XMRig マイナーですが、セルフコンパイルされています。また、攻撃者は、マイニング設定の抽出のためのコードをコマンドラインによって供給したり、バイナリー内にプレーンテキストとして保存したりするのではなく、マイナーの実行の前に追加しました(図 6)。

マイナーの主な関数の逆コンパイル。一連の関数呼び出しから始まり、さまざまな信号が続きます。 図 6:マイナーの主な関数

XMRig 設定を構築するための関数呼び出しの前に、他の関数呼び出しがいくつかあります。失敗した場合、マイナーは終了しますが、そうでなければ標準的な XMRig マイナーロジックに進みます。(上記の逆コンパイルと実際の XMRig ソースコードを比較できます。)研究者はなぜ XMRig 設定を気にするのでしょうか?通常は、接続先のマイニングプールの詳細と、マイニング費用の支払いを受け取るウォレットアドレスが含まれています。ウォレットアドレスを取得して支払いを追跡することで(通常はパブリックプールで追跡されます)、クリプトマイニングギグの収益性を推定できます。

しかし今回は、攻撃者が私たちの一歩先を行っていました。それでは、設定の構築について詳しく見てみましょう。XMRig オープン・ソース・コードでは、マイナーはコマンドラインまたは環境変数のいずれかの方法で設定を受け入れることができます。私たちのケースでは、攻撃者は XMRig のオリジナルコードを変更せずに、メイン関数の前にパーツを追加しました。コマンドライン引数の必要性を回避するために(痕跡情報(IOC)やアラートデフェンダーになる可能性があります)、攻撃者は XMRig コードに制御を渡す前に独自のコマンドラインをより「意味のある」引数に置き換えました(技術用語で言うと、argv を置き換えました)。このボットネットは、ログを印刷するように指示する(たかだか)1 つの引数によってマイナーを実行します。

ただし、コマンドラインを置き換える前に、マイナーはその設定を構築する必要があります。まず、プレーンテキストとして保存されている基本的な引数、つまり、3 つのランダムな文字、スレッドフラグ、およびプールの IP アドレスのプレースホルダーを持つマイナーを識別する fig-id フラグをコピーします(図 7)。

しかし、xmm レジスターを介して設定がロードされるため、IDA は実際には最初の 2 つのロードされた引数(バイナリー名とプール IP プレースホルダー)を見逃してしまいます。

マイナーのための新しい argv の構築の逆コンパイル。設定文字列のオフセットをロードし、新しい文字列の配列を割り当てて、ループ内でコピーします。 図 7:基本的なマイナー設定のコピー

次に、マイナーはプールのドメイン名を復号します。ドメイン名は、XOR 演算によって復号されたいくつかのデータブロックに保存され、暗号化されます。XMRig はドメイン名で動作する可能性がありますが、攻撃者は手順を追加することにし、独自の DNS 解決関数を実装しました。Google の DNS サーバー(8.8.8.8)と直接通信し、応答を解析してドメイン名を IP アドレスに変換します。

設定の最後の部分も同様に暗号化されます。これは、マイナーがプールに接続するためのパスキーです。結果として、マイナーの設定全体は次のようになります。

<miner_binary_name> -o <pool_ip> --rig-id <random_id> --threads <cpus> –pass espana*tea

何かが不足していることに気付きましたか?そうです、ウォレットアドレスがありません。

私たちは、攻撃者はパブリックプールではなく独自のプライベートプールを実行することを選択したため、ウォレット(プールやルール)を指定する必要がなくなったのだと考えています。しかしサンプルでは、Google の DNS でマイナーのドメインが解決されていないことがわかりました。ドメインが解決できなくなったため、私たちの見解を立証することも、プールからより多くのデータを収集することもできません。最近はマイナーをドロップするインシデントが見られないため、攻撃者はより良い環境を求めてどこかに行ってしまった可能性もあります。

Mirai は古すぎて、Rust で作成されている

最近のインシデントには P2PInfect のサンプルもありました。P2PInfect は、Rust で記述されたピアツーピア自己複製ワームです。P2PInfect は 2023 年 7 月に初めて見られましたが、NoaBot の活動は 2023 年 1 月以降に見られています。つまり、NoaBot が P2PInfect に少しだけ先行しています。なぜ Mirai から他のものに切り替えるのでしょうか?カスタム仕様のものもあります。明確な答えはありませんが、いくつか思い当たることがあります。

まず、カスタムコードは変更されているため、再利用されたコードよりもリバースエンジニアリングが困難です。次に、攻撃者はテクノロジーに精通していると思われ、好奇心や退屈(あるいはその両方)を理由にマルウェア開発に挑戦している可能性があります。最後に、P2PInfect が Redis サーバーをターゲットにしていることを考えると、単に異なる目的のための異なるツールである可能性があります。

単なるコラボレーションではなく同じ攻撃者であると思われるのはなぜでしょうか?100% 確実ではありませんが、私たちはほぼ確信しています。すべては、このマルウェアの技術的な専門性と、10 代の若者レベルの幼稚なジョークが含まれていること(マイナーの名前に下品な表現が挿入されていること、ゲームのポップ音楽の歌詞がマルウェアバイナリーに埋め込まれていること、オープンポートのスキャン中に「hi」と送信することなど)に行き着きます。 

P2PInfect はその伝統を継承しています。洗練されたツールのように見えますが、Unix ソケットを使用しており、「NunzombiE」という名前を付けています(図 8)。また、NunzombiE は難読化されており、実行時にデコードされますが、このワームには「fast_vuln_file」と「slow_vuln_file」の文字列も埋め込まれています。これは実行可能ファイルに含まれる完全に合法な文字列であり、ここにはレッドフラグはありません。

13904 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3 13904 bind(3, {sa_family=AF_UNIX, sun_path=@"NunzombiE"}, 12) = 0 図 8:NunzombiE という Unix ソケットを作成する P2PInfect ワームの strace

被害

2023 年に私たちのハニーポットを攻撃したソース IP は 849 種類あります。ジオロケーションを見ると、アクティビティは世界中にかなり均一に分散していることがわかります。このマルウェアはワーム化可能であり、新たな被害者が攻撃者になることを考えれば、これは当然のことです。しかし、顕著なホットスポットが 1 つだけあります。それは中国です。2023 年に見られたすべての攻撃の約 10% が中国で発生しており、図 9 ではこのホットスポットが最も明るい色の点で示されています。

NoaBot の攻撃元の地理的なヒートマップ。欧州、米国、南米、アジアでアクティビティレベルは均一です。アクティビティレベルの高い唯一の地域は中国です。 図 9:NoaBot の攻撃元のグローバルなジオロケーションヒートマップ

緩和、検知、エミュレーション

このマルウェアのラテラルムーブメント(横方向の移動)は、単純な古い SSH 認証情報辞書攻撃によって行われます。

ネットワークへの任意のインターネット SSH アクセスを制限すると、感染のリスクが大幅に減少します。また、このマルウェアは推測可能なパスワードの基本的なリストを使用するため、強力な(デフォルトまたはランダム生成ではない)パスワードを使用するとネットワークのセキュリティが向上します。Akamai はこのマルウェアが使用する認証情報セットを GitHub リポジトリで共有しています。

このマルウェアの検知については、バイナリー名を探すこと以外に言えることはそれほどありません。これは /lib の下にあるランダム生成フォルダーから実行されるため、プロセス名はおそらく実行方法になります。また、cron ジョブがインストールされている場合は、それを検知できるはずです。Akamai のリポジトリには IOC CSV ファイルのほか、このマインの YARA シグネチャーもいくつかあります。

このボットネットの SSH スプレッダーに対して環境をテストする場合のために、Infection Monkey の 設定ファイル を作成しました。 Infection Monkeyとは、Akamai のオープンソースのアドバーサリー・エミュレーション・プラットフォームです(付録で Infection Monkey の使用方法を簡単に説明しています)。このマルウェアは非常に大きな認証情報セットを使用するため、すべてをテストするのは現実的ではないことに注意してください(マルウェアは計算や時間のコストを気にしませんが、私たちは気にします)。その代わりに、私たちはより一般的な認証情報のみを設定に含めることを選択しました。より多くの認証情報(または異なる認証情報)を含めたい場合は、この設定に基づいて自由に作成し、独自の修正を加えてください。

また、この Infection Monkey の設定では、YARA シグネチャーが Monkey エージェントペイロードでトリガーされるようにする見せかけの文字列が追加されるため、それを使用して検知をテストすることもできます。

Infection Monkey による環境のテストが完了すると、侵害することができたすべてのマシンに関するレポートが作成されます。さらに高度な攻撃シミュレーションを行い、より強力な認証情報をテストしたい場合は、クリプトジャッキングプラグインを使用することもできます。 

まとめ

表面上は、NoaBot はそれほど洗練されたキャンペーンではありません。単なる Mirai のバリエーションであり、XMRig クリプトマイナーであり、現時点では大したものではありません。しかし、このマルウェアに難読化が追加されたことと、オリジナルのソースコードへの追加があったことにより、攻撃者の能力が大きく異なるものになります。攻撃者はこれほどの技術的なスキルを備えているにも関わらず、このマルウェアのさまざまなサンプルやバイナリーに幼稚な命名規則(「NunzombiE」という Unix ソケットなど)が使用され続けています。この特徴により、私たちは NoaBot と P2PInfect を関連付けました。この検知のヒントは、今後のマルウェアキャンペーンにも当てはまると思われます。

付録:Infection Monkey を使用して環境をテスト

  1. 使用しているオペレーティングシステムに応じて、Infection Monkey をインストールします。

    1. Windows

    2. Linux

    3. Docker

  2. 設定手順に従います。

  3. Infection Monkey UI のプラグインページから SSH エクスプロイタープラグインをダウンロード します。

Infection Monkey のプラグイン画面。利用可能なプラグイン、インストール済みのプラグイン、新しいプラグインのアップロードの 3 つの切り替えタブがあります。このページは利用可能なプラグインタブです。 図 10:Infection Monkey のプラグイン画面。検索バーを使用して SSH エクスプロイタープラグインを検索し、ダウンロードします。
Infection Monkey Island の設定画面。エクスプロイターのセクションと有効なエクスプロイターのリストがあり、空になっています。 図 11:Infection Monkey の設定画面。[Import config]ボタンを押すと、Akamai が提供する設定をインポートできます。
  1. 設定ページの[Network Analysis]タブで、攻撃試行のターゲットを設定します。

  2. Monkey を実行 します。

  3. マップページ に移動し、攻撃を観察します。 

  4. [Kill All Monkeys]ボタンを押すだけで、攻撃を終了し、いつでもシミュレーションを停止できます。



Stiv Kupchik

執筆者

Stiv Kupchik

January 10, 2024

Stiv Kupchik

執筆者

Stiv Kupchik

Stiv Kupchik は、Akamai の Security Researcher Team Lead です。彼のリサーチプロジェクトは、OS 内部、脆弱性調査、マルウェア分析を軸に進んでいます。Black Hat、Hexacon、44CON などの会議で研究発表を行っています。サイバーセキュリティの専門家であるだけでなく、物理学でも理学士を有しています。