How To: Sichern von Splunk mit TLS/SSL

Eric Jahnke & Arne Stichweh  /  19.09.22  /  IT Security

 

Das verbreitetste Verschlüsselungsverfahren im Web ist Transport Layer Security (TLS), welches Secure Sockets Layer (SSL) ablöste, aber oft nach wie vor SSL genannt wird. Splunk nutzt per default an einigen Stellen TLS – im Wesentlichen in der Kommunikation über den Management Port 8089. Das betrifft unter anderem Cluster Management oder Deployment Server-Client Interaktion. Sämtliche Server-Kommunikation, die den KV-Store betrifft, ist ebenfalls standardmäßig verschlüsselt.

Da Sicherheitsüberlegungen in der Informationstechnik eine zentrale Rolle spielen, wird von Splunk nach Best Practice empfohlen, diese Standardeinstellungen individuell anzupassen. Diese Anpassungen beinhalten auch, dass weitere Verbindungen, wie zum Beispiel die zwischen Usern (Browser) und Splunk Web oder zwischen Forwardern und Indexern, gesichert werden.

Dieser Artikel zeigt das Vorgehen, mit dem Splunk in seinen Grundzügen mit eigenen oder Drittanbieter-Zertifikaten gesichert wird.

Prinzip von TLS

Das Prinzip von TLS beruht grundsätzlich auf Vertrauen. Wenn zwei Entitäten in einem Netzwerk über das TLS-Protokoll kommunizieren, muss Vertrauen in die angebotenen Schlüssel bestehen. Vertrauen wird durch die sogenannte Root Certificate Authority (Root CA) hergestellt. Diese hat den Zweck, die Echtheit und Korrektheit der beteiligten Schlüssel zu gewährleisten.

An eine Root CA wird ein signing request mit einem generierten Private Key gestellt. Die Root CA stellt daraufhin einen Public Key aus, der durch die Signatur der Root CA vertrauenswürdig wird.

prinzip-tlsWie im Bild zu sehen, sendet Eric eine Nachricht an Arne. Mithilfe seines eigenen Private Key und dem Public Key von Arne verschlüsselt Eric die Nachricht. Diese kann nun nur von Arne durch seinen Private Key entschlüsselt und gelesen werden.

Die Zeichnung zeigt nur die grundlegende Funktionsweise einer Private-Public-Key-Verschlüsselung. Heutzutage wird dieses Grundprinzip durch weitere Schritte ergänzt, die die Entschlüsselung beinahe unmöglich machen.

Die Details sind an dieser Stelle von nachgeordneter Bedeutung. Prinzipiell ist die Notwendigkeit von Root CA, Public und Private Key der entscheidende Punkt.

Präparieren des Zertifikats für Splunk

Unabhängig von der Art wie das TLS-Zertifikat erworben oder generiert wurde, die drei oben genannten Komponenten Root CA, Public Key und Private Key müssen vorhanden sein. Um für Splunk nutzbar zu sein, müssen die Komponenten in reiner Textform vorliegen.

Sie werden nacheinander, in fester Reihenfolge, in einer PEM-Datei (privacy enhanced Mail) zusammengefügt. Die Reihenfolge ist wie folgt: Public Key, Private Key und Root CA.

Diese wird dann in einen Ordner gelegt, auf den später referenziert wird. Beispielsweise:

$SPLUNK_HOME/etc/auth/mycerts/combined.pem

Splunk Web mit TLS sichern

Sämtliche Server, die Splunk Web nutzen, also in der Regel alle außer den Forwardern und Indexern, sollten Splunk Web mit TLS sichern. Hier wird für jeden Server, basierend auf den Grundlagen von oben, der Public Key, Private Key und die Root CA in einer PEM-Datei gespeichert (referenziert in serverCert) .

Private Keys sind in der Regel mit einem Password geschützt. Im Fall der Sicherung des Splunk Web muss der Private Key zusätzlich unverschlüsselt in der entsprechenden Config hinterlegt werden (referenziert in privKeyPath).

Die zu editierende Datei ist die web.conf, welche unter $SPLUNK_HOME/etc/system/local entweder schon existiert oder erstellt wird. Die Erweiterung .key bedeutet nicht, dass ein anderes Dateiformat verwendet wird, sie wird nur häufig zur Unterscheidung des Private Key genutzt. 

#web.conf
[settings]
enableSplunkWebSSL = true
privKeyPath = /opt/splunk/etc/auth/mycerts/mySplunkWebPrivateKey.key
serverCert = /opt/splunk/etc/auth/mycerts/MySplunkWebCombinedCert.pem

Wurden oben genannte Änderungen umgesetzt, treten diese nach einem Neustart in Kraft.

TLS für Forwarding konfigurieren

Während Hauptzweck der Splunk-Web-Verschlüsselung die gesicherte Browser-Kommunikation ist, sichert TLS im Forwarding die Daten, welche zu den Indexern gesendet werden.

Zu diesem Zweck wird das kombinierte Zertifikat erstellt (referenziert in serverCert) und zusätzlich die Root CA explizit in der Config angegeben. Diese sollte analog zum kombinierten Zertifikat in reiner Textform im selben Ordner abgelegt werden. Das Passwort zur Entschlüsselung des Private Key wird zusammen mit den anderen benötigten Einstellungen in der inputs.conf hinterlegt. Nach einem Neustart von Splunk wird das Passwort verschlüsselt in der Config angezeigt.

#inputs.conf
[splunktcp-ssl:9997]
disabled=0
[SSL]
serverCert = /opt/splunk/etc/auth/mycerts/myCombinedServerCert.pem
sslPassword = myCertificatePassword

Zusätzlich wird sowohl auf dem Indexer als auch auf den Forwardern in der server.conf ein Verweis auf die oben genannte Root CA hinterlegt (sslRootCAPath).

#server.conf
[sslConfig]
sslRootCAPath = /opt/splunk/etc/auth/mycerts/myCACertificate.pem

Um ein sicheres Senden von Logdaten zu gewährleisten, müssen ebenfalls auf den Forwardern Änderungen vorgenommen werden:

#outputs.conf
[tcpout:group1]
server= <IP des Indexers>:9997
disabled = 0
clientCert = /opt/splunk/etc/auth/mycerts/myCombinedClientCert.pem
useClientSSLCompression = true
sslPassword = myCertificatePassword

Natürlich nutzen die Forwarder eigene Public und Private Keys!

Mit diesen Einstellungen ist der Datenverkehr zwischen Forwarder und Indexer verschlüsselt. Wie üblich ist ein Neustart erforderlich.

TLS für interne Splunkkommunikation

Die interne Kommunikation ist in den Standardeinstellungen bereits verschlüsselt, jedoch kann es notwendig sein von den Standardzertifikaten, die Splunk zu diesem Zweck nutzt, abzuweichen, um beispielsweise Firmenstandards bezüglich der verwendeten Certificate Authority zu erfüllen.

#server.conf
[
sslConfig]
enableSplunkdSSL = true
serverCert = $SPLUNK_HOME/etc/auth/splunkweb/MyCombinedServerCert.pem
sslRootCAPath = /opt/splunk/etc/auth/mycerts/myCACertificate.pem
sslPassword = myCertificatePassword

Zusätzlich zu den bereits oben gesetzten Einstellungen in der server.conf bezüglich des Root CA, wird ebenfalls explizit das kombinierte Zertifikat (serverCert) und das Passwort für den Private Key (sslPassword) gesetzt.

Mit diesen Einstellungen ist dafür gesorgt, dass ein eigenes Zertifikat angewendet wird.

Einfachheitshalber werden verschiedene zusätzliche Optionen, wie beispielsweise mutual TLS (mTLS) oder Common Name Checking, in diesem Artikel nicht behandelt. Und auch diese sind nur zwei von vielen weiteren Möglichkeiten, die eigene Splunkumgebung noch sicherer zu gestalten.