Onlinebanking mit remasterten Ubuntu

Ansprüche

Die grundsätzlichen Ansprüche an das Banking-ISO-Image kann man in einem Satz zusammenfassen: Möglichst sicher, aber dennoch einfach zu bedienen.

Zum Komfort gehört meiner Meinung nach, dass sich das System automatisch mit dem Internet verbindet und automatisch der Browser nach dem Starten öffnet sowie auf die eigene Bankhompage navigiert.

Wegen der Sicherheit sollte weiterer Ballast in Form von Programmen möglichst vermieden werden – bei einer geringeren Anzahl Anwendungen wird die Anzahl an möglichen Exploits reduziert. Außerdem sollte jegliche Software an einem Ort einfach upzudaten sein.

Das sind alles Punkte, die eine gängige Linuxdistribution mit Paketverwaltung erfüllt. Ein BSD oder ähnliches wäre freilich auch denkbar. Wegen dem langen Supportzeitraum habe ich mich im Folgenden für ein LTS-Ubuntu entschieden.

Skript zum Bauen

Um das ISO zu bauen, habe ich mir ein Shellskript gebastelt. Große Teile sind aus der Anleitung „LiveCD manuell remastern“ aus dem ubuntuusers.de-Wiki entnommen. Weitere Informationen finden sich im englischen Ubuntu-Wiki.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
#
# Copyright (c) 2014 Christoph Volkert (http://c3vo.de)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# parts used from http://wiki.ubuntuusers.de/LiveCD_manuell_remastern
# for more information (in German) see  
#

wget -nc http://old-releases.ubuntu.com/releases/precise/ubuntu-12.04.1-desktop-amd64.iso
mount -o loop ubuntu-12.04.1-desktop-amd64.iso /mnt
mkdir -p work/{livecd,old,new}
chmod -R u+w work/livecd
cd work
cp -a /mnt/. livecd/
mount -t squashfs -o loop,ro /mnt/casper/filesystem.squashfs old
dd if=/dev/zero of=ubuntu-fs.ext2 bs=1M count=5120
mke2fs -F ubuntu-fs.ext2
mount -o loop,rw ubuntu-fs.ext2 new
rm -rf new/lost+found
cp -a old/. new/
umount old
umount /mnt
mount -t proc -o bind /proc new/proc
mount -o bind /dev/pts new/dev/pts
chroot new dpkg-divert --local --rename --add /sbin/initctl
chroot new ln -s /bin/true /sbin/initctl

echo "
Autostart
"

ubuntu_home=./new/home/ubuntu

mkdir -p ${ubuntu_home}/.config/autostart/

cat << "__EOF__" >> ${ubuntu_home}/.config/autostart/numlockx_on.desktop
[Desktop Entry]
Name=Ziffernblock anschalten
Type=Application
Exec=numlockx on
Terminal=false
NoDisplay=True
__EOF__


cat << "__EOF__" >> ${ubuntu_home}/.config/autostart/firefox_start.desktop
[Desktop Entry]
Name=Firefox Onlinebanking
Type=Application
Exec=firefox http://www.example.org/bank
Terminal=false
NoDisplay=True
__EOF__

chown -R 999:999 ${ubuntu_home}

#echo "
#Networking (WLAN)
#"
#
#mkdir -p ./new/etc/NetworkManager/system-connections
#
#NetworkSource=/etc/NetworkManager/system-connections/WLAN-XXXX
#
#cp ${NetworkSource} ./new${NetworkSource}
#chown root ./new${NetworkSource}
#chgrp root ./new${NetworkSource}
#chmod 400 ./new${NetworkSource}

cat << "__EOF__" > new/etc/apt/sources.list
deb http://de.archive.ubuntu.com/ubuntu precise main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu precise main restricted universe multiverse

deb http://de.archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu precise-updates main restricted universe multiverse

deb http://de.archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu precise-security main restricted universe multiverse

#deb http://de.archive.ubuntu.com/ubuntu precise-backports main restricted universe multiverse
#deb-src http://de.archive.ubuntu.com/ubuntu precise-backports main restricted universe multiverse

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
# deb http://extras.ubuntu.com/ubuntu precise main
__EOF__

chroot new apt-get update
echo "
Remove unneeded programs
"

chroot new apt-get -y --purge autoremove rhythmbox* gwibber* telepathy* ubuntuone* usb-creator-common transmission-* ubiquity* simple-scan software-center unity-scope-* unity-lens-music unity-lens-video thunderbird* xdiagnose deja-dup gparted gnome-disk-utility

echo "
Update Kernel
"

chroot new apt-get remove -y linux-generic* linux-image* linux-headers*
chroot new apt-get install -y linux-image-generic linux-headers-generic linux-image-generic
chroot new apt-get -y install chromium-browser numlockx language-pack-de language-pack-gnome-de
chroot new apt-get dist-upgrade -y
chroot new apt-get clean

chroot new rm /sbin/initctl
chroot new dpkg-divert --local --rename --remove /sbin/initctl
cp new/boot/vmlinuz* livecd/casper/vmlinuz
cp new/boot/initrd.img* livecd/casper/initrd.lz
chroot new dpkg-query -W --showformat="${Package} ${Version}\n" > livecd/casper/filesystem.manifest 
dd if=/dev/zero of=new/unused_space
rm new/unused_space
rm livecd/wubi.exe
rm livecd/casper/filesystem.squashfs

echo "
Change locales to German
"
echo "de" > livecd/isolinux/lang

umount new/proc
umount new/dev/pts
mksquashfs new/. livecd/casper/filesystem.squashfs -comp xz
umount new
find livecd -type f -print0 |xargs -0 md5sum | tee livecd/md5sum.txt
genisoimage -o ownbanking-ubuntu-12.04-desktop-amd64.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -r -V "own Banking Ubuntu 12.04 Remix" -cache-inodes -J -l livecd

Da sich durch die Zeilennummerierung das Skript relativ schlecht kopieren lässt, nochmal ein direkter Downloadlink.

Das Skript an sich ist zu großen Teilen meiner Meinung nach selbsterklärend. Sollte dennoch etwas unklar sein, die entsprechende Frage einfach in den Kommentaren stellen.

Eine Stelle, bei der man am besten selbst kurz Hand anlegt, ist die Netzwerkkonfiguration (Z. 63 bis 74). In Zeile 69 wird die Quelldatei festgelegt, aus dem die Konfiguration vom lokalen (Image-erstellenden) Rechner kopiert wird. Den Pfad entsprechend seines eigenen Netzwerks anpassen. Anschließend den gesamten Block auskommentieren. Außerdem wird vorausgesetzt, dass man den NetworkManager benutzt. Daneben sollte man in Zeile 56 die URL der eigenen Bankwebsite eintragen. Weitere interessante Zeilen zum individuellen Anpassen sind vielleicht, welche Programme installiert (Z. 107) bzw. deinstalliert (Z. 99) werden.

Danach das Skript mit Rootrechten ausführen und den Schaffungsprozess damit starten.

1
$ sudo bash create_internet_banking.sh

Wer lieber eine Logdatei statt lange Ausgaben im Terminal haben möchte, führt Folgendes aus:

1
$ sudo bash create_internet_banking.sh &> create_internet_banking.log

Der gesamte Prozess dauert ungefähr eine halbe Stunde, in der stellenweise Festplatte und / oder Prozessor schön ausgelastet werden. Um die Software zu aktualisieren, Skript einfach erneut ausführen. Auf einen USB-Stick bekommt man das erhaltene ISO-Image zum Beispiel mit dem USB-Creator.

Bootmedium

Um wirklich sicher zu gehen, dass keinerlei Malware bei zukünftigen Starts das Linuxsystem befällt, führt man das erstellte Image von einem schreibgeschützten Medium aus.

Die offensichtlichste Möglichkeit wäre eine CD zu brennen. Allerdings muss man diese dann bei jedem Update erneut brennen, was zu ziemlich viel Müll führt. (Die Möglichkeit das Medium nicht abzuschließen und dadurch Updates durchzuführen, macht die CD/DVD zu einem beschreibbaren Medium, was am Ziel vorbeiführt.) Zudem ist bei CDs die Speicherkapazität mit 700MB relativ knapp. Dadurch muss man auf eine DVD ausweichen. Gerade letztere sind mir auf Dauer jedoch zu teuer.

Was kann uns hier helfen? Wiederbeschreibarer Flashspeicher mit Schreibschutz natürlich! Der Vorteil ist klar: Man kann einfach Updates aufspielen, aber wenn man das Medium öfter ohne Reflashen ausführt, verändert sich nichts (richtige Schalterstellung vorausgesetzt). SD-Karten zum Beispiel sind da eine Möglichkeit. Wobei man bei ihnen aufpassen muss, dass der Schreibschutz auch wirklich funktioniert. Also am besten einfach testen.

Ein USB-Stick wäre aber doch noch schöner oder? Und es gibt sie – wenn auch sehr selten. Ich bin auf 2 Modelle gestoßen:

  • Der erste ist der Trekstor CS. Dieser wurde nur mit USB 2.0 gesegnet – das reicht meiner Meinung nach von der Geschwindigkeit aber für ein wöchentliches Onlinebanking locker. Weiterer Hacken: Er bootet bei aktiviertem Schreibschutz leider nicht bei jedem BIOS/UEFI. So wird ihm in diesem den Zustand unter meinem Fujitsu-Desktop (Baujahr 2009) der Dienst verweigert, bei meinem Medion-Notebook von 2011 wiederum funktioniert alles perfekt. Das deckt sich mit Erfahrungen, die man im Internet findet.
  • Den zweiten kann ich leider nur aus der Ferne und aus Rezensionen bewerten: PQI Nano. Er hat USB 3.0 und ist damit flotter, scheint jedoch leider nicht mehr wirklich verfügbar zu sein.

Warum der Aufwand – und genau so?

  • Warum nicht einfach Bankix von der c't?
    • Seit dem Versuch ein Ubuntu-Image mit NON-PAE-Bootmöglichkeit zu erstellen, ist mein Vertrauen in c't in diesem Bereich ein wenig geschrumpft. Daneben ist auf Bankix Software, die ich niemals brauche – beispielsweise Hibiscus. Zugegebenermaßen war Bankix aber Inspirationsquelle.
    • Der Wille sich einmal selbst mit dem Thema zu beschäftigen – wie immer das Welt-Wald-und-Wiesenargument für alles halt.
  • Warum Ubuntu 12.04.1 als Ausgangsimage?
    • Ubuntu 12.04 statt 14.04: Ein Ubuntu LTS zu verwenden war von Anfang an klar. Erst wollte ich die neueste LTS 14.04 verwenden, das ist dann aber an einem Bug gescheitert. Mit 12.04 ging alles – und Support gibt es auch noch bis 2017. Vielleicht funktioniert es mit 14.04, sobald man von Grund auf baut; die Seite fand ich aber zu spät. (und irgendeine Herausforderung für Später muss es doch auch geben ;) )
    • 12.04.1 als Ausgangsimage aus dem Grund, weil in den darauf folgenden Point-Releases Hardware-Enablement-Stacks verwendet wurden. Bei diesen läuft der Support allerdings zu unterschiedlichen Zeiten und vor dem eigentlichen Supportende von 12.04 aus.

Ein Nachteil bzw. Angriffsvektor bietet diese Variante weiterhin: Sind bereits die Paketquelle des Distributors mit Schadsoftware befallen, kommt diese am Schluss auch auf das erstellte Image. Man legt gegenüber den Repositorien also ein gewisses Vertrauen voraus. Wie man dieses Problem praktisch lösen könnte – außer jeglichen Quellcode manuell zu auditieren und selbst zu kompilieren – , weiß ich nicht.

Kommentar

Avatar von Stefano

Stefano

#1

Der Schreibschutz auf SD-Karten ist übrigens nur softwaremäßig. Der Host wird sozusagen gebeten das Device als ReadOnly anzusehen. Das ist mir beim Einstellen des Autoboot von CHDK bei meiner Kamera aufgefallen. Dort heißt es:

To use this method, format and load the card using the instructions below, and then set the card's lock switch (the little slider mechanism on the side of the SD card) to the "LOCK" position.

Trotz eingeschaltetem Schreibschutz kann die Kamera Bilder auf der Karte speichern.

Neuen Kommentar schreiben