Güvenli API Oluşturmak için En İyi Uygulamalar

Rakesh Talanki ve Vidheer Gadikota tarafından

API (uygulama programlama arayüzü) tasarımcıları ve geliştiricileri genellikle bir arayüz uygularken tasarım ilkelerine bağlı kalmanın önemini anlarlar. Hiç kimse kötü bir API tasarlamak veya uygulamak istemez!

Buna rağmen, bazen bu agresif sprint zaman çizelgelerine ulaşmak, bitiş çizgisine ulaşmak ve bir API dağıtmak için kısayollar aramak cazip geliyor. Bu kısayollar, güvenli olmayan güvenli bir API'ler oluşturabilir.

Geliştiriciler dağıtmadan önce bir API korsanının şapkasını takmayı hatırlamalıdır. Bir geliştirici, bir API'deki güvenlik açıklarını tanımlamayı ihmal ederse, API, kötü niyetli faaliyetler için açık bir ağ geçidi olabilir.

API Güvenlik Açıklarını Belirleme ve Çözme

Bir API, sağlayıcısının API kullanıcılarının gereksinimlerini ne kadar iyi anladığı ve uyguladığına bağlı olarak sağlayıcısı için veya aleyhinde çalışabilir. Bir şirket inanılmaz derecede güvenli bir API oluşturursa, kullanımı çok zor olabilir. Bir API'nin amacı ile tüketim kolaylığı arasında iyi bir denge kurulmalıdır. Bu makalede, bu güvenlik açıklarının nasıl önlenebileceği de dahil olmak üzere, Google’ın Apigee ekibinin bir parçası olarak yaptığımız işlerle karşılaştığımız bazı API güvenlik açıklarını inceleyeceğiz.

Enjeksiyonlar

API'ler, işletmelerin dünyayla dijital olarak bağlantı kurması için açılan kapılardır. Ne yazık ki, API'lerin kullanımına sunulan isteğe bağlı verileri düşürmek, silmek, güncellemek ve hatta oluşturmak için istenmeyen komutlar veya ifadeler enjekte ederek işletmelerin arka uç sistemlerine erişmeyi amaçlayan kötü niyetli kullanıcılar var.

Örneğin Ekim 2014’te Drupal, saldırganların veritabanlarına, kodlarına ve dosya dizinlerine erişmelerini sağlayan bir SQL ekleme güvenlik açığı olduğunu açıkladı. Saldırı o kadar şiddetliydi ki, saldırganlar tüm verileri müşterilerin sitelerinden kopyalamış olabilir. Birçok enjeksiyon tehdidi türü vardır, ancak en yaygın olanları SQL Injection, RegEx Injection ve XML Injection'dır. Bir kereden fazla, API'lerin tehdit koruması olmadan yayına girdiğini görüyoruz - nadir değil.

Kimlik doğrulama olmadan API'ler

Kimlik doğrulama yoluyla kötü amaçlı tehditlere karşı koruma olmadan oluşturulan bir API, bir kuruluşun veritabanlarını tehdit edebilecek bir API tasarım hatasını temsil eder. Doğru kimlik doğrulamasını dikkate almamak - taşıma katmanı şifrelemesi (TLS) kullanılsa bile - sorunlara neden olabilir. Bir API isteğindeki geçerli bir cep telefonu numarasıyla, örneğin, herhangi bir kişi kişisel e-posta adreslerini ve cihaz tanımlama verilerini alabilir. Bu nedenle, TLS ile birlikte OAuth / OpenID Connect gibi endüstri standardı güçlü kimlik doğrulama ve yetkilendirme mekanizmaları kritik öneme sahiptir.

Açıktaki hassas veriler

Normalde, operasyon ekipleri ve diğer iç ekipler, hata ayıklama sorunları için izleme araçlarına erişebilir ve bu da API yük bilgileri hakkında net bir görüş sağlayabilir. İdeal olarak, PCI kart sahibi verileri (CHD) ve Kişisel Sağlık verileri (PHI), verilerin her zaman olduğu durumda olmasa da, verilerin tüketildiği yere kadar yakalandığı noktadan şifrelenir.

API güvenliği konusunda artan endişelerle, hassas ve gizli verilerin şifrelenmesi öncelikli olmak zorundadır. Örneğin, Haziran 2016'da, saldırganlara giden isteği, tercih edilen bir sunucuya proxy olarak bildirmek, istekten hassas bilgileri yakalamak ve iç veriler hakkında istihbarat kazandırmak için birden fazla yol sağlayan bir http proxy güvenlik açığı açıklandı. TLS kullanmanın ötesinde, API verilerinin hassas verileri şifreleyerek, izleme / günlüğe kaydetme için veri maskesi uygulayarak ve kart bilgileri için tokenizasyon kullanarak korunması önemlidir.

Replay atakları

Kurumsal mimarlar için büyük bir potansiyel endişe sözde "işlem tekrarı" dır. Halka açık olan API'ler gelen isteklere güvenip güvenmeyeceğinin çözülmesinin zorluğuyla karşı karşıyadır. Çoğu durumda, güvenilmeyen bir istek yapılsa ve reddedilse bile, API, potansiyel olarak kötü niyetli kullanıcının tekrar denemesine ve denemesine izin verebilir.

Saldırganlar, meşru bir kullanıcı isteğini (bazı durumlarda kaba kuvvet teknikleri kullanarak) başarılı olana kadar oynatmaya veya tekrarlamaya çalışarak bu yanlış yönlendirilmiş güvenden yararlanır. 2016 yılında, bilgisayar korsanları, diğer çevrimiçi hizmetlerden gelen e-posta adreslerini ve şifreleri yeniden kullanarak ve Github hesaplarında deneyerek, bir saldırı saldırısı yoluyla Github hesaplarına girdi.

Karşı önlemler arasında, kısıtlama taleplerine oran sınırlayıcı politikalar, API istek trafiğini analiz etmek için Apigee Sense gibi gelişmiş araçların kullanımı ve istenmeyen bot isteklerini temsil eden kalıpların tanımlanması dahildir. Stymie tekrar saldırıları için ek güvenlik önlemleri şunlardır:

  • İşlemin geçerliliğini belirli bir zaman dilimine sınırlamak için zaman damgaları içeren HMAC
  • iki faktörlü kimlik doğrulama
  • OAuth kullanarak kısa ömürlü bir erişim belirtecini etkinleştirme

API kullanımında beklenmeyen artışlar

Bir API kullanımını tahmin etmek her zaman zordur. İyi bir örnek, Ulusal Hava Durumu Hizmeti API'sini kısaca ortaya koyan uygulama. Bu belirli API herhangi bir trafik dalgalanmasını önleme veya azaltma mekanizmasına sahip değildi, bu nedenle trafikte beklenmeyen artış doğrudan arka uca çarptı.

En iyi uygulama, başak trafikte veya uygulama başına kullanım kotasında tutuklama yapılmasıdır; böylece arka uç etkilenmez. Bu, kota ve başak tutuklama gibi politikalara sahip sofistike bir API yönetim platformunun yardımı ile kolayca sağlanabilir.

URI'daki Anahtarlar

Bazı kullanım durumlarında, kimlik doğrulama ve yetkilendirme için API anahtarlarının uygulanması yeterlidir. Ancak, anahtarı Tekdüzen Kaynak Tanımlayıcısı'nın (URI) bir parçası olarak göndermek, anahtarın ele geçirilmesine neden olabilir. IETF RFC 6819'da açıklandığı gibi, URI ayrıntıları tarayıcıda veya sistem günlüklerinde görünebileceği için, başka bir kullanıcı, URI'leri tarayıcı geçmişinden görüntüleyebilir; bu da API URI'lerinde API anahtarlarını, şifreleri ve hassas tarihi kolayca erişilebilir hale getirir.

API anahtarlarını göndermek daha güvenlidir ve ağ elemanları tarafından kaydedilmemiş olan mesaj yetkilendirme başlığındadır. Genel bir kural olarak, HTTP POST yönteminin taşıma yüküne duyarlı bilgileri içeren kullanımı önerilir.

Yığın izleme

Pek çok API geliştiricisi, tüm başarılı talepler için 200, tüm hatalar için 404, bazı dahili sunucu hataları için 500 ve bazı aşırı durumlarda, 200'ü ayrıntılı bir yığın izlemesinin üstünde, vücutta bir hata mesajı ile kullanmakta rahatlar. Bir yığın izi, paket tasarımları, sınıf adları, çerçeve adları, sürümleri, sunucu adları ve SQL sorguları şeklinde temel tasarım veya mimari uygulamaları ortaya çıkardığında, potansiyel olarak kötü niyetli bir kullanıcıya sızan bir bilgi olabilir.

Saldırganlar, bu Cisco örneğinde açıklandığı gibi hazırlanmış URL istekleri göndererek bu bilgilerden yararlanabilir. Hata koşulları sırasında gerekli minimum hata mesajlarını ve "yığın izlemesi" olmadan doğru HTTP durum koduyla "dengeli" bir hata nesnesi döndürmek iyi bir uygulamadır. Bu, hata işlemeyi iyileştirir ve API uygulama ayrıntılarını bir saldırgandan korur. API ağ geçidi, arka uç hata mesajlarını standart mesajlara dönüştürmek için kullanılabilir, böylece tüm hata mesajları benzer görünür; Bu aynı zamanda arka uç kod yapısını ortaya çıkarır.

API’leri Güvende Tut

Bu makalede incelediğimiz gibi, bazı düşünceleri API tasarımına dahil ederek ve kurum genelinde uygulanabilecek yönetişim politikaları oluşturarak birçok potansiyel tehditten kaçınılabilir. Çalışma zamanında hassas şifreli verilere erişip bunları maskeleyerek ve arka uç servislerini doğrudan erişime karşı koruyarak API'lerin kötü amaçlı mesaj içeriğine karşı korunması önemlidir. Bir API güvenlik hatasının önemli sonuçları olabilir - ancak öngörü ve yönetimin doğru olması sayesinde işletmeler kendilerini daha güvenli hale getirebilir.

[API güvenliği hakkında daha fazla bilgi edinmek mi istiyorsunuz? API Ürün Zihniyetinde: Güvenli API'leri Oluşturma ve Yönetme.