Seznamy vyloučení Firewallu webových aplikací

Firewall webových aplikací služby Aplikace Azure Gateway (WAF) poskytuje ochranu webových aplikací. Tento článek popisuje konfiguraci seznamů vyloučení WAF. Tato nastavení se nacházejí v zásadách WAF přidružených k vaší službě Application Gateway. Další informace o zásadách WAF najdete v tématu Azure Web Application Firewall ve službě Aplikace Azure Gateway a vytvoření zásad firewallu webových aplikací pro službu Application Gateway.

WaF někdy může blokovat požadavek, který chcete pro vaši aplikaci povolit. Seznamy vyloučení WAF umožňují vynechat určité atributy požadavků z vyhodnocení WAF. Zbytek požadavku se vyhodnotí jako normální.

Služba Active Directory například vloží tokeny, které se používají k ověřování. Při použití v hlavičce požadavku můžou tyto tokeny obsahovat speciální znaky, které můžou aktivovat falešně pozitivní detekci z pravidel WAF. Přidáním hlavičky do seznamu vyloučení můžete nakonfigurovat WAF tak, aby hlavičku ignorovala, ale WAF stále vyhodnocuje zbytek požadavku.

Můžete nakonfigurovat vyloučení, která se použijí při vyhodnocování konkrétních pravidel WAF, nebo použít globálně pro vyhodnocení všech pravidel WAF. Pravidla vyloučení platí pro celou webovou aplikaci.

Identifikace atributů požadavku, které se mají vyloučit

Při konfiguraci vyloučení WAF je nutné zadat atributy požadavku, které by měly být vyloučeny z vyhodnocení WAF. Vyloučení WAF můžete nakonfigurovat pro následující atributy požadavku:

  • Záhlaví žádosti
  • Vyžádání souborů cookie
  • Název atributu požadavku (args) lze přidat jako prvek vyloučení, například:
    • Název pole formuláře
    • Entita JSON
    • Args řetězce dotazu adresy URL

Můžete zadat přesnou shodu hlavičky požadavku, textu, souboru cookie nebo atributu řetězce dotazu. Nebo můžete zadat částečné shody. Ke konfiguraci vyloučení použijte následující operátory:

  • Rovná se: Tento operátor se používá pro přesnou shodu. Například pro výběr hlavičky s názvem bearerToken použijte operátor equals se selektorem nastaveným jako bearerToken.
  • Začíná: Tento operátor odpovídá všem polím, která začínají zadanou hodnotou selektoru.
  • Končí: Tento operátor odpovídá všem polím požadavku, která končí zadanou hodnotou selektoru.
  • Obsahuje: Tento operátor odpovídá všem polím požadavku, která obsahují zadanou hodnotu selektoru.
  • Rovná se libovolné: Tento operátor odpovídá všem polím požadavku. * bude hodnota selektoru. Tento operátor byste například použili v případě, že neznáte přesné hodnoty dané proměnné shody, ale chcete se ujistit, že provoz požadavku bude stále vyloučen z vyhodnocení pravidel.

Při zpracování vyloučení modul WAF provádí shodu s rozlišováním velkých a malých písmen na základě následující tabulky. Regulární výrazy navíc nejsou povolené, protože selektory a těla požadavků XML nejsou podporovány.

Část Text žádosti CRS 3.1 a starší CRS 3.2 a novější
Záhlaví* Nerozlišující velká a malá písmena Nerozlišující velká a malá písmena
Soubor cookie* Nerozlišující velká a malá písmena Rozlišovat malá a velká písmena
Řetězec dotazu* Nerozlišující velká a malá písmena Rozlišovat malá a velká písmena
Text kódovaný adresou URL Nerozlišující velká a malá písmena Rozlišovat malá a velká písmena
Text JSON Nerozlišující velká a malá písmena Rozlišovat malá a velká písmena
Text XML Nepodporuje se Nepodporuje se
Vícedílné tělo Nerozlišující velká a malá písmena Rozlišovat malá a velká písmena

*V závislosti na vaší aplikaci můžou být názvy a hodnoty hlaviček, souborů cookie a dotazů rozlišovat malá a velká písmena nebo nerozlišují.

Poznámka:

Další informace a pomoc s řešením potíží najdete v tématu Řešení potíží s WAF.

Atributy požadavku podle klíčů a hodnot

Při konfiguraci vyloučení je potřeba určit, jestli chcete vyloučit klíč nebo hodnotu z vyhodnocení WAF.

Předpokládejme například, že vaše požadavky zahrnují tuto hlavičku:

My-Header: 1=1

Hodnota hlavičky (1=1) může být zjištěna jako útok WAF. Pokud ale víte, že se jedná o legitimní hodnotu pro váš scénář, můžete nakonfigurovat vyloučení pro hodnotu hlavičky. Uděláte to tak, že použijete proměnnou shody RequestHeaderValues , operátor obsahuje a selektor (My-Header). Tato konfigurace zastaví vyhodnocení všech hodnot hlavičky My-Header.

Poznámka:

Atributy požadavku podle klíče a hodnot jsou k dispozici pouze v CRS 3.2 nebo novějším a Bot Manageru 1.0 nebo novějším.

Atributy požadavku podle názvů fungují stejně jako atributy požadavku podle hodnot a jsou zahrnuty pro zpětnou kompatibilitu s CRS 3.1 a staršími verzemi. Doporučujeme používat atributy požadavku podle hodnot místo atributů podle názvů. Například použijte RequestHeaderValues místo RequestHeaderNames.

Naproti tomu pokud WAF zjistí název hlavičky (My-Header) jako útok, můžete nakonfigurovat vyloučení pro klíč hlavičky pomocí atributu požadavku RequestHeaderKeys. Atribut RequestHeaderKeys je k dispozici pouze v CRS 3.2 nebo novějším a Bot Manageru 1.0 nebo novějším.

Příklady atributů požadavku

Následující tabulka uvádí několik příkladů, jak můžete strukturovat vyloučení pro danou proměnnou shody.

Atribut k vyloučení matchVariable selectorMatchOperator Příklad selektoru Příklad požadavku Co se vyloučí
Řetězec dotazu RequestArgKeys Se rovná /etc/passwd Uri: http://localhost:8080/?/etc/passwd=test /etc/passwd
Řetězec dotazu RequestArgKeys EqualsAny Uri: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd a .htaccess
Řetězec dotazu RequestArgNames Se rovná text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Řetězec dotazu RequestArgNames EqualsAny Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd a .cshrc
Řetězec dotazu RequestArgValues Se rovná text Uri: http://localhost:8080/?text=/etc/passwd /etc/passwd
Řetězec dotazu RequestArgValues EqualsAny Uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd a .cshrc
Text požadavku RequestArgKeys Contains sleep Text žádosti: {"sleep(5)": "test"} sleep(5)
Text požadavku RequestArgKeys EqualsAny Text žádosti: {".zshrc": "value", "sleep(5)":"value2"} .zshrc a sleep(5)
Text požadavku RequestArgNames Se rovná test Text žádosti: {"test": ".zshrc"} .zshrc
Text požadavku RequestArgNames EqualsAny Text žádosti: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc a sleep(5)
Text požadavku RequestArgValues Se rovná test Text žádosti: {"test": ".zshrc"} .zshrc
Text požadavku RequestArgValues EqualsAny Text žádosti: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc a sleep(5)
Hlavička RequestHeaderKeys Se rovná X-Scanner Záhlaví: {"X-Scanner": "test"} X-scanner
Hlavička RequestHeaderKeys EqualsAny Záhlaví: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner a x-ratproxy-loop
Hlavička RequestHeaderNames Se rovná head1 Záhlaví: {"head1": "X-Scanner"} X-scanner
Hlavička RequestHeaderNames EqualsAny Záhlaví: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 a (hydra)
Hlavička RequestHeaderValues Se rovná head1 Záhlaví: {"head1": "X-Scanner"} X-scanner
Hlavička RequestHeaderValues EqualsAny Záhlaví: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 a (hydra)
Soubor cookie RequestCookieKeys Contains /etc/passwd Záhlaví: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Soubor cookie RequestCookieKeys EqualsAny Záhlaví: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest a .htaccess
Soubor cookie RequestCookieNames Se rovná arg1 Záhlaví: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Soubor cookie RequestCookieNames EqualsAny Záhlaví: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd a .cshrc
Soubor cookie RequestCookieValues Se rovná arg1 Záhlaví: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Soubor cookie RequestCookieValues EqualsAny Záhlaví: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd a .cshrc

Poznámka:

Pokud vytvoříte vyloučení pomocí selektoruMatchOperator EqualsAny, vše, co vložíte do pole selektoru, se při vytvoření vyloučení převede na "*" back-endem.

Obory vyloučení

Vyloučení se dají nakonfigurovat tak, aby platila pro konkrétní sadu pravidel WAF, pro sady pravidel nebo globálně napříč všemi pravidly.

Tip

Je vhodné zajistit co nejužší a nejpřesnější vyloučení, aby se zabránilo náhodnému opuštění místa pro útočníky, kteří by mohli váš systém zneužít. Pokud potřebujete přidat pravidlo vyloučení, používejte vyloučení pro jednotlivá pravidla, kdykoli je to možné.

Vyloučení pro jednotlivá pravidla

Můžete nakonfigurovat vyloučení pro konkrétní pravidlo, skupinu pravidel nebo sadu pravidel. Musíte zadat pravidlo nebo pravidla, na která se vyloučení vztahuje. Musíte také zadat atribut požadavku, který by měl být vyloučen z vyhodnocení WAF. Pokud chcete vyloučit úplnou skupinu pravidel, zadejte ruleGroupName pouze parametr, parametr je užitečný jenom v případě, rules že chcete omezit vyloučení na konkrétní pravidla skupiny.

Vyloučení pro jednotlivá pravidla jsou dostupná, pokud používáte sadu pravidel OWASP (CRS) verze 3.2 nebo novější nebo sadu pravidel Bot Manageru verze 1.0 nebo novější.

Příklad

Předpokládejme, že chcete, aby WAF ignoroval hodnotu hlavičky User-Agent požadavku. Hlavička User-Agent obsahuje charakteristické řetězce, který umožňuje partnerským síťovým protokolům identifikovat typ aplikace, operační systém, dodavatele softwaru nebo verzi softwaru žádajícího softwarového uživatelského agenta. Další informace naleznete v tématu User-Agent.

Vyhodnocení této hlavičky může být možné zakázat z libovolného počtu důvodů. Může existovat řetězec, který WAF detekuje a předpokládá, že je škodlivý. Hlavička User-Agent může například zahrnovat klasický útok prostřednictvím x=x injektáže SQL do řetězce. V některých případech to může být legitimní provoz. Proto možná budete muset tuto hlavičku vyloučit z vyhodnocení WAF.

Pomocí následujících přístupů můžete vyloučit hlavičku User-Agent z vyhodnocení všemi pravidly injektáže SQL:

Pokud chcete nakonfigurovat vyloučení pro jednotlivá pravidla pomocí webu Azure Portal, postupujte takto:

  1. Přejděte na zásady WAF a vyberte Spravovaná pravidla.

  2. Vyberte Přidat vyloučení.

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

  3. V části Platí pro vyberte sadu pravidel CRS, u které chcete použít vyloučení, například OWASP_3.2.

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

  4. Vyberte Přidat pravidla a vyberte pravidla, na která chcete použít vyloučení.

  5. Nakonfigurujte proměnnou shody, operátor a selektor. Pak vyberte Uložit.

Můžete nakonfigurovat více vyloučení.

Záhlaví můžete vyloučit User-Agent také z vyhodnocení podle pravidla 942270:

Postupujte podle kroků popsaných v předchozím příkladu a v kroku 4 vyberte pravidlo 942270.

Globální vyloučení

Můžete nakonfigurovat vyloučení tak, aby se použilo pro všechna pravidla WAF.

Příklad

Předpokládejme, že chcete vyloučit hodnotu v parametru uživatele předávaného v požadavku prostřednictvím adresy URL. Řekněme například, že v prostředí user je běžné, že argument řetězce dotazu obsahuje řetězec, který WAF zobrazí jako škodlivý obsah, takže ho zablokuje. Můžete vyloučit všechny argumenty řetězce dotazu, kde název začíná slovem user, aby WAF nevyhodnotil hodnotu pole.

Následující příklad ukazuje, jak můžete vyloučit user argument řetězce dotazu z vyhodnocení:

Pokud chcete nakonfigurovat globální vyloučení pomocí webu Azure Portal, postupujte takto:

  1. Přejděte na zásady WAF a vyberte Spravovaná pravidla.

  2. Vyberte Přidat vyloučení.

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

  3. V možnosti Platí pro vyberte Globální.

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

  4. Nakonfigurujte proměnnou shody, operátor a selektor. Pak vyberte Uložit.

Můžete nakonfigurovat více vyloučení.

Takže pokud je adresa URL http://www.contoso.com/?user%3c%3e=joe naskenována WAF, nevyhodnotí řetězec joe, ale přesto vyhodnotí název parametru user%3c%3e.

Další kroky