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.
Raporda 2021'de şunlar belirtiliyor:
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 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.
Nnginx'i Apache APISIX yapılandırmasıyla yapılandırmak teorik olarak mümkün olsa da, daha basit bir yol daha var.
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 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.
Özetleyelim:
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
apisix
. Paketleri kurmamız gerektiğinden root
geçmeliyiz.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ştirinapisix
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
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
coraza-filter
eklentisini şimdi kullanıma sunulduğuna göre yapılandırındefault
, ancak birkaçını tanımlayıp farklı rotalarda farklı olanları kullanabiliriz.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ı!
Ç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ı