Partager via


Appliquer des principes de confiance zéro pour segmenter le réseau Azure via l’analytique du trafic

La confiance zéro est une stratégie de sécurité. Ce n’est pas un produit ou un service, mais une approche dans la conception et l’implémentation de l’ensemble de principes de sécurité suivants.

Principe Descriptif
Vérifiez explicitement. Authentifiez et autorisez toujours en fonction de tous les points de données disponibles.
Utiliser l'accès avec le moindre privilège Limitez l'accès utilisateur avec les concepts Just-In-Time (juste-à-temps) et Just-Enough-Access, des stratégies adaptatives basées sur les risques et la protection des données.
Supposer une violation Réduisez le rayon d’explosion et segmentez l’accès. Vérifiez le chiffrement de bout en bout et utilisez l'analytique pour obtenir de la visibilité, détecter les menaces et améliorer les défenses.

Avec Confiance Zéro, vous passez d’une perspective d’approbation par défaut à une approbation par exception. Une fonctionnalité intégrée permettant de gérer automatiquement ces exceptions et alertes est importante. Vous pouvez détecter plus facilement les menaces, répondre aux menaces et empêcher ou bloquer les événements indésirables au sein de votre organisation.

La mise en réseau cloud d’Azure est conçue avec plusieurs couches de segmentation qui peuvent agir comme des limites ou des zones d’approbation. Pour plus d’informations sur le segment de votre réseau Azure à l’aide de principes de confiance zéro, consultez Appliquer des principes de confiance zéro pour segmenter la communication réseau basée sur Azure.

Modèle de maturité de confiance zéro

Le modèle de maturité de confiance zéro (ZTMM) de l’Agence de sécurité de la cybersécurité et de l’infrastructure (CISA) repose sur cinq piliers qui englobent les fonctions permettant d’améliorer les zones de protection confiance zéro. Pour plus d’informations, consultez Configurer les services cloud Microsoft pour le modèle de maturité confiance zéro CISA

  • Identité
  • Dispositifs
  • Réseaux
  • Applications et charges de travail
  • Données

Les piliers s’étendent sur les quatre étapes du parcours ZTMM. Pour plus d’informations, consultez les étapes de parcours ZTMM.

  • Traditionnel
  • Initial
  • Avancé
  • Optimal

Les quatre étapes s’appliquent au pilier Réseaux comme suit :

Étape Pilier des réseaux
Traditionnel - Large périmètre / macro-segmentation
- Résilience limitée et ensembles de règles managés manuellement et configuration
Initial - Isolation initiale des charges de travail critiques
- Les fonctionnalités réseau gèrent les demandes de disponibilité pour plus d’applications
- Configuration réseau dynamique partielle
Avancé - Développer le mécanisme d’isolation et de résilience
- Les configurations s’adaptent en fonction des évaluations de profil d’application prenant en compte les risques
Optimal - Distribuer un micro-périmètre avec juste-à-temps et juste assez de contrôles d’accès et une résilience proportionnelle
- La configuration évolue pour répondre aux besoins du profil d’application

Comment utiliser l’analytique du trafic pour assurer la sécurité confiance zéro ?

Traffic Analytics fournit des insights sur les flux de trafic réseau au sein de votre environnement Azure. Il utilise les journaux de flux de réseau virtuel et effectue l’agrégation pour réduire le volume de données tout en préservant les modèles de trafic clés. Les journaux agrégés sont ensuite enrichis avec des informations géographiques, de sécurité et de topologie et stockées dans un espace de travail Log Analytics.

Les modèles de trafic sont visualisées à l’aide de tableaux de bord intégrés, avec la flexibilité nécessaire pour personnaliser les insights de trafic à l’aide de classeurs Azure. Le tableau de bord d’analyse du trafic vous permet également de configurer des alertes et de lancer des enquêtes en réponse à des violations de sécurité potentielles.

  • Surveiller le trafic réseau : Capturez le trafic entrant et sortant à l’aide des journaux de flux et utilisez l’analytique du trafic pour traiter et visualiser ces données. Obtenez des insights sur les modèles de communication, l’utilisation de la bande passante et les flux de trafic entre les charges de travail.

  • Identifier les modèles de communication de charge de travail : Analysez les données d’analyse du trafic pour comprendre comment les ressources communiquent entre les locataires, les régions d’abonnements, les réseaux virtuels, les sous-réseaux, les protocoles, les groupes, services et applications basés sur la sécurité. Identifiez les modèles de trafic inutiles ou anormales susceptibles d’indiquer des risques de sécurité potentiels.

  • Visualisations pertinentes : Utilisez des visualisations intégrées et personnalisables dans l'analyse du trafic pour explorer les modèles de trafic et détecter plus efficacement les anomalies.

  • Détecter les adresses IP/ressources compromises : Utilisez l’analytique du trafic pour identifier les adresses IP ou ressources potentiellement compromises, ce qui contribue à renforcer la sécurité et à maintenir les performances.

Comment déployer la segmentation de confiance zéro (ZTS) avec Traffic Analytics ?

Première étape critique pour déployer la segmentation Zéro Confiance sur un déploiement Azure existant ou nouveau, l'utilisateur doit

  • Observez les modèles via Traffic Analytics : analysez les journaux de flux pour identifier les modèles de trafic essentiels pour votre charge de travail.

  • Commencer par une posture de refus par défaut : il commence par supprimer ou désactiver toutes les règles entrantes et sortantes existantes qui autorisent le trafic largement (par exemple, Autoriser tout, Autoriser) et ajouter des règles de refus explicites pour le trafic entrant et sortant

  • Créez des règles d’autorisation sélectives : basées sur des insights de Traffic Analytics, définissez des règles qui autorisent explicitement le trafic observé et nécessaire. Cette approche garantit que seul le trafic validé et requis est autorisé, en s’alignant sur le principe de confiance zéro pour vérifier explicitement.

Les sections suivantes mettent en évidence les scénarios clés dans lesquels l’analytique du trafic prend en charge la segmentation pour aider à implémenter des principes de confiance zéro dans Azure.

Scénario 1 : Détecter le trafic transitant par des régions à risque ou restreintes

Utilisez l’analytique du trafic pour détecter le trafic entrant ou sortant vers des régions à haut risque, comme défini par les stratégies de votre organisation. Par exemple, vous pouvez identifier le trafic qui circule vers ou depuis des régions considérées comme sensibles ou restreintes en fonction des exigences de sécurité et de conformité de votre organisation.

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

Scénario 2 : Obtenir une segmentation du trafic basée sur les interactions de service Azure

Utilisez l’analytique du trafic pour obtenir une vue d’ensemble de la façon dont les différentes charges de travail interagissent avec les services Azure. Par exemple, les charges de travail SAP peuvent communiquer avec l’infrastructure Azure Arc, tandis que d’autres charges de travail, telles que des environnements de développement ou des services de productivité, interagissent avec Azure Monitor. Ces insights vous aident à comprendre les dépendances de service, à détecter des modèles de trafic inattendus ou anormaux et à appliquer des stratégies de sécurité plus granulaires via la micro-segmentation.

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

Scénario 3 : Identifier le rayon d’explosion en cas de violation du réseau

Utilisez l’analytique du trafic pour suivre le chemin des adresses IP potentiellement malveillantes qui tentent de communiquer avec vos ressources. En cas de machine virtuelle compromise, l’analytique du trafic peut aider à mapper toutes les communications lancées par cette machine virtuelle au cours des 24 dernières heures, ce qui permet d’identifier l’exfiltration potentielle des données et de limiter le rayon d’explosion.

La requête suivante identifie toutes les adresses IP directes et indirectes qui interagissent avec des flux malveillants provenant de zones géographiques à haut risque :

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)

Scénario 4 : Appliquer les limites d’abonnement

Utilisez l’analytique du trafic pour appliquer les limites d’abonnement et vous assurer que le trafic entre différents abonnements Azure est correctement segmenté.

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