検知を逃れるためにマルウェアをダウングレードしている可能性は?

検知を逃れるためにマルウェアをダウングレードしている可能性は?

脅威行為者は、検出を回避し、さらなる利益を得るためにマルウェアを変更することが知られている。これは、ファイル名やIPアドレス、その他の機能を変更することによって行われます。これにより、検知をより困難にし、レーダーをかいくぐることができるため、彼らにとって有利になります。このような変更は非常に一般的であるため、同じマルウェアのアップグレード版だけでなくダウングレード版も存在することに気付きました。

このようなアップグレード/ダウングレードのバージョンは、追加料金を支払った顧客が追加機能やユニークな機能を利用できる、モジュール型のマルウェアの存在を示唆している可能性があります。また、このことは、マルウェアの全機能が一度に研究者に公開されることを回避するために、脅威行為者がキャンペーンごとにペイロードをカスタマイズしていることを示唆している可能性もあります。このマルウェアは、ルータなどのIoT デバイスを標的として、サービス運用妨害(DoS)攻撃を仕掛けることが知られています。

セキュリティ研究者が最新のボットネットの動向とその変化を常に把握するためには、一定の努力が必要です。そのため、Nozomi Networks 、マルウェアの挙動をよりよく理解し、お客様の保護を強化するために、インターネット上の悪意のあるサーバーの検出に注力しています。このブログでは、Gafgytマルウェアの第一段階と第二段階、その亜種/改変を紹介し、悪意のある活動を検出するためのIoC(Indicators of Compromise)を提供します。

第一段階 - 初期アクセス

Nozomi Networks Labsの研究者が追跡している最も一般的な初期アクセス手法の1つは、有効なアカウントの悪用です。マルウェアは、SSHやtelnetの認証情報をブルートフォースすることで、認証情報へのアクセスを試みます。成功すると、攻撃者はコードを実行し、脆弱なデバイスにマルウェアの第一段階を展開することができます。私たちのハニーポットのチェーンは、2022年9月の最終週に攻撃者によって悪用された上位のクレデンシャルをキャプチャすることができました(図1):

攻撃者に悪用されるクレデンシャルのトップ
図1. 2022年9月最終週に攻撃者に悪用された上位クレデンシャル

これらのエントリ(admin:admin、root:root、admin:1234など)のほとんどは、様々なモノのインターネット(IoT )デバイスにアクセスするために使用されるデフォルトのユーザー名とパスワードである。これらの認証情報は、複数のボットネットで使用されており、一部は公開されているMiraiマルウェアのソースコードでもアクセス可能です。上位のエントリーは時間とともに変化するため、結果は月によって異なる場合があります。当社のハニーポットが2022年上半期に捕捉した上位認証情報のチャートは、OT/IoT Security Reportでご覧いただけます。

悪意のある行為者がデバイスにアクセスすると、次にbashスクリプトを実行し、第2段階のペイロードを配信・実行します。古典的なアプローチでは、異なるアーキテクチャに合わせた複数のELF(Executable and Linkable Format)ペイロードを繰り返しダウンロードします(通常、curlやwgetなどの標準ツールを使用)。最も一般的なコンピュータアーキテクチャは、x86、ARM、MIPS/MIPSEL、PowerPC、SH-4、SPARC、m68kであり、デバイスによって異なります。そして脅威者は、被害者のデバイス上でそれぞれの実行を試みる。

第一段階のbashスクリプトの例
図2.第一段階のbashスクリプトの例

次に、セカンドステージで配信されるバイナリー・ペイロードと、帰属やクラスタリゼーションにおいて研究者を支援するために使用できる情報の種類に焦点を当ててみよう。

第2段ペイロード

伝統的に、ブルートフォース攻撃の第一段階は、他の侵害されたデバイスによって開始され、悪意のあるコマンド・アンド・コントロール(C2)サーバーは、第二段階のペイロードを配信し、ボットにコマンドを発行するために使用されます。この攻撃をさらに複雑にするために、通常、異なるファイル名が各C2サーバーに関連付けられています。これらの攻撃を実行するために使用されるさまざまなIPの数が多いため、Virus Totalにおける悪意のあるIPの検出率は非常に低くなっています。以下の例(図3)では、Nozomi Networks 、修正された悪意のあるインジケータを検出できるベンダーは、全94社のうち8社のみです。

悪意のあるC2の検出数が少ない
図3.悪意のあるC2の検出数が少ない

第2段のペイロードにはいくつかの種類がある:

  • 梱包されていないサンプル
  • Ultimate Packer for Executables (UPX) の公開バージョンでパックされたサンプル
  • UPXの未発表バージョンを詰め込んだサンプル
  • UPXのあらゆるバージョンでパックされ、その後破損したサンプル

使用されたパッカーの正確な分布に興味がある場合は、アンチ・リバース・エンジニアリング技術に特化した私たちの過去のブログの1つで詳細を学ぶことができます。UPXの破損については、Nozomi Networks Labsが最近、これらの変更を自動的に復元するオープンソースツールをリリースしました。

Gafgyt (aka Qbot) マルウェア サンプル

それでは、Gafgytマルウェアとその亜種を解剖してみよう。Gafgytのソースコードは5年以上前に公開され、誰もが再利用できるようにGitHubで公開されています。そのため、分析したサンプルの多くは、Gafgytの機能を1つ以上実装しています。最初は、分析されたファイルは同じファミリーに属しているように見えるかもしれませんが、機能や主な機能には一定の違いがあります。

共通サンプル

Gafgytマルウェアの共通の目的は、サポートされている数少ないプロトコルのいずれかを介してDDoS攻撃を生成することです。図4は、対応するコマンドがマルウェア内部でどのように見えるかを示しています:

サポートされているどのコマンドが発行されたかのルーチンチェック
図4.サポートされているコマンドのルーチンチェック

これらのコマンドにより、脅威者は複数のプロトコルや方法(UDP、TCP、ICMP、HTTPなど)を使ってDDoS攻撃を行うことができる。

この場合は

  • UDPフラッド
  • ICMPフラッド
  • TCP SYNフラッド
  • TCP ACKフラッド
  • TCP生フラッド
  • HTTPフラッド

その他の一般的な機能により、悪意のあるアクターはボットのステータスを確認したり、ボット上で任意のコマンドを実行したり、悪意のあるプロセスを強制終了したりすることができます。分析したサンプルの1つが使用した追加機能には、以下のものがあります:  

  1. オンデマンドで他のデバイスをスキャン・検索し、侵入を試みる(図5)
  2. ハードコードされた認証情報のリストを使用する(Miraiボットネットで使用されているものに似ている)

この機能はGitHubのGafgytソースコードにもある:

char *usernames[] = {"root\0", "\0", "admin\0", "user\0", "login\0", "guest\0"};

char *passwords[] = {"root0", "\0", "toor0", "admin0", "user0", "guest0", "login0", "changeme0", "12340", "123450", "1234560", "default0", "pass0", "password0"}.

しかし、分析されたサンプルでは、認証情報のリストが拡張され、Miraiのソースコードに記載されている認証情報も含まれている。

分析されたサンプルでスキャナが使用した認証情報
図5. 分析サンプルでスキャナが使用した認証情報

ユニークなサンプル

私たちが分析したGafgytのサンプルは、身を隠して感染を長引かせるために、いくつかの防御回避テクニックを使用しています。ここでは、最も一般的な独自の機能をいくつか紹介します:

  • システム上で実行中のプロセスを監視する: この悪意のあるサンプルが使用するテクニックの1つは、マシン上で実行されているすべてのプロセスをリストアップし、継続的に監視し、特定のパスに保存されていない実行中のプロセスを強制終了することです。

    各プロセスについて、サンプルは/proc/PID/exeのシンボリックリンクを解決して実行可能ファイルのパスを取得します。

    興味深いことに、この機能は拡張サンプルでは "stop "コマンドに相当するが、軽量サンプルでは常に実行される。
  • プロセス名の非表示: 実行の一番最初と、C2サーバーからのコマンド受信をリッスンするソケットをセットアップした直後に、マルウェアはプロセスの名前を変更する(例えば、/bin/bash)。これを実現するために、引数PR_SET_NAMEを持つprctl syscallを使用し、呼び出しプロセスの名前を第2引数として渡された値に設定します。
図6. prctlを使ってプロセス名を変更するマルウェア
  • フォークの積極的な使用: 機能を分離するために、マルウェアはコードの一部を多くの別々のフォークで実行する。図7に示すように、マルウェアの1つが15の異なるインスタンス
図7. IoT マルウェアにおけるフォークの積極的な使用

軽量サンプル

分析を進める中で、Gafgytの機能を最小限に抑えたGafgytサンプルを発見しました。

このサンプルの基本的な機能の1つは、C2サーバーがボットが生きているかどうかをチェックできることです。C2がボットに "PING "というコマンドを送信すると、ボットが起動していれば "PONG "と応答します:

if (!strcmp(argv[0], "PING"))

 {

sockprintf(mainCommSock, "PONG!");

を返す;

}

図8は、botkill_and_udp_floodと呼ばれる関数の2番目と3番目の機能を示している。

図8.軽量版Gafgytの3つの機能:ping、ボットキル、UDPフラッド攻撃。

botkill機能は、C2が感染デバイス上の悪意のあるプロセスを殺すコマンドを送信することを可能にします。ボットが "botkill "コマンドを受信すると、単に終了します。

悪意のあるサンプルコード内のUDPフラッド攻撃
図9.ボットキルの機能

この機能を実装するもう一つの方法は、図10に示すように、kill -9 PIDコマンドを発行することである:

図10.botkillコマンドの別の実装

UDPフラッド攻撃は、他のサンプルのコードとまったく同じように、sys_sendtoを呼び出す無限ループを含んでおり、この悪意のあるプログラムが強制終了されるまで、UDPパケットを送信し続ける。

図11.悪意のあるサンプルコード内のUDPフラッド攻撃

結論

この調査によると、脅威者はマルウェアの様々なアップグレードやダウングレードを行っている可能性があります。これは、手口を変えて検知を逃れている可能性もあれば、マルウェアに手を加えてアラカルトで機能を追加し、さらなる利益を得ようとするダークウェブ・サイバー犯罪のスキームの一環である可能性もあります。修正には、検出を回避し、攻撃の寿命を延ばすために、異なるファイル名やIPを使用することが含まれます。

Nozomi Networks では、静的な機能と変化する機能を区別し、さまざまなキャンペーンを追跡するのに役立つ堅牢な検出を作成します。ネットワークとシステムを保護するためには、これらの変化を監視し、これらの攻撃に対抗する戦術を防御戦略に組み込むことが必要です。以下は、このブログで取り上げた悪意のあるボットネットに関連する指標です:

IoC

  • 62.197.136.231
  • 80.76.51.244
  • 2b1cc052f78141d91e1bc40db25418359a05c4ad28d2cd55f6e503e4f78c1010
  • 05e586d03dfb2c4a79372d46f2f4a8a91bf24d303017a0ce9f223263b28752a5