seeseekey.net - Invictus Deus Ex Machina

Für verschlüsselte HTTP Verbindungen benötigt man ein Zertifikat. Dieses kann man sich von einer Zertifizierungsstelle (Certificate Authority, CA) ausstellen lassen. Der Haken an der Sache ist das dies Geld kostet (CACert und StartCom mal außen vor gelassen). Eine Alternative hierzu wäre es das Zertifikat selbst zu erstellen. Bei Diensten die man nur für einen kleinen Nutzerkreis z.B. für die Familie hostet, ist es auch vertretbar die Zertifikatswarnung im Browser über sich ergehen zu lassen. Für die Zertifikate wird ein Ordner erstellt und in diesen gewechselt:

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

Nun werden das Zertifikat und der Certificate Signing Request erstellt:

openssl genrsa -out example.key 2048
openssl req -new -key example.key -out example.csr

Bei der Erstellung des Certificate Signing Request müssen einige Daten angegeben werden:

Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Mecklenburg-Vorpommern
Locality Name (eg, city) []:Neubrandenburg 
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc
Organizational Unit Name (eg, section) []:Skunk works
Common Name (e.g. server FQDN or YOUR name) []:example.org
Email Address []:webmaster@example.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Nun muss das Zertifikat noch signiert werden, bevor wir es verwenden können:

openssl x509 -req -days 730 -in example.csr -signkey example.key -out example.crt

In diesem Fall ist das Zertifikat 730 Tage, also zwei Jahre gültig. Da die Signierung nun abgeschlossen ist, kann das Zertifikat in Nginx eingebunden werden. Dazu öffnen wir die Datei „/etc/nginx/sites-available/example“, wobei „example“ hier natürlich für die entsprechende Konfigurationsdatei steht. Dort sollte die SSL Konfiguration vorgenommen werden:

server {
        listen 443 ssl;

        root /var/www/example/root;
        index index.html index.htm;
 
        server_name .example.org;

        ssl_certificate /etc/nginx/ssl/example.crt;
        ssl_certificate_key /etc/nginx/ssl/example.key;
}

Nach dem Aktualisieren der Konfiguration mittels:

service nginx restart

ist die verschlüsselte Verbindung für die eingerichtete Seite aktiv und kann genutzt werden.

Weitere Informationen gibt es unter:
http://nginx.org/en/docs/http/configuring_https_servers.html

Vor einigen Tagen kam die Version 2.0 der Anwendung Outbank heraus. Dabei handelt es sich um eine Banking Software für Mac OS X und iOS. Allerdings hatte sich in die Version ein schwerer Fehler eingeschlichen. So wurde das Passwort welches zu lokalen Verschlüsselung der Daten benutzt wird, im Klartext in die „system.log“ geschrieben, was dann im Beispiel so aussieht:

Jan 17 09:17:03 delphi.localdomain OutBank[537]: Open Store:Core Data key:123456->abcdefghijklmnopqrstuvwxyzABCDEF

Neben diesem Problemen hatte die erste Version dank iCloud Synchronisierung auch mit Problemen wie doppelten Umsätzen und ähnlichem zu kämpfen. Problematisch an dem Fehler im Log ist auch das Mac OS X von Zeit zu Zeit das ganze archiviert und es so dazu kommen kann, das dieses Passwort an mehreren Stellen zu finden ist. Das gleiche trifft auch auf die Kombination mit Backupsystemen wie Time Machine zu. Um nach dem Update auf Outbank die entsprechenden Logeinträge zu entfernen wird von „stoeger it“ folgende Zeile empfohlen welche man im Terminal ausführen sollte:

sudo -i -- 'cd /var/log && grep -vE "OutBank\[" system.log > system.log.clean && mv system.log.clean system.log && if [[ -f system.log.0.bz2 ]]; then for a in system.log.*.bz2; do bunzip2 $a && grep -vE "OutBank\[" ${a%.*} > ${a%.*}.clean && mv ${a%.*}.clean ${a%.*} && bzip2 ${a%.*} ; done; fi; rm -f /var/log/asl/*.asl'

Witzig sind in diesem Zusammenhang Aussagen von Tobias Stöger aus der Zeitschrift SFT (Spiele | Filme | Technik) wo er auf die Frage ob Outbank sicher ist unter anderem wie folgt antwortet:

Der Artikel bezog sich mal wieder auf das unsichere Android-OS. […] Hinzu kommen noch unsere Sicherheitsmaßnahmen, wie automatische Passwortsperre oder verschlüsselte Datenbank.

Das war dann wohl ein Fall von pauschaler Aussage zum falschen Zeitpunkt. Natürlich stellt sich die Frage warum (wenn auch nur für Debugzwecke) Passwörter überhaupt im Klartext gespeichert werden. Auch war keine Auskunft zu erhalten ob die neue Version von Outbank die Bereinigung der Dateien selber vornimmt. Zur Sicherheit sollte man dies also auf alle Fälle manuell nachholen und anschließend das entsprechende Passwort ändern.

Weitere Informationen gibt es unter:
http://www.outbank.de/outbank-os-x-mac-sicherheitshinweis-zu-version-2–0-0/
http://www.heise.de/mac-and-i/meldung/Outbank-2-mit-Passwort-Leck-1786837.html

Vor einiger Zeit schrieb ich einen Artikel darüber wie man ein verschlüsseltes Verzeichnis in der der Dropbox mittels „Fuse4X“ und „EncFS“ unter Mac OS X Lion mountet. Der Wehrmutstropfen an meiner Methode war allerdings das Spotlight nicht funktionierte. Das hängt wohl damit zusammen das Spotlight standardmäßig nicht auf die mit Fuse eingehängten Systeme zugreifen kann.

Dazu sind auch nur einige Änderungen nötig. So muss das alte Skript zum mounten:

echo ultrageheimespasswort | encfs --stdinpass ~/Dropbox/Private ~/DropboxEncrypted

durch dieses ausgetauscht werden:

#!/bin/bash
#Secure EncFS Dropbox mounter by Daniel Widerin
#Edited by seeseekey

SOURCE=~/Dropbox/Private
TARGET=/Volumes/DropboxEncrypted
VOLUME_TITLE=DropboxEncrypted
PASSWORD=ultrageheimespasswort
ENCFS=/usr/local/bin/encfs

mount | grep $TARGET >/dev/null
[[ "$?" -eq "0" ]] && /usr/sbin/diskutil unmount $TARGET

if [ ! -d $TARGET ]; then
 echo "Create new mountpoint $TARGET"
 mkdir $TARGET
 chmod 0700 $TARGET
fi

echo $PASSWORD | $ENCFS $SOURCE $TARGET --stdinpass -ovolname=$VOLUME_TITLE -omodules=iconv -ofrom_code=UTF-8 -oto_code=UTF-8-MAC -oallow_root -olocal -ohard_remove -oauto_xattr -o nolocalcaches

Das neue Skript basiert dabei auf einer Variation eines Skriptes von Daniel Widerin und wurde etwas vereinfacht sowie um Angaben für den Zeichensatz erweitert. Nun kann man sich das ganze noch etwas bequemer machen, indem man das entschlüsselte Verzeichnis gleich beim Login einbindet. Das Skript sollte dabei einen Namen nach dem Schema „encryptDropbox.command“ tragen.

Nachdem dies geschehen ist, findet man in den Einstellungen unter „Benutzer & Gruppen“ -> „Anmeldeobjekte“ den entsprechenden Punkt. Dort wird einfach das entsprechende Skript hinzugefügt und schon wird dieses in Zukunft beim Login geladen.

Weitere Informationen gibt es unter:
http://seeseekey.net/blog/9455
http://fuse4x.github.com/faq.html
http://widerin.org/blog/secure-your-dropbox

In meiner Dropbox findet sich ein mittels „EncFS“ verschlüsselter Ordner. Dieser soll natürlich auch unter Mac OS X funktionieren. Im Netz gibt es einige Anleitungen um das ganze zum laufen zu bekommen, allerdings war darunter keine die bei mir funktionierte. Um den EncFS Ordner zu entschlüsseln muss man sich folgende Software herunterladen:

Nach dem Download muss man das ganze installieren und dann benötigt man nur noch ein kleines Skript zum mounten des ganzen. In dieser Skript trägt man folgendes ein:

echo ultrageheimespasswort | encfs --stdinpass ~/Dropbox/Private ~/DropboxEncrypted

Damit kann man das ganze mounten, ohne jedes mal das Passwort eingeben zu müssen. In Verbindung mit dem gemounteten Ordner gibt es leider ein Problem, so ignoriert Spotlight sämtliche Inhalte des entsprechenden Orders.

Weitere Informationen gibt es unter:
http://www.lisanet.de/?p=128
http://seeseekey.net/blog/6102
http://sohleeatsworld.de/?x=entry:entry120505-190714

In den letzten Tagen kursierten die Passworthashs der Communities Last.fm, eHarmony und LinkedIn durch das Netz. Bei Last.fm waren dies ungesalzene MD5 Hashs die man per Brute Force in relativ kurzer Zeit zurückrechnen kann.

Das Problem ist das sobald man dies „zurückrechnen“ kann, kann man die Passwörter bei anderen Diensten (Mail, Amazon, usw.) ausprobieren und damit Schindluder treiben. In einer perfekten Welt würde zwar jeder für jeden Dienst ein extra Passwort benutzen, aber es ist nun mal keine perfekte Welt.

Noch problematischer wird das ganze wenn man die Passwörter im Klartext (siehe Update) speichert (was man definitiv nicht tun sollte). So gibt es im Norden Deutschlands eine erfolgreiche Community mit knapp 140000 Mitgliedern welche auf den Namen NB-Town hört und unter www.nb-town.de zu finden ist.

Das Problem offenbart sich sobald man einmal die „Passwort vergessen?“ Funktionalität benutzt. Daraufhin bekommt man folgende Mail:

Die Passwort vergessen? Mail

Wie man sieht wird das Passwort im Klartext gespeichert (sonst könnte es die „Passwort vergessen?“ Funktionalität nicht zurücksenden), was bei einer solchen Community fahrlässig ist. Sobald jemand an die Datenbank herankommen so hat er 140000 Passwörter + die passenden Identitäten dazu. Ein anderes Problem bei Passwörtern welche im Klartext gespeichert werden, ist immer das die Betreiber Zugriff auf diese haben und damit (theoretisch) Schindluder betreiben können.

Deshalb gilt, Passwörter immer gehasht (aber nicht mit MD5 ;)) und gesalzen speichern. Einene schönen Artikel dazu gibt es bei Heise unter http://www.heise.de/security/artikel/Passwoerter-unknackbar-speichern-1253931.html.

Update:
Die Passwörter werden in der Datenbank nicht im Klartext gespeichert, sondern AES verschlüsselt. Bei der „Passwort vergessen?“ Funktion wird der Schlüssel in der Query übergeben, so das das Passwort entschlüsselt werden kann. Man müsste als böser Mensch also an den Webserver und den Datenbankserver herankommen und um Zugriff auf die Passwörter zu bekommen.

Die Daten in einer SQLite Datenbank sind im Normalfall unverschlüsselt. Natürlich kann man die Daten von Hand verschlüsseln, was aber auf Dauer wahrscheinlich etwas anstrengend wird. Anhilfe schafft hier die Bibliothek SQLCipher mit welcher SQLite Datenbanken verschlüsselt werden können. Die Bibliothek ist dabei Open Source und steht unter der BSD Lizenz. Zu finden ist die Bibliothek unter http://sqlcipher.net/.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Sqlite

Dropbox ist ein sehr schönes Tool, allerdings hat man doch immer ein ungutes Gefühl, weil man nie weiß was der Hersteller mit den Daten anfängt. Eine schöne Lösung wäre dabei die Verschlüsselung der Daten. Speziell für Dropbox gibt es dabei die Software BoxCryptor welche unter http://www.boxcryptor.com/ zu finden ist. Schöner wäre allerdings eine Betriebssystem übergreifende Lösung welche für Linux, Windows und Mac OS X funktioniert und ohne unfreie Software auskommt.

Wir greifen dabei auf EncFS zurück. Der Artikel geht dabei zuerst auf die Installation unter Windows und dann unter Ubuntu ein. Für Windows werden zuerst folgende Dinge heruntergeladen werden:

Nach dem Download sollte der Dokan Installer installiert und die „encfs.zip“ Datei entpackt werden. Danach können wir die Datei „encfsw.exe“ starten. Im Kontextmenü des Icons welches sich im Tray befindet kann dann mittels „Open/Create“ ein Ordner in der Dropbox verschlüsselt werden und dieser einem Buchstaben zugewiesen werden.

Den Inhalt des alten Ordners (in diesem Fall „Private“) sollte dann in das neue Laufwerk kopiert werden. Damit funktioniert das ganze dann unter Windows. Ein Problem mit EncFS für Windows scheint im Moment zu sein das man keine Anwendungen auf dem gemounteten Laufwerk starten kann, weil dies zu Problemen führt :(

Unter Ubuntu installieren wir das Paket „encfs“ mittels:

sudo apt-get install encfs

Mounten bzw. entschlüsseln könnten wir die Dropbox dann so:

encfs ~/Dropbox/Private ~/DropboxPrivate

Wichtig ist dabei das man das ganze nicht in die Dropbox mountet, sonst wird der ganze Spaß wieder synchronisiert. Möchte man nun nicht jedes mal ein Passwort eingeben wenn man den Ordner mountet so kann man das ganze so lösen:

encfs --extpass="./getprivatefolderpw.sh" ~/Dropbox/Private ~/DropboxPrivate

Die Datei „getprivatefolderpw.sh“ muss dabei so aussehen:

echo geheimesPasswort

Nun muss man das ganze nur noch in den Autostart (z.B: in die „.bashrc“) packen und schon passiert das alles automatisch nach dem einloggen.

Weitere Informationen gibt es unter:
http://dokan-dev.net/en/
http://seeseekey.net/blog/1192
http://de.wikipedia.org/wiki/EncFS
http://members.ferrara.linux.it/freddy77/encfs.html
http://www.boxcryptor.com/download/#platform_linux_dl
http://d24m.de/2011/07/22/howto-encfs-unter-windows-installieren/

Onlinefestplatten sind ja eine feine Sache: Überall hat man seine Daten verfügbar geschützt gegen Brand, Erdbeben und vieles mehr. Doch ein schaler Nachgeschmack bleibt. Schließlich liegen die Daten auf der Onlinefestplatte unverschlüsselt. Das ist natürlich unschön, aber hier kann man zum Glück Abhilfe schaffen.

Bei der Verschlüsselung von Daten gibt es im groben zwei Ansätze was das Wie betrifft. Einmal gibt es Software welche große Container anlegt in welchen das gesamte Dateisystem gespeichert ist. Das ist natürlich sehr schön, online allerdings relativ unpraktikabel. Man stelle sich vor man möchte einen 4 TB Container anlegen, das könnte über die Onlineverbindung eine ganze Weile dauern.

Die ändere Möglichkeit wäre es nur die Dateien zu verschlüsseln z.B. mit GPG, allerdings wäre diese Methode doch recht manuell. Eine schöne Zwischenlösung sind Systeme wie EcryptFS oder EncFS. Hier wird ein Verzeichnis verschlüsselt und zwar Datei für Datei (die Dateinamen werden dabei auch verschlüsselt). Das schöne an der Sache ist das es fast automatisch funktioniert.

Zuerst soll die Onlinefestplatte per WebDAV eingebunden werden. Im zweiten Schritt wird dann der verschlüsselte Ordner aufgesetzt. Für WebDAV wird zuerst das Paket davfs2 mittels

sudo apt-get install davfs2

installiert. Anschließend tragen wir in die /etc/fstab folgendes ein:

https://„webdavurl“ „mountpunkt“ davfs user,noauto 0 0

z.B. https://webdav.example.com /home/seeseekey/Online davfs user,noauto 0 0

Nun wird mittels:

sudo dpkg-reconfigure davfs2

das Paket rekonfiguriert. Auf die anschließende Frage antworten wir mit Ja. Damit ist das SUID-Bit für davfs2 gesetzt.

Nun wird mittels

sudo adduser „Nutzername“ davfs2

z.B. sudo adduser seeseekey davfs2

der entsprechende Nutzer der Gruppe davfs2 hinzugefügt. Damit kann man das ganze nun auch ohne root Rechte mounten. Nun legt man in seinem Homeverzeichnis den Ordner .davfs2 an und in diesem erstellt man eine Datei namens secrets. Das ganze sollte dann also unter ~/.davfs2/secrets zu finden zu sein. In diese Datei trägt man nun folgendes ein:

Mountpunkt“ „login“ „passwort“

z.B. /home/seeseekey/Online seeseekey@example.com geheim

ein und speichert das ganze. Die Rechte der Datei werden nun mittels

chmod 600 ~/.davfs2/secrets

auf das nötigste beschränkt.

Nun erstellen wir den Mountpunkt und mounten das Verzeichnis:

mkdir –p ~/Online
mount ~/Online

Nachdem das geschafft ist wird das Paket encfs mittels

sudo apt-get install encfs

installiert.

Mittels

encfs ~/Online/.private ~/Online/private

erstellen wir nun das verschlüsselte Verzeichnis. Dabei wird es auch gleich gemappt. In den Ordner ~/Online/private können wir nun die Dateien kopieren welche verschlüsselt werden sollen.

Das Skript zum mounten nach einem Neustart würde dann so aussehen:

mount ~/Online
encfs ~/Online/.private ~/Online/private

Und schon verfügt man über ein verschlüsseltes WebDAV Laufwerk :)

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/webdav
http://de.wikipedia.org/wiki/EncFS
http://wiki.ubuntuusers.de/EncFS
http://neuntoeter.wordpress.com/2010/07/31/verschluesselte-online-backups/

Möchte man mittels GPG eine Datei in der Kommandozeile verschlüsseln so gibt man auf der Konsole folgendes ein:

gpg –c geheim.txt

Danach wird man nach dem Passwort gefragt. Verschlüsselt wird in diesem Fall symmetrisch. Entschlüsseln kann man das ganze mittels:

gpg –o geheim.txt –d geheim.gpg

Das schöne an GPG ist im übrigen das es für so ziemlich jedes System zur Verfügung steht. Angefangen bei Linux und Windows bis zu Androidgeräten. Interessanter wäre natürlich eine auf Dateien basierende Verschlüsselung welche sich transparent in das Dateisystem einbindet (sprich ich als Nutzer merke nicht das mit verschlüsselten Dateien gearbeitet wird), aber man wird ja noch träumen dürfen ;)

Möchte man das ganze nicht auf Dateien basierend haben, sondern alle Daten in einem Container transparent einbinden so empfiehlt sich Truecrypt mit welchem das problemlos funktionieren sollte. Auch dieses ist betriebssystemübergreifend verfügbar.

Weitere Informationen gibt es unter:
http://wiki.ubuntuusers.de/gnupg
http://de.wikipedia.org/wiki/GNU_Privacy_Guard
http://wiki.ubuntuusers.de/TrueCrypt
http://de.wikipedia.org/wiki/TrueCrypt

In der aktuellen c’t werden Onlinefestplatten getestet. An sich ist das Konzept ja ganz interessant, die Dienste sollten bloß einige Dinge bieten:

- eigener Client
– ausreichende Anzahl an Übertragungsprotokollen (rsync, SFTP etc.)
– ausreichend Speicherplatz zu einem vernünftigen Preis
– Verschlüsselung auf Nutzerseite

Ein eigener Client wäre nicht unbedingt nötig wenn der Dienst eine ausreichende Anzahl an Übertragungsprotokollen bieten würde. Dies bieten allerdings die wenigsten Dienste. Was dann benötigt wird ist Speicherplatz zu einem vernünftigen Preis, denn es bringt nichts wenn man sich für den Mietpreis einer Onlinefestplatte eine echte Festplatte kaufen kann. Die zweite Sache ist das die Anbieter durch die Reihe weg zu wenig Speicher anbieten. Einzig Strato HiDrive sticht dort heraus, diese bieten immerhin 5000 GiB an, was meiner Meinung trotzdem noch zu wenig ist, ich denke ab 15 TiB wäre ich zufrieden :)

Ein letzter ganz wichtiger Aspekt ist die Verschlüsselung auf Nutzerseite, damit man dem Dienst seine Daten nicht anvertrauen muss. Auch dies wird im Moment noch nicht wirklich behoben. Dort muss man dem Dienst einfach vertrauen, aber wer will das schon…