PSIRT ブログ

FG-IR-22-369の分析

投稿者 Guillaume Lovet および Alex Kong | 2023年3月15日

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

フォーティネットは、2023年3月7日にCVSS Medium PSIRTアドバイザリ(FG-IR-22-369 / CVE-2022-41328)を公開しました。このブログでは、本脆弱性の発見につながったインシデントに対する初期の調査、および継続的な分析中に特定された追加のIoC(Indicators of Compromise:侵害指標)の詳細について説明しています。

概要

  • インシデントFG-IR-22-369 / CVE-2022-41328に関連する複数のIoC(Indicators of Compromise:侵害指標)が発見されました。
  • エクスプロイトの複雑さから、高度なスキルを持つ攻撃者による標的型攻撃であり、政府または政府関連のターゲットを狙い撃ちにしていることが示唆されます。

インシデント分析

フォーティネットが調査したきっかけは、顧客の複数のFortiGateデバイスで、突然発生したシステム停止とそれに続くブート障害(侵害から保護するための設計)でした。

それらのデバイスは、以下のエラーメッセージを出力して停止しました。

“System enters error-mode due to FIPS error: Firmware Integrity self-test failed(FIPSエラーにより、システムがエラーモードに移行しました。ファームウェアの整合性セルフテストに失敗しました)”

FIPS対応デバイスは、システムコンポーネントの整合性を検証します。整合性違反が検知された場合、デバイスはシャットダウンし、ネットワークの整合性を保護するために起動を拒否します。

フォーティネットは、これらのFortiGateデバイスのサブセットと、それらを管理するために使用されるFortiManagerデバイスを調査しました。その調査の詳細は以下のとおりです。

FortiGateの調査

フォーティネットの調査チームは、デバイスのファームウェアイメージ内の/sbin/initが変更され、新しいファイル/bin/fgfmが追加されていることを発見しました。/sbin/initの変更により、攻撃者に永続的なアクセスとコントロールを提供できる/bin/fgfmが通常の起動アクションに進む前に実行されるようになります。この機能の詳細については、後述の「マルウェア分析」セクションを参照してください。

以下の理由により、影響を受けたFortiGateデバイスは、おそらくFortiManagerデバイスを介してアクセスされ侵害された可能性が高いと考えられます。

  1. 影響を受けたすべてのFortiGateデバイスが攻撃を検知し、ほぼ同時に停止した。
  2. すべてのデバイスが同じ方法で侵害された。
  3. FortiGateでパストラバーサルエクスプロイトが試みられた形跡がある。この攻撃が発生した時刻は、FortiManagerを介してFortiGateデバイス上でスクリプトが実行された時刻と一致します。

FortiManagerの調査

インシデントに関係したFortiManagerデバイスのファームウェアイメージの内容を、クリーンなFortiManagerデバイスと比較しました。その結果、rootfs.gz内の以下のファイルが異なっていました。

さらに、3つのファイルがイメージに追加され、既存のFortiManager起動スクリプトが変更されて永続化が実現しています。さらに、FortiManagerのDjangoコンポーネントも、攻撃者に永続的なアクセスとコントロールを提供するように変更されています。悪意のあるファイルとその機能の詳細については、「マルウェアの分析」セクションを参照してください。

FortiManagerによって実行されるスクリプト

調査したログには、FortiManagerデバイスから配信されたスクリプトがFortiGate上で実行された証拠が含まれていました。以下の表は、「msg」フィールドに「upload-icon」と「run script」コマンドが含まれるログを示しています。

ログの内容を見ると、FortiManagerのアップロードスクリプト機能を介して、さまざまなFortiGateでスクリプトが実行されていることがわかります。

同時に、「Command failed」ログが記録されています。このログは、パストラバーサルエクスプロイトを試みた証拠となるものです。このエクスプロイトにより、指定されたパスでTFTPサーバーを経由して任意のファイルをFortiGateにアップロードできます。この例では、攻撃者はFortiGate上の/bin/lspciを置き換えようと試みています。ログにその痕跡はありませんが、CLIコマンド:diagnose hardware lspciを実行すると、悪意のあるlspciが実行される可能性があります。

実行されたスクリプトの内容がデバイスに残されていないため、確認できませんでした。ただし、「Command failed」ログと「run script」ログが同時に記録されていることから、スクリプトにはアップロードアイコンの脆弱性攻撃が含まれていた可能性が考えられます。

フォーティネットでは、このエクスプロイトを可能にするパストラバーサル脆弱性にCVE-2022-41328を割り当て、FortiOSのすべてのサポート対象バージョンで修正を行いました(FG-IR-22-369を参照)。

マルウェア分析

以下のセクションでは、侵害されたFortiGateおよびFortiManagerデバイスで検知されたマルウェアについて説明します。

FortiGate

Fgfm:

FgfmはICMPパケットを精査します。ICMPパケットに文字列「;7(Zu9YTsA7qQ#vm」が含まれている場合、それが攻撃者からのpingであることを認識し、パケットからIPアドレスを抽出します。

抽出が完了すると、そのアドレスに戻る接続を確立し(「リバースコネクトシェル」に類似)、C&Cサーバーとして機能するようになります。そうすると、C&Cサーバーから受け取ったコマンドに応じて、以下のようなさまざまなアクションを実行できます。

  1. プログラムの終了
  2. データ流出
  3. ファイルのダウンロード / 書き込み
  4. リモートシェル

FortiManager

Auth:

authの中核機能は、FortiManagerのiptablesユーティリティを変更したものと考えられます。IptablesはFortiManagerに組み込まれていますが、これを使用するにはユーザーがroot権限を持っている必要があります。このマルウェアが実行するiptablesシェルコマンドは厳密には以下のとおりです。

これは特定のソースIPから発信される宛先ポート541(FortiGuard管理ポート)に向かうトラフィックをリダイレクトするものであると考えられます。一致するトラフィックは、別のポートにリダイレクトされます。ソースIPとリダイレクトポートは、ネットワークソケットから読み取られます。

Authはまた、デバイスのネットワークインタフェースを照会し、127で始まらないIPアドレスを持つものを探します。これは、先に述べたどのアクションよりも前に行われます。

その他の変更

Klogd:

Klogdは、前述のfgfmとの類似点があります。リモートシェル実行に似たコードが含まれており、ファイルの読み書き機能もあります。

fgfmとのその他の類似点:

  • SSLライブラリを利用する
  • 類似の文字列「;7(Zu9YTsA7qQ#vm」を使用してコード実行を制御する

ネットワークの機能については詳細には分析されていません。ただし、ICMPトンネルを使用するfgfmとは異なるようです。以下では、ネットワークソケットの機能について説明します。

  • プロトコル8でAF_INET、SOCK_RAWソケットを作成する。「port1」(デフォルトの管理ポート)のインタフェースインデックスを取得し、ソケットをそれにバインドする。データがこのソケットから読み取られる。
  • AF_NETLINKソケットを作成する:カーネルとユーザー空間の通信に使用される。
  • AF_INET、SOCK_STREAM、プロトコル0のソケットを作成し、そこでリッスンする。このコードのブランチは、ファイルの読み書きアクティビティを伴うリモートシェルにつながる。

Support:

Supportは、/bin/klogd/bin/authを実行するBASHスクリプトである。また、/bin/klogd、/nohup.out/bin/supportを削除する。

Smit:

Smitは、起動時のファームウェア検証を無効にするように変更されている。

Localnet:

Localnetは、FortiManagerの起動スクリプトを変更したもので、2行追加されている。最初の行は、起動時にファームウェア検証を再度有効にするように/bin/smitを変更する。これは、実行中のデバイスには何の影響もなく、smitが変更されたという事実を隠すために実行される可能性が高い。2行目は/bin/supportを実行する。

Urls.pyおよびViews.py

FortiManagerのこれらのDjangoコンポーネントも変更されています。システム上のUrls.pyには、追加のWebエンドポイント「show_device_info/」を公開するコードが含まれていました。このエンドポイントにアクセスすると、views.pyに追加された悪意のあるコードが実行されます。

views.pyでは、show_device_info/ エンドポイントにアクセスすると、get_device_info関数が実行されます。get_device_infoの変更により、攻撃者がリモートでデバイスを制御できるようになる可能性があります。この関数は、FGMGTOKENDEVICEIDというCookieを介してコマンドとデータを受け取ります。入出力データはRC4で暗号化され、以下の主要なアクションが実装されています。

  1. シェルコマンドの実行
  2. ファイルのダウンロード
  3. ファイルのアップロード

IOC(Indicators of Compromise:侵害指標)

システム / ログ

  • 文字列「execute wireless-controller hs20-icon upload-icon」
  • 文字列「User FortiManager_Access via fgfmd upload and run script」

ネットワーク

  • 47.252.20.90

ファイルハッシュ

  • Auth - b6e92149efaf78e9ce7552297505b9d5
  • Klogd - 53a69adac914808eced2bf8155a7512d
  • Support - 9ce2459168cf4b5af494776a70e0feda
  • Smit - e3f342c212bb8a0a56f63490bf00ca0c
  • Localnet - 88711ebc99e1390f1ce2f42a6de0654d
  • Urls.py - 64bdf7a631bc76b01b985f1d46b35ea6
  • Views.py - 3e43511c4f7f551290292394c4e21de7
  • Fgfm - e2d2884869f48f40b32fb27cc3bdefff

攻撃者に関する情報の概要

このエクスプロイトの複雑からすると、攻撃者は高度なスキルを持っていることがわかります。

  • このエクスプロイトを悪用するには、FortiOSとその基礎となるハードウェアに対する深い理解が必要です。
  • カスタマイズされたインプラントは、攻撃者がFortiOSのさまざまな部分をリバースエンジニアリングするなどの高度な能力を持っていることを示しています。

攻撃のターゲットは非常に絞られており、政府または政府関連のターゲットを狙い撃ちにしていることが示唆されます。

結論

フォーティネットは、この脅威アクターの活動を引き続き追跡しています。この問題を減災するために、すべてのお客様がPSIRTアドバイザリFG-IR-22-369で推奨されているアクションをすぐに実行することをお勧めします。お客様のログにシステムから侵害の兆候が出力されていることが判明した場合、フォーティネットにお問合せください