INDUSTROYER.V2: 古いマルウェアが新しいトリックを学習

Example INDUSTROYER.V2 configuration for publicly available sample news

2022 年 4 月 12 日、 CERT-UAESETは、サイバー物理攻撃がウクライナの電力網運用をサポートする運用技術 (OT) に影響を与えたと報告しました。この攻撃は、ウクライナで停電を引き起こすために 2016 年 12 月に最初に展開された、よく知られた攻撃指向の ICS マルウェアであるINDUSTROYERの亜種を含む、さまざまなマルウェアを利用していました。

OT を標的とした攻撃がまれであるだけでなく、広く知られている攻撃指向の OT マルウェアのコードが新しい被害者に対して再展開された最初の事例であるため、この攻撃は重要です。さまざまな研究者による 5 年間にわたる INDUSTROYER の実質的な分析にもかかわらず、攻撃者は依然としてツールの転用を試み、新しいターゲットに到達するようにカスタマイズしました。 INDUSTROYER.V2 (新しい亜種に対する Mandiant の名前) は、OT マルウェアが複数の被害者に対して使用できるように調整できるという考えを強化します。これは、 INCONTROLLERのような他の一般に知られている OT マルウェア ファミリに深刻な影響を与えます。

INDUSTROYER.V2 の展開にまつわる話の多くはすでに公開されていますが、Mandiant はマルウェアをさらに分析して、防御側と OT コミュニティに追加の洞察を共有しました。このブログ投稿では、2 つの異なるサンプルの分析に基づいて、INDUSTROYER.V2 の追加の技術的詳細を文書化しています。また、関連するアクティビティを識別するための検出ルールも提供します。

関連する活動に対応するサポートが必要な場合は、 Mandiant Consultingまでご連絡ください。 INDUSTROYER.V2 とともに展開された追加のマルウェアを含む、関連する脅威の詳細な分析は、 Mandiant Advantage Threat Intelligenceの一部として利用できます

INDUSTROYER.V2 概要

INDUSTROYER.V2 はその前身と似ていますが、この亜種にはより標的を絞った機能が含まれています。外部モジュールを活用して 4 つの異なる OT プロトコルを実装するフレームワークであった元の INDUSTROYER とは異なり、この亜種は自己完結型であり、IEC 60870-5-104 (IEC-104) 通信プロトコルのみを実装します。 IEC-104 は、TCP を介した電力システムの監視と制御に使用され、主にヨーロッパと中東で実装されています。

最も重要なことは、攻撃者は、この新しいマルウェアの亜種によって、ターゲット環境内の特定のインテリジェント電子デバイス (IED) (保護リレー、マージ ユニットなど) に対するマルウェアの動作を変更するカスタマイズされた構成を埋め込むことができることです。 INDUSTROYER.V2 にカスタム構成を組み込むための設計変更により、アクターがさまざまな被害者環境に対して攻撃を再現するために必要な労力が削減され、アクターは特定の標的 IED への影響を封じ込めることができます。

2 つのカスタム INDUTROYER.V2 サンプルは、攻撃の範囲を示しています

INDUTROYER.V2 の新しいカスタマイズ機能の意味を完全に理解するために、2 つの異なるサンプルを分析して比較しました。再コンパイルされたバージョンと思われる 2 番目のサンプルは、一般に公開されており、オンライン マルウェア スキャン プラットフォームで入手できます (MD5: 7c05da2e4612fca213430b6c93e76b06)。

  • どちらのサンプルも同じ操作に関連していると考えられます。コンパイルのタイムスタンプは互いに数分以内で、意図した攻撃の約 2 週間前でした。攻撃者がマルウェアの構成を変更して、さまざまなターゲットのペイロードをカスタマイズしていた可能性があります。
  • 各サンプルには、バイナリ内にハードコーディングされたさまざまな構成が含まれています。 1 つのサンプルには 8 つの一意のハードコードされたターゲット IP アドレスが含まれていますが、もう 1 つのサンプルには 3 つしか含まれていません。
  • どちらのサンプルでも、マルウェアは特定のプロセスを終了させました。ただし、プロセスと連結するために使用される定義済みのファイル パスは、2 つのサンプル間で異なっていました。これは、被害者の環境を微妙に理解していることを示しています。
  • 図 1 は、公開されているサンプルの INDUSTROYER.V2 構成の例を示しています
Example INDUSTROYER.V2 configuration for publicly available sample
図 1: 公開されているサンプルの INDUTROYER.V2 構成の例

両方のサンプルのわずかな違いに基づいて、攻撃の規模、被害者のネットワーク内で攻撃者が持っていた可能性のあるアクセスのレベル、およびマルウェアの展開前に攻撃者によって実行された可能性が高い偵察に関する追加の詳細を推測できます。 .

  • マルウェアの構成に埋め込まれた詳細が示すように、攻撃者は、被害者の環境で特定の IED を特定し、それらへのアクセス方法を理解するために、少なくともいくつかの内部ネットワーク偵察を実施しました。
  • マルウェアの構成は、特定のサブネット全体のデバイスを標的にしており、攻撃者が周囲のネットワークの特定と侵入に成功したことを強調しています。
  • 標的のデバイスとやり取りするための IEC-104 の実装に攻撃者が成功したことは、プロトコルと被害者の環境に関する知識をしっかりと理解していることを示しています。たとえば、分析したサンプルでは、攻撃者が情報オブジェクト アドレス (IOA) の選択されたリストを操作しました。IOA は、リモート ターミナル ユニット (RTU) またはリレー構成で電力線スイッチまたはサーキット ブレーカーと対話するために使用されます。
  • 逆に、マルウェア コード自体には、ある程度の不注意や潜在的な時間的制約が見られます。たとえば、INDUSTROYER.V2 のサンプルには、限定的な難読化と防御回避の方法が含まれています。バイナリが難読化されていないため、防御側はその機能と OT 資産を標的とする能力についてのヒントをすばやく得ることができます。

見通し

元の INDUSTROYER や INCONTROLLER などの拡張可能なフレームワークは、モジュラー設計の柔軟性により、攻撃者に好まれることが多く、特定のペイロードを展開してさまざまな被害者の資産や通信プロトコルを標的にすることができます。ただし、INDUSTROYER.V2 の場合、攻撃者は以前のフレームワークから元のコンポーネントの 1 つだけを再実装し、新しい自己完結型の実行可能ファイルを作成しました。

なぜ攻撃者がINDUSTROYER.V2に特定の変更を加えたのかは不明です。おそらく、攻撃者は、非常に特定の環境をターゲットとする、より合理化されたバージョンを開発したかった、またはより価値のあるツールや機能の高いツールを公開したくない、またはターゲットに影響を与えるために追加のリソースを必要としないため、このアプローチが効率的であると単純に信じていました。 .

動機に関係なく、既知の OT マルウェアのコードを再利用することで、既知の指標に基づくハンティングと検出の価値が浮き彫りになります。たとえば、元の INDUSTROYER 用に作成したいくつかの検出では、実際に INDUTROYER.V2 を特定することに成功しました。多くの場合、OT マルウェアが複数の環境で利用される可能性は低いと考えられていますが、INDUSTROYER.V2 のように設計上安全でない OT 機能を利用するツールを複数回使用して、複数の被害者を標的にすることができます。 OT セキュリティ コミュニティは、これらのツールをフレームワークまたは機能として認識する必要があります。孤立したサイバー セキュリティ インシデントの機能や 1 回限りのツールとしてではありません。

INDUTROYER.V2のテクニカル分析

INDUSTROYER.V2 は C++ で記述されており、IEC-104 プロトコルを実装して、TCP 経由でリモート ターミナル ユニット (RTU) の状態を変更します。 IEC-104 プロトコルの TCP クライアントはコントロール ステーションと呼ばれ、TCP サーバーはリモート ステーションと呼ばれます。このマルウェアは、テレグラムとも呼ばれる設定可能な IEC-104 アプリケーション サービス データ ユニット (ASDU) メッセージを作成して、リモート ステーションの情報オブジェクト アドレス (IOA) の状態をオンまたはオフに変更します。 IOA は、デバイス上の特定のデータ要素を識別し、RTU またはリレー構成の電力線スイッチまたはサーキット ブレーカーに対応する場合があります。 

このマルウェアは自己完結型の実行可能ファイルであり、オペレータは設定パラメータを設定して特定のリモート ステーションをターゲットにし、実行オプションを定義し、ASDU メッセージを作成できます。また、オプションのコマンド ライン引数 (-o) を使用して、デバッグ メッセージを出力ファイルに出力したり、(-t) 実行前に時間遅延を作成したりできます。

構成機能

コマンド ライン インターフェイスの引数が解析された後、INDUSTROYER.V2 は、埋め込まれた構成エントリを反復処理します。プログラムの実行は高度に構成可能です。 2 つの INDUSTROYER.V2 サンプルの分析に基づくと、このマルウェアには、表 1 に示す順序で文字列として構造化された構成エントリが含まれています。

表 1: 構成構造

位置

構成エントリの説明

1

ステーション IP アドレス

2

ステーション ポート

3

エントリ インデックス値

4

指定された範囲でハードコードされたテレグラムを有効にする

5

構成オプションを有効にする 6 – 14

5b

エントリ 4 が有効な場合、テレグラム開始範囲

6

プロセスの終了を有効にする

6b

エントリ 4 が有効な場合、Telegram End Range

7

終了するプロセス名

8

ファイルの名前変更を有効にする

9

ファイルの名前を変更するためのディレクトリ パス

10

スリープ IEC-104 機能の前

11

睡眠時間のシード値

12

実行制御

13

睡眠時間のシード値

14

未使用

15

コマンド状態 – オン/オフ

16

オプションの変更 – 反転したオン/オフ コマンドを送信

17

ASDU データ エントリの数

18

最初の ASDU データ入力

サンプル 7c05da2e4612fca213430b6c93e76b06 から抽出された構成エントリの例を図 2 に示します。

図 2: 構成エントリの例
192.168.XXX.XXX 2404 2 0 1 1 Example StoppedProcess.exe 1 "Example PATH " 0 1 0 0 1 0 0 8 1104 0 0 0 1 1 1105 0 0 0 1 2 1106 0 0 0 1 3 1107 0 0 0 1 4 1108 0 0 0 1 5 1101 0 0 0 1 6 1102 0 0 0 1 7 1103 0 0 0 1 8

構成エントリ #4 が有効になっている場合、マルウェアは ASDU テレグラムを作成して Select コマンドと Execute コマンドを配信し、リモート ステーションの IOA の状態を OFF に変更します。これらのテレグラムが送信される IOA 範囲は、構成エントリ #5 および #6 によって提供されます。ただし、このオプションは回収されたサンプルでは有効になっていませんでした。図 2 の例に対する構成マッピングは、付録に含まれています。

調査したすべての構成で、プロセスの終了、ファイルの名前変更、ASDU データ エントリの使用のオプションが有効になっていました。 ASDU データ エントリは、リモート ステーションへの特定の ASDU メッセージを作成するために使用され、データ エントリは表 2 に示す形式で構成されます。

表 2: ASDU エントリ構造

位置

ASDU データ入力の説明

1

ステーション情報オブジェクト アドレス (IOA)

2

メッセージ タイプの設定 – シングルまたはダブル コマンド

3

コマンド タイプの設定 – 選択または実行

4

デフォルトのオン/オフ状態を反転

5

実行制御

6

ASDU エントリ インデックス

各構成エントリを解析した後、INDUSTROYER.V2 は実行中のプロセスを列挙して、特定のハードコードされたプロセスが実行されているかどうかを識別し、それを終了します。このプロセスが停止すると、マルウェアは実行中のプロセスを再度列挙し、オペレータが設定で指定したプロセスを終了します。

ファイルの名前変更オプションが有効になっている場合、マルウェアは構成データを使用してファイル パスを作成し、このファイルに .MZ 拡張子を追加します。これは、先に終了した指定プロセスの再起動を防ぐための手法である可能性があります。

構成エントリごとに、制御対象システムとの IEC-104 通信を実装するスレッドが作成されます。 IEC-104 は、アプリケーション プロトコル データ ユニット (APDU) 仕様を使用します。 

APDU フレームは、アプリケーション プロトコル制御情報 (APCI) フレームのみで構成できます。または APCI ヘッダーと後続の Application Service Data Unit (ASDU) フレーム。

ブルノ工科大学によるAPDUフレームフォーマット
図 3:ブルノ工科大学による APDU フレーム フォーマット

実行

INDUSTROYER.V2 は最初に、APCI フレームに含まれる制御機能メッセージを送信します。最初の制御メッセージはテスト フレーム (TESTFR) です。マルウェアは、確立された接続を検証するリモート ステーションに TESTFR ACT を送信します。存在する場合、リモート ステーションは対応する TESTFR CON で応答します。

次に、マルウェアは、後続のコントロール メッセージ タイプの Start Data Transfer (STARTDT) を使用して、リモート ステーションとのデータ転送チャネルを開きます。デフォルトでは、コントロール ステーションとリモート ステーション間のアクティブな接続では、データ転送は有効になっていません。したがって、マルウェアは STARTDT ACT を送信してデータ転送チャネルをアクティブにし、リモート ステーションは対応する STARTDT CON を送信して、アクティブ化の成功を確認します。  

データ転送を有効にすると、マルウェアは ASDU フレームを利用して、後続のコマンドをリモート ステーションに送信します。テレグラムとも呼ばれる ASDU メッセージは、リモート ステーションを監視および制御するために IEC-104 で定義された一連のアプリケーション機能です。 ASDU フレームを説明する詳細情報は、ここで参照できます。 

マルウェアは、リモート ステーションの監視対象のデジタル信号とアナログ信号の現在のステータスを取得できるようにする一般尋問コマンドを送信します。次にマルウェアは、埋め込まれた ASDU データ エントリを使用して特定のコマンドを作成し、ターゲットの IOA をオンまたはオフに変更します。

これらのコマンドは、その設定内で定義されたオプションと個々の ASDU データ エントリを使用して作成されます。たとえば、サンプル 7c05da2e4612fca213430b6c93e76b06 (図 2 に表示) から抽出した構成では、最初の ASDU データ エントリは次のとおりです。

  • 1104 0 0 0 1 1

構成エントリ 15 (OFF 状態)、エントリ 16 (Disable Change オプション)、およびその ASDU エントリ値 (表 2 を参照) に基づいて、マルウェアは次の特性を持つ ASDU パケットを作成します。

  • 情報オブジェクトアドレス: 1104
  • ASDU メッセージ タイプ: C-DC_NA_1 (ダブル コマンド)
  • ASDU コマンド タイプ: 実行
  • 状態値の設定: OFF

ASDU メッセージは、図 4 のデコードされたネットワーク トラフィックに示されています。

細工された ASDU メッセージ
図 4: 細工された ASDU メッセージ

構成エントリ内の標的となるリモート ステーションごとに、マルウェアは対応する ASDU データ エントリを繰り返し処理し、指定されたテレグラムを作成してリモート ステーションに送信します。マルウェアの構成設定は、追加の ASDU メッセージを作成するように指示する場合があります。このメッセージは、コマンドのオン/オフ状態を反転させ、この追加メッセージをリモート ステーションの IOA に送信します。

通信シーケンスの概要は次のとおりです。

  1. テスト フレーム メッセージを送信して、確立された接続を確認します
  2. Start Data Transfer メッセージを送信して、データ転送チャネルを開きます
  3. リモート ステーションのステータスを取得する一般質問コマンドを送信します。
  4. リモート ステーションの IOA の状態を変更するために、細工された Single または Double コマンド タイプを送信します。

図 5 は、INDUSTROYER.V2 とラボでエミュレートされた IEC-104 リモート ステーションとの間でキャプチャされた、説明されているメッセージ シーケンスを示しています。これは、最初の TESTFR、STARTDT、および質問コマンドを表示し、続いて特定のリモート ステーション IOA に配信される巧妙に細工された ASDU コマンドを表示します。

エミュレートされた IEC-104 リモート ステーションを使用した INDUSTROYER.V2 メッセージ シーケンス
図 5: エミュレートされた IEC-104 リモート ステーションを使用した INDUTROYER.V2 メッセージ シーケンス

特定のリモート ステーションがどのようにターゲットにされているか、固有の IOA と、意図した効果を生み出すために各 IOA を変更する必要がある状態に至るまでの詳細な性質は、被害者の環境の包括的な理解または可視性を示しています。

マルウェアの標的となる IOA は、攻撃者の正確な意図に重要なコンテキストを提供できますが、IOA マッピングはメーカー、デバイス、さらにはユーザーによって異なることが多いことに注意してください。このため、攻撃者が意図したアクションを正確に解釈するには、対象となる資産に関する追加の知識が必要です。

現時点ではそのような情報はありませんが、特定の製品について公開されているドキュメントに基づいて、可能な IOA の一致を調査しました。たとえば、ABB RTU とリレーが対象地域に大量に配備されていることを知り、オープン ソース分析を実行しました。前の例では、1104 に相当する IOA を観察し、「50BFT:InStr status」に対応するABB Distribution Recloser Relayからの公開製品ドキュメントにマッピングしました。

このステータスでは、50 はサーキット ブレーカの ANSI 番号であり、保護リレーを設定するときにリレー要素に番号を付ける方法です。次に、50BFT は、サーキット ブレーカーの障害保護を表します。同じディストリビューション リクローザ リレーに対するパブリック INDUTROYER.V2 サンプルの構成から抽出された IOA の追加のマッピングを示す付録を提供します。

以前のINDUSTROYERバリアントと重複

INDUSTROYER の 2 つのバージョンには、コードの重複と、実行フローと機能の類似点が含まれています。実行と機能において、次の共通機能を特定しました。

  • どちらのバージョンにも、IEC-104 通信を確立する前に、対象のコントローラー ステーションで特定のプロセスを最初に終了させるコードが含まれています。
  • どちらのバージョンも、提供された構成設定に従って特定の ASDU メッセージを作成します。
  • どちらのバージョンにも、定義済みの ASDU メッセージを指定された IOA 範囲に配信する機能が含まれています。
  • どちらのバージョンにも、以前の ON/OFF コマンドを反転してターゲットのリモート ステーションに送信する追加の ASDU メッセージを作成するようにマルウェアに指示するオプションが含まれています。

私たちが確認した両方の亜種の違いの 1 つは、その前身とは異なり、INDUSTROYER.V2 には、出力の意味をわかりにくくする変更されたデバッグ メッセージが含まれていることです。ただし、これらのデバッグ メッセージは、主要な機能の同様の実行ポイントでフォーマットされ、出力されることに注意してください。さらに、難読化は、両方のバージョンで再利用されている IEC-104 コードの主要部分に実装されていないため、重複を視覚化できます。

たとえば、INDUSTROYER の両方のバージョンは、非常によく似たコードを使用して APDU トラフィックを解析し、特定の解析済みフィールドを出力します。図 6 は、左側が INDUSTROYER.V2 のスクリーンショットで、右側が元の INDUSTROYER のスクリーンショットです。

INDUSTROYER.V2 (左) と INDUSTROYER.104 (右) での APDU トラフィック処理
図6:INDUSTROYER.V2(左)とINDUSTROYER.104(右)でのAPDUトラフィック処理

ASDU フレームの作成、APDU メッセージの送信、変更オプションの実行、および IEC-104 機能のスレッド設定の実装には、2 つのバージョン間の追加の注目すべきコードの重複が存在します。

付録: YARA ルール

rule MTI_Hunting_INDUSTROYERv2_Bytes {

    meta:

        author = "Mandiant"

        date = "04-09-2022"

        description = "Searching for executables containing bytecode associated with the INDUSTROYER.V2 malware family."

   

    strings:

        $bytes = {8B [2] 89 [2] 8B 0D [4] 89 [2] 8B 15 [4] 89 [2] A1 [4] 89 [2] 8B 0D [4] 89 [2] 8A 15 [4] 88 [2] 8D [2] 5? 8B [2] E8}

   

    condition:

        filesize < 3MB and

        uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and

        $bytes

}

 

rule MTI_Hunting_INDUSTROYERv2_Strings {

    meta:

        author = "Mandiant"

        date = "04-09-2022"

        description = "Searching for executables containing strings associated with the INDUSTROYER.V2 malware family."

 

    strings:

        $a1 = "M%X - %02d:%02d:%02d" nocase ascii wide

        $a2 = "%02hu:%02hu:%02hu:%04hu" nocase ascii wide

        $a3 = "%s M%X " nocase ascii wide

        $a4 = "%s: %d: %d" nocase ascii wide

        $a5 = "%s M%X %d (%s)" nocase ascii wide

        $a6 = "%s M%X SGCNT %d" nocase ascii wide

        $a7 = "%s ST%X %d" nocase ascii wide

        $a8 = "Current operation : %s" nocase ascii wide

        $a9 = "Sent=x%X | Received=x%X" nocase ascii wide

        $a10 = "ASDU:%u | OA:%u | IOA:%u | " nocase ascii wide

        $a11 = "Cause: %s (x%X) | Telegram type: %s (x%X" nocase ascii wide

 

        $b1 = "Length:%u bytes | " nocase ascii wide

        $b2 = "Unknown APDU format !!!" nocase ascii wide

        $b3 = "MSTR ->> SLV" nocase ascii wide

        $b4 = "MSTR <<- SLV" nocase ascii wide

 

    condition:

        filesize < 3MB and

        uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and

        (1 of ($a*) and 1 of ($b*))

}

付録: マップされた構成の例

マッピングされた構成の例
表 3: マップされた構成の例

付録: 公開されているサンプル マッピングから ABB Distribution Recloser Relay への IOA の例

IOA

説明

1101

50BFT:InPosCIsA ステータス

1102

50BFT:InPosCIsB ステータス

1103

50BFT:InPosCIsC ステータス

1104

50BFT:InStr ステータス

1105

50BFT: InStrA ステータス

1106

50BFT:InStrB ステータス

1107

50BFT:InStrC ステータス

1108

50BFT:一般

1201

  

1202

  

1203

  

1204

  

1250

  

1251

  

1252

  

1253

  

1254

  

1255

  

1256

  

1257

  

1258

  

1259

  

1260

  

1261

  

1262

  

1263

  

1264

  

1265

  

1301

  

1302

  

1304

 

1401

  

1402

  

1403

1404

130202

160921

160923

160924

160925

  

160927

  

160928

  

190202

  

260202

  

260901

  

260902

  

260903

  

260904

  

260905

  

260906

  

260907

  

260908

  

260909

  

260910

  

260911

  

260912

  

260914

  

260915

  

260916

  

260918

  

260920

  

290202

  

338501

  

謝辞

この調査は、署名欄に記載されていない多くの人々の努力のおかげで可能になりました。 CERT UA と ESET に心から感謝します。 Josh Triplett、Conor Quigley、および Wesley Mok に特に感謝します。

参照: https://www.mandiant.com/resources/blog/industroyer-v2-old-malware-new-tricks

Comments

Copied title and URL