Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der von Azure verwaltete Standardregelsatz (DEFAULT Rule Set, DRS) in azure Application Gateway Web Application Firewall (WAF) schützt Webanwendungen vor allgemeinen Sicherheitsrisiken und Exploits, einschließlich der OWASP-Top-10-Angriffstypen. Der Standardregelsatz enthält auch die Microsoft Threat Intelligence Collection-Regeln. Es wird empfohlen, immer die neueste Regelsatzversion auszuführen, die die neuesten Sicherheitsupdates, Regelverbesserungen und Fixes enthält.
Der von Azure verwaltete Standardregelsatz (DEFAULT Rule Set, DRS) ist die neueste Generation von Regelets in Azure WAF, wobei alle vorherigen Hauptregelsatzversionen (Core Rule Set, CRS) ersetzt werden. Verwenden Sie unter DRS-Versionen immer die höchste verfügbare Version (z. B. DRS 2.2 bei Veröffentlichung), um sicherzustellen, dass Sie über die meisten up-to-Datumsschutz verfügen.
Dieser Artikel enthält PowerShell-Beispiele für das Upgrade Ihrer Azure WAF-Richtlinie auf DRS 2.1. Während die Beispiele speziell auf DRS 2.1 verweisen, sollten Sie immer ein Upgrade auf die neueste verfügbare DRS-Version durchführen, um einen maximalen Schutz sicherzustellen.
Hinweis
PowerShell-Codeausschnitte sind nur Beispiele. Ersetzen Sie alle Platzhalter durch Werte aus Ihrer Umgebung.
Voraussetzungen
Ein Azure-Konto mit einem aktiven Abonnement. Kostenlos ein Konto erstellen.
Eine vorhandene Azure WAF-Richtlinie mit einem angewendeten Kernregelsatz (Core Rule Set, CRS) oder einem standardregelsatz (DRS). Wenn Sie noch keine WAF-Richtlinie besitzen, lesen Sie " Erstellen von Webanwendungsfirewallrichtlinien für das Anwendungsgateway".
Die neueste Version von Azure PowerShell ist lokal installiert. Dieser Artikel erfordert das Az.Network-Modul.
Wichtige Überlegungen beim Upgraden
Stellen Sie beim Aktualisieren der Azure WAF-Regelsatzversion Folgendes sicher:
Beibehalten vorhandener Anpassungen: Übernehmen Der Regelaktionsüberschreibungen, Regelstatus (aktiviert/deaktiviert) und Ausschlüsse.
Sichere Überprüfung neuer Regeln: Stellen Sie sicher, dass neu hinzugefügte Regeln zunächst auf den Protokollmodus festgelegt sind, damit Sie ihre Auswirkungen überwachen und optimieren können, bevor Sie die Blockierung aktivieren.
Vorbereiten ihrer Umgebung und Variablen
Legen Sie den Kontext Ihrer ausgewählten Abonnement-, Ressourcengruppe- und Azure WAF-Richtlinie fest.
Import-Module Az.Network Set-AzContext -SubscriptionId "<subscription_id>" $resourceGroupName = "<resource_group>" $wafPolicyName = "<policy_name>"Rufen Sie das WAF-Richtlinienobjekt ab, und rufen Sie dessen Definitionen ab.
$wafPolicy = Get-AzApplicationGatewayFirewallPolicy ` -Name $wafPolicyName ` -ResourceGroupName $resourceGroupName $currentExclusions = $wafPolicy.ManagedRules.Exclusions $currentManagedRuleset = $wafPolicy.ManagedRules.ManagedRuleSets | Where-Object { $_.RuleSetType -eq "OWASP" } $currentVersion = $currentManagedRuleset.RuleSetVersion
Beibehalten vorhandener Anpassungen
Kopieren Sie keine Außerkraftsetzungen oder Ausschlüsse, die für in DRS 2.1 entfernte Regeln gelten. Die folgende Funktion überprüft, ob eine Regel entfernt wurde:
function Test-RuleIsRemovedFromDRS21 { param ( [string]$RuleId, [string]$CurrentRulesetVersion ) $removedRulesByCrsVersion = @{ "3.0" = @( "200004", "913100", "913101", "913102", "913110", "913120", "920130", "920140", "920250", "921100", "800100", "800110", "800111", "800112", "800113" ) "3.1" = @( "200004", "913100", "913101", "913102", "913110", "913120", "920130", "920140", "920250", "800100", "800110", "800111", "800112", "800113", "800114" ) "3.2" = @( "200004", "913100", "913101", "913102", "913110", "913120", "920250", "800100", "800110", "800111", "800112", "800113", "800114" ) } # If the version isn't known, assume rule has not been removed if (-not $removedRulesByCrsVersion.ContainsKey($CurrentRulesetVersion)) { return $false } return $removedRulesByCrsVersion[$CurrentRulesetVersion] -contains $RuleId }Verwenden Sie beim Erstellen neuer Außerkraftsetzungsobjekte die DRS 2.1-Gruppennamen. Die folgende Funktion ordnet ältere CRS-Gruppennamen DRS 2.1-Gruppen zu:
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 } }Verwenden Sie den folgenden PowerShell-Code, um die Außerkraftsetzungen der Regeln zu definieren und Außerkraftsetzungen aus einer vorhandenen Regelsatzversion zu duplizieren:
$groupOverrides = @() foreach ($group in $currentManagedRuleset.RuleGroupOverrides) { $mappedGroupName = Get-DrsRuleGroupName $group.RuleGroupName foreach ($existingRule in $group.Rules) { if (-not (Test-RuleIsRemovedFromDRS21 $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 } } } }Verwenden Sie den folgenden PowerShell-Code, um Ihre vorhandenen Ausschlüsse zu duplizieren und auf DRS 2.1 anzuwenden:
# 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-RuleIsRemovedFromDRS21 $rule.RuleId "3.2")) { $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.1" ` -RuleGroup $ruleGroups } # Add to the new exclusion object $newExclusion.ExclusionManagedRuleSets += $newRuleSetScope } } if (-not $newExclusion.ExclusionManagedRuleSets) { $newExclusion.ExclusionManagedRuleSets = @() } $newRuleSetExclusions += $newExclusion } }
Sicheres Überprüfen neuer Regeln
Wenn Sie ein Upgrade durchführen, sind neue DRS 2.1-Regeln standardmäßig aktiv. Wenn sich Ihr WAF im Verhinderungsmodus befindet, legen Sie zuerst neue Regeln auf den Protokollmodus fest. Im Protokollmodus können Sie Protokolle überprüfen, bevor Sie die Blockierung aktivieren.
Die folgenden PowerShell-Definitionen gelten für Regeln, die in DRS 2.1 im Vergleich zu jeder CRS-Version eingeführt wurden:
# Added in DRS 2.1 compared to CRS 3.0 $rulesAddedInThisVersionByGroup = @{ "General" = @("200002", "200003") "PROTOCOL-ENFORCEMENT" = @("920121", "920171", "920181", "920341", "920470", "920480", "920500") "PROTOCOL-ATTACK" = @("921190", "921200") "RCE" = @("932180") "PHP" = @("933200", "933210") "NODEJS" = @("934100") "XSS" = @("941101", "941360", "941370", "941380") "SQLI" = @("942361", "942470", "942480", "942500", "942510") "JAVA" = @("944100", "944110", "944120", "944130", "944200", "944210", "944240", "944250") "MS-ThreatIntel-WebShells" = @("99005002", "99005003", "99005004", "99005005", "99005006") "MS-ThreatIntel-AppSec" = @("99030001", "99030002") "MS-ThreatIntel-SQLI" = @("99031001", "99031002", "99031003", "99031004") "MS-ThreatIntel-CVEs" = @( "99001001","99001002","99001003","99001004","99001005","99001006", "99001007","99001008","99001009","99001010","99001011","99001012", "99001013","99001014","99001015","99001016","99001017" ) }# Added in DRS 2.1 compared to CRS 3.1 $rulesAddedInThisVersionByGroup = @{ "General" = @("200002", "200003") "PROTOCOL-ENFORCEMENT" = @("920181", "920500") "PROTOCOL-ATTACK" = @("921190", "921200") "PHP" = @("933200", "933210") "NODEJS" = @("934100") "XSS" = @("941360", "941370", "941380") "SQLI" = @("942500", "942510") "MS-ThreatIntel-WebShells" = @("99005002", "99005003", "99005004", "99005005", "99005006") "MS-ThreatIntel-AppSec" = @("99030001", "99030002") "MS-ThreatIntel-SQLI" = @("99031001", "99031002", "99031003", "99031004") "MS-ThreatIntel-CVEs" = @( "99001001","99001002","99001003","99001004","99001005","99001006", "99001007","99001008","99001009","99001010","99001011","99001012", "99001013","99001014","99001015","99001016","99001017" ) }# Added in DRS 2.1 compared to CRS 3.2 $rulesAddedInThisVersionByGroup = @{ "General" = @("200002", "200003") "PROTOCOL-ENFORCEMENT" = @("920181", "920500") "PROTOCOL-ATTACK" = @("921190", "921200") "PHP" = @("933200", "933210") "NODEJS" = @("934100") "XSS" = @("941360", "941370", "941380") "SQLI" = @("942100", "942500", "942510") "MS-ThreatIntel-WebShells" = @("99005002", "99005003", "99005004", "99005005", "99005006") "MS-ThreatIntel-AppSec" = @("99030001", "99030002") "MS-ThreatIntel-SQLI" = @("99031001", "99031002", "99031003", "99031004") "MS-ThreatIntel-CVEs" = @( "99001001","99001002","99001003","99001004","99001005","99001006", "99001007","99001008","99001009","99001010","99001011","99001012", "99001013","99001014","99001015","99001016","99001017" ) }Verwenden Sie den folgenden PowerShell-Code, um dem zuvor definierten vorhandenen
$groupOverridesObjekt neue Regelüberschreibungen hinzuzufügen:foreach ($groupName in $rulesAddedInDRS21.Keys) { $ruleOverrides = @() foreach ($ruleId in $rulesAddedInDRS21[$groupName]) { $alreadyExists = $existingOverrides | Where-Object { $_.RuleId -eq $ruleId } if (-not $alreadyExists) { $ruleOverrides += New-AzApplicationGatewayFirewallPolicyManagedRuleOverride ` -RuleId $ruleId ` -Action "Log" ` -State "Enabled" } } # Only create group override if we added rules to it if ($ruleOverrides.Count -gt 0) { $groupOverrides += New-AzApplicationGatewayFirewallPolicyManagedRuleGroupOverride ` -RuleGroupName $groupName ` -Rule $ruleOverrides } }
Anwenden von Anpassungen und Upgrades
Definieren Sie Ihr aktualisiertes Azure WAF-Richtlinienobjekt mit den duplizierten und aktualisierten Regelüberschreibungen und Ausschlüssen:
$managedRuleSet = New-AzApplicationGatewayFirewallPolicyManagedRuleSet `
-RuleSetType "Microsoft_DefaultRuleSet" `
-RuleSetVersion "2.1" `
-RuleGroupOverride $groupOverrides
for ($i = 0; $i -lt $wafPolicy.ManagedRules.ManagedRuleSets.Count; $i++) {
if ($wafPolicy.ManagedRules.ManagedRuleSets[$i].RuleSetType -eq "OWASP") {
$wafPolicy.ManagedRules.ManagedRuleSets[$i] = $managedRuleSet
break
}
}
# Assign to policy
if ($newRuleSetExclusions) {
$wafPolicy.ManagedRules.Exclusions = $currentExclusions + $newRuleSetExclusions
}
# Apply the updated WAF policy
Set-AzApplicationGatewayFirewallPolicy -InputObject $wafPolicy