ナビゲーションをスキップする
BlackBerry ブログ

初期インプラントとネットワークの解析結果から、3CX 社に対するサプライチェーン攻撃の起点が 2022 年秋に遡る可能性が明らかに

原文のブログはこちらからご覧いただけます。

概要     

3 月 29 日、ビジネスコミュニケーションサプライヤの 3CX 社が侵害を受け、同社の VoIP ソフトウェア 3CXDesktopApp の複数バージョンがトロイの木馬化されて世界中に展開されたことが明らかになりました。これには、Windows® および macOS® クライアントで使用されているバージョンが含まれていました。

2023 年 3 月中旬までに複数のユーザーからアラートが報告されていましたが、ほとんどの人はそれを誤検知だと考えていました。

BlackBerry の初期評価に基づくと、3CX 社のサプライチェーンを狙った活動は 2022 年秋の初め頃に開始されていた可能性が最も高いと考えられます。

技術的解析

背景

3 月 30 日、3CX 社はセキュリティアラートを公開し、同社のアプリケーションの少なくとも一部がトロイの木馬化され、サプライチェーンを通じて顧客に配信されたと発表しました。前日の 3 月 29 日には、複数の業界関係者がこの攻撃(macOS 向けのインプラントも含む)を技術的に解析しています。

このサプライチェーン攻撃は、侵害された 3CXDesktopApp を利用する全ユーザーに影響を与える可能性があり、潜在的な被害者は世界中にいると予想されます。そこで本ブログ記事では、攻撃の背後にあるタイムラインを調査した上で、まだ議論されていない技術的側面に目を向け、それらの調査結果を明らかにします。

3CXDesktopApp とは

3CXDesktopApp は音声通話とビデオ会議を行うための正規のソフトウェア製品で、通話、ビデオ、ライブチャットの機能を提供しています。この製品は、VoIP(Voice over Internet Protocol)がまだ新興技術だった 2005 年、同年に設立されたビジネスコミュニケーションソフトウェア企業の 3CX 社によって開発されました。3CX 社の Web サイトによると、同社は約 60 万社の顧客企業を擁しており、デイリーユーザーは世界 190 カ国で 1,200 万人を超えています。

同社のソフトウェアベースの PBX 電話システムは、現在 Windows、Linux®、Android™、iOS® で利用できます。3CX 社の Web サイトには、製造、自動車、食品・飲料、接客、マネージド情報技術サービスプロバイダ(MSP)といった分野の顧客組織が掲載されています。

攻撃ベクトル

脅威アクターが 3CX 社のネットワークへの初期アクセスをどのように獲得したかは不明ですが、トロイの木馬化されたアプリの配信はサプライチェーン経由で行われています。具体的には、Windows および macOS 向けのインストーラに悪意のあるライブラリが組み込まれ、正規のアプリケーションが侵害された状態で配布されます。

このタイプの攻撃、すなわちベンダーが脅威アクターに侵害され、そのベンダーのサプライチェーン(今回の場合はソフトウェアライブラリ)にマルウェアが挿入される攻撃では、上記のような手口は特に珍しくありません。この悪意のあるソフトウェアはその後、ベンダーが気づかないうちに顧客に配布されます。

攻撃が公になる数週間前の時点で、インターネット上で複数の3CXユーザーが、3CX アプリの新バージョンをマシンにインストールする際に問題が生じることを報告していました。

図 1:3CX の最新バージョンの問題について投稿するユーザー(出典:Reddit、r/3CX)
 

武器化

感染の起点となるのは、3CX 社製 VoIP ソフトウェアのトロイの木馬化されたインストーラ(MSI)です。悪意のあるコードは、侵害された依存ファイルを介してリリースプロセスに入り込んだとされています。これは、悪意のあるコードを含むインストーラがコード署名証明書で署名されているため、正規のインストーラと見分けがつかないことを意味しています。

このインストーラには ffmpeg.dll と d3dcompiler_47.dll の改変版がバンドルされています。3CX のデスクトップクライアントを起動すると、ffmpeg.dll を含む各種の依存ファイルがロードされます。ffmpeg.dll には改変された DllMain(DLL の初期化用関数)が含まれ、この関数が d3dcompiler_47.dll に埋め込まれた悪意のあるポータブル実行可能(PE)ファイルをロードします。

ffmpeg はまず GetModuleFilenameW を呼び出し、実行中のアセンブリ(3CX デスクトップクライアントのバイナリ)のパスを取得します。次にそのパスを用いて、同じフォルダーにインストールされている d3dcompiler_47.dll の位置を特定し、d3dcompiler_47.dll の PE ヘッダーを走査してセキュリティディレクトリを見つけ出します。通常、このデータディレクトリは証明書情報を格納するために用いられますが、この改変版 DLL では、証明書データの後ろに暗号化されたシェルコード BLOB が挿入されています。ffmpeg は、16 進数のマーカー「FEEDFACE」を検索してこのシェルコード BLOB の先頭を特定し、 暗号化されたペイロードをヒープ上のバッファに読み込んで復号します。そして、バッファを復号して得られたペイロードを VirtualProtect で「実行可」としてマークし、最後にそのペイロードに実行を移します。

このペイロードは「samcli.dll」という名前が埋め込まれた反射型 PE であり、今年 1 月 10 日(現地時間)にビルドされています。

図 2:samcli.dll
 

PE がロードされると、続いてエクスポート関数 DllGetClassObject が呼び出され、コマンドライン引数で「1200 2400 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 3CXDesktopApp/18.11.1197 Chrome/102.0.5005.167 Electron/19.1.9 Safari/537.36"」が渡されます。このエクスポート関数は、ペイロードの内部で実行を続けるための新しいスレッドを開始してから呼び出し元に戻ることで、3CX ソフトウェアが通常どおり実行を継続できるようにします。

新しいスレッドにおいて、このペイロードは「manifest」というファイルにランダムなデータを書き込むか、ファイルがすでに存在する場合はそのランダムデータを読み出します。次に HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography から MachineGuid サブキーを読み出し、後にコマンドアンドコントロール(C2)通信で使用するために保存します。そして、ペイロードの通信先とすべき C2 を特定するため、まず以下の形式の URL を用いて GitHub からアイコンをダウンロードします。

hxxps://raw.githubusercontent[.]com/IconStorages/images/main/icon[1-15].ico

アイコンの番号は実行時にランダムに生成され(下図の rand() % 15 + 1)、アイコンが正常にダウンロードされるまで継続されます。

アイコンがダウンロードされると、ペイロードはマーカー「$」が見つかるまで、そのファイルを末尾から先頭に向かって検索します。

次に、このマーカーの後続データを抽出して Base64 でデコードし、さらに AES-GCM で復号して C2 の URL を得ます。そして、リクエストヘッダーで以下の Cookie を指定した POST リクエストを C2 に送信します。

__tutma={machine-guid}

ここで、machine-guid は先にレジストリから読み出していたものです。レスポンスには meta、description、URL という 3 つのフィールドが含まれることが期待されます。このレスポンスはペイロードによって構文解析され、そこからシェルコードが復号されます。シェルコードはその後メモリ上にロードされ、保護モードが「実行可」に変更された後、実行されます。

C2 サーバーがもはや稼働しておらずレスポンスが得られないため、その後のペイロードが何を意図していたのかは判断できません。

攻撃のタイムライン

ベンダーの声明によると、Update 7 でリリースされた Electron Windows App のバージョン 18.12.407 と 18.12.416 が少なくとも影響を受け、同様に macOS 版ではバージョン 18.11.1213、18.12.402、18.12.407、18.12.416 が影響を受けています。

各バージョンは開発、テスト、リリースの期間を経て公開されるため、悪意のあるインストーラが展開されている間、この攻撃を背後で操る脅威アクターがベンダーのインフラにしばらくアクセスし続けていたと考えるのが妥当です。

攻撃に使用された PE インプラントのタイムスタンプを信用するなら、以下のようなタイムラインが明らかになります。

ffmpeg.dll(トロイの木馬化された DLL)

253f3a53796f1b0fbe64f7b05ae1d66bc2b0773588d00c3d2bf08572a497fa59         2824448         2022/11/12(土) 4:12:14 - 64 ビット DLL

7986bbaee8940da11ce089383521ab420c443ab7b15ed42aed91fd31ce833896    2814976         2022/11/12(土) 4:12:14 - 64 ビット DLL

c485674ee63ec8d4e8fde9800788175a8b02d3f9416d0e763360fff7f8eb4e02         2824448         2022/11/12(土) 4:12:14 - 64 ビット DLL

3CXDesktopApp.exe(侵害されたインストーラ)

dde03348075512796241389dfea5560c20a3d2a2eac95c894e7bbed5e85a0acc     149268224      2022/11/30(水) 15:56:23 - 64 ビット EXE

fad482ded2e25ce9e1dd3d3ecc3227af714bdfbbde04347dbc1b21d6a3670405      149268224      2022/11/30(水) 15:56:23 - 64 ビット EXE

samcli.dll(ペイロード)

f5fdefaa5321e2cea02ef8b479de8ec3c5505e956ea1484c84a7abb17231fe24           275627          2023/01/11(水) 2:21:42 - 64 ビット DLL

このタイムスタンプが改変されていないのであれば、トロイの木馬化はおそらく 2022 年 11 月初旬までには開始されていたことになります。この場合、最初の侵入は、さらに早い時点で行われていた可能性があります。

ネットワークインフラストラクチャ

サンプルとネットワークトラフィックの解析結果から、注目すべきドメインがいくつか明らかになりました。これは参照用のリストであり、キャンペーンとの関連性が確定できていない一部のドメインだけを含んでいます。

ドメイン/IP

初検知日

pbxsources[.]com

2023/01/04

officestoragebox[.]com

2022/11/17(再利用ドメイン)

visualstudiofactory[.]com

2022/11/17

azuredeploystore[.]com

2022/12/07

msstorageboxes[.]com

2022/12/09

officeaddons[.]com

2022/12/12(再利用ドメイン)

sourceslabs[.]com

2022/12/09

pbxcloudeservices[.]com

2022/12/23

pbxphonenetwork[.]com

2022/12/26

akamaitechcloudservices[.]com

2023/01/04

図 3:攻撃の進展タイムライン(ドメインおよびインプラント)
 

標的

BlackBerry の Cylance® テレメトリによると、オーストラリア、米国、英国で攻撃の試みが記録されています。標的となっているのは、医療、製薬、情報技術、金融の各業界です。

攻撃の性質と 3CX 社の顧客基盤を踏まえると、影響を受ける可能性のある業界はさらに多岐にわたると考えられます。

まとめ

攻撃の複雑さと規模を考慮すると、この攻撃を背後で操る脅威アクターは国家である可能性が極めて高いと言えます。サプライチェーン攻撃が発生した場合、その初期の被害者数は非常に大きくなります。しかし、攻撃活動の目標である最終的なペイロードが配信されない限り、真の標的はわからないままです。本記事執筆時点では、最終的な標的の候補は明らかになっていません。これらは通常、最終段階のペイロードが配信される前に、攻撃者自らの手によって決定されます。

初期サンプルとネットワークインフラに関する当社の解析結果から、この攻撃活動の初期段階が 2022 年夏の終わりから秋の初めまでのある時点で行われていたことが示唆されています。成熟したセキュリティ運用機能を持たない多くの組織では、このようなタイプのアクティビティを検知するのは困難でしょう。検知できたとしても、管理が不十分なセキュリティソリューションから多くの誤検知が発生し、それらの検知アラートが無視されてしまうことも少なくありません。

今日の企業においては、サプライチェーン攻撃を検知・予防するための実行可能な戦略を持つことが不可欠です。これには、サイバー脅威インテリジェンスツールを用いて可視性と高精度な検知を拡張することや、さらなるフォレンジック解析のためにログを保持することも含まれます。継続的な監視と対応によって強化された防御可能なセキュリティアーキテクチャを構築すれば、第 2 段階のペイロードの実行とデータの抜き出しのリスクを大幅に軽減できるでしょう。

付録 1 – CylanceOPTICS のハンティングクエリ

「ffmpeg.dll」の作成を検知するクエリ

{
    "Name": "3CX ffmpeg File Create",
    "Description": "Detects when ffmpeg.dll file is created",
    "Id": "1cd91ca6-fbd4-4000-b4e1-2f1623e5a526",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "Windows"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "dllCreate",
            "Scope": "Global",
            "Function": "(a)",
            "FieldOperators": {
                        "a": {
                    "Type": "Contains",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetFile",
                        "data": "Path"
                        },
                        {
                        "source": "Literal",
                        "data": "ffmpeg.dll"
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetFile",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "File",
                        "SubCategory": "*",
                        "Type": "Create"
                    }
                }
            ]
        }
    ]
}
 

ffmpeg.dll による C2 通信の試行を検知するクエリ

{
    "Name": "3CX ffmpeg DNS Request",
    "Description": "Detects when ffmpeg.dll reaches out to known 3CX domains.",
    "Id": "7638ba09-1254-4573-968d-fab9ee3f9396",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "Windows"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "domainRequest",
            "Scope": "Global",
            "Function": "(a&b)",
            "FieldOperators": {
                        "a": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "InstigatingProcess",
                        "data": "Name"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "ffmpeg.dll",
                            "ffmpeg"
                        ]
                        }
                    ]
                },
                "b": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetDnsRequest",
                        "data": "Responses/A/1/QuestionName"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "3cx",
                            "akamaicontainer",
                            "akamaitechcloudservices",
                            "azuredeploystore",
                            "azureonlinecloud",
                            "azureonlinestorage",
                            "dunamistrd",
                            "glcloudservice",
                            "journalide",
                            "msedgepackageinfo",
                            "msstorageazure",
                            "msstorageboxes",
                            "officeaddons",
                            "officestoragebox",
                            "pbxcloudeservices",
                            "pbxphonenetwork",
                            "pbxsources",
                            "qwepoi123098",
                            "sbmsa",
                            "sourceslabs",
                            "visualstudiofactory",
                            "zacharryblogs"
                        ]
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetDnsRequest",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetNetworkConnection",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "Network",
                        "SubCategory": "DNS",
                        "Type": "Request"
                    }
                }
            ]
        }
    ]
}
 

システム上での libffmpeg.dylib の作成を検知するクエリ(macOS)

{
    "Name": "macOS 3CX ffmpeg File Create",
    "Description": "Detects when libffmpeg.dylib file is created",
    "Id": "5ef0fb47-2102-4351-9d3a-4872dd96734a",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "macOS"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "dylibCreate",
            "Scope": "Global",
            "Function": "(a)",
            "FieldOperators": {
                        "a": {
                    "Type": "Contains",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetFile",
                        "data": "Path"
                        },
                        {
                        "source": "Literal",
                        "data": "libffmpeg.dylib"
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetFile",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "File",
                        "SubCategory": "*",
                        "Type": "Create"
                    }
                }
            ]
        }
    ]
}
 

libffmpeg.dylib による C2 通信の試行を検知するクエリ(macOS)

{
    "Name": "macOS 3CX libffmpeg DNS Request",
    "Description": "Detects when libffmpeg.dylib reaches out to known 3CX domains.",
    "Id": "0072eda0-c235-4345-aaf3-5905cb1c0806",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "macOS"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "domainRequest",
            "Scope": "Global",
            "Function": "(a&b)",
            "FieldOperators": {
                        "a": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "InstigatingProcess",
                        "data": "Name"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "libffmpeg.dylib",
                            "libffmpeg"
                        ]
                        }
                    ]
                },
                "b": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetDnsRequest",
                        "data": "Responses/A/1/QuestionName"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "3cx",
                            "akamaicontainer",
                            "akamaitechcloudservices",
                            "azuredeploystore",
                            "azureonlinecloud",
                            "azureonlinestorage",
                            "dunamistrd",
                            "glcloudservice",
                            "journalide",
                            "msedgepackageinfo",
                            "msstorageazure",
                            "msstorageboxes",
                            "officeaddons",
                            "officestoragebox",
                            "pbxcloudeservices",
                            "pbxphonenetwork",
                            "pbxsources",
                            "qwepoi123098",
                            "sbmsa",
                            "sourceslabs",
                            "visualstudiofactory",
                            "zacharryblogs"
                        ]
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetDnsRequest",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetNetworkConnection",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "Network",
                        "SubCategory": "DNS",
                        "Type": "Request"
                    }
                }
            ]
        }
    ]
}
 

Windows に対する 3CX 攻撃で使用される C2 への汎用リクエストを検知するクエリ

{
    "Name": "3CX DNS Request",
    "Description": "Detects when a dns request is made to known 3CX domains.",
    "Id": "6abb19ad-9490-488f-a9e0-dc51694d4b1b",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "Windows"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "domainRequest",
            "Scope": "Global",
            "Function": "(a)",
            "FieldOperators": {
                        "a": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetDnsRequest",
                        "data": "Responses/A/1/QuestionName"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "3cx",
                            "akamaicontainer",
                            "akamaitechcloudservices",
                            "azuredeploystore",
                            "azureonlinecloud",
                            "azureonlinestorage",
                            "dunamistrd",
                            "glcloudservice",
                            "journalide",
                            "msedgepackageinfo",
                            "msstorageazure",
                            "msstorageboxes",
                            "officeaddons",
                            "officestoragebox",
                            "pbxcloudeservices",
                            "pbxphonenetwork",
                            "pbxsources",
                            "qwepoi123098",
                            "sbmsa",
                            "sourceslabs",
                            "visualstudiofactory",
                            "zacharryblogs"
                        ]
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetDnsRequest",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetNetworkConnection",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "Network",
                        "SubCategory": "DNS",
                        "Type": "Request"
                    }
                }
            ]
        }
    ]
}
 

macOS に対する 3CX 攻撃で使用される C2 への汎用リクエストを検知するクエリ

{
    "Name": "macOS 3CX DNS Request",
    "Description": "Detects when a dns request is made to known 3CX domains.",
    "Id": "a2ca3af8-778d-4a6e-ac05-400ee2bf2ae6",
    "Version": 1,
    "SchemaVersion": 1,
    "RuleSource": "Cylance",
    "ObjectType": "DetectionRule",
    "Severity": "High",
    "TBM": "High",
    "Product": {"Name": "CylanceOPTICS"},
    "Plugin": {"Name": "OpticsDetector"},
    "OperatingSystems": [{"Name": "macOS"}],
    "PostCompletionActions": ["GenerateDetectionEvent"],   
    "AlertVolume": "TBD",
    "MaximumConcurrentActivations": 10,
    "ActivationLifetimeLimit": "00:10:00",
    "ActivationCanUtilizeDeviceStateEvents": false,
    "AllowMultipleActivationsPerContext": true,
    "States": [
        {
            "Name": "domainRequest",
            "Scope": "Global",
            "Function": "(a)",
            "FieldOperators": {
                        "a": {
                    "Type": "ContainsAny",
                    "OperandType": "String",
                    "Options": {"IgnoreCase": true},
                    "Operands": [
                        {
                        "source": "TargetDnsRequest",
                        "data": "Responses/A/1/QuestionName"
                        },
                        {
                        "source": "LiteralSet",
                        "data": [
                            "3cx",
                            "akamaicontainer",
                            "akamaitechcloudservices",
                            "azuredeploystore",
                            "azureonlinecloud",
                            "azureonlinestorage",
                            "dunamistrd",
                            "glcloudservice",
                            "journalide",
                            "msedgepackageinfo",
                            "msstorageazure",
                            "msstorageboxes",
                            "officeaddons",
                            "officestoragebox",
                            "pbxcloudeservices",
                            "pbxphonenetwork",
                            "pbxsources",
                            "qwepoi123098",
                            "sbmsa",
                            "sourceslabs",
                            "visualstudiofactory",
                            "zacharryblogs"
                        ]
                        }
                    ]
                }
            },
            "ActivationTimeLimit": "-0:00:00.001",
            "Actions": [
                {
                    "Type": "AOI",
                    "ItemName": "InstigatingProcess",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetDnsRequest",
                    "Position": "PostActivation"
                },
                {
                    "Type": "AOI",
                    "ItemName": "TargetNetworkConnection",
                    "Position": "PostActivation"
                }
            ],
            "HarvestContributingEvent": true,
            "Filters": [
                {
                    "Type": "Event",
                    "Data": {
                        "Category": "Network",
                        "SubCategory": "DNS",
                        "Type": "Request"
                    }
                }
            ]
        }
    ]
}
 

イベント日程
The BlackBerry Research and Intelligence Team

About The BlackBerry Research and Intelligence Team

BlackBerry の Research and Intelligence Team は、新たに生じている脅威と持続的な脅威を検証し、セキュリティ担当者とその所属企業のために、インテリジェンス解析を提供しています。