AWS Türkçe Blog
AWS WAF için AWS Managed Rules’un davranışı nasıl özelleştirilir?
AWS WAF için AWS Managed Rules (Yönetilen Kurallar), kendi kurallarınızı yazmanıza gerek kalmadan, genel uygulama güvenlik açıklarına ve sistemlerinize diğer istenmeyen erişimlere karşı korunmanıza yardımcı olmak için kullanılabilecek, AWS tarafından oluşturulan bir kurallar grubu sağlar. AWS Tehdit Araştırma Ekibi (Threat Research Team), uygulamalarınızı korumak için sürekli değişen tehdit ortamına yanıt vermek için AWS Managed Rules’u günceller.Kısa süre önce AWS WAF, kural özelleştirmesine odaklanan dört yeni özelliği kullanıma sundu:
- Labels (Etiketler) – Bir kural eşleştirildiğinde web isteklerine eklenebilen meta veriler. Etiketler, yönetilen kuralların davranışını veya varsayılan eylemini değiştirmek için kullanılabilir.
- Version management (Sürüm yönetimi) – Yönetilen bir kural grubunun belirli bir sürümünü seçebilirsiniz. Versioning, daha önce test edilmiş sürümlere dönmek için kullanılabilir.
- Scope-down statements (Kapsam azaltma ifadeleri) – Bir kural grubunun değerlendirdiği isteklerin kapsamını daraltmak için kullanılabilir.
- Custom responses (Özel yanıtlar) – Bir kural bir bağlantı isteğini engellediğinde, istemciye AWS WAF’tan özel bir HTTP yanıtı gönderebilirsiniz.
Bu blogda, yönetilen kuralları özelleştirerek güvenlik duruşunuzu iyileştirmek için bu özellikleri nasıl kullanabileceğinizi göstermek için dört kullanım örneğinden geçiyoruz.
Durum 1: Belirli bir sürümü seçerek yönetilen bir kural grubu için otomatik güncellemeleri kontrol edin
Varsayılan olarak, yönetilen kural grupları, güncellemeler kullanıma sunuldukça otomatik olarak güncellenir. Bu, mümkün olan en kısa sürede en son korumaya sahip olmanızı sağlar. Sürüm yönetimi özelliğiyle, belirli bir sürümde kalmayı seçebilirsiniz; bu, siz açıkça daha yeni bir sürüme geçene kadar güncellenmeyeceği anlamına gelir. Bu, yeni bir sürümü test etmenize ve hazır olduğunuzda onu web ACL’inize yükseltmenize ve gerekirse önceden test edilmiş bir sürüme geri dönmenize olanak tanır.
Not: En son sürüme mümkün olduğunca yakın bir sürüm kullanmanız önerilir.
Yönetilen bir kural grubu sürümü seçme
- AWS WAF konsolunuzda, yönetilen bir kural grubu eklediğiniz web ACL’ine gidin.
- Sürümünü ayarlamak istediğiniz managed rule group‘u seçin ve Edit‘i seçin.
- Version selection açılır menüsünde kullanmak istediğiniz sürümü seçin. Sürümün süresi dolana kadar veya başka bir sürüm seçene kadar bu sürümde kalacaksınız—sürüm süresinin sona ermesini nasıl yöneteceğinizi bu yazının ilerleyen bölümlerinde öğreneceksiniz.
Not: Güncellemeleri otomatik olarak almak istiyorsanız, sürüm olarak Default‘u seçin.
- Yapılandırmayı kaydetmek için Save Rule seçin.
Şekil 1: AWS Managed Rules sürümü açılır listesini gösteren konsol ekran görüntüsü
Bildirimleri ayarlama
Yönetilen bir kural grubuna yönelik güncelleme bildirimlerini almak için Amazon Simple Notification Service’i (Amazon SNS) kullanabilirsiniz. Yönetilen kural grubunun ARN’ini kullanarak SNS konusuna abone olabilirsiniz. AWS Managed Rules güncellemelerine yönelik her SNS bildirimi, bu güncellemeleri programlı olarak kullanmanıza olanak tanıyan aynı mesaj biçimini kullanır. SNS bildirim mesajı formatı hakkında daha fazla ayrıntı için, Yönetilen bir kural grubuna yönelik yeni sürümler ve güncellemelerden haberdar olma bölümüne bakın.
Amazon SNS aracılığıyla yeni kural güncellemelerinde email bildirimleri ayarlama
- AWS WAF konsolunuzda, yönetilen bir kural grubu eklediğiniz web ACL’ine gidin.
- Hakkında bildirim almak istediğiniz yönetilen kural grubunu seçin ve Edit‘i seçin.
- Core rule set sayfasında, Amazon SNS topic ARN’i arayın. Amazon SNS konsoluna gitmek için bağlantıyı seçin. 4. adımda kullanılacak konu ARN’ini not edin.
Şekil 2: SNS konu ARN’ini vurgulayan konsol ekran görüntüsü
- Create subscription sayfasında, aşağıdaki bilgileri girin:
Topic ARN: 3. adımdaki SNS konu ARN’ini girin.
Protocol: Email seçin.
Endpoint: Bildirimlerin gönderilmesini istediğiniz email adresini girin.
Şekil 3: SNS Create subscription konsol ekran görüntüsü
- Create subscription seçin.
- Amazon SNS’den bir onay email’i bekleyin. Aboneliği tamamlamak için email’deki confirm subscription (aboneliği onayla) bağlantısını seçin.
CloudWatch alarmı kullanarak bir sürüm sona erme uyarısı ayarlayın
Yönetilen kural grubunun belirli bir sürümünde uzun süre kaldığınızda, önemli güncellemeleri kaçırma riskiniz vardır. Eski bir sürümde uzun süre kalmamak için, bir sürümün süresi dolmak üzereyken sizi uyaracak bir alarm kurmalısınız. Bir sürümün süresi dolduğunda, yönetilen kural grubu otomatik olarak varsayılan sürüme geçer. Bir sürümün süresi dolmak üzereyken bilgilendirilmek için DaysToExpiry
‘e dayalı bir Amazon CloudWatch alarmı kullanarak bir uyarı ayarlayın. Kullanmakta olduğunuz kural kümesinin belirli bir sürümünün süresi dolmadan 60 gün önce bir bildirim ayarlamak için aşağıdaki prosedürü kullanabilirsiniz.
CloudWatch alarmı kurma
Bu, bir kural kümesinin belirli bir sürümünün süresi dolmadan 60 gün önce sizi bilgilendirir.
- CloudWatch konsoluna gidin.
- Sol gezinme bölmesinden All metrics‘i seçin ve ardından namespaces listesinden WAFV2‘yi seçin.
- ManagedRuleGroup, Region, Vendor, Version seçin.
- Son kullanma tarihini izlemek istediğiniz yönetilen kural grubunu seçin. Bu örnek AWSManagedRulesCommonRuleSet ve Version_1.0 kullanmaktadır.
- Graphed metric‘i seçin ve Actions altında sağ altta bulunan zil alarmı simgesini seçin. Bu simgeyi seçmek sizi CloudWatch alarm konsoluna götürecektir.
Şekil 4: CloudWatch Graphed metrics tabı
- CloudWatch alarmını aşağıdaki ayrıntılarla yapılandırın ve ardından Next‘i seçin:
Statistic: Minimum seçin
Period: 5 minutes seçin
ThresholdType: Static seçin
Operator: Lower/Equal (<=threshold) seçin
Threshold: Değeri 60 olarak girin
Datapoints to alarm: Alt değeri 1 ve yüksek değeri 1 olarak girin
Missing data treatment: Treat missing data as good (not breaching threshold) seçin - Yapılandırılan alarm ALARM durumuna geçtiğinde başlatılmasını istediğiniz SNS konusunu seçin ve Next‘i seçin.
- Alarm için bir ad ve açıklama girin. Yapılandırmayı önizlemek için Next‘i seçin ve CloudWatch alarm oluşturma işlemini tamamlamak için Create Alarm‘ı seçin.
Ek ipuçları
- Kullanmakta olduğunuz yönetilen bir kural grubunun sürümünün süresi dolmuşsa, AWS WAF, siz geçerli bir sürüm seçene kadar web ACL’inde herhangi bir yapılandırma değişikliğini engeller. En yeni tehditlere karşı korunmak için mümkün olan en kısa sürede en yeni sürüme geçmelisiniz.
DaysToExpiry
metriğini yalnızca web ACL’inizden trafik akışı olduğunda alırsınız.- Bir web ACL’inde yönetilen bir kural grubunun iki farklı sürümünü kullanabilirsiniz. Bu, dağıtıldıktan sonra trafiğinizi nasıl etkileyeceğini görmek için iki farklı sürümü aynı anda test etmek istiyorsanız yararlı olabilir; örneğin, bir sürümü sayım modunda (count mode) ve diğerini engelle modunda (block mode) kullanın.
Not: Bu iş akışı, JSON kural düzenleyicisi ve API aracılığıyla desteklenir, ancak konsol aracılığıyla desteklenmez.
Durum 2: Yönetilen bir kural grubundaki bir kuralın neden olduğu yanlış pozitifleri azaltmak için etiketleri kullanın
Etiket (label), kuralla ilişkili eylemden bağımsız olarak, bir kuralın eşleşen web isteklerine ekleyebileceği meta verilerdir. AWS Managed Rules’un en son sürümü etiketleri destekler. Etiketleri olan isteklerle eşleşen özel kurallar oluşturarak, yönetilen bir kural grubu içindeki kuralların davranışını veya varsayılan eylemini değiştirebilirsiniz.
Örneğin, yönetilen bir kural grubunda yanlış pozitife neden olan bir kuralınız varsa, yönetilen kuralı Count olarak geçersiz kılarak ve aşağıdakine benzer bir mantıkla özel bir kural yazarak bu kuralı hafifletebilirsiniz:
IF (Statement 1) AND NOT (Statement 2) THEN Block
Statement 1 yanlış bir pozitife neden olan kuraldan oluşturulan etikette eşleşir.
Statement 2 yanlış pozitiflere neden olduğu için kuralın değerlendirilmesini istemediğiniz durumlar için istisna koşulları içerir.
Kullanmakta olduğunuz yönetilen kural grubundaki GenericRFI_QUERYARGUMENTS
kuralı nedeniyle uygulamanıza yeniden yönlendirme isteklerinin engellendiği bir senaryo düşünün. Bu kural, tüm sorgu parametrelerinin değerini denetler ve bir URL’nin ortasında gömülü :// gibi web uygulamalarında uzaktan dosya eklemeden (RFI) yararlanmaya çalışan istekleri engeller. Sorgu bağımsız değişkeni kapsamındaki :// karakterleri nedeniyle engellenebilecek meşru bir yeniden yönlendirme isteği örneği aşağıdaki gibi olabilir:
https://ourdomain.com/sso/complete?scope=email profile https://www.redirect-domain.com/auth/email https://www.redirect-domain.com/auth/profile
Benzer meşru isteklerin engellenmesini önlemek için etikete göre eşleşecek özel bir kural yazabilirsiniz.
Adım 1: Belirli yönetilen kural grubunu sayma moduna (count mode) ayarlayın
İlk adım, eşleşen isteklere etiketlerin eklenmesi için belirli yönetilen kuralı sayma moduna ayarlamaktır. Ardından, yönetilen kuralın önceliği, özel kuralın önceliğinden daha yükseğe ayarlanmalıdır.
Belirli yönetilen kural grubunu sayma moduna ayarlama
- AWS WAF konsolunuzda web ACL’nize gidin ve Rules sekmesini seçin. Add Rule‘u ve ardından Add managed rule groups seçin.
- AWS managed rule groups seçin.
- Free rule groups altında, Core rule set‘i arayın ve Add to web ACL geçişi seçerek web ACL’inize ekleyin.
- Edit seçin.
- Kural listesinden, kuralın yanındaki Count geçiş düğmesini seçerek, yanlış pozitifler oluşturan kuralı Count eylemine ayarlayın. Bu örnek,
GenericRFI_QUERYARGUMENTS
kuralının eyleminiCount
olarak değiştirir. Bu, tüm eşleşen isteklerin öncelik sırasına göre sonraki WAF kurallarına gönderilmesini sağlar ve eşleşen bir istek olduğundaawswaf:managed:aws:commonruleset:GenericRFI_QueryArguments
etiketini ekler. - Save rule seçin.
- Kural önceliğini ayarlayabileceğiniz sonraki pencereye gitmek için tekrar Add rules seçin. Yönetilen kuralın, sonraki adımlarda oluşturacağınız özel kuraldan daha yüksek önceliğe sahip olması gerekir.
- Yapılandırmayı kaydetmek için Save seçin.
Adım 2: Web ACL’e yönetilen kuraldan daha düşük önceliğe sahip özel bir kural ekleyin
Web ACL’de, aradığınız etikete sahipse ve yanlış pozitife neden olan istisna koşulu yoksa istekleri engelleyen özel bir kural oluşturun. Bu özel kuralın önceliği, yönetilen kuraldan daha düşük ayarlanmalıdır.
Yönetilen kuraldan daha düşük önceliğe sahip özel bir kural ekleme
- AWS WAF konsolunuzda web ACL Rules sekmenize gidin ve Add Rule‘u ve ardından Add my own rules and rule groups‘u seçin.
- Kural tipi için Rule Builder seçin.
- Rule Name girin ve Type olarak Regular Rule seçin.
- matches all the statements (AND) seçmek için If a request açılır menüsünü kullanın.
- Statement 1, isteğin aradığınız etikete sahip olup olmadığını kontrol eder. Bu örnekte, aşağıdaki ayrıntılarla yapılandırılmıştır:
Inspect: Has a label seçin
Labels: Label seçin
Match key: awswaf:managed:aws:commonruleset:GenericRFI_QueryArguments seçin - Sonraki tüm ifadeler, taleplerin beyan kriterlerine uymaması ve meşru talepler olarak değerlendirilmesi için reddedilmelidir. Bu örnekte, isteğin sorgu dizesinde
https://www.redirect-domain.com/
içerip içermediğini kontrol eden NOT Statement 2’yi ayarladık:
Enable: Negate statement results seçin
Inspect: All query parameters seçin
Match type: Contains string seçin
String to Match: https://www.redirect-domain.com/ girin
Text transformation: None seçin - Action altında, Block seçin ve Add rule seçin.
- Set rule Priority penceresinde, özel kuralınızın kural önceliğini AWS Managed Rules kuralından daha düşük olacak şekilde ayarlayın.
- Save seçin.
Durum 3: Yönetilen bir kural grubuyla eşleşen trafiğin kapsamını daraltmak için bir kapsam azaltma ifadesi kullanın
Bir kural grubunun değerlendirdiği isteklerin kapsamını daraltmak için herhangi bir kural grubuna scope-down statement eklenebilir. Bu, kural grubunun incelemesini istediğiniz istekleri filtrelemenize veya kriterleri karşılamayan istekleri filtrelemenize olanak tanır.
AmazonIPReputationList
‘e göre değerlendirilmesini istemediğiniz bir güvenilir IP adresi listeniz olduğunu düşünün. Trafiği değerlendirmeden hariç tutmak için bir scope-down statement kullanarak bu güvenilir IP adreslerinin engellenmesini önleyebilirsiniz.
Adım 1: İzin verilen IP listesi için IP seti oluşturun
İlk adım, izin verilen IP listesini içeren bir IP seti oluşturmaktır. IP seti, belirli bir AWS Bölgesi için oluşturulabilir veya web ACL’i bir Amazon CloudFront dağıtımıyla ilişkilendirilmişse küresel olabilir.
IP seti oluşturma
- AWS WAF konsolunda IP sets seçin ve sonra Create IP set seçin.
- IP set name kısmına Allowed IPs girin. IP addresses kısmında izin vermek istediğiniz IP’leri girin. Choose Create IP set when done. İşiniz bittiğinde IP seti oluştur’u seçin.
Şekil 5: IP seti oluşturan konsol ekran görüntüsü
Adım 2: Yönetilen kural grubuna bir scope-down statement ekleyin
IP setini oluşturduktan sonra, IP setindeki IP’lerden kaynaklanan trafiğin yönetilen kural grubundaki kurallara göre değerlendirilmemesi için yönetilen kural grubunuza bir kapsam azaltma ifadesi ekleyebilirsiniz.
Bir scope-down statement ekleme
- Web ACL’inizin Rules sekmesinde, Add Rule‘u seçin ve Add managed rule groups‘u seçin.
- AWS managed rule groups seçin.
- Free rule groups altında, web ACL’e eklemek için Amazon IP reputation list‘i açın ve Edit‘i seçin.
- Enable scope-down statement seçin.
Şekil 6: Scope-down statement’ın etkinleştirildiğini gösteren konsol ekran görüntüsü
- Yalnızca daha önce oluşturulan izin verilen IP’ler listesinden kaynaklanmayan isteklerin bu kural grubu için değerlendirilmesi için koşulu ekleyin. doesn’t match the statements (NOT) öğesini seçmek için If a request açılır menüsünü kullanın.
Inspect: Originates from an IP address in seçin
IP set: Allowed-IPs seçin
IP address to use as the originating address: Source IP address seçin
Şekil 7: Scope down statement konfigürasyonu konsol ekran görüntüsü
- Bu kuralı web ACL’inize eklemek için Save rule seçin.
Durum 4: Yönetilen bir kural grubu için varsayılan engelleme eylemini değiştirmek için özel yanıtları kullanın
AWS WAF, gelen bir isteği engellediğinde yanıt kodu 403’ü (yasak) geri gönderir. Kural erişimi engellediğinde istemciye özel bir HTTP yanıtı göndermek yerine custom response (özel yanıt) özelliğini kullanabilirsiniz. Özel yanıtı kullanarak durum kodunu, yanıt başlıklarını ve yanıt gövdesini özelleştirebilirsiniz.
Uygulamanıza VPN üzerinden bağlanıyor olabilecek bir istemciye yanıt vermek istediğinizi varsayalım. 400 hata kodu (Bad Request) ve statik bir gövde mesajı (“Lütfen bir VPN üzerinden bağlanmayı denemeyin”) göndererek, kullanıcıya bu davranışın önerilmediğini bildirmek için özel bir yanıt kullanmak istiyorsunuz. Bunu yapmak için AWS Managed Rule grubu AWSManagedRulesAnonymousIpList
‘i kullanabilir ve ardından awswaf:managed:aws:anonymous-ip-list:AnonymousIPList
etiketini kullanarak özel kurallar ayarlayabilirsiniz.
Adım 1: Özel bir yanıt gövdesi oluşturun
Özel bir yanıt oluşturmanın ilk adımı, özel bir yanıt gövdesi oluşturmaktır. Bu, özel yanıt gönderildiğinde gösterilecek mesajdır.
Özel bir yanıt gövdesi oluşturma
- AWS WAF konsolunda web ACL’inizi açın ve Custom response bodies sekmesini seçin.
- Create custom response body seçin.
- Response body object name kısmına, bu yanıt için bir ad girin—örneğin, Custom-body-IP-list.
- Yanıt gövdesi için Content type seçin.
- Response body kısmına, istemciye geri göndermek istediğiniz yanıtı girin.
- Save seçin.
Şekil 8: AWS WAF konsolunda özel yanıt gövdesi oluşturma
Adım 2: Yönetilen kural grubunun eylemlerini geçersiz kılın
Özel yanıtınızı göndermek için kullandığınız kural, sayım modunda (count mode) olmalıdır. Bu, tüm eşleşen isteklerin öncelik sırasına göre sonraki WAF kurallarına gönderilmesini sağlayacaktır. Aşağıdaki örnekte, AWSManagedRulesAnonymousIpList
yönetilen kural grubundaki AnonymousIPList kuralı, sayım moduna ayarlanmıştır. Yönetilen bir kural grubunun eyleminin nasıl geçersiz kılınacağı hakkında daha fazla ayrıntı için Bir kural grubunun veya kurallarının eylemlerini geçersiz kılmaya bakın.
Şekil 9: AWS Managed Rules kuralını geçersiz kılan konsol ekran görüntüsü
Adım 3: İsteği engellemek ve müşteriye özel bir yanıt göndermek için bir kural oluşturun
Bu adım için AWS WAF etiketleri özelliğini kullanacaksınız. Yukarıdaki Durum 2’de açıklandığı gibi, yönetilen kural tarafından oluşturulan etiketle eşleşen özel bir kural oluşturmanız gerekir. Bu durumda, özel kural, özel yanıtınızı gönderecek şekilde yapılandırılmalıdır.
Özel bir kural oluşturma
- Custom response bölümünü genişletin ve Enable‘ı seçin.
- Response code altında, istemciye geri göndermek istediğiniz özel HTTP durum kodunu girin.
- (İsteğe bağlı) Özel bir yanıt başlığı eklemek istiyorsanız Response headers bölümünü kullanın.
- Choose how you would like to specify the response body altında, Adım 1’de oluşturduğunuz özel yanıt gövdesini seçin.
- (İsteğe bağlı) Günlüklerdeki etkinliği izlemek için ek etiketler oluşturmak istiyorsanız Add label‘ı kullanabilirsiniz.
- Add rule seçin.
- Özel kuralınızın kural önceliğini AWS Managed Rules kuralından daha düşük olacak şekilde ayarlayın.
- Save seçin.
Şekil 10: Bir kural için özel bir yanıt gövdesi yapılandıran konsol ekran görüntüsü
Özet
Bu blogda, etiketler, sürüm yönetimi, scope-down statements ve özel yanıtlar gibi yeni AWS WAF özelliklerinin, web uygulamalarınızı korumak ve riski en aza indirmek için AWS Managed Rules davranışını özelleştirmenize nasıl yardımcı olabileceğini gösterdik. Bu özellikleri, isteklere izin vermek veya istekleri engellemek için etiketleri ve istek özelliklerini birleştirerek AWS Managed Rules’u özelleştirmek ve günlükleri filtrelemeye yardımcı olmak için etiketleri kullanmak gibi çeşitli şekillerde kullanabilirsiniz.
AWS WAF ile ilgili diğer Güvenlik Blogu gönderilerinde AWS WAF hakkında daha fazla bilgi edinebilirsiniz.