Bir Web Güvenlik Tarayıcısıyla RESTful Web Servislerindeki Açıkları Bulma

Ferruh Mavituna - 14 Şubat 2017 -

Bu makale Netsparker web güvenlik tarayıcısının nasıl otomatik olarak RESTful web servislerinde tarama yaptığını ve zafiyet tespiti gerçekleştirdiğini açıklamaktadır.

Bir Web Güvenlik Tarayıcısıyla RESTful Web Servislerindeki Açıkları Bulma

REST API nedir?

REST (Representational State Transfer), web servisleriyle bağlantı kurmak için kullanılabilen bir mimaridir. REST, SOAP gibi protokollerle pek çok yönü bakımından ortak noktalara sahiptir. İki uygulama arasında ya da bir uygulama ile çevrim içi bir servis arasında, bağlantı mekanizması olarak kullanılır. Aslında pek çok mobil uygulama, çevrim içi servislere bağlanabilmek için backend tarafında bir RESTful API vasıtasıyla iletişim kurar.

Yazımızda şu konulara değineceğiz:

Bir web hizmetiyle REST API arasındaki farklar nelerdir?
REST API arayüzlerini otomatik olarak taramayla alakalı sorunlar
Bir REST API'yi Netsparker Desktop ile tarama

Bir Web Hizmetiyle REST API Arasındaki Farklar Nelerdir?

SOAP, RPC ve CORBA gibi birçok web servisi kompleks bağlantı mekanizmalarına dayanmaktadır. REST ise tüm CRUD (Create / Read / Update / Delete) işlemleri için standart HTTP metotlarını kullanır.

REST API’de Yaygın Olarak Kullanılan HTTP Metotları (Eylemleri)

  • POST - Bir kaynağı oluşturma
  • GET - Bir kaynağı getirme
  • PUT - Bir kaynağın durumunu değiştirme veya güncelleme
  • DELETE - Bir kaynağı kaldırma ya da silme

REST API Arayüzlerini Taramayla Alakalı Sorunlar

RPC ve diğerlerinden farklı olarak REST, basit yapısından dolayı anlaşılırdır ve insanlar tarafından kullanılabilir. Örneğin, REST tabanlı birçok web hizmeti, CSV, JSON ya da XML formatında bir yanıt sağlayabilir. Fakat bu fayda aynı zamanda, otomatikleştirilmiş bir web güvenlik tarayıcısının crawl etmesi ve saldırı yapmasını zorlaştırmaktadır.

REST Standartlarının Eksikliği

Doğrusunu söylemek gerekirse makalenin yazıldığı şu sıralarda WSDL ve diğer benzer protokoller için standartlar mevcutken REST API için halihazırda bir standart bulunmuyor. Şu aşamada RESTful web servislerinin çoğu, insanlar tarafından okunabilen fakat otomatik web zafiyet tarayıcıları açısından bir değeri olmayan kendi benzersiz dokümantasyonlarına sahipler.

REST API’yi standartlaştırmaya dair birkaç proje şu an yürütülmekte. Bu projelerin en ünlülerinden ikisi Swagger ve WADL (Web Application Description Language) projeleridir.

URL’lerdeki Parametreleri Kullanma

Otomatik tarayıcılar hakkındaki bir diğer sorun ise RESTful web servislerinde otomatik zafiyet taraması yapılırken REST API’lerin URL’lerdeki parametreleri kullanmasıdır. Örneğin şunun gibi bir HTTP GET isteğindeki 123, web uygulamasında bulunan bir dizin değil parametredir:

GET http://www.example.com/rest-api/products/123/

Bu durum, web uygulamalarını tararken sorun olabilmektedir. Fakat Netsparker web uygulaması güvenlik tarayıcısı, URL’lerdeki parametreleri tespit eden ve bunları tarayan bir heuristic (keşifsel) URL Rewrite teknolojisine sahiptir. Yine de bir REST API’nin mevcut olduğu durumlarda biraz farklı çalışır.

Bir RESTful Web Servisinde Zafiyet Taraması Nasıl Yapılır?

Bir RESTful API’yi taramak için hem Netsparker Desktop hem de Invicti Enterprise’da kullanabileceğiniz üç farklı metot mevcuttur:

  • Bir Swagger ya da WADL tanım dosyasını elle import edebilirsiniz,
  • Netsparker, crawling esnasında otomatik olarak RESTful API’yi tespit edebilir ve tarayabilir,
  • Manuel olarak RAW (ham) HTTP istekleri ekleyebilirsiniz.

Aşağıda, her metodun nasıl çalıştığına dair izahat yapılmıştır.

Bir Swagger ya da WADL Tanım Dosyasını Elle İmport Etme

Bir Swagger ya da WADL tanım dosyası import edilirken Netsparker web güvenlik tarayıcısı, tanım dosyasını parse edecek ve API’daki kullanılabilir olan tüm kaynaklar için bir link oluşturacaktır. Bir Swagger ya da WADL tanım dosyası eklemek için:

  • Start a New Website or Web Service Scan penceresindeki Imported Links kısmına gelin,
  • Import From File açılır menüsüne tıklayıp uygun dosya türünü seçin ve bilgisayarınızdaki söz konusu dosyayı ekleyin.

Netsparker, linkleri ve parametreleri ekledikten sonra bunları Imported Links listesinde görebilirsiniz. Aşağıdaki ekran görüntüsünde örneği mevcuttur:

Bir RESTful Web Servisinden Eklenen Linkler

Web güvenlik tarayıcısı, ekleme işlemi esnasında RESTful API’deki tüm parametreleri tarama amacıyla otomatik olarak URL Rewrite kuralları oluşturacaktır. Aşağıda, Netsparker’da otomatik bir biçimde oluşturulan URL Rewrite kuralları gösterilmiştir:

Bir RESTful Web Servisi Taraması İçin Yapılandırılan URL Rewrite Kuralları

Not: Invicti Enterprise’da bir RESTful web servisi tanım dosyası eklerken URL Rewrite kuralları Start a New Scan penceresinde gösterilmez. Fakat taramanın sonlanmasının ardından Knowledge Base kısmında raporlanmış halde bulunur.

Kimlik Doğrulama ve RESTful Web Servisleri

Diğer web uygulamaları ve servislerini tararken yapılan işlemler bunda da geçerlidir. Kimlik doğrulama ile alakalı yapılandırmalar, tarama sırasında Authentication kısmından yapılabilir.

Crawl Esnasında RESTful API’nin Otomatik Olarak Tespiti

Netsparker web uygulaması güvenlik tarayıcısı, bir web sitesine yapılan güvenlik taraması sırasında tespit edilmesi gereken REST web servisini otomatik olarak ekleyecek, crawl edecek ve tarayacaktır. Netsparker, tanım dosyasını belirledikten sonra URL Rewrite kuralları otomatik biçimde oluşturulacak. Böylelikle web hizmetinde bulunan tüm parametreler taranmış olabilecek.

Netsparker, crawl işleminde bir RESTful API servisi bulduğunda bunu, ayrıca Knowledge Base bölümünde de raporlayacaktır. Aşağıdaki resimde gösterilmiştir:

Netsparker Desktop, RESTful Web Servislerini Tespit Eder ve Bunları Knowledge Base'de Listeler

Aşağıdaki ekran görüntüsünde ise Invicti Enterprise’da bir RESTful servisinin tespitine dair rapor sergilenmektedir:

Netsparker Cloud Bir REST Web Servisi Tespit Etti

Not: Netsparker, crawl sırasında bir RESTful API web servisine ilişkin atıfları bir JavaScript yoluyla veya başka yollarla tespit etmesi gerekse de tanım dosyasını bulmakta başarısız olur. Tüm gerekli örneklere sahip olduğunda tüm parametreleri taramak için URL Rewrite kurallarını heuristic (keşifsel) olarak oluşturmayı deneyecektir.

RAW (Ham) HTTP İsteklerini Manuel Olarak Ekleme

Swagger ya da WADL tanım dosyalarının kullanılamaz olduğu veya bir web uygulamasının crawl edilirken RESTful API’nin tespit edilemediği durumlarda, API’lere ait linkleri RAW HTTP dosyaları vasıtasıyla ekleyebilirsiniz.

Fiddler gibi üçüncü parti bir proxy aracını kullanarak HTTP isteklerini yakalayabilir ve bunları, tarama işlemi başlamadan önce ekleyebilirsiniz. Desteklenen proxy dosyaları aşağıda listelenmiştir:

  • Fiddler session archives (*.saz - Fiddler oturum arşivleri)
  • Burp log files (*.xml - Burp kayıt dosyaları)
  • Parog log files (*.txt - Parog kayıt dosyaları)
  • HTTP archive files (*.har - HTTP arşiv dosyaları)

Bu yöntemi kullandığınızda URL Rewrite kurallarının otomatik olarak oluşturulmayacağını unutmamalısınız. Dolayısıyla tarayıcının tüm parametreleri bulmasını sağlamak için bu kuralları kendiniz yapılandırmalısınız.

Ferruh Mavituna

About the Author

Ferruh Mavituna

Ferruh Mavituna is the founder and CEO of Invicti Security, a world leader in web application vulnerability scanning. His professional obsessions lie in web application security research, automated vulnerability detection, and exploitation features. He has authored several web security research papers and tools and delivers animated appearances at cybersecurity conferences and on podcasts. Exuberant at the possibilities open to organizations by the deployment of automation, Ferruh is keen to demonstrate what can be achieved in combination with Invicti’s award-winning products, Netsparker and Acunetix.