36C3 Vorspanngeräusche
Herald: Heute Abend geht es in diesem Saal
über Staatstrojaner, also Trojaner, also
Schadsoftware im engeren Sinne, bloß halt
nicht solche von Kriminellen, sondern
solche von Unternehmen, die das
professionell mehr oder weniger legal
machen. Staatstrojaner sollte man gar
nicht erst bauen, wenn man sie baut,
kommen sie in die falschen Hände. Wie das
passiert und wie man dann unser
Rechtssystem und unsere Gerichte nutzen
kann, um etwas dagegen zu tun auf dem
vernünftigen rechtsstaatlichen Weg, das
erklärt uns unser Ulf Buermeyer, der in
vielen anderen Fällen auch schon
Rechtsbeistand für Clubthemen geleistet
hat. Und Thorsten Schröder ist auch dabei.
Oldschool Hacker, 20 Jahre dabei, 30 Jahre
weiß ich nicht. Und hat sich das
angeschaut, was da in dieser Schadsoftware
von FinFisher eigentlich drinsteckt.
Großen Applaus für Ulf Buermeyer und
Thorsten Schröder.
Applaus
Ulf Buermeyer: Hi, schön, dass ihr da
seid, herzlich willkommen!
Thorsten Schröder: Hallo, hallo.
U: Ja, herzlich willkommen zu „FinFisher,
See You in Court!“ Falls es der eine oder
andere kennt, eine amerikanische
Bürgerrechtsorganisation hat „See you in
Court!“ mal zu Donald Trump gesagt, als er
illegal versucht hat, Immigration in die
Vereinigten Staaten zu verhindern. Und wir
widmen uns genau dem umgekehrten Thema,
nämlich der illegalen Auswanderung von
fieser Software. Und bevor wir dazu
kommen, noch ein klitzekleiner historischer
Rückblick. Keine Sorge, das wird kein
krasser Juratalk, dafür bürgt schon
Thorsten.
T: Ich versuch’s.
U: Aber in diesem Talk geht es um ein
weiteres Kapitel im Kampf gegen digitales
Ungeziefer, und zwar eine ganz besondere
Form von digitalem Ungeziefer.
T: Staatstrojaner, die wir auch schon vor
ein paar Jahren mal auf einem Kongress
bereits besprochen haben. Aber eben
Software, die von Staaten eingesetzt
werden, gegen Kriminelle, gegen
Oppositionelle und so weiter.
U: Thorsten hat schon gesagt, das ist ein
Thema, das den Club und auch mich
persönlich schon seit Jahren beschäftigt.
Das Foto zum Beispiel ist vom 25C3. Da gab
es nämlich eine gute Nachricht aus
Karlsruhe zu feiern. Vielleicht erinnert
sich der eine oder andere noch daran. Das
Bundesverfassungsgericht hatte 2008 ein
neues Grundrecht erfunden, nämlich das
Grundrecht, das wir heute kennen als das
Computer Grundrecht oder, auf schlau,
das Grundrecht auf Integrität und
Vertraulichkeit informationstechnischer
Systeme. Eine Bezeichnung, auf die nur
Menschen kommen können, die viel zu lange
Jura studiert haben. Jedenfalls hatten wir
damals, als Conz und ich diesen Talk
gemacht haben, vor dem roten Vorhang
gehofft, dass dieses Grundrecht etwas
ändern würde. Aber leider müssen wir
sagen …
T: Tat es nicht. Wir haben 2011 einen
Staatstrojaner gefunden, der genau diese
Rechte nicht eingehalten hat.
Möglicherweise war das zu dem Zeitpunkt
bei diesen Entwicklern auch noch nicht
angekommen. Diesen Trojaner hatten wir
einmal auf einer Festplatte in einem
braunen Umschlag zugetragen bekommen. Ja,
den haben wir dann analysiert und einen
sehr ausführlichen Bericht auch dazu
verfasst und einen Talk auf dem 28c3.
U: Hier sieht man das,
Jugendbildnisse von Thorsten und mir.
T: Da war ich noch richtig jung, wie man
sieht. Da habe ich auch das erste Mal mit
Ulf auf einer Bühne gestanden.
Lustigerweise stehen wir nur auf der
Bühne, wenn’s um Staatstrojaner geht.
U: Das ist auch derselbe schwarze Pulli
bei mir, glaube ich. Ich habe den extra
nochmal gewaschen.
T: Ja, da haben wir den Staatstrojaner
vorgestellt und nicht nur beschrieben,
sondern auch demonstrieren können, wie der
gegen diese Grundrechte verstößt, indem er
einen Rechner in eine Wanze verwandelt und
somit in jedem Teil der Wohnung auch
abhören kann und man Software
nachladen kann und so weiter.
U: Mit dem Software nachladen war
vielleicht der krasseste Verstoß.
Eigentlich hatte das
Bundesverfassungsgericht nämlich sehr
genau vorgeschrieben, was ein Trojaner so
können darf und was nicht. Es hatte diese
Trojaner eben nicht grundsätzlich
verboten, aber relativ hohe Hürden
aufgestellt. Und diese Hürden allerdings
hat der Trojaner aus dem Hause DigiTask
damals nicht eingehalten. Thorsten und ein
paar andere Leute aus dem Club hatten ja
sogar so eine Fernsteuersoftware gebaut,
ihr konntet den quasi fernsteuern mit
einer kleinen Windowssoftware.
T: Also eigentlich sollte dieser Trojaner
ja nur Skype abhören und vielleicht mal so
ein bisschen die Chatlogs mitlesen. Bei
der Analyse ist allerdings aufgefallen,
dass er weitaus mehr kann, unter anderem
auch Software nachladen, aber eben auch
Screenshots anfertigen und auch
Screenshots von nicht abgeschickten Emails
und Gedanken und was auch immer man in so
einen Rechner auch reintippt.
U: Im Grunde genau das Gruselszenario,
das wir gerade auch beim Club immer wieder
kritisiert hatten, weswegen Staatstrojaner
so gefährlich sind. Das war nun leider
allerdings nicht das Ende der Debatte, wie
es sich für so einen richtigen Zombie
gehört, sind Staatstrojaner einfach nicht
kaputt zu bekommen. Und so haben wir in
Deutschland seit 2017 wieder eine
Rechtsgrundlage für Staatstrojaner, eine
neue sogar, nämlich dieses Mal im
Strafverfahren. Das Bundeskriminalamt darf
die schon viel länger einsetzen seit 2009
allerdings nur zur Abwehr von Terrorismus
und diesmal wirklich. Diesmal steht es
sogar im Gesetz. Aber seit 2017 gibt’s ein
neues Gesetz, das im Prinzip in den
meisten Strafverfahren erlaubt, so
Trojaner einzusetzen. Deswegen hat die
Gesellschaft für Freiheitsrechte dagegen
geklagt. Darüber haben wir letztes Jahr
schon kurz gesprochen, weil wir sagen, was
dieser Trojaner kann, ist wieder mal
verfassungswidrig. Und wir kritisieren
aber nicht nur, dass der die Grenzen nicht
einhält, die das Bundesverfassungsgericht
aufgestellt hat, sondern wir fragen uns,
wie kommt der Trojaner eigentlich rein ins
System? Wie kommt er eigentlich rein? Bin
ich denn etwa schon drin? Damit geht’s uns
um die IT-Sicherheit insgesamt, weil wir
uns fragen, welche Sicherheitslücken
werden eigentlich freigehalten, offen
gehalten, ganz bewusst, damit so ein
Trojaner ins System eingespielt werden
kann. Denn nur in Ausnahmefällen haben die
Behörden direkt Zugriff auf das System. In
aller Regel müssen die Trojaner aus der
Ferne eingespielt werden und dazu braucht
man eben Sicherheitslücken. Deswegen die
Minimalforderung der GFF in diesem
Verfahren: Das geht gar nicht! Wenn man
schon eine Rechtsgrundlage für Trojaner
schafft, dann muss man auch klare
Spielregeln aufstellen, welche
Sicherheitslücken eigentlich ausgenutzt
werden dürfen. Denn sonst gibt es einen
großen Anreiz 0-days oder
Sicherheitslücken, die dem Hersteller noch
nicht bekannt sind, geheimzuhalten.
Und damit werden alle Computer
auf der Welt die Sicherheitslücke
weiter aufweisen. Apropos auf der Welt:
nicht nur deutsche Behörden finden
Trojaner außerordentlich sexy. Ganz im
Gegenteil. Die Weltkarte des Trojaner-
Einsatzes ist bemerkenswert rot.
T: Zumindest was diese FinFisher Spyware
angeht, gibt es hier vom Citizen Lab
erstellt, diese Karte, wo diese
Schadsoftware schon überall gefunden bzw.
eingesetzt wurde. Das ist natürlich schön,
dass wir uns in Deutschland darum bemühen,
da entsprechende Rechtsgrundlagen zu
schaffen. Wenn wir das hinkriegen, dass es
so eine Rechtsgrundlage gibt oder eben
diesen Schutz der Privatsphäre, dann heißt
das noch lange nicht, dass
wir das Problem los sind.
U: Ganz im Gegenteil!
T: Das Ding ist halt, dass gerade in
diesem Fall wir davon ausgehen können,
dass diese Software, die hier weltweit
eingesetzt wird, um Leute
auszuspionieren, Made in Germany ist.
U: Das ist genau das Problem. Made in
Germany, aber eben nicht nur eingesetzt in
Deutschland, sondern auch in Staaten, wo
es mit der Rechtsstaatlichkeit vielleicht
nicht ganz so entspannt zugeht. Denn
besonders spannend sind Trojaner natürlich
für Menschen, die aus guten Gründen Stress
haben mit ihrer Opposition. Zum Beispiel
hier Präsident José Eduardo dos Santos aus
Angola. Der, jedenfalls nach Berichten,
auf der Kundenliste von FinFisher steht.
Oder Hamad bin Isa Al Chalifa, der sich
selbst im Jahr 2002 zum König von Bahrain
ausrief. Und bei der Rangliste der
Pressefreiheit aus dem Jahr 2017,
herausgegeben von Reporter ohne Grenzen,
belegt Bahrain den stolzen Platz 164 von
180. Mit anderen Worten: Pressefreiheit
bedeutet in diesem Land, zu schreiben, was
der Chef will. Die Presse in Bahrain
gehört zu den unfreiesten der Welt. Zensur
und repressive Gesetzgebung verhindern
freien Journalismus. Sechs Blogger und
Bürgerjournalisten sitzen in Haft, und das
alles wird unter anderem ermöglicht
dadurch, dass gezielt versucht wird,
Menschen zu hacken, die sich kritisch
äußern. Aber, die Probleme beginnen direkt
vor unserer Haustür.
T: Ja, wir haben auch in Europa, bzw. den
Anwärtern für die Europäische Union,
Staatslenker, die auch ein Problem haben
mit ihrer eigenen Bevölkerung und mit der
Opposition. Und nun gab es da halt diverse
Unruhen. Es gab einen Putschversuch. Im
Sommer 2016 gab es einen Putschversuch in
der Türkei. Die Türkei wandelte sich
danach zunehmend in ein eher repressives
Regime.
U: Und nach dem gescheiterten
Putschversuch wurden insgesamt mehr als
50 000 Menschen verhaftet. Mehr als 140 000
Menschen wurden aus ihren Berufen
entfernt. Die Türkei ist inzwischen das
Land geworden, in dem im Verhältnis zur
Bevölkerungszahl weltweit die meisten
Journalisten und Journalistinnen
inhaftiert sind. Eine lupenreine
Demokratie? Zurzeit befinden sich
mindestens 34 Journalisten in politischer
Gefangenschaft. Hunderte Zeitungen und
andere Medienorgane wurden geschlossen.
T: Es ist auch sehr, sehr auffällig, wie
dringend immer darauf hingewiesen wird,
dass die Leute, die dort inhaftiert sind,
unter Terrorverdacht stehen. Jeder, der
gerade zur falschen Zeit am falschen
Ort ist, wird dann auch mit diesem
Terrorismusverdacht erst
einmal weggesperrt.
U: Erfreulicherweise allerdings gibt es
trotz aller Repressalien auch in der
Türkei noch eine Oppositionsbewegung.
Beispielsweise, das sieht man auf diesem
Bild im Sommer 2017, als Oppositionelle in
der Türkei unter dem Motto adalet auf die
Straße gingen, um gegen das Regime zu
protestieren. Daraufhin allerdings hatte
der türkische Geheimdienst eine besonders
perfide Idee. Denn Demonstrationen gegen
den großen Meister gehen natürlich gar
nicht. Deswegen stellte der Geheimdienst
eine Website ins Netz, die – das seht ihr
auf dem Bild – auf den ersten Blick so
aussieht, als könnte das eine
Organisations-Website der
Oppositionsbewegung sein. Das sieht ja so
aus mit dem Logo und dem Bild, als wenn
das Menschen wären, die hinter diesen
Protesten stünden. Und auf dieser Seite,
von der man denken könnte, es sei eine
Protestwebsite, gab es dann diesen
schönen Button unten rechts, der so
aussieht, als ginge es dort in den Google
Play Store. Dort wurde eine Android-
Software, so eine APK-Datei, also eine
Android-Installationsdatei, zum Download
bereitgehalten für einige Wochen. Das
Problem ist nur, ihr ahnt es schon: es
handelte sich nicht etwa um einen
Messenger oder eine Kalender-App, mit der
die Oppositionellen sich hätten
organisieren können. In Wirklichkeit
handelte es sich dabei um einen Android-
Trojaner, den wir im weiteren als den
adalet-Trojaner bezeichnen. Die Frage ist
nur …
T: Woher kommt der Trojaner? Wir sind der
Meinung, nach aktuellem Stand, dass dieser
Trojaner, der in der Türkei gegen diese
Bewegung eingesetzt wurde, dass er aus
Deutschland stammt. Und wir haben einiges
an Arbeit investiert, um das auch mit
vielen Belegen begründen zu können, diesen
Verdacht.
U: Denn: Man kann sich das vorstellen,
Anna Biselli hat das so schön gesagt vor
zwei Tagen, wenn irgendwo ein Trog ist,
dann sind die Schweine nicht weit. Und
ebenso ist es bei Cyberwaffen. Wenn ein
Diktator mit Dollarbündeln wedelt, dann
finden sich immer wieder zwielichtige
Software-Unternehmen, die mit solchen
Trojanern Geld verdienen wollen.
Menschenrechte hin oder her.
Beispielsweise die Unternehmensgruppe
FinFisher aus München. Selbstbeschreibung:
Excellence in Cyber Investigation. Gegen
solche Trojaner-Hersteller vorzugehen ist
rechtlich schwierig. Das Problem dabei ist
nämlich, dass solche Trojaner unter
bestimmten Voraussetzungen ja legal
eingesetzt werden können. Das heißt
einfach nur Trojaner zu bauen ist nicht
illegal. Das gilt ganz besonders, wenn
auch deutsche Behörden zur dankbaren
Kundschaft gehören, beispielsweise nach
Presseberichten von Netzpolitik.org, das
Bundeskriminalamt, aber auch das Berliner
Landeskriminalamt. Mit anderen Worten:
FinFisher hat beste Beziehungen zu
deutschen Behörden. Aber man darf diese
Trojaner nicht einfach so exportieren,
denn sie gelten als Cyberwaffen. Der
Export von Trojanern ist zwar nicht
generell verboten, aber sie stehen auf der
sogenannten Ausfuhrliste. Das bedeutet,
man braucht vor dem Export von Trojanern
normalerweise eine Genehmigung der
Bundesregierung. Nur die EU-Staaten und
einige weitere Länder sind von dieser
Erfordernis, eine Genehmigung einzuholen,
ausgenommen. Und nun hatten wir in dem
adalet-Fall einen sehr, sehr schönen Fall.
Die türkische Regierung setzt einen
Trojaner gegen ihre Opposition ein. Mit
der türkischen Regierung gab es ohnehin
schon Stress genug. Und dieser Trojaner
stammt nun auch noch mutmaßlich aus
Deutschland. Und der Export war auch noch
illegal, weil es dafür keine Genehmigung
gab. Jedenfalls sagt das die
Bundesregierung. Und daher war für uns,
das heißt in diesem Fall Netzpolitik.org
zum Beispiel und die Gesellschaft für
Freiheitsrechte, ganz schnell klar, das
muss ein Fall für die
Staatsanwaltschaft werden. Wir haben
deswegen eine Koalition geschmiedet gegen
den illegalen Export von Staatstrojanern
unter Koordination der Gesellschaft für
Freiheitsrechte. Das hat da meine Kollegin
Sarah Lincoln gemacht. Reporter ohne
Grenzen, Netzpolitik.org und das ECCHR aus
Berlin – das European Center for
Constitutional and Human Rights – ihre
Kompetenz gebündelt, und wir haben
gemeinsam eine Strafanzeige geschrieben
und sie hier in diesem Sommer eingereicht,
um zu erreichen, dass die Verantwortlichen
bei der Firma FinFisher zur Rechenschaft
gezogen werden. Weil wir finden, genauso
wie deutsche Waffen nicht auf der ganzen
Welt mitmorden dürfen, genauso dürfen auch
nicht mit deutschen Trojanern
Menschenrechte weltweit oder in diesem
Fall in der Türkei verletzt werden.
Applaus
U: Hier haben wir nochmal
den Ablauf zusammengestellt.
T: Das ist jetzt die Timeline der Anzeige
bzw. wann das Sample, wir reden hier von
einem Sample, wenn wir jetzt von so einem
APK, so einer Schadsoftwareinstallation
reden, wann das verbreitet wurde, das war
dann im Juni 2017. Das ist definitiv nach
Einführung der Export-Richtlinien. Man
kann hier mit Gewissheit sagen, dass die
Zielgruppe die Oppositionellen in der
Türkei waren. Das ergibt sich aus dem
Kontext dieser Website und allem
drumherum. Und ja, es gab eine Anfrage an
die Bundesregierung, die letztlich
bestätigte, dass es in diesem Zeitraum
zwischen 2015 und 2017 keinerlei
Genehmigungen in dieser Richtung gab.
U: Damit war für uns klar, das reicht
jedenfalls für eine Strafanzeige.
Natürlich müssen noch ein paar Fakten
ermittelt werden. Aber jedenfalls reicht
es, um die Staatsanwaltschaft auf diesen
Fall aufmerksam zu machen. Und wir haben
auch eine ganze Reihe von Indizien, dass
der Fall sehr ernst genommen wird. Im
September 2019 haben wir diese
Strafanzeige dann veröffentlicht, unter
anderem auch auf Netzpolitik.org. Und wir
können mit Sicherheit davon ausgehen, dass
das die Herrschaften hinter FinFisher
nicht begeistert hat. Denn sie haben
Netzpolitik.org abgemahnt und dazu
gezwungen, den Artikel vorzeitig vom Netz
zu nehmen. Erfreulicherweise allerdings
hatte die Spendenkampagne von Netzpolitik
einigen Erfolg. Ich hoffe jedenfalls,
finanziell wird sich das nicht lohnen für
die Abmahner, aber klar, der Artikel ist
zurzeit nicht verfügbar, jedenfalls nicht
bei Netzpolitik. Es soll ja in diesem
Internet auch Archivseiten geben. Und dort
könnt ihr ihn nach wie vor lesen in seiner
vollen Schönheit. FinFisher und Kohl
schlagen zurück. Wir denken, getroffene
Hunde bellen. Und außerdem lassen wir uns
davon natürlich nicht einschüchtern. Wir
haben – Wir heißt in diesem Fall die
Gesellschaft für Freiheitsrechte – den Club
gebeten, sich die bisherigen Beweismittel
gegen FinFisher nochmal ganz genau
anzusehen und zu überlegen, ob es nicht
noch weitere Beweise geben könnte. Und das
Ziel dieser Mission war, noch genauer
nachzuweisen, dass tatsächlich die
Voraussetzungen vorliegen für den
Straftatbestand aus dem
Außenwirtschaftsgesetz. Ja, das ist die
Norm des deutschen Rechts, die
ungenehmigte Exporte unter Strafe stellt,
genaugenommen §18, Absatz 2, Nr. 1
und Absatz 5 Nr. 1 dieses
Außenwirtschaftsgesetzes. Ich erspare euch
die juristischen Details. Es ist im
Einzelnen ziemlich komplex.
Diese Norm verweist auf die
Außenwirtschaftsverordnung und die
wiederum auf einen langen Anhang, wo dann
quasi einzelne Kategorien von Gütern
aufgeführt sind, vom Kampfpanzer bis zum
Staatstrojaner kann man
dann nachlesen, was man
alles nur mit Genehmigung ausführen darf.
Und wir sind der Auffassung, dagegen wurde
verstoßen. Zwei rechtliche Fragen standen
im Mittelpunkt unserer Bitte an den Chaos
Computer Club, doch noch einmal ganz
genau, sich diese Trojaner anzuschauen.
Zwei rechtliche Fragen, oder, wie soll ich
sagen, zwei Tatsachenfragen, zwei Fakten-
Fragen, die aber eine große rechtliche
Bedeutung haben. Und zwar zum einen …
T: Zum einen der Herstellungszeitpunkt,
was wichtig ist und relevant ist, wenn es
darum geht herauszufinden: wurde diese
Software nach dem Stichtag Mitte 2015
hergestellt?
U: Ja, genau.
T: Wenn wir nachweisen können, dass eine
Software erst zu einem bestimmten
Zeitpunkt hergestellt wurde, dann können
wir auch davon ausgehen, dass sie erst
anschließend exportiert oder verkauft oder
eingesetzt wird. Und die zweite wichtige
Frage, wenn wir da jetzt mal ganz neutral
an die Sache rangehen. Wer hat dieses
Sample hergestellt? Es gibt den
Anfangsverdacht, dass es sich hierbei um
FinSpy von FinFischer handelt. Aber das
ist eben die Frage, die geklärt werden
sollte. Und das haben wir als Chaos
Computer Club dann einfach mal getan.
U: Und dazu gab es ja schon bisherige
Analysen. Andere Leute haben sich auch
schon mal FinFischer-Samples oder FinSpy-
Samples angeschaut. Diese Analysen waren
auch für euch der Ausgangspunkt.
T: Genau, so ganz am Anfang hieß es ja
auch, vor allen Dingen könnt ihr euch
nicht mal diese ganzen Analysen anschauen,
die da bisher veröffentlicht wurden, unter
anderem sehr viel von Citizen Lab. Die
haben sehr viel in diese Richtung gemacht,
nicht nur FinFischer Produkte werden da
von denen analysiert, sondern auch noch
andere. Dann ging es eben darum, zu prüfen,
ob das alles plausibel ist, was da drin
ist, ob man das alles reproduzieren kann,
ob man das Ganze dann auch nochmal als
Bericht so zusammenfassen kann, dass es
für deutsche Ermittlungsbehörden und ein
deutsches Gericht auch verwertbar ist.
Dazu haben wir uns dann auch noch ein
Gutachten von anderen Dritten angeschaut,
die so etwas ähnliches auch schon getan
haben. Da gibt es schon einen
Plausibilitätscheck aus 2018 von einer
Firma. Und 2018 hat Access Now auch noch
einmal einen Bericht, eine Zusammenfassung
all dessen veröffentlicht. Und jetzt für
die Klage gab es dann auch nochmal eine
technische Analyse. Ganz speziell dieses
adalet-Samples. Also dem eigentlichen
Gegenstand der ganzen Klage. Und wir haben
uns natürlich diese ganzen Dokumente
angeguckt, haben halt geschaut, sind da
irgendwo vielleicht noch Lücken, die wir
füllen können? Gibt es Dinge, die wir
ausführlicher beschreiben können,
transparenter machen können? Und das war
dann letztlich die Hauptarbeit, die wir
dabei geleistet haben. Wer jetzt erwartet,
dass es irgendwie total bahnbrechende
Neuigkeiten gibt über irgendwelche FinSpy-
oder FinFisher Trojaner, die Leute muss
ich leider enttäuschen. Wir haben halt
sehr viel der Arbeit anderer Leute
verifiziert. Wir haben aber auch noch ein
paar andere Indizien gefunden, die sehr
viel schwerer wiegen als manche andere
Punkte, die in den Reports vorher genannt
werden.
U: Und ihr habt schon, finde ich, einige
sehr, sehr spannende technische Details
noch rausgekramt, zu denen wir gleich noch
kommen. Z. B diese Provisionierung, wie
werden die Trojaner eigentlich angepasst?
Das fand ich schon ein sehr, sehr
spannendes technisches Detail. Ihr habt
dann vorgestern war es, ne, gestern war
es, die Analyse des CCC veröffentlicht.
T: Genau das haben wir gestern schon
veröffentlicht, damit man ein bisschen
Material hat. Ich hoffe auch, dass es,
wenn es die Zeit erlaubt, im Anschluss an
diesen Talk noch ein bisschen Q&A gibt.
Ja, wir haben einen sehr ausführlichen
Bericht darüber geschrieben, wie wir das
Ganze bewerten und wie wir die einzelnen
Indizien gewichten und zu was für einem
Schluss wir da gekommen sind. Was uns halt
sehr wichtig war an der Arbeit: Wir haben
am Ende auch alles veröffentlicht, im
Gegensatz zu all den anderen
Organisationen, die diese Arbeit auch
schon und auch sehr viel Arbeit investiert
haben. Wir haben sämtliche Samples, diese
Schadsoftware-Samples haben wir auf GitHub
veröffentlicht. Gibt’s nachher
noch einen Link.
Applaus
T: Es gibt auch in diesem GitHub
Repository gibt es auch sämtliche
Werkzeuge und Zwischenergebnisse, die wir
in unseren Analysen erlangt haben und
entwickelt haben. Mit dem Ziel, dass jeder
in der Lage ist, unsere Ergebnisse zu
reproduzieren. Das heißt, ihr habt die
Samples, ihr habt die Werkzeuge und die
Vorgehensweise, die wir ausführlich in
diesen 60 Seiten Bericht beschrieben
haben. Und ihr könnt das alles
nachvollziehen. Transparenz von unserer
Seite. Wir haben eine lückenfüllende
Zusammenfassung geschrieben.
U: Und nochmal ganz kurz der „Auftrag“
Selbstverständlich kann man
dem CCC keinen Auftrag geben.
Insbesondere hat die GFF den CCC
natürlich nicht bezahlt. Ja, das ist
ganz wichtig zu sagen. Es ist nicht
irgendwie eine gekaufte Stellungnahme,
sondern wir haben einfach nur gebeten,
wenn ihr euch dafür interessiert, schaut
euch das doch mal an. Das wäre wahnsinnig
hilfreich. Und ich finde in der Tat
großartig, dass der Club jetzt in der
Person von Thorsten insbesondere sich die
Zeit genommen hat. Ja, das ist nochmal
ganz kurz zusammenfassend der Auftrag.
Analysen verifizieren, die es schon gibt,
Lücken schließen in der Indizienkette und
natürlich weitere Samples gezielt
analysieren und die beiden zentralen
Fragestellungen aus rechtlicher
Perspektive: Wann ist dieser adalet-
Trojaner aus der Türkei oder der in der
Türkei eingesetzt wurde, hergestellt
worden und wo kommt er tatsächlich her?
Ja, und das sind jetzt eine ganze Reihe
von Samples, die hier auf GitHub.
T: Genau das. Hier sehen wir jetzt kurz
mal so ein Listing der Samples, die wir
analysiert haben. Das sind auch die
Original Schadsoftwaredateien. Da ist also
dieser Trojaner drinne, das befindet sich
gerade alles in dem GitHub Repository von
Linus Neumann, mit dem ich diese ganze
Analyse durchgeführt habe. Vielen
Dank auch nochmal an Linus.
Applaus
TS: Wir haben einige Nächte verbracht mit
diesen tollen Trojanern.
U: Eingesetzt wurden diese Samples eben
in Türkei, sagst du, in Vietnam und in
Myanmar. Das sind so die Länder, wo wir es
wissen.
T: Ja, was heißt Wissen, oder eben sehr
stark annehmen. Es ist nicht so leicht zu
sagen, wo sie eingesetzt wurden, wer sie
gekauft hat. Man kann das schlussfolgern
aus verschiedenen Indizien. Bei der Türkei
ist es relativ leicht, sag ich mal im
Kontext gesehen, weil wir ja auch diese
Website hatten, die sich dann auch gezielt
gegen die Zielgruppe richtete. Es gibt
auch Samples, wo man relativ sicher sagen
kann, dass sie z. B. in Myanmar eingesetzt
wurden, weil da eine sehr bekannte,
burmesische Social Platform genutzt wurde.
Also, dieser Name wurde genutzt, um dieses
Sample zu verbreiten. Das ist ein klares
Indiz, dass das gegen diese
Bevölkerungsgruppe ging. Bei Vietnam weiß
ich nicht genau. Diese Atrribution ist
halt eh schon ein schwieriges Thema.
Genauso schwierig ist es eben
herauszufinden, wo es eingesetzt wurde,
weil die ganzen Metadaten, die man dann in
den Samples findet, IP-Adressen,
Telefonnummern und so weiter. Die
sagen am Ende nicht viel aus.
U: Dazu sehen wir gleich noch ein
bisschen mehr. Aber fangen wir doch
vielleicht an mit der ersten zentralen
Frage, nämlich der Feststellung des
Herstellungszeitpunktes. Dazu habt ihr
euch eine ganze Reihe Gedanken gemacht,
wie man darauf kommen könnte.
T: Die zentralen Fragen waren, wann wurde
das hergestellt? Also haben wir uns all
diese ganzen Samples angesehen und haben
geguckt, ob wir da Indizien finden, dass
diese Software möglicherweise nach 2015
hergestellt wurde. Da gibt es verschiedene
Möglichkeiten. Grundsätzlich alles, was
wir jetzt in den Binaries und in diesen
Schadsoftware-Samples finden. Das ist dann
so der frühestmögliche Zeitpunkt. Wenn ich
beweisen kann, dass zum Beispiel eine
Komponente dieser Schadsoftware erst im
Mai 2016 überhaupt hergestellt oder
veröffentlicht wurde, dann bedeutet das
natürlich auch, dass das ganze
Schadsoftware-Sample erst nach diesem
Zeitpunkt hergestellt werden kann. Das ist
der frühestmöglichen Zeitpunkt. Das kann
also auch durchaus sein, dass es 2017
zusammengebaut und verschickt und verkauft
wurde. Das wissen wir nicht so genau.
U: Aber jedenfalls, eine Library, die
noch nicht veröffentlicht war, kann nicht
eingebaut werden, ne?
T: Genau deswegen haben wir sehr gezielt,
geh nochmal zurück, sehr gezielt nach
solchen Artefakten von Compilern gesucht
oder irgendwelche Zeichenketten aus
irgendwelchen Open-Source Produkten. Es
gibt aber auch in diesen APK-Dateien. Das
sind halt so die Android-Apps, liegen als
APK vor, das ist technisch gesehen nichts
weiter als ein ZIP-Archiv, was
wahrscheinlich alle von euch kennen
dürften. Und in diesen Archiven liegen
dann auch Zertifikate der Entwickler, die
dieses Paket veröffentlichen. Und anhand
dieser Zertifikate kann man z. B. auch
einen Zeitstempel einsehen, wann dieses
Zertifikat erstellt wurde. Das sagt jetzt
für unsere juristische Sichtweise nicht
besonders viel aus, weil man kann
ja ein Zertifikat mit einem beliebigen
Zeitstempel herstellen. Ich kann ja sagen,
ich gehe zurück in die Vergangenheit, oder
ich erstelle das in der Zukunft.
Das kann man alles machen.
U: Nur warum sollte man das tun?
T: Warum sollte man das tun? Vielleicht
gibt’s einen guten Grund dafür. Aber wir
haben uns ja auch aus diesem Grund und
genau deshalb Samples angeschaut, die bis
ins Jahr 2012 zurückreichen. Also wir
haben uns diese Trojaner-APKs angesehen,
die 2012 bis 2019 in die Öffentlichkeit
gelangten. Und wir können zumindest sagen,
wenn wir jetzt im Jahr 2019 sehen oder ein
Muster erkennen können, dass bestimmte
Zertifikate vielleicht auch in der
Vergangenheit genutzt wurden, dann kann
man sich schon fragen, ob das jetzt
plausibel ist oder nicht. Ansonsten gibt
es noch öffentliche Dokumentation. Dazu
gehörte das Sample selber. Das haben wir
auch nur aus dem Internet aus
verschiedenen Quellen, aber gegeben.
Deswegen ist es wichtig, sämtliche 28
Samples, die wir da hatten, anzuschauen:
Wann wurden die eigentlich im Einzelnen
hergestellt?
U: Ein Ansatzpunkt war der
Herstellungszeitpunkt von Bibliotheken.
T: Genau, hier sehen wir ein disassembly
von einem Shared Object, was da
mitgeliefert wurde, das bedeutet, diese
Android-Anwendungen sind ja eigentlich nur
Java-Anwendungen. Das heißt, da liegt Java
Bytecode drin und in Java hat man auch die
Möglichkeit, über das Java Native
Interface auch anderen Code aufzurufen,
der zum Beispiel vom Betriebssystem
bereitgestellt wird, oder eben in C, also
mit anderen Programmiersprachen
entwickelte Libraries, die mitgeliefert
werden und in dem Fall war; in diesem
Sample gab’s noch so Shared Object Files.
Das ist halt unter Linux-Betriebssysten haben
sie die Endung .so, unter Windows gibt's
ein ähnliches Konzept. Das sind dann
dynamische Bibliotheken, die als DLL
mitgeliefert werden. Und in dem Fall gab
es eine Bibliothek, in der wir bestimmte
Zeichenketten gefunden haben, die darauf
hindeuten, dass das definitiv erst 2016
hergestellt worden sein kann. Das sieht
man hier daran, das ist SQLite das ist ein
Open-Source-Projekt, so eine Open-Source
Datenbank. Und die hinterlässt dann in
diesem Kompilat diesen String. Das ist ein
Datum und irgendein Hash. Und wenn wir
uns dann mal anschauen, okay, wann taucht
denn dieser String eigentlich auf? Dann
können wir uns auf der Open-Source-Projekt-
Webseite anschauen, dass da tatsächlich
die SQLite Version 3.13 im Mai 2016
veröffentlicht wurde. Und lustigerweise
sehen wir hier genau diese Checksumme mit
genau dem gleichen String und somit können
wir eigentlich 100% davon ausgehen, dass
das hier sich sicherlich niemand
ausgedacht hat im Jahr 2012.
Ulf lacht
TS: Es ist ziemlich unwahrscheinlich.
Applaus
T: Ich hoffe ich laser dir nicht die Augen.
UB: Passt schon, ich schrei dann.
Und dann habt ihr euch die
Zertifikate angeschaut,
mit denen die Software signiert worden
ist, ne, die einzelnen Zertifizierungen?
T: Das haben wir auch gemacht, das haben
aber auch die anderen Researcher gemacht,
die sich das vor uns angeschaut haben. Die
haben das natürlich genauso analysiert.
Aber wir wollten ja auch die Analysen
analysieren, und das haben wir getan.
Deswegen der Vollständigkeit halber in
unserem Report natürlich auch nochmal ein
Zeitstrahl. Wir haben später noch eine
schöne Tabelle, wo man das gut sehen kann.
Hier sehen wir den Output, wenn man sich
dieses Zertifikat mal anschaut, was der
Entwickler genutzt hat, um dieses Paket zu
signieren. Hier sehen wir, dass es erzeugt
wurde im Oktober 2016. Passt also
zeitlich, wenn wir davon ausgehen, dass
das Zertifikat erstellt wurde, als dieses
Sample zusammengebaut wurde. Liegt halt
auch nach Mai 2016. Bis wann das gültig
ist, ist eigentlich völlig egal. Ja, das
Schöne wäre jetzt eigentlich, was hätten
wir jetzt hier, wenn wir da jetzt
irgendwelche Werte manipulieren, wenn wir
es zurück datieren? Schön. Dann könnten
wir Researcher in die Irre führen, wenn
jetzt hier zum Beispiel stehen würde, das
Zertifikat wurde 2012 erstellt. Dann
könnten wir überhaupt gar nichts darüber
aussagen. So vielleicht schon eher, was
hier noch auffällig ist, das wird später
noch relevant, es gibt auch diese
Fingerprints für diese Zertifikate. Das
sind diese langen SHA-Werte hier. Das ist
ein kryptographischer Hash über dieses
Zertifikat, über den key und der ist
einmalig. Also, wenn wir uns jetzt in den
28 Samples alle Zertifikate angucken, dann
vergleichen wir natürlich auch diesen
SHA-Wert, weil das ist der Fingerprint,
das drückt das schon ganz gut aus. Das ist
ein Fingerabdruck, wenn wir genau diesen
Fingerabdruck in einem anderem Sample
finden, dann können wir zumindest auch
eine Aussage darüber treffen, dass beide
Samples, unabhängig davon, wann sie
jeweils veröffentlicht wurden, dass beide
vom gleichen Hersteller stammen. Und das
ist auch ein wichtiger Punkt für diese
ganze Schlussfolgerung am Ende.
U: Zunächst mal aber können diese beiden
Aspekte, die du genannt hast, die
Bibliotheken und die Zertifikate im Grunde
den Schluss tragen, dass dieses adalet-
Sample jedenfalls nicht vor dem 18. Mai
2016 erstellt worden sein kann. Einfach
weil es da diese SQlite-Bibliothek
noch nicht gab.
T: Genau, das ist ein so schweres Indiz,
dass ich definitiv sagen kann, dass es
nicht vor Mai 2016 hergestellt worden ist.
UB: Damit liegt dieses Datum jedenfalls
nach dem Inkrafttreten der Verbote, von
denen ich anfangs gesprochen habe. Das
heißt also, dieses Sample wäre dann, wenn
es tatsächlich in die Türkei exportiert
worden ist, unter Verstoß dagegen
exportiert worden. Zweiter Aspekt
vielleicht noch wichtiger, die
Feststellung der Herkunft. Was für ein
Vieh war denn jetzt eigentlich dieses
adalet-Trojanerchen?
T: Dafür haben wir, wie ich sagte,
Samples aus dem Zeitraum von sieben Jahren
uns angeschaut und geguckt. Was haben die
für Gemeinsamkeiten? Was lässt darauf
schließen, dass die aus einem Hause
stammen? Da braucht uns in dem Moment noch
gar nicht interessieren, wie dieses Haus
überhaupt heißt. Uns ist nur wichtig
gewesen herauszufinden, ob die einen
Zusammenhang haben. Dafür haben wir diese
Code-Signing-Zertifikate miteinander
verglichen, wie ich eben schon sagte. Es
gibt noch ein paar andere Indizien
übrigens, für diese Zeitgeschichte. Aber
die spielt jetzt hier keine besonders
große Rolle. Der Coding-Style ist auch
eine wichtige Rolle. Wie ich schon sagte,
diese APKs, diese Anwendungen, sind
eigentlich in Java programmiert. Man kann
auch noch Shared-Object-Bibliotheken
daneben legen, die vielleicht in anderen
Programmiersprachen entwickelt wurden.
Aber man kann sowohl im Dekompilat des
Java-Codes als auch im Disassembly dieser
Bibliotheken einen gewissen Coding-Style
ablesen. Man kann verschiedene
Variablennamen miteinander vergleichen,
wenn keine Obfuscation am Start war. Also
Mittel, um Code-Herkunft und Code-Struktur
zu verschleiern. Wir können die Code-Basis
miteinander vergleichen, also auf einer
rein funktionellen Ebene. Wir können uns
anschauen. Sind die Funktionen in der
einen Anwendung vorhanden, die aus dem
Jahr 2012 stammt, und sind die gleichen
Funktionen auch vorhanden in der
Anwendung, die aus 2014 stammt und 2017
und so weiter? Das können wir schon
miteinander vergleichen und auch Diffs
feststellen, also Unterschiede zwischen
den Versionen. So können wir von einer
Evolution sprechen oder eine Beobachtung
dieser Evolution einer bestimmten
Schadsoftware. Wir haben sehr stark darauf
geachtet, ob wir zum Beispiel sehen
können, welche Sprache, welche
Muttersprache die Entwickler sprechen. Das
sehen wir an manchen Stellen sehr
deutlich. Komme ich nachher noch mit
Beispielen zu. Dann schauen wir uns auch
an, wann und wie die
provisioniert wurden und ob es
da irgendwelche Ähnlichkeiten gibt.
U: Provisionierung bedeutet quasi, dass
dieser Trojaner jeweils angepasst wurde
für den spezifischen Einsatzzweck. Das
heißt, dieser Trojaner ist im Prinzip eine
Massenware oder jedenfalls eine vielfach
eingesetzte Software. Aber für das
jeweilige Land wurden dann
unterschiedliche Parameter gesetzt. Dazu
kommen wir auch gleich noch. Das Spannende
dabei ist, was Thorsten gerade beschrieben
hat. Das sind zunächst mal vor allem
Parallelen zwischen unterschiedlichen
Samples. Das heißt, da kann man sagen,
diese Samples kommen wohl mehr oder
weniger aus derselben Küche. Aber das sagt
ja zunächst mal noch nicht, welche Küche
das ist. Um das sagen zu können, braucht
es noch einen zweiten Schritt, nämlich das
Finden von Samples bestätigter Herkunft.
Das heißt, wenn man weiß, bestimmte
Samples gehören zusammen, kommen aus
demselben Haus, und man kann dann
wenigstens ein Sample oder zwei Samples
einem ganz konkreten Hersteller zuweisen.
Dann gilt es, jedenfalls mit sehr hoher
Wahrscheinlichkeit, auch für alle anderen
Samples aus dieser Herstellungslinie. Und
da muss man ganz ehrlich sagen, sind wir
zu großer Dankbarkeit verpflichtet.
T: Ja, Phineas Fisher hatte einen
größeren Batzen Daten aus dem Hause
FinFisher getragen und veröffentlicht.
U: Tipp!
T: Es gibt da ein 41 Gigabyte großes
File, wo sehr viele Samples drinne sind,
die wir auch analysiert haben.
U: Hier sieht man das.
T: Vielen Dank nochmal Phineas Fisher!
Applaus
U: Mit anderen Worten, es ist für diese
Analyse ein großer Vorteil, dass es
bestimmte Samples gibt, die aus diesem
Phineas Fisher Hack stammen und die man
mit sehr großer Wahrscheinlichkeit
aufgrund vieler Indizien dieser
Firmengruppe FinFisher zuordnen kann. Das
heißt, man hat 2 Anker, oder wieviele
Samples sind da drin? 2?
T: Jaja.
U: Das heißt, man hat quasi 2 Ankerpunkte
und kann sich dann von diesen Ankerpunkten
über den Vergleich von Samples weiter
vorhangeln. Aber das ändert natürlich
nichts daran: Attribution is hard.
T: Sehr hart. Wir suchen also natürlich
noch weiter nach Indizien, die auf den
Urheber schließen lassen. Die
Attributierung von Schadsoftware, wenn mal
irgendwie wieder der Bundestag gehackt
wurde oder irgendjemand anders, da kommen
dann immer ganz schnell Leute, die sagen,
die Russen waren es, die Chinesen waren es
und so weiter. Das ist alles nicht so
leicht. Wir müssen diese Attributierung
allerdings auch ein Stück weit durchführen
und hangeln uns dann aber auch entlang an
dem jeweiligen Kontext, zum Beispiel, wo
so ein Sample eingesetzt wurde. Wie dieses
adalet-Sample zum Beispiel. Es gibt ja
grundsätzlich die Möglichkeit, das auch zu
faken. Wenn ich sage, ich bin jetzt
irgendwie irgendeine Hackergruppe oder ein
Konkurrent von FinFisher, dann will ich
die vielleicht in einem schlechteren Licht
dastehen lassen. Und fake jetzt vielleicht
mal irgendwie Malware von denen und mache
dann so False-FlagGeschichten. Das ist
natürlich alles möglich, aber in diesen
einzelnen Fällen relativ unwahrscheinlich.
U: Auch sowas könnte
man theoretisch faken.
T: Das kann man definitiv faken. Das ist
jetzt, was wir jetzt hier sehen, die
verarbeitete Ausgabe von so einer
Konfiguration, von so einer
Provisionierung. wie Ulf schon sagte,
diese einzelnen Samples werden ja nicht
jedes Mal neu kompiliert und neu
entwickelt. Da gibt es dann einfach
verschiedene Parameter, die für den Case
des jeweiligen Einsatzes notwendig sind.
Und das wäre dann so eine Konfiguration.
Da steht dann jetzt zum Beispiel, ja der
Proxy fürs nach-Hause-Telefonieren hat die
IP-Adresse oder den Hostnamen. Dann sieht
man hier auch noch eine TargetID, in dem
Fall adalet. Das hat, wer auch immer
diesen Trojaner zusammengebaut hat, sich
ausgedacht. Dann gibt es noch
Telefonnummern, wo SMS hingeschickt werden
oder wo angerufen werden kann. Und in dem
Fall kann man ganz gut sehen, dass diese
Attributierung schlecht, hard ist. Denn
die IP-Adresse stammt aus Deutschland. Die
Telefonnummer ist eine israelische, und
die andere Telefonnummer ist eine
internationale Mehrwert-Rufnummer. Da
lässt sich jetzt noch nicht so stark
darauf schließen, dass das tatsächlich von
türkischen Behörden eingesetzt wurde.
U: Etwas anders sieht es aus bei der
Familie der Samples, die ihr analysiert
habt. Denn da hilft euch ja das
Zertifikat, das zum Signieren verwendet
wurde.
T: Genau das sind ein paar Indizien, die
wir da herausgepickt haben, anhand derer
wir irgendwie bestimmte Gruppen
zusammenfassen können. Also was gehört
definitiv zusammen, was nicht? Diese Liste
sieht jetzt sehr wirr aus. Was hier grün
markiert ist, ist das adalet-Sample, von
dem wir quasi so ausgehen. Wir wollen also
Parallelen finden zu diesem adalet-Sample.
Alles, was hier rot markiert ist, hat eine
Parallele. Das stammt nämlich alles aus
dem Leak von Phineas Fischer. Alles was da
oben gelb markiert ist, wurde 2012
schon mal veröffentlicht und es gibt
entsprechende Analysen und verschiedene
Indizien, die darauf hinweisen, dass es
auch aus dem Hause FinFischer stammt. Wenn
wir jetzt mal davon ausgehen, dass das
hier aus dem Hause FinFisher stammt, weil
es in dem Leak war, dann haben wir hier
ein Sample, das nennt sich „421and“. „421“
scheint die Versionsnummer zu sein, „and“
heißt Android. Wir sehen hier, das ist
dieser Fingerprint von diesem Zertifikat,
was ich vorhin noch erklärt habe. Diesen
Fingerprint finden wir hier oben wieder.
Zwei Jahre vorher sind da oben schon
Samples in die Öffentlichkeit gelangt, die
genau den gleichen Fingerprint haben. Und
dann haben wir hier oben dieses „Andriod“.
Das ist ein Tippfehler, aber der stammt
halt so von denen. Das muss ein Demo-
Sample sein. Da hat diese Firma offenbar
mal gezeigt, was dieser Trojaner so kann.
Und dann haben sie den halt so
provisioniert, mit Zeichenketten, also
Webserver-URLs, die auf Gamma
International schließen lassen. Und es
wurde aber auch noch ein in-the-wild-
Sample damit signiert, mit dem gleichen
Zertifikat. Dieses „derise“ ist das, was
in Vietnam identifiziert wurde und auch
vietnamesische IP-Adressen, Telefonnummern
und so weiter drinne hat. Wie gesagt
Attributierung ist schwierig, aber an dem
Fall kann man auf jeden Fall sagen, dass
hier Demo-Samples und in-the-wild-Samples
definitiv aus einem Hause stammen, anhand
dieser Zertifikats-Fingerprints.
U: Der nächste Schritt, den ihr gemacht
habt, ist tatsächlich euch mal die Struktur
der einzelnen Samples anzuschauen, also
insbesondere wie diese Software von ihrem
logischen Ablauf her funktioniert.
T: Genau. Wir haben uns dann verschiedene
Funktionen angeguckt und haben halt mal
geguckt „Was sehen wir so an den
Funktionen?“. Ich habe ja gesagt, wir
schauen uns auch so ein bisschen diesen
Coding-Style an, was für Variablen werden
da genommen, wenn wir uns Java-Code
angucken können, der nicht obfuskiert ist.
Hier sehen wir zwei Samples und zwar das,
was aus dem Leak stammt von 2014. Das ist
auch irgendwie so eine Art Demo. Und 2016
– also, ich sage jetzt mal 2016, weil das
definitiv noch 2016 hergestellt wurde –
das adalet-Sample. Sie hatten hier so ein
Refactoring durchgeführt. Also eine
Umbenennung aller Variablen und
Funktionsnamen und so weiter. Das ist ein
und dieselbe Funktion, das kann man sehen,
wenn man sich den Code durchliest. Jetzt
wollte ich hier aber keinen Source Code an
die Wand werfen. Deswegen habe ich hier so
einen Call Flow, abgeleitet aus dem Source
Code. Das ist eine Funktion namens Run. In
dem Sample von 2014 liegt das in einer
Klasse namens SMS. In dem Sample adalet
legt es in einer Klasse namens s1ms, was
in Leetspeak hin geschrieben wurde. Und
wir sehen hier ganz klar, dass in dieser
Funktion effektiv der gleiche Code
ausgeführt wird mit ganz marginalen
Abweichungen. Das kann, zumindest nach
unserer Einschätzung, definitiv kein
Zufall sein. Das heißt, das ist eine
Weiterentwicklung der ganzen Samples aus
dem Jahr 2012, 2014 und jetzt auch in
2016. Das ist die Information, was wir da
rausziehen konnten.
U: Und zugleich kann man ja auch Schlüsse
ziehen aus diesem Leetspeak. Denn wenn man
sich überlegt: der Begriff SMS ist etwas
typisch Deutsches. Man versteht es
vielleicht noch in anderen Ländern, aber
man spricht normalerweise nicht von SMS.
Jedenfalls nicht im englischen Sprachraum
und insbesondere, wenn man dann noch das
Verb „simsen“ sich überlegt. Also in
Leetspeak dann „S 1 M S“ wie simsen. Das
ist was ganz typisch deutsches. Und ich
jedenfalls kann mir nicht so richtig
vorstellen, dass ein türkischer
Programmierer mit einem Mal von "simsen"
spricht.
T: Genauso wenig kann ich mir vorstellen,
dass das ein englischsprachiger
Programmierer tut. Dieses Wort „simsen“
wurde irgendwann mal modern und jeder hat
es benutzt sodass es sogar in den Duden
aufgenommen wurde. Und das Wort simsen
findet man halt wirklich nur im deutschen
Sprachgebrauch, und es ist schwer
vorstellbar, dass jemand, der nicht
Deutsch-Muttersprachler ist, dieses Wort
in einem Code verwenden würde, wenn es im
Kontext um SMS abfangen geht und das Ganze
auch noch mit Leetspeak verschleiert wird.
U: Aber ihr habt ja noch eine andere
Technologie, Stichwort Verschleierung,
gefunden, die außerordentlich pfiffig ist,
muss man sagen. Jedenfalls ich war sehr
beeindruckt, als ich diese Analyse gelesen
habe, nämlich wie eigentlich diese Daten,
diese Parameter, die wir eben schon kurz
gesehen haben zur Provisionierung
eigentlich in den Viren-Samples abgelegt
oder eigentlich versteckt worden.
T: Da hat sich der Entwickler ein
Verfahren ausgedacht, das ist so eine Art
Covered Channel, also ein versteckter
Kanal, so ein bisschen ähnlich wie
Steganografie, wenn man das kennt. Ich
verstecke Informationen in
Dateistrukturen, sodass man das
automatisiert oder mit bloßem Auge nicht
besonders leicht erkennen kann. Was für
Konfigurationen muss man hier verstecken?
Wie ich schon sagte, es gibt halt so die
Telefonnummern, die angerufen werden oder
wo SMS hin geschickt werden. Es gibt IP-
Adressen, zu denen sich die Schadsoftware
verbindet, damit ein Command-and-Control-
Server da übernehmen und lenken kann. Und
wie lange die Maßnahme dauert et cetera.
Das alles ist in einer Konfiguration
abgespeichert, die irgendwie in dieses APK
rein gedrückt werden muss.
U: Und dabei ist euch aufgefallen, als
ihr euch die Samples angesehen habt, dass
alle ein identisches Verfahren einsetzen.
T: Die benutzen alle das identische
Verfahren. Also, wir haben das jetzt auch
nicht entdeckt. Dieses Verfahren haben
andere, Josh Grunzweig beispielsweise
2012, auch schon in einem Blog-Beitrag
veröffentlicht, als er FinSpy-Samples
analysiert hat. Das ist nichts
bahnbrechendes Neues, aber wir konnten
zumindest jetzt einfach mal über die
7 Jahre hinweg beobachten, dass dieses
Verfahren in allen Samples eingesetzt
wird. Und damit, da es eben auch kein
Standardverfahren ist, um in irgendwelchen
APKs Schadsoftware zu verstecken oder
überhaupt Daten zu verstecken, können wir
im Grunde genommen davon ausgehen, dass
diese Technologie wirklich von einem
Hersteller stammt. Das heißt, dass all
diese Samples, diese 28 Stück, die wir uns
angeguckt haben, dass die aus einem Hause
stammen.
U: Und wie sieht das jetzt genau aus? Das
hier ist der Datei-Kopf. Nee, das ist
nicht der Datei-Kopf sondern …
T: Das sind Teile eines … Also ein APK
ist, wie ich schon sagte, technisch
gesehen nur ein ZIP-Archiv. Und in diesem
ZIP-Archiv stecken Metainformationen über
die im Archiv enthaltenen Dateien. Und
dafür gibt es dann diese Central Directory
Structure und verschiedene Felder. Das ist
dann so ein Header. Da sind verschiedene
Bytes und Bitfelder festgelegt, die die
Eigenschaften dieser im Archiv enthaltenen
Datei beschreiben. Eine wichtige
Metainformation, die genutzt werden kann,
um Daten zu transportieren, ohne dass man
es leicht sieht, sind diese
Dateisystemattribute. Die ZIP-
Spezifikation sieht vor, dass es 2 Byte
oder 16 Bit für interne File-Attribute
gibt. Und sie sieht vor, dass es 32 Bit
für die Dateisystemattribute auf dem Ziel-
Betriebssystem gibt. Somit haben wir hier
6 Byte pro Central Directory Structure zur
Verfügung, um Daten zu verstecken, denn
wir können da ja beliebig idiotische File-
Attribute setzen. Und das ist das, was sie
gemacht haben. Die ergeben dann zwar, wenn
man die Dateien entpackt, auf dem Ziel-
Betriebssystem keinen Sinn mehr, müssen
sie aber auch nicht, weil die Daten gar
nicht genutzt werden. Das sind einfach
irgendwelche Dummy-Dateien. Das sieht man
hier. Hier sehen wir im Hex-Editor so ein
APK und diese Strukturen. Wir haben diese
Signatur, diese PKZIP-Signatur ganz am
Anfang, die ist hier gelb markiert, und
ein Offset von 36 Byte später, kommen dann
diese 6 Byte Dateisystemattribute. Und wer
sich so ein bisschen mit Unix oder
Dateisystemen auskennt, sieht auch, dass
das jetzt hier keine Bitfelder sind für
Attribute, die Sinn ergeben. Nein, was wir
hier sehen, sind BASE64 codierte Daten.
Und wenn man jetzt dieses ZIP-File einmal
parst und sich alle diese CDS-Signaturen
herauspickt und dann diese Dateisystem …
diese Dateiattribute aneinander hängt,
anschließend diesen ganzen String, der
dabei herausfällt BASE64-dekodiert, dann
fällt daraus später eine Binärdatei, die
genau die Konfiguration dieser
Schadsoftware beinhaltet. Das wurde,
wie gesagt, alles schon mal
dokumentiert, wir haben das jetzt einfach
alles noch einmal nachvollzogen und auf
alle Samples angewendet und geguckt, was
dabei rausfällt. Das heißt dann im ersten
Schritt: Wir müssen die Dateien
extrahieren. In einem zweiten Schritt
müssen wir die Dateien parsen.
U: Und das Tool dazu findet sich jetzt
wieder auf der Website. Das heißt, das
müsst ihr uns oder vorallem Thorsten und
Linus nicht glauben. Das könnt ihr alles
selber nachprüfen, wenn ihr eines der
Samples runterladet und die Tools darüber
laufen lasst. Und wir hoffen, dass auf
diese Art und Weise noch weitere Samples
analysiert werden können. Das ist jetzt
noch mal ein Überblick, wie sowas dann in
der Gesamtheit aussehen kann. Wir müssen
ein ganz bisschen springen an der Stelle
und schauen, wo wir dann weitermachen.
Genau das ist dann so eine Konfiguration,
wie sie in der Summe aussieht.
T: Genau, das ist jetzt dieses „Andriod“
Beispiel, was 2012 schon auf VirusTotal
gelandet ist. Hier sehen wir, wie ich
schon angedeutet habe, es gibt dann so
Hostnamen, die schon den Namen beinhalten.
Ich muss aber auch nochmal dazusagen: Es
hat jetzt keine besonders große
Aussagekraft, wenn man ein Sample für sich
betrachtet und solche Zeichenketten da
drin findet. Denn Josh Grunzweig, der das
schon 2012 in seinem Blog dokumentiert
hat, hat auch schon ein Tool
veröffentlicht auf GitHub, womit man genau
so eine Konfiguration herstellen kann und
in so ein APK reindrücken kann. Das heißt,
man könnte im Grunde
genommen sowas auch faken.
U: Das heißt, die Aussage ist tatsächlich
weniger „Was steht drin in diesen
versteckten Konfigurationsinformationen?“
Sondern die Aussage ist: Alle Samples
verwenden die gleiche Technik, die gleiche
proprietäre und auch ziemlich ausgefuchste
Technik, um diese Daten zu verstecken in
der APK-Datei. Und diese Gleichheit ist
die eigentliche Aussage dieser Analyse.
Alle untersuchten Samples nutzen eben
diesen proprietären Mechanismus. Und du
sagst, das Format wurde aber
weiterentwickelt?
T: Es sieht ganz danach aus, wenn man,
sich den Inhalt dieser Binärdatei anguckt.
Sie benutzen dann so eine Art Directory,
um Nummern bestimmten Funktionen oder
Variablennamen zuzuweisen. Das ist auch
der Punkt, was es einfach macht, diese
Konfiguration zu parsen, zu verarbeiten
und herauszufinden, welche
Werte bedeuten was.
U: Diese Werte sind zum
Beispiel diese hier.
T: Beispielsweise das. Im adalet-Sample
gibt es, wie ich vorhin schon gezeigt
habe, verschiedene Werte, die jetzt auch
nicht unbedingt auf die Türkei hindeuten.
Dann gibt es auch aus dem gleichen
Zeitraum noch einen flash28-Sample, was
große Ähnlichkeiten und Parallelen mit dem
adalet-Sampel aufweist. Da wird z. B. ein
Proxy aus Neuseeland genommen, ansonsten
die gleiche Telefonnummer und dieses
derise-Sample hat, wie ich auch schon
angedeutet habe, sämtliche Werte, die
davon relevant sind, zeigen Richtung
Vietnam. Ob das etwas aussagt? Keine
Ahnung. In jedem Fall haben wir auch all
das, diese ganzen Configs, die wir daraus
extrahiert haben, haben wir auch auf
GitHub veröffentlicht. Das findet ihr bei
Linus in der FinSpy-Dokumentation, wo
auch der Bericht und alle anderen Samples
liegen.
U: Genau und vielleicht mag sich ja mal
jemand diese Telefonnummern anschauen,
vielleicht kennt die ja jemand aus
irgendwelchen anderen Zusammenhängen. Das
könnten noch ganz interessante
Rückschlüsse werden. Da würden wir uns
über Hinweise freuen. Und insgesamt sieht
man dabei – das ist die Übersicht über die
Samples, die ihr analysiert habt. Aber man
sieht, denke ich, ganz gut, dass es da so
etwas wie eine Familienstruktur gibt.
T: Genau. Der einzige, der hier so ein
bisschen aus der Reihe fällt, ist das Ding
hier. Das Ding, hab ich jetzt einfach mal
Container genannt, weil es sonst keinen
Namen hatte. Das ist ein APK, was
überhaupt keine Parallelen zu den anderen
aufweist. Aber dieses eine Sample hebt
sich insofern von den anderen ab, als dass
wir das jetzt hier noch mit aufgenommen
haben, das dropped, also legt, quasi eine
Schadsoftware APK überhaupt erst ab. In
diesem grau markierten Sample gibt es
einen lokalen Root Kernel Exploit gegen
den Linux-Kernel auf Android-Devices. Die
nutzen da die als „Dirty COW“ bekannte
Schwachstelle aus, um Root auf dem Telefon
zu werden. Da liegen dann noch Werkzeuge,
um persistent Root zu bleiben. Und dann
liegt da halt auch noch ein Sample,
nämlich dieses hier, dieses PyawApp. Ich
weiß nicht, wie man das ausspricht. Das
ist das Ding, wo wir davon ausgehen, dass
es in diesem Kontext Myanmar zugeschrieben
wird. Weil Pyaw ein sehr bekanntes
soziales Netzwerk in der Region ist.
U: Und die Antwort aus technischer
Perspektive. Vieles davon haben wir im
Grunde schon gesagt. Aber in der
Zusammenfassung …
T: Wie gesagt, sämtliche Samples, die wir
hier analysiert haben, benutzen den
gleichen Mechanismus für die
Provisionierung. Diese ganzen
Konfigurationen liegen in einem sehr
speziellen, Binärformat vor. Das ist kein
allgemeingültiges Format, muss also
definitiv aus einem Hause stammen. Wir
haben große Ähnlichkeiten auch unterhalb
des Java-Codes, wo es auch Hinweise darauf
gibt, dass es aus deutschem Hause stammt.
Wir können ganz genau sagen, dass das
adalet-Sample frühestens im Jahr 2016
hergestellt wurde. Und die Samples
zwischen 2012 und 2014 können auch ganz
eindeutig der Firma FinFisher zugeordnet
werden, weswegen da eigentlich in der
Schlussfolgerung auch klar gesagt werden
kann, dass all diese Samples, die wir uns
zwischen 2012 und 2019 angeguckt haben,
der Firma oder der Firmengruppe FinFisher
zuzuordnen ist.
U: Und all das könnt ihr nochmal im
Detail nachlesen in der Studie des CCC,
die schon veröffentlicht wurde gestern und
wie gesagt, ganz wichtig, wir möchten die
eigentlich gerne noch auf Englisch
publizieren. Wir haben deswegen schon mal
eine URL für ein Pad auf die Folie
geworfen. Das Pad gibt’s da nicht, das
füllen wir noch aus mit einer Roh-
Übersetzung aus Google Translate. Oder
vielleicht mag das auch jemand von euch
machen.
T: Wir würden das gerne crowdsourcen.
U: Das ist ein bisschen die Idee dabei,
weil das schon ein bisschen Arbeit ist,
und wir schaffen das einfach schnell,
jetzt, während des Kongresses nicht. Aber
vielleicht hat jemand Lust uns zu helfen.
Das wird die URL. Und vor allem ganz
wichtig: Check the facts! Das werden wir
natürlich aus GFF-Perspektive machen. Wir
gehen davon aus, dass es auch die
Staatsanwaltschaft machen wird. Aber ich
persönlich finde es großartig, dass der
CCC die Tools und die ganzen Unterlagen,
die zur Analyse vorlagen, ins Netz
gestellt hat. Einfach, damit man das nicht
unbedingt glauben muss, sondern dass man
selber sich davon überzeugen kann.
T: Transparenz ist uns sehr wichtig. Und
hier auch noch ein kleiner Gruß ans BKA
und LKA. Ihr habt diese Samples ja auch in
einer ganz neuen Version. Vielleicht könnt
ihr euch das ja mal angucken, und wir sind
offen für Pull-Requests.
Applaus
U: Ein Pull-Request aus Wiesbaden? Das
wäre doch mal eine gute Idee oder eben
auch aus Berlin.
T: Ihr könnt auch Tor benutzen, das ist
egal.
U: Kein Problem, da sind wir ganz offen.
Und das Berliner LKA könnte da auch
mitmachen. Die haben ja auch mal ein
Sample gekauft, das aber nie eingesetzt.
Sie brauchen das eh nicht mehr. Insofern,
das hätten sie über. Was bedeutet das
jetzt alles für das Strafverfahren? Aus
unserer Perspektive als GFF: Wir haben
keine Zweifel und natürlich auch aus der
Perspektive des Clubs, dass der deutsche
Trojaner FinFisher gegen die türkische
Opposition eingesetzt wurde, davon sind
wir fest überzeugt. Irgendwie muss dieser
Trojaner aus München in die Hände
türkischer Behörden gelangt sein oder
sonst aus den Händen der Firmengruppe
FinFisher. Und diese Verstoße gegen die
Exportkontrollvorschriften wären auch noch
nicht verjährt. Und deswegen liegt der
Ball jetzt bei der Staatsanwaltschaft
München 1. Denn eine Frage ist noch offen:
Wie genau ist eigentlich der Trojaner in
die Türkei gelangt? Wir können jetzt quasi
nicht irgendwie nachweisen, da ist der
Agent mit dem schwarzen Aktentäschchen
nach Istanbul gereist, oder da ist der
USB-Stick geflogen, sondern das müssten
die Strafverfolger noch aufklären. Aber
wie gesagt, dafür haben wir die
Strafanzeige gestellt. Dazu hat die
Staatsanwaltschaft alle Mittel. Und wir
hoffen, dass sie das sehr konsequent tun
wird. Denn eins ist klar: Menschenrechte
kann man nicht nur mit Kalaschnikows
verletzen, sondern selbstverständlich auch
mit Staatstrojanern. Und dem muss ein Ende
gemacht werden. Vielen Dank!
Applaus
U: Herzlichen Dank, wir haben noch ganz
ein wenig Zeit, oder?
T: Naja, eine Minute.
Herald: Euer Applaus. Wunderschön!
U: Dankeschön!
Herald: Wir haben leider keine Zeit mehr
für Fragen. Ich habe ganz zu Anfang vor
diesem Talk erwähnt, dass es die C3 Post
gibt. Und die beiden Speaker haben
erwähnt, dass sie am 28C3 einen
Datenträger bekommen haben. Damals
bestimmt anders zugestellt, es gab noch
keine C3 Post. Heute bin ich Postbote, und
ich darf zustellen. Ein Paket.
U: Herzlichen Dank, ach so, das ist deins.
Erst nach dem Talk öffnen, machen wir,
ganz herzlichen Dank.
T: Dankeschön.
Applaus
Herald: Und wenn ihr für einen Malware-
Hersteller arbeitet, ich hoffe, dieses
Paket enthält euren Albtraum für heute
Nacht. Großen Applaus für Thorsten
Schröder und Ulf Buermeyer!
Applaus
Abspannmusik
Untertitel erstellt von c3subtitles.de
im Jahr 2020. Mach mit und hilf uns!