セキュリティ運用

Sophos X-Ops、デバイスへのバックドアで秘密のチャネルを使用する攻撃者を発見

カスタムマルウェアとコモディティマルウェアを組み合わせた新たな攻撃が発見されました。

** 本記事は、Sophos X-Ops finds Attackers Using Covert Channels in Backdoor Against Devices の翻訳です。最新の情報は英語記事をご覧ください。**

カスタムマルウェアとコモディティマルウェアを組み合わせた新たな攻撃が発見されました。

Sophos X-Ops は最近、マルウェアを使用した新種の標的型攻撃を調査しました。使用されるマルウェアには独自の特徴があり、作成者とオペレーターが、攻撃を受けたデバイスと密かに通信し、コマンドを実行するための手段を確立するのにかなりの時間と労力が費やされています。

調査の結果、攻撃者は少なくとも 8 種類の悪意のあるファイルを攻撃を受けたデバイスにインストールしていることが判明しました。

以前のインシデントでも確認されたように、この種の攻撃者は、SFOS (Sophos Firewall OS) で使用されるいくつかのファイルを改ざんすることで悪意のあるファイルを作成します。これらのファイル以外に、Gh0st RAT などの「コモディティ」Linux マルウェアの亜種も攻撃に用いられるようです。

以下は、マルウェアと、マルウェアが使用する秘密の通信方法に関する防御側の分析です。

JAR ファイルの悪用

この種の攻撃は、CVE-2022-3236 の悪用から始まります。この脆弱性については、ソフォスのセキュリティアドバイザリ sophos-sa-20220923-sfos-rce で詳述されています。

SFOS の一部には、デバイス本体の Jetty Web サーバー下で動作する Java アプリケーションが使用されています。攻撃者は、デバイスの一部の内部機能を構成する Java ファイルをいくつか改ざんし、ファイルにコードを追加しました。この手法では、デバイス自体の機能は維持されるため、元のファイルが改ざんされたファイルで上書きされた後も、その機能は実行できます。

Java JAR ファイルには、.class ファイルと呼ばれるものが通常少なくとも 1 つ含まれています。これらの .class ファイルには、Java アプリケーションの機能を司るプログラムが含まれています。

攻撃者によって改ざんされたことが確認されたファイルの 1 つが、servlet-api-3.1.jar という名前の Java アプリケーションです。攻撃者は、この JAR ファイルに格納されている HttpServlet.class を改ざんして独自のコードを追加し、改ざんした .class ファイルで JAR ファイルを再コンパイルし、その JAR ファイルを標的デバイスにアップロードしていました。

この JAR ファイルは、サーバーが Web リクエストヘッダー (POST や GET リクエストなど) で遭遇する可能性のある HTTP メソッドの有効性を確認します。そのため、インバウンドの Web トラフィックの特性を検査する、重要な位置を占めます。

図 1: 盗み出した認証情報を暗号化するために改ざんされた httpservlet が使用するアルゴリズム

追加されたコードによって、この JAR ファイルは、攻撃者へのバックドアとして機能するようになります。さらに、このファイルはユーザーや管理者がデバイスにログインしようとするのを待ち、ログイン名とパスワードをリアルタイムで取得し、盗んだ認証情報を独自のアルゴリズムで暗号化して、デバイスの /tmp/ ディレクトリにあるファイルに書き出すという仕組みになっています。.

バックドアとしての機能は極めて高度なものです。このコードを作成した攻撃者は、攻撃者以外がバックドアを使用できないように、プロセスにいくつかの防止策を組み込んでいます。たとえば、JAR ファイルに追加されたコードは、受信リクエストのヘッダーコンテンツを解析し、Cookies ヘッダーに「JSESSIONID」キーが存在するかどうかを確認します。

このヘッダー値を持つコンテンツは追加されたコードによって処理され、月と日の数値から算出された鍵を使って復号化されます。したがって、データの復号化に使用する鍵は毎日変化しますが、アルゴリズムによって予測可能です。

復号化された Web リクエストのデータストリームのうち、最初の数バイトには、攻撃者が実行できる 7 種類のコマンドのうちの 1 つを指す短い値が含まれています。簡単に言うと、この (トロイの木馬化した) コードは、ディレクトリの一覧表示、個々のファイルの読み取り、書き込み、コピー、削除、名前の変更、デバイス上のネイティブシェルでのコマンドの実行を行えます。

Figure 2 The command "cases" used by the modified httpservlet
図 2: 改ざんされた httpservlet で使用される「cases」コマンド

図 2: 改ざんされた httpservlet で使用される「cases」コマンド

データの形式自体は、目新しいものではありません。JSESSIONID は、Cookie を通じて Java サーブレットに渡される通常の、正式な形式の情報です。この方法でマルウェアに指示を伝えるのは驚くほど狡猾な方法であり、非常に秘匿性に優れています。従来のマルウェアと比べると非常に珍しい伝達手段です。

攻撃者は上述の 7 つの機能の実行を試み、成否にかかわらずフィードバックテレメトリを受け取ります。

Figure 3 The Trojanized HttpServlet uses a specific format to log stolen data
図 3: 盗み出したデータを記録するために特定の形式を使用する、トロイの木馬化された HttpServlet

 

悪意のある ELF シェルステージャーをドロップする攻撃者

この悪用プロセスにおいて、攻撃者は、デバイス上に通常存在する正規のファイル (screenmgr.pl および WebsocketServer.pm) をトロイの木馬化しました。攻撃者はプロセスを一度終了して再実行すると「root」レベルの権限が付与 (かつ維持) されるように screenmgr を改ざんします。このプロセスファイルによって WebsocketListener がセットアップされます。WebsocketListener は、トロイの木馬化された WebsocketServer と連携して、Perl で書かれた eval 文を root ユーザーとして生成します。上述の改ざんに加えて、base64 でエンコードされたデータの小規模な blob (バイナリラージオブジェクト) という形で、簡単な ELF 実行ファイルが配信されるのも確認されました。

この ELF バイナリ (Linux/Loit-X) の主な目的は、プロセスのマウント名前空間を /proc/1/ns/mnt に設定し、シェルを呼び出すことです。この ELF バイナリは、ネイティブの procfs が悪用されたプロセスのコンテキストから分離されておらず、プロセスが seccomp によってシステムコールを「setns」に制限するように堅牢化されていない限り、マウント名前空間からエスケープします。サービスは通例 seccomp を利用して「setns」の呼び出しを防止するなどの堅牢化を図っており、かつ実際のエクスプロイトコードはこのファイルを呼び出していないことから、この機構は攻撃者がエクスプロイトを開発/テストしていた時の名残であり、標的を別のプロセス構造に移す前の初期段階に、サービスを直接標的にしようとして失敗した可能性があると考えられます。

カスタムされた Metasploit モジュール

一部のデバイスへの攻撃において、攻撃者は Payload.java という既存のペイロードをベースにカスタマイズされた JAR Metasploit モジュールを配信しました。被害を受けたシステムでは、このモジュールがデバイスのファイルストレージに syslog-ng.cfg というファイル名で書き込まれているのが確認されました。

Metasploit モジュールは、同社の Github で公開されている「純正」に限りなく近いもので、改ざんされているのは Metasploit モジュールがコマンドアンドコントロールサーバーのアドレスと、接続するポート番号を定義するために使用する構成データのみです。

このファイルは実行されると、/tmp/~spawn[ランダムな文字列].tmp.dir という名前で自分自身のコピーを作成します。実行されるたびに、このファイルは自らを削除しようとします。

SessionAgent の悪質なバックドア機能

ソフォスは Linux/Backdr-NQ として検出される ELF バイナリマルウェアの相異なる亜種を少なくとも 6 種類発見しました。このマルウェアは、CResoule と名付けられたメインクラスを持ち、RC4 アルゴリズムで暗号化された構成ファイルを含んでいました。

マルウェアは、起動時に実行される /etc/rc.d/S00null というファイルに実行パスを付加することで常駐化します。

このマルウェアには、複数のコマンドアンドコントロール (C2) アドレスが含まれていました。さらに、アクティブな接続セッションごとに新しい AES 鍵をランダムに生成する時間ベースのシードを使用しているようです。マルウェアは生成された鍵をまず C2 サーバーに送信し、接続が有効な間はこの鍵を使用してサーバーとのアウトバウンド通信を暗号化します。組み込まれた構成ファイルには、その構成を上書きするために読み込まれる、AES で暗号化された外部の構成ファイル (/var/cache/update.logなど) のパスが含まれています。

このマルウェアは、インバウンドトラフィック内の特定のバイトを確認し、その値に基づいてさまざまな種類のバックドア機能を実行する機能を備えています。ボットに対しては、C2 へのファイルアップロード (あるいは C2 からのファイルダウンロード)、マルウェアの設定変更、デバイス上でのコマンド実行、C2 との接続の終了を指示できます。

Clientless VPN で配信される Termite マルウェア

攻撃を受けたデバイスをさらに調査したところ、いくつかのデバイスで、さらに別のリモートアクセス型トロイの木馬が使用されていることを示すデータが確認されました。このマルウェア (現在、Linux/Gognt-O として検出されます) は、UPX で圧縮された ELF バイナリで、サイズはおよそ 2.3MB です。接続中、マルウェアは「Termite (v [番号]) starting…」という文字列と、2.0200204206304400404 という極めて特殊なバージョン番号を含むログを書き出します。

このマルウェアは、典型的なバックドアに SOCKS プロキシとしての機能を追加したもので、ある種の Web トラフィックの内容を傍受できます。

Gh0st RAT ELF バイナリ

いくつかのマシンは、Gh0st RAT ELF バイナリ (Linux/Rekoobe-A として検出されます) の亜種 (少なくとも 3 種類存在します) を受信していました。CVE-2022-1040 を利用した攻撃と同様に、攻撃者はすべての Ping パケットを検査するマルウェアを構築し、「自然に」は発生しないような、特別に細工された Ping パケットの受信を待ちます。

その Ping パケットは正しく検証されると、攻撃者が提供したアドレス (Ping パケットの「データ」セクションで配信されます) に戻るリバースシェルを開くか、C2 からの接続を受け入れるため、ポート 31234 に接続/リスンするよう、デバイスを起動するために使用されます。接続が確立されると、ボットは再度有効性チェックを行います。この技術は Traffic Signalling と呼ばれ、MITRE ATT&CK フレームワークの技術 T1205 として詳述されています。

結論

このような標的型攻撃では、カスタムマルウェアとコモディティマルウェアが混在し、デバイスを制御するためのカバーチェネルを作り出そうとしていることが確認されています。さらに、攻撃者は攻撃の痕跡を隠そうとします。このような手順が組み合わされることより、検出されにくい攻撃が生み出されます。攻撃者は検出のリスクを最小限に抑えながらデバイスを最大限制御しようとしているのです。

セキュリティ侵害の痕跡 (IoC)

今回のインシデントに関するセキュリティ侵害の痕跡 (IoC) は、こちらの GitHub で公開しています。

謝辞

ソフォスは、Trend Micro 社のアドバイザリに共同で取り組んだことについて、同社に謝意を表します。

本記事への貢献に対して、Timothy Easton、Craig Jones、Brijesh Rajput、Tom Sage、Emily Taylor の各氏にも謝意を表します。

コメントを残す

Your email address will not be published. Required fields are marked *