Dela via


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-policyn 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 detektion från WAF-reglerna. Genom att lägga till rubriken i en undantagslista kan du konfigurera WAF att ignorera rubriken, men WAF utvärderar fortfarande resten av förfrågan.

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 webbapplikationen.

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ärsrubriker
  • 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 förfrågningshuvud, kropp, cookie eller frågesträngsattribut. 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. * är värdet för selektorn. 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å följande tabell. 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
Rubrik* Skiftlägesokänsligt Skiftlägesokänsligt
Småkaka* Skiftlägesokänsligt Skiftlägeskänslig
Frågesträngen* Skiftlägesokänsligt Skiftlägeskänslig
URL-kodad kropp Skiftlägesokänsligt Skiftlägeskänslig
JSON-innehåll Skiftlägesokänsligt Skiftlägeskänslig
XML-brödtext Stöds inte Stöds inte
Flerdelad kropp Skiftlägesokänsligt Skiftlägeskänslig

Beroende på din applikation kan namn och värden för dina headers, cookies och frågeargument vara skiftlägeskänsliga eller okänsliga.

Anmärkning

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 följande huvudsektion:

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 Den här konfigurationen stoppar utvärderingen av alla värden för rubriken My-Header.

Anmärkning

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

I följande tabell visas några exempel på hur du kan strukturera ditt exkludering för en viss matchningsvariabel.

Attribut som ska undantas matchVariable (matchvariabel) väljareMatchningsOperatör Exempelväljare Exempelförfrågan Vad utesluts
Frågesträng RequestArgKeys (på engelska) Lika med /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Frågesträng RequestArgKeys (på engelska) ÄrLikaMedNågon Ej tillämpligt Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd och .htaccess
Frågesträng BegärArgNamn Lika med text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Frågesträng BegärArgNamn ÄrLikaMedNågon Ej tillämpligt Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd och .cshrc
Frågesträng RequestArgValues (på engelska) Lika med text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Frågesträng RequestArgValues (på engelska) ÄrLikaMedNågon Ej tillämpligt Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd och .cshrc
Begärandetext RequestArgKeys (på engelska) Innehåller sleep Begärandetext: {"sleep(5)": "test"} sleep(5)
Begärandetext RequestArgKeys (på engelska) ÄrLikaMedNågon Ej tillämpligt Begärandetext: {".zshrc": "value", "sleep(5)":"value2"} .zshrc och sleep(5)
Begärandetext BegärArgNamn Lika med test Begärandetext: {"test": ".zshrc"} .zshrc
Begärandetext BegärArgNamn ÄrLikaMedNågon Ej tillämpligt Begärandetext: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc och sleep(5)
Begärandetext RequestArgValues (på engelska) Lika med test Begärandetext: {"test": ".zshrc"} .zshrc
Begärandetext RequestArgValues (på engelska) ÄrLikaMedNågon Ej tillämpligt Begärandetext: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc och sleep(5)
Rubrik RequestHeaderKeys (på engelska) Lika med X-Scanner Rubrik: {"X-Scanner": "test"} X-scanner
Rubrik RequestHeaderKeys (på engelska) ÄrLikaMedNågon Ej tillämpligt Rubrik: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner och x-ratproxy-loop
Rubrik Förfrågningshuvudnamn Lika med head1 Rubrik: {"head1": "X-Scanner"} X-scanner
Rubrik Förfrågningshuvudnamn ÄrLikaMedNågon Ej tillämpligt Rubrik: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 och (hydra)
Rubrik Värden för begäranens rubrikhuvud Lika med head1 Rubrik: {"head1": "X-Scanner"} X-scanner
Rubrik Värden för begäranens rubrikhuvud ÄrLikaMedNågon Ej tillämpligt Rubrik: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 och (hydra)
Webbkaka RequestCookieKeys (på engelska) Innehåller /etc/passwd Rubrik: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Webbkaka RequestCookieKeys (på engelska) ÄrLikaMedNågon Ej tillämpligt Rubrik: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest och .htaccess
Webbkaka RequestCookieNames (på engelska) Lika med arg1 Rubrik: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Webbkaka RequestCookieNames (på engelska) ÄrLikaMedNågon Ej tillämpligt Rubrik: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd och .cshrc
Webbkaka RequestCookieValues (på engelska) Lika med arg1 Rubrik: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Webbkaka RequestCookieValues (på engelska) ÄrLikaMedNågon Ej tillämpligt Rubrik: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd och .cshrc

Anmärkning

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

Exkluderingsomfå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.

Tips

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 enligt 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 många orsaker att avaktivera denna headers utvärdering. 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. Alltså kanske du behöver undanta den här rubriken från WAF-utvärderingen.

Du kan använda följande metoder för att undanta User-Agent huvud från att utvärderas med alla SQL-injektionsregler:

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

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

  2. Välj Lägg till undantag.

    Skärmbild av Azure Portal som visar hur du lägger till ett nytt undantag per regel för W A F-principen.

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

    Skärmbild av Azure Portal som visar konfigurationen för undantag per regel för W A F-principen.

  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 huvudrubriken från utvärderingen bara med regeln 942270:

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

Globala exkluderingar

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 Portal:

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

  2. Välj Lägg till undantag.

    Skärmbild av Azure Portal som visar hur du lägger till ett nytt globalt undantag för W A F-principen.

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

    Skärmbild av Azure Portal som visar den globala exkluderingskonfigurationen för W A F-principen.

  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