Udostępnij przez


Stosowanie zasad Zero Trust w celu segmentowania sieci platformy Azure za pośrednictwem analizy ruchu

Zero Trust to strategia zabezpieczeń. Nie jest to produkt ani usługa, ale podejście do projektowania i implementowania następującego zestawu zasad zabezpieczeń.

Zasada Opis
Zweryfikuj jawnie Zawsze uwierzytelniaj się i autoryzuj na podstawie wszystkich dostępnych punktów danych.
Korzystanie z dostępu z najmniejszymi uprawnieniami Ogranicz dostęp użytkowników za pomocą zasad Just-In-Time i Just-Enough-Access (JIT/JEA), zasad adaptacyjnych opartych na ryzyku i ochrony danych.
Przyjmij naruszenie Zminimalizuj promień wybuchu i segmentuj dostęp. Zweryfikuj kompleksowe szyfrowanie i korzystaj z analizy, aby uzyskać widoczność, zwiększyć wykrywanie zagrożeń i poprawić ochronę.

W modelu Zero Trust odchodzisz od perspektywy zaufania domyślnego do zasady zaufania na podstawie wyjątków. Zintegrowana funkcja automatycznego zarządzania tymi wyjątkami i alertami jest ważna. Można łatwiej wykrywać zagrożenia, reagować na zagrożenia i zapobiegać niepożądanym zdarzeń w organizacji lub blokować je.

Sieć w chmurze platformy Azure została zaprojektowana z wieloma warstwami segmentacji, które mogą działać jako granice lub strefy zaufania. Aby uzyskać więcej informacji na temat segmentowania sieci opartej na platformie Azure przy użyciu zasad Zero Trust, zobacz Stosowanie zasad Zero Trust w celu segmentowania komunikacji sieciowej opartej na platformie Azure.

Model dojrzałości w ramach zerowego zaufania

Model Dojrzałości Zero Trust (ZTMM) stworzony przez Cybersecurity & Infrastructure Security Agency (CISA) opiera się na pięciu filarach obejmujących funkcje zwiększające obszary zabezpieczeń Zero Trust. Aby uzyskać więcej informacji, zobacz Configure Microsoft cloud services for the CISA Zero Trust Maturity Model (Konfigurowanie usług w chmurze firmy Microsoft dla modelu dojrzałości zero trustu CISA)

  • Tożsamość
  • Urządzenia
  • Sieci
  • Aplikacje i obciążenia
  • Dane

Filary obejmują cztery etapy podróży ZTMM. Aby uzyskać więcej informacji, zobacz Etapy podróży programu ZTMM.

  • Tradycyjny
  • Inicjał
  • Zaawansowany
  • Optymalny

Cztery etapy mają zastosowanie do filaru Sieci w następujący sposób:

Etap Filar sieci
Tradycyjny - Duży obwód / makrosegmentacja
— Ograniczona odporność i ręcznie zarządzane zestawy reguł i konfiguracja
Inicjał - Początkowa izolacja krytycznych obciążeń
— Możliwości sieci zarządzają wymaganiami dotyczącymi dostępności dla większej liczby aplikacji
- Częściowa konfiguracja sieci dynamicznej
Zaawansowany - Rozszerzanie mechanizmu izolacji i odporności
— Konfiguracje są dostosowywane na podstawie ocen profili aplikacji z uwzględnieniem ryzyka
Optymalny - Dystrybuowanie mikro-perymetru za pomocą just-in time i odpowiednich kontroli dostępu oraz proporcjonalnej odporności
— Konfiguracja ewoluuje zgodnie z potrzebami profilu aplikacji

Jak można użyć analizy ruchu w celu osiągnięcia zabezpieczeń Zero Trust?

Analiza ruchu zapewnia wgląd w przepływy ruchu sieciowego w środowisku platformy Azure. Używa dzienników przepływu sieci wirtualnej i wykonuje agregację w celu zmniejszenia ilości danych przy zachowaniu kluczowych wzorców ruchu. Zagregowane dzienniki są następnie wzbogacone o informacje geograficzne, zabezpieczenia i topologię oraz przechowywane w obszarze roboczym usługi Log Analytics.

Wzorce ruchu są wizualizowane przy użyciu wbudowanych pulpitów nawigacyjnych z elastycznością dostosowywania szczegółowych informacji o ruchu przy użyciu skoroszytów platformy Azure. Pulpit nawigacyjny analizy ruchu umożliwia również konfigurowanie alertów i inicjowanie badań w odpowiedzi na potencjalne naruszenia zabezpieczeń.

  • Monitorowanie ruchu sieciowego: Przechwytywanie ruchu przychodzącego i wychodzącego przy użyciu dzienników przepływu oraz używanie analizy ruchu do przetwarzania i wizualizowania tych danych. Uzyskaj wgląd w wzorce komunikacji, użycie przepustowości i przepływy ruchu między obciążeniami.

  • Identyfikuj wzorce komunikacji obciążeń: Analizuj dane analityczne dotyczące ruchu, aby zrozumieć, w jaki sposób zasoby komunikują się wewnątrz i pomiędzy dzierżawami, regionami subskrypcyjnymi, sieciami wirtualnymi, podsieciami, protokołami, grupami opartymi na zabezpieczeniach, usługami i aplikacjami. Zidentyfikuj niepotrzebne lub nietypowe wzorce ruchu, które mogą wskazywać na potencjalne zagrożenia bezpieczeństwa.

  • Szczegółowe wizualizacje: Użyj wbudowanych i dostosowywalnych wizualizacji w analizie ruchu, aby efektywniej eksplorować wzorce ruchu i wykrywać anomalie.

  • Wykrywanie naruszonych adresów IP/zasobów: Użyj analizy ruchu, aby zidentyfikować potencjalnie naruszone adresy IP lub zasoby, co pomaga zwiększyć bezpieczeństwo i utrzymać wydajność.

Jak wdrożyć segmentację zero trust (ZTS) za pomocą analizy ruchu?

Aby wdrożyć Segmentację Zero Trust jako pierwszy i krytyczny krok w istniejącym lub nowym wdrożeniu platformy Azure, użytkownik musi

  • Obserwuj wzorce za pomocą analizy ruchu: analizuj dzienniki przepływu, aby zidentyfikować wzorce ruchu, które są niezbędne dla obciążenia pracą.

  • Zacznij od domyślnej zasady odmowy: zaczyna się od usuwania lub wyłączania wszystkich istniejących reguł ruchu przychodzącego i wychodzącego, które zezwalają na ruch w szerokim zakresie (np. Zezwalaj na wszystko, Zezwalaj) i a następnie dodanie jawnych reguł odmowy zarówno dla ruchu przychodzącego, jak i wychodzącego

  • Tworzenie reguł zezwalania selektywnego: na podstawie szczegółowych informacji z analizy ruchu zdefiniuj reguły, które jawnie zezwalają tylko na obserwowany i niezbędny ruch. Takie podejście gwarantuje, że dozwolony jest tylko zweryfikowany, wymagany ruch, zgodnie z zasadą Zero Trust jawnej weryfikacji.

W poniższych sekcjach przedstawiono kluczowe scenariusze, w których analiza ruchu obsługuje segmentację, aby ułatwić implementowanie zasad zero trustu na platformie Azure.

Scenariusz 1. Wykrywanie ruchu przepływającego przez ryzykowne lub ograniczone regiony

Analiza ruchu służy do wykrywania ruchu przychodzącego lub wychodzącego do regionów wysokiego ryzyka zgodnie z definicją zasad organizacji. Można na przykład zidentyfikować ruch przepływujący do lub z regionów uważanych za poufny lub ograniczony na podstawie wymagań organizacji dotyczących zabezpieczeń i zgodności.

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

Scenariusz 2. Osiągnięcie segmentacji ruchu na podstawie interakcji z usługą platformy Azure

Analiza ruchu umożliwia uzyskanie wglądu w sposób interakcji różnych obciążeń z usługami platformy Azure. Na przykład obciążenia SAP mogą komunikować się z infrastrukturą usługi Azure Arc, podczas gdy inne obciążenia, takie jak środowiska deweloperskie lub usługi zwiększające produktywność, współdziałają z usługą Azure Monitor. Te szczegółowe informacje ułatwiają zrozumienie zależności usług, wykrywanie nieoczekiwanych lub nietypowych wzorców ruchu oraz wymuszanie bardziej szczegółowych zasad zabezpieczeń za pośrednictwem mikrosegmentacji.

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

Scenariusz 3. Identyfikowanie promienia wybuchu w przypadku naruszenia zabezpieczeń sieci

Użyj analizy ruchu, aby śledzić ścieżkę potencjalnie złośliwych adresów IP próbujących komunikować się z zasobami. W przypadku naruszonej maszyny wirtualnej analiza ruchu może pomóc w mapowaniu całej komunikacji zainicjowanej przez maszynę wirtualną w ciągu ostatnich 24 godzin, co pomaga zidentyfikować potencjalne eksfiltrację danych i ograniczyć promień wybuchu.

Następujące zapytanie identyfikuje wszystkie bezpośrednie i pośrednie adresy IP wchodzące w interakcje ze złośliwymi przepływami z lokalizacji geograficznych wysokiego ryzyka:

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)

Scenariusz 4. Wymuszanie granic subskrypcji

Użyj analizy ruchu, aby wymusić granice subskrypcji i upewnić się, że ruch między różnymi subskrypcjami platformy Azure jest prawidłowo segmentowany.

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