Profile cover photo
Profile photo
Der PHP Programmierer
15 followers -
PHP Programmierer, Wordpress Programmierer
PHP Programmierer, Wordpress Programmierer

15 followers
About
Der PHP Programmierer's posts

Post has attachment

Post has attachment
World Password Day 2015

Wenn das Passwort „*correcthorsebatterystaple*„ sicherer ist als „*qwER43@!*“ 

Kennt ihr das wenn ihr einen anhänglichen Fetisch habt? Ich habe da so einen. Es geht um Passwortsicherheit. Seit Jahren gilt mein besonderes Interesse dem Einsatz von sicheren Passwörtern. Klar benutze ich weiterhin Dinger wie 123456 und ich sehe darin nichts verwerfliches – solange es natürlich um keine wichtigen Daten geht. 

Für die wichtigen Daten habe ich mir auf der Suche nach einem sicheren PW das dennoch einfach zu merken ist oft den Kopf zerbrochen und würde euch gerne einiges aus meiner Erfahrung weitergeben. 

Zunächst die Frage: Was ist ein wirklich sicheres Passwort?
Wir haben hier „*correcthorsebatterystaple*“ sowie „*qwER43@!*“ als Passwörter. Die Meisten würden vermutlich das letzte Passwort als sicher bezeichnen. Warum? Weil es bereits total fies aussieht und kaum zu merken ist. Aber macht es das zu einem sicheren Passwort? 

Lasst uns einen Blick auf folgendes Web-Comic von xkcd werfen.
xkcd nagelt das Ding. :)

Kommen wir direkt ans eingemachte. Was sollte man vermeiden bei der Wahl eines sicheren Passwortes:

Zu kurze Passwörter. 8 Zeichen sind heute so etwas wie die Standardlänge. Darunter ist einfach nicht zeitgemäß.

Wörter im Wörterbuch vorkommend.
Warum? Wörterbuchattacken. 
Empfehlung: Seltene Wörter, Insiderwitze, kreative Buchstabierungen benutzen.

Muster auf der Tastatur wie: qwertz, asdf, aaaaaa, 654321
Warum? Weil diese beim Knacken direkt zu Beginn berücksichtigt werden und schnell geknackt werden. 
Empfehlung: Höchstens für Wegwerfpasswörter verwenden.

Großschreibung zu Satzbeginn. 
Warum? Weil es berücksichtigt und regelrecht erwartet wird. 
Empfehlung: uNGewöhnliche Großschreibung verwenden

Offensichtliche Zahlen wie Jahreszahlen, Postleitzahlen & Geburtsjahre 
Warum? Weil sie gerne (als Anhängsel) verwendet werden.
Empfehlung: Zahlen einsetzen die keinen privaten Bezug besitzen.

Fehlende Sonderzeichen.
Sonderzeichen sind eine gute Sache. Allerdings benötigt man nicht unbedingt mehr als eines davon. 

Nun wissen wir was in etwa ein sicheres Passwort sein sollte. 

Doch wie merkt man ein sicheres Passwort möglichst effizient?

An dieser Stelle möchte ich mein Vorgehen näherbringen.  Ich habe mir da vor Jahren ein System antrainiert das ich heute noch erfolgreich anwende. 
Das Ganze will ich am Beispiel eines Passwortes für einen Mail Account näherbringen.

Ich benutze zunächst einfach zu merkende Sätze wie:  
Es grünt so grün wenn Spaniens Blüten blühen

Daraus nehme ich dann die Anfangsbuchstaben: „Egsgwsbb“ und füge diesen dann etwas spezifisches wofür das Passwort verwendet soll. In dem Fall ist es für meinen Mail Accont. Also „Ebsgwsbb_Mail“ 
Dazu kommen noch Sonderzeichen vorne wie ein Leerzeichen oder ein Ausrufezeichen zum Beispiel und noch eine Zahl wo man es für klug hält. 
Vóila wir haben ein System wie wir einfach für verschiedene Seiten uns die Passwörter merken können. Auf die Weise habe ich mich auf Seiten mich angemeldet die ich schon 2 Jahre nicht mehr besucht habe aber aus der Domain der Seite war es für mich klar wie wohl das PW heißen könnte. 

Der Vorteil ist klar, wir haben kein Masterpasswort. 
Der Nachteil ist. Wir haben ein Masterschema. Jemand könnte uns auf die Schliche kommen wenn er ein Passwort kennt und das Schema wo anders anwendet. 

Ich hoffe ihr könnt dem System was abgewinnen. Mir hat es sehr geholfen über die Jahre. 

Ansonsten noch einen schönen Word Password Day 2015. Und vergesst nicht eure Passwörter ab und zu zu wechseln.  

Und besucht mal die offizielle Word Password Day Seite. https://passwordday.org/de/

Post has attachment
Der Augenblick, wenn man sich erinnert wie lecker gesundes Essen doch ist...
Photo

Post has attachment
Ich setze ein Zeichen gegen den Blutkrebs #wbcd

Am 28. Mai ist World Blood Cancer Day. Wie ich finde eine wichtige Sache!! Deshalb unterstütze ich dies offen mit einem Blogeintrag und einem & im Avatarbild. :)

Besucht doch Mal die Seite: http://www.dkms.de/worldbloodcancerday

SQL-Injektionen 

Die SQL-Injektion ist eine spezielle Technik bei der Hacker durch die diversen Eingabemöglichkeiten einer Internetseite SQL-Befehle injizieren um SQL Operationen durchzuführen. 

Injizierte SQL-Befehle können die Sicherheit einer Web Applikation kompromittieren und sind eine der häufigeren Web Angriffstechniken um Informationen von einem Server zu stehlen oder den Server vollständig auszulöschen. Ermöglicht wird die Ausführung solcher Befehle durch eine unsachgemäße Programmierung der Web-Anwendungen.

SQL-Injektionen treten insbesondere häufig in PHP Web-Anwendungen aufgrund zahlreicher alter Funktionsschnittstellen. Der Schwere einer solchen Attacke ist hierbei nur von den Fähigkeiten und der Fantasie des Angreifers limitiert. Allgemein gesagt ist eine solche Attacke ein schwerwiegendes Sicherheitsproblem mit weitreichenden Folgen.

Die Hauptgründe einer solchen Verwundbarkeit sind: die Eingabe von Daten nicht vertrauenswürdiger Quellen, dynamisch konstruierte SQL Queries, fehlende Eingabeprüfungen und Filterung. 

Kommen wir zu einem Beispiel anhand eines PHP Codes.

Doch zunächst stellen wir uns eine einfache SQL Query vor, die durch einen GET request die raw Benutzer Daten entgegennimmt. Der Benutzer gibt seine E-Mail sowie Passwort in das entsprechende Login Eingabefeld ein. Gespeichert wird dies Beispielsweise in: 

$_GET['email'] and $_GET['password']. 

Nun meldet sich der Benutzer an. Folgende SQL-Query wird aufgerufen (vereinfacht ausgedürckt):
SELECT * FROM users WHERE email='{$_GET['email']}' AND password='{$_GET['password']}'

Was passiert hier? Die zuvor eingegeben E-Mail Adresse sowie das Passwort werden nun geladen aus der SQL-Datenbank und dargestellt. Allerdings werden die Daten verschlüsselt dargestellt was auch gut so ist. Immerin.

Nun kann der Angreifer jedoch ebenso fiesen Code in der Login Maske einsetzen, welcher weitaus mehr ermöglicht. Zum Beispiel folgende Eingabe in das Passwortfeld:

foobar' OR id='1

womit wir folgende fake SQL-Query erhalten:

SELECT * FROM users WHERE email='some@hacker.email' AND password='foobar' OR id='1'

Womit wir beim Login uns mit dem User mit der ID 1 angemeldet werden. Damit wird auf einfache Weise verdeutlich was für eine Idee hinter SQL-Injektionen steckt. Ein Angreifer kann bei ungenügender Sicherheitsvorkehrung alles eingeben wonach ihm ist. 

Ganz kurz: Was kann man dagegen tun? 
Zum einen die Benutzereingaben ignorieren. Zum anderen bereits vorbereitete Anweisungen nutzen die keine dynamischen SQL-Queries erlauben.   

Sicherheit in Wordpress auf einfache Weise verbessern

Der folgende Artikel zielt nicht darauf ab ein kommerzielles Wordpress Plugin zu promoten. Ziel des Artikels ist die Auflistung einfacher Möglichkeiten um eine Wordpress Seite von den häufigsten Schwachstellen zu befreien. 
Es gibt eine Reihe an besonders häufig vorkommenden Sicherheitsverstößen derer sich Angreifer bemächtigen. Und trotz aller Vorteile bereitet der Umstand der Nutzung eines Open Source CMS ebenfalls für die Angreifer die Möglichkeit sich im Wordpress Quellcode Wissen über die Schwächen des CMS anzueignen. Die aufgeführten Einfallsmöglichkeiten sollen die gängigsten  Angriffe vermitteln und Lösungen bieten diese Schwachstellen aus dem Weg zu räumen.
Abhängig davon was das Primärziel des Angreifers ist gibt es unterschiedliche Angriffstypen. Ich beleuchte die drei häufigsten. 
Erstens: Der volle Zugang zur Wordpress Seite. Das heißt das Erlangen des Admin Passwortes. Dies ist der häufigste Angriff. 
Zweitens: Malware Code injizieren. Um möglicherweise Schadsoftware über die Wordpress Seite zu vertreiben.  
Drittens: DDoS-Angriffe um die Seite durch eine Überbelastung in die Knie zu zwingen, so dass sie von außen für Besucher nicht ansprechbar wird.

Admin Passwort - her damit!

Da es den einfachsten Weg für Angreifer darstellt werden besonders häufig sogenannte Bruteforce-Angriffe (raten von Passwörtern durch häufiges Ausprobieren) eingesetzt um an das Admin Passwort zu gelangen. Nach wie vor ist vielen Admins nicht bewusst, dass Passwörter wie „qwertz“ oder „123456“ innerhalb von Sekunden durch einen einfachen Bruteforce-Angriff geknackt werden können. Ein Einsatz solcher Passwörter schreit von daher an dieser Stelle nach Fahrlässigkeit. Es empfiehlt sich von daher für die Wahl des Passwortes mindestens 10 Zeichen mit Groß- und Kleinschreibung sowie Zahlen. Sonderzeichen wie „!?$%&“ sind natürlich auch nie verkehrt. Ein Passwort wie „1M89iK8e9!“ ist an dieser Stelle sicher genug um eine Bruteforce-Attacke erfolgreich abzuwehren. 
Die nächste Maßnahme gegen Bruteforce-Angriffe stellt die Limitierung von falschen Passworteingaben dar. Da es sich nicht um eine Standard Funktionalität in Wordpress handelt, ist der Download eines geeigneten Plugins notwendig. Belohnt wird man dann mit einer Funktionalität die es dem Angreifer unmöglich macht innerhalb kürzester Zeit Millionen der gängigen Passwörter auszuprobieren, da zum Beispiel 3 fehlerhafte Passwörter die IP-Adresse des Angreifers für 1 Stunde sperren. In diesem Falle verliert der Angreifer bereits das Interesse, da es das nicht wert wäre.
Nicht jeder weiß, dass Wordpress eine API namens xml-rpc besitz mit der das Verfassen von Beiträgen sowie Kommentaren von entfernten Apps möglich ist. Leider ist dies auch eine leichte Möglichkeit für Angreifer an die Login Passwörter ranzukommen. Besser ist es durch ein Plugin das Versenden von Klartext Passwörtern zu unterbinden. Oder falls man ohnehin die xml-rpc API durch eine statische IP-Adresse nutzt direkt folgende htaccess direktive eintragen lassen, damit der Zugriff auf eine bestimmte IP limitiert ist:
 
<Files "xmlrpc.php">
Order Allow,Deny
Allow from xxx.xxx.xxx.xxx (hier deine IP-Adressen eintragen)
</Files>

Dementsprechend ist der Nachteil dieser Maßnahme die Bindung an (eine) bestimmte IP-Adresse(n).
Bei der vierten Möglichkeit um die Passwörter zu schützen geht es um sichere Verbindungen (SSL) zur Login und Admin-Maske. Grundlage für die Nutzung von sicheren Verbindungen ist eine ordnungsgemäße SSL Konfiguration des Servers sowie ein gültiges installiertes Zertifikat auf dem Server. In der wp-config.php wird folgendes eingetragen:

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

Wordpress nutzt an dieser Stelle nun das https-Protokoll anstatt dem http-Protokoll für die Login (wp-login) und Admin-Maske (wp-admin). Was hab ich davon? Nun, die eigenen Kommunikationsdaten können von Fremden in manchen Fällen durch sogenannte „Sniffer-Programme“ mitgeschnitten werden. Die Nutzung einer sicheren Verbindung veranlasst die Verschlüsselung sämtlicher Kommunikation, sodass Passwörter nicht als Klarnamen dem Angreifer zur Verfügung stehen können sollte der Datenverkehr abgefangen werden.

Injizieren von Malware 

Das injizieren von Schadcode ist ebenfalls eine sehr beliebte Möglichkeit deine Webseite zu Hacken. Es gibt zahlreiche Möglichkeiten durch vorhandene Schwachstellen Malware zu injizieren. Lasst uns mit der häufigsten Möglichkeit anfangen. 
Masken. Eingabe-Masken ermöglichen es den Besuchern Feedback zu hinterlassen. Masken werden eingesetzt um neue Benutzer zu registrieren, für den Login, zum Senden von Bestätigungsnachrichten, für die Kontakt Seite, aber auch für das Filtern von Masken auf Produktseiten und darüber hinaus in vielen anderen Bereichen. Allen Eingaben liegt eine gemeinsame Mechanik zugrunde. In den meisten Fällen wird der Masken Inhalt in einer Datenbank gespeichert (insert/update) oder für die Nutzung ausgewählt. Das heißt, der Nutzer kann in die Maske etwas eingeben und andere Nutzer sehen es. Wie zum Beispiel folgenden Javascript Code:

<script>window.location.href = example.com</script>

Wenn nun jemand den obigen Text (genau genommen ist es Javascript Code) eingibt anstelle von zum Beispiel dem Nachnamen und der Server beim Speichern in die Datenbank die Eingabe von HTML Tags bzw. ausführbarem Code nicht säubert, dann findet jedes Mal eine Umleitung der Seite auf example.com statt bei der Darstellung des fälschlicherweise als Nachnamen eingegebenen Codes. Dementsprechend ist der einfachste Weg solche Angriffe zu vermeiden, die Säuberung jeglicher Benutzer Eingaben von ausführbaren Befehlen. 
Ein anderes Beispiel ist die SQL-Injektion. Ziel derer ist ein Angriff auf die sensiblen Informationen deiner Datenbank. Stelle sicher dass du in allen Datenbank Abfragen WP_Query Objekte verwendest (Einstellbar in der $wpdb Globalen Variable). Stelle ebenfalls sicher dass die SQL queries als vorbereitete Anweisungen stattfinden. Das heißt, keine festen Parameterwerte einsetzen, sondern Platzhalter die nachträglich definiert werden. Wordpress erleichtert den Einsatz solcher vorbereiteten Anweisungen durch bereits eingebaute Funktionen. Beispielhaft für die Verwaltung der Optionen Tabelle:
 
add_option ('option_name', 'value'); 
get_option('option_name');

Sowie viele andere Funktionen.

Urls. Urls können ebenfalls Einfallstor für eine Malware Injektion sein. Allgemein gesagt gilt hier dieselbe Vorgehensweise wie beim Missbrauch der Masken. Wenn ein Server Daten in der URL ablegt und diese beim Abruf nicht säubert, kann ebenfalls ein Sicherheitsloch entstehen. Auch hier gilt dementsprechend: URLs säubern vor dem verarbeiten sowie vorbereitete Anweisungen Nutzen. 

Plugins und Themes. Durch das Event basierte Model zieht Wordpress viele Vorteile. Eines davon ist die Verfügbarkeit von vielen hunderttausenden von Plugins und Themes für das CMS. Laut der offiziellen wordpress.org Seite können alle dort aufgelisteten Plugins und Themes für den Produktiven Einsatz eingesetzt werden. Dies ist möglich weil eine Prüfung der Plugins und Themes stattfindet. Allerdings gibt es ebenso zahlreiche Plugins und Themes auf Drittseiten die keiner offiziellen Prüfung unterliegen und dementsprechend Schadcode bereithalten können. Schadcode der deine Seitenaktivität mitschneidet, eMails von deiner Domain versendet oder deine Besucher auf eine andere Seite umleitet und so weiter. Dementsprechend empfiehlt es sich so weit wie möglich die verifizierten Plugins und Themes durch das Wordpress Team einzusetzen, wenn man sich nicht sicher ist um die Herkunft eines Plugins oder Themes. 
Uploads. Bei den Uploads handelt es sich um eine Art von Eingabe Maske. Wenn du dies auf deiner Seite ermöglichst, dann willst du sicherlich nicht, dass deine Seite dadurch lahmgelegt wird. Um ein Hochladen möglichst sicher zu gestalten, empfiehlt es sich die für den Masken Skript die wp_handle_upload() Funktion einzusetzen. Ebenfalls von Belang ist das setzen der MIME Typen der Dateien. Per Standard ermöglicht Wordpress lediglich das Hochladen von Bildern wie jpg, gif, png etc. Beachte hier, dass keine htaccess Datei in dem entsprechenden Ordner der Benutzerdaten hochgeladen werden kann. Denn htacces Dateien könnten zbs folgende Direktive beinhalten:
'AddHandler application/x-httpd-php .png'
Welche dafür sorgen würde, dass PNG Bilder ausgeführt werden könnten wie normaler PHP Code. Sprich, PHP Code in den Meta Daten der Bildbeschreibung einer PNG Datei kann ausgeführt werden und für eine Vielzahl an Missbrauch angewendet werden. 

DDoS-Angriffe – Alle auf einmal!

Den dritten Angriffstyp stellen DDoS-Angriffe dar. Zur Wiederholung: Absicht ist es hier deine Seite oder sogar den ganzen Server durch ständige Anfragen in die Knie zu zwingen, sodass er unerreichbar wird. Ziel solcher Angriffe ist der wirtschaftliche Schaden der Entsteht wenn die Seite nicht für die Besucher verfügbar ist. Es gibt hierzu verschiedene Wege.
Das Senden von zahlreichen gleichzeitigen Anfragen. Dadurch simuliert der Angreifer die Situation von hunderttausenden und millionenfachen zeitgleichen Zugriffen von Nutzern. Ist dein Server nicht in der Lage die Datenflut schnell genug zu verarbeiten, erstickt er an der Menge der Daten. Die gute Nachricht. Solche Angriffe sind für gewöhnlich kostspielig für den Angreifer. Schließlich müssen mehrere tausende IP-Adressen beschaffen werden um es nach außen möglichst authentisch für den Server aussehen zu lassen. Es gibt hierzu leider keine Universallösung durch Wordpress Plugins oder Code die Seite zu schützen. Host Provider bieten solche Dienste für einen Server in der Regel an. Hier empfiehlt es sich zu informieren über die Möglichkeiten des Providers. 
Eine andere Form von DDoS-Angriffen stellt das Vollschreiben des Server-Speichers mit sinnlosen Informationen dar. Ich wette du hast Masken auf deiner Wordpress Seite die Inhalte in einer Datenbank speichern. Stelle dir nun vor wie jemand in eine Maske Millionenfach einen simplen Javascript Code übergibt mit einem Ajax Schleifen Aufruf wie den folgenden:

while(true) {
jQuery.ajax({
     type: 'POST', url: ajaxurl, dataType: 'json', data: formData
});
}

Das Ergebnis ist, dass deine Datenbank in kurzer Zeit mit belanglosen Informationen überläuft und den Dienst früher oder später verweigert. Die Folgen können weitreichend sein für die gesamte Seite. Angefangen von Diensten die nicht mehr nutzbar sind hin zur totalen nicht Erreichbarkeit der Seite. Die gute Nachricht: Wordpress bietet eine einfache und effiziente Lösung dazu. Das wäre zum einen der Einsatz von Captchas. Also der Überprüfung vor dem entgegennehmen von Benutzereingaben ob es sich um einen Menschen oder Bot handelt. Eine andere Möglichkeit ist die Nutzung der Wordpress Funktion wp_nonce() und wp_verify_nonce(). Die Erste Funktion erzeugt einen eindeutigen Schlüssel für jede Anfrage. Die zweite Funktion überprüft den Schlüssel ob veranlasst eine weitere Bearbeitung der Eingabe wenn dieser gültig ist. 

Als Zusammenfassung: Es gibt viele weitere Arten von Schwachstellen welche nicht nur in Wordpress CMS sondern allgemein im Internet von den Angreifern ausgenutzt werden können. Eine 100% Sicherheit gibt es nicht. Beachtet man die Empfehlungen für die am häufigsten ausgenutzten Schwachstellen kann ein Schutz von annähernd 99,9% gewährleistet werden. 

Post has attachment
Wait while more posts are being loaded