Dieses Howto zeigt Ihnen, wie Sie einen RaspberryPi (mit Raspbian Stretch) für das Spectre- und Meltdown-sichere Surfen einrichten.
Die in fast allen CPUs (bei einigen Prozessorfamilien bereits seit 1995!) enthaltenen Sicherheitslücken Spectre und Meltdown zeigen, wie lange gravierende Sicherheitslücken in Produkten schlummern (oder verdeckt ausgenutzt werden) können.
Die besondere Gefährlichkeit besteht darin, daß diese Sicherheitslücken direkt in der Hardware stecken und unter jedem Betriebssystem ausgenutzt werden können. Eigentlich durch Sicherheitsfunktionen geschützte sensible Daten (wie Paßwörter) können hierdurch unbemerkt (z.B. durch simples Besucher einer Webseite) ausgelesen werden. Die Hersteller von Soft- und Hardware arbeiten derzeit an Patches, um die Auswirkungen von Spectre und Meltdown abzumildern. Ob und wann es gelingen wird, alle Schwachstellen zu schließen, bleibt abzuwarten. Unwahrscheinlich ist hingegen, daß für alle betroffenen Systeme Patches erscheinen werden.
Eine Ausnahme von diesen Sicherheitslücken bildet die CPUs der RaspberryPis (alle Varianten), denen die spekulative Codeausführung fehlt, die für die Angriffe nötig ist. Beim Ausführen des Browsers auf einem Raspberry Pi können Ihnen so keine Daten durch diese Sicherheitslücken entwendet werden. Sie sollten unabhängig davon aber auf die Sicherheit Ihres Arbeitsplatzrechners achten.
Prinzipiell ist dieses Howto (mit kleinen Anpassungen) auch für anderen Systeme, auf denen Debian läuft, geeignet. Auch kann es als Einrichtungsgrundlage für den Fernzugriff auf auf dem RaspberryPi laufenden Anwendungen dienen.
passwd pi
nano
wieder ein:
mkdir ~/.ssh
nano ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown pi -R ~/.ssh
/etc/init.d/ssh restart
apt-get install dirmngr
apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
echo '# X2Go Repository (release builds)
deb http://packages.x2go.org/raspbian stretch main
# X2Go Repository (sources of release builds)
deb-src http://packages.x2go.org/raspbian stretch main' > /etc/apt/sources.list.d/x2go.list
apt-get update
apt-get install chromium-browser firefox-esr x2goserver cryptsetup
dd if=/dev/zero of=/tmp.img seek=1024 count=1 bs=1M
Das System wird nun so konfiguriert, daß beim Booten der (mit einem zufälligen Paßwort verschlüsselte) Container nach /dev/mapper/tmp geloopt wird:
echo 'tmp /tmp.img /dev/urandom tmp,cipher=aes-cbc-essiv:sha256' > /etc/crypttab
Beim Booten wird "/dev/mapper/tmp" automatisch nach "/tmp" gemountet:
echo '/dev/mapper/tmp /tmp ext2 defaults 0 2' > /etc/fstab
mkdir /chome
dd if=/dev/zero of=/chome.img seek=8192 count=1 bs=1M
LUKS-Container formatieren und einhängen:
cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /chome.img
cryptsetup luksOpen /chome.img chome
mkfs.ext4 /dev/mapper/chome
mount /dev/mapper/chome /chome
chmod 777 /chome
pw=`dd if=/dev/urandom bs=1M count=1 2> /dev/null | sha512sum - | cut -d' ' -f1`
useradd -m -g users -d /chome/surfer -s /bin/bash -p "$pw" surfer
mkdir /chome/surfer/.ssh
cp /home/pi/.ssh/authorized_keys /chome/surfer/.ssh
chown surfer /chome/surfer/.ssh -R
chmod 700 /chome/surfer/.ssh
echo '#!/bin/bash
#System aktualisieren
apt-get update; apt-get dist-upgrade -y; apt-get clean
#/chome mounten
cryptsetup luksOpen /chome.img chome
mount /dev/mapper/chome /chome' > /bin/chomeOpen
chmod +x /bin/chomeOpen
Führen Sie dieses Skript nach jedem Booten per Einloggen als "pi" und Wechseln auf den root-Benutzer aus.
apt-get install tor privoxy
echo 'DNSPort 53
AutomapHostsOnResolve 1
VirtualAddrNetwork 10.192.0.0/10
TransPort 9040' > /etc/tor/torrc
echo 'user-manual /usr/share/doc/privoxy/user-manual
confdir /etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file
actionsfile user.action # User customizations
filterfile default.filter
filterfile user.filter # User customizations
logfile logfile
listen-address 127.0.0.1:8118
listen-address [::1]:8118
toggle 1
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forward-socks5 / 127.0.0.1:9050 .
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
tolerate-pipelining 1
socket-timeout 300' > /etc/privoxy/config
echo '
for anonUser in surfer
do
# Skip setting of the rules for the given user, if the rules are already set.
if [ $(iptables -L | egrep "(match $anonUsers |match $anonUsers$)" -c) -eq 3 ]
then
continue
fi
iptables -t nat -A OUTPUT ! -o lo -p tcp -m owner --uid-owner $anonUser -m tcp -j REDIRECT --to-ports 9040
iptables -t nat -A OUTPUT ! -o lo -p udp -m owner --uid-owner $anonUser -m udp --dport 53 -j REDIRECT --to-ports 53
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner $anonUser -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -m owner --uid-owner $anonUser -m udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT ! -o lo -m owner --uid-owner $anonUser -j DROP
done
' >> /bin/chomeOpen
echo 'pi ALL=(root) NOPASSWD:/usr/bin/killall' >> /etc/sudoers
echo 'surfer ALL=(root) NOPASSWD:/usr/bin/killall' >> /etc/sudoers
echo 'sudo killall -HUP tor' > /bin/torNeueIP
chmod +x /bin/torNeueIP
reboot
sudo bash
zum Benutzer "root". Schalten Sie nun per /bin/chomeOpen
das System frei.
chromium-browser&
bzw. mittels chromium-browser --incognito&
im privaten Modus starten. Für Firefox verwenden Sie analog firefox&
bzw. firefox --private-window&
für den pirvaten Modus.