paint-brush
Apache APISIX API Ağ Geçidi ile Web Güvenlik Açıkları Nasıl Giderilir?ile@nfrankel
302 okumalar
302 okumalar

Apache APISIX API Ağ Geçidi ile Web Güvenlik Açıkları Nasıl Giderilir?

ile Nicolas Fränkel9m2024/02/10
Read on Terminal Reader

Çok uzun; Okumak

Coraza ve Core Ruleset'i kullanarak Apache APISIX'i OWASP Top 10'a göre güçlendirebiliriz.
featured image - Apache APISIX API Ağ Geçidi ile Web Güvenlik Açıkları Nasıl Giderilir?
Nicolas Fränkel HackerNoon profile picture


Dünya Çapında Açık Uygulama Güvenliği Projesi, IoT, sistem yazılımı ve web uygulaması güvenliği alanlarında ücretsiz olarak kullanılabilen makaleler, metodolojiler, belgeler, araçlar ve teknolojiler üreten çevrimiçi bir topluluktur. OWASP ücretsiz ve açık kaynaklar sağlar. OWASP Vakfı adlı kar amacı gütmeyen bir kuruluş tarafından yönetilmektedir. OWASP Top 10 - 2021, 40'tan fazla ortak kuruluştan derlenen kapsamlı verilere dayanan son araştırmaların yayınlanmış sonucudur.

--OWASP'ın web sitesi


OWASP düzenli olarak En İyi 10 güvenlik açığı raporunu yayınlamaktadır. Rapor, web uygulamalarındaki güvenlik açıklarını hedef alıyor.


Bu yazıda bunlardan bazılarını Apache APISIX API Gateway aracılığıyla nasıl düzeltebileceğimi anlatmak istiyorum.

OWASP En İyi 10 2021

Raporda 2021'de şunlar belirtiliyor:


  • A01:2021-Bozuk Erişim Kontrolü
  • A02:2021-Kriptografik Hatalar
  • A03:2021-Enjeksiyon
  • A04:2021-Güvensiz
  • A05:2021-Güvenlik Yanlış Yapılandırması
  • A06:2021-Hassas ve Eski Bileşenler
  • A07:2021-Tanımlama ve Kimlik Doğrulama Hataları
  • A08:2021-Yazılım ve Veri Bütünlüğü Arızaları
  • A09:2021-Güvenlik Loglama ve İzleme Arızaları
  • A10:2021-Sunucu Tarafında İstek Sahteciliği


Daha fazla ayrıntı için lütfen raporun tamamını kontrol edin.


Bir güvenlik açığının düzeltilmesi, onun kesin niteliğine bağlıdır. Örneğin, Savunmasız ve Güncel Olmayan Bileşenlerin düzeltilmesi süreç odaklıdır ve sürümlerin yönetilmesi ve eskilerinin kullanımdan kaldırılması konusunda disiplin gerektirir. Ancak bazıları tekniktir ve yalnızca ters proxy veya API Ağ Geçidinde uygun konfigürasyon gerektirir; örneğin Sunucu Tarafı İstek Sahteciliği .

Güvenlik kimsenin umurunda değil

Güvenlik hassas bir konudur çünkü güvenliğin güçlendirilmesi işletmeye herhangi bir değer getirmez. Kariyer odaklı yöneticiler, bir sonraki yıllık değerlendirmelerinde şirketin kârını %X artırdıklarını gösteremeyecekleri için güvenliği önemsemeyecekler. Yönetim kurulu güvenliği ciddiye almadığı sürece kimsenin umursamaması muhtemeldir. Bu nedenle çoğu kuruluş, onay kutusu tabanlı güvenlik, diğer bir deyişle makul inkar edilebilirlik uygular. Güvenliği düzgün bir şekilde uygulamakla ilgileniyorsanız, önceki bir blog gönderisinde bazı düşüncelerimi yazmıştım: Güvenliği bir risk olarak değerlendirin .


Sonuç olarak, başvuruları güvence altına almak için çok fazla bütçe sağlanmayacaktır. Bu nedenle bu konuda akıllı olmalı ve mevcut bir bileşeni aramalıyız. Neyse ki OWASP, İlk 10'u işlemek için kullanıma hazır bir yapılandırma sunuyor ve bu, Temel Kural Seti adlı bir yapılandırma aracılığıyla düzeltilebiliyor. Maalesef ModSecurity'i hedef alıyor:


Bazen Modsec olarak da adlandırılan ModSecurity, açık kaynaklı bir web uygulaması güvenlik duvarıdır (WAF). Başlangıçta Apache HTTP Sunucusu için bir modül olarak tasarlanan bu modül, Apache HTTP Sunucusu, Microsoft IIS ve Nginx dahil olmak üzere bir dizi farklı platformda diğer güvenlik özelliklerinin yanı sıra bir dizi Köprü Metni Aktarım Protokolü istek ve yanıt filtreleme yeteneği sağlayacak şekilde geliştirildi. Apache lisansı 2.0 altında yayımlanan ücretsiz bir yazılımdır.

-- Wikipedia'da ModSecurity


Nnginx'i Apache APISIX yapılandırmasıyla yapılandırmak teorik olarak mümkün olsa da, daha basit bir yol daha var.

OWASP Temel Kural Seti ve Coraza

Temel Kural Kümesinin açıklaması ihtiyaçlarımızla oldukça alakalı:


OWASP® ModSecurity Temel Kural Seti (CRS), ModSecurity veya uyumlu web uygulaması güvenlik duvarlarıyla kullanıma yönelik bir dizi genel saldırı algılama kuralıdır. CRS, web uygulamalarını OWASP İlk On da dahil olmak üzere çok çeşitli saldırılara karşı minimum yanlış uyarıyla korumayı amaçlamaktadır. CRS, aşağıdakiler de dahil olmak üzere birçok yaygın saldırı kategorisine karşı koruma sağlar:

  • SQL Enjeksiyonu (SQLi)
  • Siteler Arası Komut Dosyası Çalıştırma (XSS)
  • Yerel Dosya Ekleme (LFI)
  • Uzaktan Dosya Ekleme (RFI)
  • PHP Kod Enjeksiyonu
  • Java Kod Enjeksiyonu
  • HTTPoksi
  • Kabuk şoku
  • Unix/Windows Kabuk Enjeksiyonu
  • Oturum Sabitleme
  • Komut Dosyası/Tarayıcı/Bot Algılama
  • Meta Veri/Hata Sızıntıları

-- OWASP® ModSecurity Temel Kural Seti web sitesi


OWASP ayrıca Go kütüphanesi olarak ModSecurity'nin bir portu olan Coraza'yı da sağlar. Coraza Proxy Wasm, Coraza'nın üzerine inşa edilmiştir ve proxy'ler için bir dizi Wasm arabirimini belirten proxy-wasm ABI'yi uygular. Son olarak Apache APISIX proxy-wasm entegrasyonu sunar.

Hepsini bir araya koy

Özetleyelim:


  1. OWASP, en iyi 10 web güvenlik açığının bir listesini sağlar
  2. Bunları Temel Kural Seti aracılığıyla ModSecurity için uygular
  3. Coraza, proxy-wasm uygulaması olarak kullanılabilen bir ModSecurity limanıdır


Apache APISIX'i bu şekilde makul ve güvenli varsayılanlarla yapılandırabiliriz. Hadi yapalım.

İlk olarak: Coraza, Apache APISIX dağıtımının bir parçası değil. Yine de Docker ile buraya eklemek çok kolay:


 FROM apache/apisix:3.8.0-debian ENV VERSION 0.5.0 #1 ENV CORAZA_FILENAME coraza-proxy-wasm-${VERSION}.zip #1 ADD https://github.com/corazawaf/coraza-proxy-wasm/releases/download/$VERSION/$CORAZA_FILENAME . #2 USER root #3 RUN <<EOF apt-get install zip -y #4 unzip $CORAZA_FILENAME -d /usr/local/apisix/proxywasm rm $CORAZA_FILENAME apt-get remove zip -y chown -R apisix:apisix /usr/local/apisix/proxywasm EOF USER apisix #5
  1. Daha iyi sürdürülebilirlik için değişkenleri tanımlayın
  2. Coraza Wasm sürümünü edinin
  3. Son APISIX sürümlerinde, kullanıcı güvenliği güçlendirmek için apisix . Paketleri kurmamız gerektiğinden root geçmeliyiz.
  4. Yüklü olmadığı için unzip yükleyin, indirilen arşivi açın, arşivi kaldırın, unzip kaldırın ve çıkartılan klasörün sahibini değiştirin
  5. apisix kullanıcısına geri dön


Bir sonraki adım APISIX'in kendisini Coraza Wasm eklentisini kullanacak şekilde yapılandırmaktır.


 wasm: plugins: - name: coraza-filter #1 priority: 7999 #2 file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
  1. Filtrenin adı Wasm kodunda ayarlandı
  2. En yüksek önceliği ayarlayın, böylece diğer eklentilerden önce çalışır
  3. Çıkarılan dosyanın yolu, yukarıdaki Dockerfile bakın


Son olarak eklentiyi rotalara atayabilir veya her rotaya uygulanacak global bir kural olarak ayarlayabiliriz. Statik yapılandırma kullanıyorum:


 global_rules: - id: 1 plugins: coraza-filter: #1 conf: directives_map: #2 default: - SecDebugLogLevel 9 #3 - SecRuleEngine On #4 - Include @crs-setup-conf #5 - Include @owasp_crs/*.conf #6 default_directives: default #7
  1. coraza-filter eklentisini şimdi kullanıma sunulduğuna göre yapılandırın
  2. Yapılandırmaları tanımlayın. Burada tek bir tane tanımladık, default , ancak birkaçını tanımlayıp farklı rotalarda farklı olanları kullanabiliriz.
  3. Günlüklerde ne olduğunu görmek için günlük düzeyini artırın
  4. Motoru açın
  5. Coraza kurulumunu kullanın
  6. Tüm kuralları kullanın. Daha hassas kontrol için istediklerimizi seçip seçebiliriz
  7. Yukarıda tanımlanan default yapılandırmayı kullanın


Kurulumumuzu test etmek için https://httpbin.org/ adresine rota tanımlamaya devam ediyoruz. Rotayı /get çağıralım:


 curl localhost:9080?user=foobar


Yanıt beklendiği gibi:


 { "args": { "user": "foobar" }, "headers": { "Accept": "*/*", "Host": "localhost", "User-Agent": "curl/8.4.0", "X-Amzn-Trace-Id": "Root=1-65b9fa13-75900dc029e156ec764ae204", "X-Forwarded-Host": "localhost" }, "origin": "192.168.65.1, 176.153.7.175", "url": "http://localhost/get?user=foobar" }


Şimdi sorgu dizesinde JavaScript göndermeyi deneyelim. Bu isteğin sunucu tarafında beklenmesi mümkün değildir, dolayısıyla altyapımız bizi bundan korumalıdır.


 curl 'localhost:9080?user=<script>alert(1)</script>'


Yanıt bir 403 HTTP durum kodudur. Günlüğe bakarsak aşağıdaki ipuçlarını görebiliriz:


 Coraza: Warning. XSS Attack Detected via libinjection [file "@owasp_crs/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] Coraza: Warning. NoScript XSS InjectionChecker: HTML Injection Coraza: Warning. Javascript method detected Coraza: Access denied (phase 1). Inbound Anomaly Score Exceeded in phase 1


Coraza işi yaptı!

Çözüm

Çoğu kuruluş güvenliği teşvik etmez. Bu nedenle bu konuda akıllı olmamız ve mevcut bileşenleri mümkün olduğunca kullanmamız gerekiyor.


Coraza ve Core Ruleset'i kullanarak Apache APISIX'i OWASP Top 10'a göre güçlendirebiliriz.


Daha ileri gitmek için:



Bu yazının kaynak kodunun tamamı GitHub'da bulunabilir.


İlk olarak 4 Şubat 2024'te A Java Geek'te yayınlandı