PSIRT ブログ

SSLVPNdにおけるヒープベースのバッファオーバーフローの解析

影響を受けるプラットフォーム:FortiOS
影響を受けるユーザー:政府機関および大規模な組織
影響:データ損失、OS およびファイルの破損
深刻度:

フォーティネットは、2022年12月12日にCVSS: Critical advisory FG-IR-22-398 / CVE-2022-42475を公開しました。以下に、このマルウェアの初回調査および進行中の分析で確認された追加のIoCについてご説明いたします。

エグゼクティブサマリー

  • FG-IR-22-398 / CVE-2022-42475 に関連する複数の追加 IoC が発見されました
  • この悪用の複雑さから、高度な脅威アクターであり、政府または政府関連の標的を狙ったものである可能性が高いことが示唆されます。

インシデント分析

アドバイザリで述べたように、私たちはこの問題を実際に検出し、関連するネットワークトラフィックとともにマルウェアのサンプルを収集しました。

このマルウェアは、FortiOS用にカスタマイズされた汎用Linuxインプラントの亜種でした。受信したアプライアンスのフォレンジックファイルシステムおよびバイナリ解析によって、以下の情報を収集しました。

                                                  Libips.bak

疑わしいバイナリは、/data/lib/libips.bak に存在しました。このファイルは、/data/lib/libips.so にあるフォーティネットの IPS Engine のコンポーネントとして偽装されている可能性があります。ファイル /data/lib/libips.so は存在しましたが、ファイルサイズはゼロでした。

以下は、/data/libディレクトリのイメージ図です。

Libgif.so、libips.bak、およびlibiptcp.soは、FortiOSコンポーネントまたはプロセスの一部ではありません。

Libips.bak は、通常 /data/lib/libips.so にある IPS Engine のトロイの木馬化したバージョンであるようです同じ FortiOS ビルドの libips.bak とクリーンな libips.so を比較する diff が実行されました。約 0x1900 バイトの位置まで、ファイルは異なっています。それ以降は、同じファイルです。下図は、libips.bak(上)とクリーンなlibips.so(下)のスクリーンショットです。libips.bakにはデータが含まれていますが、libips.soには含まれていません。

最初の〜0x1900バイト以降は、同一のファイルです。

Libips.bak ips_so_patch_urldb ips_so_query_interface という関数をエクスポートしています。これらは、クリーンなIPSエンジンのバイナリであるlibips.soで同じようにエクスポートされています。エクスポートされた両方の関数は、同じ悪意のあるコードにつながります。libps.bak が /data/lib ディレクトリにある libips.so という名前の場合、FortiOS のコンポーネントがこれらのエクスポートされた関数を呼び出すため、悪質なコードが自動的に実行されます。このバイナリは、クリーンな IPS エンジン コードに戻ろうとしないため、IPS 機能も侵害されます。以下は、悪意のあるコードを直ちに呼び出すエクスポート関数の例です。

主な悪質なコードを以下に示します。

悪意のあるコードは、まず、3から255までのファイル記述子をループします。ファイルディスクリプタを複製することができれば、複製とオリジナルのディスクリプタの両方を閉じます。

次に、/data/lib/libiptcp.soから読み込んで、/data/lib/libjepg.soにデータを書き込むことになります。/data/lib/libjepg.so/data/lib/libips.soにリネームされ、fork()が使用されます。最初はアンチデバッグの手法として複数回使用されています。

そして、もう一度fork()を呼び出します。子プロセスは /data/lib/libgif.so からデータを読み込み、そのデータを /data/lib/libjepg.so に書き込んでいます。/data/lib/libjepg.so は /data/lib/libips.so としてリネームされます

親プロセスは、/var/. sslvpnconfigbk への読み取りアクセスをチェックします。このファイルは開かれ、すぐに閉じられます。最後に、/data/lib/libipudp.soが引数として実行されます。

このコードで参照されるファイルであるlibiptcp.so, libgif.so, .sslvpnconfigbk, libipudp.so は回収できませんでした。

                                                   Wxd.conf

この設定ファイルの形式は、https://github.com/fatedier/frp にある「Fast reverse proxy」に似ています。このツールは、"NATやファイアウォールの後ろにあるローカルサーバをインターネットに公開するのに役立つ高速リバースプロキシ "と説明されています。

ログにサーバーのIPアドレスの記録がある。サーバーのポート80、443、444にトラフィックを送信しています。188[.]34[.]130[.]40 のアドレスのサーバーにトラフィックを送信しています。

パケットキャプチャ解析

FortiGuard Labs脅威研究チームが取得・分析したネットワークパケットキャプチャーにより、103[.]131[.]189[.]143に向かう疑わしいトラフィックが特定されました。この解析の主な結果は以下のとおりです。

103[.]131[.]189[.]143

103[.]131[.]189[.]143サーバとの通信は、主に次の2つの目的で行われました。(1)ペイロードのダウンロード、(2)コマンドの受信と実行です。ペイロードは、ポート30080でリッスンしているPython(SimpleHTTP)サーバを使用して103[.]131[.]189[.]143でホストされました。

FortiGuard Labs脅威研究チームは、パケットキャプチャの大部分が切り捨てられたり欠落したりしていたため、ペイロードを復元することができませんでした。

TCPストリーム1894

TCPストリーム1894には、ポート30443でリッスンしている103[.]131[.]189[.]143への接続が含まれており、これは対話型シェルセッションでした。

ポスト・インシデント・メタデータ調査

PCAPを詳細に調査した結果、さらなるIoCが発覚を発見しました。

185[.]174[.]136[.]20

このIoCが判明したことで、関連する FortiGate ハードウェアのバージョンに特化し構築されたバイナリが含まれたサーバー上のフォルダーが特定されました。

FortiGuard脅威研究チームが作成したYaraルールを使用することで、類似のファイルサンプルを探し出すことができました。また、PCAPで実行されたものの、ファイルシステムから直接取得されなかった/var/wファイルを特定することができました。

サンプル分析

収集した/var/wファイルサンプルの解析から、攻撃者は以下のように高度な機能を使用してFortiOSのログを操作していることがわかりました。

  • マルウェアは、FortiOSのログプロセスにパッチを適用し、ログを操作して検知を回避します。- /bin/miglogd & /bin/syslogd
  • 27のFortiGateモデルおよびバージョンペアのオフセットとオペコードが含まれています。マルウェアは、プロセスへのハンドルを開き、プロセスにデータを注入します。
    • バージョンは6.0.5から7.2.1までです。
    • FG100F、FG101F、FG200D、FG200E、FG201F、FG240D、FG3H0E、FG5H0E、FG6H1E、FG800D、FGT5HD、FGT60F、FGT80Fが対象機種です。
  • マルウェアは、ログファイルを操作することができます。FortiOSのイベントのログであるelogファイルを検索します。メモリ上で解凍した後、攻撃者が指定した文字列を検索して削除し、ログを再構築します。
  • また、マルウェアはログのプロセスを停止させることができます。


マルウェアの実行をエミュレートすることで、コマンド&コントロールサーバとの通信に、IPSシグネチャに利用可能な固有のバイト列を発見しました。

  • この文字列は、TLSリクエストヘッダによるTLSトラフィックを検出します。 
  •  “Client Hello”パケットの中に、バッファ「 \x00\x0C\x08http/1.1\x02h2\x00\x00\x00\x14\x00\x12\x00\x00\x0Fwww.example.com」(unescaped)が表示されるはずです。

IOC


以下のネットワークインジケータは、元の解析および補足解析の一部として発見されました(元の IoC は太字)。 これらのインジケータの証拠をFortiGateデバイスで検索する方法の詳細については、次のナレッジベース記事を参照してください。

ファイル名

ファイルシステム内に以下の成果物が存在すること:

/data/lib/libips.bak

/data/lib/libgif.so

/data/lib/libiptcp.so

/data/lib/libipudp.so

/data/lib/libjepg.so

/var/.sslvpnconfigbk

/data/etc/wxd.conf

/flash

 

IP/ドメイン

高信頼性

188[.]34[.]130[.]40                   (ポート444を観測)

103[.]131[.]189[.]143                (ポート30080、30081、30443、20443を観測)

192[.]36[.]119[.]61                     (ポート8443、444を観測)

172[.]247[.]168[.]153               (ポート8033を観測)

139[.]180[.]184[.]197

66[.]42[.]91[.]32

158[.]247[.]221[.]101

107[.]148[.]27[.]117

139[.]180[.]128[.]142

155[.]138[.]224[.]122

185[.]174[.]136[.]20

139[.]180[.]184[.]197

66[.]42[.]91[.]32

158[.]247[.]221[.]101

107[.]148[.]27[.]117

139[.]180[.]128[.]142

155[.]138[.]224[.]122

185[.]174[.]136[.]20

45[.]86[.]229[.]220

45[.]86[.]231[.]71

139[.]99[.]35[.]116

139[.]99[.]37[.]119

194[.]62[.]42[.]105

45[.]86[.]231[[.]71

45[.]86[.]229[[.]220

185[.]250[.]149[[.]32

137[.]175[.]30[.]138

146[.]70[.]157[[.]133

旧攻撃者IP

156[.]251[.]162[.]76

156[.]251[.]163[.122

156[.]251[.]163[.]19

156[.]251[.]162[.111

 

ファイルパスのサンプル

/var/wのファイル

移植後のハッシュ値-MD5

 

f68c3f72270800ea675889e82bb02fb8

e3f640d8785c0c864739529889b1863a

08cbaafb176ce6118f7e4e0b2d2d77cf

bdc2d2f5d5246f8956711bcce9f456b6

4548fa6625cb154ab320833186117393

e5d989b651b3eb351e10e408d5a062b3

3191cb2e06e9a30792309813793f78b6

12e28c14bb7f7b9513a02e5857592ad7

ae0839351721db5a9c269fd75dcb57ce

856341349dd954d82b112ba9165c4563

 

FortiGatesで見つかったサンプルとコードの類似性が高い、VTで見つかったWindowsのサンプル

54bbea35b095ddfe9740df97b693627b

 

JA3フィンガープリント

マルウェアのSSL/TLSクライアント接続のJA3は、マルウェアに固有のものと思われ、攻撃を検知するために使用することが可能です。

bf2b95ac267823f6588b2436bc537b26.

 

脅威アクターに関する知見のまとめ

この悪用の複雑さから、高度な脅威アクターであることが推測されます。

  • このエクスプロイトには、FortiOSとその基盤となるハードウェアに関する深い理解が必要です。
  • カスタムインプラントの使用は、FortiOSの様々な部分をリバースエンジニアリングするなど、攻撃者が高度な能力を有していることを示しています。
  •  この攻撃は、政府または政府関連のターゲットを好んでいることをうかがわせる、高度な標的型攻撃です。
  • 発見された攻撃者のWindowsOS用サンプルは、オーストラリア、中国、ロシア、シンガポール、その他の東アジア諸国を含むUTC+8タイムゾーンのマシンでコンパイルされたことを示すアーチファクトを表示しています。
  • 攻撃者が作成した自己署名証明書は、すべて協定世界時(UTC)の午前3時から8時の間に作成されたものでした。しかし、ハッカーは通常、営業時間内に活動することはなく、被害者の営業時間内に活動し、一般的なネットワークトラフィックで活動を紛らわせることが多いため、この結果から結論を出すことは困難です。

結論

フォーティネットは、この脅威アクターの活動を引き続き追跡していきます。この問題を軽減するため、すべてのお客様に、クリティカルアドバイザリ「FG-IR-22-398」で推奨されている対処法を直ちに実行されることをお勧めします。  IoCを検索する方法については、ここに追加のガイダンスが提供されています。  お客様のシステムが侵害の指標を示していることを確認された場合は、フォーティネットまでご連絡ください

フォーティネットは、この事件の監視を続け、情報が見つかり次第、このブログを更新していきます。

フォーティネットの保護

フォーティネットのアンチウイルスエンジンは、以下のAVシグネチャを使用して、このブログで取り上げたすべてのバイナリを検出します。

Elf/BakSo.SX!tr

WebFilteringクライアントは、ネットワークベースのURIをすべてブロックします。

FortiAnalyzerが指定されたIoC範囲内のIPを行き来するすべてのトラフィックを検出しレポートするために、Fortinet Outbreak Alert Packageが作成され、Outbreak Alert Package DB 1.00082に含まれる予定です。

https://www.fortiguard.com/updates/outbreak-detection-service?version=1.00083

これらのIoCを検索する方法の詳細は、以下のフォーティネットコミュニティのTech Tipに記載されています。

https://community.fortinet.com/t5/FortiAnalyzer/Technical-Tip-Using-FortiAnalyzer-to-detect-the-FortiOS-heap/ta-p/242672

フォーティネットは、エクスプロイトCVE-2022-42475とC&Cチャネルからお客様を積極的に保護するためのIPSシグネチャをそれぞれリリースしました。

FortiOS.SSL-VPN.Heap.Buffer.Overflow

Bakso.Linux.Backdoor