API Yetkilendirme Açıkları, Bulgu Tespiti ve Test Otomasyonu - Bölüm 1

Günümüzde, modern web uygulamaları büyük ölçüde API tabanlı çalışıyor ve internet trafiğinin %90’a yakın bir kısmını API trafiği oluşturuyor. Önümüzdeki manzara bu olmasına rağmen, API güvenliği operasyon süreçleri, standart DAST taramaları ve WAF’lar üzerinden yürütülüyor. Bu tarz taramalar ve tespitler payload bazlı zafiyetier (xss,sqli vb…) üzerine yoğunlaştığından API açıkları konusunda yetersiz kalıyor. Aslında OWASP Top 10 API Security Risks – 2023 listesinde de farkına varabileceğimiz gibi, maddelerin büyük bölümü yetkilendirme ve erişim kontrolü ile ilgili.

Listede 3 önemli madde yetkilendirme (authorization) kelimesini içeriyor.

  • API1:2023 - Broken Object Level Authorization
  • API3:2023 - Broken Object Property Level Authorization
  • API5:2023 - Broken Function Level Authorization

Bu açıkların hepsi bir aktörün sahip olmaması gereken bir yetkiyle ilgili. Bu yetki, direkt olarak bir nesneye, nesnenin bir özelliğine veya bir fonksiyona verilmiş olabilir. Sırasıyla örnek verelim.

  • Nesnenin ID’sini değiştirerek, başkasının nesnesine erişme
  • IsAdmin özelliğinin, admin olmayan bir kullanıcı tarafından, true olarak atanabilmesi
  • Sadece GET ile okuma hakkımız olan bir endpoint’in, POST kullanarak değiştirilebilmesi

Bu açığı sömüren bir saldırı olduğunda, önceden bir veri olmadan bir isteğin saldırı olduğunu belirlemek mümkün değil, çünkü bu tarz açıkların tespit edilmesi için normal şartlarda kullanılan yetkilendirme yapısını anlamış olmamız gerekir. WAF’ların yaklaşımları bu tarz açıkları tespit etmekte zorlanacaktır. Bu açıkların tespiti için detaylı bir davranış analizi mekanizması gerekir. Bunun için API davranış analizinde özelleşmiş ürünlere ihtiyaç duyuyoruz. Bu yüzden makalenin devamında, API güvenliğine odaklanmış bir platform olan Noname ürünü üzerinden incelemelerimizi yapacağız.

Akan Trafik Üzerinden Tespit

Günümüzde erişim sürelerinde milisaniyeler bile önemli olduğundan, inline olarak konumlandırılan bir cihazın trafikte bir dar boğaz yaratma ihtimalini göz önünde bulundurmak gerekir. Bu yüzden API güvenlik platform’ları genellikle akan trafiği, diğer ürünlerden ve makinelerden toplayarak out-of-band çalışabilirler.

alt text

Yukarıda Noname’e, k8s ve AWS üzerinden entegrasyon yapılıp trafik toplandığını görüyoruz. Bunun yanında Noname, birçok WAF, API Gateway veya direkt olarak makine üzerinden trafiği toplayabilir. Trafiği dinlemeye başlatıktan sonra, Noname her bir endpoint için öğrenme sürecini başlatır ve davranış analizi sürecini de başlatmış olur.

alt text

Öğrenme sürecinden sonra tespit edilen bir saldırıyı inceleyelim.

alt text

Noname normal trafik akışında, bu endpoint özelinde yarattığı baseline’da, her kullanıcının bir objeye eriştiğini tespit etti. Bu yüzden trafikteki sapmayı yakayabildi. Bu sapmanın miktarına göre, önceliklendirme yaparak, bulgunun kritikliğini de belirleyebilir. Şimdi saldırı isteklerini inceleyelim.

alt text

Saldırının parçası olan istekleri görüntüleyip, doğrulamasını yapabiliriz ve entegrasyonlar üzerinden bloklamasını sağlayabiliriz. API saldırıları tek bir istekten öte, bir süreç olduğu için paket bazlı bloklama burada etkili olmayacaktır. Bu yüzden Noname saldırıyı değil saldırganı bloklar.

Saldırganın bir çok özelliğinden bir kimlik çıkarır, örneğin kullandığı header’lar ve kullandığı token’lar gibi. Bu sayede, saldırganın IP değiştirmesi durumunda bile engelleme yapılabilir. Otomatik olarak yaratılan güvenilirlik (confidence) değeri sayesinde, sadece belli bir eşiğin üzerindeki saldırılar otomatik olarak bloklanabilir. Böylece false-positive bloklamalardan kaçınılmış olur.

Devam edecek …

Written by

Furkan Turan