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