Kategorie-Archiv: Sicherheit

fail2ban und mysql 5.7 – Filter funktioniert nicht direkt

Normalerweise legt man einfach eine neue Datei nach /etc/fail2ban/jail.d/mysql.conf, aktiviert das richtige Jail und schon funktioniert alles. Leider nicht so im Falle von mysql 5.7 – scheinbar hat sich da der Logeintrag etwas geändert. Meine Datei sieht jetzt so aus:

Und den Filter musste ich wie folgt anpassen:

Die erste Zeile habe ich dabei nicht angefasst, sondern nur die zweite hinzugefügt. Statt einer Warning erscheint bei mySQL 5.7 nur noch „Note“. Der reguläre Ausdruck ist natürlich relativ allgemein, aber funktioniert für mich wunderbar. Endlich werden die ganzen Login-Versuche auf root entsprechend geblockt.

Testen kann man das ganze wie folgt:

Bei mir sieht die Ausgabe nun so aus:

Sieht also sehr gut aus!

Kostenlose PlugIns für Lightroom – It’s a trap!

Gestern Abend habe ich nach einem PlugIn für meine Freundin gesucht, mit welchem Sie schönere Online-Gallerien aus Lightroom exportieren kann, in welchen der Kunde direkt die gewünschten Fotos auswählen und zurückmelden kann. Daraufhin bin ich auf fontoGallery (fonto.pl) gestoßen, was angeblich genau dies tut.

Jetzt hatte ich zwar keine Ahnung wie solche PlugIns aufgebaut sind, aber irgendwie wollte ich dann doch mal genauer drauf schauen. In diesem Fall werden auch einfach nur mit LUA-Script HTML-Dateien zusammengebaut und dann per FTP auf einem Server geschoben. Das ganze Auswählen usw. übernimmt viel zu viel Javascript und den Mailversand dann PHP. Weiterlesen…

Sicherheitslücke TC7200 – Benutzerdaten auslesen

Dass der TC7200 von Unitymedia kein Wunderwerk der Technik ist, sollte mittlerweile vielen aufgefallen sein. Vielen Funktionen sind rein dekorativ und haben keinerlei Einfluss, wenn diese verändert werden. Unitymedia selbst nimmt sich dieser Problematik nicht an, und weicht aus, sobald man diese Themen anspricht.

Durch ein anderes Thema im Blog wurde ich von einem Leser darauf hingewiesen, dass der TC7200 eine Sicherheitslücke aufweist. Die Gerätekonfiguration kann ohne vorigen Login einfach heruntergeladen werden. Das heißt, dass jeder Benutzer, welcher Teil des Netzwerks ist, auch die Konfiguration herunterladen kann. Weiterlesen…

Unitymedia – TC7200 mit eigenem Router betreiben

Vor einiger Zeit habe ich mein Paket bei Unitymedia gewechselt. Bisher hatte ich 3Play mit 32Mbit. Irgendwann habe ich mal ein HD-Paket dazu gebucht (mit CI+ Modul). Da ich das Fernsehen aus dem 3Play nicht mehr nutzte, musste eine andere Lösung her – so war ein Wechsel zu 2Play 100 die beste Wahl. Leider bekommt es Unitymedia nicht hin, dass man 3Play 100 mit einem CI+ Modul nutzt (da muss man immer den Receiver nehmen).

Also habe ich nun zwar zwei Verträge, aber das macht es auch ein wenig individueller. Heute habe ich die neue Hardware angeschlossen und alles funktioniert auch wunderbar. Allerdings möchte ich kein extra WLAN aufspannen, und auch sonst keine Funktionalität des TC7200 von Technicolor nutzen. Dafür habe ich schließlich meinen Apple AirPort Extreme schon sehr lange im Einsatz. Außerdem ist dort alles bereits konfiguriert und ich habe keine Lust alle Geräte im Haushalt umzukonfigurieren. Weiterlesen…

Automatische Updates unter WordPress 3.7 (abschalten?)

Das sicher größte Feature von WordPress 3.7 sind die automatischen Updates. In diesem Beitrag möchte ich kurz auf diese eingehen, und erläutern wann sich WordPress automatisch aktualisiert und warum man diese Funktion eventuell abschalten sollte. Grund für den Beitrag sind natürlich meine eigenen Gedanken über dieses Blog, da auch ich eben endlich mal auf Version 3.7 gegangen bin.

Für mich war der erste Grund die Updates abschalten zu wollen, dass ich nicht möchte dass wegen fehlender Kompatibilität zu irgendwelchen PlugIns oder Themes mein Blog nicht mehr erreichbar ist während ich nichts dagegen tun kann und eventuell auch erst sehr spät davon erfahre. Natürlich schließen diese Updates eventuell sehr schwere Sicherheitslücken und von diesem Standpunkt ist es sicherlich auch zu verkraften wenn die Seite durch inkompatible Software mal für ein paar Stunden vom Netz geht. Das Risiko möchte man aber spätestens dann nicht mehr, wenn man etwas mehr Traffic auf der Seite hat. Nun sichert WordPress zwar zu, dass die Updates keine Major-Changes enthalten und, wenn ich ehrlich bin, ist es mir auch so gut wie noch nie passiert dass ein Update Probleme gemacht hat, aber ich möchte es dennoch vermeiden.

Wirklich genial finde ich den Fakt, dass die Entwickler an die fortgeschrittenen Benutzer und andere Entwickler gedacht haben. So werden die automatisch Updates nicht durchgeführt sobald eine Versionskontrolle erkannt wird.

Seit 4 Monaten steht der Beitrag nun schon auf „Entwurf„. Mittlerweile ist WordPress 3.8 erschienen und ich hatte nicht ein einziges Mal ein Problem mit einem Update. Ich muss aber zugeben, dass ich auch nur ein einziges Mal eine Mail zu einem automatisch ausgeführten Update bekommen haben. Das heißt nun entweder, dass die automatisch Updates nur einmal genutzt wurden, oder bei der ersten Aktualisierung die Benachrichtigungen wieder abgeschaltet wurden.

Ich sehe jedenfalls keinen Grund mehr, die automatischen Updates abzuschalten. Falls man es doch tun möchte, muss man in die Config einfach folgendes einfügen:

Eigenes Lizenzsystem mit PHP umsetzen

Mehr aus Neugier möchte ich schon länger ein eigenes Lizenzsystem mit PHP umsetzen. Allerdings hatte ich bis heute noch keine Ahnung wie man so etwas überhaupt angeht oder realisiert. Das Problem dabei ist, dass man bei PHP den Code einfach nach der entsprechenden Logik durchsuchen kann und so das System eventuell sehr leicht umgehen könnte.

Anforderungen und Überlegungen

Im Idealfall kann ich im Schlüssel sogar weitere Informationen hinterlegen – dabei denke ich an einen Lizenznehmer, eine IP-Adresse, Domain oder den Namen des Lizenznehmers. Diese Daten sollen natürlich auch wieder entschlüsselt werden können. Das heißt, dass ich nach Eingabe des Schlüssels dann Texte wie „Lizensiert für Max Mustermann“ einblenden kann. So wäre auch ein Schlüssel denkbar, welcher seine Gültigkeit nach einer bestimmten Zeit wieder verliert.

Es wäre natürlich ein leichtes, wenn man einfach eine API einrichtet welche den Schlüssel validiert. So könnte man immerhin die Logik auf ein zentrales System auslagern, auf das Dritte keinen Zugriff haben. Aus meiner Sicht kommt so ein System aber nicht in Frage. Immerhin möchte auch ich nicht, dass beispielsweise jedes PlugIn in meiner WordPress-Instanz „nach Hause telefoniert“.

Da man für ein symmetrisches Verschlüsselungssystem den Schlüssel im Code hinterlegen müsste, kommt so ein System für mich im ersten Schritt nicht in Frage. In dem Fall wäre es so einfach sich einen neuen Schlüssel zu erstellen, dass sich jeder einen eigenen Schlüssel ganz einfach erstellen kann. Dafür lohnt sich meiner Meinung nach der Aufwand nicht, welcher in so ein System gesteckt werden müsste.

Libraries und Frameworks

Nach einger Recherche im Netz und sehr vielen Infos (die ich Teilweise nichtmal komplett verstanden habe, da es sehr Mathematisch wurde), bin ich auf ein paar PHP-Erweiterungen gestoßen. Folgende Erweiterungen muss ich mir also genauer ansehen und verstehen: OpenSSL, MCrypt. MCrypt fällt dabei scheinbar direkt raus, da nur symmetrische Verschlüsselungen unterstützt werden. Für mein Problem also nicht brauchbar.

OpenSSL entpuppte sich aber schnell als eine super Alternative. Hier muss man als erstes zwei Schlüssel (keys) erstellen – einen privaten (private) und einen öffentlichen (public). Der Vorteil daran: Alles was mit dem public key verschlüsselt wird, kann nur mit dem private key entschlüsselt werden und andersrum. Das heißt, dass die Lizenzinformationen mit dem privaten Schlüssel erstellt werden und dann an den Kunden gegeben werden können. In der Software ist dann der öffentliche Schlüssel hinterlegt. Hier können die entsprechenden Daten aus dem Key entschlüsselt werden. Arbeitet man zusätzlich mit serialize und unserialize, kann man komplette Objekte oder Arrays „als Schlüssel“ verwenden. Natürlich wird der Schlüssel dadurch höchstwahrscheinlich entsprechend länger.

Hier mal ein Beispiel-Roundtrip:

Beispielausgabe:

In der ersten Zeile sieht man den Lizenzschlüssel (welcher dann ja doch relativ lang geworden ist). Ich kenne aber genügend Programme, welche ähnlich lange Schlüssel verwenden. Per Copy-Paste ist das ja auch kein Problem. Zusätzlich sollte man sich Gedanken über Fehleingaben machen und sicherheitshalber Funktionen wie trim() vor der Entschlüsselung verwenden.

Nachteil: Durch Einsatz auf dem Kundensystem liegt natürlich immer der PHP-Code vor. Der Schlüssel kann noch so sicher sein – wird der Code einfach abgeändert und durch ein „return true“ eventuell die ganze Logik vernichten. Um das zu vermeiden könnte man versuchen den PHP-Code zu verschleiern und mit Methoden wie gzinflate, base64_decode, str_rot13 und eval auszuführen. Aber auch das macht es nur komplizierter und ist für Menschen mit Know-How eine eher belächelte Hürde.

Ich würde aber eher auf die Ehrlichkeit der Kunden setzen. In dem Fall bräuchte man nichtmal eine Lizenzierung. Das spart einem nicht nur viel Arbeit, sondern macht es dem Kunden auch sehr viel einfacher. So eine Funktionalität könnte dennoch interessant sein, wenn man für eine Erweiterung „Premium-Funktionalitäten“ freischalten möchte, und der Kunde die Software eh schon im Einsatz hat. In der Regel geht es ja nicht um hochpreisige Software.

Trotzdem sollte man darauf achten, dass die entsprechenden Pakete und PHP-Extensions auf dem Kundensystem verfügbar sind. Ansonsten steht man eh im Regen.

Und: Nie den Private-Key verlieren! :)

Disclaimer: Natürlich bin ich kein Fachmann für Verschlüsselungsalgorithmen und das ist das erste Stück Code was ich in dem Bereich je geschrieben habe. Ich garantiere keine Sicherheit dass es nicht doch einen Weg gibt die Daten anders zu erzeugen oder zu Verschlüsseln, sodass man sich eventuell selber Keys erzeugen kann.

1Password im AppStore aktuell zum halben Preis

Seit ewig langer Zeit habe ich eigentlich nur drei verschiedene Passwörter im Einsatz (je nachdem wie kritisch ich den Verlust des Passwortes einstufen würde). Dass das System alles andere als sicher ist muss ich niemandem lange erklären. Immer wieder werden Datenbanken von Online-Diensten abgezogen und am Ende braucht man nur in einem Forum o.ä. einen Login und hat zu etlichen anderen Diensten vollen Zugriff.

Dem Ganzen System wirken natürlich Passwortspeicher wie 1Password entgegen – fast 50€ wollte ich für die Software dann aber doch nicht ausgeben. Nach einem Vortrag von Fabian Blechschmidt auf der Meet Magento 2013 zum Thema Sicherheit wollte ich mich dann doch endlich mal von meinem System lösen.

Lange Rede kurzer Sinn: Nach einer Suche im Mac AppStore stellte ich fest, dass 1Password aktuell nur ca. 22€ kostet. Da habe ich natürlich nicht lange gezögert und mich einen Abend lang hingesetzt und für alle Dienste neue Zufallspasswörter generiert die ich mir zum Glück nicht mehr merken muss – sicherer und sogar noch einfacher. Was will man mehr?