Sicherheit

Diese Seite beschreibt integrierte Sicherheitsfunktionen des Business Process Centers sowie Maßnahmen, die für den sicheren produktiven Einsatz empfohlen werden.

Empfohlene Systemarchitektur

Für den sicheren Einsatz des BPC wird eine Kombination von verschiedenen Maßnahmen empfohlen.

Achten Sie darauf, dass eine Transportverschlüsselung (siehe TLS / HTTPS) zum Einsatz kommt. Außerdem sollten Sie ein Reverse Proxy und eine Web Application Firewall vor dem BPC einrichten.

Darstellung der empfohlenen Architektur
Abbildung 1. Darstellung der empfohlenen Architektur

TLS / HTTPS

Es wird empfohlen, für das BPC eine Sichere Verbindung (TLS/HTTPS) zu konfigurieren. Somit wird eine verschlüsselte Übertragung im Netzwerk sichergestellt.

Ist dies umgesetzt, sollten Sie außerdem sichere Cookies aktivieren.

Reverse Proxy

Der Einsatz eines Reverse Proxy wird dringend empfohlen. Dieser sorgt dafür, dass das BPC auf Netzwerkebene abgeschottet und nur gezielt Netzwerkverkehr weitergeleitet wird. Ein Reverse Proxy kann zusätzliche Veränderungen am Netzwerkverkehr vornehmen und bietet weitere Funktionen, wie z.B. Caching.

Das BPC verwendet Websockets (unter /websocket). Dies erfordert je nach eingesetzter Software zusätzliche Einstellungen.

NGINX

NGINX ist ein sehr häufig eingesetzter Webserver/Reverse Proxy.

Die folgende Konfiguration kann genutzt werden, um das BPC unter dem Pfad HOSTNAME/bpc zur Verfügung zu stellen.

Beispielkonfiguration NGINX
server {
    server_name HOSTNAME;

    listen 80 default_server;
    listen [::]:80 default_server;

    # TODO TLS configuration

    keepalive_timeout 300s;
    client_max_body_size 2048m;
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;
    fastcgi_read_timeout 300s;

    location /bpc/ {
        # needed for websockets
        proxy_set_header Upgrade "websocket";
        proxy_set_header Connection "Upgrade";

        proxy_set_header X-Real_IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

        proxy_read_timeout  36000s;

        # This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;
        proxy_redirect off;

        proxy_pass http://127.0.0.1:8181/;
    }
}

Diese Konfiguration dient nur als einfaches Beispiel.

In der Regel muss die Konfiguration an Ihre Gegebenheiten angepasst werden. Es besteht kein Anspruch auf Vollständigkeit oder Fehlerfreiheit.

HAProxy

Der HAProxy ist ebenfalls eine etablierte Option.

Beispielkonfiguration HAProxy
global
    log /dev/log local0
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    user haproxy
    group haproxy
    daemon
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
    ssl-default-bind-ciphers HIGH:!aNULL:!MD5

defaults
    log global
    option httplog
    timeout connect 300s
    timeout client  300s
    timeout server  300s

frontend bpc_frontend
    bind :80
    bind :443 tfo ssl crt /etc/haproxy/certs/ alpn h2,http/1.1
    mode http
    http-request redirect scheme https unless { ssl_fc }
    http-request set-header Host %[req.hdr(Host)]
    http-request set-header X-Real-IP %[src]
    http-request set-header X-Forwarded-For %[src]
    http-request set-header X-Forwarded-Proto https
    default_backend bpc_backend

backend bpc_backend
    mode http
    server bpc1 127.0.0.1:8181 check

Diese Konfiguration dient nur als einfaches Beispiel.

In der Regel muss die Konfiguration an Ihre Gegebenheiten angepasst werden. Es besteht kein Anspruch auf Vollständigkeit oder Fehlerfreiheit.

Web Application Firewall

Mit einer Web Application Firewall kann der Netzwerkverkehr gescannt und gefiltert werden. Dabei können typische Angriffe erkannt und abgewehrt werden.

Für den Client-Zugriff (User mittels Webbrowser) sollten Sie eine Allowlist mit folgenden Werten aufsetzen:

SERVER/*.* (z.B: /index.html /index.jsp /app.js)
SERVER/cxf/** -> (z.B. /cxf/bpc-core/configuration)
SERVER/resources/**
SERVER/bpc-fe-*/**
SERVER/bpc-theme-*/**
SERVER/websocket

Häufig wird hierfür ModSecurity verwendet.

Datenbank-Verbindungen

Für Verbindungen zu relationen Datenbanken (Datenbanken und Backend Connection vom Typ data_source) wird in den meisten Fällen nur eine lesende Verbindung benötigt. Um Sicherheitsproblemen vorzubeugen, empfiehlt es sich nach dem Least Privilege Prinzip einen Datenbankbenutzer zu verwenden, der nur Leserecht hat.

Weitere Maßnahmen zur Erhöhung des Sicherheitsniveaus

Im Folgenden werden im BPC integrierte Sicherheitsmaßnahmen beschrieben.

Cross-Site-Request-Forgery

Im BPC wird versucht, CSRF-Angriffe abzuwehren. Wenn Sie eigene Module nutzen oder externe Anwendungen über das BPC einbinden, müssen Sie evtl. Anpassungen vornehmen, damit Sie durch den Schutzmechanismus selbst eingeschränkt werden.
Siehe dazu CSRF Abwehr

Bei Backend Connections vom Typ http_proxy ist es möglich, den CSRF Check abzuschalten.

User-Session IP Pinning

Um zu verhindern, dass eine User-Session "geklaut" wird, merkt sich das BPC beim Login die IP des Benutzers (Session Fixation). Diese Information wird bei jedem folgenden Aufruf mit der IP-Adresse des Aufrufs abgeglichen. Weicht die IP-Adresse des Aufrufs von der aus der User-Session ab, so wird der Aufruf abgelehnt.

Damit diese Funktion greift, muss beim Einsatz von Proxies der HTTP Header X-Forwarded-For korrekt gesetzt werden. Dies gilt auch für den Websocket.

Content Security Policy

Über HTTP Header wird eine Content Security Policy (CSP) definiert. Diese wird vom Browser umgesetzt und führt dazu, dass z.B. Ressourcen wie Bilder und Skript-Dateien nicht von unbekannten Quellen geladen werden.

Es kann nötig sein, die CSP an ihre Bedürfnisse anzupassen. Dafür muss die Einstellung des Headers, wie auf der Seite HTTP Header beschrieben, geändert werden.

HTML Sanitizing

Im Frontend wird der von den Modulen erzeugte HTML-Code automatisch bereinigt. Dabei werden JavaScript und ungültige Elemente entfernt, um Scripting-Attacken vorzubeugen. Sollten Ihre Module inline JavaScript benötigen, so können Sie dies über die Einstellung sanitzeHTML am jeweiligen Modul abschalten.

Wenn die Bereinigung Elemente aus dem HTML entfernt, so wird dies in der Browser-Konsole geloggt. Um diese Logs sehen zu können, müssen Sie das Log-Level unter Umständen auf debug/verbose einstellen.


Keywords: