In diesem Blogpost möchten wir uns anschauen, warum es wichtig Software darauf zu prüfen, dass diese unverändert bei uns ankommt und wie wir dies tun können.
Die Software
Wir stellen uns einmal vor, wir möchten gerne eine Software installieren welche wir nicht kennen. Als beispiel nehmen wir dafür heute Tails. Dies ist ein betriebssystem welches gerne von Journalist:innen und Aktivist:innen genutzt wird, um über Sachen zu schreiben oder zu Sprechen welche im verborgengen bleiben sollen. Es ist also von großer wichtigkeit, das dieses Betriebssystem wirklich das macht für das dieses auch beworben wird. Es könnte sich hierbei auch genaus so gut um Gimp gehen, was eine Software zur Bildbearbeitung ist. Hier ist es genau so wichtig, dass dieses Programm im Hintergrund z.B. nicht anfängt unsere Bilder die wir gerade bearbeiten wollen nicht ins Netz lädt. Immerhin sind das unsere Bilder und niemand anderes soll diese zu gesicht bekommen.
Also sollten wir uns als erstes anschauen, was die Software macht, die wir runterladen wollen. Hierfür durchstöbert wir nun das Netz nach unabhängigen Quellen. Eine gute Quelle hierbei ist immer Wikipedia. Softwares die viel benutzt werden haben meist hier einen eigenen Eintrag und geben uns einen guten Indikator dafür, ob die Software tatsächlich das macht was wir von ihr wollen. Sollte es keinen Wikipedia eintrag geben, helfen uns auch Berichte von anderen Techniwebseiten. Viele Personen schreiben über Software die sie nutzen. Wir können auch in unserem Freundeskreis fragen, ob diese die Software bereits kennen. Diese überprüfung ist wichtig. Wir sollten niemals Software runterladen und ausführen, über die wir nicht Wissen was diese macht. Wir sollten also immer uns vorher überlegen, was erwarte ich von der Software und wird diese auch diese erwartung erfüllen können. Scheint das nicht der Fall zu sein, sollten wir uns etwas anderes suchen. Hier kann auch helfen, wenn die Software Opensource. Das heißt wir können das innere der Software sehen den Code. Die Software hat also nichts vor uns zu verstecken.
Also gehen wir nun los und suchen nach der Software und laden diese von der ersten Website die wir finden?
Der Download
Falsch. Auch wenn Software z.B. opensource ist, wird diese oft verändert auf Websiten angeboten, um eine leicht veränderte Form anzubieten. Wichtig ist hier, ladet euch die Software dort herunter, wo diese Software ihr Hautpseite hat. Benutzt keine Websiten, welche eine Art Bibliothek online anbieten wie die von computerbild. Diese kommen immer mit Malware oder anderen schädlichen oder ungewollten Inhalten.
Ein anderer Weg ist, den Appstore eures Betriebssystems zu nutzen. Bei Windows z.B. den Microsoft Store. Für Mac ist das der Apple Appstore. Auf Linux sind dies die jeweiligen Repositories wie z.B. APT oder RPM. Auf Smartphones Playstore, Fdroid und der Apple Appstore. Diese Quellen stellen sicher, dass die Software unverändert auf eurem Gerät landet. Zusätzlich sorgen diese dafür, dass ihr immer die aktuellste Version habt.
Doch wenn die gewünschte Software nicht in einem der genannten Quellen vorhanden ist, welche gefahren lauren überhaupt im direkten Download?
Die Gefahren
Viele Personen denke, dass bei einem Download einer Software es wie folgt aussieht.
Der Download geht direkt von der Website zu unserem Gerät. Dies entspricht nicht der Wirklichkeit sondern kann sich eher so Vorgestellt werden.
So sieht es eigentlich aus. Eine anreihung von verbundenen Geräten durch die die Software jedes mal laufen muss. Das heißt diese Software muss einen langen Weg auf sich nehmen um schlussendlich bei uns anzukommen. Das Problem steckt nun in jedem einzelen dieser Übergänge. Bei jedem Sprung kann die Software von demjenigen der gerade auf einem dieser Geräte ist verändert werden. Heutzutage ist dieser Angriff nicht mehr relevant, da die meisten Websiten TLS nutzen und damit eine Verschlüsselte übertragung stattfindet. Dadurch kann nicht mehr eingesehen werden was dort nun übertragen wird. Dies gilt aber nur für gehackte Server. Es gibt noch andere Gefahren.
Es gibt noch andere Wege Software zu verändern ohne das wir es merken. Z.B. in dem wir einfach ohne es zu merken die Software von einem anderen Ort runterladen. Hierfür kann ein Angreifen z.B. unseren DNS-Server manipulieren um uns an einen anderen Ort zu bringen. Und ohne das wir es merken, würden wir eine andere Softwarevariante runterladen. Hierfür muss nicht mal DNS benutzt werden. Es gibt auch andere Wege temporär die Gleise im Netz umzustellen. Nationen haben hierfür genug gelegenheiten erschaffen.
wir sehen, es gibt genug Anggrifszenarien um eine Software die aus dem Netz geladen wird zu verändern, ohne das wir das merken. Deswegen wurden schon in den 90ern Verteidigungen eingebaut.
Doch selbst, wenn es keinen Angriff gegeben hat, bieten viele Softwares andere wegen an um diese herunterzuladen. Viele von diesen nutzen sogenannte “Mirrors”. Also Server die sie selber nicht unter kontrolle haben. Dies wird getan, damit die Software näher zum Laptop gelagert wird. Dadurch werden kosten und auch zeit gespart.
Andere bieten torrent dateien an. Hier kann gar nicht gesteuert werden woher die Software kommt.
Wie davor schützen?
Die vorher genannten Appstore schützen uns nur solange, wie unser Angriffszenario keinen Geheimdienst beinhaltet. Denn diese können ja per dekret änderungen vornehmen. Deswegen gibt es für Software wie z.B. tails andere möglichkeiten.
Die fertige Software wird hierbei unterzeichnet. Das heißt, wir können überprüfen wer diese Software ausgestellt hat und ob diese seit der Unterzeichnung nicht mehr verändert wurde. Dies passiert über ein sogenannten asynchrones verschlüsselungsverfahren. Hierbei wird mithilfe von RSA oder Edwardskurven eine Signaturdatei erstellt vom hashwert der Software. Das heißt, sollte auf dem weg die Software verändert worden sein, sollte sich auch der hashwert ändern.
Ein Hashwert ist hierbei ein Wert, der von einer Funktion errechnet wird. Wir geben also unsere Software in diese Funktion und es entsteht dabei ein Wert. Dieser wert kann nur duch diese Software erstellt werden. Jede kleine änderung an der Software sorgt für einen erheblichen unterschied dieses Hashwerts.
w1ntermute@w1ntermute ~/Downloads> sha1sum firefox/firefox-bin
f269a997b730a7abf454c457f1b279887322002f firefox/firefox-bin
So sieht das z.B. für meine firefox version aus.
Asynchrone verschlüsselung bedeutet hierbei, dass wir mit einem privaten Schlüssel einen Wert errechnen von diesem Hash, denn jede Person mit dem öffentlichen Schlüssel überprüfen kann. Und nur dieser eine private Schlüssel kann diesen Wert erstellen. Eigentlich verschlüsseln wir hier den vorher erstellten hash mit diesem privaten Schlüssel. Und mit dem öffentlichen entschlüsseln wir diesen und können dadurch die unversehrtheit überprüfen.
Damit können wir sicherstellen, wer die Software ausgestellt hat und das diese auf den Weg zu uns nicht verändert wurde.
Aber woher wissen wir wirklich wer die Software erstellt hat? Jede Person kann diese Schlüssel erstellen.
Web of Trust
Diese Schlüssel kommen in ein Schlüsselverzeichnnis welches öffentlich einsehbar ist. Dadurch können alle Personen auf der Welt diese einsehen. Also auch wie viele Schlüssel es gibt und wie viele davon erstellt wurden. Zusätzlich haben diese Schlüssel informationen wie z.B. den Namen und welche E-Mailadresse zu diesem Schlüssel gehören. So ist ersichtlich, ob z.B. eine Person gerade konkuriende Schlüssel besitzt. Damit nun sichergestellt werden kann, dass dieser Schlüssel wirklich zu der dort beschriebenen Person passt, können andere Personen mit Schlüssel nun unterzeichnen, ob sie diesem Schlüssel trauen und diesen Analog in der Welt überprüft haben. Dadurch steigt das vertrauen in diesen Schlüssel. Das heißt, dass Software von Sclüsseln unterzeichnet werden sollte, die ein hohes vertrauen unter Personen haben.
Dadurch, kann selbst wenn der Server der die Software ausliefert im falle eines hacks keine Software ausliefern. Denn diese verfügt nicht über den Schlüssel mit dem hohen vertrauen. Auch der wechsel des Schlüssels würde auffallen.
Deswegen ist es wichtig, immer beides zu überprüfen. Den Hashwert also die checksum und die Signatur.