Anonymes Webhosting

11 03 2013

Heutzutage ist es leider so, dass man kaum mehr eine Webseite ins Netz stellen kann, ohne ständig Gefahr zu laufen, von schmierigen Anwälten wegen irgend einer Nichtigkeit auf Unsummen verklagt zu werden. Dabei muss man gar keine verbotenen Inhalte auf seiner Seite hosten. Es gibt genügend nette Zeitgenossen, die inzwischen ihr Geld damit verdienen, arglosen Webmastern wegen irgendwelcher Nichtigkeiten den letzten Groschen aus der Tasche zu ziehen. So zog beispielsweise der Westdeutsche Rundfunk den Journalisten Wolf-Dieter Roth vor Gericht, weil dieser wie bei Journalisten häufig so üblich seine Initialen verwendet, die dummerweise denen der Sendeanstalt gleichen.

Was also tun, möchte man nicht tausende von Euro für ein unachtsam eingebundenes Foto hinblättern? Am Besten überhaupt nichts? Das wäre eine Möglichkeit, doch die Internetlandschaft sähe trostlos aus, wenn nur noch große Firmen mit eigener Rechtsabteilung im Netz aktiv sein könnten. Also müssen sich kleine Seitenbetreiber nach Alternativen umsehen. Beispielsweise nach Anonymen.

Nicht nur ist man hierzulande eigentlich verpflichtet, ein vollständiges Impressum in seiner Seite einzupflegen, registriert man sich eine Domain wird gleichzeitig der komplette Name inklusive Adresse öffentlich ins Netz gestellt. Diese Informationen können Betrüger, Spammer und Rechtsanwälte für ihre zwielichtigen Geschäfte nutzen. Glücklicherweise gibt es auch Anbieter, die einen Whois-Schutz offerieren. Für ein paar Euro mehr wird statt des Namens des Besitzers einer Domain ein Strohmann irgendwo im fernen Ausland eingetragen. Der wahre Eigentümer ist somit kaum mehr auffindbar.

Platzhirsch in diesem Umfeld war lange Jahre Mediaon, die in der Türkei ein Rechenzentrum mit eigenen Servern betrieben. Ordern konnte man dort nur eine Domain mit Whos-Schutz oder gleich noch den passenden Webspace dazu. Ein Name wurde für die Bestellung nicht verlangt, anonyme Bezahlmethoden gab es bis hin zur Möglichkeit, Bargeld in einen Briefumschlag zu stecken und diesen ohne Absender zu versenden.

Klar, dass ein solches Angebot auch für allerlei Zwielichtiges, häufig sogar Illegales genutzt wird. Das wurde nun dem Anbieter scheinbar zum Verhängnis. Über Nacht schaltete man sämtliche Server ab und lies die laut eigener Aussagen 15.000 Kunden im Regen stehen. Lediglich die geschützten Domains bietet man weiter an, Webspace gibt es nicht mehr.

Doch es gibt noch Alternativen, die keine Daten ihrer Kunden verlangen. Wichtig ist hierbei immer, dass es auch möglich ist, anonym zu bezahlen. Denn wenn die Kontoinformationen erst gespeichert sind, ist eine Rückverfolgung einfach. Auch die Server sollten im Ausland stehen, so dass die Gefahr nicht zu groß ist, dass die Behörden diese einfach einpacken und die darauf liegenden Logs genauer unter die Lupe nehmen.

Als Beispiel sei myhost.to erwähnt, ein kleiner Reseller der Voxility Srl in Rumänien. Auf der Homepage finden sich mehrere Angebote vom Standard-Hosting über vServer bis hin zu Domains mit Whois Schutz. Der deutschsprachige Support reagiert schnell und kompetent auf Anfragen. Was auch positiv zu bewerten ist, es muss nicht gleich im Voraus auf Jahre hinweg gezahlt werden. Denn wie lange sich so ein Anbieter halten kann ist unter den schwierigen Bedingungen, denen er sich aussetzt fraglich. Außerdem verweist auch das Impressum auf einen Strohmann in der Türkei, weshalb man hier nicht unbedingt große Geldbeträge anlegen sollte. Denn ist der Anbieter einmal weg, wird man dieses kaum mehr zurück fordern können.

Zum Selbststudium sei hier auf ein paar Hoster hingewiesen, die anonymes Webhosting anbieten. Damit ist nicht zwingend auch ein Whois-Schutz gemeint, sondern zunächst die Möglichkeit, Webspace zu bestellen ohne seine Adresse angeben bzw. verifizieren zu müssen. Die genauen Bedingungen sind normalerweise auf der Homepage zu finden, bei Fragen bietet es sich an gleich den Support zu testen und einfach nachzufragen. Mehr Anbieter finden sich über den Suchbegriff „Offshore Hosting„.

2×4.ru
AltusHost
CINIPAC IPC
Coolhousing.net
EasySpeedy
HostingPanama
Hub.org
InfiumHost
InterNOC24
JustHost.in.ua
Katz global Media
LargeServer
MalaysiaHoster
myhost.to
OffShoreHosting24
PIPNI s.r.o.
PRQ
RSAWEB
santrex.net
Shinjiru
TORQhost
UnderHost
WRZHost





Anonyme Zahlungsmittel: Der Kauf von Bitcoins im Detail

27 11 2012

Heute darf ich einen Gastartikel zum Thema Bitcoins präsentieren. Meinen Artikel „Anonyme Bezahlmethoden im Internet“ hat Mira zum Anlass genommen, die Funktionsweise der Plattform bitcoin.de etwas näher zu beschreiben und von ihren eigenen Erfahrungen zu berichten. Natürlich stellt diese Plattform nur eine von mehreren Möglichkeit des Geldtransfers dar, wenngleich diese nicht unbedingt zu größter Anonymität beiträgt ist sie doch sehr einsteigerfreundlich. Nun übergebe ich das Wort auch gleich an Mira.

Am Beispiel der Plattform bitcoin.de soll gezeigt werden wie ein Kauf von Bitcoins genau abläuft. Zunächst muss man sich mit einer gültigen Emailadresse auf der Webseite registrieren. Das zu wählende Passwort muss Zahlen, Ziffern und Sonderzeichen enthalten und ist damit relativ sicher, die Verbindung zum Server erfolgt verschlüsselt. Insgesamt ist das Login-Verfahren damit vergleichbar mit den meisten deutschen Onlinebanken. Nach Registrierung erhält man eine Bestätigungsmail mit einem Link, über den sich der Account freischalten lässt. Um allerdings Bitcoins zu kaufen, muss dem Account ein Bankkonto hinzugefügt und dieses verifiziert werden. Das Konto muss entweder ein deutsches Bankkonto sein oder alternativ wird Liberty Reserve angeboten, ein online Payment System das gegen relativ hohe Gebühren anonyme Transfers ermöglicht. Für die meisten Nutzer wird Liberty Reserve aus Kosten- und Sicherheitsgründen nicht in Frage kommen, daher soll sich dieser Text mit dem Bitcoin-Kauf über ein standard Bankkonto beschäftigen.

Zunächst einmal zu der Einschränkung „deutsches“ Bankkonto: Das Bankgeheimnis in Deutschland ist eines der aufgeweichtesten Weltweit, zahlreiche Behörden inkl. Jobcenter (mit schlecht ausgebildeten Mitarbeitern) haben Zugriff auf Kontodaten. Schon die Möglichkeit der Nutzung eines EU-Bankkontos würde hier ein höheres Maß Anonymität bieten, da die deutschen Behörden im europäischen Ausland nur mit großem Aufwand Zugriff auf die Bankdaten der Kunden erhalten.

Weiter im Vorgang: Um das Bankkonto zu bestätigen überweist Bitcoin.de zunächst einen Betrag von 0,01 Euro auf das angegebene Konto zusammen mit einem Bestätigungscode. Dieser Code muss dann nach Zahlungserhalt auf der Bitcoin-Webseite in ein Freischaltfenster eingegeben werden. Ein Verfahren wie es auch bei anderen Anbietern (Paypal usw.) üblich ist. Auf diese Art und Weise ist dem Betreiber von Bitcoin nun die Identität des Nutzers bekannt und entsprechend der Gesetze auch ausreichend bestätigt.

Nachdem das Bankkonto und damit die Identität bestätigt wurde, kann der Kauf von Bitcoins beginnen. Auf dem „Marktplatz“ der Webseite sieht man, ähnlich wie beim Aktienhandel an der Börse, Käufer und Verkäufer gelistet, zusammen mit den aktuellen Kursen und der verfügbaren Menge an Bitcoins sowie der möglichen Zahlungsmethode. So kann man sich nun beispielsweise entscheiden, ob man vom deutschen User X einen Bitcoin zu 8,95 Euro kauft oder vom Franzosen Y einen Bitcoin zu 8,80. Der Vorteil des Kaufes beim deutschen User besteht nun darin, dass die Überweisung auf ein innländisches Bankkonto in der Regel nicht länger als 2 Tage dauert, oft sogar noch am selben Tag ausgeführt wird und der Verkäufer schon am Folgetag das Geld für seine Bitcoins erhält. Ins europäische Ausland hingegen kann das bis zu einer Woche dauern. Der Vorteil beim Kauf im Ausland besteht wiederum in einer größeren Intransparenz der Transaktion für staatliche Behörden (siehe oberer Absatz).

Nach Überweisung auf das Konto der Verkäufers muss man einen Link anklicken, womit man die vollzogene Überweisung bestätigt. Damit soll verhindert werden, dass der Verkäufer den oder die bezahlten Bitcoins anderweitig verkauft; die bezahlte Menge an Bitcoin ist nun durch Bitcoin.de beim Verkäufer reserviert.

Nun gilt es abzuwarten, denn erst wenn der Betrag auf dem Konto des Verkäufers verbucht wurde und dieser den Geldeingang auch tatsächlich registriert hat (wer loggt sich schon täglich bei seinem Bankkonto ein) kann der Verkäufer dem Bitcoin-Deal zustimmen und Bitcoin.de verbucht den Transfer. Sollte der Verkäufer dem Deal nicht zustimmen hat er Euro auf seinem Konto liegen, muss aber nichts dafür liefern und riskiert lediglich den Rausschmiss bei Bitcoin.de. Damit wären wir auch schon bei den Risiken dieser Transaktion angelangt, die natürlich bei Auslandsüberweisungen wesentlich höher liegen. Insbesondere bei größeren Summen sollte man das Risiko einer Überweisung an eine fremde Person, vor allem wenn die im Ausland sitzt, nicht eingehen. Dieser Nachteil ist allerdings kein Problem der Online-Währung Bitcoin, sondern der Handelsplattform Bitcoin.de. Um das Verfahren des Bitcoin-Kaufes durch Euro zu professionalisieren, sollten hier dringend Sicherheitsmechanismen eingebaut werden. Z.B. könnte die Bitcoin.de GmbH für die Käufe haften und Schadenersatz im Betrugsfalle anbieten, ähnlich wie Paypal das praktiziert.

Insgesamt hat der erste Testkauf von Bitcoin über die Plattform Bitcoin.de 3 Tage gedauert, also etwas länger als eine herkömmliche Banküberweisung und etwas schneller als eine durchschnittliche EU-Überweisung.

Gebühren: Für jede Transaktion verlangt Bitcoin.de pauschal 0,5% Provision, was im Vergleich zu allen anderen Anbietern günstig ist.





Anonyme Bezahlmethoden im Internet

4 11 2012

Mono für Alle! verkaufen Karten für ihre Konzerte im Internet, wo sie dankenswerterweise auch die Anonymität der Käufer ansprechen.

Das Ticket ist anonym. Auf dem Ticket ist nur eine individuelle Ticketnummer gespeichert damit ein Ticket nicht mehrmals benutzt wird. Die Ticketnummer ist in einer verschlüsselten Datenbank mit einer Emailadresse verknüpft […]
Gibt es keine Alternative zu PAYPAL?
A: Bisher leider nicht wirklich. Es wäre natürlich gut wenn es ein freies und anonymes Onlinezahlungssystem gäbe. […]

Gut, unabhängig davon, dass mir nicht klar ist, was eine verschlüsselte Datenbank ist (doch, Oracle Datenbanken kann man mittels Transparent Data Encryption so verschlüsseln, dass selbst der DBA die Inhalte nicht mehr lesen kann – doch das dürfte hier kaum gemeint sein), bemerken sie selbst, dass die Anonymität, die bei den Tickets noch gegeben ist, spätestens ab dem Punkt mit der Zahlung per Paypal ihr Ende findet. Diese Aussage habe ich zum Anlass genommen, hier ein paar mir bekannte anonyme Methoden zur Zahlung im Internet vorzustellen. Bitcoins und die Paysafecard habe ich selbst getestet, bei anderen verlasse ich mich auf Informationen der Anbieter selbst. Grundsätzlich sollte jeder selbst wissen, wem er sein Geld anvertraut.

Kreditkarten sind normalerweise mit allerlei persönlichen Daten des Besitzers verknüpft, anhand derer dieser problemlos zurück verfolgt werden kann. Es existieren allerdings auch Kreditkarten, die man gänzlich anonym erwerben kann. Dabei handelt es sich um Prepaid Kreditkarten, hier muss also der Betrag zunächst aufgezahlt werden, den man anschließend nutzen möchte. In Deutschland ist an solche Angebote im Handel nicht zu kommen, es besteht allerdings die Möglichkeit, sich im nächsten Skiurlaub in Österreich einzudecken oder sich eines der folgenden Angebote von einem Bekannten aus der Alpenrepublik schicken zu lassen.

cash4web Mastercard: Hierbei handelt es sich um keine Karte, sondern um einen Bon des Anbieters PayLife, die man überall dort verwenden kann, wo Mastercard akzeptiert wird. Natürlich kann man den Bon in keinen Automaten schieben. Der Bon ist in Beträgen von 25 bis 150 Euro erhältlich und logischerweise nicht wiederaufladbar.

PayLife MasterCard Geschenkkarte: Die Karte ist mit einem Guthaben von 50 bis zu 150 Euro in Österreichischen Trafiken von tobaccoland erhältlich, eine Ausweiskontrolle findet nach Angaben des Anbieters nicht statt. Auch diese Karte lässt sich nicht wieder aufladen.

In Deutschland findet man beispielsweise die mywirecard 2go Visa, die man als echte Karte zwar anonym an einer Tankstelle oder Kiosk erwerben und bis zu 150 Euro bar aufladen kann, für die Aktivierung muss man sich allerdings eine SMS senden lassen. Dazu wäre also zunächst einmal eine anonyme Handy-Karte vonnöten. Das gleiche Problem zeigt sich auch bei der rein virtuellen Mastercard des selben Anbieters.

Wenig vertrauenserweckend mutet der Webauftritt der Taurus Banque an. Wer den notwendigen Mut mitbringt, kann sich hier eine anonyme Visa oder MasterCard bestellen. Der Vertrieb soll über eine deutsche Firma erfolgen, Versand über einen Kurier. Für weitere Informationen sollte man die Bank idealerweise selbst kontaktieren, im Screenshot finden sich die anfallenden Gebühren.

Taurus Banque

Kommen wir zum virtuellen Geld. In diesem Bereich hat sich Bitcoin einen Namen gemacht. Bitcons sind eine Form von elektronischem Geld, das dezentral auf der Basis eines Computernetzwerks geschöpft wird. Hierzu muss man sich zunächst einen P2P Client herunterladen, der beim ersten Start eine Verbindung zu den anderen Nutzern sucht. Dieser Vorgang ist recht langwierig und kann bei langsameren Computern in der Zwischenzeit die CPU komplett in Beschlag nehmen. Auch sind das Programm und die Nutzungsweise nicht unbedingt selbsterklärend. Es geht aber auch einfacher, auf der Seite bitcoin.de kann man die Bitcoins ohne Verwendung des Programms von anderen Nutzern im Tausch gegen „reales“ Geld erhalten. Dieser Vorgang dauert in aller Regel mehrere Tage, da Geldtransaktionen häufig ins Ausland erfolgen.

Damit das funktioniert, muss man zunächst sein Konto bei bitcoin.de verifizieren lassen. Hier wären wir schon beim großen Nachteil des Systems, denn nach Eingabe der eigenen Bankdaten bekommt man einen Cent mit einem Verifikationscode überwiesen. Somit sind wir natürlich nicht mehr anonym. Nutzen wir den P2P Client, sind die Zahlungen zwar grundsätzlich ohne Angabe persönlicher Daten möglich, allerdings werden alle Transaktionen zwischen zwei Adressen öffentlich protokolliert und dauerhaft im gesamten Netzwerk gespeichert. Die Nutzer lassen sich mit entsprechendem Aufwand der Ermittlungsbehörden also durchaus ausfindig machen. Dieses System bietet von daher keine absolute Anonymität, weshalb von der Nutzung eher abzuraten ist. Außerdem unterliegt die virtuelle Währung gewissen Schwankungen, man kann durch den Einsatz dieses Systems zwar Geld verdienen, aber genauso gut auch verlieren.

Als tatsächlich anonyme Form der Zahlung bleibt nun nicht mehr viel. Zu nennen wären hier im Grunde nur noch die Prepaid-Karten, die ähnlich der Anfangs vorgestellten Prepaid Kreditkarten funktionieren. Die größten Anbieter für Deutschland sind Paysafecard und Ukash mit einem recht breit gefächerten Netz an Partnershops. Man spaziert hier mit Sonnenbrille, Schirmkapuze und Schal bis über die Nase in die Tankstelle bzw. den Kiosk, der möglichst keine Überwachungskameras an der Decke hängen hat und verlangt die entsprechende Karte. Den gewünschten Betrag reicht man dem Verkäufer bar über die Ladentheke und erhält dafür eine Quittung mit einem PIN-Code. Diesen Code kann man dann im Internet-Shop an, der das System natürlich unterstützen muss, und bekommt die zu zahlende Summe abgezogen. Das Restgeld verbleibt für weitere Einkäufe dem eigenen Code zugeordnet. Sind wir hierbei anonym im Internet unterwegs, lässt sich unsere Spur quasi nicht mehr zurückverfolgen.





Hacking – Was ist das eigentlich?

31 10 2012

Allzu oft stelle ich ein eklatantes Missverständnis fest, was es mit dem Begriff des „Hacking“ überhaupt auf sich hat. Da wird vom gehackten Facebook Profil gesprochen oder gefragt, kann man dies oder jenes nicht mal eben hacken? Ich tue mich ziemlich schwer, einem technischen Laien den Sachverhalt näher zu bringen. Heute bin ich über ein tolles Video eines Vortrags von Sebastian Schreiber, Geschäftsführer der SySS GmbH gestolpert. Diese Firma macht nichts anderes, als Sicherheitslücken diverser Software zu suchen, man könnte also behaupten, sie verdienen ihr Geld mit dem Hacken. Das ist sehr schön anschaulich erklärt, weshalb ich auch gleich das Video für sich sprechen lassen möchte.

Index:
03:13 Nokia-Handys als Abhör-Wanzen
08:00 Angriffe gegen Shop-Systeme
13:00 BIOS-Passwortschutz brechen
16:30 USB
25:00 Windows-Passwortschutz brechen / USB
34:26 Barcode-Anagriffe mittels manipulierten Barcodes
39:00 Hardwarespion
44:50 Angriff auf Zahlungssystem (iPayment)
49:15 Angriff auf Lock-Code eines Smartphones
55:40 Überwachungskamera
57:15 „Mogeln bei Moorhuhn“ – der andere Weg zum Highscore
1:01:40 Google-Hacking





Social Web – Die Alternativen: Teil 2 – Filesharing

26 10 2012

Social Web – Die Alternativen: Teil 1 – Chats
Social Web – Die Alternativen: Teil 2 – Filesharing
Social Web – Die Alternativen: Teil 3 – Mikroblogging

Im ersten Teil hatten wir uns angeschaut, wie wir Textnachrichten sicher austauschen können. Doch was ist mit größeren Dateien bzw. Binärdaten? E-Mail ist gänzlich ungeeignet dafür, da das Protokoll weder für den Versand von Dateien gemacht wurde noch eine Sicherheit bietet, dass die Mails (nur) bei dem richtigen Empfänger ankommen. One-Click Hoster scheiden aus, weil dann auch mindestens der Provider, häufig aber die ganze Welt auf unsere Daten zugreifen kann. Und in normalen P2P Netzwerken tummeln sich fette Quallen, die zwar zu doof sind trocken Brot zu schneiden, doch dafür ihre Befriedigung daraus ziehen, uns den ganzen Tag zu überwachen und im Zuge der „Beweissicherung“ selbst die Monitore(!) der Verdächtigten konfiszieren.

Wie schaffen wir es also, unsere Daten ohne die Gefahr eines fremden Zugriffs an den richtigen Empfänger zu versenden? Das Zauberwort heißt Darknet, das auf der Peer-to-Peer (P2P) Verbindung aufbaut, wie sie etwa vom BitTorrent Protokoll eingesetzt wird. In einem Friend-to-Friend (F2F) Netzwerk verbindet man sich ausschließlich mit vertrauenswürdigen Quellen, also idealerweise nur mit Personen, die man auch wirklich persönlich kennt.

Der bekannteste und wohl am weitesten entwickelte Vertreter eines Darknets zum Zwecke des Datentausches ist Freenet, ein komplett verschlüsseltes, dezentrales Netzwerk. Direkt von der Startseite des Projekts kann man sich die unter der GPL Lizenz angebotene Open Source Software installieren. Nach der Installation wird zunächst der Einrichtungsassistent im Browser aufgerufen, wo man seine gewünschte Sicherheitseinstellung wählen kann. Der niedrigere Sicherheitsstandard bietet den Vorteil, dass man sich auch zu fremden Benutzern verbinden kann und somit einen Zugriff auf öffentliche Dateien erhält. Aber Achtung, mit dieser Option verlassen wir das komplett anonyme Darknet! Beim Einrichten haben wir einen Teil unserer Festplattenkapazität zur Verfügung gestellt, den Freenet selbstständig zur Ablage solcher Dateien nutzt.

Beim Start sucht sich Freenet zunächst Knoten, mit denen er verbinden kann. Das dauert seine Zeit und muss bei jedem Neustart wiederholt werden. Ist die Verbindung erfolgt, findet man zumindest bei der niedrigen Sicherheitsstufe Links zu Index-Seiten, die den Einstieg in das anonyme Netz mit Links zu weiteren Angeboten ermöglichen. Hier stehen bereits viele Informationen zur Nutzung des Netzwerks bereit, mit denen man sich zumindest rudimentär auseinander setzen sollte. Auch ein Blick in das Projekt-Wiki kann nicht schaden.

Wir erhalten in der niedrigen Sicherheitsstufe Zugriff auf öffentliche Dateien und können auch selbst solche ins Netz einspeisen. Hier gibt es kaum etwas, was es nicht gibt. Das Spektrum reicht von Bildern über eBooks bis hin zu Multimediadateien. Es ist auch möglich, ganze Webseiten ins Freenet zu spiegeln. Damit sind die Möglichkeiten längst nicht ausgeschöpft, es lassen sich gar E-Mails nutzen, Diskussionsforen oder Chat-Systeme auf Basis des Freenets nutzen. Die Links hierzu finden sich bereits auf der Eingangsseite http://localhost:8888/.

Sehr vielversprechend sieht auch RetroShare aus, ein ebenfalls quelloffenes Programm unter der GNU GPL, das serverlosen, verschlüsselten Dateiaustausch und Instant Messaging ermöglicht. Hier ist es möglich, nicht nur mit direkten Freunden, sondern auch mit deren Freunden (in mehreren Ebenen) zu kommunizieren. Natürlich ist das dann kein wirkliches Darknet mehr, man sollte wie immer einfach wissen was man tut und wem man vertrauen möchte.

Für RetroShare existiert ebenfalls ein Wiki, das die ersten Gehversuche mit dem Programm unterstützt. Nach dem Programmstart wird man zunächst einmal nicht viel sehen. Es ist hier absolute Bedingung, sich mit Bekannten zu verbinden, einen öffentlichen Bereich gibt es nicht. Eine Ersteinrichtung sollte man über den in der linken Seitenleiste zu findenden Schnellstart-Assistenten durchführen. Für das E-Mail System gibt es eine gute deutschsprachige Einführung bei AK Vorrat.

Weitere Programme, die zum anonymen Dateitausch dienen in alphabetischer Reihenfolge. Nur F2F Netze bieten maximale Anonymität, bei den Programmen die dies nicht unterstützen ist die Anonymität lediglich nach außen hin gewährleistet.
Alliance
anoNet (F2F)
Direct Connect (mit privaten Hubs)
Galet (F2F)
Gazzera (F2F)
GigaTribe (sofern keine öffentlichen Communities genutzt werden)
GNUnet (F2F)
Hamachi
Hybrid Share
OneSwarm (F2F)
Turtle F2F (F2F)
waste (F2F, wenn „ping packets“ deaktiviert sind)





Social Web – Die Alternativen: Teil 1 – Chats

10 09 2012

Social Web – Die Alternativen: Teil 1 – Chats
Social Web – Die Alternativen: Teil 2 – Filesharing
Social Web – Die Alternativen: Teil 3 – Mikroblogging

Dass Facebook böse ist, sollte inzwischen auch bei dem letzten Hinterwäldler angekommen sein. Verlinkungen zu entsprechenden Artikeln erspare ich mir hier, da man die Liste mit den Vergehen, die der US-Konzern unseren persönlichen Daten antut fast unendlich erweiterbar wäre. Klar muss lediglich sein, Facebook verdient sein Geld, indem sie möglichst umfassend Daten über uns sammeln. Nur um diese Informationen zu speichern, betreibt der Laden eigene Rechenzentren mit ungeahnten Datenmengen über unser privates Leben.

So weit so schlecht. Nun zwingt einen niemanden, bei Facebook mitzumachen. Die Frage ist nur, warum tut es dann doch praktisch jeder? Weil es keine Alternativen gibt, bekomme ich immer wieder zu hören. Oh doch, die gibt es. Allerdings gehören selbsternannte Experten, die einen Wechsel zu Google+ anraten idealerweise den ganzen Tag geohrfeigt. Das Ziel, das Google mit der Bereitstellung seiner sozialen Plattform verfolgt ist nämlich genau das Selbe. Sammlung unserer Daten. Dann können wir also doch beim blauen Riesen bleiben? Nein!

Doch fangen wir von vorne an. Zu den Zeiten des Web 1.0, vor Erfindung der sozialen Plattformen, da kommunizierten die Menschen in Chats. Teilweise sehr extensiv, das hat heute doch merklich nachgelassen. Tot ist diese Technik deshalb noch lange nicht. Den meisten Chats, die es auch heute noch gibt ist eines gemein: Sie speichern die Logs unserer Unterhaltungen. Die Betreiber und teilweise unabhängige Chat-Admins können also unsere vermeintlich privaten Gespräche mitlesen. Aufgrund fehlender Sicherheitsvorkehrungen bzw. Verschlüsselungen ist es zudem theoretisch für gänzlich unbefugte Dritte möglich, die teils doch sehr persönlichen Diskussionen abzuhören.

Damit dies nicht passieren kann, muss der Traffic zwischen den kommunizierenden Parteien verschlüsselt werden. Als bekanntes Projekt sei Cryptocat genannt, einst ein Webchat, das es inzwischen zur Steigerung der Sicherheit nur noch als Chrome-Plugin gibt, eine Version für Android soll folgen. Sämtliche Informationen werden mit AES-256 stark verschlüsselt über das Netz gesendet. Trotz ein paar kritischer Stimmen, dass auch dieses System angreifbar sei für unsere Zwecke, die wir ja nichts Verbotenes im Schilde führen für den Anfang sicherlich ausreichend.

Nun wollen die Massen aber wohl leider nicht auf die Kommunikation via Facebook verzichten. Bedenke, alles, was du dort schreibst, wandert in die Datenbanken des US Unternehmens. Und fließt von dort weiter in wer weiß welch suspekte Ziele. Doch auch die Facebook Junkies können sich ohne größeren Aufwand schützen. Dazu machen wir uns die Eigenschaft zunutze, für den Chat einen Instant Messenger einsetzen zu können. Hierzu benötigen wir zunächst den Instant Messenger Pidgin. Wie üblich zeige ich die Installation nur unter Linux, dies ist unter Windows natürlich ebenso möglich.

$ sudo apt-get install pidgin

Pidgin ermöglicht es uns, über verschiedene Protokolle zu chatten. Diese sind grundsätzlich nicht wirklich abhörsicher, weshalb wir zusätzlich das Off-the-Record Messaging (OTR) Protokoll zur Nachrichten-Verschlüsselung benötigen.

$ sudo apt-get install pidgin-otr

Wir starten den Messenger. Sofern wir noch kein Konto eingerichtet haben, werden wir gleich aufgefordert, dies zu tun. Im ersten Bildschirm klicken wir auf „Hinzufügen“. In der nächsten Maske füllen wir die Felder im Reiter „Einfach“ gemäß den offiziellen Vorgaben entsprechend aus:

Protokoll: XMPP
Benutzer: Dein Facebook Nutzername, hier zu finden
Domäne: chat.facebook.com
Ressource: Pidgin
Passwort: Dein Facebook Passwort

Den Reiter „Erweitert“ prüfen wir, damit das mit der sicheren Übertragung auch hinhaut.
Verbindungssicherheit: Verschlüsselung benutzen, wenn verfügbar
Verbindungs-Port: 5222
Verbindungs-Server: chat.facebook.com
Proxys für Dateiübertragungen: proxy.eu.jabber.org

Ein Klick auf „Hinzufügen“ erstellt unser Konto. Jetzt aktivieren wir die OTR Erweiterung über das Menü „Werkzeuge“ -> „Erweiterungen“ ([STRG] + [U]) und setzen das Häkchen vor „Off-the-Record Messaging“. Einen Schlüssel benötigen wir noch, also klicken wir auf „Erweiterung einrichten“, dann „Generieren“. Dieses Fenster können wir sodann wieder schließen.

Öffnen wir eine Unterhaltung mit einem Freund, ist diese noch nicht verschlüsselt. Nachdem wir ein paar Worte unverfänglich mit unserem Gegenüber geplaudert haben, können wir diesen im Chatfenster über „OTR“ -> „Buddy authentifizieren“ bestätigen. Absolute Grundvoraussetzung ist natürlich, dass der Gegenpart ebenfalls einen OTR fähigen Client verwendet. Hier haben wir drei Möglichkeiten, welche man davon wählt bleibt einem selbst überlassen. Die Antwort sollte man selbstverständlich gesichert übermitteln, also idealerweise flüstert man sich das gegenseitig ins Ohr. Ist die Authentifizierung geglückt, sollte uns Pidgin eine gesicherte Verbindung anzeigen. Mehr Informationen finden sich auf der offiziellen OTR Projektseite.





Sichere Dateiuploads mit PHP

4 06 2012

Stellen wir auf unserer Homepage den Besucher über einen Dateiupload die Möglichkeit zur Verfügung, eigene Dateien auf unseren Server zu übertragen, ist eine gewisse Vorsicht anzuraten. Immerhin möchten wir keinen ausführbaren Code auf unseren Server eingeschleust bekommen.

Um die übertragenen Dateien zu prüfen, könnten wir beispielsweise auf die Idee kommen, die $_FILES Variable auszulesen, die nach einem Upload vom Server gefüllt wird. Schauen wir uns diese doch anhand eines kleinen Beispiels einmal an.

<!-- Formular, um eine Datei hochzuladen -->
<form enctype="multipart/form-data" action="index.php" method="post">
Datei hochladen: <input name="datei" type="file" /><br />
<input type="submit" />
</form>

<?php
if (!empty($_FILES)){
	var_dump($_FILES);
}

Ausgabe:

Array
(
    [datei] => Array
        (
            [name] => avatar.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpLgZOUQ
            [error] => 0
            [size] => 8801
        )

)

Im vollständigen Beispiel sähe das dann in etwa so aus:

<?php
if (!empty($_FILES)){
	$upload_pfad = 'uploads/';	// Wo sollen die hochgeladenen Dateien abgelegt werden?
	$erlaubte_formate = array('image/gif', 'image/jpeg', 'image/png');	// Erlaubte Dateiformate
	$dateiname = $upload_pfad.basename($_FILES['datei']['name']);	// Dateiname inkl. Pfad

	echo '<p>Erkanntes Dateiformat: '.$_FILES['datei']['type'].'</p>';	// Ausgabe

	if (in_array($_FILES['datei']['type'], $erlaubte_formate)){	// Wenn es sich um eine datei.jpg handelt, gehen wir davon aus, dass es sich um eine Grafik handelt
		if(!move_uploaded_file($_FILES['datei']['tmp_name'], 'uploads/'.$_FILES['datei']['name'])) die('Konnte die Datei nicht hochladen');	// Datei in ihr Verzeichnis schieben
		echo '<img src="'.$dateiname.'" title="Hochgeladenes Bild" />';	// Ausgabe der Datei im Browser
	}
}

Ausgabe:

Erkanntes Dateiformat: image/jpeg

<img src="uploads/avatar.jpg" title="Hochgeladenes Bild" />

Nur leider kommen diese Werte vom Browser und lassen sich von daher relativ einfach manipulieren. Wir können uns darauf also nicht verlassen, da wir böswilligen Angreifern somit Tür und Tor öffnen. Die Unzuverlässigkeit erkennen wir deutlich daran, wenn wir unser Jpeg-Bild umbenennen in avatar.exe und den Upload damit testen.

Ausgabe:

Erkanntes Dateiformat: application/x-ms-dos-executable

An der Datei hat sich nichts geändert außer der Erweiterung. Es handelt sich also weiterhin um die gleiche Grafik, nur mit einem fehlerhaften Namenszusatz. Gefährlicher wird es, wenn beispielsweise eine EXE-Datei umbenannt wird, hier könnte einfach eine Bilddatei vorgetäuscht werden.

Somit erkennen wir schon, dass wir uns auch nicht einfach auf die Dateinamenserweiterung verlassen dürfen. Heißt die hochgeladene Datei schadcode.jpg, können wir keineswegs davon ausgehen, dass drin ist, was drauf steht.

<?php
if (!empty($_FILES)){
	$upload_pfad = 'uploads/';	// Wo sollen die hochgeladenen Dateien abgelegt werden?
	$erlaubte_formate = array('gif', 'jpg', 'png');	// Erlaubte Dateiformate
	$dateiname = $upload_pfad.basename($_FILES['datei']['name']);	// Dateiname inkl. Pfad

	$dateiinfo = pathinfo($_FILES['datei']['name']);
	$dateiformat = $dateiinfo['extension'];	// Auslesen der Dateierweiterung
	echo '<p>Erkanntes Dateiformat: '.$dateiformat.'</p>';	// Ausgabe

	if (in_array($dateiformat, $erlaubte_formate)){	// Wenn es sich um eine datei.jpg handelt, gehen wir davon aus, dass es sich um eine Grafik handelt
		if(!move_uploaded_file($_FILES['datei']['tmp_name'], 'uploads/'.$_FILES['datei']['name'])) die('Konnte die Datei nicht hochladen');	// Datei in ihr Verzeichnis schieben
		echo '<img src="'.$dateiname.'" title="Hochgeladenes Bild" />';	// Ausgabe der Datei im Browser
	}
}

Ausgabe:

Erkanntes Dateiformat: jpg

Auch dies ist keine geeignete Methode, denn die Erweiterung ist schnell verändert. Im Windows lässt sich zwar eine schadcode.jpg nicht starten, weil hier nur bestimmte Dateiformate ausgeführt werden, doch die meisten Webserver laufen unter einem Linux Derivat. Hier ist die Erweiterung vollkommen egal, es kommt nur darauf an, dass die Datei das Executable-Bit gesetzt hat. Im Beispiel sei verdeutlicht, dass auch eine .jpg Datei problemlos ausgeführt werden kann.

$ echo "echo Ich bin ausführbar" >schadcode.jpg
$ chmod u+x schadcode.jpg 
$ ./schadcode.jpg 
Ich bin ausführbar

Von daher sollten wir fremde Dateien niemals auf unserem System ausführen lassen. Idealerweise speichert man diese auch nicht innerhalb der vom Webserver lesbaren Dateistruktur (normalerweise htdocs), so dass diese gar nicht direkt vom Browser aus angesprochen werden können. Über unsere Skripte, die sich ja direkt auf dem Server befinden, sollten je nach Hoster auch andere Verzeichnisse ansprechbar sein. Auf ein Beispiel hierzu verzichte ich, da das etwas zu weit führen würde.

Um das Dateiformat einigermaßen sicher zu bestimmen, müssen wir den MIME Header der Datei lesen. Ab PHP >= 5.3 können wir dazu die finfo_file Funktion mit FILEINFO_MIME_TYPE nutzen. Für ältere PHP Versionen steht das Pendant mime_content_type zur Verfügung.

<?php
if (!empty($_FILES)){
	$upload_pfad = 'uploads/';	// Wo sollen die hochgeladenen Dateien abgelegt werden?
	$erlaubte_formate = array('image/gif', 'image/jpeg', 'image/png');	// Erlaubte Dateiformate
	$dateiname = $upload_pfad.basename($_FILES['datei']['name']);	// Dateiname inkl. Pfad

	$finfo = finfo_open(FILEINFO_MIME_TYPE);	// Gib den MIME Typ zurueck
	if ($finfo !== FALSE && !empty($finfo)){
	   	$dateiformat = finfo_file($finfo, $_FILES['datei']['tmp_name']);
		finfo_close($finfo);
	} else die('Fileinfo Datenbank konnte nicht geoeffnet werden');

	echo '<p>Erkanntes Dateiformat: '.$dateiformat.'</p>';	// Ausgabe

	if (in_array($dateiformat, $erlaubte_formate)){	// Dieser Dateityp entspricht unseren Vorgaben
		if(!move_uploaded_file($_FILES['datei']['tmp_name'], 'uploads/'.$_FILES['datei']['name'])) die('Konnte die Datei nicht hochladen');	// Datei in ihr Verzeichnis schieben
		echo '<img src="'.$dateiname.'" title="Hochgeladenes Bild" />';	// Ausgabe der Datei im Browser
	}
}

Ausgabe:

Erkanntes Dateiformat: image/jpeg
<img src="uploads/avatar.jpg" title="Hochgeladenes Bild" />

Nun sollte man sich auch nicht auf den Mime-Typ alleine verlassen. So würde nämlich auch eine schadcode.exe Datei akzeptiert werden, wenn nur der Mime-Typ passt. Laden wir doch einfach unsere avatar.exe hoch.

Erkanntes Dateiformat: image/jpeg
<img src="uploads/avatar.exe" title="Hochgeladenes Bild" />

Von daher sollte man die Erweiterung anhand des erkannten Typs stets selbst setzen, um absichtliche wie auch unabsichtliche Nutzerfehler zu vermeiden.

<?php
if (!empty($_FILES)){
	$upload_pfad = 'uploads/';	// Wo sollen die hochgeladenen Dateien abgelegt werden?
	$erlaubte_formate = array(
		'image/gif' => 'gif',
		'image/jpeg' => 'jpg',
		'image/png' => 'png');	// Erlaubte Dateiformate. Im multidimensionalen Array sind nun auch die zugehoerigen Dateierweiterungen angegeben

	$dateiname = $upload_pfad.pathinfo($_FILES['datei']['name'], PATHINFO_FILENAME);	// Mit pathinfo holen wir nur den Dateinamen ohne Erweiterung

	$finfo = finfo_open(FILEINFO_MIME_TYPE);	// Gib den MIME Typ zurueck
	if ($finfo !== FALSE && !empty($finfo) > 0){
	   	$dateiformat = finfo_file($finfo, $_FILES['datei']['tmp_name']);
		finfo_close($finfo);
	} else die('Konnte das Dateiformat nicht erkennen');

	echo '<p>Erkanntes Dateiformat: '.$dateiformat.'<br />';	// Ausgabe

	if (isset($erlaubte_formate[$dateiformat])){	// Existiert ein Eintrag mit dem Key?
		$dateiname .= '.'.$erlaubte_formate[$dateiformat];	// Haenge die Erweiterung an den Dateinamen an

		echo 'Ursprünglicher Dateiname: '.$_FILES['datei']['name'].'<br />';
		echo 'Aktueller Name: '.basename($dateiname).'</p>';

		if(!move_uploaded_file($_FILES['datei']['tmp_name'], $dateiname)) die('Konnte die Datei nicht hochladen');	// Datei in ihr Verzeichnis schieben
		echo '<img src="'.$dateiname.'" title="Hochgeladenes Bild" />';	// Ausgabe der Datei im Browser
	}
}

Die Ausgabe, wenn wir wieder unsere avatar.exe hochladen:

Erkanntes Dateiformat: image/jpeg
Ursprünglicher Dateiname: avatar.exe
Aktueller Name: avatar.jpg

<img src="uploads/avatar.jpg" title="Hochgeladenes Bild" />

Abschließend sei noch auf getID3() hingewiesen. Dieses umfangreiche Skript liest die verschiedensten Multimedia-Formate ein und liefert neben den Header Informationen noch viele weitere nützliche Informationen. In unserem Beispiel sähe der Einsatz dann so aus:

<?php
if (!empty($_FILES)){
	require_once('getid3/getid3.php');	// getID3() einbinden
	$getID3 = new getID3;

	$upload_pfad = 'uploads/';	// Wo sollen die hochgeladenen Dateien abgelegt werden?
	$erlaubte_formate = array('image/gif', 'image/jpeg', 'image/png');	// Erlaubte Dateiformate

	$dateiname = $upload_pfad.pathinfo($_FILES['datei']['name'], PATHINFO_FILENAME);	// Mit pathinfo holen wir nur den Dateinamen ohne Erweiterung

	$dateiinfo = $getID3->analyze($_FILES['datei']['tmp_name']);
	var_dump($dateiinfo);

	echo '<p>Erkanntes Dateiformat: '.$dateiinfo['mime_type'].'<br />';	// Ausgabe

	if (in_array($dateiinfo['mime_type'], $erlaubte_formate)){	// Dieser Dateityp entspricht unseren Vorgaben
		$dateiname .= '.'.$dateiinfo['fileformat'];	// Haenge die Erweiterung an den Dateinamen an

		echo 'Ursprünglicher Dateiname: '.$_FILES['datei']['name'].'<br />';
		echo 'Aktueller Name: '.basename($dateiname).'</p>';

		if(!move_uploaded_file($_FILES['datei']['tmp_name'], $dateiname)) die('Konnte die Datei nicht hochladen');	// Datei in ihr Verzeichnis schieben
		echo '<img src="'.$dateiname.'" title="Hochgeladenes Bild" />';	// Ausgabe der Datei im Browser
	}
}

Zur besseren Verdeutlichung erfolgt zunächst die Ausgabe des von getID3() gelieferten Arrays mit den Dateiinformationen. Danach folgt unsere normale Ausgabe. Da auch die Erweiterung geliefert wird, müssen wir diese nicht mehr selbst definieren:

array(11) {
  ["GETID3_VERSION"]=>
  string(14) "1.9.3-20111213"
  ["filesize"]=>
  int(8801)
  ["filename"]=>
  string(9) "phpb1p7Qd"
  ["filepath"]=>
  string(4) "/tmp"
  ["filenamepath"]=>
  string(14) "/tmp/phpb1p7Qd"
  ["avdataoffset"]=>
  int(0)
  ["avdataend"]=>
  int(8801)
  ["fileformat"]=>
  string(3) "jpg"
  ["video"]=>
  array(7) {
    ["dataformat"]=>
    string(3) "jpg"
    ["lossless"]=>
    bool(false)
    ["bits_per_sample"]=>
    int(24)
    ["pixel_aspect_ratio"]=>
    float(1)
    ["resolution_x"]=>
    int(72)
    ["resolution_y"]=>
    int(100)
    ["compression_ratio"]=>
    float(0.4074537037037)
  }
  ["encoding"]=>
  string(5) "UTF-8"
  ["mime_type"]=>
  string(10) "image/jpeg"
}

Erkanntes Dateiformat: image/jpeg
Ursprünglicher Dateiname: avatar.exe
Aktueller Name: avatar.jpg

<img src="uploads/avatar.jpg" title="Hochgeladenes Bild" />

Ist das jetzt wirklich sicher? Einigermaßen, doch muss für die maximale Sicherheit immer der maximale Aufwand betrieben werden. Mit Erkennung des Mime-Headers und idealerweise der Ablage der Dateien außerhalb des Web-Roots sollte man zumindest einigermaßen auf der sicheren Seite sein. Sicherer immerhin, als sich auf die durch $_FILES oder getimagesitze gelieferten Informationen zu verlassen. Letzteres hat sich in der Hinsicht in der Vergangenheit immer wieder durch seine Angreifbarkeit disqualifiziert.