Freigeben über


Anwenden von Zero Trust-Prinzipien zum Segmentieren des Azure-Netzwerks mithilfe von Datenverkehrsanalysen

Zero Trust ist eine Sicherheitsstrategie. Es handelt sich nicht um ein Produkt oder einen Dienst, sondern um einen Ansatz beim Entwerfen und Implementieren der folgenden Sicherheitsprinzipien.

Prinzip BESCHREIBUNG
Explizit verifizieren Ziehen Sie zur Authentifizierung und Autorisierung immer alle verfügbaren Datenpunkte heran.
Verwenden Sie den Zugriff mit den geringsten Rechten Beschränken Sie den Benutzerzugriff mit Just-In-Time und Just-Enough-Access (JIT/JEA), risikobasierten adaptiven Richtlinien und Datenschutz.
Gehe von einem Verstoß aus Minimieren Sie den Explosionsradius und segmentieren Sie den Zugriff. Überprüfen Sie die End-to-End-Verschlüsselung, und verwenden Sie Analysen, um Sichtbarkeit zu erhalten, Bedrohungserkennung zu fördern und Abwehrmaßnahmen zu verbessern.

Mit Zero Trust wechseln Sie von einer Vertrauen-durch-Voreinstellung-Perspektive zu einer Vertrauen-durch-Ausnahme-Perspektive. Eine integrierte Funktion zum automatischen Verwalten dieser Ausnahmen und Warnungen ist wichtig. Sie können Bedrohungen einfacher erkennen, auf Bedrohungen reagieren und unerwünschte Ereignisse in Ihrer Organisation verhindern oder blockieren.

Die Cloudnetzwerktechnologie von Azure umfasst mehrere Segmentierungsebenen, die als Grenzen oder Vertrauenszonen fungieren können. Weitere Informationen zum Segmentieren Ihres Azure-basierten Netzwerks mithilfe von Zero Trust-Prinzipien finden Sie unter Anwenden von Zero Trust-Prinzipien auf die Segmentierung von Azure-basierter Netzwerkkommunikation.

Zero Trust-Reifemodell

Das Zero Trust-Reifemodell (Zero Trust Maturity Model, ZTMM) der Cybersecurity & Infrastructure Security Agency (CISA) basiert auf fünf Säulen, die Funktionen umfassen, um die Zero Trust-Schutzbereiche zu verbessern. Weitere Informationen finden Sie unter Konfigurieren von Microsoft Cloud Services für das Zero Trust-Reifemodell der CISA.

  • Identität
  • Geräte
  • Netzwerke
  • Anwendungen und Workloads
  • Daten

Die Säulen umfassen die vier ZTMM-Phasen. Weitere Informationen finden Sie unter ZTMM-Phasen.

  • Herkömmlich
  • Anfänglich
  • Fortgeschritten
  • Optimal

Die vier Stufen gelten für die Säule Netzwerke wie folgt:

Etappe Säule „Netzwerke“
Herkömmlich – Großer Umkreis/Makrosegmentierung
– Begrenzte Resilienz, Regelsätze und Konfiguration manuell verwaltet
Anfänglich – Anfängliche Isolation kritischer Workloads
– Netzwerkfunktionen verwalten Verfügbarkeitsanforderungen für mehr Anwendungen
– Partielle dynamische Netzwerkkonfiguration
Fortgeschritten – Erweiterter Mechanismus für Isolation und Resilienz
– Konfigurationen passen sich basierend auf risikobewussten Anwendungsprofilbewertungen an
Optimal – Verteilen von Mikroperimetern mit Just-in-Time- und Just-Enough-Zugriffssteuerungen und verhältnismäßiger Resilienz
– Konfiguration entwickelt sich gemäß den Anwendungsprofilanforderungen weiter

Wie können Sie Datenverkehrsanalysen mit Traffic Analytics verwenden, um Zero Trust-Sicherheit zu erreichen?

Traffic Analytics bietet Einblicke in Netzwerkdatenverkehrsflüsse innerhalb Ihrer Azure-Umgebung. Das Feature verwendet virtuelle Netzwerkflussprotokolle und führt eine Aggregation durch, um das Datenvolumen zu reduzieren, während wichtige Datenverkehrsmuster beibehalten werden. Die aggregierten Protokolle werden dann mit Geografie-, Sicherheits- und Topologieinformationen erweitert und in einem Log Analytics-Arbeitsbereich gespeichert.

Datenverkehrsmuster werden mithilfe integrierter Dashboards visualisiert, wobei die Einblicke in den Datenverkehr mithilfe von Azure Workbooks flexibel angepasst werden können. Mit dem Dashboard zur Datenverkehrsanalyse können Sie außerdem Benachrichtigungen konfigurieren und Untersuchungen als Reaktion auf potenzielle Sicherheitsverletzungen initiieren.

  • Überwachen des Netzwerkdatenverkehrs: Erfassen Sie eingehenden und ausgehenden Datenverkehr mithilfe von Flussprotokollen, und verwenden Sie Datenverkehrsanalysen, um diese Daten zu verarbeiten und zu visualisieren. Erhalten Sie Einblicke in Kommunikationsmuster, Bandbreitennutzung und Datenverkehrsflüsse über Workloads hinweg.

  • Identifizieren von Workloadkommunikationsmustern: Analysieren Sie Datenverkehrsanalysedaten, um zu verstehen, wie Ressourcen innerhalb und übergreifend in Mandanten, Abonnementsregionen, virtuellen Netzwerken, Subnetzen, Protokollen, sicherheitsbasierten Gruppen, Diensten und Anwendungen kommunizieren. Identifizieren Sie unnötige oder anomale Datenverkehrsmuster, die auf potenzielle Sicherheitsrisiken hinweisen könnten.

  • Aufschlussreiche Visualisierungen: Verwenden Sie integrierte und anpassbare Visualisierungen in der Datenverkehrsanalyse, um Datenverkehrsmuster zu untersuchen und Anomalien effektiver zu erkennen.

  • Erkennen von kompromittierten IP-Adressen/Ressourcen: Verwenden Sie Datenverkehrsanalysen, um potenziell kompromittierte IP-Adressen oder Ressourcen zu identifizieren und so die Sicherheit zu stärken und die Leistung aufrechtzuerhalten.

Wie stellen Sie Zero Trust Segmentation (ZTS) mit Traffic Analytics bereit?

Für den ersten kritischen Schritt zur Bereitstellung der Zero-Trust-Segmentierung in einer bestehenden oder neuen Azure-Bereitstellung ist Folgendes erforderlich:

  • Beobachten Sie die Muster durch die Datenverkehrsanalyse: Analysieren Sie Flussprotokolle, um die Verkehrsmuster zu identifizieren, die für Ihre Workload unerlässlich sind.

  • Beginnen Sie mit standardmäßiger Verweigerungshaltung: Sie beginnt mit dem Entfernen oder Deaktivieren aller vorhandenen eingehenden und ausgehenden Regeln, die den Datenverkehr allgemein zulassen (z. B. "Alle zulassen", "Zulassen") und das Hinzufügen expliziter Verweigerungsregeln für eingehenden und ausgehenden Datenverkehr

  • Erstellen Sie selektive Zulassungsregeln: Definieren Sie basierend auf Erkenntnissen aus Traffic Analytics Regeln, die nur den beobachteten und erforderlichen Datenverkehr explizit zulassen. Mit diesem Ansatz wird sichergestellt, dass nur überprüfter, erforderlicher Datenverkehr zulässig ist, und zwar entsprechend dem Zero Trust-Prinzip der expliziten Überprüfung.

In den folgenden Abschnitten werden wichtige Szenarien hervorgehoben, in denen Die Datenverkehrsanalyse die Segmentierung unterstützt, um zero Trust-Prinzipien in Azure zu implementieren.

Szenario 1: Erkennen von Datenverkehr, der durch riskante oder eingeschränkte Regionen fließt

Verwenden Sie die Datenverkehrsanalyse, um eingehenden oder ausgehenden Datenverkehr in Regionen mit hohem Risiko zu erkennen, wie durch die Richtlinien Ihrer Organisation definiert. Sie können z. B. den eingehenden oder ausgehenden Datenverkehr in Regionen identifizieren, die gemäß den Sicherheits- und Complianceanforderungen Ihrer Organisation als vertraulich oder eingeschränkt eingestuft werden.

let ExternalIps = NTAIpDetails 
    | where Location in ("country1", "country2") 
    | where FlowType in ("MaliciousFlow", "ExternalPublic")
        //and FlowIntervalStartTime between (datetime('{timeInterval') .. datetime('{timeInterval'))
    | project-away
        TimeGenerated,
        SubType,
        FaSchemaVersion,
        FlowIntervalEndTime,
        FlowIntervalStartTime,
        FlowType,
        Type 
    | distinct Ip, ThreatType, DnsDomain, ThreatDescription, Location, PublicIpDetails, Url;
    let ExternalFlows =  NTANetAnalytics 
    //| where FlowStartTime between (datetime('{timeInterval}') .. datetime('{timeInterval}'))
    | where SubType == "FlowLog" and FlowType in ("ExternalPublic", "MaliciousFlow")
    | extend PublicIP = SrcPublicIps
    | extend ExtractedIPs = split(PublicIP, " ") // Split IPs by spaces
    | mv-expand ExtractedIPs // Expand into multiple rows
    | extend IP = tostring(split(ExtractedIPs, "|")[0])
    | extend AllSrcIps = coalesce(SrcIp, IP)
    | project 
        AllSrcIps,
        DestIp,
        SrcVm,
        DestVm,
        SrcSubscription,
        DestSubscription,FlowType; 
let SrcMalicious = ExternalFlows 
    | lookup kind=inner ExternalIps on $left.AllSrcIps == $right.Ip
    | extend CompromisedVM = iff(isnotempty(DestVm),strcat("/subscriptions/",DestSubscription,"/resourceGroups/",tostring(split(DestVm,"/")[0]),"/providers/Microsoft.Compute/virtualMachines/",tostring(split(DestVm,"/")[1])),'')
    | project
        SrcExternalIp = strcat('🌐 ', AllSrcIps),      
        DestCompromisedIp = strcat('🖥️', DestIp),
        CompromisedVM,
        PublicIpDetails,
        FlowType,
        ThreatType,
        DnsDomain,
        ThreatDescription,
        Location,
        Url;
SrcMalicious
| summarize count() by SrcExternalIp ,DestCompromisedIp, CompromisedVM,
        PublicIpDetails,
        FlowType,
        ThreatType,
        DnsDomain,
        ThreatDescription,
        Location,
        Url

Szenario 2: Erreichen der Datenverkehrssegmentierung basierend auf Azure-Dienstinteraktionen

Verwenden Sie Datenverkehrsanalysen, um einen umfassenden Überblick darüber zu erhalten, wie verschiedene Workloads mit Azure-Diensten interagieren. Beispielsweise können SAP-Workloads mit der Azure Arc-Infrastruktur kommunizieren, während andere Workloads, z. B. Entwicklungsumgebungen oder Produktivitätsdienste, mit Azure Monitor interagieren. Diese Erkenntnisse helfen Ihnen, Dienstabhängigkeiten zu verstehen, unerwartete oder anomale Datenverkehrsmuster zu erkennen und präzisere Sicherheitsrichtlinien durch Mikrosegmentierung zu erzwingen.

let SpecificServices = NTAIpDetails
| where FlowType == "AzurePublic"
| where FlowIntervalStartTime > ago(4h)
| project Ip, PublicIpDetails;
let PublicIPs = NTANetAnalytics
| where SubType == 'FlowLog'
| where FlowIntervalStartTime > ago(4h)
| where(isnotempty(SrcPublicIps) or isnotempty(DestPublicIps))
| extend PublicIP = coalesce(SrcPublicIps, DestPublicIps), Vnet = iff(isnotempty(SrcSubnet), strcat("/subscriptions/", SrcSubscription, "/resourceGroups/", tostring(split(SrcSubnet, "/")[0]), "/providers/Microsoft.Network/virtualNetworks/", tostring(split(SrcSubnet, "/")[1])), iff(isnotempty(DestSubnet), strcat("/subscriptions/", DestSubscription, "/resourceGroups/", tostring(split(DestSubnet, "/")[0]), "/providers/Microsoft.Network/virtualNetworks/", tostring(split(DestSubnet, "/")[1])),''))
| extend ExtractedIPs = split(PublicIP, " ") // Split IPs by spaces
| mv-expand ExtractedIPs // Expand into multiple rows
| extend IP = tostring(split(ExtractedIPs, "|")[0]) // Extract IP address
| lookup kind=inner SpecificServices on $left.IP == $right.Ip
| project Vnet, PublicIpDetails;
PublicIPs
| summarize CounterValue = count() by Vnet, PublicIpDetails
| top 100 by CounterValue desc

Szenario 3: Identifizieren des Auswirkungsradius im Falle einer Netzwerkverletzung

Verwenden Sie die Datenverkehrsanalyse, um den Pfad potenziell schädlicher IP-Adressen zu verfolgen, die versuchen, mit Ihren Ressourcen zu kommunizieren. Im Falle eines kompromittierten virtuellen Computers (VM) kann die Datenverkehrsanalyse dazu beitragen, alle Kommunikationen zu bestimmen, die von diesem virtuellen Computer in den letzten 24 Stunden initiiert wurden. Dies unterstützt die Identifizierung einer potenziellen Datenexfiltration und die Begrenzung des Auswirkungsradius.

Die folgende Abfrage identifiziert alle direkten und indirekten IP-Adressen, die mit böswilligen Datenflüssen aus Risikoregionen interagieren:

let MAliciousIps = NTAIpDetails 
| where FlowIntervalStartTime between (datetime('{timeInterval:startISO}') .. datetime('{timeInterval:endISO}'))
| where FlowType == "MaliciousFlow" 
| distinct Ip; 
let MaliciousFlows =  NTANetAnalytics 
| where FlowStartTime between (todatetime('{timeInterval:startISO}') .. todatetime('{timeInterval:endISO}'))
| where SubType == "FlowLog" and FlowType == "MaliciousFlow" 
| project SrcIp, DestIp, FlowLogResourceId, TargetResourceId; 
let SrcMalicious = MaliciousFlows 
| lookup kind=leftouter MAliciousIps on $left.SrcIp == $right.Ip 
| project SrcIp, DestIp; 
let DestMalicious = MaliciousFlows 
| lookup kind=leftouter MAliciousIps on $left.DestIp == $right.Ip 
| project SrcIp, DestIp; 
let MaliciousIps = SrcMalicious 
| union DestMalicious 
| distinct *; 
let SpecificCountryIPs = NTAIpDetails 
| where Location in ("country1", "country2") 
| project Ip; 
let SrcIpCountry = SpecificCountryIPs 
| join kind=inner NTANetAnalytics on $left.Ip == $right.SrcIp 
| project SrcIp, DestIp; 
let DestIpCountry = SpecificCountryIPs 
| join kind=inner NTANetAnalytics on $left.Ip == $right.DestIp 
| project SrcIp, DestIp; 
let SpecificCountryFlows = SrcIpCountry 
| union DestIpCountry; 
let MaliciousFlowsObserved = MaliciousIps 
| union SpecificCountryFlows 
| distinct SrcIp, DestIp; 
let MaliciousFlowsTransitive = MaliciousFlowsObserved 
| join kind=inner MaliciousFlowsObserved on $left.DestIp == $right.SrcIp 
| project SrcIp, DestIp = DestIp1 
| distinct SrcIp, DestIp; 
let MaliciousFlowsObserved1 = MaliciousFlowsObserved 
| union MaliciousFlowsTransitive 
| distinct SrcIp, DestIp; 
let MaliciousFlowsTransitive1 = MaliciousFlowsObserved1 
| join kind=inner MaliciousFlowsObserved1 on $left.DestIp == $right.SrcIp 
| project SrcIp, DestIp = DestIp1 
| distinct SrcIp, DestIp; 
let MaliciousFlowsObserved2 = MaliciousFlowsObserved1 
| union MaliciousFlowsTransitive1 
| distinct SrcIp, DestIp; 
MaliciousFlowsObserved2 
| project SrcIp = strcat('🖥️ ', SrcIp), DestIp = strcat('🖥️ ', DestIp)

Szenario 4: Erzwingen von Abonnementgrenzen

Verwenden Sie die Datenverkehrsanalyse, um Abonnementgrenzen zu erzwingen und um sicherzustellen, dass der Datenverkehr zwischen verschiedenen Azure-Abonnements ordnungsgemäß segmentiert ist.

NTANetAnalytics 
| where SubType == "FlowLog"  and FlowType !in ("AzurePublic","ExternalPublic","Unknown","UnknownPrivate") // Filter to flows for which we know the Subscription Details
| where FlowStartTime between (start .. end) 
| where AclGroup !contains "Unspecified" 
|extend Dest = iff(isnotempty(DestSubnet),strcat("/subscriptions/",DestSubscription,"/resourceGroups/",tostring(split(DestSubnet,"/")[0]),"/providers/Microsoft.Network/virtualNetworks/",tostring(split(DestSubnet,"/")[1])),'')
| extend Src = iff(isnotempty(SrcSubnet),strcat("/subscriptions/",SrcSubscription,"/resourceGroups/",tostring(split(SrcSubnet,"/")[0]),"/providers/Microsoft.Network/virtualNetworks/",tostring(split(SrcSubnet,"/")[1])),'')
| extend SrcSubscription = strcat("/subscriptions/",SrcSubscription), DestSubscription = strcat("/subscriptions/",DestSubscription)
| where SrcSubscription != DestSubscription // Cross Subscription
| summarize Flows = sum(CompletedFlows) by Src, Dest, SrcSubscription, DestSubscription, AclGroup,AclRule, FlowType
//| top 10 by Flows