Sdílet prostřednictvím


Seznamy vyloučení Firewallu webových aplikací

Azure Application Gateway - firewall webových aplikací (WAF) poskytuje ochranu pro webové aplikace. 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ě Azure Application Gateway a Vytvoření zásad pro Web Application Firewall 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
    • Argumenty řetězce dotazu 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á k přesnému porovnání. 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čí na: Tento operátor odpovídá všem polím v 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 kterémukoliv: Tento operátor odpovídá všem polím žádosti. * je 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í porovnání s rozlišováním nebo bez rozlišování velikosti 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 těla žádosti CRS 3.1 a starší CRS 3.2 a novější
Záhlaví* Nezáleží na velikosti písmen Nezáleží na velikosti písmen
Sušenka* Nezáleží na velikosti písmen Rozlišovat malá a velká písmena
Řetězec dotazu* Nezáleží na velikosti písmen Rozlišovat malá a velká písmena
Tělo kódované pomocí URL Nezáleží na velikosti písmen Rozlišovat malá a velká písmena
Tělo JSON Nezáleží na velikosti písmen Rozlišovat malá a velká písmena
Tělo XML Nepodporuje se Nepodporuje se
Vícedílné tělo Nezáleží na velikosti písmen 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 detekována jako útok WAFem. 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 shodnou proměnnou 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 selektorMatchOperator Příklad selektoru Příklad požadavku Co se vyloučí
Řetězec dotazu RequestArgKeys Je rovno /etc/passwd Identifikátor URI: http://localhost:8080/?/etc/passwd=test /etc/passwd
Řetězec dotazu RequestArgKeys Rovná se Kterýkoli Identifikátor URI: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 /etc/passwd a .htaccess
Řetězec dotazu RequestArgNames Je rovno text Identifikátor URI: http://localhost:8080/?text=/etc/passwd /etc/passwd
Řetězec dotazu RequestArgNames Rovná se Kterýkoli Identifikátor URI: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd a .cshrc
Řetězec dotazu Hodnoty argumentů žádosti Je rovno text Identifikátor URI: http://localhost:8080/?text=/etc/passwd /etc/passwd
Řetězec dotazu Hodnoty argumentů žádosti Rovná se Kterýkoli Identifikátor URI: http://localhost:8080/?text=/etc/passwd&text2=.cshrc /etc/passwd a .cshrc
Text požadavku RequestArgKeys Obsahuje sleep Text žádosti: {"sleep(5)": "test"} sleep(5)
Text požadavku RequestArgKeys Rovná se Kterýkoli Text žádosti: {".zshrc": "value", "sleep(5)":"value2"} .zshrc a sleep(5)
Text požadavku RequestArgNames Je rovno test Text žádosti: {"test": ".zshrc"} .zshrc
Text požadavku RequestArgNames Rovná se Kterýkoli Text žádosti: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc a sleep(5)
Text požadavku Hodnoty argumentů žádosti Je rovno test Text žádosti: {"test": ".zshrc"} .zshrc
Text požadavku Hodnoty argumentů žádosti Rovná se Kterýkoli Text žádosti: {"key1": ".zshrc", "key2":"sleep(5)"} .zshrc a sleep(5)
Hlavička Klíče požadavkové hlavičky Je rovno X-Scanner Záhlaví: {"X-Scanner": "test"} X-scanner
Hlavička Klíče požadavkové hlavičky Rovná se Kterýkoli Záhlaví: {"X-Scanner": "test", "x-ratproxy-loop": "value"} X-Scanner a x-ratproxy-loop
Hlavička Názvy záhlaví požadavku Je rovno head1 Záhlaví: {"head1": "X-Scanner"} X-scanner
Hlavička Názvy záhlaví požadavku Rovná se Kterýkoli Záhlaví: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 a (hydra)
Hlavička Hodnoty záhlaví požadavku Je rovno head1 Záhlaví: {"head1": "X-Scanner"} X-scanner
Hlavička Hodnoty záhlaví požadavku Rovná se Kterýkoli Záhlaví: {"head1": "myvar=1234", "User-Agent": "(hydra)"} myvar=1234 a (hydra)
Soubor cookie RequestCookieKeys Obsahuje /etc/passwd Záhlaví: {"Cookie": "/etc/passwdtest=hello1"} /etc/passwdtest
Soubor cookie RequestCookieKeys Rovná se Kterýkoli Záhlaví: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} /etc/passwdtest a .htaccess
Soubor cookie RequestCookieNames Je rovno arg1 Záhlaví: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Soubor cookie RequestCookieNames Rovná se Kterýkoli Záhlaví: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} /etc/passwd a .cshrc
Soubor cookie HodnotyPožadovanýchCookie Je rovno arg1 Záhlaví: {"Cookie": "arg1=/etc/passwd"} /etc/passwd
Soubor cookie HodnotyPožadovanýchCookie Rovná se Kterýkoli 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.

Návod

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í podle pravidel

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 obsahovat klasický útok typu SQL injekce v řetězci. 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í.

    Snímek obrazovky portálu Azure, který ukazuje, jak přidat nové vyloučení podle pravidel ve strategii WAF.

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

    Snímek obrazovky webu Azure Portal znázorňující konfiguraci vyloučení pro jednotlivá pravidla pro zásady W A F

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

    Snímek obrazovky webu Azure Portal, který ukazuje, jak přidat nové globální vyloučení pro zásady W A F

  3. V Platí pro vyberte Globální

    Snímek obrazovky webu Azure Portal znázorňující globální konfiguraci vyloučení pro zásady W A F

  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 prohledávána WAF, nevyhodnocuje řetězec joe, ale stále vyhodnocuje název parametru user%3c%3e.

Další kroky