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.
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 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:
- OWASP, en iyi 10 web güvenlik açığının bir listesini sağlar
- Bunları Temel Kural Seti aracılığıyla ModSecurity için uygular
- 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
- Daha iyi sürdürülebilirlik için değişkenleri tanımlayın
- Coraza Wasm sürümünü edinin
- Son APISIX sürümlerinde, kullanıcı güvenliği güçlendirmek için
apisix
. Paketleri kurmamız gerektiğindenroot
geçmeliyiz. - 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 -
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
- Filtrenin adı Wasm kodunda ayarlandı
- En yüksek önceliği ayarlayın, böylece diğer eklentilerden önce çalışır
- Çı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
-
coraza-filter
eklentisini şimdi kullanıma sunulduğuna göre yapılandırın - 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. - Günlüklerde ne olduğunu görmek için günlük düzeyini artırın
- Motoru açın
- Coraza kurulumunu kullanın
- Tüm kuralları kullanın. Daha hassas kontrol için istediklerimizi seçip seçebiliriz
- 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:
- OWASP Güvenliği İlk 10
- OWASP ModSecurity Temel Kural Seti
- OWASP Coraza WAF
- APISIX - Coraza ile entegrasyon
Bu yazının kaynak kodunun tamamı GitHub'da bulunabilir.
İlk olarak 4 Şubat 2024'te A Java Geek'te yayınlandı