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 |
---|---|---|
Rubriek* | Niet-hoofdlettergevoelig | Niet-hoofdlettergevoelig |
Koekje* | 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 | Contains | 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 |
Rubriek: {"X-Scanner": "test"} |
X-scanner |
Koptekst | RequestHeaderKeys | EqualsAny | N.v.t. | Rubriek: {"X-Scanner": "test", "x-ratproxy-loop": "value"} |
X-Scanner en x-ratproxy-loop |
Koptekst | RequestHeaderNames | Is gelijk aan | head1 |
Rubriek: {"head1": "X-Scanner"} |
X-scanner |
Koptekst | RequestHeaderNames | EqualsAny | N.v.t. | Rubriek: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 en (hydra) |
Koptekst | RequestHeaderValues | Is gelijk aan | head1 |
Rubriek: {"head1": "X-Scanner"} |
X-scanner |
Koptekst | RequestHeaderValues | EqualsAny | N.v.t. | Rubriek: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 en (hydra) |
Cookie | RequestCookieKeys | Contains | /etc/passwd |
Rubriek: {"Cookie": "/etc/passwdtest=hello1"} |
/etc/passwdtest |
Cookie | RequestCookieKeys | EqualsAny | N.v.t. | Rubriek: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} |
/etc/passwdtest en .htaccess |
Cookie | RequestCookieNames | Is gelijk aan | arg1 |
Rubriek: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Cookie | RequestCookieNames | EqualsAny | N.v.t. | Rubriek: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd en .cshrc |
Cookie | RequestCookieValues | Is gelijk aan | arg1 |
Rubriek: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Cookie | RequestCookieValues | EqualsAny | N.v.t. | Rubriek: {"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.
Opmerking
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:
Navigeer naar het WAF-beleid en selecteer Beheerde regels.
Selecteer Uitsluitingen toevoegen.
Selecteer in Van toepassing op de CRS-regelset om de uitsluiting toe te passen, zoals OWASP_3.2.
Selecteer Regels toevoegen en selecteer de regels waarop u uitsluitingen wilt toepassen.
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.
Opmerking
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:
Navigeer naar het WAF-beleid en selecteer Beheerde regels.
Selecteer Uitsluitingen toevoegen.
Selecteer Globaal in Van toepassing op
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
- Nadat u uw WAF-instellingen hebt geconfigureerd, kunt u leren hoe u uw WAF-logboeken kunt weergeven. Zie Application Gateway Diagnostics voor meer informatie.
- Meer informatie over Azure-netwerkbeveiliging