Web Application Firewall-undantagslistor

Azure Application Gateway Web Application Firewall (WAF) ger skydd för webbprogram. I den här artikeln beskrivs konfigurationen för WAF-undantagslistor. De här inställningarna finns i WAF-principen som är associerad med din Application Gateway. Mer information om WAF-principer finns i Azure Web Application Firewall på Azure Application Gateway och Skapa brandväggsprinciper för webbaserade program för Application Gateway.

Ibland kan WAF blockera en begäran som du vill tillåta för ditt program. Med WAF-undantagslistor kan du utelämna vissa begärandeattribut från en WAF-utvärdering. Resten av begäran utvärderas som vanligt.

Active Directory infogar till exempel token som används för autentisering. När de används i en begäranderubrik kan dessa token innehålla specialtecken som kan utlösa en falsk positiv identifiering från WAF-reglerna. Genom att lägga till huvudet i en undantagslista kan du konfigurera WAF att ignorera huvudet, men WAF utvärderar fortfarande resten av begäran.

Du kan konfigurera undantag som ska tillämpas när specifika WAF-regler utvärderas eller för att tillämpas globalt på utvärderingen av alla WAF-regler. Undantagsregler gäller för hela webbappen.

Identifiera begärandeattribut som ska undantas

När du konfigurerar ett WAF-undantag måste du ange attributen för den begäran som ska undantas från WAF-utvärderingen. Du kan konfigurera ett WAF-undantag för följande begärandeattribut:

  • Begärandehuvuden
  • Begär cookies
  • Namn på begärandeattribut (args) kan läggas till som ett exkluderingselement, till exempel:
    • Namn på formulärfält
    • JSON-entitet
    • URL-frågesträng args

Du kan ange en exakt matchning för begäranderubrik, brödtext, cookie eller frågesträng. Eller så kan du ange partiella matchningar. Använd följande operatorer för att konfigurera undantaget:

  • Lika med: Den här operatorn används för en exakt matchning. Om du till exempel väljer en rubrik med namnet bearerToken använder du operatorn equals med väljaren inställd som bearerToken.
  • Börjar med: Den här operatorn matchar alla fält som börjar med det angivna väljarevärdet.
  • Slutar med: Den här operatorn matchar alla begärandefält som slutar med det angivna väljarevärdet.
  • Innehåller: Den här operatorn matchar alla begärandefält som innehåller det angivna väljarevärdet.
  • Är lika med alla: Den här operatorn matchar alla fält för begäran. * kommer att vara väljarens värde. Du kan till exempel använda den här operatorn när du inte känner till de exakta värdena för en viss matchningsvariabel men vill se till att begärandetrafiken fortfarande undantas från regelutvärderingen.

Vid bearbetning av undantag utför WAF-motorn en skiftlägeskänslig/okänslig matchning baserat på tabellen nedan. Dessutom tillåts inte reguljära uttryck eftersom väljare och XML-begärandetexter inte stöds.

Brödtextdel för begäran CRS 3.1 och tidigare CRS 3.2 och senare
Huvudet* Skiftlägesokänsligt Skiftlägesokänsligt
Cookie* Skiftlägesokänsligt Skiftlägeskänsliga
Frågesträngen* Skiftlägesokänsligt Skiftlägeskänsliga
URL-kodad brödtext Skiftlägesokänsligt Skiftlägeskänsliga
JSON-brödtext Skiftlägesokänsligt Skiftlägeskänsliga
XML-brödtext Stöds inte Stöds inte
Brödtext för flera delar Skiftlägesokänsligt Skiftlägeskänsliga

*Beroende på ditt program kan namn och värden för dina huvuden, cookies och fråge args vara skiftlägeskänsliga eller okänsliga.

Kommentar

Mer information och felsökningshjälp finns i WAF-felsökning.

Begär attribut efter nycklar och värden

När du konfigurerar ett undantag måste du avgöra om du vill undanta nyckeln eller värdet från WAF-utvärderingen.

Anta till exempel att dina begäranden innehåller det här huvudet:

My-Header: 1=1

Värdet för rubriken (1=1) kan identifieras som en attack av WAF. Men om du vet att detta är ett legitimt värde för ditt scenario kan du konfigurera ett undantag för huvudets värde . För att göra det använder du matchningsvariabeln RequestHeaderValues, operatorn innehåller och väljaren (My-Header). Den här konfigurationen stoppar utvärderingen av alla värden för rubriken My-Header.

Kommentar

Begärandeattribut efter nyckel och värden är endast tillgängliga i CRS 3.2 eller senare och Bot Manager 1.0 eller senare.

Begärandeattribut efter namn fungerar på samma sätt som begärandeattribut efter värden och ingår för bakåtkompatibilitet med CRS 3.1 och tidigare versioner. Vi rekommenderar att du använder begärandeattribut efter värden i stället för attribut efter namn. Använd till exempel RequestHeaderValues i stället för RequestHeaderNames.

Om waf däremot identifierar rubrikens namn (My-Header) som en attack kan du konfigurera ett undantag för huvudnyckeln med hjälp av request-attributet RequestHeaderKeys. Attributet RequestHeaderKeys är endast tillgängligt i CRS 3.2 eller senare och Bot Manager 1.0 eller senare.

Exempel på begärandeattribut

Tabellen nedan visar några exempel på hur du kan strukturera ditt exkludering för en viss matchningsvariabel.

Attribut som ska undantas matchVariable selectorMatchOperator Exempelväljare Exempelbegäranden Vad utesluts
Frågesträng RequestArgKeys Är lika med /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Frågesträng RequestArgKeys EqualsAny Ej tillämpligt Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd och .htaccess
Frågesträng RequestArgNames Är lika med text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Frågesträng RequestArgNames EqualsAny Ej tillämpligt Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd och .cshrc
Frågesträng RequestArgValues Är lika med text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Frågesträng RequestArgValues EqualsAny Ej tillämpligt Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd och .cshrc
Begärandetext RequestArgKeys Innehåller sleep Begärandetext: {"sleep(5)": "test"} sleep(5)
Begärandetext RequestArgKeys EqualsAny Ej tillämpligt Begärandetext: {".zshrc": "value", "sleep(5)":"value2"} .zshrc och sleep(5)
Begärandetext RequestArgNames Är lika med test Begärandetext: {"test": ".zshrc"} .zshrc
Begärandetext RequestArgNames EqualsAny Ej tillämpligt Begärandetext: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc och sleep(5)
Begärandetext RequestArgValues Är lika med test Begärandetext: {"test": ".zshrc"} .zshrc
Begärandetext RequestArgValues EqualsAny Ej tillämpligt Begärandetext: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc och sleep(5)
Header RequestHeaderKeys Är lika med X-Scanner Huvudet: {"X-Scanner": "test"} X-scanner
Header RequestHeaderKeys EqualsAny Ej tillämpligt Huvudet: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner och x-ratproxy-loop
Header RequestHeaderNames Är lika med head1 Huvudet: {"head1": "X-Scanner"} X-scanner
Header RequestHeaderNames EqualsAny Ej tillämpligt Huvudet: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 och (hydra)
Header RequestHeaderValues Är lika med head1 Huvudet: {"head1": "X-Scanner"} X-scanner
Header RequestHeaderValues EqualsAny Ej tillämpligt Huvudet: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 och (hydra)
Cookie RequestCookieKeys Innehåller /etc/passwd Huvudet: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Cookie RequestCookieKeys EqualsAny Ej tillämpligt Huvudet: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest och .htaccess
Cookie RequestCookieNames Är lika med arg1 Huvudet: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieNames EqualsAny Ej tillämpligt Huvudet: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd och .cshrc
Cookie RequestCookieValues Är lika med arg1 Huvudet: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieValues EqualsAny Ej tillämpligt Huvudet: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd och .cshrc

Kommentar

Om du skapar ett undantag med väljarenMatchOperator EqualsAnykonverteras allt du placerar i fältet selector till "*" av serverdelen när undantaget skapas.

Undantagsomfång

Undantag kan konfigureras för att gälla för en specifik uppsättning WAF-regler, regeluppsättningar eller globalt för alla regler.

Dricks

Det är en bra idé att göra undantag så smala och specifika som möjligt för att undvika att oavsiktligt lämna utrymme för angripare att utnyttja systemet. När du behöver lägga till en exkluderingsregel använder du undantag per regel där det är möjligt.

Undantag per regel

Du kan konfigurera ett undantag för en specifik regel, grupp med regler eller regeluppsättningar. Du måste ange den regel eller de regler som undantaget gäller för. Du måste också ange det begärandeattribut som ska undantas från WAF-utvärderingen. Om du vill undanta en fullständig grupp med regler anger du bara parametern ruleGroupName , parametern rules är bara användbar när du vill begränsa undantaget till specifika regler för en grupp.

Undantag per regel är tillgängliga när du använder regeluppsättningen OWASP (CRS) version 3.2 eller senare eller Bot Manager-regeluppsättning version 1.0 eller senare.

Exempel

Anta att du vill att WAF ska ignorera värdet för begärandehuvudet User-Agent . Huvudet User-Agent innehåller en karakteristisk sträng som gör att nätverksprotokollets peer-datorer kan identifiera programtypen, operativsystemet, programvaruleverantören eller programvaruversionen av den begärande programvaruanvändaragenten. Mer information finns i User-Agent.

Det kan finnas valfritt antal orsaker till att inaktivera utvärdering av det här huvudet. Det kan finnas en sträng som WAF identifierar och förutsätter att den är skadlig. Rubriken kan till exempel User-Agent innehålla den klassiska SQL-inmatningsattacken x=x i en sträng. I vissa fall kan detta vara legitim trafik. Därför kan du behöva undanta det här huvudet från WAF-utvärderingen.

Du kan använda följande metoder för att undanta User-Agent huvudet från utvärderingen av alla SQL-inmatningsregler:

Följ dessa steg för att konfigurera ett undantag per regel med hjälp av Azure-portalen:

  1. Gå till WAF-principen och välj Hanterade regler.

  2. Välj Lägg till undantag.

    Screenshot of the Azure portal that shows how to add a new per-rule exclusion for the W A F policy.

  3. I Gäller för väljer du den CRS-regeluppsättning som exkludering ska tillämpas på, till exempel OWASP_3.2.

    Screenshot of the Azure portal that shows the per-rule exclusion configuration for the W A F policy.

  4. Välj Lägg till regler och välj de regler som du vill tillämpa undantag på.

  5. Konfigurera matchningsvariabeln, operatorn och väljaren. Välj sedan Spara.

Du kan konfigurera flera undantag.

Du kan också undanta User-Agent huvudet från utvärderingen bara efter regel 942270:

Följ stegen som beskrivs i föregående exempel och välj regel 942270 i steg 4.

Globala undantag

Du kan konfigurera ett undantag som ska gälla för alla WAF-regler.

Exempel

Anta att du vill undanta värdet i användarparametern som skickas i begäran via URL:en. Anta till exempel att det är vanligt i din miljö att frågesträngsargumentet user innehåller en sträng som WAF ser som skadligt innehåll, så det blockerar det. Du kan exkludera alla frågesträngsargument där namnet börjar med ordet user, så att WAF inte utvärderar fältets värde.

I följande exempel visas hur du kan exkludera frågesträngsargumentet user från utvärderingen:

Följ dessa steg för att konfigurera ett globalt undantag med hjälp av Azure-portalen:

  1. Gå till WAF-principen och välj Hanterade regler.

  2. Välj Lägg till undantag.

    Screenshot of the Azure portal that shows how to add a new global exclusion for the W A F policy.

  3. I Gäller för väljer du Global

    Screenshot of the Azure portal that shows the global exclusion configuration for the W A F policy.

  4. Konfigurera matchningsvariabeln, operatorn och väljaren. Välj sedan Spara.

Du kan konfigurera flera undantag.

Så om URL:en http://www.contoso.com/?user%3c%3e=joe genomsöks av WAF utvärderas inte strängen joe, men den utvärderar fortfarande parameternamnet user%3c%3e.

Nästa steg