RustDesk als Alternative für AnyDesk und TeamViewer

Nach den Problemen mit dem AnyDesk Hack im Dezember fragen sich viele, wie in Zukunft das heikle Thema Fernwartung besser gelöst werden kann.

Warum Fernwartungslösungen wie AnyDesk und TeamViewer ein generelles Problem haben

Grundsätzlich haben alle Fernwartungslösungen, die zentral von einem Anbieter betrieben werden, eine große Schwachstelle:

Der Anbieter betreibt für Tausende Kunden und möglicherweise Millionen Clients die Serverinfrastruktur. Wir als Dienstleister können die Sicherheit nicht überprüfen und müssen den Versprechungen des Anbieters glauben. Letztlich sind wir auch davon abhängig, das der Anbieter überhaupt über Sicherheitsvorfälle zeitnah informiert.

Gerade im Bereich Fernwartung sind solche Dienste ein lohnendes Angriffsziel und die zentralen Server und deren Struktur sind allgemein bekannt.

Daher sehen wir in allen Fernwartungslösungen, die auf einer fremden Serverstruktur aufbauen, ein grundsätzliches Sicherheitsproblem.

Letztlich geht es auch nicht ohne zentrale Relay Server. Wenn sich zwei Clients zwecks Fernwartung verbinden möchten, benötigt man immer die Hilfe eines Relay Servers, der die Clients verbindet.

Welche Alternativen gibt es zu AnyDesk und TeamViewer

Die Open Source Lösung RustDesk bietet die Möglichkeit den notwendigen Relay Server Online oder im Lan selbst zu betreiben. Dadurch können sich nur Clients mit dem Relay Server verbinden, welche zum einen die Server IP oder Server Domain und zusätzlich den Public Key kennen.

Es bietet zudem auch den Vorteil, das fremde sich nicht auf die PC's der Kunden per AnyDesk oder TeamViewer verbinden können. Selbst wenn Mitarbeiter einen Anruf erhalten, bei dem sich irgend jemand als den eigenen Support ausgibt, ist die Verbindung über die öffentlichen RustDesk Relay Server so nicht möglich. Der PC des Mitarbeiters verbindet sich ausschließlich mit dem eigenen RustDesk Relay Server. Ein potenzieller Angreifer hat jedoch ohne den Public Key nicht die Möglichkeit sich auf den eigenen Relay Server zu verbinden und wird daran scheitern.

Aber zu einer solchen Situation sollte es dank jährlichen IT-Sicherheitsschulungen erst gar nicht kommen.

Installationsanleitung RustDesk via Docker

RustDesk benötigt folgende Ports die von außen erreichbar sein müssen:

  • 21115:21119/tcp
  • 21116/udp

Docker und Docker-Compose installieren:

apt-get install docker.io -y 
apt-get install docker-compose -y

Für RustDesk erstellen wir das Verzeichnis /opt/rustdesk und wechseln auch gleich in das Verzeichnis:

cd /opt && mkdir rustdesk && cd rustdesk

Anschließend erstelle wir die docker-compose.yml Datei und fügen die Konfiguration ein. Dabei muss <your-domain> mit der eigenen RustDesk Domain ersetzt werden.

nano docker-compose.yml
version: '3.5'

services:
  hbbs:
    container_name: hbbs
    ports:
     - 21114:21114
     - 21115:21115
     - 21116:21116
     - 21116:21116/udp
     - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r <your-domain>:21117
    volumes:
     - /mnt/docker/rustdesk/hbbs:/root
    networks:
     - net_rustdesk
    depends_on:
     - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
     - 21117:21117
     - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
     - /mnt/docker/rustdesk/hbbr:/root
    networks:
     - net_rustdesk
    restart: unless-stopped

networks:
  net_rustdesk:

Wir speichern die docker-compose.yml und starten anschließend den Docker Container. Dabei wird automatisch der Public Key erstellt, den wir später für die Clients brauchen.

docker-compose up -d

Damit der RustDesk Container nach einem Neustart automatisch gestartet wird, fügen wir noch einen Crontab Eintrag hinzu. Dazu öffnen wir Crontab:

crontab -e

und für RustDesk dein Eintrag hinzufügen:

# m h  dom mon dow   command
@reboot sleep 30 && cd /opt/rustdesk/ && docker-compose up -d

Der RustDesk Client benötigt den Server und den Public Key, damit er sich mit unserem RustDesk Server verbinden kann. Den Public Key findet man unter:

cat /opt/rustdesk/id_ed25519.pub

Den aktuellen Client kann man sich von der RustDesk Github Seite herunterladen:

https://github.com/rustdesk/rustdesk/releases/

Bei dem Windows Client lässt sich per Dateiname die Server IP/Domain und der Public Key mitgeben, dazu muss die RustDesk Installationsdatei in folgendem Schema benannt werden. <your-domain> und <your-public-key> muss natürlich angepasst werden!

rustdesk-host=<your-domain>,key=<your-public-key>,.exe

Soweit wir das getestet haben, können sich mit dieser Konfiguration auch Clients ohne Key verbinden und den Relay Server nutzen.

Das wollen wir natürlich nicht. Dafür gibt es die Möglichkeit in der Dockerkonfiguration folgenden Eintrag um ein "-k _" zu ergänen:

command: hbbs -r <your-domain>:21117 -k _
command: hbbr -k _

Alternativ kann man auch den Private Key, der beim ersten Start des Docker Containers generiert wird, direkt in die Docker Konfiguration mit aufnehmen. Siehe dazu auch die Diskussion auf Github: https://github.com/rustdesk/rustdesk/discussions/973

Der Private Key wird in der Datei "id_ed25519" abgelegt und kann mittels cat ausgelesen werden.

cat /opt/rustdesk/id_ed25519

Die entsprechenden Zeilen würden dann wie folgt aussehen:

command: hbbs -r <your-domain>:21117 --key private-key
command: hbbr --key private-key

Als letztes erstellen wir noch ein Update Script für das Betriebssystem und den Docker Container RustDesk.

Dazu erstellen wir im Verzeichnis /home die Datei update.sh und geben die Berechtigung zum Ausführen:

cd /home && touch update.sh && chmod a+x update.sh && nano update.sh

Und fügen folgendes ein:

# Update-Script

# OS UPDATE
apt-get update
apt-get upgrade

# APPLICATION UPDATE

# Docker RustDesk
cd /opt/rustdesk
docker-compose pull $1
docker-compose up -d --build $1

# REBOOT
read -p "Reboot System? " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
    /sbin/reboot
fi

Jetzt können wir durch Ausführen des Scripts die Updates ausführen, am Ende werden wir gefragt ob wir den Server neustarten möchten oder nicht.

./home/update.sh


Leave a comment

Available formatting commands

Use Markdown commands or their HTML equivalents to add simple formatting to your comment:

Text markup
*italic*, **bold**, ~~strikethrough~~, `code` and <mark>marked text</mark>.
Lists
- Unordered item 1
- Unordered list item 2
1. Ordered list item 1
2. Ordered list item 2
Quotations
> Quoted text
Code blocks
```
// A simple code block
```
```php
// Some PHP code
phpinfo();
```
Links
[Link text](https://example.com)
Full URLs are automatically converted into links.
© TECH-SUPPORT.KOELN