Lauschangriff per Default

Im Zuge meiner täglichen Arbeit bin ich auf einen einfachen Zusammenhang, ein Zusammenspiel zwischen Programmierung für Windows und dem Ausführen eines Scripts auf einem Webserver, gestoßen, der uns sehr nachdenklich machen sollte ... .

 

Click-Once und Visual Studio sind eine feine Sache. Click-Once generiert ein automatisches Update für meine Software. Man kann eine fertige Software so veröffentlichen, dass sie in einem Internetverzeichnis automatisch nachschaut, ob eine neue Version existiert. Das Setup-Programm wird dann automatisch gestartet. Meine Kunden können so automatisch Updates beziehen. Ich beginne die Nutzung dieses automatischen Updates diese Woche bei meinem Dienstplan-Tool.

 

Es stellt sich jedoch die Frage – wie erhalte ich ein Feedback über eine abgeschlossene Installation auf Userseite? Ich möchte schlicht wissen, ob der User die Neuerungen und Korrekturen jetzt nutzen kann. Es gäbe dafür eine Möglichkeit, die Updatefunktionalität innerhalb der Anwendung zu verfeinern. Das erfordert dann auch wieder ein Fehlermanagement und eine Struktur zur Datenübertragung. Ich wollte das einfacher haben und stieß dabei auf die Grundkonzepte von Lauschangriffen. Was ich jetzt erkläre, sollte jeden alarmieren - es ist so einfach, wichtige Informationen auszuspähen.

 

Die Idee ist simpel. Sobald mein Programm startet, ermittelt es die aktuelle Programmversion. Endet das Programm, vergleicht es die Programmversion erneut – ist diese jetzt höher, dann hat es nach dem Start ein erfolgreiches Update gegeben. Dann wird auf meinem Webspace ein PHP Script aufgerufen. Dieses Script speichert die Uhrzeit und das Datum in einer einzelnen Zeile einer Textdatei und eine Information wie „Update erfolgreich“ – ich nenne das einen Update-Log. 

 

Ruft man eine PHP Datei auf, dann wird sie normalerweise in einen Browser geladen und angezeigt. Mein Ansatz nutzt das HTTP-Protokoll jedoch nur als Transportmedium. Den erzeugten Output werte ich gar nicht aus. Ich möchte nur, dass das Script ausgeführt wird.

 

Nun, das klappt ganz hervorragend. Auf meinem virtuellen Test-PC in Virtual Box wurde für jeden User unbemerkt dieses Script aufgerufen. Ich weiß genau, wann ein User mein Programm genutzt hat. Das hört sich nach einer tollen Lösung an. Ich kann so erkennen, ob Updates bei den Kunden angekommen sind.

 

Dahinter steckt jedoch viel mehr. Ein HTTP-WebRequest kann auch Header-Daten enthalten. Das bekannteste Beispiel dafür sind Suchanfragen oder maskierte Passwörter, die an ein Script übergeben werden. Wir nutzen das jeden Tag, wenn wir uns zum Beispiel bei GMAIL oder GMX einloggen. Diese Header-Informationen könnte ich in meiner Anwendung zu jedem beliebigen Zeitpunkt erzeugen. Ich könnte den User z.B. anhalten, ein Passwort einzugeben und sobald das Passwort-Textfeld den Fokus verliert seinen Inhalt als Headerinfo an mein Script übertragen. In den Beispiel-Screenshots am Ende dieses Beitrages wäre es der Inhalt von „irgendeine_variable“, die ich bei einem beliebigen Event mit Inhalt füllen kann.

 

Ich habe das mal in einer kleinen Anwendung getestet – das klappt ohne Einschränkungen. Ich kann jede beliebige Tastatureingabe aufzeichnen und an einen Webserver senden. Mit wenigen Zeilen Code. Ich sehe jetzt zum Beispiel Passwort-Manager sehr kritisch. Mag sein, dass man seine Passwortsammlung verschlüsseln kann, aber mindestens bei der Eingabe bzw. dem Festlegen eines Passwortes in so einem Programm, kann der Entwickler des Passwortmanagers mitlesen. Und ich bezweifele außerdem, dass irgendeine Software diese Spionage überhaupt entdecken kann oder misstrauisch werden würde, denn per HTTPS oder durch Maskierung des Headers ist auch diese Übertragung an einen Server unsichtbar.

 

Mehr noch – je nachdem wie ´universal´ eine Anwendung ist – etwa als Dienst, als schönes Icon in der Taskbar, welches wichtige Funktionen bereitstellt, auf die die Welt wirklich gewartet hat – die ganze Anwendung, theoretisch jede Anwendung, könnte ein Key-Logger sein. Besonders kritisch wird es, wenn diese kleinen Programme auch noch praktisch sind und ihr Nutzen dazu führt, dass wir den Verstand abschalten.

 

„Phraseexpress“ oder „Textexpander“ fallen mir da ein. Sie überwachen absolut jede Tastatureingabe und könnten Zeichenfolgen durch Textmakros ersetzen. Super praktisch! Damit sie funktionieren müssen sie jeden Tastaturanschlag überwachen.

 

Diese Programme sind insofern bedenklich, als dass sie auch selektiv arbeiten können, da ihre Logik darauf basiert, einen Text auszuwerten. Müsste ein universales Programm alle Eingaben permanent überwachen, wäre der Traffic enorm und es würde auffallen. Zum Beispiel einem Anti-Virenprogramm. Text-Makros und alle Tools, die Texte per Algorithmus auswerten, würden jedoch nicht als potenzielle Schädlinge auffallen.

 

Diese Programme könnten sich zum Beispiel darauf beschränken, dass sie das Spionage-Script nur ausführen, wenn der User ein @ eingibt. Alles vor dem @ bis zum ersten Leerzeichen und alles danach wäre eine E-Mail Adresse. Alles nach einem TAB bis zum Enter wäre ein potenzielles Passwort.

Wenn ich als ordinärer Entwickler von Office Anwendungen schon Strukturen entwickeln kann, die einem Lauschangriff Tür und Tor öffnen, was mögen dann richtig versierte Menschen anstellen können?

 

Hier die praktische Ausführung. So funktioniert es – das ist eine Funktion in meiner Anwendung, die der User installiert hat. Sie ruft, ausgelöst von einem beliebigen Ereignis, wie zum Beispiel der Eingabe eines Passwortes oder jedem beliebigen Text das Script „updated.php“ auf meinem Web-Space auf:

 

Und so sieht das aufgerufene PHP Script auf dem Server aus. Es nimmt die gesendete Information auf und legt sie in einem Log-File ab:

 

Um das klar zu sagen: ich will hier nicht mit tollen Programmierkenntnissen prahlen. Da ist Firlefanz, das kann jeder Informatiker im Erstsemester zusammenbauen und jeder, der sich im Beruf ein bisschen dieser Kenntnisse angeeignet hat.

 

Mir ist schon klar, dass diese Erkenntnisse einerseits banal sind. Wir sind der Technik eh ausgeliefert und wir wissen nicht, was auf unseren PCs im Hintergrund geschieht. Andererseits finde es nur erschreckend, wie einfach so ein Ausspionieren zusammengestrickt werden kann. Jeder, der sich nur entfernt mal mit HTML oder Informatik auf maximal gymnasialem Mittelstufe-Niveau beschäftigt hat, könnte auf genau diese einfache Idee kommen und per Script verpackt in einem niedlichen E-Mail Anhang etwas in seinem nächsten Umfeld platzieren, was einen Lauschangriff darstellt und von keinem Anti-Viren-Programm als ein solcher erkannt werden würde. Man sendet nur Nachrichten über das Internet. Mehr nicht.

 

In meinem Tool verzichte ich übrigens auf diese Funktionalität - eine Mail oder ein Anruf, ob alles funktioniert tut es auch. Manchmal sind ein schlechter Eindruck und schlafende Hunde nicht von einander zu trennen.