Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: ✔️ Application Gateway V2
De door Azure beheerde standaardregelset (DRS) in Azure Application Gateway Web Application Firewall (WAF) beschermt webtoepassingen tegen veelvoorkomende beveiligingsproblemen en aanvallen, waaronder de OWASP top 10-aanvalstypen. De standaardregelset bevat ook de regels voor microsoft Threat Intelligence Collection. Voer altijd de meest recente versie van de regelset uit, waaronder de meest recente beveiligingsupdates, regelverbeteringen en oplossingen.
De door Azure beheerde standaardregelset (DRS) is de nieuwste generatie regelsets in Azure WAF, waarbij alle eerdere CRS-versies (Core Rule Set) worden vervangen. Gebruik van de DRS-releases altijd de hoogste beschikbare versie (DRS 2.2) om ervoor te zorgen dat u over de meest actuele beveiliging beschikt.
Dit artikel bevat PowerShell-voorbeelden voor het upgraden van uw Azure WAF-beleid naar DRS 2.2 van CRS 3.0, CRS 3.1, CRS 3.2 of DRS 2.1.
Opmerking
PowerShell-fragmenten zijn alleen voorbeelden. Vervang alle tijdelijke aanduidingen door waarden uit uw omgeving.
Vereiste voorwaarden
Een Azure-account met een actief abonnement. Gratis een account maken
Een bestaand Azure WAF-beleid waarop de Core Rule Set (CRS) of Default Rule Set (DRS) is toegepast. Zie Web Application Firewall-beleid maken voor Application Gateway als u nog geen WAF-beleid hebt.
De nieuwste versie van Azure PowerShell die lokaal is geïnstalleerd. Voor dit artikel is de Az.Network-module vereist.
Belangrijke overwegingen bij het upgraden
Wanneer u de versie van uw Azure WAF-regelset bijwerkt, moet u het volgende doen:
Bestaande aanpassingen behouden: overschrijven van regelacties, regelstatus (ingeschakeld of uitgeschakeld) en uitsluitingen overdragen.
Verwijder aanpassingen voor verwijderde regels: neem geen overschrijvingen of uitsluitingen over voor regels die niet meer bestaan in DRS 2.2. Het meenemen van een uitzondering voor een regel die niet in DRS 2.2 staat, zorgt ervoor dat de beleidsupdate mislukt met een foutmelding zoals
The override Rule '<id>' is unknown for RuleGroup '<group>'.Houd rekening met de basislijn voor Paranoia Level: DRS 2.2 gebruikt standaard Paranoia Level 1 (PL1) en alle PL2-regels zijn standaard uitgeschakeld. In CRS 3.2 en DRS 2.1 waren PL2-regels actief. Pl2-regels die u eerder hebt aangepast, worden standaard uitgeschakeld in DRS 2.2 totdat u ze expliciet opnieuw inschakelt.
Nieuwe regels veilig valideren: nieuw toegevoegde regels die standaard zijn ingeschakeld (PL1) zijn in eerste instantie ingesteld op de logboekmodus, zodat u de impact ervan kunt controleren en ze kunt verfijnen voordat u blokkeren inschakelt.
Uw omgeving en variabelen voorbereiden
Stel de context in voor uw geselecteerde abonnement, resourcegroep en Azure WAF-beleid.
Import-Module Az.Network Set-AzContext -SubscriptionId "<subscription_id>" $resourceGroupName = "<resource_group>" $wafPolicyName = "<policy_name>"Haal het WAF-beleidsobject op en haal de bijbehorende definities op. De huidige beheerde regelset kan een CRS (
OWASP) of een DRS-type zijnMicrosoft_DefaultRuleSet.$wafPolicy = Get-AzApplicationGatewayFirewallPolicy ` -Name $wafPolicyName ` -ResourceGroupName $resourceGroupName $currentExclusions = $wafPolicy.ManagedRules.Exclusions $currentManagedRuleset = $wafPolicy.ManagedRules.ManagedRuleSets | Where-Object { $_.RuleSetType -eq "OWASP" -or $_.RuleSetType -eq "Microsoft_DefaultRuleSet" } $currentVersion = $currentManagedRuleset.RuleSetVersion
Bestaande aanpassingen behouden
Alleen een overschrijving of uitsluiting overdragen als de regel nog bestaat in DRS 2.2. Met de volgende functie wordt een regel-id gevalideerd op basis van de volledige set DRS 2.2-regels en wordt geretourneerd
$truevoor een regel die is verwijderd (inclusief verouderde en inactieve regels zoals920460,942130en920250). Als u een acceptatielijst met geldige regel-id's gebruikt, voorkomt u onderhoud per regel en voorkomt u dat de beleidsupdate mislukt op een onbekende regel.function Test-RuleIsRemovedFromDRS22 { param ( [string]$RuleId, [string]$CurrentRulesetVersion # Retained for compatibility; not used ) # Complete set of rule IDs that exist in DRS 2.2. # Any override or exclusion for a rule NOT in this set is dropped during migration. $drs22RuleIds = @( "200002","200003", "911100", "920100","920120","920121","920160","920170","920171","920180","920181","920190","920200","920201","920210","920220","920230","920240","920260","920270","920271","920280","920290","920300","920310","920311","920320","920330","920340","920341","920350","920420","920430","920440","920450","920470","920480","920500","920530","920620", "921110","921120","921130","921140","921150","921151","921160","921190","921200","921422", "930100","930110","930120","930130", "931100","931110","931120","931130", "932100","932105","932110","932115","932120","932130","932140","932150","932160","932170","932171","932180", "933100","933110","933120","933130","933140","933150","933151","933160","933170","933180","933200","933210", "934100", "941100","941101","941110","941120","941130","941140","941150","941160","941170","941180","941190","941200","941210","941220","941230","941240","941250","941260","941270","941280","941290","941300","941310","941320","941330","941340","941350","941360","941370","941380", "942100","942110","942120","942140","942150","942160","942170","942180","942190","942200","942210","942220","942230","942240","942250","942260","942270","942280","942290","942300","942310","942320","942330","942340","942350","942360","942361","942370","942380","942390","942400","942410","942430","942440","942450","942470","942480","942500","942510", "943100","943110","943120", "944100","944110","944120","944130","944200","944210","944240","944250", "99005002","99005003","99005004","99005005","99005006", "99030001","99030002","99030003","99030004","99030005","99030006", "99031001","99031002","99031003","99031004","99031005","99031006", "99001001","99001002","99001003","99001004","99001005","99001006","99001007","99001008","99001009","99001010","99001011","99001012","99001013","99001014","99001015","99001016","99001017","99001018", "99032001","99032002" ) return -not ($drs22RuleIds -contains $RuleId) }Wanneer u nieuwe overschrijvingsobjecten maakt, gebruikt u de groepsnamen van DRS 2.2. Met de volgende functie worden verouderde CRS-groepsnamen toegewezen aan DRS-groepen. Namen van DRS-brongroepen die zich niet in de kaart bevinden (bijvoorbeeld wanneer een upgrade van DRS 2.1 wordt uitgevoerd), worden ongewijzigd geretourneerd:
function Get-DrsRuleGroupName { param ( [Parameter(Mandatory = $true)] [string]$SourceGroupName ) $groupMap = @{ "REQUEST-930-APPLICATION-ATTACK-LFI" = "LFI" "REQUEST-931-APPLICATION-ATTACK-RFI" = "RFI" "REQUEST-932-APPLICATION-ATTACK-RCE" = "RCE" "REQUEST-933-APPLICATION-ATTACK-PHP" = "PHP" "REQUEST-941-APPLICATION-ATTACK-XSS" = "XSS" "REQUEST-942-APPLICATION-ATTACK-SQLI" = "SQLI" "REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION" = "FIX" "REQUEST-944-APPLICATION-ATTACK-JAVA" = "JAVA" "REQUEST-921-PROTOCOL-ATTACK" = "PROTOCOL-ATTACK" "REQUEST-911-METHOD-ENFORCEMENT" = "METHOD-ENFORCEMENT" "REQUEST-920-PROTOCOL-ENFORCEMENT" = "PROTOCOL-ENFORCEMENT" "REQUEST-913-SCANNER-DETECTION" = $null # No direct mapping "Known-CVEs" = "MS-ThreatIntel-CVEs" "General" = "General" } if ($groupMap.ContainsKey($SourceGroupName)) { return $groupMap[$SourceGroupName] } else { return $SourceGroupName # No known mapping; pass through (DRS source group names) } }Gebruik de volgende PowerShell-code om de uitzonderingen voor de regels te definiëren, waarbij uitzonderingen uit de bestaande versie van de regelset worden gedupliceerd:
$groupOverrides = @() foreach ($group in $currentManagedRuleset.RuleGroupOverrides) { $mappedGroupName = Get-DrsRuleGroupName $group.RuleGroupName if (-not $mappedGroupName) { continue } # Skip groups with no DRS equivalent foreach ($existingRule in $group.Rules) { if (-not (Test-RuleIsRemovedFromDRS22 $existingRule.RuleId $currentVersion)) { $existingGroup = $groupOverrides | Where-Object { $_.RuleGroupName -eq $mappedGroupName } if ($existingGroup) { if (-not ($existingGroup.Rules | Where-Object { $_.RuleId -eq $existingRule.RuleId })) { $existingGroup.Rules.Add($existingRule) } } else { $newGroup = New-AzApplicationGatewayFirewallPolicyManagedRuleGroupOverride ` -RuleGroupName $mappedGroupName ` -Rule @($existingRule) $groupOverrides += $newGroup } } } }Gebruik de volgende PowerShell-code om uw bestaande uitsluitingen te dupliceren en toe te passen op DRS 2.2:
# Create new exclusion objects $newRuleSetExclusions = @() if ($currentExclusions -ne $null -and $currentExclusions.Count -gt 0) { foreach ($exclusion in $currentExclusions) { $newExclusion = New-AzApplicationGatewayFirewallPolicyExclusion ` -MatchVariable $exclusion.MatchVariable ` -SelectorMatchOperator $exclusion.SelectorMatchOperator ` -Selector $exclusion.Selector # Migrate scopes: RuleSet, RuleGroup, or individual Rules if ($exclusion.ExclusionManagedRuleSets) { foreach ($scope in $exclusion.ExclusionManagedRuleSets) { # Create RuleGroup objects from existing RuleGroups $ruleGroups = @() foreach ($group in $scope.RuleGroups) { $drsGroupName = Get-DrsRuleGroupName $group.RuleGroupName if ($drsGroupName) { $exclusionRules = @() foreach ($rule in $group.Rules) { if (-not (Test-RuleIsRemovedFromDRS22 $rule.RuleId $currentVersion)) { $exclusionRules += New-AzApplicationGatewayFirewallPolicyExclusionManagedRule ` -RuleId $rule.RuleId } } if ($exclusionRules -ne $null -and $exclusionRules.Count -gt 0) { $ruleGroups += New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleGroup ` -Name $drsGroupName ` -Rule $exclusionRules } else { $ruleGroups += New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleGroup ` -Name $drsGroupName } } } # Create the ManagedRuleSet scope object with the updated RuleGroups if ($ruleGroups.Count -gt 0) { $newRuleSetScope = New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleSet ` -Type "Microsoft_DefaultRuleSet" ` -Version "2.2" ` -RuleGroup $ruleGroups # Add to the new exclusion object $newExclusion.ExclusionManagedRuleSets += $newRuleSetScope } } } if (-not $newExclusion.ExclusionManagedRuleSets) { $newExclusion.ExclusionManagedRuleSets = @() } $newRuleSetExclusions += $newExclusion } }
Nieuwe regels veilig valideren
Wanneer u een upgrade uitvoert, worden nieuwe DRS 2.2-regels die deel uitmaken van Paranoia Niveau 1 standaard ingeschakeld. Als uw WAF zich in de preventiemodus bevindt , stelt u deze nieuwe regels eerst in op de logboekmodus , zodat u logboeken kunt bekijken voordat u blokkeren inschakelt.
Regels die deel uitmaken van Paranoia Level 2 zijn standaard uitgeschakeld in DRS 2.2 en blokkeren geen verkeer, dus deze stap is niet vereist. Als u op Paranoia Niveau 2 wilt werken, schakelt u de relevante PL2-regels expliciet in en volgt u dezelfde validatie-in-logboekbenadering.
Gebruik de definitie die overeenkomt met de versie van waaruit u een upgrade uitvoert. Elke definitie bevat de regels die standaard worden geïntroduceerd en ingeschakeld in DRS 2.2 vergeleken met die versie.
# Added and enabled by default in DRS 2.2 compared to CRS 3.0 $rulesAddedInThisVersionByGroup = @{ "General" = @("200002", "200003") "PROTOCOL-ENFORCEMENT" = @("920171", "920181", "920470", "920480", "920500", "920530", "920620") "PROTOCOL-ATTACK" = @("921190", "921200") "RCE" = @("932180") "PHP" = @("933200", "933210") "NODEJS" = @("934100") "XSS" = @("941360", "941370") "SQLI" = @("942500") "JAVA" = @("944100", "944110", "944120", "944130") "MS-ThreatIntel-CVEs" = @("99001018") "MS-ThreatIntel-XSS" = @("99032001") }# Added and enabled by default in DRS 2.2 compared to CRS 3.1 $rulesAddedInThisVersionByGroup = @{ "General" = @("200002", "200003") "PROTOCOL-ENFORCEMENT" = @("920181", "920500", "920530", "920620") "PROTOCOL-ATTACK" = @("921190", "921200") "PHP" = @("933200", "933210") "NODEJS" = @("934100") "XSS" = @("941360", "941370") "SQLI" = @("942500") "MS-ThreatIntel-CVEs" = @("99001018") "MS-ThreatIntel-XSS" = @("99032001") }# Added and enabled by default in DRS 2.2 compared to CRS 3.2 $rulesAddedInThisVersionByGroup = @{ "PROTOCOL-ENFORCEMENT" = @("920181", "920500", "920530", "920620") "PROTOCOL-ATTACK" = @("921190", "921200") "NODEJS" = @("934100") "XSS" = @("941370") "MS-ThreatIntel-CVEs" = @("99001018") "MS-ThreatIntel-XSS" = @("99032001") }# Added and enabled by default in DRS 2.2 compared to DRS 2.1 $rulesAddedInThisVersionByGroup = @{ "PROTOCOL-ENFORCEMENT" = @("920530", "920620") "MS-ThreatIntel-XSS" = @("99032001") }Gebruik de volgende PowerShell-code om de nieuwe regeloverschrijvingen toe te voegen aan het bestaande
$groupOverridesobject dat eerder is gedefinieerd:foreach ($groupName in $rulesAddedInThisVersionByGroup.Keys) { $ruleOverrides = @() foreach ($ruleId in $rulesAddedInThisVersionByGroup[$groupName]) { $existingGroup = $groupOverrides | Where-Object { $_.RuleGroupName -eq $groupName } $alreadyExists = $false if ($existingGroup) { $alreadyExists = $existingGroup.Rules | Where-Object { $_.RuleId -eq $ruleId } } if (-not $alreadyExists) { $ruleOverrides += New-AzApplicationGatewayFirewallPolicyManagedRuleOverride ` -RuleId $ruleId ` -Action "Log" ` -State "Enabled" } } # Only create or update the group override if we added rules to it if ($ruleOverrides.Count -gt 0) { $existingGroup = $groupOverrides | Where-Object { $_.RuleGroupName -eq $groupName } if ($existingGroup) { foreach ($ruleOverride in $ruleOverrides) { $existingGroup.Rules.Add($ruleOverride) } } else { $groupOverrides += New-AzApplicationGatewayFirewallPolicyManagedRuleGroupOverride ` -RuleGroupName $groupName ` -Rule $ruleOverrides } } }
Aanpassingen en upgrade toepassen
Definieer uw bijgewerkte Azure WAF-beleidsobject, waarbij de gedupliceerde en bijgewerkte regeloverschrijvingen en uitsluitingen worden opgenomen:
$managedRuleSet = New-AzApplicationGatewayFirewallPolicyManagedRuleSet `
-RuleSetType "Microsoft_DefaultRuleSet" `
-RuleSetVersion "2.2" `
-RuleGroupOverride $groupOverrides
# Replace the existing CRS (OWASP) or DRS (Microsoft_DefaultRuleSet) managed rule set
for ($i = 0; $i -lt $wafPolicy.ManagedRules.ManagedRuleSets.Count; $i++) {
if ($wafPolicy.ManagedRules.ManagedRuleSets[$i].RuleSetType -eq "OWASP" -or
$wafPolicy.ManagedRules.ManagedRuleSets[$i].RuleSetType -eq "Microsoft_DefaultRuleSet") {
$wafPolicy.ManagedRules.ManagedRuleSets[$i] = $managedRuleSet
break
}
}
# Assign the migrated exclusions to the policy
$wafPolicy.ManagedRules.Exclusions = $newRuleSetExclusions
# Apply the updated WAF policy
Set-AzApplicationGatewayFirewallPolicy -InputObject $wafPolicy