Uitsluitingslijsten voor Web Application Firewall

De Azure-toepassing Gateway Web Application Firewall (WAF) biedt beveiliging voor webtoepassingen. In dit artikel wordt de configuratie voor WAF-uitsluitingslijsten beschreven. Deze instellingen bevinden zich in het WAF-beleid dat is gekoppeld aan uw Application Gateway. Zie Azure Web Application Firewall op Azure-toepassing Gateway en Web Application Firewall-beleid maken voor Application Gateway voor meer informatie over WAF-beleid.

Soms blokkeert WAF een aanvraag die u wilt toestaan voor uw toepassing. Met WAF-uitsluitingslijsten kunt u bepaalde aanvraagkenmerken weglaten uit een WAF-evaluatie. De rest van de aanvraag wordt als normaal geëvalueerd.

Active Directory voegt bijvoorbeeld tokens in die worden gebruikt voor verificatie. Wanneer deze tokens worden gebruikt in een aanvraagheader, kunnen deze tokens speciale tekens bevatten die mogelijk een fout-positieve detectie van de WAF-regels activeren. Door de header toe te voegen aan een uitsluitingslijst, kunt u WAF configureren om de header te negeren, maar WAF evalueert nog steeds de rest van de aanvraag.

U kunt uitsluitingen zo configureren dat deze van toepassing zijn wanneer specifieke WAF-regels worden geëvalueerd of om globaal toe te passen op de evaluatie van alle WAF-regels. Uitsluitingsregels zijn van toepassing op uw hele webtoepassing.

Aanvraagkenmerken identificeren die moeten worden uitgesloten

Wanneer u een WAF-uitsluiting configureert, moet u de kenmerken opgeven van de aanvraag die moet worden uitgesloten van de WAF-evaluatie. U kunt een WAF-uitsluiting configureren voor de volgende aanvraagkenmerken:

  • Aanvraagheaders
  • Cookies aanvragen
  • De naam van het aanvraagkenmerk (args) kan worden toegevoegd als een uitsluitingselement, zoals:
    • Formulierveldnaam
    • JSON-entiteit
    • URL-queryreeks args

U kunt een exacte aanvraagheader, hoofdtekst, cookie of querytekenreekskenmerkovereenkomst opgeven. U kunt ook gedeeltelijke overeenkomsten opgeven. Gebruik de volgende operators om de uitsluiting te configureren:

  • Is gelijk aan: deze operator wordt gebruikt voor een exacte overeenkomst. Als voorbeeld gebruikt u voor het selecteren van een header met de naam bearerToken de gelijktekeningsoperator met de selector die is ingesteld als bearerToken.
  • Begint met: Deze operator komt overeen met alle velden die beginnen met de opgegeven selectorwaarde.
  • Eindigt met: Deze operator komt overeen met alle aanvraagvelden die eindigen op de opgegeven selectorwaarde.
  • Bevat: Deze operator komt overeen met alle aanvraagvelden die de opgegeven selectorwaarde bevatten.
  • Is gelijk aan elke: deze operator komt overeen met alle aanvraagvelden. * is de selectorwaarde. U gebruikt deze operator bijvoorbeeld wanneer u niet weet welke waarden voor een bepaalde overeenkomstvariabele precies zijn, maar ervoor wilt zorgen dat het aanvraagverkeer nog steeds wordt uitgesloten van de evaluatie van regels.

Bij het verwerken van uitsluitingen voert de WAF-engine een hoofdlettergevoelige/niet-gevoelige overeenkomst uit op basis van de onderstaande tabel. Daarnaast worden reguliere expressies niet toegestaan omdat selectors en XML-aanvraagteksten niet worden ondersteund.

Hoofdtekst van aanvraag CRS 3.1 en eerder CRS 3.2 en hoger
Header* Niet-hoofdlettergevoelig Niet-hoofdlettergevoelig
Cookie* Niet-hoofdlettergevoelig Hoofdlettergevoelig
Queryreeks* Niet-hoofdlettergevoelig Hoofdlettergevoelig
Hoofdtekst met URL-codering Niet-hoofdlettergevoelig Hoofdlettergevoelig
JSON-hoofdtekst Niet-hoofdlettergevoelig Hoofdlettergevoelig
XML-hoofdtekst Niet ondersteund Niet ondersteund
Hoofdtekst met meerdere onderdelen Niet-hoofdlettergevoelig Hoofdlettergevoelig

*Afhankelijk van uw toepassing, kunnen de namen en waarden van uw headers, cookies en query args hoofdlettergevoelig of niet gevoelig zijn.

Kenmerken aanvragen op sleutels en waarden

Wanneer u een uitsluiting configureert, moet u bepalen of u de sleutel of de waarde van de WAF-evaluatie wilt uitsluiten.

Stel dat uw aanvragen deze header bevatten:

My-Header: 1=1

De waarde van de header (1=1) kan worden gedetecteerd als een aanval door de WAF. Maar als u weet dat dit een legitieme waarde is voor uw scenario, kunt u een uitsluiting configureren voor de waarde van de header. Hiervoor gebruikt u de matchvariabele RequestHeaderValues , de operator bevat en de selector (My-Header). Deze configuratie stopt de evaluatie van alle waarden voor de header My-Header.

Notitie

Aanvraagkenmerken per sleutel en waarden zijn alleen beschikbaar in CRS 3.2 of hoger en Bot Manager 1.0 of hoger.

Aanvraagkenmerken op namen werken op dezelfde manier als aanvraagkenmerken op basis van waarden en zijn opgenomen voor achterwaartse compatibiliteit met CRS 3.1 en eerdere versies. We raden u aan om aanvraagkenmerken te gebruiken op basis van waarden in plaats van kenmerken op namen. Gebruik bijvoorbeeld RequestHeaderValues in plaats van RequestHeaderNames.

Als uw WAF daarentegen de naam van de header (My-Header) detecteert als een aanval, kunt u een uitsluiting voor de headersleutel configureren met behulp van het aanvraagkenmerk RequestHeaderKeys. Het kenmerk RequestHeaderKeys is alleen beschikbaar in CRS 3.2 of hoger en Bot Manager 1.0 of hoger.

Voorbeelden van aanvraagkenmerk

In de onderstaande tabel ziet u enkele voorbeelden van hoe u uw uitsluiting voor een bepaalde overeenkomstvariabele kunt structuren.

Kenmerk dat moet worden uitgesloten matchVariable selectorMatchOperator Voorbeeldkiezer Voorbeeld van aanvraag Wat wordt uitgesloten
Queryreeks RequestArgKeys Is gelijk aan /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Queryreeks RequestArgKeys EqualsAny N.v.t. Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd en .htaccess
Queryreeks RequestArgNames Is gelijk aan text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Queryreeks RequestArgNames EqualsAny N.v.t. Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd en .cshrc
Queryreeks RequestArgValues Is gelijk aan text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Queryreeks RequestArgValues EqualsAny N.v.t. Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd en .cshrc
Aanvraagtekst RequestArgKeys Bevat sleep Aanvraagbody: {"sleep(5)": "test"} sleep(5)
Aanvraagtekst RequestArgKeys EqualsAny N.v.t. Aanvraagbody: {".zshrc": "value", "sleep(5)":"value2"} .zshrc en sleep(5)
Aanvraagtekst RequestArgNames Is gelijk aan test Aanvraagbody: {"test": ".zshrc"} .zshrc
Aanvraagtekst RequestArgNames EqualsAny N.v.t. Aanvraagbody: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc en sleep(5)
Aanvraagtekst RequestArgValues Is gelijk aan test Aanvraagbody: {"test": ".zshrc"} .zshrc
Aanvraagtekst RequestArgValues EqualsAny N.v.t. Aanvraagbody: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc en sleep(5)
Koptekst RequestHeaderKeys Is gelijk aan X-Scanner Header: {"X-Scanner": "test"} X-scanner
Koptekst RequestHeaderKeys EqualsAny N.v.t. Header: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner en x-ratproxy-loop
Koptekst RequestHeaderNames Is gelijk aan head1 Header: {"head1": "X-Scanner"} X-scanner
Koptekst RequestHeaderNames EqualsAny N.v.t. Header: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 en (hydra)
Koptekst RequestHeaderValues Is gelijk aan head1 Header: {"head1": "X-Scanner"} X-scanner
Koptekst RequestHeaderValues EqualsAny N.v.t. Header: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 en (hydra)
Cookie RequestCookieKeys Bevat /etc/passwd Header: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Cookie RequestCookieKeys EqualsAny N.v.t. Header: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest en .htaccess
Cookie RequestCookieNames Is gelijk aan arg1 Header: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieNames EqualsAny N.v.t. Header: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd en .cshrc
Cookie RequestCookieValues Is gelijk aan arg1 Header: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Cookie RequestCookieValues EqualsAny N.v.t. Header: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd en .cshrc

Notitie

Als u een uitsluiting maakt met behulp van de selectorMatchOperator EqualsAny, wordt alles wat u in het selectorveld plaatst, door de back-end geconverteerd naar '*' wanneer de uitsluiting wordt gemaakt.

Uitsluitingsbereiken

Uitsluitingen kunnen worden geconfigureerd om van toepassing te zijn op een specifieke set WAF-regels, op regelsets of wereldwijd op alle regels.

Tip

Het is een goede gewoonte om uitsluitingen zo smal en specifiek mogelijk te maken, om te voorkomen dat aanvallers per ongeluk ruimte hebben om uw systeem te misbruiken. Wanneer u een uitsluitingsregel moet toevoegen, gebruikt u waar mogelijk uitsluitingen per regel.

Uitsluitingen per regel

U kunt een uitsluiting configureren voor een specifieke regel, groep regels of regelset. U moet de regel of regels opgeven waarop de uitsluiting van toepassing is. U moet ook het aanvraagkenmerk opgeven dat moet worden uitgesloten van de WAF-evaluatie. Als u een volledige groep regels wilt uitsluiten, geeft u alleen de ruleGroupName parameter op, is de rules parameter alleen handig als u de uitsluiting wilt beperken tot specifieke regels van een groep.

Uitsluitingen per regel zijn beschikbaar wanneer u de OWASP-regelset (CRS) versie 3.2 of hoger of Bot Manager-regelset versie 1.0 of hoger gebruikt.

Voorbeeld

Stel dat u wilt dat de WAF de waarde van de User-Agent aanvraagheader negeert. De User-Agent header bevat een kenmerktekenreeks waarmee peers van het netwerkprotocol het toepassingstype, besturingssysteem, softwareleverancier of softwareversie van de aangevraagde softwaregebruikersagent kunnen identificeren. Zie User-Agent voor meer informatie.

Er kunnen verschillende redenen zijn om het evalueren van deze header uit te schakelen. Er kan een tekenreeks zijn die door de WAF wordt gedetecteerd en ervan wordt uitgegaan dat deze schadelijk is. De User-Agent header kan bijvoorbeeld de klassieke SQL-injectieaanval x=x in een tekenreeks bevatten. In sommige gevallen kan dit legitiem verkeer zijn. Daarom moet u deze header mogelijk uitsluiten van de WAF-evaluatie.

U kunt de volgende methoden gebruiken om de User-Agent header uit te sluiten van evaluatie door alle SQL-injectieregels:

Voer de volgende stappen uit om een uitsluiting per regel te configureren met behulp van Azure Portal:

  1. Navigeer naar het WAF-beleid en selecteer Beheerde regels.

  2. Selecteer Uitsluitingen toevoegen.

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

  3. Selecteer in Van toepassing op de CRS-regelset om de uitsluiting toe te passen, zoals OWASP_3.2.

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

  4. Selecteer Regels toevoegen en selecteer de regels waarop u uitsluitingen wilt toepassen.

  5. Configureer de overeenkomstvariabele, operator en selector. Selecteer vervolgens Opslaan.

U kunt meerdere uitsluitingen configureren.

U kunt de User-Agent header ook uitsluiten van evaluatie op basis van regel 942270:

Volg de stappen die in het vorige voorbeeld worden beschreven en selecteer regel 942270 in stap 4.

Globale uitsluitingen

U kunt een uitsluiting configureren die moet worden toegepast op alle WAF-regels.

Voorbeeld

Stel dat u de waarde wilt uitsluiten in de gebruikersparameter die wordt doorgegeven in de aanvraag via de URL. Stel dat het gebruikelijk is in uw omgeving voor het user argument querytekenreeks een tekenreeks te bevatten die door de WAF-weergaven als schadelijke inhoud wordt gebruikt, zodat deze wordt geblokkeerd. U kunt alle queryreeksargumenten uitsluiten waarbij de naam begint met het woord user, zodat de WAF de waarde van het veld niet evalueert.

In het volgende voorbeeld ziet u hoe u het querytekenreeksargument kunt uitsluiten van evaluatie user :

Volg deze stappen om een globale uitsluiting te configureren met behulp van Azure Portal:

  1. Navigeer naar het WAF-beleid en selecteer Beheerde regels.

  2. Selecteer Uitsluitingen toevoegen.

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

  3. Selecteer Globaal in Van toepassing op

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

  4. Configureer de overeenkomstvariabele, operator en selector. Selecteer vervolgens Opslaan.

U kunt meerdere uitsluitingen configureren.

Dus als de URL http://www.contoso.com/?user%3c%3e=joe wordt gescand door de WAF, wordt de tekenreeks joe niet geëvalueerd, maar wordt de parameternaam gebruiker%3c%3e nog steeds geëvalueerd.

Volgende stappen