Skip to content

SS2019: Technologierecherche – Sicherheit

javadalamm edited this page May 7, 2019 · 8 revisions

Sicherheit

Was unter Sicherheit zu verstehen ist, lässt sich nicht einfach beantworten. Obgleich sie als „zentraler Wertebegriff demokratischer Gesellschaften“ und „eine der wesentlichen Voraussetzungen aller Bereiche des öffentlichen Lebens“ beschrieben wird, ist Sicherheit begrifflich nicht genau definiert. Doch was Sicherheit konkret bedeutet, wer für Sicherheit sorgen sollte und welches Maß an Sicherheit das richtige ist

Haben Sie Zweifel, ob eine Website sicher ist? Sie befürchten, dass eine zwielichtige Video-Streaming-Website Ihren PC infizieren könnte? Sie suchen nach einem Online-Shop und wissen nicht, wem Sie Ihre Kreditkartendaten anvertrauen können?

Vorsicht ist immer angebracht und es ist von größter Wichtigkeit, zu überprüfen, ob eine Website sicher ist, bevor Sie persönliche Informationen (z. B. Kreditkartennummern, Passwörter, Adressen usw.) übermitteln.

JSON Web Token (JWT)

JWT ist die Abkürzung für “JSON Web Token”, das für den Einsatz im Web konzipiert wurde. Typisches Einsatzgebiet für JWT ist die fortlaufende Authentifizierung bei SSO (“single sign-on”), JWT ist aber flexibel einsetzbar für alle Bereiche, in denen kompakte, signierte und verschlüsselte Informationen übertragen werden müssen.

Wie wird das JWT genutzt

Da JWT erst sinnvoll ist, wenn eine Signatur verwendet wird, muss vor der eigentlichen Nutzung ein Schlüssel (der RFC 7519 spricht vom “secret”) festgelegt werden. Dieser kann – z.B. als Antwort auf ein Login – zwischen den Kommunikationspartnern ausgetauscht werden. Asymmetrische Verfahren werden auch unterstützt, es werden dann die öffentlichen Schlüssel ausgetauscht. Der Schlüssel sollte mindestens über eine gesicherte HTTP-Verbindung (HTTPS) übertragen werden, um ein einfaches Auslesen zu vermeiden. Noch besser ist natürlich der Gebrauch asymmetrischer Verfahren.

Mit dem Austausch des Schlüssels kann nun die Kommunikation zwischen den beiden Partnern durchgeführt werden. Dazu generiert die Applikation für ihren Request den vereinbarten JWT mit dem Schlüssel des Partners und liefert das JWT als Parameter (z.B. ‘jwt’ bei GET-Requests) oder als “Authorization”-Header (bei POST, PUT, OPTIONS, DELETE) an den Partner aus.

Aufbau eines JWT-Token

Das JWT ist ein einfacher String, der als Request-Parameter oder im Header übertragen wird.

Ein JWT hat den folgenden Aufbau:

HEADER.PAYLOAD.SIGNATURE

Ein JWT-Token besteht also aus drei Teilen

  • Header
  • Payload
  • Signatur

Header

Der Header beschreibt den Signatur- und/oder Verschlüsselungsalgorithmus und den Token-Typ. Die Daten werden im JSON-Format abgelegt und Base64-kodiert.

Das vorliegende Beispiel sieht im Klartext so aus:

{"alg":"HS256","typ":"JWT"}

Im Beispiel wurde die Payload des JWT mit HMAC SHA256 (abgekürzt “HS256”) signiert.

Payload

Als Payload wird das JSON-Objekt bezeichnet, das aus einer “beliebigen” Anzahl von Key/Value-Paaren besteht. Diese Key/Value-Paare werden ”Claims” genannt . Der Payload wird ebenfalls Base64-kodiert.

Im Beispiel hat der Payload folgenden Inhalt:

{ "id": "1234567890", "name": "Martha Tester" , "role" :"admin" }

Claims können in drei verschiedene Typen aufgeteilt werden: registrierte, öffentliche und private Claims.

Registrierte Claims

Es handelt sich hierbei um Keys, deren Zweck in einem Standard festgelegt ist. Die Spezifikation definiert, dass alle Claims optional sind! Applikationen können also frei wählen, ob sie diese Felder nutzen. Wenn sie genutzt werden, sind öffentliche Claims wie folgt zu nutzen

  • “iss” (Issuer): identifiziert die Einheit, die das JWT ausgegeben hat; Beispiel: die ID einer bestimmten JIRA-Applikation
  • “sub” (Subject): Dieses Feld wird dazu genutzt, den Nutzer, auf den sich eine Aktion bezieht, zu identifizieren; Beispiel: der Nutzer, der in JIRA eine Aktion ausgelöst hat
  • “aud” (Audience): identifiziert potenzielle Empfänger des JWT
  • “exp” (expiration time): der Zeitpunkt, zu dem das JWT-Token nicht mehr akzeptiert werden darf

Öffentliche (“Public”) Claims

Diese Claims bezeichnen Key/Values, die zusätzlich zum Standard genutzt werden können. Um Kollisionen in der Semantik der Keys ausschließen zu können, sind diese Claims öffentlich registriert.

Private Claims

Hierbei handelt es sich um Keys, die bei verschiedenen JWT-Nutzungen eine unterschiedliche Semantik aufweisen können. Die Keys sind für Parteien gedacht, die über JWT kommunizieren wollen und für ihren Anwendungsfall einen Key explizit vereinbaren wollen. Die Namen sind nicht öffentlich registriert

Signatur

Das letzte Element ist die Signatur, die aus dem Header und der Payload berechnet wird.

content = base64UrlEncode(header) + "." + base64UrlEncode(payload);

signature = HMACSHA256(content, secret);

Auch die daraus entstehende Signatur wird ebenfalls Base64-kodiert und bildet den dritten Abschnitt des JWT.

Vorteile

Im Vergleich zu anderen Optionen überwiegen bei JWT die Vorteile:

  • die einfache Integrierbarkeit in viele Programmiersprachen
  • die zuverlässige Authentifizierung bei gleichzeitigem Reduzieren des Netzwerk-Overheads
  • die Nutzbarkeit im SSO-Fall sowie bei Login-Autorisierungen.
  • Zusätzlich haben die JWTs verglichen mit SAML-Anwendungen den deutlich kleineren Footprint. JSON Web Tokens scheinen demnach für die Nutzer-Authentifizierung in einer Microservice-Umgebung die geeignetste Variante zu sein.

Benutzerauthentifizierung in Microservice-Umgebungen

Quele :https://blog.codecentric.de/2016/11/json-web-token-jwt-im-detail/

https://www.heise.de/developer/artikel/Nutzer-Authentifizierung-in-Microservice-Umgebungen-3651632.html?seite=all

Passwort Hashing

Was ist Passwort Hashing?

Passwort Hashing bedeutet das Anwenden einer Hashfunktion auf ein Passwort. Eine Hashfunktion (“hash'” ist englisch und steht für zerhacken) ist eine sogenannte Streuwertfunktion, die es ermöglichst große Eingabemengen auf (meist kleinere) Zielmengen zu projizieren. Oftmals haben die Zielmengen auch festgelegte Länge.

Für den Secure Hash Algorithm (kurz SHA) beträgt die Länge der Zielmenge z.B. immer 160 Bit, die wiederum oftmals als 40-stellige Hexadezimalzahl notiert wird.

Hat man also das Passwort “Geheim” und wendet darauf SHA1 an, so ergibt sich folgende Ausgabe:

('Geheim') => 4d376b70dad934828fb73fb4aab5d0217ff88d15

Trotz der viel längeren Eingabe hat die Zielmenge immer noch dieselbe Länge von 40 Zeichen. Hieraus ergibt sich ein Problem von Hashfunktionen. Da die Eingabemenge größer sein kann als die Zielmenge, kann es vorkommen, dass zwei unterschiedliche Eingaben den gleichen Hashwert erzeugen. Dies nennt man eine Kollisionen.

Moderne Web-Applikationen bieten häufig die Verwendung von Benutzerkonten an und müssen deshalb unvermeidlich Benutzerdaten speichern. Für die Authentifizierung gegenüber der Web-Applikation werden im Normalfall Benutzernamen und Passwörter verwendet.

Häufig werden Hashfunktionen verwendet, um die gespeicherten Passwörter unkennbar zu machen. Die Wahl der Hashfunktion ist essentiell, da viele weit verbreitete Methoden veraltet sind und somit kaum Sicherheit bieten.

Wenn für kryptologische Hashfunktionen dennoch Kollisionen gefunden werden, dann ist entweder eine Schwachstelle im Algorithmus entdeckt worden oder der Aufwand zum Finden einer Kollision ist im Verhältnis zum technischen Fortschritt nicht mehr groß genug um eine Kollisionsresistenz zu sichern. In diesem Falle spricht man davon, dass der jeweilige Algorithmus “broken” (=zerbrochen, kaputt) ist. Von der Nutzung solcher Algorithmen sollte abgesehen werden. (Dies gilt z.B. auch für die MD5-Funktion.)

Der Hashing Algorithmus MD5 ist immer noch häufig im Einsatz, obwohl bereits 1996 die ersten Schwachstellen in dem Algorithmus entdeckt wurden. Auch der oft verwendete Nachfolger SHA1 weist mittlerweile Sicherheitslücken auf. Als sichere Hashingfunktion kann SHA2, zukünftig SHA-3, angesehen werden.

Wiederholung 0: MD5(password) = 5f4dcc3b5aa765d61d8327deb882cf99

Wiederholung 1: MD5(5f4dcc3b5aa765d61d8327deb882cf99) = 696d29e0940a4957748fe3fc9efd22a3

Wiederholung 2: MD5(696d29e0940a4957748fe3fc9efd22a3) = 5a22e6c339c96c9c0513a46e44c39683

Wiederholung 1000: MD5(addbcea06efdd20f934b35e3b2111e55) = d0fbc0823db90a58f25120f458350723

Hinzufügen von Salt zum Hashing: Eine bessere Möglichkeit, Passwörter zu speichern

Passwortspeicherung mit Hashfunktionen

Der Standard Ablauf zur Verwaltung von Nutzerdaten und Passwörtern unter Verwendung von Hashfunktionen sieht wie folgt aus:

  • Der Nutzer registriert sich mit Nutzernamen und Passwort.
  • Das Passwort wird vorm Speichern in der Datenbank gehasht und nur der Hash wird in der Datenbank abgelegt.
  • Will sich der Nutzer nun einloggen, gibt er Nutzername und Passwort an. Sein Passwort wird wieder gehasht und mit dem Hash verglichen, der in der Datenbank für seinen Nutzernamen abgelegt ist.
  • Stimmen die Hashes überein, wird der Nutzer eingeloggt, anderenfalls erhält er eine Fehlermeldung.

Quele :https://www.securai.de/veroeffentlichungen/blog/sichere-passwort-speicherung-in-web-applikationen/

https://code-bude.net/2015/03/30/grundlagen-sicheres-passwort-hashing-mit-salts/

Cookies

Cookies sind kleine Dateien, die nach dem Besuch einer Internetseite auf dem PC oder Smartphone abgelegt werden. In dieser Datei werden Informationen gespeichert, die im Zusammenhang mit der jeweiligen besuchten Internetseite stehen. Sie merken das z. B. daran, dass Sie beim Ausfüllen des Online-Bestellzettels Daten, die sie einmal eingetragen haben, nicht immer wieder eintippen müssen. In den Browseroptionen können Sie einstellen, ob und von welcher Webseite Cookies gespeichert werden und wann diese gelöscht werden sollen.

Cookies speichern Informationen über den Besuch auf Webseiten, wie Formulardaten oder Suchbegriffe, und ermöglichen so das Protokollieren des Nutzungsverhaltens im Netz. Es empfiehlt sich, Cookies standardmäßig beim Schließen des Browsers oder (sollte man nicht darauf verzichten wollen) zumindest in regelmäßigen Abständen zu löschen, um die Privatsphäre im Internet zu wahren. Alternativ bieten manche Web-Browser hierfür auch einen sogenannten Inkognito oder privaten Modus an.

Zwei Arten von Cookies

Es sind zwei Arten von Cookies zu unterscheiden: Die dauerhaften Cookies und die Session-Cookies.

Dauerhafte Cookies bleiben über Monate oder gar Jahre auf Ihrem Computer – zumindest dann, wenn sie nicht automatisch oder manuell gelöscht werden.

Die Session-Cookies dagegen werden automatisch immer dann gelöscht, wenn der Browser geschlossen wird

Diese nutzten etwa Banken für das Online-Banking. Ein Sicherheitsrisiko stellen diese Cookies nicht dar. Problematisch sind die dauerhaften Cookies. Denn diese können über eine lange Zeit das Nutzungsverhalten des Anwenders protokollieren – etwa, nach welchen Produkten in welchen Online-Shops er sucht.

Ein weiteres Risiko bergen Cookies auf öffentlich zugänglichen Computern. Manche soziale Netzwerke sorgen durch Cookies dafür, dass Anwender angemeldet bleiben, wenn sie nur den Browser geschlossen, sich aber nicht aktiv ausgeloggt haben. Der nächste Benutzer des öffentlichen Computers kann dann im Profil des vorherigen Anwenders stöbern und gegebenenfalls Schaden anrichten

Es gibt verschiedene Möglichkeiten, Cookies in Browsern zuzulassen oder zu sperren. Hier führen wir einige auf. Bitte beachten Sie: Nicht jeder Browser bietet alle Möglichkeiten.

  • Sie können in den meisten Browsern einstellen, dass dauerhafte Cookies automatisch nach jedem Schließen des Browsers gelöscht werden (Session-Cookies werden immer automatisch gelöscht).
  • Sie lassen dauerhafte Cookies prinzipiell zu, stellen den Browser aber so ein, dass sie erst nach Rückfrage gespeichert werden.
  • Sie sperren dauerhafte Cookies, legen auf einer Liste aber Ausnahmen von Webseiten fest, die dauerhafte Cookies anlegen dürfen.
  • Sie lassen dauerhafte Cookies prinzipiell zu, legen auf einer Liste aber Ausnahmen von Webseiten fest, die keine dauerhaften Cookies auf Ihrem Computer anlegen dürfen.

OTP

Ein OTP (One-Time Password, Einmal-Passwort) ist eine automatisch generierte Zahl oder alphanumerische Zeichenkette, mit der sich ein Anwender für eine einzige Sitzung authentifiziert. Auch für Transaktionen verwendet man diese Technologie.Ein One-Time Password ist sicherer als ein statisches Passwort.

OTP-Token haben üblicherweise die Größe einer Taschenuhr. Sie besitzen einen kleinen Bildschirm, der die Zahlen anzeigt. Die Ziffern ändern sich alle 30 bis 60 Sekunden. Hier kommt es darauf an, wie der Token konfiguriert ist. Für eine Zwei-Faktor-Authentifizierung gibt der Anwender seine ID, PIN und das Einmal-Passwort ein, um auf das entsprechende System Zugriff zu erhalten.

HTTPS

HTTP (Hypertext Transfer Protocol) ist das grundlegende Protokoll zum Senden von Daten zwischen Ihrem Webbrowser und den von Ihnen besuchten Websites. Und HTTPS ist die sichere Version davon. (Das „S“ steht einfach für „secure“ (sicher).

HTTPS wird häufig für Online-Banking und -Shopping verwendet, da es Ihre Kommunikation verschlüsselt, um Kriminelle daran zu hindern, vertrauliche Informationen wie Kreditkartennummern und Passwörter zu stehlen.

Woher weiß man aber, ob eine Website HTTPS verwendet? Schauen Sie nach, ob ein Vorhängeschloss in der Navigationsleiste Ihres Browsers angezeigt wird. Wenn ja, wissen Sie, dass die Website, auf der Sie sich befinden, ein vertrauenswürdiges digitales SSL-Zertifikat verwendet – mit anderen Worten, die Verbindung ist geschützt.

Falls Sie das Vorhängeschloss nicht sehen, kaufen Sie besser anderswo ein.

SSO

Single Sign-on (kurz SSO), das bedeutet, man muss sich nur einmal einloggen und schon ist man überall drin. Das ist praktisch. Aber auch gefährlich. Denn das SSO erspart Ihnen das Merken von Zugangsdaten für etliche Dienste – und einem Angreifer das Knacken dieser vielen Zugangsdaten. Der muss auch nur den SSO-Zugang knacken und kommt in Ihrem Namen überall rein

Die Mehrzahl der Asset Manager nutzt im Alltag verschiedenste Programme und Anwendungen. Mit jeder App, jedem Netzwerk und jeder Cloud steigt dabei die Anzahl der Identitäten und Passwörter. Mit der Integration von Single Sign-on, auch „Einmalanmeldung“ genannt, reagiert Architrave auf den Wunsch seiner großen Kunden mit zahlreichen Nutzern. Das Enterprise-Feature sorgt durch den zentralisierten Authentifizierungsprozess für mehr Sicherheit und Komfort – bei Anwendern und Administratoren.

Single Sign-on wird als zentraler Authentifizierungsprozess verstanden. Mit SSO muss sich der Nutzer lediglich einmal bei einem SSO-Provider (auch: Identity Provider) authentifizieren und erhält so Zugriff auf sämtliche benötigten bzw. freigegebenen Anwendungen und Ressourcen – ohne sich dort erneut identifizieren zu müssen. SSO-Anbieter gibt es zahlreiche. Die gängigsten Identity Provider sind Microsoft und Google.

Seitenbetreiber schützen eigene Website oft schlecht

Website-Betreiber sind sich der Risiken eines Hacking-Angriffs auf ihre Webpräsenz zwar bewusst, handeln aber oft nicht danach. 53 Prozent der Betreiber ergreifen keine Maßnahmen zur Website-Sicherheit, obwohl die Angst vor dem Ausfall der Website und der damit einhergehende Reputationsverlust ihnen große Sorgen bereitet. Mit den Ergebnissen der Umfrage unter 6.000 deutschen Website-Betreibern möchte Host Europe dafür sensibilisieren, Online-Auftritte besser zu schützen.

Was können Sie gegen angreifen tun?

  • Verwenden Sie sichere Passwörter

  • Installieren Sie Antivirus-Software auf Ihrem Computer

  • Verwenden Sie Ihre Browser-Sicherheits Tools

  • Prüfen Sie jede URLS zweimal

  • Führen Sie eine Online-Sicherheitsüberprüfung für Websites durch

  • Aktualisieren Sie regelmäßig WordPress und WordPress-Plugins

  • Installieren Sie nur vertrauenswürdige Software auf Ihrem Server

Fragen

  • Welche Maßnahmen sollten Programmierer Webseiten für mehr Sicherheit berücksichtigen?
  • Es ist nicht besser , dass wir nur One Time Password nutzen ?
  • Wie lässt sich Sicherheit gegen Angrifen wirken?
  • Können Cookies Schaden anrichten?