Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sicherer Updater (https://www.delphipraxis.net/151681-sicherer-updater.html)

caN 27. Mai 2010 22:50


Sicherer Updater
 
Hallo an die Programmierer da Draußen,

Ich stelle mir die Frage wie man einen Updater "sicher" machen kann, komme aber zu keinem Ergebnis.

Hättet ihr irgendwelche Tipps für einen guten, also sicheren, Updater? Vielleicht etwas, an das ich mich orientieren kann oder an das ich mich unbedingt halten sollte?

Ich danke euch schonmal. :dp:

blackfin 27. Mai 2010 22:53

Re: Sicherer Updater
 
Was bezeichnest du denn als "sicher" ?

Dass er idiotensicher in der Verwendung ist?
Dass die Datenübertragung kryptografisch sicher ist?
Dass er auch sicher alles updated?

caN 27. Mai 2010 22:55

Re: Sicherer Updater
 
Sicher vor Manipulation der zu aktualisierenden Dateien.

blackfin 27. Mai 2010 23:11

Re: Sicherer Updater
 
Achso, ok :)

Aaaaalso:

1)
Dass jemand seine eigenen, lokalen Dateien manipuliert, kannst du nicht verhindern. root hat die Macht, bzw. unter Windows der Administrator.
Du kannst aber verhindern, dass du diese manipulierten Daten im Programm auch annimmst, indem du z.B. in deiner Exe eine Hash-Liste der Dateien mit einkompilierst und dann jede Datei vor Öffnung mit dieser abgleichst. Ist etwas manipuliert worden, dann terminiere das Programm nach einer Fehlermeldung wieder.
Die exe selbst könntest du selbst mit einem AntiCrack-Tool grundlegend vor Manipulation schützen.
Generell gilt aber, dass es immer Leute geben kann, die diese Maßnahmen umgehen können, solange das ganze lokal auf einem fremden Rechner passiert.


2)
Willst du nur die Daten, die vom Server zum Client und vice versa übertragen werden, "sicher" machen, kannst du eine Verschlüsselung der Daten verwenden.
Stichwörter sind hier z.B. das DEC, dessen Algorithmen du verwenden kannst, um die Daten zu übertragen.


...
Oder habe ich das jetzt wieder falsch verstanden?

s.h.a.r.k 27. Mai 2010 23:25

Re: Sicherer Updater
 
Zu Beginn würde ich auch überlegen, *wer* diese Software bekommt und *ob* es sich überhaupt lohnt, das ganze sicher zu machen, egal wie man dieses Wort nun verstehen mag. Denn 50 Stunden Arbeit in etwas zu investieren, was eh nur die eigene Familie und ein paar Freunde nutzen werden ist eher übertrieben. :zwinker:

Wenn du Dateien via HTTP/FTP herunterlädst kannst du das Ganz via SSL ja verschlüsseln lassen.

caN 27. Mai 2010 23:29

Re: Sicherer Updater
 
@blackfin
Ja, du hast mich falsch verstanden. Soviel ist mir auch klar, Hashs etc sind mir alle geläufig auch die Kompo DEC :-D
Liegt aber auch an meiner Erklärung bzw. Frage.
Ich dachte da eher in die Richtung Timestamp.

@s.h.a.r.k
Ich weiss nicht wie groß deine Familie ist, aber Familie kann man es nicht mehr nennen 8-)

s.h.a.r.k 27. Mai 2010 23:36

Re: Sicherer Updater
 
Nun ja, lokal kannst einfach alles passend manipulieren. Interessant wäre es eben für den Updates die Hashes der Dateien, die er zu updaten hat, zu wissen und zu prüfen. MD5 bietet sich hierbei an. In die Exe selbst würde ich nichts speichern, da diese Hashes ja auch manipulierbar sind.

caN 27. Mai 2010 23:43

Re: Sicherer Updater
 
Ja, soweit mach ich das auch alles, wie gesagt der ganze Hash kram ist optimiert.
Meine Frage bezieht sich auf andere Ansätze, also was gibt es außerdem? Ich rede jetzt nicht von sicher im Sinne von Manipulation des Programmes durch den User, sondern vor "falschen" Updates, die nicht von mir kommen. Ich meine etwas von Zeitstempeln gelesen zu haben.
Von MD5 halte ich allerdings nicht viel SHA512 oder Whirlpool sehe ich als besser an.

s.h.a.r.k 27. Mai 2010 23:48

Re: Sicherer Updater
 
Achso... So habe ich das noch nicht gesehen. Das könntest du auch über Hashes lösen, der dann alle Dateien deiner Installation beim Ausführen der Anwendung prüft. Wenn das Ganze aber so einfach wäre, dann würde das wohl jede Spieleschmiede kurz mal einprogrammieren und gut wäre es. Aber es gitb eben immer Wege sowas auszuhebeln.

Oder du kannst auch so einen geilen Kopierschutz wie Ubisoft bauen :mrgreen:

Über Zeitstempel würde ich aber auf keinen Fall fahren.

//edit
Was soll an MD5 so "schlecht" sein? Diese Verfahren ist definitiv ausreichend, selbst wenn du eine Kollision bekommst, zumal diese dezent unwahrscheinlich auftritt.

blackfin 27. Mai 2010 23:52

Re: Sicherer Updater
 
Zitat:

Ich dachte da eher in die Richtung Timestamp.
Öhm, jetzt bin ich noch ratloser...TimeStamps von Dateien kann man ja auch ganzleicht manipulieren...

Aber egal, ich sag jetzt einfach mal, wie ich sowas schonmal gemacht habe.
Um herauszufinden, ob und was überhaupt geupdated werden soll, lese ich mit dem Updater die Versionsnummer der Exe des Hauptprogramms aus und sende diese
(verschlüsselt) an das Script auf dem Server. Dieses schaut in der Update-Datenbank nach, ob es ein Paket für diese Version gibt und sagt entweder "nein, es gibt nichts" oder stösst den Updater an, ein bestimmtes Paket herunterzuladen.
Dieses wird dann nach dem Update ausgeführt und installiert die Dateien, wobei sich dann auch wieder die Versionsnummer des Hauptprogramms ändert.

Die exe'n selbst schütze ich, wenns denn unbedingt sein muss, per EurekaLog's "AntiCrack"-Feature.
Damit sind schonmal die meisten Normal-User aussen vor und es wird ziemlich schwierig, das zu knacken.
Eine Unmöglichkeit, das zu knacken, gibt es ja aber nie :)

Zitat:

Ich rede jetzt nicht von sicher im Sinne von Manipulation des Programmes durch den User, sondern vor "falschen" Updates, die nicht von mir kommen
Woher sollen die kommen? Wenn jemand ein gefälschtes Update-Paket für dein Programm schreibt und ein User installiert das dann? (ohne deinen Updater, da bei dem ja die Daten von deinem Server kommen).
Das wirst du nicht verhindern können. Wenn ich mir einen Selbst-Installer baue, der die Microsoftsche Word.exe überschreibt, dann wird der installer das auch tun, ohne dass Word das merkt.

caN 27. Mai 2010 23:56

Re: Sicherer Updater
 
Ich schrieb doch, dass mit Hashs + Verschlüsslung funktioniert alles wunderbar. Mir geht es um weitere zusätzliche Sicherheit, da die Daten verstreut auf Serveren liegen und mehrere Leute darauf Zugriff haben.
Ja, Timestamps sind natürlich leicht zu manipulieren, ich rede ja von zusätzlichem Schutz. Ich würde halt gern etwas über weitere Schutzmechanismen wissen.

zu MD5: Kollision = unsicher auch wenn es unwahrscheinlich ist.

Naja ich lass es, man scheint mich falsch zu verstehen, trotzdem danke für die Hilfe :)

blackfin 28. Mai 2010 00:01

Re: Sicherer Updater
 
Zitat:

Mir geht es um weitere zusätzliche Sicherheit, da die Daten verstreut auf Serveren liegen und mehrere Leute darauf Zugriff haben
Wenn die Quelle deiner Updates nicht vertrauenswürdig ist, dann bist du chancenlos.


Edit:
Zitat:

Naja ich lass es, man scheint mich falsch zu verstehen, trotzdem danke für die Hilfe
Gib doch nicht so schnell auf, sondern versuche vielleicht, uns dein Vorhaben noch näher zu erklären.
Vielleicht würde ja schon eine Beschreibung der Ausgangs-Situation helfen.
Das Thema an sich ist nämlich alles andere als uninteressant.

pertzschc 28. Mai 2010 00:07

Re: Sicherer Updater
 
Zitat:

Zitat von caN
Naja ich lass es, man scheint mich falsch zu verstehen, trotzdem danke für die Hilfe :)

Das kann man auch von der anderen Seite betrachten und daher gesehen drückst Du Dich einfach missverständlich aus:
Zitat:

Zitat von caN
Ich stelle mir die Frage wie man einen Updater "sicher" machen kann, komme aber zu keinem Ergebnis.

...
Zitat:

Zitat von caN
Sicher vor Manipulation der zu aktualisierenden Dateien.

Was denn nun? Du willst sicherstellen, dass Dein Updater keine Schrottdateien von der Quelle bekommt und damit möglichweise das System auf dem er läuft schrottet? Hast Du das Ziel? Wenn ja, dann beschreib doch mal noch, wie so eine Quelle (Server) aussieht und wie die Updatedateien dort hinkommen können.

Gruß,
Christoph

s.h.a.r.k 28. Mai 2010 00:10

Re: Sicherer Updater
 
Zitat:

Zitat von caN
zu MD5: Kollision = unsicher auch wenn es unwahrscheinlich ist.

Meistens aber überaus ausreichend sicher.

Zitat:

Zitat von caN
Naja ich lass es, man scheint mich falsch zu verstehen, trotzdem danke für die Hilfe :)

Erläutere halt mal genau um was es geht. Ich habs immer noch nicht so recht verstanden, ob da nun ein Server im Spiel ist, oder du einen Installer bastelst und wie ein anderer Daten einspielen will, vor denen du dich schützen willst.

caN 28. Mai 2010 00:17

Re: Sicherer Updater
 
Also ich versuche Updatefiles, welche auf mehreren Updateservern liegen, auf die auch mehrere Personen zugriff haben, vor Manipulation zu schützen.

Ein Update würde so ablaufen:

1. Updater erkennt Updates
2. Neue Datei wurde heruntergeladen und wird einem Hash Check unterzogen
2.1 Nicht identisch mit dem Hash aus der vom Server verschlüsselten Liste => Manipulation erkannt
2.2 Ist identisch => Update beendet.

2.1 würde bedeuten, dass jemand die Datei ausgetauscht hat, aber was ist wenn er die Verschlüsslung der Hashliste zustätzlich entschlüsselt hat und diese auch manipuliert hat? Das würde 2.2 bedeuten und genau hier möchte ich mit anderen Schutzmechanismen ansätzen, also was kann man zudem noch tun?

Edit:
Zitat:

Zitat von pertzschc
Das kann man auch von der anderen Seite betrachten und daher gesehen drückst Du Dich einfach missverständlich aus

In einem Post vorher erkenne ich meine Erklärungsnot. Verstehen heißt, die gleichen Assoziationen mit der Nachricht des Senders zu haben. Naja das ist nicht das Thema :gruebel:

s.h.a.r.k 28. Mai 2010 00:21

Re: Sicherer Updater
 
Den Leuten den schreibenden Zugriff zu diesen Files verbieten wäre wohl ein erster Ansatz. Es werden wohl nicht mehrere Junge auf dem Server als Dauer-Admin rumspringen?

Aber wenn doch, dann gilt auch hier: Die Damen und Herren können lokal alles ändern, egal was du machst. Selbst wenn du eine Datenbank mit Zugangsdaten aufziehst, die verschlüsselt ist. Du brauchst mindestens eine sichere Quelle.

Du hast gerade mehrere Server erwähnt... Eine Idee wäre es, eine Datei zu splitten und auf jeden Server einen Teil zu legen. Dann lädt der Updater diese herunter und fügt sie wieder zusammen. Wenn was geändert wurde kommt eigentlich nur Müll dabei raus. Kommt halt wieder darauf an, wer wie weit Zugriff auf die Dateien hat. Das wäre noch interessant zu wissen.

caN 28. Mai 2010 00:27

Re: Sicherer Updater
 
Keiner außer mir hat zugriff auf allen Servern.

Das mit den splitten der Dateien ist eine gute Idee.
Danke, genau sowelche Ideen suche ich.

Jetzt leuchtet die Glühbirne überm Kopf :thumb:

s.h.a.r.k 28. Mai 2010 00:30

Re: Sicherer Updater
 
Aber erklär mir doch mal, wer denn die Dateien ändern will, wenn keiner Zugriff auf die Server hat? Verstehe hier deine Angst nicht wirklich.

// edit
Eventuell könntest du dir auch noch Gedanken über Authentifizierung machen, sodass der Client weiß, dass er beim richtigen Server gelandet ist.

caN 28. Mai 2010 00:32

Re: Sicherer Updater
 
Ich schrieb doch "auf allen" keiner, außer mir. Aber Admin1 von Server1 kann die Dateien sehr wohl ändern.
Ich werde die Dateien einfach durch die Anzahl der Server teilen und dann streuen, sodass nur ich die Verfügungsgewalt bin.

Das wars auch schon, danke noch mal für euren Einsatz.
Alles Weitere wird kein Problem darstellen.

s.h.a.r.k 28. Mai 2010 00:33

Re: Sicherer Updater
 
Sorry, hab das so verstanden, dass keiner Zugriff auf einen Server hat. :oops:

// edit

Noch eine Idee: Was, wenn du die zu verteilende Datei packst (="Verschlüsselung" und Komprimierung), und dann zusätzlich verschlüsselst (von mir aus mit dem MD5-Hash der vorherigen Datei). Den Schlüssel kennst du ja automatisch auf der Client-Seite, eben der aus der Hash-Datei. Inkl. der Entschlüsselung dürfte das kein Problem mehr darstellen, denn wenn eine Datei nicht einfach so auf dem Server liegt, so muss Admin1 erst mal herausfinden, was mit der Datei passiert ist. Und den Updates zu deassemblieren dauert wohl auch seine Zeit.

caN 28. Mai 2010 00:43

Re: Sicherer Updater
 
Ach brauchst dich doch nicht entschuldigen, ich muss dir schließlich für deine Idee danken.

Die Verschlüsslungs- und Komprimierungsschritte werden so ähnlich, wie von dir erwähnt, bereits erledigt.

Gute Nacht, bin weg :lol:

blackfin 28. Mai 2010 00:43

Re: Sicherer Updater
 
Bei mir leuchtet nun auch die Glühbirne! :D
Jetzt hab ichs verstanden, was du erreichen willst.

Nun, wenn du dieses Datei-Splitten aufnehmen willst und ganz sicher gehen willst, würde ich die einzelnen Datenblöcke nicht zu gross zusammenhängend machen, sondern sie bei den Dateien ineinander verschachteln. Je grösser ein zusammenhängender Datenblock, desto leichter lässt dieser sich manipulieren, so dass am Ende doch kein Müll mehr rauskommt, wenn man es wieder zusammenfügt :)
Ganz krank gedacht könnte man so etwas wie den "Cross Interleaved Reed-Solomon-Code" auf einer CD in diese Datei-Architektur reinbauen, dann hast du auch noch zusätzlich eine Fehlerkorrektur.

s.h.a.r.k 28. Mai 2010 00:46

Re: Sicherer Updater
 
Ahhhhhhhhhhhh... langsam wirds echt zu krank :mrgreen:

caN 28. Mai 2010 00:50

Re: Sicherer Updater
 
Ein weiterer schöner Ansatz.
"Cross Interleaved Reed-Solomon-Code" Wenn der Name schon so lange ist, möcht ich nicht wissen wie lang der Code ist :)

So ich mach jetzt endgültig die Glühbirne :idea: aus und leg mich ins Bett.

Danke nochmal.

newbe 28. Mai 2010 05:51

Re: Sicherer Updater
 
Wie wärs den mit Signierten updates?

mfG newbe

generic 28. Mai 2010 11:26

Re: Sicherer Updater
 
Zitat:

Zitat von caN
Sicher vor Manipulation der zu aktualisierenden Dateien.

Also willst du die Dateien vor Manipulation schützen.

Das habt aber nichts mit Updaten zu tun. Der Updater muss doch die Dateien verändern können, damit diese aktualisiert werden können.

Ich verstehe unter "sicher Updaten" das der Updateprozess stabil durchläuft. Wenn eine Fehler auftritt, dann soll nicht kaputt sein.
Wenn du so etwas willst, nimm den Windows Installer. Dieser arbeitet transaktionsbasiert.


Wenn du nur Manipulationen von Dateien ermitteln willst um z.b. Cheaten zu verhindern, dann signiere die Dateien und prüfe die Signaturen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz