Yetenek

GraphQL Derin Denetim

GraphQL trafiğini tek bir POST body olarak bırakmayın; introspection, nested DoS ve query batching pattern'lerini WAAP içinde yakalayın.

TR7 GraphQL Derin Denetim, GraphQL trafiğini klasik REST trafiği gibi ele almaz. GraphQL'de çoğu zaman tek endpoint üzerinden farklı operation'lar, nested sorgular, değişkenler ve çoklu query yapıları taşınır; bu nedenle güvenlik kontrolü yalnızca URL ve metod seviyesinde kalırsa kritik riskler görünmez. TR7 WAAP, GraphQL'e yönelik imza tabanlı tespitlerle introspection denemelerini, aşırı iç içe sorgu pattern'lerini ve query batching davranışlarını yakalar. 50100, 50101 ve 50102 numaralı TR7 enriched kuralları; şema sızdırma, nested query DoS ve batch query kötüye kullanımına odaklanır. GraphQL kontrolleri query, raw, json ve form scope'larında çalışabilir. `/graphql` gibi endpoint'ler için method whitelist, izinli JSON key kontrolleri, body size limitleri ve custom rule eklemeleriyle güvenlik politikası daraltılabilir. Sonuç: TR7, GraphQL için native parser veya schema-aware alan denetimi iddiası vermez; ama üretim ortamında sık görülen introspection, nested DoS ve query batching risklerini WAAP imza motoru içinde görünür ve yönetilebilir hale getirir.

3
TR7 enriched GraphQL kuralı: 50100 introspection, 50101 nested DoS, 50102 batch
5+
waf_db GraphQL varyantı: 21360 ailesi ve introspection varyantları
4
Denetim scope'u: query, raw, json, form

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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ı?
Pattern tabanlıdır. TR7, GraphQL için dedicated bir operation parser veya şema farkındalığı motoru çalıştırmaz. 50100, 50101 ve 50102 enriched kuralları regex ve scope tabanlı pattern detection ile çalışır. Operation type ayrımı, gerçek depth counter veya query complexity hesaplama bu modelin parçası değildir. Bu yaklaşım, üretimde en sık görülen introspection, nested DoS ve query batching risklerini yakalamak için tasarlanmıştır.
Introspection'ı production'da tamamen kapatabilir miyim?
Evet. 50100 kuralı `__schema`, `__type`, `IntrospectionQuery` ve `fragment FullType` pattern'lerini hedefler. Bu kuralı production endpoint'inde block modunda, staging endpoint'inde monitor modunda çalıştırmak mümkündür. Böylece şema keşfi denemeleri WAAP olay akışında görünür hale gelir ve politika gereği engellenir.
Query batching meşru kullanım için sorun çıkarır mı?
Query batching bazı istemciler için meşru olabilir. Bu nedenle 50102 kuralını direkt block modunda başlatmak yerine monitor modunda çalıştırıp gerçek trafik davranışını gözlemlemek önerilir. Kötüye kullanım netleştiğinde kural enabled veya block politikasına alınabilir. State ve score değerleri servis özelinde override edilebilir.
GraphQL kuralları hangi scope'larda çalışır?
TR7 GraphQL kuralları query, raw, json ve form scope'larında çalışır. Bu sayede GraphQL payload'ı JSON body, raw body veya form alanları üzerinden taşınsın, aynı WAAP imza politikası devreye girer. Farklı istemci implementasyonları tek bir kural seti kapsamına alınır.
waf_db varyantları ile enriched kurallar arasındaki fark nedir?
TR7 enriched kuralları (50100, 50101, 50102) belirli GraphQL kötüye kullanım pattern'lerine odaklanan birincil kurallar olarak konumlandırılır. waf_db içindeki varyantlar ise `__schema {`, `__typename`, `mutation.*{.*{.*{` gibi alternatif yazım biçimlerini ve ek introspection pattern'lerini kapsar. İkisi birlikte daha geniş imza yüzeyi oluşturur. Operatör her iki katmanı da servis ihtiyacına göre bağımsız olarak yönetebilir.
StructureRuleDB ile GraphQL endpoint sıkılaştırması nasıl yapılır?
StructureRuleDB ile `/graphql` endpoint'inde yalnızca POST metoduna izin verilebilir, beklenen JSON key'leri `query`, `variables` ve `operationName` ile sınırlanabilir ve body size limiti uygulanabilir. Bu kontroller imza tespitinin yerine geçmez; beklenmeyen metod veya alan içeren isteklerin imza kontrolüne ulaşmadan reddedilmesini sağlayan pozitif güvenlik katmanıdı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.