Kasper-Spy
Kaspersky-Virenschutz gefährdet Privatsphäre der Nutzer
Sicherheit und Datenschutz verspricht Kaspersky den Nutzern seiner Antiviren-Software. Durch ein Datenleck konnten Dritte die Nutzer allerdings jahrelang beim Surfen ausspionieren – sogar im Inkognito-Modus des Browsers.
Für unseren großen Test von Antiviren-Software in c’t 3/2019 installierte ich den Virenschutz von Kaspersky auf meinem Arbeitsrechner, um am eigenen Leib zu erfahren, welchen Mehrwert die Schutzprogramme der großen Antiviren-Hersteller noch im Alltag bieten.
Die darauffolgenden Wochen und Monate waren wenig aufregend – die Kaspersky-Software funktionierte im Wesentlichen genauso gut oder schlecht wie der Windows Defender. Eines Tages machte ich jedoch eine sonderbare Entdeckung. Ich ließ mir den HTML-Quelltext einer x-beliebigen Webseite anzeigen und stieß auf die folgende Zeile Code:
<script type="text/javascript"
src="https://gc.kis.v2.scr.kaspersky-
labs.com/9344FDA7-AFDF-4BA0-A915-
4D7EEB9A6615/main.js" charset="UTF-
8"></script>
Offensichtlich wurde hier ein externes JavaScript-Skript namens main.js von einer Kaspersky-Domain nachgeladen. Das ist nicht ungewöhnlich, schließlich kommt heutzutage kaum noch eine Website ohne externe JavaScript-Ressourcen aus.
Ungewöhnlich wurde es erst, als ich mir den HTML-Text weiterer Websites anzeigen ließ: Den rätselhaften Code fand ich ausnahmslos auf jeder Site – sogar auf der Seite meiner Hausbank. Mir schwante, dass die Kaspersky-Software etwas damit zu tun haben muss.
Ich beschloss, der Sache auf den Grund zu gehen und wiederholte das Experiment mit Firefox, Edge und Opera. Auch hier stieß ich überall auf den Code. Da keine verdächtigen Browser-Erweiterungen installiert waren, die für diesen Effekt verantwortlich sein konnten, ließen meine Versuche nur einen Schluss zu: Der Kaspersky-Virenschutz manipulierte ungefragt meinen Datenverkehr und schleuste den Code ein. Bisher kannte ich dieses Verhalten nur von Online-Banking-Trojanern, die auf diese Weise Bankenseiten manipulieren, um etwa das Überweisungsziel zu ändern. Doch wozu macht Kaspersky das? Um diese Frage zu klären, untersuchte ich das eingeschleuste Skript main.js. Anscheinend ist es unter anderem dafür zuständig, grüne Schutzschilde hinter Google-Suchtreffern einzublenden, wenn ein Link nach Einschätzung von Kaspersky sauber ist. Damit könnte meine Analyse zu Ende sein, doch ein kleines Detail ließ mir noch keine Ruhe.
In der Adresse, von der das Kaspersky-Skript geladen wurde, steckt nämlich eine verdächtige Zeichenfolge: https://gc.kis.v2.scr.kaspersky-labs.com/9344FDA7-AFDF-4BA0-A915-4D7EEB9A6615/main.js
Der fett markierte Abschnitt ist nach einem charakteristischen Muster zusammengesetzt. Der Aufbau passt zu einer sogenannten UUID – das steht für Universally Unique Identifier. Solche IDs nutzt man, um Dinge eindeutig identifizierbar zu machen. Doch wen oder was kann man über die Kaspersky-ID identifizieren?
Ich weitete mein Experiment aus und installierte die Kaspersky-Software auf weiteren Rechnern. Auch auf den anderen Systemen schleuste Kaspersky das JavaScript ein. Ich entdeckte jedoch einen entscheidenden Unterschied: Die UUID in der Quelladresse war auf jedem System eine andere. Die IDs waren persistent und änderten sich auch nach mehreren Tagen nicht. Damit war klar, dass sich eine ID dauerhaft einem bestimmten Rechner zuordnen lässt.
Die verdächtige ID
Irritiert hat mich auch der Ort, an dem ich auf die ID stieß: Die Kaspersky-Software schleuste sie direkt in den HTML-Code der Websites ein. Und das ist eine schlechte Idee, weil andere Skripte, die im Kontext der Website-Domain laufen, jederzeit auf den HTML-Code zugreifen können – und somit auch auf die eingeschleuste Kaspersky-ID.
Das bedeutet im Klartext, dass jede beliebige Website die Kaspersky-ID des Nutzers einfach so auslesen und zum Tracking missbrauchen kann. Wenn diese Vermutung stimmt, dann hat Kaspersky eine gefährliche Tracking-Möglichkeit geschaffen, die jedes Cookie alt aussehen lässt: In diesem Fall können Websites die Kaspersky-Nutzer über Browsergrenzen hinweg verfolgen. Doch damit nicht genug: Das Super-Tracking kann dann sogar den Inkognito-Modus des Browsers überwinden und führt diesen somit ad absurdum.
Doch konnte ein Unternehmen, das sich seit über zwanzig Jahren der Sicherheit und Privatsphäre seiner Kunden verschrieben hat, so ein offensichtliches Problem übersehen haben? Ich beschloss, die Probe aufs Exempel zu machen. Eine halbe Stunde später hatte ich eine einfache Webseite gebastelt, welche die Kaspersky-ID der Besucher automatisch auslesen und speichern sollte.
Und sie funktionierte auf Anhieb. Nachdem ich die IDs einiger Testrechner eingesammelt hatte, hinterlegte ich im Code meiner Demoseite auch noch die Namen der Kollegen, denen die Rechner gehörten. Von da an konnte ich sie sogar persönlich begrüßen, wenn sie die Seite öffneten – ganz gleich, welchen Browser sie nutzten und wie oft sie die Cookies gelöscht hatten. Auch der Inkognito-Modus bot keinen Schutz vor dem Tracking. Spätestens jetzt war mir klar, dass ich auf ein ernstes Problem gestoßen war.
Kontaktaufnahme
Um niemanden unnötig in Gefahr zu bringen, informierte ich zunächst Kaspersky über meine Erkenntnisse. Die deutsche Forschungsabteilung des Unternehmens antwortete kurz darauf, dass man sich die Sache ansehen werde. Rund zwei Wochen später hatte dann auch das Hauptquartier im russischen Moskau den Fall analysiert. Das von mir entdeckte Problem sei real und betreffe sämtliche Consumer-Versionen der Kaspersky-Software für Windows – von der Gratis-Version über Kaspersky Internet Security bis hin zu Total Security. Auch in Small Office Security für kleine Unternehmen klaffte die Lücke. Etliche Millionen Nutzer waren demnach einem Datenschutzrisiko ausgesetzt.
Meine Rückfragen ergaben, dass das Leck schon seit den 2016er Versionen besteht, die im Herbst 2015 erschienen sind. Wer ebenfalls auf das Datenleck aufmerksam wurde, konnte es also fast vier Jahre ausnutzen. Nach Einschätzung des Herstellers ist „solch eine Attacke zu komplex und nicht profitabel genug für Cyberkriminelle“, es sei daher unwahrscheinlich, dass die Lücke bereits missbraucht wurde. Ich sehe das jedoch anders: Wenn ich es schaffe, in kürzester Zeit eine Webseite zu basteln, welche die ID ausliest und speichert, warum sollte es dann im Laufe von vier Jahren nicht auch anderen gelungen sein? Es gibt bekanntlich einen Haufen Unternehmen, die darauf spezialisiert sind, Webseitenbesucher so detailliert wie möglich auszuspionieren.
Die Katze ist aus dem Sack
Da Kaspersky anscheinend den Ernst der Lage erkannt hatte und mir einen Patch in Aussicht stellte, wartete ich ab. Seit Juni wird der „Patch F“ tatsächlich verteilt und im Juli veröffentlichte der Hersteller einen Sicherheitshinweis (Advisory), in dem Problem und Lösung beschrieben sind. Ich habe Kaspersky gebeten, der Schwachstelle eine sogenannte CVE-Nummer zuzuweisen, also eine weltweit gültige Identifikationsnummer für Sicherheitslücken. Seitdem hat das Kind auch einen Namen, es heißt CVE-2019-8286. Durch das Kaspersky-Advisory und die CVE-Eintragung sind auch die Sicherheitsbehörden auf das Problem aufmerksam geworden. Dadurch hat etwa das CERT-Bund des Bundesamts für Sicherheit für Informationstechnik (BSI) vor dem Informationsleck gewarnt.
Nachdem Kaspersky den Patch verteilt hatte, ließ ich es mir nicht nehmen, meine Experimente zu wiederholen. Die Software schleust immer noch eine ID ein – nur ist diese jetzt bei allen Nutzern identisch: FD126C42-EBFA-4E12-B309-BB3FDD723AC1. Eine Website kann dadurch nicht länger einzelne Nutzer wiedererkennen. Es ist jedoch weiterhin möglich, herauszufinden, ob ein Besucher die Kaspersky-Software auf seinem System installiert hat und wie alt diese ungefähr ist. Ein Angreifer kann diese Information nutzen, um einen auf die Schutzsoftware zugeschnittenen Schädling zu verteilen oder auf eine passende Scam-Seite umzuleiten – frei nach dem Motto: „Ihre Kaspersky-Lizenz ist abgelaufen. Bitte geben Sie Ihre Kreditkartennummer ein, um das Abo zu verlängern“. Ich habe auch dieses Problem wieder an Kaspersky gemeldet.
Wer auf Nummer sicher gehen will, kann die verantwortliche Funktion in der Kaspersky-Software deaktivieren. Sie finden den Ausschalter, indem Sie im Hauptfenster unten links auf das Zahnradsymbol klicken und dann auf Erweitert/Netzwerk. Deaktivieren Sie anschließend unter „Verarbeitung des Datenverkehrs“ die Option „Skript für die Interaktion mit Webseiten in den Datenverkehr einbinden“. (rei@ct.de)
Kaspersky-Advisory:ct.de/y1gx