GraphQL tek endpoint üzerinden çok fazla yetenek taşır; klasik WAAP mantığı bunu kolayca kaçırır.
REST trafiğinde endpoint, metod ve path çoğu zaman isteğin ne yaptığını anlatır. GraphQL'de ise bu bilgi büyük ölçüde body içindedir. Aynı `/graphql` endpoint'i üzerinden okuma, yazma, nested sorgu, introspection, fragment ve değişkenli operation taşınabilir. Bu nedenle yalnızca URL veya metod seviyesinde kontrol yapan güvenlik katmanı GraphQL'in gerçek davranışını göremez.
GraphQL introspection üretim ortamında açık kalırsa uygulama şeması dışarı sızabilir. Saldırgan hangi type'ların, field'ların ve ilişkilerin bulunduğunu öğrenerek daha hedefli sorgular hazırlayabilir. Bu doğrudan veri sızıntısı olmayabilir; fakat saldırı yüzeyinin haritasını çıkaran ciddi bir bilgi ifşasıdır.
Bir diğer risk nested query ve fragment yapılarıdır. Aşırı derin iç içe sorgular, tek bir HTTP isteğiyle kurum servisinde yoğun işlem yükü oluşturabilir. Normal oran sınırlama yalnızca istek sayısına bakıyorsa, tek isteğin maliyeti görünmez kalır. GraphQL'de DoS riski çoğu zaman istek adedinden değil, sorgunun yapısından gelir.
Query batching de benzer bir boşluk üretir. Birden fazla query tek body içinde gönderildiğinde, dışarıdan tek HTTP isteği gibi görünür; ancak içeride çoklu operation çalışabilir. Bu durum klasik rate-limit ve endpoint bazlı güvenlik kontrollerinin etkisini azaltır.
TR7 GraphQL Derin Denetim, GraphQL trafiğini pattern tabanlı WAAP kurallarıyla inceler: introspection, nested-depth DoS ve query batching davranışlarını query, raw, json ve form scope'larında tespit ederek üretim politikalarına bağlar.
Yaklaşımımız
TR7, GraphQL güvenliğini şema farkındalığı iddiasıyla değil, üretimde sık görülen GraphQL kötüye kullanım pattern'lerini WAAP imza motoruna taşıyarak ele alır.
Introspection pattern'leri üretim ortamında engellenebilir
TR7, `__schema`, `__type`, `IntrospectionQuery` ve `fragment FullType` gibi introspection göstergelerini regex tabanlı kurallarla yakalar. Bu kurallar production ortamında block, staging ortamında monitor veya daha düşük skorla çalıştırılabilir.
Nested query DoS pattern'leri skorlanarak yakalanır
Aşırı iç içe GraphQL sorguları tek istekle yüksek işlem yükü oluşturabilir. TR7 50101 kural ailesi, derin `{ ... { ... } }` zincirlerini pattern seviyesinde tespit eder ve yüksek skorla WAAP kararına dahil eder.
Query batching davranışı tek istek altında görünür hale gelir
Bir body içinde birden fazla query gönderilmesi klasik rate-limit mantığını zayıflatabilir. TR7 50102 kuralı, batch query pattern'lerini tespit ederek bu davranışı log, skor veya block kararına bağlamayı sağlar.
Body scope inspection GraphQL payload'ını farklı alanlarda arar
GraphQL sorgusu yalnızca raw body içinde değil, JSON, form veya query alanlarında da taşınabilir. TR7 kuralları query, raw, json ve form scope'larında çalışarak farklı istemci implementasyonlarını aynı WAAP politikası içinde kapsar.
Yetenekler
GraphQL Derin Denetim, GraphQL'e özgü riskleri imza tabanlı WAAP kuralları, scope seçimi ve endpoint sıkılaştırma kontrolleriyle yönetir.
TR7 50100 kuralı GraphQL introspection denemelerini tespit eder
50100 kuralı, GraphQL introspection için yaygın kullanılan `__schema`, `__type`, `IntrospectionQuery` ve `fragment FullType` pattern'lerini hedefler. Varsayılan risk seviyesi orta düzey sinyal olarak konumlandırılır ve score 4 ile değerlendirilebilir. Production ortamında introspection kapalı olması gereken endpoint'lerde bu kural block veya monitor modunda kullanılabilir. Böylece şema keşfi denemeleri WAAP olay akışında görünür hale gelir.
TR7 50101 kuralı nested query DoS pattern'lerine odaklanır
50101 kuralı, aşırı iç içe GraphQL sorgularını pattern seviyesinde tespit etmek için kullanılır. Derin `{` zincirleri ve yoğun nested yapı, tek isteğin arka tarafta yüksek işlem maliyeti üretmesine neden olabilir. Bu kural score 6 seviyesinde daha güçlü saldırı sinyali olarak değerlendirilebilir. Amaç, schema-aware complexity hesabı yapmak değil, tehlikeli nested query pattern'lerini erken yakalamaktır.
TR7 50102 kuralı query batching kötüye kullanımını yakalar
50102 kuralı, tek body içinde birden fazla query gönderilmesini hedefleyen batch pattern'lerini tespit eder. Query batching bazı istemciler için meşru olabilir; bu nedenle kural state ve score değerleri uygulama davranışına göre ayarlanmalıdır. Monitor modunda başlayıp gerçek trafik gözlemiyle netleştirmek doğru yaklaşımdır. Kötüye kullanım netleştiğinde kural bloklama politikasına alınabilir.
waf_db GraphQL varyantları introspection ve nested pattern kapsamını genişletir
TR7 enriched kurallarının yanında waf_db içinde 50100, 50101 ve 21360+ ailesi gibi GraphQL varyantları bulunur. Bu varyantlar `__schema {`, `__type`, `__typename` ve nested mutation pattern'leri gibi farklı yazım biçimlerini kapsar. Böylece tek regex'e bağlı kalmadan introspection ve nested sorgu davranışları için daha geniş imza yüzeyi oluşturulur. Operatör bu kuralların state ve score değerlerini servis özelinde override edebilir.
Query, raw, json ve form scope'ları farklı taşıma biçimlerini kapsar
GraphQL sorguları her zaman aynı formatta gelmez. Bazı istemciler JSON body içinde `query`, `variables` ve `operationName` alanlarını kullanır; bazıları raw body veya form alanları üzerinden gönderim yapabilir. TR7 kuralları query, raw, json ve form scope'larında çalışarak bu farklı taşıma biçimlerini denetim kapsamına alır. Bu, GraphQL endpoint'lerinde sadece tek body formatına güvenme hatasını azaltır.
API endpoint ve web application hedeflerinde aynı kural modeli kullanılır
GraphQL kontrolleri hem API endpoint hem web application hedefleri için uygulanabilir. Aynı WAAP kural modeli, servis tipine göre farklı state, score veya scope değerleriyle yönetilebilir. Örneğin internal test endpoint'inde introspection monitor kalırken, public production endpoint'inde block yapılabilir. Bu esneklik, tek kural setinin farklı ortam politikalarına uyarlanmasını sağlar.
StructureRuleDB ile GraphQL endpoint davranışı daraltılabilir
`/graphql` endpoint'i için yalnızca POST metoduna izin verme, beklenen JSON key'leri `query`, `variables` ve `operationName` ile sınırlama veya body size limiti uygulama gibi kontroller tanımlanabilir. Bu kontroller GraphQL imzalarının yerine geçmez; onları tamamlayan pozitif güvenlik katmanıdır. Beklenmeyen metod veya beklenmeyen JSON alanları erken aşamada reddedilebilir. Böylece endpoint davranışı daha öngörülebilir hale gelir.
Custom rule ile uygulamaya özel GraphQL pattern'leri eklenebilir
GraphQL trafiğinde uygulamaya özel mutation, field adı veya riskli operation pattern'i varsa custom WAAP rule olarak eklenebilir. Örneğin body içinde belirli bir `mutation` kelimesi veya hassas operation adı görüldüğünde daha yüksek skor verilebilir. Bu özel kurallar ana WAAP skor sistemine katılır ve log/SIEM akışında görünür. Schema-aware alan denetimi yapılmasa bile uygulama-spesifik riskler pattern tabanlı yakalanabilir.
Operasyonel derinlik
GraphQL Derin Denetim, mevcut gerçek yetenekleriyle imza tabanlıdır; operation parsing, complexity hesabı ve schema-aware field WAAP iddiası bu sayfanın kapsamına alınmaz.
Pattern tabanlı denetim
GraphQL kontrolleri regex ve scope tabanlı pattern detection yaklaşımıyla çalışır. Operation type ayrımı, gerçek depth counter veya query complexity score hesaplama bu modelin parçası değildir. Bu ayrım doğru konumlandırma için özellikle önemlidir.
State ve score override
50100, 50101, 50102 ve waf_db varyantları servis ihtiyacına göre enabled, monitor veya disabled durumuna alınabilir. Score değerleri de uygulamanın false-positive toleransına göre ayarlanabilir. Production GraphQL endpoint'lerinde monitor ile başlayıp gerçek trafik gözleminden sonra bloklama doğru devreye alma modelidir.
Endpoint sıkılaştırma
GraphQL endpoint'lerinde method whitelist, JSON key allow-list ve body size limiti uygulanabilir. Bu kontroller imza tespitinin yanında request şeklinin beklenen sözleşmeye uymasını sağlar. Özellikle public API'lerde `/graphql` endpoint'inin yalnızca beklenen formatı kabul etmesi saldırı yüzeyini daraltır.
Rate-limit sınırı
Per-operation rate-limit GraphQL parser seviyesinde uygulanmaz. Tek body içindeki operation sayısını semantik olarak ayrıştırıp her operation'a ayrı limit verme iddiası yoktur. Query batching pattern'i imza olarak yakalanabilir ve genel rate-limit politikalarıyla birlikte kullanılabilir.
Persisted query kapsamı
Persisted queries için özel destek bu özellik kapsamında bulunmaz. İstek içinde görünen GraphQL pattern'leri WAAP imzalarıyla incelenir. Query'nin hash üzerinden çözümlenip şema veya kayıtlı operation bilgisiyle doğrulanması bu sayfada iddia edilmez.
Schema-aware olmayan model
Belirli bir GraphQL schema alanına, örneğin `User.email` gibi field seviyesine özel native denetim yapılmaz. Kurallar body üzerinde pattern eşleştirme yaklaşımıyla çalışır. Field bazlı özel ihtiyaçlar varsa custom regex kuralı ile sınırlı ve dikkatli şekilde ele alınmalıdır.
Hangi senaryolarda kullanılır
Production GraphQL endpoint'inde introspection kapatma
Güvenlik ekibi staging ortamında introspection'a izin verirken production endpoint'inde 50100 kuralını block modunda çalıştırabilir. Şema keşfi denemeleri loglanır, skorlanır ve politika gereği engellenir.
Nested fragment DoS denemelerini skorla engelleme
Aşırı iç içe fragment veya query yapıları kurum servisinde yüksek işlem maliyeti oluşturabilir. 50101 kuralı bu pattern'leri score 6 seviyesinde yakalayarak WAAP bloklama kararına güçlü sinyal verir.
Mobil API'ye query batching saldırısını yakalama
Mobil istemci endpoint'ine tek request içinde çok sayıda query gönderilmeye çalışıldığında 50102 kuralı batch pattern'ini tespit eder. Operasyon ekibi önce monitor modunda davranışı izleyebilir, kötüye kullanım netse enabled moda alabilir.
GraphQL endpoint için metod ve JSON key whitelist
API ekibi `/graphql` endpoint'inde yalnızca POST metoduna ve `query`, `variables`, `operationName` JSON alanlarına izin verebilir. Beklenmeyen metodlar veya alanlar uygulamaya ulaşmadan reddedilerek endpoint davranışı daraltılır.
Sık sorulanlar
TR7 GraphQL desteği native parser mı, pattern tabanlı mı?
Introspection'ı production'da tamamen kapatabilir miyim?
Query batching meşru kullanım için sorun çıkarır mı?
GraphQL kuralları hangi scope'larda çalışır?
waf_db varyantları ile enriched kurallar arasındaki fark nedir?
StructureRuleDB ile GraphQL endpoint sıkılaştırması nasıl yapılır?
GraphQL endpoint'lerinizi WAAP imza motoruna bağlayın
Introspection, nested DoS ve query batching risklerini üretim ortamında görünür ve yönetilebilir hale getirin. Kendi servislerinizle canlı bir kurulumda gezdirelim.