Ladění firewallu webových aplikací Azure pro Azure Front Door

Výchozí sada pravidel spravovaná Microsoftem je založená na základní sadě pravidel OWASP a obsahuje pravidla shromažďování Microsoft Threat Intelligence.

Často se očekává, že pravidla firewallu webových aplikací (WAF) musí být vyladěná tak, aby vyhovovala konkrétním potřebám aplikace nebo organizace využívající WAF. Organizace obvykle dosahuje ladění provedením jedné z následujících akcí:

  • Definování vyloučení pravidel
  • Vytváření vlastních pravidel
  • Zakázání pravidel, která můžou způsobovat problémy nebo falešně pozitivní výsledky

Tento článek popisuje, co můžete dělat, pokud jsou zablokované požadavky, které by měly projít přes waF.

Poznámka:

Sada pravidel spravovaná Microsoftem není k dispozici pro skladovou položku Azure Front Door Standard. Další informace o různých úrovních skladových položek najdete v tématu Porovnání funkcí mezi úrovněmi.

Přečtěte si přehled WAF služby Azure Front Door a zásady WAF pro dokumenty služby Azure Front Door. Povolte také monitorování a protokolování WAF. Tyto články vysvětlují, jak fungují funkce WAF, jak fungují sady pravidel WAF a jak získat přístup k protokolům WAF.

Vysvětlení protokolů WAF

Účelem protokolů WAF je zobrazit všechny požadavky, které waF spárovaly nebo zablokovaly. Jedná se o kolekci všech vyhodnocených požadavků, které se shodují nebo blokují. Pokud si všimnete, že WAF blokuje požadavek, že by neměl (falešně pozitivní), můžete udělat několik věcí.

Nejprve zpřesníte konkrétní požadavek a najděte ho. Můžete nakonfigurovat vlastní zprávu odpovědi tak, aby obsahovala trackingReference pole, aby bylo možné snadno identifikovat událost a provést dotaz protokolu na danou hodnotu. Projděte si protokoly a vyhledejte konkrétní identifikátor URI, časové razítko nebo IP adresu klienta požadavku. Když najdete související položky protokolu, můžete pracovat s falešně pozitivními výsledky.

Řekněme například, že máte legitimní provoz, který obsahuje řetězec 1=1 , který chcete projít přes WAF. Žádost vypadá takto:

POST http://afdwafdemosite.azurefd.net/api/Feedbacks HTTP/1.1
Host: afdwafdemosite.azurefd.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 55

UserId=20&captchaId=7&captchaId=15&comment="1=1"&rating=3

Pokud požadavek vyzkoušíte, WAF zablokuje provoz, který obsahuje váš 1=1 řetězec v libovolném parametru nebo poli. Tento řetězec je často přidružený k útoku prostřednictvím injektáže SQL. Můžete si projít protokoly a zobrazit časové razítko požadavku a pravidla, která blokovala nebo odpovídala.

Následující příklad ukazuje položku protokolu vygenerovanou na základě shody pravidla. Pomocí následujícího dotazu Log Analytics můžete najít požadavky blokované během posledních 24 hodin.

AzureDiagnostics
| where Category == 'FrontDoorWebApplicationFirewallLog'
| where TimeGenerated > ago(1d)
| where action_s == 'Block'
AzureDiagnostics
| where Category == 'FrontdoorWebApplicationFirewallLog'
| where TimeGenerated > ago(1d)
| where action_s == 'Block'

requestUri V poli vidíte, že žádost byla provedena /api/Feedbacks/ konkrétně. V dalším sadě vyhledejte ID 942110 pravidla v ruleName poli. Když znáte ID pravidla, můžete přejít do oficiálního úložiště sady pravidel OWASP ModSecurity Core Rule Set a vyhledat podle tohoto ID pravidla, abyste zkontrolovali jeho kód a přesně porozuměli tomu, co toto pravidlo odpovídá.

Potom zaškrtnutím action tohoto pole zjistíte, že toto pravidlo je nastavené tak, aby při porovnávání blokoval požadavky. Můžete potvrdit, že požadavek zablokoval WAF, protože policyMode je nastavená na prevention.

Teď zkontrolujte informace v details poli. Toto pole je místo, kde můžete zobrazit matchVariableName informace a matchVariableValue informace. Toto pravidlo se aktivovalo, protože někdo zadával do 1=1 comment pole webové aplikace.

{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Cdn/Profiles/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}
{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Network/FrontDoor/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}

K dispozici je také hodnota kontroly přístupových protokolů, abyste rozšířili své znalosti o dané události WAF. Dále zkontrolujte protokol, který byl vygenerován jako odpověď na předchozí událost.

Tyto protokoly jsou související, protože trackingReference hodnota je stejná. Mezi různými poli, která poskytují obecný přehled, například userAgent a clientIP, si všimněte httpStatusCode a httpStatusDetails polí. Tady vidíte, že klient obdržel odpověď HTTP 403, která potvrzuje, že tento požadavek byl odepřen a blokován.

{
    "time": "2020-09-24T16:43:04.5430764Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorAccessLog",
    "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
    "properties": {
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "httpMethod": "POST",
        "httpVersion": "1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "requestBytes": "2160",
        "responseBytes": "324",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36",
        "clientIp": "1.1.1.1",
        "socketIp": "1.1.1.1",
        "clientPort": "53566",
        "timeToFirstByte": "0.01",
        "timeTaken": "0.011",
        "securityProtocol": "",
        "routingRuleName": "DemoBERoutingRule",
        "rulesEngineMatchNames": [],
        "backendHostname": "13.88.65.130:3000",
        "isReceivedFromClient": true,
        "httpStatusCode": "403",
        "httpStatusDetails": "403",
        "pop": "WST",
        "cacheStatus": "CONFIG_NOCACHE"
    }
}
{
    "time": "2020-09-24T16:43:04.5430764Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorAccessLog",
    "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
    "properties": {
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "httpMethod": "POST",
        "httpVersion": "1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "requestBytes": "2160",
        "responseBytes": "324",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36",
        "clientIp": "1.1.1.1",
        "socketIp": "1.1.1.1",
        "clientPort": "53566",
        "timeToFirstByte": "0.01",
        "timeTaken": "0.011",
        "securityProtocol": "",
        "routingRuleName": "DemoBERoutingRule",
        "rulesEngineMatchNames": [],
        "backendHostname": "13.88.65.130:3000",
        "isReceivedFromClient": true,
        "httpStatusCode": "403",
        "httpStatusDetails": "403",
        "pop": "WST",
        "cacheStatus": "CONFIG_NOCACHE"
    }
}

Řešení falešně pozitivních výsledků

Pokud chcete informované rozhodnutí o zpracování falešně pozitivních výsledků, je důležité se seznámit s technologiemi, které vaše aplikace používá. Řekněme například, že ve vašem zásobníku technologií není sql server a v souvislosti s těmito pravidly dostáváte falešně pozitivní výsledky. Zakázání těchto pravidel nemusí nutně oslabit vaše zabezpečení.

S těmito informacemi a znalostmi, že pravidlo 942110 je pravidlo, které odpovídá 1=1 řetězci v tomto příkladu, můžete udělat několik věcí, které znemožní zablokování tohoto legitimního požadavku:

  • Použijte seznamy vyloučení. Další informace o seznamech vyloučení najdete v tématu Azure Web Application Firewall se seznamy vyloučení služby Azure Front Door.
  • Změňte akce WAF. Další informace o akcích, které se dají provést, když požadavek odpovídá podmínkám pravidla, najdete v tématu Akce WAF.
  • Použijte vlastní pravidla. Další informace o vlastníchpravidlech
  • Zakažte pravidla.

Tip

Když vyberete přístup, který umožní legitimní žádosti prostřednictvím WAF, zkuste ho nastavit tak úzce, jak je to možné. Je například lepší použít seznam vyloučení než úplně zakázat pravidlo.

Použití seznamů vyloučení

Jednou z výhod použití seznamu vyloučení je, že u daného požadavku už nebude kontrolována pouze proměnná shody, kterou vyberete k vyloučení. To znamená, že si můžete vybrat mezi konkrétními hlavičkami požadavku, soubory cookie požadavku, argumenty řetězce dotazu nebo argumenty post požadavku, které mají být vyloučeny, pokud je splněna určitá podmínka, a nikoli vyloučit celý požadavek z kontroly. Ostatní nezadané proměnné požadavku se kontrolují normálně.

Vyloučení představují globální nastavení. Nakonfigurované vyloučení platí pro veškerý provoz, který prochází přes WAF, nejen pro konkrétní webovou aplikaci nebo identifikátor URI. Může to být například problém, pokud 1=1 je platným požadavkem v těle určité webové aplikace, ale ne pro ostatní ve stejné zásadě WAF.

Pokud je vhodné použít různé seznamy vyloučení pro různé aplikace, zvažte použití různých zásad WAF pro každou aplikaci a jejich použití na front-end každé aplikace.

Při konfiguraci seznamů vyloučení pro spravovaná pravidla můžete vyloučit:

  • Všechna pravidla v sadě pravidel.
  • Všechna pravidla ve skupině pravidel.
  • Jednotlivá pravidla.

Seznam vyloučení můžete nakonfigurovat pomocí PowerShellu, Azure CLI, rozhraní REST API, Bicep, šablon Azure Resource Manageru nebo webu Azure Portal.

  • Vyloučení na úrovni pravidla: Použití vyloučení na úrovni pravidla znamená, že zadaná vyloučení nebudou analyzována pouze s tímto individuálním pravidlem. Bude se dál analyzovat všemi ostatními pravidly v sadě pravidel. Toto je nejpodrobnější úroveň vyloučení. Můžete ji použít k vyladění sady spravovaných pravidel na základě informací, které najdete v protokolech WAF při řešení potíží s událostí.
  • Vyloučení na úrovni skupiny pravidel: Použití vyloučení na úrovni skupiny pravidel znamená, že zadaná vyloučení nebudou analyzována proti této konkrétní sadě typů pravidel. Například výběr SQLI jako vyloučené skupiny pravidel indikuje, že definovaná vyloučení požadavků nebudou kontrolována žádným z pravidel specifických pro SQLI. Bude se stále kontrolovat pravidly v jiných skupinách, jako je PHP, RFI nebo XSS. Tento typ vyloučení může být užitečný, když jste si jistí, že aplikace není náchylná ke konkrétním typům útoků. Například aplikace, která nemá žádné databáze SQL, může mít všechna pravidla SQLI vyloučená, aniž by to mělo negativní dopad na úroveň zabezpečení.
  • Vyloučení na úrovni sady pravidel: Použití vyloučení na úrovni sady pravidel znamená, že zadaná vyloučení nebudou analyzována proti žádnému z pravidel zabezpečení dostupných v této sadě pravidel. Toto vyloučení je komplexní, proto ho používejte pečlivě.

V tomto příkladu provedete vyloučení na nejpodrobnější úrovni použitím vyloučení na jedno pravidlo. Chcete vyloučit text žádosti o shodu po názvu args, který obsahuje comment. Podrobnosti o proměnné shody můžete zobrazit v protokolu brány firewall: "matchVariableName": "PostParamValue:comment". Atribut je comment. Tento atribut můžete také najít několika dalšími způsoby. Další informace naleznete v tématu Vyhledání názvů atributů požadavku.

Snímek obrazovky znázorňující pravidla vyloučení

Snímek obrazovky znázorňující vyloučení pravidla pro konkrétní pravidlo

Občas existují případy, kdy se konkrétní parametry předávají do WAF způsobem, který nemusí být intuitivní. Token se například předá při ověřování pomocí ID Microsoft Entra. Token __RequestVerificationToken se obvykle předává jako soubor cookie požadavku.

V některýchpřípadechch Z tohoto důvodu, pokud chcete řešit falešně pozitivní výsledky tokenu Microsoft Entra, je nutné zajistit, aby __RequestVerificationToken byl přidán do seznamu vyloučení pro oba RequestCookieNames i RequestBodyPostArgsNames.

Vyloučení názvu pole (Selektor) znamená, že hodnota už nebude vyhodnocena waF. Samotný název pole se stále vyhodnocuje a ve výjimečných případech může odpovídat pravidlu WAF a aktivovat akci.

Snímek obrazovky znázorňující vyloučení pravidla pro sadu pravidel

Změna akcí WAF

Dalším způsobem, jak zpracovat chování pravidel WAF, je zvolení akce, kterou provede, když požadavek odpovídá podmínkám pravidla. Dostupné akce jsou Povolit, Blokovat, Protokol a Přesměrování.

V tomto příkladu se výchozí blok akce změnil na akci Protokolu v pravidle 942110. Tato akce způsobí, že WAF zapíše požadavek a bude dál vyhodnocovat stejný požadavek vůči zbývajícím pravidlům s nižší prioritou.

Snímek obrazovky znázorňující akce WAF

Po provedení stejného požadavku se můžete vrátit k protokolům a zjistit, že se tento požadavek shoduje s ID pravidla 942110. Pole action_s teď označuje protokol místo bloku. Dotaz protokolu se pak rozšířil tak, aby zahrnoval trackingReference_s informace, abyste viděli, co dalšího se s tímto požadavkem stalo.

Snímek obrazovky zobrazující protokol zobrazující více shod pravidel

Teď uvidíte jinou shodu pravidla SQLI, ke které dochází v milisekundách po zpracování ID pravidla 942110. Stejná žádost odpovídala pravidlu s ID 942310 a tentokrát se aktivoval výchozí blok akce.

Další výhodou použití akce protokolu během ladění WAF nebo řešení potíží je, že můžete zjistit, jestli se několik pravidel v rámci konkrétní skupiny pravidel shoduje a blokuje daný požadavek. Vyloučení pak můžete vytvořit na příslušné úrovni, tj. na úrovni pravidla nebo skupiny pravidel.

Použití vlastních pravidel

Jakmile zjistíte, co způsobuje shodu pravidla WAF, můžete pomocí vlastních pravidel upravit způsob reakce WAF na událost. Vlastní pravidla se zpracovávají před spravovanými pravidly. Můžou obsahovat více než jednu podmínku a jejich akce můžou být Povolené, Odepřít, Protokol nebo Přesměrovat.

Upozorňující

Když požadavek odpovídá vlastnímu pravidlu, modul WAF přestane požadavek zpracovávat. Spravovaná pravidla se pro tento požadavek nezpracují a ani jiná vlastní pravidla s nižší prioritou.

Následující příklad ukazuje vlastní pravidlo se dvěma podmínkami. První podmínka hledá comment hodnotu v textu požadavku. Druhá podmínka vyhledá /api/Feedbacks/ hodnotu v identifikátoru URI požadavku.

Pomocí vlastního pravidla můžete být nejpodrobnější, abyste mohli pravidla WAF vyladit a řešit falešně pozitivní výsledky. V takovém případě neprobíhá akce jenom na comment základě hodnoty textu požadavku, která by mohla existovat na více webech nebo aplikacích ve stejné zásadě WAF.

Pokud zahrnete další podmínku, která se bude shodovat s konkrétním identifikátorem URI /api/Feedbacks/požadavku, zajistíte, aby toto vlastní pravidlo skutečně platilo pro tento explicitní případ použití, který jste probrali. Tímto způsobem se stejný útok, pokud se provádí proti různým podmínkám, stále kontroluje a brání modulu WAF.

Snímek obrazovky znázorňující protokol

Když prozkoumáte protokol, uvidíte, že ruleName_s pole obsahuje název zadaný vlastnímu pravidlu redirectcomment. action_s V poli vidíte, že akce Přesměrování byla provedena pro tuto událost. details_matches_s V poli můžete zobrazit podrobnosti o obou podmínkách, které byly spárovány.

Zakázání pravidel

Dalším způsobem, jak obejít falešně pozitivní výsledek, je zakázat pravidlo, které odpovídalo vstupu, který waF považoval za škodlivý. Protože jste parsovali protokoly WAF a zúžili jste pravidlo na 942110, můžete ho zakázat na webu Azure Portal. Další informace najdete v tématu Přizpůsobení pravidel firewallu webových aplikací Azure pomocí webu Azure Portal.

Zakázání pravidla je výhodou, když máte jistotu, že všechny žádosti, které splňují konkrétní podmínku, jsou legitimními požadavky, nebo když jste si jistí, že se pravidlo nevztahuje na vaše prostředí (například zakázání pravidla injektáže SQL, protože máte back-endy jiného než SQL).

Zakázání pravidla je globální nastavení, které platí pro všechny hostitele front-endu přidružené k zásadám WAF. Když se rozhodnete pravidlo zakázat, můžete nechat ohrožení zabezpečení vystavená bez ochrany nebo detekce pro všechny ostatní hostitele front-endu přidružené k zásadám WAF.

Pokud chcete pomocí Azure PowerShellu zakázat spravované pravidlo, přečtěte si dokumentaci k objektu PSAzureManagedRuleOverride . Pokud chcete použít Azure CLI, přečtěte az network front-door waf-policy managed-rules override si dokumentaci.

Snímek obrazovky znázorňující pravidla WAF

Tip

Zdokumentujte všechny změny provedené v zásadách WAF. Uveďte příklady požadavků, které ilustrují detekci falešně pozitivních výsledků. Vysvětlete, proč jste přidali vlastní pravidlo, zakázali pravidlo nebo sadu pravidel nebo přidali výjimku. Pokud aplikaci přepracujete v budoucnu, možná budete muset ověřit, že vaše změny jsou stále platné. Nebo můžete být auditovaná nebo potřebujete odůvodnit, proč jste zásady WAF překonfigurovali z výchozího nastavení.

Vyhledání polí žádosti

Pomocí proxy prohlížeče, jako je Fiddler, můžete zkontrolovat jednotlivé požadavky a určit, jaká konkrétní pole webové stránky se volají. Tato technika je užitečná, když potřebujete vyloučit určitá pole z kontroly pomocí seznamů vyloučení v WAF.

Vyhledání názvů atributů požadavku

V tomto příkladu je pole, ve kterém 1=1 byl řetězec zadán, volána comment. Tato data byla předána v textu požadavku POST.

Snímek obrazovky znázorňující text požadavku Fiddleru

Toto pole můžete vyloučit. Další informace o seznamech vyloučení najdete v tématu Seznamy vyloučení firewallu webových aplikací. Vyhodnocení můžete v tomto případě vyloučit konfigurací následujícího vyloučení:

Snímek obrazovky znázorňující pravidlo vyloučení

Můžete také prozkoumat protokoly brány firewall a získat informace a zjistit, co potřebujete přidat do seznamu vyloučení. Pokud chcete povolit protokolování, přečtěte si téma Monitorování metrik a protokolů ve službě Azure Front Door.

Zkontrolujte protokol brány firewall v PT1H.json souboru za hodinu, kdy došlo k požadavku, který chcete zkontrolovat. Soubory PT1H.json jsou k dispozici v kontejnerech účtu úložiště, kde FrontDoorWebApplicationFirewallLog jsou uloženy diagnostické FrontDoorAccessLog protokoly.

Zkontrolujte protokol brány firewall v PT1H.json souboru za hodinu, kdy došlo k požadavku, který chcete zkontrolovat. Soubory PT1H.json jsou k dispozici v kontejnerech účtu úložiště, kde FrontdoorWebApplicationFirewallLog jsou uloženy diagnostické FrontdoorAccessLog protokoly.

V tomto příkladu můžete zobrazit pravidlo, které zablokovaly požadavek (se stejným odkazem na transakce) a ke kterému došlo současně.

{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Cdn/Profiles/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}
{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Network/FrontDoor/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}

Víte, jak fungují sady pravidel spravovaných Azure, víte, že pravidlo s action: Block vlastností blokuje na základě dat odpovídajících v textu požadavku. (Další informace najdete v tématu Azure Web Application Firewall ve službě Azure Front Door.) V podrobnostech můžete vidět, že odpovídal vzoru (1=1) a pole má název comment. Postupujte podle stejných předchozích kroků a vyloučíte název textu požadavku, který obsahuje comment.

Vyhledání názvů hlaviček požadavků

Fiddler je užitečný nástroj pro vyhledání názvů hlaviček požadavků. Následující snímek obrazovky ukazuje hlavičky pro tento požadavek GET, které zahrnují Content-Type a User-Agent. Hlavičky požadavků můžete také použít k vytvoření vyloučení a vlastních pravidel v WAF.

Snímek obrazovky znázorňující záhlaví požadavku Fiddler

Dalším způsobem, jak zobrazit hlavičky požadavků a odpovědí, je podívat se do vývojářských nástrojů prohlížeče, jako je Microsoft Edge nebo Chrome. Můžete vybrat F12 nebo kliknout pravým tlačítkem na Zkontrolovat>vývojářské nástroje. Vyberte kartu Síť. Načtěte webovou stránku a vyberte požadavek, který chcete zkontrolovat.

Snímek obrazovky znázorňující požadavek služby Network Inspector

Pokud žádost obsahuje soubory cookie, vyberte kartu Soubory cookie a zobrazte je ve Fiddleru. Informace o souborech cookie lze také použít k vytvoření vyloučení nebo vlastních pravidel v WAF.

Pravidlo bodování anomálií

Pokud se během procesu ladění WAF zobrazí ID pravidla 949110, jeho přítomnost značí, že proces vyhodnocování anomálií zablokoval požadavek.

Zkontrolujte ostatní položky protokolu WAF pro stejný požadavek vyhledáním položek protokolu se stejným odkazem na sledování. Podívejte se na všechna pravidla, která se aktivovala. Vylaďte každé pravidlo podle pokynů v tomto článku.

Upozorňující

Při přiřazování nové sady spravovaných pravidel k zásadám WAF se všechna předchozí přizpůsobení ze stávajících sad spravovaných pravidel, jako je stav pravidla, akce pravidel a vyloučení na úrovni pravidel, resetují na výchozí hodnoty nové sady spravovaných pravidel. Všechna vlastní pravidla a nastavení zásad však během přiřazování nové sady pravidel zůstanou nedotčená.

Další kroky