stefankittel
Goto Top

Lokale Software aktuell halten mit einem Auto-Updater

Hallo,

könnt Ihr bitte einmal kurz drüberschauen ob ich etwas vergessen habe.

Ich habe auf einigen verteilten PCs ohne Server eine Software.
Dafür würde ich gerne ein einfaches Auto-Update in Form eines Mini-Programmes (c#) erstellen.


Eine geplante Aufgabe beim Start, oder um 03:00 Uhr, startet das Programm c:\programme\zzz\autoupdate.exe

Download der Datei https://xxx.yyy.de/version.txt
Wenn die Versionsnummer in der Datei gleich ist wie die lokale Version der Exe-Datei dann Programm beenden
Sonst weiter

Download der Datei https://xxx.yyy.de/update.exe (Die Datei ist von mir digital signiert mit einem öffentlichen Code-Zertifikat)
Ist die Signatur gültig und von mir ausgestellt?
update.exe starten


Angriffsvektor A
Austausch der update.exe auf dem Web-Server.
Da Niemand eine Datei mit meiner Code-Signatur erstellen kann, passiert hier nix.

Angriffsvektor B
Austausch der c:\programme\zzz\autoupdate.exe.
Dazu benötigt man lokale Admin-Rechte.
Dann kann auch direkt ein RAT installieren.


Habe ich etwas übersehen?

Danke
Stefan

Content-ID: 1889590704

Url: https://administrator.de/contentid/1889590704

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

maretz
Lösung maretz 11.02.2022 um 12:29:20 Uhr
Goto Top
das hängt ja davon ab wie deine Software aufgebaut ist. Meine hat z.B. die Versionsnummer einfach im Code drinne und vergleicht die via Interface mit der Versionsnummer die ich aufm Server habe. Dabei gibt es 2 Optionen:
a) Optionales Update - wenn z.B. nur irgendwo nen Text geändert wurde
b) Notwendiges Update - wenn z.B. Interface-Strukturen geändert wurden

Wenn das zutrifft wird die neue Datei runtergeladen und die alte überschrieben.

Man könnte natürlich noch per Signatur das ganze verbessern - da ich aber dafür die Infra aktuell nicht habe passiert das (aktuell) noch nicht... Wobei da der Client eh egal wäre da der bei mir keine Daten gross speichert, der läuft eher als agent ...
DerWoWusste
Lösung DerWoWusste 11.02.2022 um 12:29:44 Uhr
Goto Top
Sehe kein Problem.
C.R.S.
Lösung C.R.S. 11.02.2022 um 13:23:08 Uhr
Goto Top
Mögliche Schwachstelle in autoupdate.exe und Austausch der version.txt.

Die autoupdate.exe und version.txt können durch ein einfaches Powershell-Skript eingespart werden, wenn man das jeweils letzte Update lokal liegen lässt und den HTTP-Zeitstempel mit dem lokalen vergleicht, um ggf. den Download auszulösen.

Grüße
Richard
StefanKittel
StefanKittel 11.02.2022 um 13:53:13 Uhr
Goto Top
Zitat von @c.r.s.:
Mögliche Schwachstelle in autoupdate.exe...
Der Funktionsumfang des Programmes ist gering. Eine Validierung und Überprüfung "einfach" bzw. "wenig aufwendig".
Eine Manipulation setzt Administratorrechte vorraus. Und dann ist die Sicherheit eh im Alterwertesten...

Austausch der version.txt.
...Damit könnte man nur ein Update verhindern oder fossieren.
Beides ist unproblematisch.

Stefan
miniversum
Lösung miniversum 11.02.2022 um 15:18:16 Uhr
Goto Top
Hallo,

ich habe mal was ähnliches gemacht, allerdings nur Firmenintern.
Hier ein paar Punkte die ich bei mir später dazugebaut habe und vielleicht als anregungen dienen:
1. In der version.txt könnte außer der Versionsnummer noch direkt der download link, eine Checksumme und ein Beschreibungstext der Änderungen enthalten sein. So kann für den User auch vor dem Update angezeit werden was sich ändern wird.
2. Durch die Angabe des Links zum Download kann sich bei Änderung auch kein Problem ergeben.
3. Durch die Angabe einer Checksumme kann nach dem Download geprüft werden ob die datei evtl. fehlerhaft ist.

Gruß...
C.R.S.
Lösung C.R.S. 11.02.2022 um 17:00:13 Uhr
Goto Top
Zitat von @StefanKittel:

...Damit könnte man nur ein Update verhindern oder fossieren.

Wenn ein Angreifer die version.txt austauscht, was ja auf einem Proxy trivial möglich ist, wird die autoupdate.exe dadurch mit beliebigen Daten gefüttert. Das Parsing der vorgesehenen Textdatei mag zwar einfach erscheinen, das Kompilat ist deshalb aber noch nicht gegen beliebige Eingaben gesichert und wohl kaum ausgiebig getestet.
Das Problem lässt sich bei Online-Updates prinzipiell nicht vermeiden, aber die Verwendung von Zeitstempeln reduziert die Angriffsfläche auf die ohnehin genutzten Web-Requests.
StefanKittel
StefanKittel 11.02.2022 aktualisiert um 17:18:39 Uhr
Goto Top
Hallo,

in der version.txt steht nur eine Integer-Zahl

1. Ist es keine Zahl? -> Ende
2. Ist die Zahl <1 oder > 100 -> Ende

Man kann also nur zwei Dinge triggern:
- Kein Update installieren obwohl eines vorliegt
- Das Update installieren obwohl es nicht neu ist
Beides nicht so schlim

Stefan
C.R.S.
C.R.S. 13.02.2022 um 16:43:50 Uhr
Goto Top
Zitat von @StefanKittel:

1. Ist es keine Zahl? -> Ende
2. Ist die Zahl <1 oder > 100 -> Ende

Ja, das zusätzliche Risiko ist minimal (bzw. besteht viel gravierender nochmal bei der Validierung der Signatur). Aber Sicherheit kann nicht allein durch die richtige Anwendung von Methoden gewährleistet werden. Sonst würden Code-Reviews die Sicherheit garantieren. Du könntest das Risiko weiter minimieren, wenn Du die version.txt nur verarbeitest, wenn sie kleiner als 4 Byte ist (oder kleiner 3 und auf die Version 100 verzichtest; oder gleich 1 und hexadezimal versionierst).