AWS Türkçe Blog
Anormallik algılama ile AWS WAF’de görünürlük nasıl iyileştirilir?
Orijinal makale: Link (Cyril Soler, Senior Solutions Architect)
API’leriniz internette açığa çıktığında, doğal olarak öngörülemeyen trafikle karşı karşıya kalırlar. AWS WAF, uygulamanızın API’sini SQL enjeksiyonu ve siteler arası komut dosyası çalıştırma (cross-site scripting) gibi yaygın web açıklarına karşı korumaya yardımcı olur. Bu blog gönderisinde, AWS WAF etkinliğine ilişkin görünürlüğünüzü artırmak, kötü amaçlı etkinliği belirlemek ve araştırmalarınızı basitleştirmek için AWS WAF ölçümlerindeki anormallikleri otomatik olarak nasıl tespit edeceğinizi öğreneceksiniz. Bu çözümün anormallikleri algılamak için kullandığı servis Amazon Lookout for Metrics‘tir.
Lookout for Metrics başarılı veya başarısız HTTP istekleri gibi iş veya operasyonel metrikleri izlemek ve makine öğrenimi (ML) kullanarak anormallikleri tespit etmek için kullanabileceğiniz bir servistir. Lookout for Metrics’i Amazon CloudWatch dahil olmak üzere AWS WAF ölçümlerini içeren farklı veri kaynaklarını izlemek için yapılandırabilirsiniz. Lookout for Metrics, bulguları AWS Security Hub‘da yayınlama gibi eylemler de gerçekleştirebilir.
Çözüme genel bakış
Bu blog gönderisindeki çözüm, basit bir REST API’si sunmak için Amazon API Gateway‘i kullanır. AWS WAF, AWS WAF için AWS Managed Rules ile API Gateway’i korur. Amazon Lookout for Metrics, AWS WAF kuralı eylemlerindeki olağandışı kalıpları etkin bir şekilde algılar ve şüpheli etkinlik algılandığında Security Hub’a bir bulgu gönderir. Şekil 1, çözüm mimarisini göstermektedir. AWS WAF, Application Load Balancer, Amazon CloudFront dağıtımları veya AWS AppSync GraphQL API‘leri ile entegre olduğundan bu çözüm bu servisler için de geçerlidir.
Çözümün iş akışı aşağıdaki gibidir:
- Bir HTTP isteği API Ağ Geçidi uç noktasına (endpoint) ulaşır.
- AWS WAF yapılandırılmış kuralları kullanarak HTTP isteğini analiz eder.
- Amazon CloudWatch, AWS WAF’te yapılandırılan her kural için eylem metriklerini toplar.
- Amazon Lookout for Metrics, CloudWatch metriklerini izler, en iyi ML algoritmasını seçer ve ML modelini eğitir.
- Lookout for Metrics, aykırı değerleri (outliers) algılar ve sorunu teşhis etmek için bir önem derecesi puanı sağlar.
- Lookout for Metrics, bir anormallik algılandığında bir AWS Lambda işlevini çağırır.
- Lambda işlevi daha fazla analiz için Security Hub’a bir bulgu gönderir.
Gelin bu çözümde kullanacağınız AWS servislerine detaylı bir şekilde göz atalım.
Amazon API Gateway
Amazon API Gateway, API yöntemleri için entegrasyonları destekleyen sunucusuz bir API yönetim hizmetidir. Bu servis, bu çözümü uygulamanın en kolay ve en uygun maliyetli yoludur. Ancak bu çözümü iş yükünüzde uygulamak için Amazon CloudFront, AWS AppSync GraphQL API ve Application Load Balancer‘ı da kullanabilirsiniz.
AWS WAF
AWS WAF, REST API’ler için API Gateway, Amazon CloudFront, GraphQL API için AWS AppSync veya Application Load Balancer ile ilişkilendirebileceğiniz bir web uygulaması güvenlik duvarıdır. AWS WAF, CloudWatch gibi diğer AWS servisleriyle entegredir. AWS WAF gelen HTTP isteklerindeki yaygın web açıklarını tespit etmek için kurallar kullanır. Kendi kurallarınızı yapılandırabilir veya AWS’ten veya bir üçüncü taraf satıcıdan yönetilen kural kümelerini kullanabilirsiniz. Bu çözümde CrossSiteScripting_QUERYARGUMENTS kuralını içeren AWS Managed Rules kullanırsınız.
Amazon CloudWatch
Amazon CloudWatch bir izleme ve gözlemlenebilirlik servisidir. CloudWatch her 5 dakikada bir AWS WAF’ten belirli metrikler alır. CloudWatch özellikle her AWS WAF kuralı için PassedRequests, BlockedRequests ve CountedRequests metriklerini sağlar.
Amazon Lookout for Metrics
Amazon Lookout for Metrics, metriklerinizdeki anormallikleri otomatik olarak algılamak ve teşhis etmek için makine öğrenimi (ML) algoritmalarını kullanır. Lookout for Metrics için bir veri kaynağı olarak CloudWatch metriklerini kullanarak, anormallikleri daha hızlı tespit etmek için Lookout for Metrics ML modellerinden birini uygulayabilirsiniz. Ayrıca zaman içinde model doğruluğunu iyileştirmeye yardımcı olmak için algılanan anormallikler hakkında geri bildirim sağlayabilirsiniz. Lookout for Metrics, US East (Ohio), US East (N. Virginia), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Frankfurt), Europe (Ireland) ve Europe (Stockholm) AWS Bölgelerinde kullanılabilir.
AWS Lambda
Bu çözümde Lookout for Metrics için bir uyarı mekanizması olarak bir AWS Lambda işlevi kullanırsınız. Makine öğrenimi modeli bir aykırı değer tespit ettiğinde, özel bir kod uygulayan Lambda işlevini çağırır. Lambda işlevi daha sonra anormalliği bir bulgu olarak Security Hub’a aktarır.
AWS Security Hub
Bu çözümde güvenlik bulgularını yönetmenin merkezi bir yolu olarak AWS Security Hub’ı kullanırsınız. Bu entegrasyon güvenlik ekibinin çeşitli kaynaklardan gelen güvenlik bulgularını teşhis etmesi için ortak bir yer sağlama avantajına sahiptir ve mevcut Güvenlik Bilgileri ve Olay Yönetimi (Security Information and Event Management – SIEM) sisteminizle tekdüze bir şekilde bütünleşir.
Önkoşullar
Bu çözüm, anormallik algılama bulgularını toplamak için Security Hub’ı kullanır. Çözümü dağıtmadan önce, Security Hub’ı manuel olarak etkinleştirmek için sağlanan talimatları izleyerek AWS hesabınızda Security Hub’ı etkinleştirmeniz gerekir. Security Hub’ı etkinleştirdikten sonra Şekil 2’de gösterildiği gibi iş yükünüzle ilgili güvenlik standartlarını isteğe bağlı olarak seçebilirsiniz.
Çözümü dağıtın
AWS WAF Anomaly Detection CDK projesi GitHub kod deposunda AWS Cloud Development Kit (AWS CDK) uygulaması olarak kullanıma hazır bir çözüm sunulmaktadır. Python için AWS CDK kullanarak GitHub deposunu klonlayabilir ve uygulamayı dağıtabilirsiniz.
Önemli: Çözümü başarıyla dağıttıktan sonra, Lookout for Metrics algılayıcısını etkinleştirmelisiniz. Bu, CDK dağıtımının bir parçası olarak yapılmaz. Dedektörü etkinleştirmek için AWS Management Console’da Amazon Lookout for Metrics‘e gidin, çözümün oluşturduğu dedektörü seçin (WAFBlockingRequestDetector) ve Activate‘i seçin. Alternatif olarak, dedektörünüzü etkinleştirmek için aşağıdaki AWS komutunu kullanabilirsiniz.
Çözümü göstermek için bir API oluşturun
İlk olarak korumak için bir HTTP uç noktasına ihtiyacınız var. AWS WAF; CloudFront, Application Load Balancer, API Gateway ve AWS AppSync GraphQL API ile entegredir. Bu blog gönderisinde API’leri oluşturmak ve yönetmek için tamamen yönetilen bir servis olduğu için bir REST API Gateway öneriyorum. Ayrıca API Gateway, sahte API’leri uygulamak için bir mekanizma sağlar.
REST API oluşturmak için Amazon API Gateway’de bir REST API oluşturmaya yönelik talimatları izleyin. API’yi oluşturduktan sonra, API kök düzeyinde bir GET yöntemi oluşturun ve bunu Şekil 3’te gösterildiği gibi sahte bir uç noktayla ilişkilendirin. Bu herhangi bir GET isteğine bir HTTP 200 durum kodu döndürmek için yeterlidir.
Son olarak API’yi “prod” aşaması altında dağıtın ve tüm varsayılan ayarları koruyun.
Yönetilen kuralları dağıtmak için bir AWS WAF web ACL’i oluşturun
API Gateway’de bir API oluşturduğunuza göre bir web erişim kontrol listesi (web ACL) oluşturma bölümündeki talimatları izleyerek bir AWS WAF web ACL oluşturmanız gerekir. Bir web ACL, AWS WAF’in en üst düzey yapılandırma nesnesidir. Bu, API’nize uygulayacağınız AWS WAF kuralları koleksiyonudur. API Gateway bölgesel bir servistir, bu nedenle API ile aynı AWS Bölgesinde bir web ACL’i oluşturduğunuzdan emin olun. Web ACL’i oluşturduktan sonra Şekil 4’te gösterildiği gibi AWS Managed Rules‘tan (AWSManagedRulesCommonRuleSet olarak da adlandırılan) Çekirdek kural kümesi (Core rule set – CRS) kural grubunu ekleyin. Bu kural grubu daha sonra anormallik algılamasını göstermek için kullanacağınız CrossSiteScripting_QUERYARGUMENTS kuralını içerir.
Kullanılan Web ACL kuralı kapasite birimlerini (Web ACL rule capacity units used) gözlemleyerek Çekirdek kural kümesinin 700 web ACL kapasite birimi (WCU) tükettiğini görebilirsiniz. Bir web ACL için maksimum kapasite çoğu kullanım durumu için yeterli olan 1.500’dür. Daha fazla kapasiteye ihtiyacınız varsa AWS Destek Merkezi ile iletişime geçin.
Web ACL’i API dağıtımıyla ilişkilendirin
Web ACL’ini oluşturduktan sonra onu API ile ilişkilendirirsiniz. Bunu yapmak için AWS WAF konsolunda az önce oluşturduğunuz web ACL’ine gidin. Associated AWS resources sekmesinde, Add AWS resources seçin. İstendiğinde daha önce oluşturduğunuz API’yi seçin ve ardından Add seçin.
Anormalliği Security Hub’a iletmek için bir Lambda işlevi oluşturun
Çözüm tarafından algılanan anormalliklere görünürlük kazandırmak yararlıdır ve bunu yapmanın çeşitli yolları vardır. Bu çözümde Security Hub’a bulgular gibi görünürlük sağlarsınız. Security Hub, AWS çözümlerinizden elde edilen farklı bulguları yönetmek için merkezi bir yer sağlar. Ayrıca tanılamaya yardımcı olacak grafiksel araçlar sağlar.
Her anormalliği alan ve bunları Security Hub’a aktaran bir Lambda işlevi kullanırsınız. “lookout_alarm” Lambda işlevini GitHub’da bulabilir veya Python ile bir Lambda işlevi oluşturmak için talimatları takip edebilirsiniz. Bulguda ek bağlam zenginleştirmesi sağlamak için bu Lambda işlevini kullanacaksınız.
Bu Lambda işlevini kullanmadan önce Security Hub’ı etkinleştirdiğinizden emin olun.
Lookout for Metrics detector, dataset ve alarm oluşturun
Artık bir AWS WAF web ACL’i tarafından korunan bir API’niz var. Ayrıca bir Lambda işlevi aracılığıyla Security Hub ile tümleştirmenin bir yolunu da yapılandırdınız. Bir sonraki adım bir Lookout for Metrics detector oluşturmak ve tüm bu öğeleri birbirine bağlamaktır. Lookout for Metrics’in temel kavramları ve terminolojisi şunlardır:
- Detector – Bir veri kümesini izleyen ve anormallikleri tanımlayan Lookout for Metrics kaynağı.
- Dataset – The detector’s copy of the data that Lookout for Metrics is analyzing. Lookout for Metrics’in analiz ettiği verilerin detector kopyası.
- Alert – Detector bir anormallik bulduğunda bir bildirim göndermek veya bir işleme iş akışını başlatmak için bir mekanizma.
İlk olarak, bir detector oluşturmak için talimatları izleyin. Sağlamanız gereken tek bilgi bir ad ve bir aralıktır. Aralık, iki analiz arasındaki zaman miktarıdır. Aralık seçiminiz, işlediğiniz metrikler veya verilerinizin tutulma süresi gibi kriterlere bağlıdır. Detector aralığı hakkında daha fazla bilgi için Lookout for Metrics kotalarına bakınız. Şekil 6’daki örnekte minimum olan 5 dakikalık bir aralık seçtim.
Detector oluşturduktan sonra veri kaynağı olarak CloudWatch kullanan bir veri kümesini yapılandırmak için talimatları izleyin. Create a role in the service role seçin, Next seçin ve aşağıdaki parametreleri girin:
- CloudWatch namespace için AWS/WAFV2 seçin.
- Dimensions için Region, Rule ve WebACL seçin.
- Measure için, BlockedRequests seçin.
- Aggregation function için, SUM seçin.
Şekil 7, detector’un anormallikler için kontrol edeceği veri kaynağı alanlarını gösterir.
Ardından Lambda işlevini çağırmak için bir Lookout for Metrics alert oluşturun. Bunu yapmak için uyarılarla çalışma yönergelerini izleyin. Bir ad, bir kanal (Lambda işlevi) ve bir önem eşiği sağlayın. Lookout for Metrics’in başlıca avantajlarından biri tespit edilen anomalinin önemini belirten puanlamasıdır. Anormalliklerin 0 ile 100 arasında bir puanı vardır. Aynı detector ile ilişkilendirilmiş farklı eşiklere sahip farklı alarmlar ayarlayabilirsiniz. Bu şekilde farklı önem seviyeleri için uyarılar sağlayabilirsiniz. Şekil 8’deki örnekte önem eşiği 10 olan tek bir alarm oluşturdum.
Son adımlar, detector’u etkinleştirmek ve bir ML modeli seçip eğitmek için Lookout for Metrics’i yapılandırmaktır. Bunu yapmak için detector ayrıntıları sayfasında Activate‘i seçin.
Bu çözüm neden anormallik algılaması için Lookout for Metrics kullanıyor?
Amazon CloudWatch, belirli bir metrikte yerel anormallik algılaması sunar. Bu işlev, metrikleri sürekli olarak analiz eden, normal temelleri belirleyen ve minimum kullanıcı müdahalesiyle anormallikleri belirleyen istatistiksel ve ML algoritmalarını uygulamak için kullanışlıdır.
Lookout for Metrics anormallik algılamanın daha gelişmiş bir sürümünü sağlar ve bu da onu bu çözüm için daha iyi bir seçim haline getirir. Lookout for Metrics otomatik olarak bir ML algoritmaları koleksiyonunu destekler. Örneğin, hiçbir algoritma her tür veri için çalışmaz, bu nedenle Lookout for Metrics verileri inceler ve anormallikleri doğru bir şekilde tespit etmek için doğru verilere doğru ML algoritmasını uygular. Ayrıca Lookout for Metrics eşzamanlı anormallikleri mantıksal gruplar halinde gruplandırır ve tam resmi görebilmeniz için ayrı uyarılar yerine anormallik grubu için tek bir uyarı gönderir. Son olarak Lookout for Metrics, AWS’in modellerin doğruluğunu ve performansını sürekli olarak iyileştirmek için kullandığı algılanan anormallikler hakkında geri bildirim sağlamanıza olanak tanır.
CloudWatch metriklerinde sıfır değerini yayınlayın
AWS WAF metrikleri için raporlama ölçütü sıfır olmayan bir değerdir. Bu, AWS WAF herhangi bir isteği engellemiyorsa BlockedRequests metriğinin güncellenmediği anlamına gelir. Gerçek HTTP trafiğinin olmadığı durumlarda tipik olarak bir test ortamında sıfır değeri yayınlanmalıdır. Üretimde AWS WAF yasal olmayan istekleri etkin bir şekilde engellediği için bu yayın gerekli değildir. ML modelini engellenen isteklerin yokluğunda eğitmek için her 5 dakikada bir PutMetricData CloudWatch API yöntemini çağırarak sıfır değerini yayınlamanız gerekir.
Örneğimde, Lookout for Metrics aralığıyla hizalanacak 5 dakikalık bir süre seçtim. Aşağıda gösterildiği gibi CloudWatch metrikler API’sini kullanarak her beş dakikada bir sıfır değeri yayınlamak mümkündür. Sıfır değeri, SUM’ı etkilemez ve her beş dakikada bir en az bir değerin yayınlanmasını sağlar. Python için AWS SDK‘yı kullanarak sıfır değerini yayınlamak için GitHub’daki cloudwatch_zero Lambda işlevini kullanabilirsiniz.
Çağrıyı her 5 dakikada bir planlamak üzere bir CloudWatch Events kuralı oluşturmak için
- CloudWatch Event konsoluna gidin ve Create Rule‘u seçin.
- Schedule seçin, 5 dakikalık varsayılan aralığı koruyun ve Add target seçin.
- Select the name of the function you previously created, expand the Configure input section. Daha önce oluşturduğunuz işlevin adını seçin, Configure input bölümünü genişletin.
- Şekil 10’da gösterildiği gibi Constant (JSON text) öğesini seçin. Metin alanına aşağıdaki yapılandırmayı yapıştırın:
- Configure details seçin.
- Kuralınız için bir ad girin ve ardından Create rule‘u seçin.
Eğitim süresi
Etkinleştirilmiş detector anormallikleri bulmaya çalışmadan önce, öğrenmek için birkaç aralıktaki verileri kullanır. Hiçbir geçmiş veri mevcut değilse, eğitim süreci beş dakikalık bir aralık için yaklaşık bir gün sürer. Bu çözümü ilk kez dağıttığınızda, AWS WAF kaynaklarınız için CloudWatch’ta geçmiş verileriniz olmaz ve Lookout for Metrics anormallik algılamasının soğuk başlangıcıyla karşı karşıya kalırsınız. Lookout for Metrics detector aralığı 5 dakikaya ayarlandığından bir anormalliği tespit edebilmek için 25 saat beklemeniz gerekir. Çözümü günlerdir üretimde olan bir AWS WAF kaynağına dağıtırsanız eğitim süreniz azalır.
Anormallik algılamayı test edin
25 saat sonra Lookout for Metrics, metrik davranışınıza uyan bir ML modelini doğru bir şekilde seçer ve onu gerçek verilerinize göre doğru şekilde eğitir. Ardından anormallik algılamasını test etmeye başlayabilirsiniz. CrossSiteScripting_QUERYARGUMENTS yönetilen kuralını çağırmak için AWS WAF belgelerinde açıklandığı gibi bir sorgu parametresine JavaScript alert() çağrısı ekleyerek basit bir curl komutu kullanabilirsiniz. Engellenen istek anormalliklerinin algılanmasını sağlamak için önemli sayıda istek enjekte ettiğinizden emin olun.
Enjeksiyon komut dosyasını çalıştırdıktan sonra, sistemin anormalliği algılamasını bekleyin. CloudWatch BlockedRequests metriğinin güncellenmesi 5 dakika kadar sürer ve Lookout for Metrics, CloudWatch verilerindeki anormallikleri her 5 dakikada bir algılayacak şekilde yapılandırılır. Bu nedenlerle, simüle edilen anomaliyi tespit etmek 10 dakika sürebilir.
Algılama ve işleme süresinden sonra bulgu, Security Hub’da görünür. Bulguyu görüntülemek için AWS Management Console’a gidin, Services seçin, Security Hub‘ı ve ardından Findings‘i seçin.
Şekil 11’de Lookout for Metrics’ten gelen yeni bulguyu Low önem derecesi ve 100 anomali puanı ile görebilirsiniz. Gelecekteki algılamalar için modeli iyileştirmek üzere anomali algılaması hakkında geri bildirimde bulunabileceğiniz Lookout for Metrics konsolunu açmak için düzeltme alanını kullanabilirsiniz.
Şekil 12, bulguyla ilgili metrikleri görebileceğiniz Lookout for Metrics grafik arayüzünü gösterir. Önceki enjeksiyon komut dosyası yalnızca bir metriği etkiledi, ancak aynı kurulum iki veya daha fazla metrik arasında ortaya çıkan anormallikleri birlikte gözlemlemek için çalışıyor. Bu özellik sorunların teşhisini kolaylaştırır.
Etkilenen metriklerin her biri için, anormalliğin alakalı olduğunu doğrulamak için grafiğin üzerindeki Is this relevant? yanındaki Yes düğmesini seçin.
Çözümü genişletin
Bu gönderideki çözüm, AWS WAF tarafından engellenen istek davranışındaki anormallikleri algılar. Ancak, isteklerinizi engellemek yerine saymak için AWS WAF kuralı eylemlerini de yapılandırabilirsiniz. Bu genellikle eski sistemlerde veya iş yükünüzle uyumsuzluk gösteren yönetilen bir kural kümesinin belirli kuralları için yapılır. Kural eylemini bir sayı olarak yapılandırdığınızda, kapsamlı bir gözlemlenebilirlik yaklaşımına olan ihtiyacı artırırsınız. Sayılan isteklere karşı anormallik tespiti uygulayarak bu çözüm, sisteminiz için daha iyi gözlemlenebilirlik elde etmenize yardımcı olacaktır.
Düzeltme ile ilgili olarak, bu çözümü farklı AWS servisleriyle entegre ederek değiştirmek mümkündür. Örnek olarak, anormallik algılamayı kendi SIEM sisteminizle entegre edebilir veya Amazon Simple Notification Service’i (Amazon SNS) kullanarak güvenlik ekibi dağıtım listenize bildirimde bulunabilirsiniz.
AWS WAF, loglarında istemcinin IP adresi gibi ek bilgiler sağlar. AWS WAF loglarındaki anormallikleri tespit etmek için AWS WAF loglarını Amazon Simple Storage Service’e (Amazon S3) alabilir ve ardından veri kaynağı olarak Amazon S3 ile Lookout for Metrics’i kullanabilirsiniz.
Sonuç
AWS WAF, CloudWatch ile entegredir ve iletilen istekler, engellenen istekler veya sayılan istekler için metrikler sağlar. Lookout for Metrics ile bir makine öğrenimi (ML) modeli kullanarak CloudWatch metriklerinde beklenmeyen davranışları tespit edebilirsiniz. Bu blog yazısında, AWS WAF’i makine öğrenimi tabanlı bir anormallik algılama mekanizmasıyla sağlamak için her iki servisi nasıl entegre edeceğinizi gösterdim. ML, AWS WAF davranışınız hakkında daha fazla görünürlük kazanmanın bir yoludur. Ek olarak, sistem anormal düzeyde engellenen (veya sayılan) istekler algıladığında doğru düzeltme eylemini gerçekleştirmek için kolayca bilgilendirilebilirsiniz.
Bu gönderiyle ilgili sorularınız varsa, AWS WAF forumunda yeni bir konu başlatın veya AWS Support ile iletişime geçin.
Daha fazla AWS Security nasıl yapılır içeriği, haberi ve özellik duyurusu mu istiyorsunuz? Bizi Twitter‘da takip edin.