Archive: Month 2, Year 2012

fbPGP - Facebook mit GnuPG

24.02.2012 yahe code legacy security

Wie ihr letztens wahrscheinlich gelesen habt, hat sich ein Amtsrichter aus Reutlingen dazu entschieden, in einem Einbruchsfall den Facebook-Account eines Angeklagten zu beschlagnahmen. Die Idee dahinter: Der Angeklagte soll dem Einbrecher via Facebook einen Tipp gegeben haben, wie dieser am besten einbrechen könne. Mit Hilfe der Beschlagnahmung versucht das Gericht nun, an die privaten Facebook-Nachrichten des Angeklagten zu kommen. Aber was würde es denn bedeuten, wenn das Gericht hier tatsächlich Einblick in die privaten Nachrichten erhalten würde? Es würde bedeuten, dass private Nachrichten bei Facebook nicht dem gleichen Schutz wie private Briefe unterliegen. Darüber hinaus würde es aber auch bedeuten, dass zukünftig wegen jeder Bagatelle die intimsten Nachrichten Gegenstand eines Prozesses werden könnten.

Um dem ein bisschen entgegen zu wirken, wäre es sinnvoll, über Facebook versendete Nachrichten einfach verschlüsseln zu können, sodass nur der tatsächliche Empfänger sie lesen kann. Leider ist so etwas oft sehr umständlich. Entweder, man verwendet einen separaten Client, der diese Funktionalität anbietet oder aber man muss immer ein Verschlüsselungsprogramm laufen lassen, in das man die Texte rein- und wieder rauskopiert. Aus diesem Grund habe ich mich mal an einem Proof-of-Concept versucht. Ich habe ein Greasemonkey-Skript geschrieben, dass sich in die Nachrichtenseite von Facebook einklinkt und sie um das Ver- und Entschlüsseln von Nachrichten erweitert. Das Ergebnis davon ist fbPGP - Facebook with GnuPG.

Verschlüsselte Nachricht in Facebook

Das ganze funktioniert mit einem lokalen Server, auf dem GnuPG installiert ist und der zwei kleine PHP-Scripte bereitstellt. Wenn man auf der Facebook-Nachrichten-Seite einen Text abschickt, wird dieser an das lokale Verschlüsselungs-PHP-Skript übergeben, von diesem verschlüsselt und die verschlüsselte Version an die Facebook-Nachrichten-Seite zurückgegeben. Diese sendet erst dann die nun verschlüsselte Nachricht an den Empfänger. Wenn man sich eine empfangene Nachricht ansieht, wird diese genommen, an das lokale Entschlüsselungs-PHP-Skript übergeben, von diesem entschlüsselt und dann auf der Facebook-Nachrichten-Seite zur Anzeige gebracht.

Entschlüsselte Nachricht in Facebook

Die Besonderheit an der verwendeten Verschlüsselung ist, dass der Schlüsselaustausch relativ einfach möglich ist. Man kann sich das wie einen Briefkasten vorstellen: Jeder hat Zugang zu dem Briefkasten und kann dort eine Nachricht einwerfen, aber nur der Briefkastenbesitzer kann diesen öffnen und die Nachrichten lesen. Genauso verhält es sich bei GnuPG. Es gibt dort zwei Schlüssel, einen "öffentlichen Schlüssel" zum Verschlüsseln von Nachrichten und einen "privaten Schlüssel" zum Entschlüsseln von Nachrichten.

Die Idee ist, dass dem PHP-Script, das die Verschlüsselung vornimmt, sämtliche öffentlichen Schlüssel der angeschriebenen Facebook-Kontakte bekannt sind. Praktisch wäre hier natürlich, wenn es sich diese automatisch irgendwoher besorgen könnte. Das ist jedoch noch nicht implementiert. Das PHP-Script, das die Verschlüsselung vornimmt, muss hingegen den eigenen privaten Schlüssel kennen. Deshalb ist es sinnvoll, dieses Script lokal auf dem eigenen Rechner zu verwenden. Zudem ist es sinnvoll, den privaten Schlüssel noch einmal mit einem Passwort zu versehen.

Warum erzähle ich euch das alles? Ich denke, dass langsam aber sicher etwas getan werden muss. Überall versuchen die Regierungen dieser Welt, immer weiter in den privaten Lebensraum vorzudringen. Das beginnt beim richterlichen Eingriff in die private Kommunikation und hört beim Infizieren von privaten Rechnern mit Schadsoftware durch Bundesbehörden noch lange nicht auf. Ich denke, dass es notwendig ist, dem normalen Internetnutzer Tools an die Hand zu geben, mit denen er sich ohne viel Aufwand vor solchen Eingriffen schützen kann. Und damit meine ich nicht den e-Postbrief oder DE-Mail, die zwar angeblich "sicher" sind, jedoch genau an ihren Übergangspunkten problemlos mitgelesen werden können. Wie man an der länglichen Erklärung oben sieht, ist das jedoch nicht so einfach. Klar, für mich ist es kein Problem, einen Webserver mit PHP einzurichten, GnuPG zu installieren und 2 PHP-Scripte darüber laufen zu lassen. Für andere ist das jedoch unverständliches Hexenwerk. Auch diese Leuten muss man mit einfach nutzbaren und sicheren Lösungen in der heutigen digitalen Welt unterstützen. In meinen Augen ist es deshalb auch sehr wichtig, dass sich diese Lösungen möglichst nahtlos in die vertraute Umgebung einbetten.


Exec() in PHP chroot-Umgebung

23.02.2012 yahe administration legacy linux security

Manchmal ist die Verwendung einer chroot-Umgebung für PHP mehr Fluch als Segen. Auf der einen Seite ist es ein wirklicher Sicherheitsgewinn. Aber auf der anderen Seite findet man immer wieder Kleinigkeiten, die einen eine ganze Weile aufhalten, bevor man bestimmte Funktionen nutzen kann.

Ein Beispiel hierfür ist die "exec()" Funktion, die es ermöglicht, Systembefehle auszuführen und deren Ergebnis auszulesen. Es ist nirgendwo richtig dokumentiert, aber damit sie funktioniert, muss die Binärdatei "/bin/sh" in der chroot-Umgebung zur Verfügung stehen. Anschließend kann mit folgendem Befehl prüfen, welche Bibliotheken mit welchen Pfaden zusätzlich bereitgestellt werden müssen:

ldd /bin/sh

Search

Links

RSS feed

Categories

administration (40)
arduino (12)
calcpw (2)
code (33)
hardware (16)
java (2)
legacy (113)
linux (27)
publicity (6)
review (2)
security (58)
thoughts (21)
windows (17)
wordpress (19)