Der Open Worldwide Application Security Project (OWASP) ist eine Online-Community, die kostenlose und frei verfügbare Artikel, Methoden, Dokumentation, Werkzeuge und Technologien im Bereich der IoT-, Systemsoftware- und Webanwendungssicherheit erstellt. Die OWASP bietet kostenlose und offene Ressourcen an. Sie wird von einer Non-Profit-Organisation namens The OWASP Foundation geleitet. Die OWASP Top 10 – 2021 ist das veröffentlichte Ergebnis von jüngster Forschung, die auf umfassenden Daten aus mehr als 40 Partnerorganisationen basiert.
Die OWASP veröffentlicht regelmäßig einen Top-10-Report über Sicherheitslücken. Der Bericht richtet sich an Schwachstellen in Webanwendungen.
In diesem Beitrag möchte ich beschreiben, wie man einige dieser Schwachstellen über die Apache APISIX API Gateway behebt.
Die OWASP Top 10 2021
Im Jahr 2021 erwähnt der Bericht:
- A01:2021 – Nicht funktionierende Zugriffssteuerung
- A02:2021 – Kryptografische Fehler
- A03:2021 – Einschleusung
- A04:2021 – Unsicher
- A05:2021 – Sicherheitsfehlkonfiguration
- A06:2021 – Anfällige und veraltete Komponenten
- A07:2021 – Identifizierungs- und Authentifizierungsfehler
- A08:2021 – Software- und Datenintegritätsfehler
- A09:2021 – Sicherheitsprotokollierung und Überwachungsfehler
- A10:2021 – Server-Side Request Forgery
Für weitere Details lesen Sie bitte den vollständigen Bericht.
Die Behebung einer Sicherheitslücke hängt von ihrer genauen Natur ab. Zum Beispiel erfordert die Behebung von Vulnerable and Outdated Components einen prozessgesteuerten Ansatz, der Disziplin bei der Verwaltung von Versionen und dem Ausmusterung älterer Komponenten erfordert. Einige Lücken sind jedoch technischer Natur und erfordern nur eine korrekte Konfiguration im Reverse-Proxy oder API Gateway, wie zum Beispiel bei Server Side Request Forgery.
Niemand kümmert sich um Sicherheit
Sicherheit ist ein heikles Thema, da eine Verschärfung der Sicherheit keinen Mehrwert für das Geschäft bringt. Karriereorientierte Manager kümmern sich nicht um Sicherheit, da sie bei ihrer nächsten jährlichen Bewertung nicht zeigen können, dass sie den Gewinn des Unternehmens um X% gesteigert haben. Es sei denn, das Board nimmt die Sicherheit ernst, besteht die Chance, dass niemand sich darum kümmert. Aus diesem Grund setzen die meisten Organisationen checkbox-basierte Sicherheitsmaßnahmen um, auch bekannt als „plausibler Denkbarkeit“. Wenn Sie an einer ordnungsgemäßen Umsetzung der Sicherheit interessiert sind, habe ich in einem früheren Blogbeitrag einige Gedanken veröffentlicht: „Sichereheit als Risiko betrachten.“
Insgesamt wird der Schutz von Anwendungen nicht viel Budget erhalten, wenn überhaupt. Daher müssen wir schlau vorgehen und nach einer vorhandenen Komponente suchen. Glücklicherweise bietet die OWASP eine aus-der-Box-Konfiguration zur Behandlung der Top 10 an, die über eine Konfiguration namens Core Rule Set behoben werden kann. Leider richtet es sich an ModSecurity:
ModSecurity, auch bekannt als Modsec, ist eine quelloffene Web Application Firewall (WAF). Ursprünglich als Modul für den Apache HTTP Server entwickelt, hat es sich zu einer Reihe von Hypertext Transfer Protocol-Anfrage- und Antwortfilterungskapazitäten sowie anderen Sicherheitsfunktionen auf verschiedenen Plattformen entwickelt, einschließlich Apache HTTP Server, Microsoft IIS und Nginx. Es ist freie Software, die unter der Apache-Lizenz 2.0 veröffentlicht ist.
Obwohl es theoretisch möglich ist, Nginx über die Apache APISIX-Konfiguration zu konfigurieren, gibt es einen anderen direkteren Weg.
Das OWASP Core Ruleset und Coraza
Die Beschreibung des Core Rulesets ist ziemlich relevant für unsere Bedürfnisse:
Das OWASP® ModSecurity Core Rule Set (CRS) ist eine Sammlung von generischen Angriffserkennungsregeln für die Verwendung mit ModSecurity oder kompatiblen Web Application Firewalls. Das CRS zielt darauf ab, Webanwendungen gegen eine breite Palette von Angriffen, einschließlich der OWASP Top Ten, mit einem Minimum an falsch-positiven Alarms zu schützen. Das CRS bietet Schutz vor vielen gängigen Angriffsarten, einschließlich:
- SQL-Injection (SQLi)
- Cross Site Scripting (XSS)
- Lokale Datei-Inklusion (LFI)
- Remotefile-Inklusion (RFI)
- PHP-Code-Injection
- Java-Code-Injection
- HTTPoxy
- Shellshock
- Unix/Windows Shell-Injection
- Session-Fixation
- Skripting/Scanner/Bot-Erkennung
- Metadaten/Fehlerlecks
OWASP bietet auch Coraza, eine ModSecurity-Portierung als Go-Bibliothek. Coraza Proxy Wasm basiert auf Coraza und implementiert die proxy-wasm ABI, die eine Reihe von Wasm-Schnittstellen für Proxys spezifiziert. Schließlich bietet Apache APISIX eine Integration für proxy-wasm.
Alles zusammenfügen
Fassen wir zusammen:
- OWASP stellt eine Liste der Top 10 Web-Sicherheitslücken bereit.
- Es implementiert sie für ModSecurity über das Core Rule Set.
- Coraza ist eine ModSecurity-Portierung, verfügbar als proxy-wasm-Implementierung.
Wir können Apache APISIX auf diese Weise mit sicheren und sicheren Standardeinstellungen konfigurieren. Machen wir das.
Zuallererst gehört Coraza nicht zur Apache APISIX-Distribution. Dennoch ist es einfach, es hier mit Docker hinzuzufügen:
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
- Variablen definieren für bessere Wartbarkeit
- Holen Sie sich die Coraza Wasm-Version.
- In neueren APISIX-Versionen ist der Benutzer
apisix
, um die Sicherheit zu verstärken. Da wir Pakete installieren müssen, müssen wir zuroot
wechseln. - Installieren Sie
unzip
, da es nicht installiert ist, entpacken Sie die heruntergeladene Datei, entfernen Sie die Datei, deinstallieren Sieunzip
und ändern Sie den Besitzer des extrahierten Ordners. - Wechseln Sie zurück zum Benutzer
apisix
.
Der nächste Schritt besteht darin, APISIX selbst so zu konfigurieren, dass es das Coraza Wasm-Plugin verwendet.
wasm:
plugins:
- name: coraza-filter #1
priority: 7999 #2
file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm #3
- Name des Filters im Wasm-Code
- Setzen Sie die höchste Priorität, damit er vor jedem anderen Plugin ausgeführt wird.
- Pfad zum extrahierten Datei (siehe das
Dockerfile
oben)
Schließlich können wir das Plugin Routen zuweisen oder es als globale Regel festlegen, um es auf jede Route anzuwenden. Ich verwende statische Konfiguration:
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
- Konfigurieren Sie das
coraza-filter
Plugin, jetzt, da es verfügbar ist. - Definieren Sie Konfigurationen. Hier definieren wir eine einzige,
default
, aber wir könnten mehrere definieren und unterschiedliche in verschiedenen Routen verwenden. - Erhöhen Sie die Protokollierungsstufe, um zu sehen, was in den Protokollen passiert.
- Schalten Sie den Motor ein.
- Verwenden Sie die Coraza-Einstellung.
- Verwenden Sie alle Regeln. Wir könnten diejenigen auswählen, die wir wollen, für eine feinere Kontrolle.
- Verwenden Sie die oben definierte
default
-Konfiguration.
Wir definieren als Nächstes Routen, um unsere Einstellung zu testen. Nennen wir die Route zu /get
:
curl localhost:9080?user=foobar
Die Antwort ist wie erwartet:
{
"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"
}
Versuchen wir nun, JavaScript in der Abfragezeichenfolge zu senden. Es gibt keine Möglichkeit, dass dieser Anfrage serverseitig erwartet wird, also sollte unser Infrastruktur uns davor schützen.
curl 'localhost:9080?user=<script>alert(1)</script>'
Die Antwort ist ein 403 HTTP-Statuscode. Wenn wir uns die Protokolle ansehen, können wir folgende Hinweise sehen:
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 hat den Job gemacht!
Schlussfolgerung
Die meisten Organisationen schaffen keine Anreize für die Sicherheit. Daher müssen wir klug darüber sein und so weit wie möglich bestehende Komponenten nutzen.
Wir können Apache APISIX gegen die OWASP Top 10 durch die Verwendung von Coraza und dem Core Ruleset absichern.
Weitergehen
Der vollständige Quellcode für diesen Beitrag ist auf GitHub zu finden.
Source:
https://dzone.com/articles/hardening-apache-apisix-with-the-owasps-coraza-and