Piwik Security – Webanwendungen sicher analysieren

Heutzutage betreibt kaum jemand professionell Webanwendungen ohne zu messen, wie Benutzer die eigene Anwendung eigentlich verwenden. Dafür wird häufig auf kommerzielle Webanalyse-Tools von Anbietern wie Google, Etracker oder Econda zurückgegriffen. Das kostenlose Angebot Google Analytics ist dabei mit Abstand der Marktführer. Da man bei diesem Tool gewissermaßen mit den Daten seiner Nutzer bezahlt und sich in Abhängigkeit zu Google begibt, suchen viele Webseitenbetreiber nach Alternativen zu Google Analytics. Als einer der stärksten Konkurrenten von Google Analytics erfreut sich das quelloffene Webanalyse-Tool Piwik in den letzten Jahren immer größerer Beliebtheit. Was spricht für den Einsatz von Piwik und wie verhindert man durch den Einsatz von Piwik Hackern Angriffspotentiale zu bieten? Dieser Artikel und die zugehörige Security-Checkliste (pdf) sollen Ihnen beim sicheren Einsatz von Piwik helfen.

Drei gute Gründe Piwik einzusetzen

Der erste Vorteil im Vergleich zu den anderen großen Konkurrenten von Google Analytics ist der Preis der Software: sie wird kostenlos angeboten. Das Entwicklerteam hinter Piwik verfolgt mit Piwik Pro das Modell vieler anderer Open-Source-Projekte. Das Grundpaket zum eigenen Betrieb wird kostenlos angeboten und weiterentwickelt. Geld verdienen die Entwickler mit einer kostenpflichtigen Pro-Version und einem Hosting-Angebot. Für die meisten Einsatzfälle ist dabei die kostenlose Grundversion vollkommen ausreichend. Die Pro-Version richtet sich z.B. an Unternehmen, die die Verwendung ihres SharePoint-Intranets analysieren wollen. Der zweite große Vorteil von Piwik gegenüber den meisten Mitbewerbern ist, dass bei eigenem Hosting keine Daten an Dritte übertragen werden. Man hat daher auch eine geringere Gefahr gegen Datenschutzrichtlinien zu verstoßen. Das Unabhängige Landeszentrum für Datenschutz Schleswig-Holstein (ULD) gibt deshalb eine positive Einschätzung zu Piwik ab. Der dritte Grund für den Einsatz von Piwik ist schließlich in der IT-Sicherheit unabhängig von Dritten zu sein. Wird eine Webanalyse-Software extern betrieben, wäre man automatisch von einem Angriff auf den externen Dienstleister, z.B. indem Schadcode in dessen Software eingeschleust wird, mit betroffen.

Risiken beim Einsatz von Piwik

Welche Gefahren gilt es beim Einsatz von Piwik aus Sicht der IT-Sicherheit zu beachten? Dazu muss man zunächst betrachten, welches die zu schützenden Ziele sind, die im „Gefährdungsbereich“ von Piwik liegen.

  • Die Server-Infrastruktur, auf der Piwik installiert ist.
  • Die Webseiten, in denen Piwik eingebunden ist.
  • Die Daten, die mit Piwik gesammelt wurden.

Diese Auflistung gilt selbstverständlich über den Einsatz von Piwik hinaus für jeden anderen selbst betriebenen Webanalyse-Dienst. Man kann sich nun leicht die Gefahren ausmalen, die ein erfolgreicher Angriff haben könnte: Die Risiken reichen vom Ausliefern von bösartigem Code über die Webseite bis hin zum Zugriff auf vertrauliche Daten, die auf dem Server, auf dem Piwik installiert ist, gespeichert sind, bzw. darüber erreichbar sind.

Konkret gab es in der Vergangenheit bereits einen erfolgreichen Angriff auf den Piwik-Download-Server. Dabei haben Webmaster, die während des betroffenen Zeitraums Piwik neu heruntergeladen oder ein Update installiert haben, eine mit einem Schadcode erweiterte Variante von Piwik auf ihrem Server ausgeführt. Der Angriff konnte damals schnell behoben werden und es wurden einige Gegenmaßnahmen von Seiten des Piwik-Teams getroffen. Trotzdem ist das Thema Sicherheit beim Installieren und Updaten von Piwik noch immer aktuell, da zum Beispiel noch nicht alle Download-Wege rein über https funktionieren.

Ein weiterer neuralgischer Punkt von Piwik ist das Admin-Backend. Darüber kann man nicht nur die gesammelten Analysedaten betrachten, sondern auch selbstgeschriebene Plug-Ins hochladen. Dies ist natürlich auch für einen Angreifer, der Schadcode auf den von Piwik analysierten Webseiten unterbringen will, ein willkommenes Feature. Da es für den Admin-Bereich aktuell noch keinen Schutz vor Brute-Force-Angriffen (systematisches Erraten eines Passworts) von Seiten Piwiks gibt, gilt es diesen gesondert abzusichern.

Viele der beschriebenen Risiken bestehen selbstverständlich nicht nur für Piwik, sondern generell für jeden externen Dienst, egal ob er auf eigenen Servern läuft oder von Cloud-Anbietern bereitgestellt wird. Das erfreuliche ist aber, dass man mit ein bisschen Aufwand die Piwik-Webanalyse zu einem zufriedenstellenden Maße absichern kann.

Piwik in 9 Schritten absichern und härten

1. Piwik Downloads verifizieren

Wie oben beschrieben, gab es bei Piwik in der Vergangenheit bereits einen Vorfall, bei dem mit Schadcode infizierte Installationsdateien von der offiziellen Webseite bereitgestellt wurden. Sie sollten also nicht nur sicherstellen Piwik bei der erstmaligen Installation und bei Updates über https zu beziehen, sondern die heruntergeladenen Dateien auch zu verifizieren. Dazu benötigen Sie eine Installation von GnuPG und müssen die folgenden Schritte in Ihrem Terminal ausführen:

1. Herunterladen des öffentlichen PGP-Schlüssels des Piwik-Chefentwicklers Matthieu Aubry.

gpg --keyserver keys.gnupg.net --recv-keys 814E346FA01A20DBB04B6807B5DBD5925590A237

2. Überprüfen der Echtheit des Schlüssels.

gpg --fingerprint 814E346FA01A20DBB04B6807B5DBD5925590A237
Hierzu sollten Sie die folgende Ausgabe erhalten.
pub   4096R/5590A237 2013-07-24
  Schl.-Fingerabdruck = 814E 346F A01A 20DB B04B  6807 B5DB D592 5590 A237
uid       [  unbek.] Matthieu Aubry 
uid       [  unbek.] Matthieu Aubry 
uid       [  unbek.] Matthieu Aubry 
sub   4096R/43F0D330 2013-07-24

3. Herunterladen der zum Download passenden Signatur-Datei über https in dasselbe Verzeichnis und Überprüfen der Signatur. In unserem Beispiel ist die Installationsdatei piwik.tar.gz und die Signatur dazu piwik.tar.gz.asc.

gpg --verify piwik.tar.gz{.asc*,}
Die Ausgabe hierzu sollte dann wie folgt aussehen.
gpg: Signatur vom Do  4 Feb 07:10:29 2016 CET mittels RSA-Schlüssel ID 5590A237
gpg: Korrekte Signatur von "Matthieu Aubry " [unbekannt]
gpg:                     alias "Matthieu Aubry " [unbekannt]
gpg:                     alias "Matthieu Aubry " [unbekannt]

Gegebenenfalls enthält die Ausgabe noch eine Warnung, dass der Schlüssel keine vertrauenswürdige Signatur enthält, falls Sie den Schlüssel noch nicht als vertrauenswürdig gekennzeichnet haben.

2. Piwik aktuell halten

Updates enthalten häufig Patches zu gefunden Sicherheitslücken. Daher ist es wichtig, Piwik immer aktuell zu halten. Piwik informiert im Admin-Bereich über eine Infobox, sobald ein Update verfügbar ist. Außerdem kann man auch das Changelog oder die Mailing-Liste abonnieren, um über Updates benachrichtigt zu werden. Das Update kann dann über zwei verschiedenen Wege installiert werden. Als sichereren Weg empfehlen wir hierbei nicht das One-Click-Update sondern das manuelle Update von https://builds.piwik.org/piwik.tar.gz beziehungsweise, wenn Piwik auf einem Debian-System läuft, ein Update über die Paketverwaltung apt-get.

3. Piwik von anderen Diensten trennen

Damit eine Sicherheitslücke in Piwik keinen Einfluss auf andere Systeme hat, sollte Piwik möglichst getrennt von anderen Diensten laufen. Ideal wäre natürlich eine eigene physische oder virtuelle Maschine. Sollte dies nicht möglich sein, treffen Sie zumindest die folgenden zwei Vorkehrungen:

  • Einrichten eines eigenen Virtual Hosts für Piwik mit eigenem Web-Verzeichnis (DocumentRoot).
  • Anlegen eines separaten Benutzers und separater Datenbank für Piwik in MySQL.
4. Admin-Bereich absichern

Zum Tracken von Webseitenbesuchern müssen nur die Dateien piwik.js, piwik.php und die Optout-Funktion der index.php öffentlich zugänglich gemacht werden. Alle anderen Dateien sollten in der Konfiguration des Webservers für Zugriffe aus dem Internet gesperrt werden (zum Beispiel durch IP-basierte Zugriffsregeln oder Basic Authentication). Einen zusätzlichen Schutz erreichen Sie, wenn Sie darüber hinaus den Zugriff von außen auf die Dateien, die weder von den Webseitenbesuchern noch vom Admin-Bereich direkt verwendet werden, komplett sperren. Eine Beispielkonfiguration für einen Apache2-Server finden Sie unten. Weitere Lösungen existieren für ngnix-Server und Apache .htaccess-Dateien (letztere ist nur zu empfehlen, falls Sie keinen Zugriff auf die Konfigurationsdatei des Apaches haben, zum Beispiel bei der Installation von Piwik im Webspace eines Webhosters).

5. Piwik-Benutzer mit Leserechten einrichten

Der Admin-Benutzer sollte nur zum Konfigurieren und Updaten von Piwik sowie zum Einrichten von Benutzerkonten verwendet werden. Der alltägliche Zugriff auf die Webstatistiken sollte über ein Benutzerkonto ohne administrative Rechte erfolgen. Um neue Benutzer anzulegen, muss man im Konto des Administrators zuerst in den Administrationsbereich gehen (über das Zahnrad in der oberen rechten Ecke der Seite). Im Unterbereich „Benutzer“ kann man nun neue Benutzer ohne Administrator-Rechte hinzufügen.

Piwik-Benutzer hinzufügen
Hinzufügen eines neuen Benutzers
Piwik Benutzerrechte
Zuweisen von Leserechten an den neuen Benutzer
6. Starke Passwörter verwenden

Wie bei anderen Diensten auch, empfehlen wir den Einsatz von sicheren, einzigartigen Passwörtern, die zum Beispiel mit Hilfe von Passwortmanagementprogrammen wie Keepass erstellt und verwaltet werden können.

7. Datenverkehr verschlüsseln

Zur Sicherheit der Webseitenbenutzer und des Admin-Backends sollte Piwik inklusive der übertragenen Cookies nur über https zur Verfügung gestellt werden. Außerdem ist sicherzustellen, dass Authentifizierungscookies nicht von JavaScripts ausgelesen werden dürfen (secure-Flag und httpOnly im Set-Cookie-Header). Um dies zu erreichen darf zuerst der Webserver nur über https erreichbar sein. Als nächstes muss der folgende Eintrag im Abschnitt [General]in der config/config.ini.php Datei des Piwik-Verzeichnisses hinzugefügt werden:

[General]
force_ssl = 1
8. Piwik zusammen mit Security-Headers verwenden

Um die Sicherheit von Webanwendungen zu erhöhen ist es gute Praxis HTTP-Security-Headers zu verwenden. Beim Einsatz des Content-Security-Policy-Headers (CSP-Header) sollte man nicht den Standard-Tracking-Code verwenden. Statt den Code, der im Piwik-Backend zur Verfügung gestellt wird, inline in die Seite einzubauen, muss man den Code in einer JavaScript-Datei auf dem Sever speichern. Würde der Code inline in die Seite eingebaut werden, müsste der CSP-Header generell inline eingebundenes JavaScript erlauben. Damit könnte aber auch ein an anderer Stelle in die Webseite eingeschleuster JavaScript-Schadcode ausgeführt werden. Stattdessen sollte man über den CSP-Header „unsafe-inline“ verbieten und damit Cross-Site-Scripting-Angriffe (XSS) verhindern. Der in einer JavaScript-Datei gespeicherte Tracking-Code (im Beispiel piwik_loader.js) muss dann zusammen mit dem Zählpixel (für den Fall, dass der Webseitenbesucher JavaScript deaktiviert hat) folgendermaßen in die Seite eingebunden werden:

<script src="/piwik_loader.js"></script>
<noscript><img src="https://piwik.example.com/piwik.php?idsite=1" alt="" /></noscript>

Im CSP-Header muss dann die Policy folgendermaßen gesetzt werden (wenn Piwik im Beispiel unter https://piwik.example.com läuft):

Content-Security-Policy: default-src 'self'; script-src 'self' https://piwik.example.com; object-src 'none'; img-src 'self' https://piwik.example.com; 

Falls auf dem Piwik-Server der X-Frame-Options-Header verwendet wird, sind die nachfolgenden Einstellungen zu beachten. In unserer Apache2-Beispiel-Konfiguration zeigen wir, wie Security-Header für Apache2-Webserver gesetzt werden können. Um zu überprüfen, welche Header beim Aufruf einer Webseite vom Server gesendet werden, können Sie zum Beispiel die Firefox-Entwicklerwerkzeuge benutzen. Im Reiter „Netzwerkanalyse“ sehen Sie die in der HTTP-Antwortkopfzeile mitgesendeten Header und deren Werte. Der X-Frame-Options-Header verhindert genauso wie die „frame-ancestors“-Regel der Content-Security-Policy das sogenannte Clickjacking durch das Einbinden der eigenen Seite in andere Webseiten als iframe. Standardmäßig wird das Piwik-Optout per iframe in die eigene Seite eingebunden. Wenn Piwik und die analysierte Webseite auf dem selben Host laufen, muss der Header daher auf X-Frame-Options: sameorigin gesetzt werden. Wenn Piwik z.B. auf piwik.example.com läuft und in die Webseite example.com eingebunden ist, muss der Header auf X-Frame-Options: allow-from https://example.com lauten. Die restriktivste Möglichkeit ist schließlich X-Frame-Options: deny. Sie kann eingesetzt werden, wenn man statt der Einbindung des Optout-iframes den Optout innerhalb der eigenen Webanwendung realisiert, z.B. indem man selbst einen Optout-Cookie setzt und auf dessen Basis die Einbindung von Piwik steuert. Solch ein Piwik-Optout ohne iframe finden Sie zum Beispiel in der aramido Datenschutzerklärung.

9. Piwik SecurityInfo-Plug-in verwenden

Um zu überprüfen, ob die PHP-Einstellungen des Webservers sicher sind, kann schließlich noch das Plug-in SecurityInfo hilfreich sein, das verschiedene Checks durchführt und die Ergebnisse und Verbesserungsempfehlungen übersichtlich im Admin-Bereich darstellt.

SecurityInfo-Plug-In im Piwik-Marketplace
Piwik-Marketplace mit SecurityInfo-Plug-In
Ist Ihre Webanalyse sicher umgesetzt? Die Experten von aramido prüfen Ihre Webanwendung auf Schwachstellen.

Beispiel-Serverkonfiguration für Apache2

Im Folgenden zeigen wir ein Muster für die Konfiguration eines Apache2-Webservers (Version ≥ 2.4) für eine optimale Absicherung von Piwik.


# Die nachfolgenden Anweisungen sollten am besten innerhalb eines VirtualHosts Blocks erfolgen

#Die untenstehenden Regeln ersetzen die mit der Piwik-Installation mitgelieferte Apache-Konfiguration, die daher auskommentiert ist.
#Include /etc/piwik/apache.conf

#Zugriff zu allen Dateien verbieten, um anschließend einzelne freizugeben 
<FilesMatch ".*">
  Require all denied
</FilesMatch>

<FilesMatch "^(index\.php|)$">
  AuthType Basic
  AuthName "Piwik Admin"
  AuthUserFile /etc/apache2/passwd
  <RequireAny>
  #Zugang zum Admin-Bereich über Basic-Authentication. Alternativ könnten auch über „Require ip“ bestimmte IPs freigegeben werden
  Require valid-user
  # Die Optout-Action wird für alle Webseitenbesucher freigegeben
  Require expr %{QUERY_STRING} == "module=CoreAdminHome&action=optOut"
  </RequireAny>
</FilesMatch>

#Sonstige Dateien, auf die Webseitenbesucher zugreifen können müssen
<FilesMatch "^piwik\.(js|php)|robots\.txt">
  Require all granted
</FilesMatch>

#Dateien für den Admin-Bereich freigeben
<LocationMatch "^/(plugins|misc/user|libs)/.*$">
  AuthType Basic
  AuthName "Piwik Admin"
  AuthUserFile /etc/apache2/passwd
  Require valid-user
</LocationMatch>

#Das Hochladen von Dateien (z.B. Custom-Piwik-Plug-Ins) verbieten
<IfModule mod_php5.c>
  php_admin_flag file_uploads 0
</IfModule>

#HTTP-Security-Header
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
  Header always set X-Content-Type-Options "nosniff"		
  Header always set X-Frame-Options "deny"
  Header always set X-XSS-Protection "1; mode=block"
  Header always set X-Permitted-Cross-Domain-Policies "master-only"
</IfModule>

Im Rahmen der Apache-Konfiguration von Piwik ist noch anzumerken, dass der Einsatz des Apache Moduls mod_security zusammen mit Piwik anscheinend Schwierigkeiten bereitet.

Selbstverständlich können wir an dieser Stelle nicht auf alle möglichen Serverkonfigurationen und Umgebungen eingehen. Wenden Sie sich deshalb gerne an uns, wenn Sie Unterstützung beim Einrichten und Absichern Ihrer Webanalyse benötigen. Wir freuen uns von Ihnen zu hören.

Piwik Security Checkliste
Diese Infografik zum Absichern von Piwik darf gerne mit Link zu diesem Artikel geteilt werden.

PDF-Download der Checkliste zum Absichern von Piwik