This post is also available in: English (英語)
概要
Unit 42のリサーチャーは最近、Golangベースの新たなマルウェアのサンプルを発見し、これをGoBruteforcerと名付けました。このマルウェアはWebサーバー、とくにphpMyAdmin、MySQL、FTP、Postgresのサービスを実行しているサーバーを標的にしています。このサンプルはもともとは弊社の次世代ファイアウォールが捕捉したもので、調査を進めると、ある正規Webサイトにホストされていたことがわかりました。
さらに調べてみたところ、攻撃者はx86、x64、ARMの各プロセッサ アーキテクチャ用のバイナリーをホストしていたことが判明しました。また、GoBruteforcerは被害サーバーにインターネット リレー チャット(IRC)ボットを配置し、このボットが攻撃者のサーバーと通信していたことも判明しました。
本稿は、GoBruteforcer攻撃チェーンの構成要素を静的に概観して得た情報を詳述します。このマルウェアの実行が成功するには被害システムが特別な条件を満たしている必要があります。その条件とは、特定の引数が使用されていることや、標的サービスが(弱いパスワードで)既にインストールされていることなどです。
パロアルトネットワークスのお客様は、WildFire、高度な脅威防御などのクラウド配信型セキュリティサービスを有効にした次世代ファイアウォールと、Cortex XDRにより、GoBruteforcerのようなマルウェア ファミリーやその悪意のあるコンポーネントからの保護を受けています。これに加え、高度なURLフィルタリングとDNSセキュリティはコマンド&コントロール(C2)ドメインとマルウェアをホストしているURLをブロックできます。
関連するUnit 42のトピック | Golang, Botnet, Web Server |
はじめに
Golangとも呼ばれるプログラミング言語Goはマルウェア プログラマーの間でも人気が高まっている比較的新しい言語です。この言語は、ランサムウェア、インフォスティーラー(情報窃取型マルウェア)、リモート アクセス用トロイの木馬(RAT)など、さまざまなマルウェアを開発できる汎用性があることで知られています。とくにGolangベースのボットネットは、脅威アクターの関心を集めているようです。
GoBruteforcerはGolangで書かれた新手のボットネット マルウェアで、Webサーバー、とくにphpMyAdmin、MySQL、FTP、Postgresサービスを実行しているサーバーを狙います。
GoBruteforcerは攻撃時に特定のClassless Inter-Domain Routing(CIDR)ブロックを選んでそのネットワークをスキャンします。選ばれたCIDR範囲内のIPアドレスはすべて標的にされます。この脅威アクターは、単一のIPアドレスを標的として使うのではなく特定CIDRブロックのスキャンという方法をとることで、当該ネットワーク内のさまざまなIPアドレスをもつ幅広い標的ホストにアクセスしていました。
ホストが見つかった場合、GoBruteforcerはブルートフォース(総当たり)によるサーバーへのアクセスを試み、アクセス成功後は攻撃者のURLを含むIRCボットを展開します。
その後、PHP Webシェル経由で、被害システムに対するクエリー送信も試みます。私たちはこのWebシェルが被害サーバーに事前に展開されていたことを突き止めました。図1はこの攻撃の流れを表しています。
![画像1はポート スキャンから始まるGoBruteforcerの攻撃チェーンを示したフローチャートです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/Gobruteforcer-F1-1-ja.png)
図2にハイライト表示したcache_initファイルは、標的サーバーの/.x/ディレクトリにホストされていたGoBruteforcerマルウェアです。GoBruteforcerとPHP Webシェル キャンペーンの初期攻撃ベクトルが何だったかは今のところ不明です。
私たちは被害組織に対し、同組織のサイト上に悪意のあるGoBruteforcerバイナリーがホストされていたことを通知済みです。
![画像2はGoBruteforcerバイナリーをホストしているWebサイトのディレクトリー インデックスのスクリーンショットを3つ並べたものです。親ディレクトリ以下のそれぞれのディレクトリー インデックスにあるcache_initファイルがハイライト表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-2.png)
今回私たちが確認したハッシュをもつGoBruteforcerマルウェアは、主にUnix系(*nix)プラットフォームを標的としており、x86、x64、ARMアーキテクチャ向けのバージョンが存在します。サーバーのホスティングには*nix系オペレーティング システムが使われることが多いことからこれらが選ばれているものと思われます。
GoBruteforcerの開発は継続していると考えられることから、初期感染ベクトルやペイロードのようなものは近い将来変わる可能性があります。
スキャンとシステム アクセス
GoBruteforcerマルウェアのサンプルはUPXパッカーでパックされています。サンプル(SHA256: ebe11121aafdac5d8f2eecba710ba85efa31617a5eb825ba2e89e23379b26b84)をアンパックしてみると、GoBruteforcerには攻撃対象CIDR内のホストをスキャンするためのマルチスキャン モジュール(図3)が備わっていることがわかりました。
![画像3はGoBruteforcerのマルチスキャン モジュールのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-3.png)
マルウェアは標的IPアドレス上でphpMyAdmin、MySQL、FTP、Postgresサービスのスキャンを開始します。攻撃者は前述すべてのサービスに対し、個別にスキャン モジュールを定義しています(図4)。
![画像4はGoBruteforcerのモジュールがMySQLやPostgresなど異なるサービスをスキャンしているようすを示したスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-4.png)
GoBruteforcerは、これらのモジュール内で、対象のサービス用ポートがオープンになっているかどうかをまずチェックします。このためにポート スキャン モジュール(図5)が全スキャンモジュール内で呼び出されます。
![画像5はGoBruteforcerのポート スキャン モジュールの詳細を示したスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-5.png)
phpMyAdminサービスの場合
phpMyAdminサービスをスキャンする場合、標的ポート(80番ポート)が開いていれば、総当りで被害サーバーへのログインとアクセス取得を試みます。そのさいGoBruteforcerはバイナリー内部にハードコードされているクレデンシャル セットを利用します(図6)。
![画像6はマルウェアのバイナリーのスクリーンショットで、ハードコードされた認証情報を表す多数の行が示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-6.png)
IRCボットの展開
phpMyAdminサービス経由で被害サーバーへのログインに成功すると、GoBruteforcerは被害サーバーにIRCボットを展開・実行します。ファイルfb5とab5はそれぞれx86_64とARMアーキテクチャ向けにコンパイルされたIRCボットです(図7、図8)。
![画像7はGoBruteforcerがx86系プラットフォーム用IRCボットを展開するようすを示したスクリーンショットです(赤でハイライト)。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-7.png)
![画像8はGoBruteforcerがARM系プラットフォーム用IRCボットを展開するようすを示したスクリーンショットです(赤でハイライト)。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-8.png)
その後GoBruteforcerはIRCボット経由でコマンド&コントロールチャネル(C2)と被害サーバーとの間の通信を開始します(図9)。
![画像9はIRCボットを経由する被害サーバーとC2との通信を示すWiresharkのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-9.png)
さらにこのIRCボットはcronに自分自身を登録して繰り返し実行させます。
![画像10はIRCボットがcronに登録されるようすを黄色のハイライトで示した数行のコードのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-10.png)
MySQLサービスとPostgresサービスの場合
MySQLサービス、Postgresサービスをスキャンするさい、GoBruteforcerはまずポート3306と5432が開いているかどうかをチェックします。開いていることを確認すると、特定のユーザー名とパスワードでホストのデータベースにping送信を試みます。図11と図12はこのアクティビティを示しています。詳しい情報はGolang Issuesフォーラム以下の投稿を参照することをお勧めします。
その後、GoBruteforcerはPostResultモジュールを呼び出します。このモジュールについては、後の「PostResultモジュールとWebシェル接続」のセクションで詳しく解説します。
![画像11はGoBruteforcerのMySqlへのping送信をハイライトしたスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-11.png)
![画像12はGoBruteforcerのPostgresへのping送信をハイライトしたスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-12.png)
FTPサービスの場合
FTPサービスをスキャンするさい、GoBruteforcerはポート21が開いているかどうかをチェックします。開いていることを確認すると、Golang用FTPクライアント パッケージのgoftpライブラリを使ってサーバーへの認証を試みます(図13)。
![画像13はGoBruteforcerがFTPへのログイン試行でサーバーへの認証を試みているようすをハイライトしたスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-13.png)
被害サーバーでの認証に成功すると、GoBruteforcerはPostResultモジュールを呼び出します。
PostResultモジュールとWebシェル接続
GoBruteforcerは、各サービスのスキャン モジュールを実行した後、PostResultというモジュールを呼び出します。このモジュール内にはハードコードされたリンク(クエリ)が確認されています(図14)。
![画像14はGoBruteforcerバイナリーのハードコードされたリンクをハイライトしたスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-14.png)
被害IPアドレス内のディレクトリをさらに調査したところ、SHA256がde7994277a81cf48f575f7245ec782c82452bb928a55c7fae11c2702cc308b8bのxという名前のWebシェル(http[:]//被害者のIPアドレス/x)が見つかりました。このWebシェルはhttp[:]//5.253.[.]84[.]15(図15)と関連するPHPファイル、pst.php (SHA256: 602129f00bb002f07db07affa78d46f67bd0b2c8fb0867ea2da5fc3e73dd2665)と似ているように思われました。
このPHP Webシェルはリバース シェルとバインド シェルの機能を備えていました(図15)。
![画像15は「Bind Shell (バインド シェル)」と「Reverse Shell (リバース シェル)」をハイライトしたPHP Webシェルのスクリーンショットです。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-15.png)
これらの機能のほか、このWebシェルにはパケットを加工するパケット クラフターの機能(図16)も備わっています。このパケット クラフターにはホスト、接続元ポート、宛先ポート、接続およびストリームのタイムアウトなどの入力オプションを設定できます。パケット クラフターを使うことで、攻撃者は標的ネットワークをより詳しく知ることができます。
![画像16は、PHP Webシェルのスクリーンショットで、「Simple Packet Crafter」という文字がハイライトされています。左側にはオプションが表示されています。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-16.png)
開発が続くGoBruteforcer
GoBruteforcerキャンペーン関連のサンプルを探していると別のサンプル(SHA256: acc705210814ff5156957c028a8d6544deaca0555156504087fdc61f015d6834)も見つかりました。このサンプルはGoBruteforcerファミリーの古いバージョンだった可能性があります。これはWebサーバーを感染させるのにphpMyAdminサービスだけを標的としていました。このサンプルは数ヶ月前にVirusTotalにアップロードされたもので、検出数は0でした(図17)。
![画像17はVirusTotalのスクリーンショットで、古いバージョンのGoBruteforcerを表示しています。VirusTotalでの検出数は0です。](https://unit42.paloaltonetworks.jp/wp-content/uploads/2023/03/word-image-127183-17.png)
結論
Webサーバーは今も昔も脅威アクターにはとってはうまみの多い標的です。Webサーバーは組織には不可欠なので、脆弱なパスワードは深刻な脅威につながる可能性があります。GoBruteforcerのようなマルウェアは弱いパスワードやデフォルトのパスワードを利用します。
GoBruteforcerボットはマルチスキャン機能を備えているのでネットワーク侵入口として利用しうる対象はそのぶん広くなっています。開発は活発に続けられているようで、近い将来この攻撃者はWebサーバーへの攻撃手口を変えてくる可能性もあります。
パロアルトネットワークスのお客様は、WildFire、高度な脅威防御などのクラウド配信型セキュリティサービスを有効にした次世代ファイアウォールと、Cortex XDRにより、GoBruteforcerのようなマルウェア ファミリーやその悪意のあるコンポーネントからの保護を受けています。これに加え、高度なURLフィルタリングとDNSセキュリティはコマンド&コントロール(C2)ドメインとマルウェアをホストしているURLをブロックできます。
IoC
ハッシュ値
de7994277a81cf48f575f7245ec782c82452bb928a55c7fae11c2702cc308b8b | Webシェル |
602129f00bb002f07db07affa78d46f67bd0b2c8fb0867ea2da5fc3e73dd2665 | Webシェル |
acc705210814ff5156957c028a8d6544deaca0555156504087fdc61f015d6834 | GoBruteforcerの旧バージョン |
426b573363277554c7c8a04da524ddbf57c5ff570ea23017bdc25d0c7fd80218 | IRCボット(x86) |
726ccd223a1cfb60fc6c3b48ea3dbf057da918efac5acf620cd026ee38fb0044 | IRCボット(ARM) |
526767fbb26c911601371745d603885b75deabcc18261ed2d5a509d58f95d28e | GoBruteforcer (x86_64) |
dd3555025957cd51cd048d920027a0ff2d5501bc85792529217d54086e9351c2 | GoBruteforcer (x86_64) |
df7dc0fe7e90a2414ac188c55d06ad3882cfc7394869c9ffa549fb1ddb304919 | GoBruteforcer (x86_64) |
ebe11121aafdac5d8f2eecba710ba85efa31617a5eb825ba2e89e23379b26b84 | GoBruteforcer (x86_64) |
5548935e7c6cf3b38240a0579cac36906e9883a1ec5e85335609e9e2062588c5 | GoBruteforcer ARM(64-bit) |
5627b138bc857081d2251edd7eb3b68cbd58dfff2f51b7cd34c893fffff2cfab | GoBruteforcer ARM(64-bit) |
5c1d3fb43e9e35b835e62e05a7b97ed66ab132eab35bfc18ce543e8f58ccf5e2 | GoBruteforcer ARM(32-bit) |
7c27ac0daba19de227fcc467abfcdefa99426c768a3601b1b181e9741717665b | GoBruteforcer (x86) |
URLおよびIP
- 5.253[.]84[.]159/x
- fi[.]warmachine[.]su
2023-03-13 09:45 JST 英語版更新日 2023-03-10 09:25 PST の内容を反映
2023-03-15 09:05 JST 英語版更新日 2023-03-14 06:20 PST の内容を反映