Golang系ボットネットGoBruteforcerによるWebサーバーへの攻撃

Malware conceptual image, covering variants such as GoBruter

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

目次

はじめに
スキャンとシステム アクセス
phpMyAdminサービスの場合
IRCボットの展開
MySQLサービスとPostgresサービスの場合
FTPサービスの場合
PostResultモジュールとWebシェル接続
開発が続くGoBruteforcer
結論
IoC

はじめに

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の攻撃チェーンを示したフローチャートです。
図1. GoBruteforcerの攻撃チェーン

図2にハイライト表示したcache_initファイルは、標的サーバーの/.x/ディレクトリにホストされていたGoBruteforcerマルウェアです。GoBruteforcerとPHP Webシェル キャンペーンの初期攻撃ベクトルが何だったかは今のところ不明です。

私たちは被害組織に対し、同組織のサイト上に悪意のあるGoBruteforcerバイナリーがホストされていたことを通知済みです。

画像2はGoBruteforcerバイナリーをホストしているWebサイトのディレクトリー インデックスのスクリーンショットを3つ並べたものです。親ディレクトリ以下のそれぞれのディレクトリー インデックスにあるcache_initファイルがハイライト表示されています。
図2. GoBruteforcerが被害サーバー上にホストされているところ

今回私たちが確認したハッシュをもつGoBruteforcerマルウェアは、主にUnix系(*nix)プラットフォームを標的としており、x86、x64、ARMアーキテクチャ向けのバージョンが存在します。サーバーのホスティングには*nix系オペレーティング システムが使われることが多いことからこれらが選ばれているものと思われます。

GoBruteforcerの開発は継続していると考えられることから、初期感染ベクトルやペイロードのようなものは近い将来変わる可能性があります。

スキャンとシステム アクセス

GoBruteforcerマルウェアのサンプルはUPXパッカーでパックされています。サンプル(SHA256: ebe11121aafdac5d8f2eecba710ba85efa31617a5eb825ba2e89e23379b26b84)をアンパックしてみると、GoBruteforcerには攻撃対象CIDR内のホストをスキャンするためのマルチスキャン モジュール(図3)が備わっていることがわかりました。

画像3はGoBruteforcerのマルチスキャン モジュールのスクリーンショットです。
図3. GoBruteforcerのマルチスキャン モジュール

マルウェアは標的IPアドレス上でphpMyAdmin、MySQL、FTP、Postgresサービスのスキャンを開始します。攻撃者は前述すべてのサービスに対し、個別にスキャン モジュールを定義しています(図4)。

画像4はGoBruteforcerのモジュールがMySQLやPostgresなど異なるサービスをスキャンしているようすを示したスクリーンショットです。
図4. GoBruteforcerの内部モジュール。さまざまなサービスをスキャンしている

GoBruteforcerは、これらのモジュール内で、対象のサービス用ポートがオープンになっているかどうかをまずチェックします。このためにポート スキャン モジュール(図5)が全スキャンモジュール内で呼び出されます。

画像5はGoBruteforcerのポート スキャン モジュールの詳細を示したスクリーンショットです。
図5. ポート スキャン機能がすべてのスキャン モジュールに搭載されている

phpMyAdminサービスの場合

phpMyAdminサービスをスキャンする場合、標的ポート(80番ポート)が開いていれば、総当りで被害サーバーへのログインとアクセス取得を試みます。そのさいGoBruteforcerはバイナリー内部にハードコードされているクレデンシャル セットを利用します(図6)。

画像6はマルウェアのバイナリーのスクリーンショットで、ハードコードされた認証情報を表す多数の行が示されています。
図6. 総当り用のハードコードされたクレデンシャル

IRCボットの展開

phpMyAdminサービス経由で被害サーバーへのログインに成功すると、GoBruteforcerは被害サーバーにIRCボットを展開・実行します。ファイルfb5ab5はそれぞれx86_64とARMアーキテクチャ向けにコンパイルされたIRCボットです(図7、図8)。

画像7はGoBruteforcerがx86系プラットフォーム用IRCボットを展開するようすを示したスクリーンショットです(赤でハイライト)。
図7 GoBruteforcerがx86系プラットフォーム用IRCボットを展開しているところ
画像8はGoBruteforcerがARM系プラットフォーム用IRCボットを展開するようすを示したスクリーンショットです(赤でハイライト)。
図8. GoBruteforcerがARM系プラットフォーム用IRCボットを展開しているところ

その後GoBruteforcerはIRCボット経由でコマンド&コントロールチャネル(C2)と被害サーバーとの間の通信を開始します(図9)。

画像9はIRCボットを経由する被害サーバーとC2との通信を示すWiresharkのスクリーンショットです。
図9. 被害サーバーとC2とはIRCボットで通信

さらにこのIRCボットはcronに自分自身を登録して繰り返し実行させます。

画像10はIRCボットがcronに登録されるようすを黄色のハイライトで示した数行のコードのスクリーンショットです。
図10. IRCボットが自分自身をcronに登録

MySQLサービスとPostgresサービスの場合

MySQLサービス、Postgresサービスをスキャンするさい、GoBruteforcerはまずポート3306と5432が開いているかどうかをチェックします。開いていることを確認すると、特定のユーザー名とパスワードでホストのデータベースにping送信を試みます。図11と図12はこのアクティビティを示しています。詳しい情報はGolang Issuesフォーラム以下の投稿を参照することをお勧めします。

その後、GoBruteforcerはPostResultモジュールを呼び出します。このモジュールについては、後の「PostResultモジュールとWebシェル接続」のセクションで詳しく解説します。

画像11はGoBruteforcerのMySqlへのping送信をハイライトしたスクリーンショットです。
図11 GoBruteforcerによるMySqlへのping送信
画像12はGoBruteforcerのPostgresへのping送信をハイライトしたスクリーンショットです。
図12 GoBruteforcerによるPostgresへのping送信

FTPサービスの場合

FTPサービスをスキャンするさい、GoBruteforcerはポート21が開いているかどうかをチェックします。開いていることを確認すると、Golang用FTPクライアント パッケージのgoftpライブラリを使ってサーバーへの認証を試みます(図13)。

画像13はGoBruteforcerがFTPへのログイン試行でサーバーへの認証を試みているようすをハイライトしたスクリーンショットです。
図13. FTPへのログイン試行

被害サーバーでの認証に成功すると、GoBruteforcerはPostResultモジュールを呼び出します。

PostResultモジュールとWebシェル接続

GoBruteforcerは、各サービスのスキャン モジュールを実行した後、PostResultというモジュールを呼び出します。このモジュール内にはハードコードされたリンク(クエリ)が確認されています(図14)。

画像14はGoBruteforcerバイナリーのハードコードされたリンクをハイライトしたスクリーンショットです。
図14 GoBruteforcerバイナリー内で見つかったハードコードされたリンク

被害IPアドレス内のディレクトリをさらに調査したところ、SHA256がde7994277a81cf48f575f7245ec782c82452bb928a55c7fae11c2702cc308b8bxという名前の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シェルのスクリーンショットです。
図15. Webシェル内のバインド シェル機能とリバース シェル機能

これらの機能のほか、このWebシェルにはパケットを加工するパケット クラフターの機能(図16)も備わっています。このパケット クラフターにはホスト、接続元ポート、宛先ポート、接続およびストリームのタイムアウトなどの入力オプションを設定できます。パケット クラフターを使うことで、攻撃者は標的ネットワークをより詳しく知ることができます。

画像16は、PHP Webシェルのスクリーンショットで、「Simple Packet Crafter」という文字がハイライトされています。左側にはオプションが表示されています。
図16. Webシェル内のシンプルなパケット クラフター機能


開発が続くGoBruteforcer

GoBruteforcerキャンペーン関連のサンプルを探していると別のサンプル(SHA256: acc705210814ff5156957c028a8d6544deaca0555156504087fdc61f015d6834)も見つかりました。このサンプルはGoBruteforcerファミリーの古いバージョンだった可能性があります。これはWebサーバーを感染させるのにphpMyAdminサービスだけを標的としていました。このサンプルは数ヶ月前にVirusTotalにアップロードされたもので、検出数は0でした(図17)。

画像17はVirusTotalのスクリーンショットで、古いバージョンのGoBruteforcerを表示しています。VirusTotalでの検出数は0です。
図17 VirusTotalの検出: GoBruteforcerの古いバージョン

結論

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 の内容を反映