Web Uygulaması Güvenlik Duvarı dışlama listeleri
Azure Uygulaması lication Gateway Web Uygulaması Güvenlik Duvarı (WAF), web uygulamaları için koruma sağlar. Bu makalede WAF dışlama listelerinin yapılandırması açıklanmaktadır. Bu ayarlar, Application Gateway'inizle ilişkili WAF ilkesinde bulunur. WAF ilkeleri hakkında daha fazla bilgi edinmek için bkz. Azure Uygulaması lication Gateway üzerinde Azure Web Uygulaması Güvenlik Duvarı ve Application Gateway için Web Uygulaması Güvenlik Duvarı ilkeleri oluşturma.
Bazen WAF, uygulamanız için izin vermek istediğiniz bir isteği engelleyebilir. WAF dışlama listeleri, bir WAF değerlendirmesinden belirli istek özniteliklerini atlamanıza olanak tanır. İsteğin geri kalanı normal olarak değerlendirilir.
Örneğin, Active Directory kimlik doğrulaması için kullanılan belirteçleri ekler. bir istek üst bilgisinde kullanıldığında, bu belirteçler WAF kurallarından hatalı pozitif algılama tetikleyebilecek özel karakterler içerebilir. Üst bilgiyi bir dışlama listesine ekleyerek WAF'yi üst bilgiyi yoksayacak şekilde yapılandırabilirsiniz, ancak WAF yine de isteğin geri kalanını değerlendirir.
Dışlamaları, belirli WAF kuralları değerlendirildiğinde uygulanacak veya tüm WAF kurallarının değerlendirmesine genel olarak uygulanacak şekilde yapılandırabilirsiniz. Dışlama kuralları tüm web uygulamanız için geçerlidir.
Dışlanması gereken istek özniteliklerini tanımlama
WAF dışlama yapılandırırken, isteğin WAF değerlendirmesinin dışında tutulması gereken özniteliklerini belirtmeniz gerekir. Aşağıdaki istek öznitelikleri için WAF dışlaması yapılandırabilirsiniz:
- İstek üst bilgileri
- Tanımlama bilgileri isteme
- İstek öznitelik adı (args) bir dışlama öğesi olarak eklenebilir, örneğin:
- Form alanı adı
- JSON varlığı
- URL sorgu dizesi birleştirmeleri
Tam istek üst bilgisi, gövde, tanımlama bilgisi veya sorgu dizesi öznitelik eşleşmesi belirtebilirsiniz. Alternatif olarak, kısmi eşleşmeler de belirtebilirsiniz. Dışlama yapılandırmak için aşağıdaki işleçleri kullanın:
- Eşittir: Bu işleç tam eşleşme için kullanılır. Örneğin bearerToken adlı bir üst bilgi seçmek için, seçici bearerToken olarak ayarlanmış equals işlecini kullanın.
- Şununla başlar: Bu işleç, belirtilen seçici değeriyle başlayan tüm alanlarla eşleşir.
- Şununla biter: Bu işleç, belirtilen seçici değeriyle biten tüm istek alanlarıyla eşleşir.
- İçerir: Bu işleç, belirtilen seçici değerini içeren tüm istek alanlarıyla eşleşir.
- Herhangi birine eşittir: Bu işleç tüm istek alanlarıyla eşleşir. * seçici değeri olacaktır. Örneğin, belirli bir eşleşme değişkeninin tam değerlerini bilmediğiniz ancak istek trafiğinin kural değerlendirmesinin dışında tutulduğundan emin olmak istediğinizde bu işleci kullanabilirsiniz.
Dışlamaları işlerken WAF altyapısı aşağıdaki tabloya göre büyük/küçük harfe duyarlı/duyarsız bir eşleşme gerçekleştirir. Ayrıca, seçiciler olarak normal ifadelere izin verilmez ve XML istek gövdeleri desteklenmez.
İstek Gövdesi Bölümü | CRS 3.1 ve Öncesi | CRS 3.2 ve Üzeri |
---|---|---|
Üstbilgi* | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarsız |
Çerez* | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarlı |
Sorgu Dizesi* | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarlı |
URL Ile Kodlanmış Gövde | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarlı |
JSON Gövdesi | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarlı |
XML Gövdesi | Desteklenmiyor | Desteklenmiyor |
Çok Parçalı Gövde | Büyük/Küçük Harfe Duyarsız | Büyük/Küçük Harfe Duyarlı |
*Uygulamanıza bağlı olarak üst bilgilerinizin, tanımlama bilgilerinizin ve sorgu birleştirmelerinizin adları ve değerleri büyük/küçük harfe duyarlı veya duyarsız olabilir.
Not
Daha fazla bilgi ve sorun giderme yardımı için bkz . WAF sorun giderme.
Anahtarlara ve değerlere göre istek öznitelikleri
Bir dışlama yapılandırırken, anahtarı mı yoksa değeri WAF değerlendirmesinin dışında mı tutmak istediğinizi belirlemeniz gerekir.
Örneğin, isteklerinizin şu üst bilgiyi içerdiğini varsayalım:
My-Header: 1=1
Üst bilginin (1=1
) değeri WAF tarafından bir saldırı olarak algılanabilir. Ancak bunun senaryonuz için geçerli bir değer olduğunu biliyorsanız, üst bilgi değeri için bir dışlama yapılandırabilirsiniz. Bunu yapmak için RequestHeaderValues match değişkenini, işlecini ve seçiciyi (My-Header
) kullanırsınız. Bu yapılandırma, üst bilgisi My-Header
için tüm değerlerin değerlendirilmesini durdurur.
Not
Anahtar ve değerlere göre istek öznitelikleri yalnızca CRS 3.2 veya daha yeni ve Bot Manager 1.0 veya daha yeni sürümlerde kullanılabilir.
Adlara göre istek öznitelikleri, değerlere göre istek öznitelikleriyle aynı şekilde çalışır ve CRS 3.1 ve önceki sürümlerle geriye dönük uyumluluk için eklenir. İstek özniteliklerini adlara göre öznitelikler yerine değerlere göre kullanmanızı öneririz. Örneğin, RequestHeaderNames yerine RequestHeaderValues kullanın.
Buna karşılık, WAF'niz üst bilginin adını (My-Header
) bir saldırı olarak algılarsa, RequestHeaderKeys istek özniteliğini kullanarak üst bilgi anahtarı için bir dışlama yapılandırabilirsiniz. RequestHeaderKeys özniteliği yalnızca CRS 3.2 veya daha yeni ve Bot Manager 1.0 veya daha yeni sürümlerde kullanılabilir.
İstek özniteliği örnekleri
Aşağıdaki tabloda, belirli bir eşleşme değişkeni için dışlamanızı nasıl yapılandırabileceğinize ilişkin bazı örnekler gösterilmektedir.
Dışlanması Gereken Öznitelik | matchVariable | selectorMatchOperator | Örnek seçici | Örnek istek | Dışlananlar |
---|---|---|---|---|---|
Sorgu dizesi | RequestArgKeys | Eşittir | /etc/passwd |
Urı: http://localhost:8080/?/etc/passwd=test |
/etc/passwd |
Sorgu dizesi | RequestArgKeys | EqualsAny | Yok | Urı: http://localhost:8080/?/etc/passwd=test&.htaccess=test2 |
/etc/passwd ve .htaccess |
Sorgu dizesi | RequestArgNames | Eşittir | text |
Urı: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Sorgu dizesi | RequestArgNames | EqualsAny | Yok | Urı: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd ve .cshrc |
Sorgu dizesi | RequestArgValues | Eşittir | text |
Urı: http://localhost:8080/?text=/etc/passwd |
/etc/passwd |
Sorgu dizesi | RequestArgValues | EqualsAny | Yok | Urı: http://localhost:8080/?text=/etc/passwd&text2=.cshrc |
/etc/passwd ve .cshrc |
Request body | RequestArgKeys | Contains | sleep |
İstek gövdesi: {"sleep(5)": "test"} |
sleep(5) |
Request body | RequestArgKeys | EqualsAny | Yok | İstek gövdesi: {".zshrc": "value", "sleep(5)":"value2"} |
.zshrc ve sleep(5) |
Request body | RequestArgNames | Eşittir | test |
İstek gövdesi: {"test": ".zshrc"} |
.zshrc |
Request body | RequestArgNames | EqualsAny | Yok | İstek gövdesi: {"key1": ".zshrc", "key2":"sleep(5)"} |
.zshrc ve sleep(5) |
Request body | RequestArgValues | Eşittir | test |
İstek gövdesi: {"test": ".zshrc"} |
.zshrc |
Request body | RequestArgValues | EqualsAny | Yok | İstek gövdesi: {"key1": ".zshrc", "key2":"sleep(5)"} |
.zshrc ve sleep(5) |
Üst bilgi | RequestHeaderKeys | Eşittir | X-Scanner |
Üstbilgi: {"X-Scanner": "test"} |
X-scanner |
Üst bilgi | RequestHeaderKeys | EqualsAny | Yok | Üstbilgi: {"X-Scanner": "test", "x-ratproxy-loop": "value"} |
X-Scanner ve x-ratproxy-loop |
Üst bilgi | RequestHeaderNames | Eşittir | head1 |
Üstbilgi: {"head1": "X-Scanner"} |
X-scanner |
Üst bilgi | RequestHeaderNames | EqualsAny | Yok | Üstbilgi: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 ve (hydra) |
Üst bilgi | RequestHeaderValues | Eşittir | head1 |
Üstbilgi: {"head1": "X-Scanner"} |
X-scanner |
Üst bilgi | RequestHeaderValues | EqualsAny | Yok | Üstbilgi: {"head1": "myvar=1234", "User-Agent": "(hydra)"} |
myvar=1234 ve (hydra) |
Tanımlama Bilgisi | RequestCookieKeys | Contains | /etc/passwd |
Üstbilgi: {"Cookie": "/etc/passwdtest=hello1"} |
/etc/passwdtest |
Tanımlama Bilgisi | RequestCookieKeys | EqualsAny | Yok | Üstbilgi: {"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"} |
/etc/passwdtest ve .htaccess |
Tanımlama Bilgisi | RequestCookieNames | Eşittir | arg1 |
Üstbilgi: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Tanımlama Bilgisi | RequestCookieNames | EqualsAny | Yok | Üstbilgi: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd ve .cshrc |
Tanımlama Bilgisi | RequestCookieValues | Eşittir | arg1 |
Üstbilgi: {"Cookie": "arg1=/etc/passwd"} |
/etc/passwd |
Tanımlama Bilgisi | RequestCookieValues | EqualsAny | Yok | Üstbilgi: {"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"} |
/etc/passwd ve .cshrc |
Not
selectorMatchOperator EqualsAny
kullanarak bir dışlama oluşturursanız, seçici alanına eklediğiniz her şey dışlama oluşturulduğunda arka uç tarafından "*" olarak dönüştürülür.
Dışlama kapsamları
Dışlamalar belirli bir WAF kuralları kümesine, kural kümelerine veya genel olarak tüm kurallara uygulanacak şekilde yapılandırılabilir.
İpucu
Saldırganların sisteminizden yararlanması için yanlışlıkla yer bırakmamak için olabildiğince dar ve belirli dışlamalar yapmak iyi bir uygulamadır. Bir dışlama kuralı eklemeniz gerektiğinde, mümkün olan her yerde kural başına dışlamaları kullanın.
Kural başına dışlamalar
Belirli bir kural, kural grubu veya kural kümesi için dışlama yapılandırabilirsiniz. Dışlamanın uygulanacağı kuralı veya kuralları belirtmeniz gerekir. WAF değerlendirmesinin dışında tutulması gereken istek özniteliğini de belirtmeniz gerekir. Tam bir kural grubunu dışlamak için yalnızca parametresini ruleGroupName
sağlayın; rules
parametre yalnızca dışlamayı bir grubun belirli kurallarıyla sınırlamak istediğinizde kullanışlıdır.
Kural başına dışlamalar, OWASP (CRS) kural kümesi sürüm 3.2 veya üzeri ya da Bot Manager kural kümesi sürüm 1.0 veya üzerini kullandığınızda kullanılabilir.
Örnek
WAF'nin istek üst bilgisinin değerini User-Agent
yoksaymasını istediğinizi varsayalım. User-Agent
Üst bilgi, ağ protokolü eşlerinin istekte bulunan yazılım kullanıcı aracısının uygulama türünü, işletim sistemini, yazılım satıcısını veya yazılım sürümünü tanımlamasını sağlayan bir özellik dizesi içerir. Daha fazla bilgi için bkz . User-Agent.
Bu üst bilginin değerlendirilmesini devre dışı bırakmak için çeşitli nedenler olabilir. WAF'nin algılayıp kötü amaçlı olduğunu varsayacağı bir dize olabilir. Örneğin, User-Agent
üst bilgi bir dizede klasik SQL ekleme saldırısını x=x
içerebilir. Bazı durumlarda bu geçerli trafik olabilir. Bu nedenle bu üst bilgiyi WAF değerlendirmesinin dışında tutmanız gerekebilir.
Üst bilgiyi tüm SQL ekleme kuralları tarafından değerlendirmenin dışında tutmak User-Agent
için aşağıdaki yaklaşımları kullanabilirsiniz:
Azure portalını kullanarak kural başına dışlama yapılandırmak için şu adımları izleyin:
WAF ilkesine gidin ve Yönetilen kurallar'ı seçin.
Dışlama ekle'yi seçin.
Şunun için geçerlidir bölümünde, dışlamanın uygulanacağı CRS kural kümesini (örneğin, OWASP_3.2) seçin.
Kural ekle'yi seçin ve dışlamaları uygulamak istediğiniz kuralları seçin.
Eşleştirme değişkenini, işlecini ve seçiciyi yapılandırın. Ardından Kaydet'i seçin.
Birden çok dışlama yapılandırabilirsiniz.
Üst bilgiyi yalnızca 942270 kuralına göre değerlendirmenin dışında tutabilirsiniz User-Agent
:
Önceki örnekte açıklanan adımları izleyin ve 4. adımda 942270 kuralını seçin.
Genel dışlamalar
Tüm WAF kurallarında uygulanacak bir dışlama yapılandırabilirsiniz.
Örnek
İstekte URL aracılığıyla geçirilen kullanıcı parametresindeki değeri dışlamak istediğinizi varsayalım. Örneğin, sorgu dizesi bağımsız değişkeninin user
WAF'nin kötü amaçlı içerik olarak görüntülediği bir dize içermesinin ortamınızda yaygın olduğunu ve dolayısıyla bunu engellediğini varsayalım. WAF'nin alanın değerini değerlendirmemesi için adın sözcüğüyle user
başladığı tüm sorgu dizesi bağımsız değişkenlerini dışlayabilirsiniz.
Aşağıdaki örnekte, sorgu dizesi bağımsız değişkenini değerlendirmeden user
nasıl dışlayabileceğiniz gösterilmektedir:
Azure portalını kullanarak genel dışlama yapılandırmak için şu adımları izleyin:
WAF ilkesine gidin ve Yönetilen kurallar'ı seçin.
Dışlama ekle'yi seçin.
Şunun için geçerlidir bölümünde Genel'i seçin
Eşleştirme değişkenini, işlecini ve seçiciyi yapılandırın. Ardından Kaydet'i seçin.
Birden çok dışlama yapılandırabilirsiniz.
Dolayısıyla, URL http://www.contoso.com/?user%3c%3e=joe
WAF tarafından taranırsa, joe dizesini değerlendirmez, ancak yine de user%3c%3e parametre adını değerlendirir.
Sonraki adımlar
- WAF ayarlarınızı yapılandırdıktan sonra WAF günlüklerinizi görüntülemeyi öğrenebilirsiniz. Daha fazla bilgi için bkz . Application Gateway tanılaması.
- Azure ağ güvenliği hakkında daha fazla bilgi edinin