KAPITEL 4

Identity and Access Management

Das Identity and Access Management (IAM) ist das vielleicht wichtigste Werkzeug unter Ihren Schutzmaßnahmen. Bei Einbrüchen in Webanwendungen sind verloren gegangene oder gestohlene Credentials seit Jahren der häufigste Zugangsweg.1 Haben Angreifer gültige Credentials, um sich an Ihrem System anzumelden, können alle Patches und Firewalls der Welt nichts dagegen tun!

Identity Management und Access Management werden oft gemeinsam behandelt, aber es ist wichtig, sich darüber im Klaren zu sein, dass es sich um unterschiedliche Konzepte handelt:

Beim Authentifizieren beweisen Sie, dass Sie derjenige sind, der Sie vorgeben zu sein. In der realen Welt würde man dafür vielleicht einen Ausweis zeigen, der von einer vertrauenswürdigen Instanz ausgestellt wurde und auf dem Ihr Foto zu sehen ist. Jeder kann sich diesen Nachweis anschauen, Sie anschauen und dann entscheiden, ob Sie wirklich derjenige sind, als der Sie sich vorstellen. Ein Beispiel: Sie fahren zu einer Militärbasis und zeigen Ihren Führerschein, um zu versuchen, sich bei der Wache zu authentifizieren. Die Wache entscheidet sich vielleicht dazu, Ihnen zu glauben, oder sie ist der Meinung, dass das der Führerschein von jemand anderem ist, dass er vielleicht sogar komplett gefälscht ist, oder Sie erfahren, dass hier statt Führerscheinen nur Militärausweise akzeptiert werden.

Bei der Autorisierung geht es um die Möglichkeit, eine bestimmte Aktion auszuführen, und sie hängt im Allgemeinen von einer vorgeschalteten Authentifizierung ab (wir wollen wissen, wer jemand ist). Die Wache der Militärbasis könnte beispielsweise sagen: »Ja, ich glaube Ihnen, dass Sie derjenige auf dem Führerschein sind, aber Sie haben nicht die Erlaubnis, die Basis zu betreten.« Oder Sie erhalten die Erlaubnis, dürfen aber in die meisten Gebäude nicht hinein.

Bei der IT-Sicherheit vermengen wir oft diese beiden Konzepte. So erstellen wir beispielsweise eine Identität für jemanden (mit zugehörigen Credentials, wie zum Beispiel einem Passwort) und erlauben dann implizit jedem mit einer gültigen Identität, auf alle Daten auf dem System zuzugreifen. Oder wir entziehen jemandem den Zugriff, indem wir die Identität der Person löschen – das funktioniert, würde aber einem Zerschneiden des Führerscheins entsprechen, statt einfach nur den Zutritt zu verwehren. Auch wenn diese Lösungen in manchen Fällen passend sein können, ist es wichtig, den Unterschied zu verstehen. Ist es wirklich sinnvoll, jedem User vollständigen Zugriff auf das System zu geben? Was passiert, wenn wir jemandem außerhalb der Organisation eine Identität geben müssen, damit derjenige auf bestimmte Bereiche des Systems zugreifen kann – wird dieser User dann auch automatisch Zugriff auf interne Ressourcen erlangen?

Beachten Sie, dass die Konzepte (und Analogien) sehr schnell kompliziert werden können. Stellen Sie sich beispielsweise ein System vor, bei dem Sie nicht überall Ihren Führerschein vorzeigen, sondern nur ein Access-Badge erhalten, das Sie anderen zeigen, und dazu ein Refresh-Badge, das Sie nur dem Badge-Ausgebenden vorweisen müssen. Das Access-Badge authentifiziert Sie gegenüber jedermann, funktioniert aber nur für einen Tag – danach müssen Sie wieder zum Badge-Office gehen und das Refresh-Badge vorzeigen, um ein neues Access-Badge zu erhalten. Jede Site, der Sie Ihr Access-Badge zeigen, überprüft die Signatur darauf, um dessen Gültigkeit sicherzustellen, und ruft dann eine zentrale Stelle an, um zu fragen, ob Sie auf der Zugangsliste für diese Ressource stehen. Das entspricht der Art und Weise, wie manche IT-Zugangssysteme funktionieren, auch wenn sich Ihr Browser und die Systeme im Hintergrund glücklicherweise um all die Details kümmern!

Ein wichtiges Prinzip beim Identity and Access Management, aber auch in anderen Sicherheitsbereichen, ist, die Anzahl an Organisationen und Personen zu minimieren, denen Sie vertrauen müssen. So müssen Sie beispielsweise außer in Fällen, in denen Zero-Knowledge-Verschlüsselung funktioniert,3 den Authentifizierungs- und Autorisierungsprozessen Ihres Providers dahin gehend vertrauen, dass Ihre Daten vor fremden Augen verborgen bleiben. Sie müssen das Risiko in Kauf nehmen, dass Ihre Daten kompromittiert sind, wenn Ihr Provider vollständig kompromittiert ist. Aber da Sie sich schon dazu entschieden haben, dem Cloud-Provider zu vertrauen, werden Sie vermeiden, weiteren Personen oder Organisationen zu vertrauen, wenn Sie stattdessen das bestehende Vertrauen ohne zusätzliche Risiken nutzen können.4 Stellen Sie sich das wie einen Eintrittspreis vor – sobald Sie den »Preis« gezahlt haben, einer bestimmten Organisation zu vertrauen, sollten Sie das auch ausnutzen und es vermeiden, zusätzliche Risiken in das System zu bringen.

Unterschiede zu klassischer IT

In klassischen IT-Umgebungen geschieht die Zugriffskontrolle oft teilweise über eine physische Zugangskontrolle (wer kann das Gebäude betreten) oder über eine Kontrolle des Netzwerkzugangs (wer kann sich aus der Ferne mit dem Netzwerk verbinden). So könnten Sie beispielsweise auf eine Perimeter-Firewall als zweite Verteidigungslinie setzen, wenn Sie einen Admin feuern und vergessen haben, ihm seinen Zugang zu einem der Server zu entziehen.

Es sei darauf hingewiesen, dass das selbst in einer Nicht-Cloud-Umgebung oft ein sehr geringes Sicherheitsniveau ist – sind Sie sicher, dass der Zugriffsschutz all Ihrer Ethernet-Ports, Wireless Access Points und VPN-Endpoints auch nur einem einfachen Angriff statthält? In den meisten Organisationen kann man fragen, ob man mal kurz die Toilette benutzen darf, um dann auf dem Weg ein Remote Access Device für 5 Euro in einen Ethernet-Port zu stecken. Oder man stiehlt WLAN- oder VPN-Credentials und gelangt ins Netz, ohne auch nur einen Fuß auf das Gelände zu setzen. Die Chancen mögen gering sein, dass einer bestimmten Person die Credentials gestohlen werden, aber die Gesamtwahrscheinlichkeit für unautorisierte Personen im Netzwerk nimmt schnell zu, wenn mehr und mehr Menschen in der Umgebung zu tun haben.5 Das ist in den Cloud-Umgebungen erst recht der Fall, wo der gesamte Zugriff remote geschieht und die Wahrscheinlichkeiten noch höher sind, dass sich unautorisierte Personen in einem angenommen sicheren Netzwerk befinden.

In klassischen Umgebungen geschieht eine Zugriffskontrolle manchmal einfach durch das Zurückziehen der gesamten Identität eines Users, sodass dieser sich gar nicht mehr anmelden kann. Aber in Cloud-Umgebungen würde das oft gar nicht das gesamte Problem lösen. Aus Bequemlichkeitsgründen stellen manche Services langlebige Authentifizierungstoken bereit, die auch dann noch funktionieren, wenn man sich nicht mehr an einer neuen Session anmelden kann. Sofern Sie so sorgfältig sind, einen »Offboarding«-Prozess zu haben, der Anwendungen darüber informiert, dass jemand die Firma verlässt, und die App dann den Zugriff komplett sperren kann, behalten die Personen eventuell auf Dinge Zugriff, den Sie nicht wollen. Denken Sie beispielsweise an einen Webmail-Service: Wann haben Sie das letzte Mal Ihr Passwort eingegeben? Das Ändern des Passworts oder ein Unterbinden des Anmeldens über die Log-in-Seite würde nicht helfen, wenn die Webmail-Provider nicht auch noch während einer Passwort-Änderungsaktion die Zugriffstoken in Ihren Browser-Cookies löschen würden.

Es gibt viele Beispiele für das Abfließen von Daten, weil Amazon-S3-Buckets für den öffentlichen Zugriff freigegeben waren. In jeder Organisation mit ausreichender Größe gibt es aber fast immer auch böswillige Personen im internen Netzwerk, die diese Informationen stehlen könnten – vielleicht sogar ohne dass dies bemerkt wird –, aber die Wahrscheinlichkeit eines Angriffs ist größer, wenn man aus dem Internet an die Daten kommt.

Mit diesen Beispielen will ich zeigen, dass viele Organisationen, die in On-Premises-Umgebungen mit laxen IAM-Schutzmaßnahmen gelebt haben, diese nun für die Cloud signifikant verbessern müssen. Glücklicherweise gibt es Services, die Ihnen das Leben dabei leichter machen.

Lebenszyklus von Identität und Zugriff

Viele Menschen machen den Fehler, IAM nur als Authentifizierung und Autorisierung zu betrachten. Auch wenn beides sehr wichtig ist, enthält IAM darüber hinaus weitere Teile des Identitätslebenszyklus. Im Beispiel des Zutritts zu einer Militärbasis haben wir angenommen, dass Sie – der Anfordernde – schon eine Identität besitzen (Ihren Führerschein). Aber wie haben Sie ihn erhalten? Und wer hat Ihren Namen auf die Liste der Personen gesetzt, die auf der Basis zugelassen sind?

Viele Organisationen handhaben das so lala. Das Anfordern einer Identität geschieht vielleicht durch einen Anruf beim Administrator oder eine Mail an die Administratorin, die dann die Identität genehmigen und erstellen, ohne das Ganze zu dokumentieren. Das mag für sehr kleine Organisationen oder Umgebungen mit geringem Risiko in Ordnung sein, aber oft brauchen Sie ein System, das aufzeichnet, wann jemand Zugriff anfordert, wie sich der Anfordernde authentifiziert hat und wer die neue Identität oder den Zugriff genehmigt hat.

Noch wichtiger ist das Ende des Lebenszyklus. Sie benötigen ein System, das regelmäßig und automatisch prüft, ob die Identität und der Zugriff eines Users weiterhin notwendig sind. Vielleicht hat die Person die Firma verlassen oder die Abteilung gewechselt und sollte nicht länger Zugriff haben. (Oder schlimmer noch: Stellen Sie sich vor, Sie hätten die undankbare Aufgabe, jemanden zu feuern, und stellen einen Monat später fest, dass diese Person aufgrund menschlichen Versagens immer noch Zugriff auf ein wichtiges System hat!)

Es gibt viele verschiedene Versionen eines IAM-Lebenszyklusdiagramms mit unterschiedlichem Detaillierungsgrad. Das Diagramm in Abbildung 4-1 zeigt die minimale Anzahl an Schritten und adressiert sowohl das Erstellen wie auch das Löschen von Identitäten zusammen mit dem Erstellen und Löschen von Zugriffsregeln für diese Identitäten. Identität und Zugriff werden vom gleichen oder von verschiedenen Systemen gehandhabt, aber die Schritte bleiben die gleichen.

image

Abbildung 4-1: IAM-Lebenszyklus

Beachten Sie, dass Sie nicht unbedingt ein schickes automatisiertes System benötigen, um jeden einzelnen dieser Schritte zu implementieren. In einer Umgebung mit wenigen Anfordernden und wenigen Genehmigenden kann ein größtenteils manueller Prozess ausreichen, solange er konsistent implementiert ist und es Kontrollen gibt, um zu verhindern, dass ein einzelner Fehler einer Person zu Problemen führt. Aktuell sind die meisten automatisierten Systeme zum Managen des gesamten Lebenszyklus (häufig als Identity Governance Systems bezeichnet) auf größere Unternehmen ausgerichtet – in der Regel sind sie teuer und nur aufwendig zu implementieren. Aber es gibt einen wachsenden Trend, diese Governance-Lösungen wie andere Services in der Cloud bereitzustellen. Oft sind sie als Teil eines anderen Identity-and-Access-Service enthalten, sodass selbst kleinere Organisationen von ihnen profitieren können.

Es sei auch darauf hingewiesen, dass sich die genutzten Prozesse und Services deutlich unterscheiden können – abhängig davon, was die Entitäten sind. Die IAM-Systeme, mit denen Sie Ihren Mitarbeitenden Zugriff auf Ihren Cloud-Provider und Ihre internen Anwendungen geben, unterscheiden sich signifikant von solchen, bei denen Ihre Kunden einen Endanwenderzugriff auf Ihre Anwendung erhalten. Ich werde im Folgenden zwischen diesen beiden allgemeinen Fällen unterscheiden.

image

Vergessen Sie nicht die Identitäten für nicht menschliche Dinge im System, etwa für Anwendungen. Auch diese müssen wie Identitäten für Menschen gemanagt werden. Viele Teams sind wirklich gut darin, den Zugriff für Personen zu kontrollieren, haben aber nur sehr laxe Regeln für das, was Automationsprozesse dürfen.

Schauen wir uns diese Schritte an. Der Prozess beginnt, wenn jemand oder etwas eine Anforderung einreicht. Das kann die Führungskraft eines neuen Mitarbeitenden sein oder ein Automationsprozess wie Ihr HR-System.

Anforderung

Der Lebenszyklus beginnt, wenn eine Entität eine Identität oder einen Zugriff anfordert. Diese Entität sollte normalerweise auf irgendeine Art und Weise authentifiziert werden. Innerhalb Ihrer Organisation werden Sie keine anonymen Zugriffsanforderungen haben wollen, auch wenn die Authentifizierung in manchen Fällen einfach visuell oder akustisch geschehen kann, um die Person zu erkennen.

Soll ein Zugriff für die allgemeine Öffentlichkeit erfolgen – zum Beispiel für eine Webanwendung –, werden Sie diesen oft mit einer anderen Identität verbinden wollen, zum Beispiel einer bestehenden E-Mail-Adresse oder einer Mobilfunknummer.

Die üblichen Anforderungen sind:

In Cloud-Systemen geschieht der Anforderungsprozess oft »out of Band« also über einen Anfrageprozess innerhalb Ihrer Organisation, der das IAM-System der Cloud noch gar nicht einbezieht.

Genehmigen

In manchen Fällen ist es akzeptabel, einen Zugriff implizit zu genehmigen. Wenn es beispielsweise um eine öffentlich verfügbare Webanwendung geht, wird oft jeder, der das möchte, automatisch Zugriff erhalten, sofern bestimmte Anforderungen erfüllt sind. Bei diesen Anforderungen kann es um Betrugsbekämpfung gehen, wie zum Beispiel eine gültige Mobilfunknummer, E-Mail-Adresse oder Kreditkartennummer anzugeben, ein CAPTCHA oder ein »Ich bin kein Roboter«-Formular abzuarbeiten oder nicht von einem anonymisierenden Ort zu kommen (wie einem VPN-Provider für Endanwender oder einem bekannten Tor Exit Node).

Aber innerhalb einer Organisation sollten die meisten Zugriffsanforderungen explizit bestätigt werden. In viele Fällen sind zwei Genehmigungen vernünftig – beispielsweise von dem oder der direkten Vorgesetzten des Users und von den Verantwortlichen für das System, auf das zugegriffen werden soll. Wichtig ist, dass man sich beim Genehmigen in einer Position befindet, in der man weiß, ob der angeforderte Zugriff sinnvoll und notwendig ist. Das ist ebenfalls ein interner Prozess für Ihr Team, der normalerweise ohne Interaktion mit Ihren Cloud-Providern abläuft.

Erzeugen, löschen, zuweisen oder zurückziehen

Nach der Genehmigung kann das tatsächliche Erzeugen oder Löschen einer Identität und das Zuweisen oder Zurückziehen eines Zugriffs automatisch geschehen. So kann beispielsweise das Anforderungs-/Genehmigungssystem die APIs des Cloud-Providers nutzen, um die Identität zu erstellen oder den Zugriff zu gewähren.

In anderen Fällen kann ein Ticket, eine E-Mail oder eine andere Benachrichtigung erzeugt werden, aufgrund dessen oder deren eine Person manuell etwas tun muss. So muss sich vielleicht ein Admin am Cloud-Portal anmelden, um die neue Identität zu erstellen und ihr einen gewissen Basiszugriff zu gewähren. Automation ist zu bevorzugen, insbesondere für häufig angeforderte Elemente, um die Möglichkeit menschlicher Fehler zu verringern.

Authentifizierung

Die bisher besprochenen Punkte unterscheiden sich nicht wirklich von der Zugriffskontrolle in On-Premises-Umgebungen – bevor eine Identität existiert, müssen Sie sie anfordern, und Sie brauchen einen Prozess, um sie zu erstellen. Aber bei der Authentifizierung fängt es mit den Unterschieden an, weil es so viele mögliche Identitätsservices gibt.

Es ist wichtig, zwischen dem Identity Store und dem Protokoll zu unterschieden. Der Store ist die Datenbank mit allen Identitäten, während das Protokoll zum Authentifizieren von Usern und zum Überprüfen ihrer Identitäten dient – zum Beispiel Open-ID, SAML, LDAP oder andere.

Es gibt verschiedene Cloud-Services, die Ihnen dabei helfen können – abhängig davon, wer authentifiziert wird:

Cloud IAM Identities

Die meisten Cloud-Provider bieten IAM-Services an, die genutzt werden müssen, wenn Sie auf deren Cloud-Services zugreifen wollen. Im Allgemeinen stehen sie ohne weitere Kosten zur Verfügung. Mit ihnen haben Sie eine zentrale Stelle, an der Sie die Identitäten der Cloud-Administratorinnen und -Administratoren in Ihrer Organisation und die ihnen zugewiesenen Zugriffsberechtigungen aller Services des Cloud-Providers managen können.

Das ist eventuell eine große Hilfe. Nutzen Sie Dutzende oder Hunderte Services von einem Cloud-Provider, kann es sehr schwierig sein, einen guten Überblick darüber zu bekommen, welche Zugriffsmöglichkeiten eine bestimmte Person hat, wenn Sie jeden Service einzeln aufrufen müssen. Außerdem kann es kompliziert sein, sicherzustellen, dass Sie alle Zugriffsmöglichkeiten deaktiviert haben, wenn diese Person Ihre Organisation verlässt. Das Zurückziehen von Zugriffsmöglichkeiten ist besonders wichtig, weil viele dieser Services direkt vom Internet aus genutzt werden können!

In Tabelle 4-1 finden Sie Beispiele für Identity-Services zum Authentifizieren Ihrer Cloud-Administratoren und -Administratorinnen bei den Services des Cloud-Providers.

Tabelle 4-1: Identity-Services der Cloud-Provider

Provider

Cloud-Identity-Services

Amazon Web Services

AWS IAM

Microsoft Azure

Azure Active Directory

Google Cloud Platform

Cloud IAM

IBM Cloud

Cloud IAM

Business-to-Consumer und Business-to-Employee

Neben den Identitäten, die Ihre Organisation für den Zugriff auf die Services des Cloud-Providers nutzt, werden Sie auch Identitäten für Ihre Endanwender und Endanwenderinnen managen müssen – egal ob externe Kunden oder Ihre Mitarbeitenden.

Auch wenn Sie das Kundenidentitätsmanagement selbst in die Hand nehmen können, indem Sie einfach in einer Datenbank Einträge mit Passwörtern erzeugen, ist das oft für Ihre Kunden keine gute Experience, weil sie mit noch einem Log-in und einem weiteren Passwort hantieren müssen. Zudem gilt es signifikante Sicherheitsfallstricke zu vermeiden, wenn Sie Passwörter überprüfen (siehe Abschnitt »Passwörter, Passphrasen und API-Schlüssel« auf Seite 83). Es gibt zwei bessere Optionen:

Die Namen dieser Identity-as-a-Service-(IDaaS-)Angebote machen nicht immer klar, was sie tun. In Tabelle 4-2 finden Sie Beispiele großer Cloud-Provider, aber auch von Fremdanbietern. Es gibt in diesem Bereich viele Anbieter, die häufig wechseln, daher will die Tabelle keine Empfehlungen für genau diese Anbieter aussprechen. Bei Business-to-Employee-Szenarien können die meisten dieser IDaaS-Services auch Ihr Mitarbeiterverzeichnis nutzen, zum Beispiel Ihr internes Directory.

Tabelle 4-2: ID-Management-Systeme

Provider

Services zum Management von Kunden- und Mitarbeiteridentitäten

Amazon Web Services

Amazon Cognito

Microsoft Azure

Azure Active Directory B2C

Google Cloud Platform

Identity Platform

IBM Cloud

App ID

Okta

Customer Identity Cloud, Workforce Identity Cloud

Ping

PingOne for Customers, PingOne for Workforce

image

Egal ob Sie selbst Identitäten erzeugen oder einen Cloud-Service nutzen: Sämtliche personenbezogenen Daten, die Sie speichern oder verarbeiten, können gesetzlichen Regelungen wie der DSGVO der EU unterliegen.

Multifaktor-Authentifizierung

Die Multifaktor-Authentifizierung ist eine der besten Möglichkeiten, sich vor schwachen oder gestohlenen Credentials zu schützen. Ist sie sauber implementiert, sorgt sie auch nur für wenig zusätzliche Last bei den Usern. Die meisten der in Tabelle 4-2 aufgeführten Identity-Services unterstützen eine Multifaktor-Authentifizierung.

Die verschiedenen Authentifizierungsfaktoren sind im Allgemeinen wie folgt definiert:

  1. Etwas, das Sie wissen. Passwörter sind dafür das beste Beispiel, aber persönliche Identifikationsnummern (PINs) – die anders als ein Passwort nur zusammen mit einem bestimmten Device in Ihrem Besitz genutzt werden können – erlangen zunehmende Popularität.
  2. Etwas, das Sie haben, zum Beispiel eine Zugangskarte, ein Mobiltelefon oder Daten, die sich nur schlecht auswendig lernen lassen, wie zum Beispiel ein zufällig generierter privater Schlüssel.
  3. Etwas, das Sie sind, zum Beispiel Ihr Fingerabdruck oder eine Gesichts- oder Iriserkennung.

Wie der Name schon sagt, gehört zur Multifaktor-Authentifizierung der Einsatz von mehr als einem dieser Faktoren zur Authentifizierung. Das Verwenden von zwei gleichen Faktoren – zum Beispiel zwei Passwörtern – hilft nicht viel, weil mit einem Angriff gleich beide Passwörter ermittelt werden könnten! Die am häufigsten verwendete Implementierung ist die Zwei-Faktor-Authentifizierung (2FA), die etwas nutzt, das Sie wissen (zum Beispiel ein Passwort), und etwas, das Sie haben (wie zum Beispiel Ihr Mobiltelefon).

image

Bei 2FA ist es nicht erforderlich, dass einer der Faktoren ein Passwort ist. Passwortlose Anmeldungen mit zwei Faktoren (wie zum Beispiel einem physischen Device, das Sie haben, und Ihrem Fingerabdruck zum Entsperren des Device) können durchaus sicherer und bequemer als eine Authentifizierung über ein Passwort sein.

2FA sollte für die meisten Zugriffe der Standard sein. Korrekt implementiert, sorgt es für den Großteil der User für nur sehr wenig zusätzlichen Aufwand. Auf jeden Fall sollten Sie 2FA dort einsetzen, wo die Auswirkungen verlorener oder gestohlener Credentials groß wären, wie zum Beispiel für jeglichen privilegierten Zugriff, das Lesen oder Schreiben kritischer Daten oder den Zugriff auf Systeme (wie zum Beispiel E-Mails), mit denen sich andere Passwörter zurücksetzen lassen. Betreiben Sie zum Beispiel eine Banking-Site, könnten Sie sich dazu entscheiden, dass die Auswirkungen gering sind, wenn jemand einen Kontostand einsehen kann, aber groß (was heißt, dass 2FA erforderlich ist), wenn jemand versucht, Geld zu überweisen. Eine zwingend erforderliche zusätzliche Authentifizierung für risikoreichere Aktivitäten wird als Step-Up Authentication bezeichnet.

Managen Sie eine Cloud-Umgebung, birgt der unautorisierte administrative Zugriff auf das Cloud-Portal oder auf APIs ein sehr hohes Risiko, weil es bei solch einem Angriff im Allgemeinen möglich ist, all Ihre Daten zu kompromittieren. Sie sollten für solche Art von Zugriffen eine Zwei-Faktor-Authentifizierung einschalten – die meisten Cloud-Provider unterstützen das schon nativ. Nutzen Sie Single Sign-On (SSO) (siehe Abschnitt »Single Sign-On« auf Seite 86), führt Ihr SSO-Provider eventuell schon 2FA für Sie durch.

Viele Services bieten mehrere Authentifizierungsmethoden an. Die gebräuchlichsten sind:

Passwörter und Passphrasen (etwas, das Sie wissen)

Ein Passwort ist nicht an ein bestimmtes Device gebunden und funktioniert von überall. Die Probleme mit Passwörtern sind reichlich und wohlbekannt: Viele Menschen wählen Passwörter, die verbreitet sind und sich durch Dictionary-Angriffe aushebeln lassen oder so einfach und kurz sind, dass Brute-Force-Attacken Erfolg haben. Oder sie werden für mehrere Services genutzt, sodass das Kompromittieren eines Service dafür sorgt, dass auch andere (die durch Credential-Stuffing-Attacken ermittelt werden können) kompromittiert sind. Es ist wirklich an der Zeit, keine Passwörter mehr zu nutzen, aber Veränderungen sind immer schwerfällig.

PINs (etwas, das Sie wissen)

Oberflächlich betrachtet, scheinen PINs noch schlimmer als Passwörter zu sein, weil sie im Allgemeinen einfacher sind. Entscheidend bei ihnen ist aber, dass sie nur zusammen mit einem physischen Device nützlich sind. Jemand, der Ihre PIN errät, ohne das zugehörige Device zu besitzen (meist ein Mobiltelefon, ein Laptop oder ein Hardwaresicherheitsschlüssel), kann damit nichts anfangen, was einen erfolgreichen Angriff viel schwieriger macht.

SMS-Nachrichten auf ein Mobilgerät (etwas, das Sie haben)

Diese Methode ist nicht mehr so beliebt, weil sich die Telefonnummer leicht von jemandem (per SIM Cloning oder Nummernportierung) übernehmen oder weil sich die Nachricht abfangen lässt, daher sollte sie bei neuen Umsetzungen nicht mehr zum Einsatz kommen, und bestehende sollten zu einer anderen Methode wechseln. Um die SMS-Nachrichten empfangen zu können, benötigt man zudem Mobilfunkempfang.

Time-based One-time Passcodes, TOTPs (etwas, das Sie haben)

Für diese Methode ist ein Mobilgerät mit einem initialen »Secret« (meist durch einen 2-D-Barcode übermittelt) erforderlich. Das Secret ist eine Formel, mit dem beispielsweise jede Minute ein Einmal-Passwort berechnet wird. Das Einmal-Passwort muss nur für ein oder zwei Minuten sicher aufbewahrt werden, aber mit dem initialen Secret kann jegliches Device gültige Passwörter erzeugen und sollte daher nach der Verwendung zerstört oder an einem sicheren Ort deponiert werden. Nachdem das initiale Secret übermittelt wurde, ist für das Mobilgerät nur noch eine synchronisierte Uhrzeit, aber keine Netzwerkverbindung mehr erforderlich. Der größte Nachteil ist, dass TOTPs für User weniger praktisch sind und sich »abfischen« lassen – ein Angreifer, der Sie dazu bringt, sowohl das Passwort als auch den Passcode auf einer Fake-Site einzugeben, kann Zugriff erlangen.

Hash-based One-time Passcodes oder HOTPs (etwas, das Sie haben)

Diese haben ähnliche Vor- und Nachteile wie die TOTPs, nutzen aber einen Zähler statt der Uhrzeit, sodass keine synchronisierte Uhr notwendig ist. Sie können jedoch aus dem Tritt kommen, wenn zu viele Codes erzeugt, aber nicht genutzt wurden.

Push-Benachrichtigungen auf ein Mobilgerät (etwas, das Sie haben)

Mit dieser Methode stellt eine schon authentifizierte Clientanwendung auf einem Mobilgerät eine Verbindung zu einem Server her, der dann einen einmalig nutzbaren Code zurückschickt oder um Bestätigung bittet. Das ist so lange sicher, wie die Authentifizierung für die schon authentifizierte Clientanwendung sicher ist, erfordert aber einen Netzwerkzugriff für das Mobilgerät. Der größte Nachteil ist, dass ein Angreifer eventuell dazu in der Lage ist, den User dazu zu bringen, einer clever gefälschten Seite zuzustimmen oder ihn durch sehr viele Anfragen dazu zu bringen, irgendetwas abzunicken.

Fingerabdruckleser, Gesichts- oder Retinaerkennung (etwas, das Sie sind)

Diese biometrischen Methoden lassen sich zwar oft mit genug Aufwand täuschen (durch das Herstellen von Replikas des Fingers, Gesichts oder Auges), aber die Implementierungen werden nach und nach besser und sind mittlerweile gut genug, um als einzelner Faktor die meisten Sicherheitsanforderungen zu erfüllen.

Ein Hardware-Device, wie zum Beispiel eines, das die Standards FIDO Universal 2nd Factor (U2F) oder FIDO2 erfüllt (etwas, das Sie haben)

FIDO U2F ist nur ein zweiter Authentifizierungsfaktor, der meist zusammen mit einem Passwort genutzt wird, während FIDO2 als kombiniertes Multifaktor-Device dienen kann, das eine passwortlose Authentifizierung ermöglicht. FIDO2-Devices werden auch als Passkeys bezeichnet (https://oreil.ly/vo9ed). Das ist die bei Weitem beste Option, weil der Passkey weiß, mit welcher Anwendung er redet, und er sich nicht durch Fake-Sites in die Irre führen lässt. Zuerst gab es nur Stand-alone-Hardwaresicherheitsschlüssel, aber die Technologie ist mittlerweile in die meisten Laptops und Mobilgeräte eingebaut. Diese Art von Authentifizierung wird vermutlich in der nahen Zukunft allgegenwärtig sein – integriert in Smartphones und Wearables wie Uhren oder Ringe. Ein FIDO2-Device lässt sich mit einer PIN oder einem biometrischen Faktor entsperren, was zwei Faktoren in einem Device für eine sehr starke, gegen Phishing resistente und passwortlose Authentifizierung ermöglicht.

image

Beachten Sie, dass viele der Methoden, mit denen überprüft wird, ob Sie »etwas haben«, bei Social-Engineering-Angriffen verletzlich sind, wie zum Beispiel, den User unter falschen Vorgaben anzurufen und ihn nach dem Einmal-Passwort zu fragen! Selbst die stärkste Form der Authentifizierung, wie zum Beispiel FIDO2, kann Opfer eines Downgrade-Angriffs sein, bei dem der User auf einer Fake-Seite landet, die schreibt: »Das hat nicht funktioniert, bitte versuche eine andere (unsicherere) Methode.« Neben dem Ausrollen einer Multifaktor-Authentifizierung müssen Sie den Usern auch ein Minimum an Training angedeihen lassen, damit sie die verbreiteteren Angriffe erkennen können.

Alle großen Cloud-Provider bieten Möglichkeiten an, eine Multifaktor-Authentifizierung zu implementieren, auch wenn Google den netteren Begriff 2-Step-Verification nutzt.

Passwörter, Passphrasen und API-Schlüssel

Nutzen Sie eine Multifaktor-Authentifizierung, sind Passwörter oder Passphrasen nicht mehr länger Ihre einzige Verteidigungslinie. Sofern Sie aber nicht zu einem vollständig passwortlosen Modell wechseln, ist es weiterhin wichtig, gute Passwörter zu wählen. Das gilt noch mehr in Cloud-Umgebungen, weil ein Angreifer in vielen Fällen Passwörter von jedem Ort der Welt direkt über das Internet ausprobieren kann.

Eine »Passphrase« ist nur der Begriff für ein längeres, sichereres Passwort, daher werde ich hier den allgemeineren Begriff »Passwort« nutzen. Es gibt zwar viele Ratschläge und Diskussionen über gute Passwörter, meine Empfehlungen für die Wahl von Passwörtern sind aber einfach:

  1. Nutzen Sie niemals gleiche Passwörter, sofern Ihnen nicht egal ist, dass ein unautorisierter User Zugriff auf die Ressourcen erhält, die durch dieses Passwort geschützt sind. Vielleicht verwenden Sie dasselbe Passwort in Dutzenden von Forensystemen, weil Sie es nicht so schlimm fänden, wenn jemand in einem oder allen diesen Foren unter Ihrem Namen posten würde. (Aber auch dann gibt es ein gewisses Risiko, dass der User diesen Zugriff irgendwie ausnutzen kann, um andere Passwörter zurückzusetzen, daher ist es am besten, einfach gar keine Passwörter wiederzuverwenden.) Geben Sie auf einer Seite ein Passwort ein, sollten Sie einkalkulieren, dass die Site-Administratorinnen und -Administratoren böswillig sind und das angegebene Passwort nutzen werden, um in andere Sites einzubrechen.
  2. Wenn Sie keine Passwörter wiederverwenden, werden Sie irgendwann sehr viele Passwörter haben. Nutzen Sie daher ein namhaftes Passwort-Wallet, um sie zu verwalten. Speichern Sie Kopien aller Masterpasswörter oder Wiederherstellungsschlüssel an einem physisch sicheren Ort, wie zum Beispiel in einem guten Safe oder in einem Bankschließfach.
  3. Passwörter, die Sie sich nicht merken müssen (weil Sie sie zum Beispiel aus Ihrem Passwort-Wallet kopieren können), erzeugen Sie mit einem sicheren Zufallsgenerator. 20 Zeichen sind ein gutes Ziel, auch wenn manche Systeme solche langen Passwörter nicht akzeptieren – nutzen Sie dann wenn möglich eine andere Zeichenauswahl.6
  4. Passwörter, die Sie sich merken müssen, wie zum Beispiel das für Ihr Passwort-Wallet, erstellen Sie als Diceware-Passwort aus sechs Wörtern (https://oreil.ly/GvcDi)7 und ergänzen zwischen jedem Wort das gleiche Sonderzeichen, wie zum Beispiel ein Dollarzeichen, ein Gleichheitszeichen oder ein Komma. Generieren Sie ruhig mehrfach solch ein Passwort, bis Sie eines finden, zu dem Sie eine verrückte Geschichte konstruieren können, durch die Sie sich daran erinnern. Das lässt sich schnell auswendig lernen, für eine angreifende Person ist es aber nahezu unmöglich zu erraten. Der einzige Nachteil ist, dass das Eintippen länger dauert, daher werden Sie es nicht immer wieder eingeben wollen!

API-Schlüssel sind Passwörtern sehr ähnlich, aber dafür gedacht, nicht von Menschen, sondern von Automatismen genutzt zu werden. Daher können Sie hier keine Multifaktor-Authentifizierung nutzen. Stattdessen sollte es sich um lange Zufallsstrings handeln (siehe Punkt 3 der obigen Liste). Anders als bei den meisten User-Identitäten, bei denen Sie eine öffentliche User-ID und ein privates Passwort haben, gibt es in solchen Szenarien normalerweise nur einen privaten API-Schlüssel, der dem System mitteilt, wer Sie sind, und Sie gleichzeitig authentifiziert.

Passwörter verifizieren

Vielleicht haben Sie die Aufgabe bekommen, die Passwörter der User zu verifizieren. Das kann komplizierter sein, als es auf den ersten Blick scheint. Sofern das möglich ist, sollten Sie diese Aufgabe vermeiden!

Am einfachsten verifizieren Sie Passwörter, indem Sie eine Liste der User und Passwörter ablegen und dann prüfen, ob das eingegebene Passwort zu dem auf der Liste passt. Das ist aber eine ausgesprochen schlechte Idee, denn wenn eine Person Zugriff auf Ihre Liste erhält, hat sie alles, was sie braucht, um sich als einer dieser User auszugeben!

Eine viel bessere Methode ist, nicht die Passwörter selbst zu speichern, sondern etwas, das genutzt werden kann, um die Passwörter zu verifizieren. Das wird durch die Verwendung eines Einweg-Hashs umgesetzt, den Sie mit einer Funktion ermitteln können, wenn Sie das Passwort haben, der sich aber nicht umgekehrt nutzen lässt, um das Passwort zu erhalten. Der Teufel liegt hier jedoch im Detail – nutzen Sie die falsche Funktion oder die falschen Parameter für die Funktion, kann das Passwort leicht durch einen Brute-Force-Angriff geknackt werden, indem man sehr viele mögliche Passwörter ausprobiert. Sehr gute Hash-Algorithmen wie SHA-256 sind für Passwort-Hashes eine Katastrophe, weil sie sich schon durch ihr Design schnell berechnen lassen.

Aktuell sollten Passwort-Hashes mithilfe von scrypt-, bcrypt-, PBKDF2- oder Argon2-Funktionen mit sinnvollen Parametern gespeichert werden. Die Empfehlungen für Funktionen und Parameter verändern sich mit der Zeit, weil die Cracking-Hardware ausgefeilter wird und Schwächen in Hashing-Algorithmen gefunden werden. Daher müssen Sie Ihre Entscheidungen zumindest jährlich begutachten. Ändern Sie Algorithmen oder Parameter, werden alle neuen Parameter die neuen Methoden nutzen, aber es gibt durch das Design keine Möglichkeit, die alten Hashes in neue Hashes umzuwandeln. Ist eine Änderung sehr dringend (weil es beispielsweise Beweise für einen Einbruch gibt, der Zugriff auf die Passwort-Hashes erlangt haben könnte), müssen Sie sofort alle User-Passwörter zurücksetzen.

Selbst wenn Sie Ihre Hashes sicher ablegen, sollten Sie einen Testmechanismus umsetzen, der User davon abhält, allzu leicht zu erratende Passwörter wie abc123 oder Herbst2018 zu nutzen. Bei Angriffen werden zunehmend Techniken wie das »Password Spraying« genutzt, bei denen ein einfaches Passwort gleichzeitig für Hunderte oder Tausende IDs ausprobiert wird. Dadurch wird oft kein Alarm ausgelöst, weil jede ID nur einen einzelnen fehlgeschlagenen Anmeldeversuch registriert. Sie sollten auch überwachen, ob viele Fehlanmeldungen von einem Ort aus kommen, was oft ein Indiz für Credential-Stuffing-Angriffe ist, bei denen eine Liste mit Passwörtern von einer Site bei einer anderen Site ausprobiert wird.

Nutzen Sie bei Cloud-Services und Anwendungen wenn möglich eine Federated Identity von einem anderen Provider oder einem Consumer/Employee IAM Cloud Service. Für einen Zugriff auf Systemebene verwenden Sie eine schlüsselbasierte Authentifizierung oder eine zentrale Authentifizierung mit einer Prüfung auf sichere Passwörter. Speichern und überprüfen Sie Passwort-Hashes nicht selbst, solange Sie eine gute Alternative dafür haben.

Shared IDs

Shared IDs sind Identitäten, für die mehr als eine Person das Passwort oder andere Credentials besitzt, wie zum Beispiel der eingebaute root- oder Administrator-Account eines Systems. Das kann in Cloud-Systemen genauso wie in On-Premises-Systemen schwierig sein.

Wenn es möglich ist, sollte jeder User und jedes Tool eine eigene ID haben, die nicht von irgendjemand oder irgendetwas anderem genutzt wird. Viele Systeme erlauben es, Usern eine privilegierte Rolle oder für manche Aktivitäten eine ID mit mehr Berechtigungen zuzuweisen, wie dies beispielsweise durch sudo auf unixoiden Systemen der Fall ist. Müssen Sie Shared IDs verwenden, ist es notwendig, genau sagen zu können, welches Individuum (oder welches automatisierte Tool) die ID für einen Zugriff genutzt hat.

Beim gemeinsamen Verwenden einer ID (wie zum Beispiel root) hat das System, auf dem Sie die Shared ID nutzen, keine Möglichkeit, zu erkennen, wer sich da gerade angemeldet hat. Sie benötigen also einen eigenen Prozess und dazu passende Tools, um die gemeinsam genutzten Credentials auszuchecken und sie danach zu ändern, wenn sie wieder eingecheckt werden. Solche Tools werden meist als Privileged-Access-Management- (PAM-) oder Privileged-Identity-Management-(PIM-)Systeme bezeichnet, die auch noch andere Funktionen erfüllen können, wie beispielsweise das Aufzeichnen der Session oder das Verhindern bestimmter Befehle.

Federated Identity

Eine Federated Identity ist keine bestimmte Technologie, sondern ein Konzept. Dabei können Sie Identitäten auf zwei verschiedenen Systemen haben, und die Administrationsteams dieser Systeme nutzen Technologien, die diese Identitäten miteinander verknüpfen. So müssen Sie nicht jeweils manuell Accounts auf jedem System erstellen. Aus der Sicht des Users haben Sie nur eine einzige Identität.

In der Praxis bedeutet das im Allgemeinen, dass sowohl Firma A als auch Firma B Ihre Firmen-E-Mail-Adresse, etwa user@company-a.com, als Ihre Identität nutzen und Firma B sich an Firma A wendet, um Sie zu authentifizieren. Firma A wird dann eine Assertion oder ein Token mit ihrem Gütesiegel zurückschicken: »Ja, das ist tatsächlich user@company-a.com; wir haben das überprüft, hier ist unsere Signatur, um zu beweisen, dass wir es sind, und Sie haben schon zugestimmt, dass Sie uns vertrauen, User zu authentifizieren, dessen Identität auf @company-a.com endet.«

Single Sign-On

Single Sign-On (SSO) ist ein Satz von Technologieimplementierungen, die auf dem Konzept der Federated Identity aufbauen.

In der schlechten alten Zeit besaß jede Website eine eigene Kombination aus Log-in und Passwort. Das sind dann ganz schön viele Passwörter, um die sich die User kümmern müssen! Das vorhersehbare Ergebnis ist, dass die User häufig die gleichen Passwörter auf mehreren Sites nutzten, sodass diese nur so gut geschützt waren wie die schwächste Site.

Auftritt SSO: Die Idee ist, dass eine Website nicht nach der ID und dem Passwort des Users fragen, sondern den User stattdessen an einen zentralen Identity Provider (IdP) weiterleitet, dem sie vertraut. (Beachten Sie, dass der Identity Provider nicht einmal Teil der gleichen Organisation sein muss – die einzige Anforderung ist, dass die Website ihm vertraut.) Der IdP kümmert sich um das Authentifizieren des Users, zum Beispiel per Username und Passwort sowie hoffentlich einem zusätzlichen Faktor. Dann schickt er den User zurück an die ursprüngliche Website und gibt dabei den Beweis mit, dass er den User überprüft hat. Manchmal wird der IdP auch noch Informationen (wie Gruppenmitgliedschaften) mitliefern, durch die die Website Autorisierungsentscheidungen treffen kann, zum Beispiel ob der User normaler User, Administrator oder gar nichts sein sollte.

SSO funktioniert meist nur mit Websites und mobilen Anwendungen, auch wenn sich das langsam ändert. Eventuell brauchen Sie ein anderes Protokoll (wie LDAP, Kerberos, TACACS+ oder RADIUS), wenn Sie eine zentrale Authentifizierung für Nicht-Web-Assets wie Netzwerk-Devices oder Betriebssysteme durchführen wollen.

Sie finden kaum etwas anderes, das für die User einfacher ist und eine bessere Sicherheit bietet! Die User müssen sich nur einen Satz Credentials merken, und weil diese Credentials nur der Identity Provider zu Gesicht bekommt (und keine der einzelnen Sites), würde eine kompromittierte Site nicht die Credentials der User kompromittieren. Zudem kann Ihr SSO-Provider Schutzmaßnahmen implementieren, die sich an anderen Zero-Trust-Prinzipien orientieren, wie zum Beispiel der Prüfung, ob ein ungemanagtes oder veraltetes Device genutzt wird oder ob die Credentials des Users gleichzeitig aus zwei verschiedenen Ländern zum Einsatz kommen. Solche Schutzmaßnahmen lassen sich für einzelne Anwendungen nur schwer umsetzen.

Der einzige Nachteil von SSO ist, dass es für eine Website etwas aufwendiger zu implementieren ist als schlechtere Authentifizierungsmechanismen (wie das Vergleichen mit einem Klartextpasswort oder einem unsicher gehashten Passwort in einer Datenbank).

SAML und OIDC

Aktuell sind die Security Assertion Markup Language (SAML – die Abkürzung reimt sich auf »Camel«) und OpenID Connect (OIDC) die verbreitetsten SSO-Technologien. Die Endergebnisse sind zwar gleich, aber die verwendeten Mechanismen unterscheiden sich durchaus.

SAML gibt es seit 2005 und aktuell in der Version 2.0. Es ist eine der verbreitetsten SSO-Technologien – vor allem bei Anwendungen für große Unternehmen. Es gibt viele ausführliche Beschreibungen zur Funktionsweise von SAML, aber hier will ich eine sehr vereinfachte liefern:

  1. Sie rufen mit Ihrem Webbrowser eine Webseite auf, auf die Sie zugreifen wollen (einen Service Provider oder SP).
  2. Die SP-Webseite sagt: »Hey, Sie haben kein SAML-Cookie, daher weiß ich nicht, wer Sie sind. Gehen Sie hier weiter zu der Webseite dieses Identity Provider und holen Sie sich eines.« Dann werden Sie dorthin weitergeleitet.
  3. Sie kommen zum IdP und melden sich mit Username, Passwort und hoffentlich einem zweiten Faktor oder über eine passwortlose Methode an.
  4. Wenn der IdP davon überzeugt ist, dass es wirklich Sie sind, erhält Ihr Browser ein Cookie mit einer kryptografisch signierten XML-Assertion, die sagt: »Ich bin der Identity Provider, und dieser User ist authentifiziert.« Dann werden Sie zur ursprünglichen Seite zurückgeleitet.
  5. Ihr Webbrowser gibt dieses Cookie zurück an die erste Webseite (SP). Der SP prüft die kryptografische Signatur und sagt: »Sie haben es geschafft, den IdP von Ihrer Identität zu überzeugen – das reicht mir. Willkommen!«

Nachdem Sie sich einmal angemeldet haben, funktioniert alles eine Weile automatisch, bis dieses Assertion-Dokument abgelaufen ist – dann müssen Sie sich erneut beim IdP anmelden.

Es sei hier noch erwähnt, dass es nie eine direkte Kommunikation zwischen der initialen Webseite und dem Identity Provider gibt – Ihr Browser muss die ganze Arbeit erledigen und die Informationen von einem Ort zum anderen tragen. Das kann in manchen Fällen wichtig sein, in denen die Netzwerkkommunikation eingeschränkt ist.

Beachten Sie auch, dass SAML aufgrund ihres Designs nur Identitätsinformationen liefert. Sie beantwortet nicht die Frage, ob Sie dazu autorisiert sind, sich anzumelden oder andere Aktivitäten auszuführen, auch wenn manche SAML-Implementierungen zusammen mit der Assertion zusätzliche Informationen (etwa eine Gruppenmitgliedschaft) mitgeben, die von der Anwendung genutzt werden können, um Autorisierungsentscheidungen zu treffen.

OpenID Connect ist ein deutlich neuerer Authentifizierungslayer, der 2014 fertiggestellt wurde und auf OAuth 2.0 aufsetzt. Er verwendet kein XML, sondern JSON Web Tokens (JWTs, manchmal auch »Jots« ausgesprochen), und nutzt etwas andere Begriffe (so gibt es bei OIDC beispielsweise meist die »Relying Party«, die dem »Service Provider« in SAML entspricht).

OIDC bietet sowohl Authorization Code Flows (für klassische Webanwendungen) als auch Implicit Flows (für Anwendungen, die auf der Clientseite in JavaScript implementiert sind). Es gibt zwar diverse Unterschiede zu SAML, aber im Endergebnis erhält die zu authentifizierende Anwendung auch hier niemals Ihr Passwort, und Sie müssen sich nicht für jede Anwendung neu authentifizieren.

Manche Services können Requests von mit OIDC zusammenspielenden Anwendungen annehmen und diese für einen SAML-IdP »übersetzen«. In größeren Organisationen kommt es oft vor, dass beide Standards im Einsatz sind, und die meisten IdPs unterstützen auch beide.

SSO mit Legacy-Anwendungen

Was müssen Sie tun, wenn Sie Single Sign-On zusammen mit einer Legacy-Anwendung nutzen wollen, die das nicht unterstützt? Eine Möglichkeit besteht darin, etwas vor die Anwendung zu setzen, das die SSO-Requests verarbeitet und dann der Anwendung mitteilt, wer die User sind.

Die Legacy-Anwendung wird diesem Frontend-Service (oft ein Reverse Proxy) in Bezug auf die Authentifizierung vertrauen, aber es ist sehr wichtig, dass keine Verbindungen von irgendetwas anderem angenommen werden. Solche Techniken sind manchmal erforderlich, wenn eine bestehende Anwendung in die Cloud gebracht wird, aber noch nicht so überarbeitet wurde, dass SSO direkt unterstützt wird. Viele der weiter oben aufgeführten Identity-as-a-Service-Provider bieten auch Wege für SSO zusammen mit Legacy-Anwendungen an.

Instanz-Metadaten und Identitätsdokumente

Wie schon weiter oben erwähnt, gehen wir oft davon aus, dass bei Automationen, wie zum Beispiel einem Programm, das auf einem System läuft, schon eine Identität zugewiesen und eine Möglichkeit zum Überprüfen dieser Identität ermöglicht wurde. Wenn ich beispielsweise ein neues System aufsetze, kann ich einen Usernamen und ein Passwort für dieses System erstellen, um darauf zuzugreifen, und das Erstellen dieser Credentials als Teil des Aufsetzprozesses durchführen. In vielen Cloud-Umgebungen gibt es allerdings einfachere Möglichkeiten.

Ein Prozess, der auf einem bestimmten System läuft, kann einen wohlbekannten Endpoint kontaktieren, der ihm alles über das aktuelle System erzählen wird, und der Prozess wird zudem einen kryptografisch signierten Weg bereitstellen, um die Identität des Systems beweisen zu können. Die genauen Details unterschieden sich je nach Provider, aber konzeptionell sieht das Ganze wie in Abbildung 4-2 aus.

image

Abbildung 4-2: Identitätsdokumente nutzen

Das ist jedoch nicht narrensicher, weil jeder Prozess auf dem System diese Metadaten anfordern kann – unabhängig von seiner Berechtigungsstufe im System. Sie dürfen also entweder nur Prozesse der gleichen Vertrauensstufe auf dem System ausführen oder müssen Maßnahmen ergreifen, mit denen niedriger privilegierte Prozesse davon abgehalten werden, die Identität des gesamten Systems zu ermitteln. Das kann insbesondere in Containerumgebungen wichtig sein, bei denen jeder Container auf einem Hostsystem das Identitätsdokument anfordern und sich dann als dieses Hostsystem ausgeben könnte. In solchen Fällen müssen Sie die Container davon abhalten, den Metadatenservice zu erreichen.

Bei diesem System ist auch erforderlich, dass der Cloud-Service diese Art des vom Metadatenservice genutzten Dokuments und der Signatur erkennt. Gäbe es doch nur ein Standardformat für solche Dokumente und Signaturen, sodass sich der Cloud-Service dazu entscheiden könnte, Containern in einem bestimmten Cluster oder virtuellen Maschinen in einem bestimmten Cloud-Account zu vertrauen! Hier schlägt die große Stunde von SPIFFE (https://spiffe.io) – einer Standardmethode, die es einer Workload (zum Beispiel einem Container, einer virtuellen Maschine oder einer Multi-Node-Anwendung) erlaubt, sich bei jemand anderem zu authentifizieren. SPIRE ist eine Referenzimplementierung der SPIFFE-Spezifikation. Aktuell kommt SPIFFE noch nicht sehr oft zum Einsatz, aber irgendwann werden diese oder ähnliche Spezifikationen den weitverbreiteten Einsatz statischer API-Schlüssel für die Authentifizierung ablösen. Anstatt das System so zu konfigurieren, dass es jedem vertraut, der den API-Schlüssel besitzt, werden Sie es so konfigurieren, dass es nur den Workloads vertraut, die sowohl eine gültige ID besitzen als auch auf Ihrer Liste der vertrauenswürdigen Dinge stehen.

Können Sie Identitätsdokumente nutzen, müssen Sie nicht so viel Secrets Management betreiben. Als Workload kann ich einen einfachen Request ausführen und erhalte dann die Secrets, mit denen ich andere Ressourcen ansprechen kann. Danach vergesse ich die Secrets wieder und frage erneut nach ihnen, wenn ich sie wieder brauche. Da Identitätsdokumente aber noch nicht allzu verbreitet sind und viele Arten von Ressourcen sie noch nicht akzeptieren, werden Sie Tools und Techniken zum Managen von Secrets benötigen. Das schauen wir uns als Nächstes an.

Secrets Management

Ich habe schon weiter oben über Passwörter gesprochen – dort aber vor allem im Kontext einer Person, die sich an einem System authentifiziert. Administrative User und Enduser setzen Techniken zum Secrets Management schon so lange ein, wie es Secrets gibt – von guten Techniken (Passwort-Wallets und physischen Safes) bis hin zu wirklich schlechten (den allgegenwärtigen Post-its am Monitor oder unter der Tastatur). Während der Begriff Secrets Management eigentlich immer dann passt, wenn Sie ein Secret haben, das Sie sich merken müssen, wird er im Allgemeinen spezifischer eingesetzt, um sich auf Secrets zu beziehen, die von einem System genutzt werden, um mit einem anderen zu sprechen.

Schauen wir uns beispielsweise den Fall an, bei dem ein Anwendungsserver mit einem Datenbankserver sprechen muss. Hier kann natürlich keine Multifaktor-Authentifizierung zum Einsatz kommen – der Anwendungsserver hat keinen Hardware-Security-Schlüssel und auch keinen Fingerabdruck!8 Sie müssen also mit den Authentifizierungs-Credentials für System-to-System-Verbindungen sehr vorsichtig sein, weil sie Ihre einzige Verteidigungslinie sein könnten.

Credentials für die System-to-System-Authentifizierung können ein Passwort, einen API-Schlüssel, ein kryptografisches Token oder ein Public/Private-Key-Paar beinhalten. Sämtliche dieser Lösungen besitzen etwas, das geheim gehalten werden muss. Wir nennen all diese Dinge einfach Secrets, und beim Secrets Management geht es darum, sie denjenigen zur Verfügung zu stellen, die sie benötigen – aber sonst niemandem. (Sie können zudem Elemente haben, die nichts mit einer Authentifizierung zu tun haben, aber trotzdem geheim gehalten werden müssen, wie zum Beispiel kryptografische Schlüssel – die sind technisch gesehen zwar Secrets, werden aber meist spezifischer durch ein Encryption Key Management behandelt.)

Secrets sind gefährliche kleine Dinger, die sehr vorsichtig behandelt werden sollten. Hier ein paar Prinzipien zum Managen von Secrets:

Selbst Organisationen, die Authentifizierung und Autorisierung sehr gut im Griff haben, übersehen oft das Secrets Management. So bekommen Sie es vielleicht gut hin, zu protokollieren, welche Personen persönliche IDs für den Zugriff auf eine Datenbank haben, aber wie viele Personen kennen das Passwort, das der Anwendungsserver nutzt, um mit der Datenbank zu sprechen? Wird es regelmäßig geändert – und sofort, wenn jemand das Team verlässt? Im schlimmsten Fall findet sich dieses Passwort im Code des Anwendungsservers und ist in ein öffentliches Repository (wie GitHub) eingecheckt.9

Es gibt viele Einbrüche, die unabsichtlich im Quellcode gespeicherte Secrets – zum Beispiel AWS-API-Schlüssel – ausgenutzt haben. Der Code benötigt die Credentials, damit er nach dem Deployen funktioniert, aber es ist eine wirklich schlechte Idee, Secrets direkt im Quellcode abzulegen (oder im Quellcode-Repository als Teil einer Konfigurationsdatei). Dafür gibt es zwei Gründe:

Die offensichtlichste Lösung ist, die Secrets aus dem Quellcode herauszunehmen und sie woanders abzulegen – zum Beispiel an einem sicheren Ort innerhalb Ihrer Deployment-Tools oder auf einem dedizierten Secrets-Server.

In den meisten Fällen besteht ein Deployment einer Anwendung aus drei Elementen, die zusammenspielen:

Es ist eine wirklich schlechte Idee, diese drei Dinge gemeinsam abzulegen (siehe oben). Es ist oft auch nicht gut, Konfiguration und Secrets gemeinsam zu verwalten, weil Systeme, die zum Managen von Konfigurationsdaten entworfen sind, nicht unbedingt dafür gedacht sind, die Daten geheim zu halten.

Schauen wir uns für das Secrets Management vier sinnvolle Ansätze an – von minimaler bis zu der höchsten Sicherheit.

Beim ersten Ansatz nehmen wir bestehende Configuration Management Systems und Deployment-Systeme für das Speichern von Secrets. Viele verbreitete Systeme besitzen eine Funktionalität, um neben normalen Konfigurationsdaten auch Secrets zu verwalten – zum Beispiel Ansible Vault oder Chef Encrypted Data Bags. Das kann ein vernünftiger Ansatz sein, wenn die Deployment-Tools sorgfältig mit den Secrets umgehen und vor allem wenn der Zugriff auf das Deployment-System und die Schlüssel eng begrenzt ist. Aber oft gibt es zu viele Personen, die die Secrets lesen können. Zudem ist bei einem Ändern der Secrets ein erneutes Deployen des Systems erforderlich, was in manchen Umgebungen schwieriger sein kann.

Beim zweiten Ansatz nutzen wir einen Secrets-Server. Mit solch einem eigenen Server benötigen Sie in den Konfigurationsdaten nur eine Referenz auf das Secret und die Möglichkeit, mit dem Secrets-Server zu sprechen. Dann kann entweder die Deployment-Software oder die Anwendung das Secret erhalten, indem sie sich beim Secrets-Server authentifiziert, wozu ein Passwort erforderlich ist … Sie sehen das Problem, oder? Jetzt haben Sie ein weiteres Secret (das Passwort zum Secrets-Server), um das Sie sich Gedanken machen müssen.

Diese Lösung ist zwar nicht perfekt, aber sie hat durchaus ihren Wert:

Der dritte Ansatz bietet alle Vorteile eines Secrets-Servers, nutzt aber eine sichere Vorbereitungsmethode, um die Wahrscheinlichkeit zu verringern, dass bei einem Angriff die Credentials für den Zugriff auf den Secrets-Server ergattert werden:

  1. Ihr Deployment-Tool kommuniziert mit dem Secrets-Server, um ein nur einmalig nutzbares Secret zu erhalten, das anschließend an die Anwendung weitergereicht wird.
  2. Die Anwendung tauscht dieses Secret dann gegen das echte Secret des Secrets-Servers ein und kann damit wiederum alle anderen erforderlichen Secrets abrufen und im Speicher verwalten. Hat jemand das Einmal-Secret schon genutzt, wird dieser Schritt fehlschlagen, und die Anwendung kann eine Warnung darüber ausgeben, dass etwas nicht stimmt.

Ihr Deployment-Tool benötigt weiterhin einen Satz statischer Credentials für Ihren Secrets-Server, aber damit kann es nur Einmal-Schlüssel erhalten und noch nicht direkt auf die Secrets zugreifen. (Wenn Ihr Deployment-Tool vollständig kompromittiert ist, kann ein Angreifer auch eine Fake-Kopie einer Anwendung deployen, um Secrets zu lesen, aber das ist schwieriger, als die Secrets direkt abzurufen, und wird auch mit größerer Wahrscheinlichkeit erkannt.)

Operations-Personal kann die Secrets oder die Credentials zum Secrets-Server nur mit größerem Aufwand einsehen. Statt beispielsweise einfach das Secret aus einer Konfigurationsdatei auszulesen, müsste eine böswillige Person den Systemspeicher in eine Datei schreiben und dort nach dem Secret suchen oder einen Debugger mit einem Prozess verbinden, um das Secret zu finden.

Beim vierten Ansatz nutzen Sie – sofern verfügbar – Angebote von Ihrer Cloud-Plattform, um das »Turtles all the way down«-Problem zu vermeiden:

  1. Manche Cloud-Provider bieten Instanz-Metadaten oder Identitätsdokumente für Systeme an, die in der Cloud provisioniert sind. Ihre Anwendung kann dieses Identitätsdokument abrufen, in dem so etwas steht wie: »Ich bin Server ABC. Der Cloud-Provider hat dieses Dokument für mich kryptografisch signiert, was meine Identität beweist.«
  2. Der Secrets-Server kennt dann die Identität des Servers sowie zugehörige Metadaten, wie zum Beispiel Tags. Mit diesen Informationen kann er dann eine Anwendung authentifizieren und autorisieren, die auf dem Server läuft, und ihr den Rest der Secrets zur Verfügung stellen, den sie benötigt. Zukünftig werden Sie vielleicht das Identitätsdokument bei den meisten Cloud-Services direkt nutzen können, ohne einen Secrets-Server einsetzen zu müssen!

Fassen wir die vier sinnvollen Ansätze des Secrets Management einmal zusammen:

Es gibt eine Reihe von Produkten und Services, die Ihnen beim Managen von Secrets helfen. HashiCorp Vault und Keywhiz sind eigenständige Produkte, die in On-Premises-Umgebungen oder in der Cloud implementiert werden können, während der AWS Secrets Manager als As-a-Service-Modell zur Verfügung steht.

Autorisierung

Haben Sie die Authentifizierungsphase abgeschlossen und wissen, wer Ihre User sind, müssen Sie nun sicherstellen, dass sie nur die Aktivitäten ausführen, die sie auch ausführen dürfen. Beispiele für eine Autorisation sind der Zugriff auf eine Anwendung im Ganzen, auf eine Anwendung mit Schreibzugriff, auf Teile des Netzwerks oder auf die Cloud-Konsole.

Enduser-Anwendungen kümmern sich oft selbst um die Autorisierung. Es mag zum Beispiel einen Eintrag pro User in einer Datenbank oder in einem Dokument geben, der festlegt, was für Zugriffsberechtigungen der User hat. Das ist sinnvoll, weil jede Anwendung spezifische Funktionen hat, die zu autorisieren sind, aber es bedeutet auch, dass Sie jede Anwendung aufsuchen müssen, wenn Sie herausfinden wollen, was ein User alles darf.

Die wichtigsten Konzepte, die man bei Autorisierungen im Hinterkopf behalten sollte, sind Least Privilege und Separation of Duties. Least Privilege bedeutet, dass Ihre User, Systeme oder Tools nur auf das zugreifen können, was sie zum Erledigen ihrer Aufgaben benötigen – aber nicht mehr. In der Praxis bedeutet dies meist, dass Sie eine »Deny by Default«-Richtlinie verfolgen, sodass etwas nicht möglich ist, sofern Sie es nicht spezifisch erlauben.

Die Separation (oder Segregation) of Duties kommt eigentlich aus der Finanzwelt, wo für Schecks, die einen gewissen Betrag übersteigen, zwei Unterschriften erforderlich sind. In der Welt der Cloud-Sicherheit wird das meist eher allgemein umgesetzt, indem sichergestellt wird, dass nicht eine Person allein die Sicherheit der gesamten Umgebung unterminieren kann. So sollte beispielsweise jemand mit der Möglichkeit, Änderungen an Systemen vorzunehmen, nicht auch die Möglichkeit besitzen, die Logs für diese Systeme anzupassen oder sie zu überprüfen.

Für Cloud-Systeme und interne Anwendungen wird eine zentrale Autorisation zunehmend beliebter.

Zentrale Autorisation

Das Problem der alten Ad-hoc-Praxis mit den über die ganze Firma verteilten Identitäten wurde durch Federated Identities und Single Sign-On gelöst. Aber eventuell sind immer noch die Autorisierungsberechtigungen wild verteilt – jede Anwendung kann für sich selbst dokumentieren, was die User dürfen und was nicht.

Sie können jemanden komplett deautorisieren, indem Sie seine Identität löschen (sofern nicht persistente Zugriffstoken noch eine Weile einen Zugriff ermöglichen), aber wie sieht es aus, wenn man nur bestimmte Zugriffe unterbinden möchte? Es ist wichtig, die Identität von jemanden entfernen zu können, aber das ist für ein Access Management schon ein sehr grobes Vorgehen. Oft benötigen Sie feingranularere Wege, den Zugriff zu managen. Mit einer zentralen Autorisierung sehen und kontrollieren Sie an einem Ort, worauf Ihre User Zugriff haben.

In einer klassischen Anwendung wurden alle Autorisierungsaufgaben in der Anwendung selbst umgesetzt. In der Welt der zentralen Autorisierung wird die Zuständigkeit meist zwischen der Anwendung und dem zentralen Autorisierungssystem aufgeteilt. Die Details unterscheiden sich je nach System, aber dies sind die grundlegenden Komponenten:

Policy Enforcement Point (PEP)

Dieses Element ist in der Anwendung dort implementiert, wo der Zugriff gesteuert wird. Haben Sie nicht den angegebenen Zugriff in der Policy, wird der Service oder die Anwendung das Ausführen dieser Funktion auch nicht zulassen. Die Anwendung prüft das Ganze, indem sie den Policy Decision Point nach einer Entscheidung fragt.

Policy Decision Point (PDP)

Dieses Element ist im zentralen Autorisierungssystem implementiert. Der PDP erhält die Informationen von der Anwendung (wie zum Beispiel die Identität und die angefragte Funktion), schaut in seine Policy und liefert der Anwendung seine Entscheidung zurück, ob der Zugriff für diese bestimmte Funktion gewährt wird oder nicht.

Policy Administration Point (PAP)

Dieses Element ist ebenfalls im zentralen Autorisierungssystem implementiert. Dabei handelt es sich im Allgemeinen um eine Weboberfläche samt zugehöriger API, über die Sie dem zentralen Autorisierungssystem mitteilen können, wer wozu berechtigt ist.

Die meisten Cloud-Provider bieten eine zentrale Access-Management-Lösung an, die ihre Services für Zugriffsentscheidungen konsultieren, statt selbst Entscheidungen zu treffen. Wenn diese Mechanismen vorhanden sind, sollten Sie sie nutzen, damit Sie alle gewährten Zugriffe für einen bestimmten Administrator oder eine Administratorin an einer Stelle überblicken können.

Rollen

Viele Cloud-Provider bieten Rollen oder Trusted Profiles an, die Shared IDs insofern ähneln, als Sie eine Rolle annehmen, Aktionen ausführen, die diese Rolle erlaubt, und die Rolle dann wieder verwerfen. Das unterscheidet sich ein wenig von der klassischen Definition einer Rolle, bei der es sich um einen Satz von Berechtigungen handelt, die einem User oder einer Gruppe gewährt werden.

Der Hauptunterschied zwischen Shared IDs und Rollen von Cloud-Providern ist, dass eine Shared ID eine eigene Identität mit festen Credentials ist. Eine Rolle eines Cloud-Providers ist keine vollständige Identität – es handelt sich um einen speziellen Status, der von einer anderen Identität angenommen wird, der der Zugriff auf die Rolle erlaubt wurde und die dann temporäre Credentials für den Zugriff auf diese Rolle erhält.

Ein rollenbasierter Zugriff kann als zusätzliche Sicherungsschicht eingefügt werden. Dabei werden User oder Services dazu verpflichtet, für privilegiertere Operationen explizit eine eigene Rolle einzunehmen und damit dem Least-Privilege-Prinzip zu folgen. Die User können diese privilegierten Aktivitäten normalerweise nicht ausführen – sie müssen sich erst den »Rollenhut« aufsetzen und ihn nach Abschluss der Arbeiten wieder abnehmen. Das System kann zudem jede Anforderung der Rolle protokollieren, sodass die Administration später herausfinden kann, wer diese Rolle zu einem bestimmten Zeitpunkt innehatte, um das mit den ausgeführten Aktivitäten in einem System abzugleichen.

Nicht nur Personen können Rollen annehmen. Manche Komponenten (wie zum Beispiel virtuelle Maschinen) können beim Erstellen eine Rolle annehmen und Aktionen ausführen, die dieser Rolle zugewiesen wurden.

Rollen versus Gruppen

Sie fragen sich jetzt vielleicht: »Was ist der Unterschied zwischen einer Gruppe und einer Rolle?« Die zentralen Punkte sind:

In der Praxis legen viele Rollen auch die User (und Gruppen) fest, denen sie zugewiesen sind, und in manchen Fällen versorgt die Gruppenmitgliedschaft ihre Mitglieder mit einem einzelnen permanenten Satz an Berechtigungen (einer einzelnen Rolle). Die Begriffe werden oft bunt durcheinandergewürfelt, aber bei manchen Cloud-Providern ist die Unterscheidung wichtig (wie zum Beispiel bei AWS-IAM-Gruppen und -Rollen).

Revalidieren

Ihre User und Automationen sollten nun Identitäten besitzen und dazu autorisiert sein, nur das zu tun, was getan werden muss. Jetzt müssen Sie sicherstellen, dass dies die Zeit überdauert.

Wie schon erwähnt, ist der Revalidierungsschritt in klassischen wie auch in Cloud-Umgebungen sehr wichtig, aber in Cloud-Umgebungen haben Sie eventuell keine zusätzlichen Schutzmechanismen (wie einen physischen Zutritt zu einem Gebäude oder Schutzmaßnahmen in der Netzwerkinfrastruktur), die Sie absichern, wenn Sie vergessen, einen Zugriff zurückzunehmen. Sie müssen regelmäßig jede Autorisierung kontrollieren, um sicherzustellen, dass sie weiterhin gebraucht wird.

Die erste Form der Revalidierung ist die automatische Revalidierung auf Basis bestimmter Parameter. Sie sollten beispielsweise ein System haben, das automatisch eine Anforderung zum Zurückziehen aller Zugriffsmöglichkeiten erzeugt, wenn jemand die Organisation verlässt. Beachten Sie, dass das einfache Löschen der Identität des Users eventuell nicht ausreicht, weil er gecachte Credentials (wie zum Beispiel Zugriffstoken) haben kann, die sich noch nutzen lassen, ohne sich anmelden zu müssen. In solchen Situationen benötigen Sie einen Offboarding Feed, bei dem es sich um eine Liste mit Entitäten handelt, deren Zugriff zurückgezogen werden soll. Jedes System, das langlebigere Credentials wie Zugriffstoken ausgibt, muss diesen Offboarding Feed mindestens täglich abarbeiten und den Zugriff dieser Entitäten direkt zurücknehmen.

Für die zweite Form der Revalidierung sind Einschätzungen durch Menschen dahin gehend erforderlich, ob eine bestimmte Entität immer noch Zugriff benötigt. Es gibt im Allgemeinen zwei Arten von einschätzungsbasierter Revalidierung:

Positive Bestätigung

Diese ist stärker – sie bedeutet, der Zugriff geht verloren, sofern nicht jemand explizit sagt: »Dieser Zugriff ist weiterhin erforderlich.«

Negative Bestätigung

Diese ist schwächer – sie bedeutet, der Zugriff bleibt bestehen, bis jemand sagt: »Dieser Zugriff ist nicht mehr länger erforderlich.«

Negative Bestätigung ist für Autorisierungsstufen mit geringeren Auswirkungen ausreichend, aber bei Zugriffen mit hohen Auswirkungen auf das Business sollten Sie positive Bestätigung nutzen. Ihre Nachteile sind, dass sie mehr Arbeit verursachen und der Zugriff unabsichtlich verloren gehen kann, wenn die Anfrage nicht rechtzeitig bearbeitet wird (was wiederum zu noch mehr Aufwand bei Operations führen kann).

Durch das Revalidieren verhindert man als größtes Risiko, dass jemand, der die Firma (vielleicht unter schwierigen Umständen) verlassen hat, noch mal Zugriff auf das System erlangt. Zudem tendieren Berechtigungen mit der Zeit dazu, sich anzusammeln – wie Krempel in der Krempelschublade in der Küche (Sie haben bestimmt auch so eine). Durch das Revalidieren wird dieser Krempel ausgemistet.

Wenn es allerdings schwierig ist, Zugriff zu erlangen, werden Ihre User häufig behaupten, sie bräuchten ihn, auch wenn dies eigentlich nicht mehr der Fall ist. Ihre Revalidierungsaufwände werden beim Zurückschneiden unnötiger Zugriffe viel effektiver sein, wenn Sie gleichzeitig einen schnellen und einfachen Prozess für das Zuweisen erforderlicher Berechtigungen haben. Ist das nicht möglich, kann es effektiver sein, den Zugriff automatisch zurückzuziehen, wenn er eine Zeit lang nicht mehr genutzt wird, statt zu fragen, ob er immer noch gebraucht wird. Das beinhaltet allerdings ein gewisses Risiko, weil Sie vielleicht niemanden mit Zugriffsrechten finden, wenn es notwendig ist!

Identity-as-a-Service-Angebote in der Cloud bieten neben dem Authentifizieren und Autorisieren zunehmend auch das Managen des gesamten Identitätslebenszyklus an. Mit anderen Worten: Provider erkennen die Wichtigkeit des Anfangs und Endes einer Beziehung und helfen dabei, das Beenden zu vereinfachen und zu formalisieren.

Was sind das alles für Tools?

Die Namen der diversen Tools, die beim Secrets und Identity Management helfen, können verwirrend sein. Es gibt durchaus unterschiedliche Ansichten zu den Namen, und viele Produkte erfüllen auch mehr als eine Funktion, aber hier möchte ich Ihnen einen Überblick über die gebräuchlichsten Namen und Funktionen geben:

Bringen wir alles in der Beispielanwendung zusammen

Erinnern Sie sich an unsere einfache Webanwendung aus Kapitel 1? Ergänzen wir das Diagramm um Informationen zum Identity and Access Management, dann sieht es wie in Abbildung 4-3 aus. Ich habe die ganzen Trust Boundaries der Anwendung entfernt, damit es nicht zu unübersichtlich wird. Eine Beschreibung der Schritte, von denen viele aus mehreren Unterschritten bestehen, folgt noch.

Leider wird das Diagramm dadurch ein bisschen komplizierter! Schauen wir uns ein paar der neuen Interaktionen im Detail an:

  1. Der Enduser versucht, die Anwendung aufzurufen, und der Zugriff wird automatisch genehmigt, weil eine gültige Identität vorliegt und optional ein paar Antibetrugstests bestanden wurden. Er meldet sich per SSO an, sodass die Anwendungsidentität über den externen Identity Provider des Users föderiert wird und die Anwendung keine Passwörter überprüfen muss. Aus Sicht des Users kommt die gleiche Identität zum Einsatz wie innerhalb der Firma oder bei seiner bevorzugten Social-Media-Site.
  2. Der Administrator bittet um administrativen Zugriff auf die Anwendung, was genehmigt wird. Dann wird er in einem zentralen Autorisierungssystem autorisiert. Die Autorisierung kann im IAM-System des Cloud-Providers geschehen, oder dieses System ist so konfiguriert, dass es das organisationseigene IAM-System bittet, die Autorisierung vorzunehmen.
  3. Der Administrator authentifiziert sich über den IAM-Service der Cloud mit einem starken Passwort und Multifaktor-Authentifizierung, und sie erhält ein Zugriffstoken für andere Services. Wieder kann der IAM-Service der Cloud so konfiguriert sein, dass er den User an das organisationsinterne Authentifizierungssystem schickt.
  4. Der Administrator fragt Cloud-Provider-Services an, wie zum Beispiel das Erstellen einer neuen virtuellen Maschine oder eines Containers. (Hinter den Kulissen fragt der Cloud-VM-Service den IAM-Service der Cloud, ob der Administrator autorisiert ist.)
  5. Der Administrator nutzt den Service eines Cloud-Providers, um bei Bedarf Befehle auf den virtuellen Maschinen oder Containern auszuführen. (Hinter den Kulissen fragt der »Befehl ausführen«-Service der Cloud den IAM-Service der Cloud, ob der Administrator dazu berechtigt ist, diesen Befehl auf dieser virtuellen Maschine oder diesem Container auszuführen.) Steht dieses Feature bei einem bestimmten Cloud-Provider nicht zur Verfügung, nutzt der Administrator vielleicht eine etwas klassischere Methode, wie zum Beispiel SSH, während die virtuelle Maschine das LDAP-Protokoll verwendet, um Administratorinnen und Administratoren über einen Identity Store zu authentifizieren und zu autorisieren. In einer Containerumgebung kann das Ausführen von Befehlen für normale Wartungs- und Upgrade-Aktivitäten eventuell gar nicht mehr notwendig sein, weil der Administrator einen neuen Container deployen und den alten löschen kann, statt Änderungen am bestehenden Container vorzunehmen.
  6. Ein Secrets-Service dient dazu, die Passwörter oder API-Schlüssel für den Anwendungsserver aufzubewahren, mit denen dieser auf das Datenbanksystem zugreifen kann. In Abbildung 4-3 ist zu sehen, dass der Anwendungsserver ein Identitätsdokument vom Cloud-Provider erhält, den Secrets-Server direkt anspricht, um das Secret zu erhalten, und sich dann der Datenbank zuwendet. Akzeptiert die Datenbank das Identitätsdokument direkt, brauchen Sie nicht einmal den Secrets-Server! Der gleiche Prozess könnte für die Authentifizierung zwischen dem Webserver und dem Anwendungsserver stattfinden, aber es wird hier aus Gründen der Einfachheit nur eine Interaktion mit dem Secrets-Server gezeigt. Der Secrets-Service kann von der Organisation oder als as a Service von einem Cloud-Provider betrieben werden.

Jedes Mal, wenn eine unserer Trust Boundaries der Anwendung passiert wird, muss die passierende Entität authentifiziert und autorisiert werden, um eine Aktion ausführen zu können. Es gibt noch weitere Trust Boundaries außerhalb der Anwendung, die hier nicht dargestellt sind, wie zum Beispiel die Trust Boundaries rund um die Systeme der Cloud und der Organisation.

image

Abbildung 4-3: Diagramm der Beispielanwendung mit IAM

Zusammenfassung

Viele Organisationen sind in ihren On-Premises-Umgebungen aus historischen Gründen beim Identity and Access Management eher lax vorgegangen und haben sich zu sehr auf andere Sicherheitsmechanismen verlassen (wie zum Beispiel physische Sicherheit und Netzwerkbeschränkungen). IAM ist aber in Cloud-Umgebungen von überragender Wichtigkeit. Auch wenn die Konzepte bei On-Premises- und Cloud-Deployments ähnlich sind, gibt es neue Technologien und Cloud-Services, die die Sicherheit verbessern und das Leben einfacher machen.

Im gesamten großen Identitäts- und Zugriffslebenszyklus ist es leicht, die Anforderungs-, Genehmigungs- und Revalidierungsschritte zu vergessen. Diese lassen sich zwar manuell ausführen, aber viele As-a-Service-Angebote, die zunächst nur die Authentifizierungs- und Autorisierungsschritte übernommen haben, bieten nun auch Workflows für den Genehmigungsschritt – und das wird sich noch weiterentwickeln.

Zentrale Autorisierungssysteme geben der Administration und den Endusern eine einzelne Identität, die dann für viele verschiedene Applikationen und Services genutzt wird. So etwas gibt es zwar schon sehr lange, aber in Cloud-Umgebungen sind sie noch viel wichtiger, weshalb sie dort auch standardmäßig zur Verfügung stehen. Angesichts der Zunahme von Cloud-Systemen und -Services kann das Managen von getrennten Identitäten auf jedem einzelnen System und für jeden Service selbst bei kleinen Deployments schnell zu einem Albtraum werden. Alte, vergessene Identitäten werden vielleicht von ihren früheren Besitzern oder durch Angreifer wiederverwendet, die auf der Suche nach einem einfachen Zugangsweg sind. Selbst bei einer zentralen Authentifizierung müssen Sie immer noch gute Passwörter und Multifaktor-Authentifizierung nutzen. Die Cloud-Administration und die Enduser authentifizieren sich oft über unterschiedliche Systeme.

Wie bei den Authentifizierungssystemen ermöglichen zentrale Autorisierungssysteme, alles, wozu eine Entität autorisiert ist, an einem Ort zu sehen und zu bearbeiten. Das kann das Zuteilen und Zurückziehen von Zugriffsmöglichkeiten vereinfachen und macht Konflikte bei der Separation of Duties offensichtlicher. Achten Sie darauf, den Prinzipien von Least Privilege und Separation of Duties zu folgen, wenn Sie Personen oder Automatismen für Aufgaben autorisieren, und vermeiden Sie Identitäten und täglich genutzte Credentials mit Superkräften.

Secrets Management ist ein sich schnell weiterentwickelndes Feld. Dabei werden Secrets für den System-to-System-Zugriff getrennt von anderen Konfigurationsdaten gehalten und anhand strikter Prinzipien von Vertraulichkeit und Auditing gehandhabt. In manchen Fällen lässt sich eine System-to-System-Authentifizierung durch Identitätsdokumente realisieren, was den Bedarf von getrennt gehandhabten Secrets verringert. Secrets Management steht in bestehenden Produkten zum Configuration Management zur Verfügung, in eigenständigen Secrets-Server-Produkten und als As-a-Service-Cloud-Angebote.

Nachdem Sie nun verstanden haben, wie Sie eine der häufigsten Ursachen von Einbrüchen vermeiden – ein nicht ausreichendes Identity and Access Management –, wollen wir uns eine der anderen sehr wichtigen Ursachen anschauen: unzureichendes Vulnerability Management.

Übungen

  1. Welche Schritte sind üblicherweise Teil eines Zugriffsmanagement-Lebenszyklus? Wählen Sie alle passenden aus.
    1. Zugriff anfordern
    2. Zugriff genehmigen
    3. Zugriff nutzen
    4. Zugriff revalidieren
  2. Welche der folgenden Aussagen zur Authentifizierung sind korrekt?
    1. Bei der Authentifizierung geht es darum, zu beweisen, dass Sie derjenige sind, als der Sie sich ausgeben.
    2. Sie brauchen nur Authentifizierung, um auf eine Anwendung zuzugreifen.
    3. Für eine Multifaktor-Authentifizierung können API-Schlüssel genutzt werden.
    4. Für eine interne Kommunikation ist Authentifizierung nicht erforderlich.
  3. Welche der folgenden Aussagen zur Autorisierung sind korrekt? Wählen Sie alle passenden aus.
    1. Bei der Autorisierung geht es um die Erlaubnis, auf eine bestimmte Anwendung zuzugreifen oder eine bestimmte Aktion auszuführen.
    2. Wenn nicht jeder für eine bestimmte Aktion autorisiert ist, ist die Autorisierung nur zusammen mit Authentifizierung nützlich.
    3. Autorisierung kann sowohl zentral als auch dezentral effektiv sein.
  4. Welche der folgenden Aussagen zu Cloud-Identity-Services ist korrekt? Wählen Sie alle passenden aus.
    1. Ein Cloud-Identity-Service stellt normalerweise einen zentralen Service zum Authentifizieren von Usern bereit.
    2. Ein Cloud-Identity-Service stellt normalerweise einen zentralen Service zum Autorisieren von Usern bereit.
    3. Ein Cloud-Identity-Service stellt normalerweise einen zentralen Service für das Speichern von Secrets bereit.
    4. Cloud-Identity-Services gibt es in unterschiedlichen Varianten, wie zum Beispiel Business-to-Consumer oder Business-to-Employee.
  5. Welche der folgenden Aussagen über Federation und Single Sign-On sind wahr? Wählen Sie alle passenden aus.
    1. Federation und Single Sign-On sind unterschiedliche Technologien, die das gleiche Ziel verfolgen.
    2. Federated Identity ist das Konzept, Identitäten auf zwei verschiedenen Systemen miteinander zu verbinden.
    3. Single Sign-On ist eine Möglichkeit, Federated Identities zu nutzen.
    4. Single Sign-On ist für User einfacher, bringt aber oft den Nachteil einer geringeren Sicherheit mit sich.