Apache APISIX Härtung mit OWASP’s Coraza und Core Ruleset

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.

– OWASP Website

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.

ModSecurity auf Wikipedia

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® ModSecurity Core Rule Set Website

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:

  1. OWASP stellt eine Liste der Top 10 Web-Sicherheitslücken bereit.
  2. Es implementiert sie für ModSecurity über das Core Rule Set.
  3. 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:

Dockerfile

 

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. Variablen definieren für bessere Wartbarkeit
  2. Holen Sie sich die Coraza Wasm-Version.
  3. In neueren APISIX-Versionen ist der Benutzer apisix, um die Sicherheit zu verstärken. Da wir Pakete installieren müssen, müssen wir zu root wechseln.
  4. Installieren Sie unzip, da es nicht installiert ist, entpacken Sie die heruntergeladene Datei, entfernen Sie die Datei, deinstallieren Sie unzip und ändern Sie den Besitzer des extrahierten Ordners.
  5. 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.

YAML

 

wasm:
  plugins:
    - name: coraza-filter                                                   #1
      priority: 7999                                                        #2
      file: /usr/local/apisix/proxywasm/coraza-proxy-wasm.wasm              #3

  1. Name des Filters im Wasm-Code
  2. Setzen Sie die höchste Priorität, damit er vor jedem anderen Plugin ausgeführt wird.
  3. 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:

YAML

 

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. Konfigurieren Sie das coraza-filter Plugin, jetzt, da es verfügbar ist.
  2. Definieren Sie Konfigurationen. Hier definieren wir eine einzige, default, aber wir könnten mehrere definieren und unterschiedliche in verschiedenen Routen verwenden.
  3. Erhöhen Sie die Protokollierungsstufe, um zu sehen, was in den Protokollen passiert.
  4. Schalten Sie den Motor ein.
  5. Verwenden Sie die Coraza-Einstellung.
  6. Verwenden Sie alle Regeln. Wir könnten diejenigen auswählen, die wir wollen, für eine feinere Kontrolle.
  7. Verwenden Sie die oben definierte default-Konfiguration.

Wir definieren als Nächstes Routen, um unsere Einstellung zu testen. Nennen wir die Route zu /get:

Shell

 

curl localhost:9080?user=foobar

Die Antwort ist wie erwartet:

JSON

 

{
  "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.

Shell

 

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:

Plain Text

 

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