マルウェアとは、コンピューター システム、ネットワーク、またはデバイスのセキュリティと機能の損傷、中断、または侵害を引き起こすために設計されたソフトウェアです。 ウイルス、ワーム、トロイの木馬、ランサムウェア、スパイウェア、アドウェア、ルートキットなど、さまざまな種類の脅威が含まれます。 マルウェアは、機密データの盗み、ファイルの暗号化または削除、不要な広告の表示、パフォーマンスの低下、デバイスの制御など、さまざまな悪影響を及ぼす可能性があります。
システムまたはネットワークからマルウェアを特定して排除することが重要です。 これを行うには、シグネチャベース、動作ベース、ヒューリスティックベース、機械学習ベースの手法など、さまざまな検出手法を採用します。 マルウェア検出は、ユーザーのセキュリティとプライバシー、およびシステムとネットワークの整合性と可用性を保護するために不可欠です。
Azure Firewall IDPS 機能は、既定でマルウェアを自動的に検出して拒否し、クラウド ワークロードが感染するのを防ぐことができます。 事前構築済みの検出クエリと Microsoft Sentinel を使用して、自動検出と応答を使用することで、この機能をさらに強化できます。 Azure Firewall の定義済みの KQL 検出クエリを使用して、 Coinminer、 Cl0p、 Sunburst など、Azure Firewall ログに含まれる一般的なマルウェアを検出できます。
これらの検出により、内部ネットワーク上のマシンが、検出ルール クエリで定義されている既知の侵害インジケーター (IOC) にリンクされているインターネット上のドメイン名または IP アドレスへの接続を要求すると、セキュリティ チームは Microsoft Sentinel アラートを受信できます。 真陽性は IOC と見なす必要があります。 その後、セキュリティ インシデント対応チームは、応答を開始し、これらの検出シグナルに基づいて適切なカスタム修復アクションを実装できます。
次のクエリを使用して分析ルールをデプロイする手順については、「 Microsoft Sentinel と Azure Web Application Firewall を使用した新しい脅威の検出」を参照してください。
一般的なマルウェアの悪用
現在のネットワークでは、次のマルウェアの悪用が一般的です。
Coinminer
最近の暗号通貨マイニングの急増により、高性能なネットワーク処理装置の必要性が高まっています。 分散型コンピューティングは、法的および違法なコンテキストの両方で、マイニング ソフトウェアの拡大と広範な可用性を実現しています。
Coinminer は、無意識の被害者のコンピューターのハードウェア リソースを暗号化マイニングに使用するマルウェアの種類を表します。 疑いのないユーザーの PC のグラフィックス処理装置 (GPU) は、暗号通貨のマイニングとトランザクション ブロック ハッシュの計算を目的としたさまざまなスクリプトを実行するために使用されます。
これらの脅威のリスクを軽減するには、一般的なエントリ ポイントでプロアクティブな対策を実装します。 このアプローチには、Jupyter ソフトウェアを適切な認証でデプロイすること、脆弱性を最小限に抑えるための Web アプリケーションの構成と更新、Docker への外部アクセスの制御、および追加のゼロ トラスト原則の遵守が含まれます。
次の検出クエリを使用して、Azure Firewall ログを使用してこのマルウェアを自動的に検出して応答する分析ルールを Microsoft Sentinel に作成します。
// Coinminer Detection Rule
// Detects suspicious traffic patterns associated with coinmining activity in Azure Firewall logs
// Known coinminer ports and domains
let coinminerPorts = dynamic(["2375", "2376", "2377", "4243", "4244"]);
let coinminerdomains = dynamic(["teamtnt.red", "kaiserfranz.cc", "45.9.148.123"]);
union isfuzzy=true
// 1. Legacy diagnostics logs - port-based detection (Application rules)
(AzureDiagnostics
| where ResourceType == "AZUREFIREWALLS"
| where Category == "AzureFirewallApplicationRule"
| parse msg_s with Protocol 'request from ' SourceHost ':' SourcePort 'to ' DestinationHost ':' DestinationPort '. Action:' Action
| extend action_s = column_ifexists("action_s", ""), transactionId_g = column_ifexists("transactionId_g", "")
| where DestinationPort in (coinminerPorts)
| summarize CoinminerAttempts = count() by DestinationHost, DestinationPort
| where CoinminerAttempts > 10 // Adjust threshold as needed
),
// 2. Structured logs - port-based detection (IDPS signatures)
(AZFWIdpsSignature
| where DestinationPort in (coinminerPorts)
| summarize CoinminerAttempts = count() by DestinationIp, DestinationPort
| where CoinminerAttempts > 10 // Adjust threshold as needed
),
// 3. Legacy diagnostics logs - domain-based detection (DNS proxy)
(AzureDiagnostics
| where ResourceType == "AZUREFIREWALLS"
| where Category == "AzureFirewallDnsProxy"
| parse msg_s with "DNS Request: " ClientIP ":" ClientPort " - " QueryID " " Request_Type " " Request_Class " " Request_Name ". " Request_Protocol " " Request_Size " " EDNSO_DO " " EDNS0_Buffersize " " Response_Code " " Response_Flags " " Response_Size " " Response_Duration
| where Request_Name has_any(coinminerdomains)
| extend DNSName = Request_Name, IPCustomEntity = ClientIP
),
// 4. Legacy diagnostics logs - domain-based detection (Application rules)
(AzureDiagnostics
| where ResourceType == "AZUREFIREWALLS"
| where Category == "AzureFirewallApplicationRule"
| parse msg_s with Protocol ' request from ' SourceHost ':' SourcePort 'to' DestinationHost ':' DestinationPort '. Action:' Action
| where isnotempty(DestinationHost)
| where DestinationHost has_any(coinminerdomains)
| extend DNSName = DestinationHost, IPCustomEntity = SourceHost
),
// 5. Structured logs - domain-based detection (Application rules)
(AZFWApplicationRule
| where isnotempty(Fqdn)
| where Fqdn has_any(coinminerdomains)
| extend DNSName = Fqdn, IPCustomEntity = SourceIp
),
// 6. Structured logs - domain-based detection (DNS queries)
(AZFWDnsQuery
| where isnotempty(QueryName)
| where QueryName has_any(coinminerdomains)
| extend DNSName = QueryName, IPCustomEntity = SourceIp
),
// 7. Structured logs - domain-based detection (IDPS signatures)
(AZFWIdpsSignature
| where DestinationIp has_any(coinminerdomains)
| extend DNSName = DestinationIp, IPCustomEntity = SourceIp
),
// 8. Structured logs - signature description-based detection (IDPS)
(AZFWIdpsSignature
| where Description contains "coinminer"
| extend DNSName = DestinationIp, IPCustomEntity = SourceIp
)
Cl0p
Cl0p は、被害者のファイルに固有の暗号化キーを適用し、ファイルの暗号化解除のための身代金を要求することによって動作するランサムウェアです。 これは、データ転送ソフトウェアMOVEitの脆弱性を使用し、 cl0pを提供することを期待して、多数の従業員にスピアフィッシングメールを送信します。 その後、 truebot や dewmode などのツールを使用して、ネットワーク内を横方向に移動し、データを流出させます。 ランサムウェアは、AES-256 暗号化アルゴリズムを使用してファイルを暗号化します。
Cl0p 脆弱性には、CVE-2023-35036、CVE-2023-34362、CVE-2023-35708 が含まれます。 2023年6月、FBIとCISAはこの悪用に関するプレスリリースを発表した。
cl0pランサムウェアの影響は、米国中西部および政府機関の複数の大学に登録されています。 航空会社、テレビネットワーク、英国を拠点とする小売店は、 cl0p ランサムウェア集団の最新の被害者です。
次の検出クエリを使用して、Azure Firewall ログを使用してこのマルウェアを自動的に検出して応答する分析ルールを Microsoft Sentinel に作成します。
Cl0p の検出クエリ: Sentinel/検出用ファイアウォール マルウェア検出 - Cl0p.json のルール分析クエリ
Sunburst マルウェア
このマルウェアは、ドメイン生成アルゴリズム (DGA) を使用して検出を回避し、コマンドアンドコントロールバックドア攻撃を確立します。 構文で使用されるパターンとドメイン情報の絶え間ない変更により、セキュリティ ツールがマルウェアによって使用されるドメインを識別することが困難になります。
次の検出クエリを使用して、Azure Firewall ログを使用してこのマルウェアを自動的に検出して応答する分析ルールを Microsoft Sentinel に作成します。
Sunburst マルウェア検出クエリ: Sentinel/検出用ファイアウォールマルウェア検出 - Sunburst.jsonの分析ルールクエリ