Azure Front Door için Azure Web Uygulaması Güvenlik Duvarı ayarlama

Microsoft tarafından yönetilen varsayılan kural kümesi, OWASP Çekirdek Kural Kümesi'ni temel alır ve Microsoft Threat Intelligence toplama kurallarını içerir.

Genellikle web uygulaması güvenlik duvarı (WAF) kurallarının WAF kullanan uygulamanın veya kuruluşun belirli gereksinimlerine uyacak şekilde ayarlanması gerekir. Kuruluşlar genellikle aşağıdaki eylemlerden birini gerçekleştirerek ayarlamayı başarır:

  • Kural dışlamalarını tanımlama.
  • Özel kurallar oluşturma.
  • Sorunlara veya hatalı pozitiflere neden olabilecek kuralları devre dışı bırakma.

Bu makalede, WAF'nizden geçmesi gereken istekler engellenirse yapabilecekleriniz açıklanmaktadır.

Dekont

Microsoft tarafından yönetilen kural kümesi Azure Front Door Standard SKU'su için kullanılamaz. Farklı katman SKU'ları hakkında daha fazla bilgi için bkz . Katmanlar arasında özellik karşılaştırması.

Azure Front Door WAF'ye genel bakış ve Azure Front Door için WAF İlkesi belgelerini okuyun. Ayrıca WAF izlemeyi ve günlüğe kaydetmeyi etkinleştirin. Bu makalelerde WAF işlevlerinin nasıl çalıştığı, WAF kuralı kümelerinin nasıl çalıştığı ve WAF günlüklerine nasıl erişilir açıklanmaktadır.

WAF günlüklerini anlama

WAF günlüklerinin amacı, WAF tarafından eşleşen veya engellenen her isteği göstermektir. Eşleşen veya engellenen tüm değerlendirilen isteklerin bir koleksiyonu. WAF'nin olmaması gereken bir isteği engellediğini fark ederseniz (hatalı pozitif) birkaç şey yapabilirsiniz.

İlk olarak, daraltın ve belirli bir isteği bulun. Olayı kolayca tanımlamak ve bu belirli değer üzerinde günlük sorgusu gerçekleştirmek için özel bir yanıt iletisitrackingReference yapılandırabilirsiniz. İsteğin belirli URI'sini, zaman damgasını veya istemci IP'sini bulmak için günlüklere bakın. İlgili günlük girdilerini bulduğunuzda hatalı pozitifler üzerinde işlem yapabilirsiniz.

Örneğin, WAF'nizden geçirmek istediğiniz dizeyi 1=1 içeren geçerli trafiğiniz olduğunu varsayalım. İstek şöyle görünür:

POST http://afdwafdemosite.azurefd.net/api/Feedbacks HTTP/1.1
Host: afdwafdemosite.azurefd.net
Content-Type: application/x-www-form-urlencoded
Content-Length: 55

UserId=20&captchaId=7&captchaId=15&comment="1=1"&rating=3

İsteği denerseniz, WAF herhangi bir parametre veya alanda dizenizi 1=1 içeren trafiği engeller. Bu dize genellikle sql ekleme saldırısıyla ilişkilendirilir. Günlükleri gözden geçirip isteğin zaman damgasını ve engellenen veya eşleşen kuralları görebilirsiniz.

Aşağıdaki örnekte, kural eşleşmesi temelinde oluşturulan bir günlük girdisi gösterilmektedir. Son 24 saat içinde engellenen istekleri bulmak için aşağıdaki Log Analytics sorgusunu kullanabilirsiniz.

AzureDiagnostics
| where Category == 'FrontDoorWebApplicationFirewallLog'
| where TimeGenerated > ago(1d)
| where action_s == 'Block'
AzureDiagnostics
| where Category == 'FrontdoorWebApplicationFirewallLog'
| where TimeGenerated > ago(1d)
| where action_s == 'Block'

requestUri alanında, isteğin özel olarak yapıldığını /api/Feedbacks/ görebilirsiniz. Daha da ileri giderek, alanda kural kimliğini 942110ruleName bulun. Kural kimliğini bilerek OWASP ModGüvenlik Çekirdek Kural Kümesi resmi deposuna gidip bu kural kimliğine göre arama yaparak kodunu gözden geçirebilir ve bu kuralın tam olarak neyle eşleşdiğini anlayabilirsiniz.

Ardından, alanı denetleyerek bu kuralın action eşleştirme sonrasında istekleri engelleyecek şekilde ayarlandığını görebilirsiniz. olarak ayarlandığından preventionisteğin WAF policyMode tarafından engellendiğini onaylayabilirsiniz.

Şimdi alandaki bilgileri details denetleyin. Bu alan, ve bilgilerini görebileceğiniz matchVariableName yerdir matchVariableValue . Birisi web uygulamasının comment alanına giriş 1=1 olduğundan bu kural tetiklendi.

{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Cdn/Profiles/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}
{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Network/FrontDoor/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}

Belirli bir WAF olayı hakkındaki bilgilerinizi genişletmek için erişim günlüklerini denetlemenin de bir değeri vardır. Ardından, önceki olaya yanıt olarak oluşturulan günlüğü gözden geçirin.

Değer aynı olduğundan trackingReference bu günlüklerin ilişkili olduğunu görebilirsiniz. ve gibi userAgent genel içgörü sağlayan çeşitli alanlar arasında ve httpStatusDetails alanlarına dikkat edinhttpStatusCode.clientIP Burada, istemcinin bu isteğin reddedildiğini ve engellendiğini onaylayan bir HTTP 403 yanıtı aldığını görebilirsiniz.

{
    "time": "2020-09-24T16:43:04.5430764Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorAccessLog",
    "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
    "properties": {
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "httpMethod": "POST",
        "httpVersion": "1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "requestBytes": "2160",
        "responseBytes": "324",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36",
        "clientIp": "1.1.1.1",
        "socketIp": "1.1.1.1",
        "clientPort": "53566",
        "timeToFirstByte": "0.01",
        "timeTaken": "0.011",
        "securityProtocol": "",
        "routingRuleName": "DemoBERoutingRule",
        "rulesEngineMatchNames": [],
        "backendHostname": "13.88.65.130:3000",
        "isReceivedFromClient": true,
        "httpStatusCode": "403",
        "httpStatusDetails": "403",
        "pop": "WST",
        "cacheStatus": "CONFIG_NOCACHE"
    }
}
{
    "time": "2020-09-24T16:43:04.5430764Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorAccessLog",
    "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
    "properties": {
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "httpMethod": "POST",
        "httpVersion": "1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "requestBytes": "2160",
        "responseBytes": "324",
        "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36",
        "clientIp": "1.1.1.1",
        "socketIp": "1.1.1.1",
        "clientPort": "53566",
        "timeToFirstByte": "0.01",
        "timeTaken": "0.011",
        "securityProtocol": "",
        "routingRuleName": "DemoBERoutingRule",
        "rulesEngineMatchNames": [],
        "backendHostname": "13.88.65.130:3000",
        "isReceivedFromClient": true,
        "httpStatusCode": "403",
        "httpStatusDetails": "403",
        "pop": "WST",
        "cacheStatus": "CONFIG_NOCACHE"
    }
}

Hatalı pozitif sonuçları çözümleme

Hatalı pozitif sonuçları işleme hakkında bilinçli bir karar vermek için, uygulamanızın kullandığı teknolojiler hakkında bilgi sahibi olmak önemlidir. Örneğin, teknoloji yığınınızda bir SQL sunucusu olmadığını ve bu kurallarla ilgili hatalı pozitifler elde ettiğinizi varsayalım. Bu kuralları devre dışı bırakmak güvenliğinizi zayıflatmak zorunda değildir.

Bu bilgiler ve kural 942110'un örnekteki dizeyle 1=1 eşleşen kural olduğu bilgisi sayesinde, bu meşru isteğin engellenmesini durdurmak için birkaç şey yapabilirsiniz:

  • Dışlama listelerini kullanın. Dışlama listeleri hakkında daha fazla bilgi için bkz. Azure Front Door dışlama listeleriyle Azure Web Uygulaması Güvenlik Duvarı.
  • WAF eylemlerini değiştirme. İstek bir kuralın koşullarıyla eşleştiğinde gerçekleştirilebilecek eylemler hakkında daha fazla bilgi için bkz . WAF Eylemleri.
  • Özel kurallar kullanın. Özel kurallar hakkında daha fazla bilgi için bkz. Azure Front Door ile Azure Web Uygulaması Güvenlik Duvarı için özel kurallar.
  • Kuralları devre dışı bırakın.

Bahşiş

WAF aracılığıyla meşru isteklere izin vermek için bir yaklaşım seçtiğinizde, bunu olabildiğince dar hale getirmeye çalışın. Örneğin, bir kuralı tamamen devre dışı bırakmak yerine dışlama listesi kullanmak daha iyidir.

Dışlama listelerini kullanma

Dışlama listesi kullanmanın avantajlarından biri, yalnızca dışlamak için seçtiğiniz eşleşme değişkeninin bu istek için artık denetlenmeyecek olmasıdır. Başka bir ifadeyle, isteğin tamamının denetlenmesinin dışında tutmak yerine belirli istek üst bilgileri, istek tanımlama bilgileri, sorgu dizesi bağımsız değişkenleri arasında seçim yapabilir veya belirli bir koşul karşılandığında gövde gönderisi bağımsız değişkenlerinin dışlanmasını isteyebilirsiniz. İsteğin belirtilmeyen diğer değişkenleri normal şekilde incelenir.

Dışlamalar genel bir ayardır. Yapılandırılan dışlama yalnızca belirli bir web uygulaması veya URI'sini değil WAF'nizden geçen tüm trafik için geçerlidir. Örneğin, belirli bir web uygulaması için gövdede geçerli bir istekse 1=1 , ancak aynı WAF ilkesi altındaki diğer kullanıcılar için bu sorun olabilir.

Farklı uygulamalar için farklı dışlama listeleri kullanmak mantıklıysa, her uygulama için farklı WAF ilkeleri kullanmayı ve bunları her uygulamanın ön ucuna uygulamayı göz önünde bulundurun.

Yönetilen kurallar için dışlama listelerini yapılandırırken dışlama seçeneğini belirleyebilirsiniz:

  • Bir kural kümesi içindeki tüm kurallar.
  • Bir kural grubu içindeki tüm kurallar.
  • Tek bir kural.

Dışlama listesini PowerShell, Azure CLI, REST API, Bicep, Azure Resource Manager şablonları veya Azure portalı kullanarak yapılandırabilirsiniz.

  • Kural düzeyinde dışlamalar: Kural düzeyinde dışlamaların uygulanması, belirtilen dışlamaların yalnızca bu tek tek kurala göre çözümlenmeyeceği anlamına gelir. Yine de kural kümesindeki diğer tüm kurallar tarafından analiz edilir. Bu, dışlamalar için en ayrıntılı düzeydir. Bir olayda sorun giderirken WAF günlüklerinde bulduğunuz bilgilere göre yönetilen kural kümesinde ince ayar yapmak için bunu kullanabilirsiniz.
  • Kural grubu düzeyinde dışlamalar: Kural grubu düzeyinde dışlamalar uygulanması, belirtilen dışlamaların belirli bir kural türü kümesine göre çözümlenmeyeceği anlamına gelir. Örneğin, SQLI'nin dışlanan bir kural grubu olarak seçilmesi, tanımlı istek dışlamalarının SQLI'ye özgü kuralların hiçbiri tarafından denetlenmeyeceğini gösterir. Php, RFI veya XSS gibi diğer gruplardaki kurallar tarafından yine de denetlenecektir. Bu tür bir dışlama, uygulamanın belirli saldırı türlerine duyarlı olmadığından emin olduğunuzda yararlı olabilir. Örneğin, SQL veritabanı olmayan bir uygulama, güvenlik düzeyine zarar vermeden tüm SQLI kurallarını dışlayabilir.
  • Kural kümesi düzeyinde dışlamalar: Kural kümesi düzeyinde dışlamalar uygulanması, belirtilen dışlamaların bu kural kümesinde kullanılabilen güvenlik kurallarından hiçbirinde çözümlenmeyeceği anlamına gelir. Bu dışlama kapsamlıdır, bu nedenle dikkatli kullanın.

Bu örnekte, tek bir kurala dışlama uygulayarak en ayrıntılı düzeyde bir dışlama gerçekleştirirsiniz. eşleşme değişkenini dışlamak istiyorsunuz İstek gövdesi, içeren commentargs sonrası adı. Eşleşme değişkeni ayrıntılarını güvenlik duvarı günlüğünde görebilirsiniz: "matchVariableName": "PostParamValue:comment". özniteliğidir comment. Bu öznitelik adını birkaç farklı yolla da bulabilirsiniz. Daha fazla bilgi için bkz . İstek öznitelik adlarını bulma.

Screenshot that shows exclusion rules.

Screenshot that shows rule exclusion for a specific rule.

Bazen, belirli parametrelerin sezgisel olmayan bir şekilde WAF'ye geçirildiği durumlar vardır. Örneğin, Microsoft Entra Id kullanarak kimlik doğrulaması yaptığınızda bir belirteç geçirilir. Belirteç __RequestVerificationToken genellikle istek tanımlama bilgisi olarak geçirilir.

Tanımlama bilgilerinin devre dışı bırakıldığı bazı durumlarda, bu belirteç de istek sonrası bağımsız değişkeni olarak geçirilir. Bu nedenle, Microsoft Entra belirtecinin hatalı pozitif sonuçlarına çözüm bulmak için hem hem de RequestCookieNamesRequestBodyPostArgsNamesiçin dışlama listesine eklendiğinden __RequestVerificationToken emin olmanız gerekir.

Alan adında (Seçici) dışlamalar, değerin artık WAF tarafından değerlendirilmeyeceği anlamına gelir. Alan adının kendisi değerlendirilmeye devam eder ve nadir durumlarda bir WAF kuralıyla eşleşip bir eylem tetikleyebilir.

Screenshot that shows rule exclusion for a rule set.

WAF eylemlerini değiştirme

WAF kurallarının davranışını işlemenin bir diğer yolu da bir istek bir kuralın koşullarıyla eşleştiğinde gerçekleştirilen eylemi seçmektir. Kullanılabilir eylemler İzin Ver, Engelle, Günlük ve Yeniden Yönlendirme'dir.

Bu örnekte, varsayılan engelle eylemi 942110 kuralındaki Günlük eylemi olarak değiştirildi. Bu eylem WAF'nin isteği günlüğe kaydetmesine ve kalan düşük öncelik kurallarında aynı isteği değerlendirmeye devam etmesine neden olur.

Screenshot that shows WAF actions.

Aynı isteği gerçekleştirdikten sonra günlüklere geri başvurabilir ve bu isteğin kural kimliği 942110'da bir eşleşme olduğunu görebilirsiniz. Bu action_s alan artık Engelle yerine Günlüğü gösterir. Daha sonra günlük sorgusu, bu istekte başka neler olduğunu görmek için bilgileri içerecek trackingReference_s şekilde genişletildi.

Screenshot that shows a log showing multiple rule matches.

Artık kural kimliği 942110 işlendikten sonra milisaniye olarak gerçekleşen farklı bir SQLI kural eşleşmesi görebilirsiniz. Kural kimliği 942310 ile aynı istek eşleşti ve bu kez varsayılan eylem Engelle tetiklendi.

WAF ayarlama veya sorun giderme sırasında Günlük eylemini kullanmanın bir diğer avantajı, belirli bir kural grubu içindeki birden çok kuralın belirli bir isteği eşleştirip engellemediğini belirleyebilmenizdir. Ardından dışlamalarınızı uygun düzeyde, yani kural veya kural grubu düzeyinde oluşturabilirsiniz.

Özel kurallar kullanma

WAF kuralı eşleşmesine neyin neden olduğunu belirledikten sonra, WAF'nin olaya nasıl yanıt vereceğini ayarlamak için özel kurallar kullanabilirsiniz. Özel kurallar yönetilen kurallardan önce işlenir. Bunlar birden fazla koşul içerebilir ve eylemleri İzin Ver, Reddet, Günlük veya Yeniden Yönlendirme olabilir.

Uyarı

Bir istek özel bir kuralla eşleştiğinde WAF altyapısı isteği işlemeyi durdurur. Yönetilen kurallar bu istek için işlenmez ve daha düşük önceliğe sahip diğer özel kurallar da işlenmez.

Aşağıdaki örnekte iki koşula sahip özel bir kural gösterilmektedir. İlk koşul, istek gövdesindeki değeri arar comment . İkinci koşul, istek URI'sindeki değeri arar /api/Feedbacks/ .

Özel bir kural kullanarak, WAF kurallarınızda ince ayar yapmak ve hatalı pozitiflerle başa çıkmak için en ayrıntılı olan siz olabilirsiniz. Bu durumda, yalnızca aynı WAF ilkesi kapsamında birden çok site veya uygulamada mevcut olabilecek istek gövdesi değerine göre comment işlem gerçekleştirmezsiniz.

Belirli bir istek URI'sinde /api/Feedbacks/de eşleşmesi için başka bir koşul eklediğinizde, bu özel kuralın, üzerinde çalıştığınız bu açık kullanım örneği için gerçekten geçerli olduğundan emin olursunuz. Bu şekilde, farklı koşullarda gerçekleştirilen saldırı, WAF altyapısı tarafından yine de incelenir ve engellenir.

Screenshot that shows a log.

Günlüğü incelediğinizde, alanın özel kurala redirectcommentverilen adı içerdiğini görebilirsinizruleName_s. action_s alanında, bu olay için Yeniden Yönlendirme eyleminin gerçekleştirildiğini görebilirsiniz. details_matches_s alanında, her iki koşulun da ayrıntılarının eşleştirildiğini görebilirsiniz.

Kuralları devre dışı bırakma

Hatalı pozitif sonuçların bir diğer yolu da WAF'nin kötü amaçlı olduğunu düşündüğü girişle eşleşen kuralı devre dışı bırakmaktır. WAF günlüklerini ayrıştırdığınız ve kuralı 942110 olarak daralttığınız için Azure portalında devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure Web Uygulaması Güvenlik Duvarı kurallarını özelleştirme.

Kuralı devre dışı bırakmak, belirli bir koşulu karşılayan tüm isteklerin geçerli istekler olduğundan emin olduğunuzda veya kuralın ortamınıza uygulanmadığından emin olduğunuzda (SQL olmayan arka uçlarınız olduğundan SQL ekleme kuralını devre dışı bırakma gibi) bir avantajdır.

Kuralı devre dışı bırakmak, WAF ilkesiyle ilişkili tüm ön uç konakları için geçerli olan genel bir ayardır. Bir kuralı devre dışı bırakmayı seçtiğinizde, WAF ilkesiyle ilişkili diğer ön uç konakları için koruma veya algılama olmadan güvenlik açıklarını açığa çıkarmış olabilirsiniz.

Yönetilen kuralı devre dışı bırakmak için Azure PowerShell kullanmak istiyorsanız nesne belgelerine PSAzureManagedRuleOverride bakın. Azure CLI'yı kullanmak istiyorsanız belgelere az network front-door waf-policy managed-rules override bakın.

Screenshot that shows WAF rules.

Bahşiş

WAF ilkenizde yaptığınız değişiklikleri belgeleyebilirsiniz. Hatalı pozitif algılamayı göstermek için örnek istekler ekleyin. Neden özel kural eklediğinizi, kural veya kural kümesini devre dışı bıraktığınızı veya özel durum eklediğinizi açıklayın. Gelecekte uygulamanızı yeniden tasarlarsanız, değişikliklerinizin hala geçerli olduğunu doğrulamanız gerekebilir. Ya da denetlenebilir veya WAF ilkesini neden varsayılan ayarlarından yeniden yapılandırdığınızı gerekçelendirmeniz gerekebilir.

İstek alanlarını bulma

Fiddler gibi bir tarayıcı ara sunucusu kullanarak tek tek istekleri inceleyebilir ve web sayfasının hangi belirli alanlarının çağrıldığını belirleyebilirsiniz. Bu teknik, WAF'de dışlama listelerini kullanarak belirli alanları denetlemenin dışında tutmanız gerektiğinde yararlıdır.

İstek özniteliği adlarını bulma

Bu örnekte, dizenin 1=1 girildiği alan olarak adlandırılır comment. Bu veriler bir POST isteğinin gövdesinde geçirildi.

Screenshot that shows the body of a Fiddler request.

Bu alanı dışlayabilirsiniz. Dışlama listeleri hakkında daha fazla bilgi edinmek için bkz . Web uygulaması güvenlik duvarı dışlama listeleri. Bu durumda, aşağıdaki dışlama yapılandırarak değerlendirmeyi dışlayabilirsiniz:

Screenshot that shows an exclusion rule.

Ayrıca, dışlama listesine eklemeniz gerekenleri görmek üzere bilgileri almak için güvenlik duvarı günlüklerini inceleyebilirsiniz. Günlüğü etkinleştirmek için bkz . Azure Front Door'da ölçümleri ve günlükleri izleme.

İncelemek istediğiniz isteğin PT1H.json gerçekleştiği saat için dosyadaki güvenlik duvarı günlüğünü inceleyin. Dosyalar ve PT1H.json tanılama günlüklerinin depolandığı FrontDoorWebApplicationFirewallLogFrontDoorAccessLog depolama hesabı kapsayıcılarında bulunur.

İncelemek istediğiniz isteğin PT1H.json gerçekleştiği saat için dosyadaki güvenlik duvarı günlüğünü inceleyin. Dosyalar ve PT1H.json tanılama günlüklerinin depolandığı FrontdoorWebApplicationFirewallLogFrontdoorAccessLog depolama hesabı kapsayıcılarında bulunur.

Bu örnekte, isteği engelleyen (aynı İşlem Başvurusu ile) ve aynı anda gerçekleşen kuralı görebilirsiniz.

{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.CDN/PROFILES/AFDWAFDEMOSITE",
    "category": "FrontDoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Cdn/Profiles/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}
{
    "time": "2020-09-24T16:43:04.5422943Z",
    "resourceId": "/SUBSCRIPTIONS/<Subscription ID>/RESOURCEGROUPS/<Resource Group Name>/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/AFDWAFDEMOSITE",
    "category": "FrontdoorWebApplicationFirewallLog",
    "operationName": "Microsoft.Network/FrontDoor/WebApplicationFirewallLog/Write",
    "properties": {
        "clientIP": "1.1.1.1",
        "clientPort": "53566",
        "socketIP": "1.1.1.1",
        "requestUri": "http://afdwafdemosite.azurefd.net:80/api/Feedbacks/",
        "ruleName": "DefaultRuleSet-1.0-SQLI-942110",
        "policy": "AFDWAFDemoPolicy",
        "action": "Block",
        "host": "afdwafdemosite.azurefd.net",
        "trackingReference": "0mMxsXwAAAABEalekYeI4S55qpi5R7R0/V1NURURHRTA4MTIAZGI4NGQzZDgtNWQ5Ny00ZWRkLTg2ZGYtZDJjNThlMzI2N2I4",
        "policyMode": "prevention",
        "details": {
            "matches": [
                {
                    "matchVariableName": "PostParamValue:comment",
                    "matchVariableValue": "\"1=1\""
                }
            ],
            "msg": "SQL Injection Attack: Common Injection Testing Detected",
            "data": "Matched Data: \"1=1\" found within PostParamValue:comment: \"1=1\""
        }
    }
}

Azure tarafından yönetilen kural kümelerinin nasıl çalıştığına ilişkin bilginiz sayesinde, özellik içeren kuralın action: Block istek gövdesinde eşleşen verilere göre engellendiğini biliyorsunuz. (Daha fazla bilgi için bkz.Azure Front Door'da Azure Web Uygulaması Güvenlik Duvarı.) Ayrıntılarda bir desenle (1=1) eşleşip alanın adını commentgörebilirsiniz. içeren commentistek gövdesi gönderisi args adını dışlamak için önceki adımları izleyin.

İstek üst bilgisi adlarını bulma

Fiddler, istek üst bilgisi adlarını bulmak için kullanışlı bir araçtır. Aşağıdaki ekran görüntüsünde, ve User-Agentiçeren Content-Type bu GET isteğinin üst bilgileri gösterilir. WAF'de dışlamalar ve özel kurallar oluşturmak için istek üst bilgilerini de kullanabilirsiniz.

Screenshot that shows the header of a Fiddler request.

İstek ve yanıt üst bilgilerini görüntülemenin bir diğer yolu da tarayıcınızın Microsoft Edge veya Chrome gibi geliştirici araçlarının içine bakmaktır. F12'yi seçebilir veya Geliştirici Araçlarını İncele'ye>sağ tıklayabilirsiniz. Ağ sekmesini seçin. Bir web sayfası yükleyin ve incelemek istediğiniz isteği seçin.

Screenshot that shows a Network inspector request.

İstek tanımlama bilgileri içeriyorsa, Bunları Fiddler'da görüntülemek için Tanımlama Bilgileri sekmesini seçin. Tanımlama bilgisi, WAF'de dışlamalar veya özel kurallar oluşturmak için de kullanılabilir.

Anomali puanlama kuralı

WAF'nizi ayarlama işlemi sırasında kural kimliği 949110'ı görürseniz, bu kuralın varlığı isteğin anomali puanlama işlemi tarafından engellendiğini gösterir.

Aynı izleme başvurusuna sahip günlük girdilerini arayarak aynı istek için diğer WAF günlük girişlerini gözden geçirin. Tetiklenen kuralların her birine bakın. Bu makaledeki yönergeleri izleyerek her kuralı ayarlayın.

Sonraki adımlar