Seznamy vyloučení Firewallu webových aplikací
Firewall webových aplikací (WAF) Aplikace Azure lication Gateway 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 lication 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 |
Sušenka* | 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 | Je rovno | /etc/passwd |
Identifikátor uri: http://localhost:8080/?/etc/passwd=test |
/etc/passwd |
Řetězec dotazu | RequestArgKeys | EqualsAny | – | 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 | EqualsAny | – | Identifikátor uri: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd a .cshrc |
Řetězec dotazu | RequestArgValues | Je rovno | text |
Identifikátor uri: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Řetězec dotazu | RequestArgValues | EqualsAny | – | Identifikátor 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 | Je rovno | 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 | Je rovno | 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 | Je rovno | 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 | Je rovno | 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 | Je rovno | 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 | Je rovno | 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 | Je rovno | 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:
Přejděte na zásady WAF a vyberte Spravovaná pravidla.
Vyberte Přidat vyloučení.
V části Platí pro vyberte sadu pravidel CRS, u které chcete použít vyloučení, například OWASP_3.2.
Vyberte Přidat pravidla a vyberte pravidla, na která chcete použít vyloučení.
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:
Přejděte na zásady WAF a vyberte Spravovaná pravidla.
Vyberte Přidat vyloučení.
V možnosti Platí pro vyberte Globální.
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
- Po konfiguraci nastavení WAF se dozvíte, jak zobrazit protokoly WAF. Další informace najdete v tématu Diagnostika služby Application Gateway.
- Další informace o zabezpečení sítě Azure