API’lerini modernize etmek isteyen kuruluşlar, REST mimarisinden açık kaynaklı veri sorgulama ve işleme dili GraphQL’ye giderek daha fazla geçiş yapıyor. Geçiş mantıklı olsa da (GraphQL daha esnek, ölçeklenebilir ve geliştiricilerin kullanımı daha kolay) saldırganlar aynı zamanda yaramazlık için yeni fırsatlar görüyor. Geliştirici ekipler, birçok kuruluşun Kubernetes ile yaptığı hatadan kaçınmalıdır: yeni, avantajlı ve geliştirici dostu bir teknolojiye geçiş yaparken güvenlik hususlarını ikinci plana atmak.
Kendilerini geliştirici liderliğindeki GraphQL hareketinin içinde bulanlar, karşılaştıkları mevcut tehditleri anlamalı ve GraphQL’in kendi güvenlik sorumluluklarını artırdığını kabul etmelidir. Bir güvenlik stratejisi uygulamadan GraphQL’i benimsemek için acele eden kuruluşlar, özellikle ölçeklendikçe hoş olmayan sonuçlara maruz kalma riskiyle karşı karşıya kalırlar.
Saldırganların yararlanmaya çalışacakları en önemli GraphQL güvenlik zayıflıklarına ve geliştiricilerin ve kuruluşlarının riskleri nasıl en aza indirebileceğine bakalım.
GraphQL güvenlik açığı verileri şu anda ne diyor?
MITRE CVE veri tabanından ve HackerOne Hacktivity portalından alınan güvenlik açığı verileri, saldırganların GraphQL’e nasıl sızmaya çalıştıklarına ve geliştirici, DevOps ve DevSecOps ekiplerinin savunmalarını nasıl kurmaları gerektiğine dair değerli bilgiler sunar. Aşağıdaki analiz, saldırganların GraphQL sunucularında, istemcilerinde ve ek bileşenlerinde kullanabileceği güvenlik açığı açıklarına yakından bakıyor.
Kapsamlı olmasa da MITRE CVE veritabanı, GraphQL güvenlik açıklarını anlamak için çok kullanışlı olacak kadar sağlam bir veri kaynağı sağlar. Veritabanındaki izlenen 45 GraphQL güvenlik açığına bakıldığında (ilk kez 2019’da tespit edildi), yetkilendirme atlama güvenlik açıkları, toplamın %54,8’ini oluşturan açık bir çoğunluğu temsil ediyor. Bunu %16,7 ile hizmet reddi (DoS) güvenlik açıkları takip ediyor. Tanınan güvenlik açığı sınıflarını tamamlarsak, güvenlik açıklarının %9,5’i bilginin açığa çıkmasıyla, %7,1’i kod yürütmeyle, %7,1’i siteler arası istek sahteciliğiyle ve %4,8’i enjeksiyonla ilgilidir.
Araştırmacı tarafından bildirilen güvenlik açıklarını toplayan Hacktivity portalından alınan en son veriler de benzer bulguları ortaya koyuyor. Bu veriler, bilinen GraphQL güvenlik açıklarının %87’sinin bu sınıfa girmesiyle, yetkilendirme atlama risklerinin daha da büyük bir öneme sahip olduğunu gösteriyor. DoS güvenlik açıkları %7 ile ikinci sırada yer alıyor. Yarış durumu ve oturum yönetimi güvenlik açıklarının her biri %2,8’dir.
Hacktivity portalının hata ödülüne dayalı doğası, bu sonuçları bir dereceye kadar çarpıtabilir: yetkilendirme açıkları, hassas verileri doğrudan riske atabilir ve araştırmacılar için yüksek ödüller kazanabilir. DoS güvenlik açıklarının test edilmesi de büyük ölçüde yasaktır, çünkü bu test gerçek zarar verebilir ve muhtemelen bu verilerde temsil edilen güvenlik açıklarının sayısını azaltabilir.
Bu bulgular, GraphQL kullanan geliştiricilerin, erişimi işleve göre sınırlamak ve saldırıları karşı yetkilendirmek için etkili şema tabanlı erişim kontrolü uygulayarak dağıtımlarını güvence altına almaları gerektiğini açıkça ortaya koymaktadır. DoS saldırılarını yenmek için dinamik hız sınırlaması da mevcut olmalıdır. Bu yetenekleri parçalı analitikle desteklemek ve sağlam görünürlük için etkinlik günlüklerini tutmak, ekiplerin yetkisiz davranışları saldırganlar zarar vermeden önce engellemesini sağlayacaktır.
GraphQL API saldırgan keşfi, saldırganları ele verebilir
Saldırganlar, güvenlik zayıflıkları için GraphQL dağıtımlarını teşvik etmek için gelişmiş, otomatikleştirilmiş yöntemlere sahiptir. Bir kuruluş üzerinde pasif araştırma, uygulama davranışını değerlendirmek için zararsız sorgulamalar ve basit bir çıkarımla GraphQL API’lerini bulma, şu anda bir saldırganın araç kutusunun bir parçasıdır. Bunu yaparken, kullanılan teknolojileri ve başarılı bir saldırının nasıl şekillendirileceğine dair daha fazla ipucunu belirliyorlar.
Standart API güvenlik ağ geçitleri, gelen GraphQL istek sorgularını bağlamsallaştırmak için hiçbir şey yapmadığından, bu saldırgan etkinlikleri tespit edilmez. Bu, API’lerle çalışan ekipler için bir kör nokta anlamına gelir ve uyumluluk hataları riskini önemli ölçüde artırır.
Örneğin, geliştiriciler yanlışlıkla erişim kimlik bilgilerini halka açık depolarda bulunan kodun içinde bırakırsa, bunları keşfeden saldırganların bunu kutlamak için iyi nedenleri olur. Bir uygulamaya gönderilen GraphQL sorguları, geçersiz olsa bile, saldırganlara GraphQL’nin kullanımda olup olmadığını söyler. Saldırganlar ayrıca GraphQL’nin bulunması muhtemel olan birden çok uç noktayı (/graphql, /query, /api, /playground, /console ve /graphiql gibi) otomatik olarak sorgulayabilir ve sunucu yanıtları, saldırganlara aradıklarını bulduklarını söyler. tekrar arıyorum.
Ancak saldırganların güvendiği otomatik sorgular, doğru GraphQL güvenlik stratejisi uygulandığında anormal davranış olarak görünecektir. Geliştiriciler ve kuruluşlar, geçersiz sorguları ve çoğu mevcut olmayan birden çok uç noktayı hedefleyen toplu trafiği işaretleyen güvenlik önlemlerini uygulayarak, açıklardan yararlanma artmadan önce saldırıları algılayabilir ve engelleyebilir (veya hafifletebilir).
Bir uygulamanın yapabileceği nesne isteklerinin ve işlemlerin sayısını sınırlayan oran, GraphQL API uç noktalarının güvenliğini sağlamak için etkili bir önlemdir (ve çağrı düzeyinde değil, nesne düzeyinde yapılmalıdır). Saldırganlar algılama oyununu oynayabilir ve olgunlaşmış GraphQL hedeflerini bulabilir, ancak doğru güvenliğe sahip ekipler bunu daha iyi oynayabilir ve saldırıları izlerinde durdurabilir.
GraphQL güvenliği önceliklendirme gerektirir
GraphQL kullanan kuruluşlar için, GraphQL API’lerine ve uygulamalarına yönelik belirli tehditlerin doğasını anlamak ve bu riskleri ele almak için hazırlanmış özel güvenlik önlemlerine sahip olmak çok önemlidir.
GraphQL’yi güvence altına almak, yalnızca benimsemenin başlangıcından itibaren hak ettiği önceliğe sahip değilse zordur. Geliştiriciler, erişim kontrolünü (ve bilinen diğer saldırı yollarını) güvence altına alırken anormal etkinlik için trafiği aktif olarak izleyen doğru strateji ve süreçlerle, peşinde oldukları GraphQL avantajlarından güvenli bir şekilde yararlanabilir ve bunu geniş ölçekte yapabilir.