Frage:
Ist es in Ordnung, dass API-Geheimnisse im Klartext gespeichert oder entschlüsselt werden können?
IMB
2012-08-13 00:11:21 UTC
view on stackexchange narkive permalink

Werden API-Schlüssel nicht als Benutzernamen und API-Geheimnisse als Kennwörter betrachtet? Warum können Sie mit API-Servern wie Amazon Web Services Ihr API-Geheimnis im Klartext anzeigen? Ich denke, sie speichern es im Klartext oder zumindest in einem entschlüsselbaren Format.

Ist es nicht besser, wenn API-Geheimnisse als Kennwörter behandelt wurden, die Sie eingeben sollten, um sie zu erstellen, und dann gehasht werden die Datenbank, anstatt Ihnen im Klartext übergeben zu werden? Wenn aus irgendeinem Grund die geheime API-Datenbank kompromittiert wurde, werden die Schleusen für viele Anwendungen, die ihre API verwenden, leicht geöffnet. Wenn es jedoch nicht entschlüsselbar gehasht wurde, ist nicht alles leicht verloren.

Ich habe dies auch bemerkt (für AWS und jede andere API) und war neugierig.
Die kurze Antwort auf Ihre Frage lautet: API-Geheimnisse sind * symmetrische Schlüssel *, keine Passwörter. Was lässt Sie denken, dass sie es nicht in einem entschlüsselbaren Format speichern?
@DavidSchwartz Das habe ich nicht gesagt. Ich sagte, es ist entweder einfach oder entschlüsselbar.
Acht antworten:
D.W.
2012-08-13 11:28:23 UTC
view on stackexchange narkive permalink

Nein. Die API-Schlüssel müssen im Klartext gespeichert werden.

Es handelt sich nicht um Kennwörter, sondern um kryptografische Schlüssel. Diese Schlüssel werden beispielsweise zur Authentifizierung von Anforderungen (mithilfe von SHA1-HMAC) verwendet. Der Server muss den Kryptoschlüssel kennen, um die kryptografischen Algorithmen anwenden zu können.

Daher muss der API-Schlüssel im Klartext auf dem Server gespeichert werden. Wenn der Server nur einen Hash des API-Schlüssels gespeichert hat, konnte er die Authentizität von Nachrichten vom Client nicht überprüfen oder an den Client gesendete Nachrichten nicht authentifizieren.

Was hindert einen API-Server daran, einen Schlüssel für die Speicherung zu hashen, da er die Benutzereingaben (d. H. Den Client) zum Vergleich auf die gleiche Weise wie die Kennwortspeicherung hashen kann?
@IMB, Wenn Sie den API-Schlüssel hashen und beide Seiten den Hash des API-Schlüssels als eigentlichen kryptografischen Schlüssel verwenden (z. B. zur Verwendung mit einem Nachrichtenauthentifizierungscode), haben Sie nichts gewonnen: Der Hash wird jetzt zum effektiven Schlüssel. und beide Seiten speichern das im Klartext. Der Punkt ist, dass ein kryptografischer Schlüssel nicht mit einem Kennwort identisch ist. Ein Passwort kann gehasht gespeichert werden; Ein kryptografischer Schlüssel kann dies im Allgemeinen nicht.
Mir ist nicht klar, warum nichts gewonnen wird. In der HTTP Digest-Authentifizierung können Sie das "HA1" in "md5" in Ihrer Datenbank speichern. Daher wird das Kennwort (das als geheimer API-Schlüssel verwendet werden kann) niemals im Klartext gespeichert. AFAIK in Digest auth gibt der Client nur den Benutzernamen und das Nur-Text-Passwort an, während der Server nur den Hash speichert, sodass die Datenbank mit Hash-Passwörtern geschützt ist. Hat dieses Beispiel nicht gerade die Geheimhaltung von Passwörtern erlangt? Wenn der Angreifer die Datenbank mit Hashes erhält, kann er sie nicht einfach verwenden, da er sie zuerst knacken muss, um die Nur-Text-Version zu kennen.
@IMB, Amazon Web Services verwendet keine HTTP Digest-Authentifizierung. Die HTTP Digest-Authentifizierung ist gegen einen Netzwerkangreifer unsicher. Stattdessen verwendet Amazon Web Services einen Nachrichtenauthentifizierungscode mit symmetrischem Schlüssel, um Nachrichten zu "signieren". Das ist sicherer, erfordert jedoch einen Klartext-Kryptoschlüssel.
Ich weiß, dass mein Beispiel AWS war, aber ich meine auch andere APIs, und andere APIs implementieren die HTTP-Digest-Authentifizierung. Sie erwähnen, dass es unsicher ist, aber das ist nur wahr, wenn der API-Server kein SSL / TLS verwendet, oder?
@IMB, Wenn Sie mehr über die HTTP Digest-Authentifizierung über SSL erfahren möchten, empfehlen wir Ihnen, eine neue Frage zu erstellen und diese separat zu stellen. Dies ist ein anderes Thema, und die Antwort für die HTTP Digest-Authentifizierung über SSL unterscheidet sich von der Antwort für AWS. (Beachten Sie: Die HTTP Digest-Authentifizierung verwendet keinen "API-Schlüssel".)
Ja, ich verstehe, dass es möglicherweise nicht wörtlich als API-Schlüssel oder API-Geheimnis bezeichnet wird, aber der Zweck ist der gleiche: API-Schlüssel = Benutzername, API-Geheimnis = Passwort. Übrigens habe ich eine separate Frage, die Sie möglicherweise beantworten möchten: http://security.stackexchange.com/questions/18563 Beachten Sie, dass ich darauf hingewiesen habe, dass in dieser Frage kein SSL verwendet wird, Sie jedoch in Ihrer Antwort einen Hinweis zu SSL finden können, wenn je.
@IMB,, bitte verschieben Sie alle Fragen zur Speicherung der Geheimnisse für die HTTP Digest-Authentifizierung in eine separate Frage. Bitte vermeiden Sie eine ausführliche Diskussion in diesem Kommentarthread.
_Sie sind keine Passwörter: Sie sind kryptografische Schlüssel_@D.W.Haben Sie eine formelle Referenz dafür?
-1
Wenn Sie Wave-Terminologien ein wenig übergeben, gibt es tatsächlich eine Möglichkeit, den kryptografischen Schlüssel in "Hash" -Form zu "speichern".Wenn bei Verwendung der Verschlüsselung mit öffentlichem Schlüssel der Authentifizierungsserver kompromittiert wird, ist die gesamte zu erhaltende Angreifer-Massage ein öffentlicher Schlüssel.Der Angreifer kann den so erhaltenen öffentlichen Schlüssel nicht verwenden, um eine Anfrage an den Anwendungs- / Ressourcenserver zu stellen.
Tom Leek
2012-08-13 16:27:05 UTC
view on stackexchange narkive permalink

Hashing ist kein Speicher; es zerstört irreversibel Daten. Wir können mit dem Aufrufen von Passwort-Hashing als "Passwortspeicher" davonkommen, denn wenn wir das Passwort tatsächlich benötigen, haben wir einen praktischen menschlichen Operator, der es eingibt. Wenn wir das Passwort hashen, speichern wir das Passwort nicht, sondern nur ein Token Ausreichend, um das eingegebene Kennwort zu überprüfen.

Ein API-Schlüssel muss so gespeichert werden, dass er unbeaufsichtigt wieder verwendet werden kann. Der Server muss es wirklich speichern , anstatt sich nur an einen Geist zu erinnern, da er den echten Schlüssel benötigt, um auf die API zuzugreifen.

Gibt es einen Grund, warum ein API-Server keine Benutzereingaben hashen kann (d. H. Den Schlüssel hashen)? Und vergleichen Sie es mit dem auf dem Server gespeicherten Hash-Schlüssel. Mir scheint, es gibt keinen besonderen Grund, warum Schlüssel nicht gehasht werden können.
@IMB, siehe meine Antwort an der anderen Stelle, an der Sie dieselbe Frage gestellt haben.
AilindwrqgCMT.W., Link, bitte?
AililupunaCMT http://security.stackexchange.com/q/18572/971
Nick Sloan
2017-07-12 22:06:30 UTC
view on stackexchange narkive permalink

Hier und an anderen Orten scheint es ein wenig Verwirrung zu geben, daher füge ich diese Antwort in der Hoffnung hinzu, dass sie die Situation für andere Benutzer klären wird.

Dort Es gibt zwei Arten von API-Geheimnissen, die möglicherweise verwendet werden.

Der Anwendungsfall, den die meisten Antworten auf dieser Seite behandeln, ist ein geheimer Schlüssel, der zum Signieren und Überprüfen von Nachrichten verwendet wird unter Verwendung eines Algorithmus wie HMAC. In diesem Fall benötigen sowohl der Client als auch die API den tatsächlichen Wert des Schlüssels, um eine Signatur der Nachricht zu erstellen. Der Server vergleicht dann die von ihm generierte Signatur mit der vom Client gesendeten Signatur und kann die Nachricht überprüfen. Wie oben erwähnt, kann dies nicht funktionieren, wenn der ursprüngliche Schlüssel auf dem Server nicht reproduzierbar ist. Nach dem erstmaligen Teilen des Schlüssels mit dem Client (über einen verschlüsselten Kanal) muss der Schlüssel nie wieder zwischen Client und Server übertragen werden.

Das andere gemeinsame API-Client-Geheimnis ist lediglich ein Geheimnis Anmeldeinformationen (wie Sie möglicherweise in einer typischen OAuth2-Zugriffstokenanforderung sehen). Dieser Berechtigungsnachweis wird bei jeder Anforderung übertragen und sollte daher nur über einen verschlüsselten Kanal (z. B. HTTPS) übertragen werden. In diesem Fall muss der Server nur genügend Informationen aufbewahren, um zu überprüfen, ob der vom Client angegebene geheime Wert korrekt ist, sodass das Geheimnis gehasht werden kann und sollte. In diesem Fall fungiert das Geheimnis effektiv als Passwort, und daher sollten die gleichen Vorsichtsmaßnahmen getroffen werden.

Haftungsausschluss: Ich bin kein Sicherheitsforscher, und Sie sollten dies unbedingt genauer untersuchen und jedes Thema, bevor Sie blindlings den Ratschlägen zu diesem StackExchange folgen.

tl; dr Der wichtigste Aspekt ist, dass verschiedene APIs das Geheimnis auf unterschiedliche Weise verwenden können . Es ist wichtig zu verstehen, wie Ihre API das Client-Geheimnis verwendet, um Best Practices für das Speichern zu bewerten.

Ich denke, das ist eine gute Aufschlüsselung mit einer Ausnahme, für die ich auch eine (teilweise) Antwort hinzugefügt habe.
Dies sollte die akzeptierte Antwort sein.
Polynomial
2012-08-13 03:42:07 UTC
view on stackexchange narkive permalink

Das Hashing der API-Token wäre zwar sicherer, stellt jedoch ein Usability-Problem dar: Die Token sind lang und zufällig und müssten dem Benutzer vor dem Hashing nur einmal mitgeteilt werden. Dies macht es etwas schwierig, sie mit einem Hash zu sichern.

Mein Vorschlag für ein sicheres Szenario lautet wie folgt:

  1. Generieren Sie ein zufälliges salt Wert und speichern Sie ihn in der Datenbank. Dieses Salt darf nicht gleich dem Passwort des Benutzers sein. Salt.
  2. Nehmen Sie das Klartext-Passwort des Benutzers und berechnen Sie KDF (Passwort, Salt) , wobei KDF ist eine Schlüsselableitungsfunktion wie bcrypt. Rufen Sie den resultierenden Wert k auf.
  3. Generieren Sie einen API-Schlüssel.
  4. Verschlüsseln Sie den API-Schlüsselwert mit AES unter Verwendung von k as den Schlüssel und speichern Sie den Chiffretext in der Datenbank.
  5. Verwerfen Sie den Klartext-API-Schlüssel und k .
  6. ol>

    Wenn sich der Benutzer anmeldet, Die Webanwendung kennt ihr Kennwort und berechnet damit k , mit dem der API-Schlüssel entschlüsselt und angezeigt wird.

    Wenn der Benutzer die API verwenden möchte, Sie müssen k sowie den Klartext-API-Schlüssel über SSL senden. Die Webanwendung kann dann den gespeicherten API-Schlüsselwert mit k entschlüsseln und mit dem angegebenen API-Schlüssel vergleichen. Wenn sie übereinstimmen, ist es gültig. Dies ermöglicht die Verwendung von API-Schlüsseln, ohne dass die App das Kennwort des Benutzers speichern muss.

    Wenn ein Angreifer die Datenbank verletzt, muss er das Kennwort des Benutzers knacken, um k zu berechnen.

Und was im Falle einer Passwortänderung?
Nur ein Vorschlag, das eindeutige Salz kann alles aus dem Passwort des Benutzers sein oder etwas, das konstant bleibt, wie die Benutzer-ID. Punkt ist, Verschlüsselung besser als einfacher Text jeden Tag.
@AndrewSmith Während der Kennwortänderung sollte der Benutzer immer aufgefordert werden, sein vorhandenes Kennwort einzugeben, um Walk-by-Angriffe zu verhindern. Dies ermöglicht die Berechnung von "k".
@RohanDurve-Decode141 In diesem Fall könnte es sich um die Benutzer-ID handeln. Normalerweise gebe ich jedoch den Rat, in allen Fällen die Verwendung von extern bekannten Werten als Salze zu vermeiden, da die Unterschiede subtil sind und die Dinge beim Umgang mit Passwort-Hashes kompliziert werden. In diesem Fall ist die Benutzer-ID jedoch in Ordnung.
Ja Ja! ... ein fehlender Teil des Satzes hat das verursacht. Ich meinte "Die Antwort ist nur ein grober Vorschlag ..." und richtete mich an Mr. Smith. :) Ps. Ich habe nicht abgelehnt.
Conor Mancone
2017-07-12 22:45:26 UTC
view on stackexchange narkive permalink

Ich habe meine eigenen zwei Cent eingezahlt, weil ein Problem noch nicht erwähnt wurde. Insbesondere stimme ich dem zu, was @NickSloan gesagt hat, aber mit einer weiteren Einschränkung.

Es gibt einen weiteren wichtigen Unterschied zwischen einem API-Schlüssel und einem Kennwort. API-Schlüssel sind für Ihre Site eindeutig. Der Teil, der die Passwortsicherheit so wichtig macht, ist die Passwortfreigabe. Wenn jemand das Kennwort erhält, das ein Benutzer auf Ihrer Website gespeichert hat, ist nicht nur Ihre Website gefährdet, sondern jede andere Website, für die der Benutzer dieses Kennwort (und die E-Mail-Adresse / den Benutzernamen) verwendet hat. Viele Benutzer verwenden Kennwörter auf kritischen Websites wieder: Banken, soziale Medien, E-Mails usw. Dies bedeutet, dass bei einer guten Kennwortsicherheit weniger der Zugriff auf Ihre Website als vielmehr der Schutz Ihrer Benutzer auf anderen Websites geschützt ist. Wir können Benutzer nicht dazu zwingen, die Sicherheit besser zu machen, daher müssen wir das Schlimmste annehmen und zusätzliche Schritte unternehmen, um ihre eigene Privatsphäre zu schützen.

Ein API-Schlüssel ist ein völlig anderes Szenario, da er nur für gilt deine Seite. Wenn es gestohlen wird, erhält der Angreifer Zugriff auf Ihre Website, erhält jedoch nichts, was er gegen die Bank / E-Mail / etc. Dieser Person nutzen kann. Dies bedeutet, dass das Risiko für API-Schlüssel tatsächlich niedriger ist als das für Kennwörter. Sie befinden sich nicht ganz im selben Bereich: API-Schlüssel ähneln eher Sitzungskennungen als Kennwörtern.

Wenn Sie verstehen, dass diese eher Sitzungskennungen als Kennwörtern ähneln, erhalten Sie einige praktische Einblicke in den richtigen Schutz solcher Kennungen Schlüssel. Beachten Sie, dass die folgende Diskussion auf API-Schlüssel für Dinge wie OAuth-Anmeldeinformationen und nicht auf Verschlüsselungsanmeldeinformationen anwendbar ist (wie von @NickSloan in seiner Antwort erläutert).

Die größten Bedrohungen für Passwörter sind Phishing-Angriffe und gehackte Datenbanken. Deshalb speichern wir sie in unseren Datenbanken. Die größten Bedrohungen für API-Schlüssel sind dieselben wie für Sitzungsschlüssel: Schwachstellen in Front-End-Anwendungen wie XSS-Schwachstellen, MIM und dergleichen. Es ist wichtig zu beachten, dass die Front-End-Anwendung das Kennwort in unverschlüsselter Form benötigt, sodass das Hashing des API-Schlüssels Ihnen nichts bringt, wenn die Person, die es am wahrscheinlichsten gestohlen hat, es im Klartext benötigt.

Stattdessen schützen Sie eine Sitzungskennung (oder ein OAuth-Token oder einen clientspezifischen API-Schlüssel) hauptsächlich, indem Sie den Client verfolgen. Wenn eine Sitzungskennung über XSS oder andere Mittel vom Client gestohlen wird, besteht ein typisches Ergebnis darin, dass diese Kennung vom Angreifer auf einem neuen Gerät verwendet wird. Das bedeutet, dass plötzlich ein alter Schlüssel mit einem neuen Benutzeragenten angezeigt wird. Eine solche Änderung ist leicht zu erkennen und zu beheben: Alle API-Schlüssel werden sofort ungültig. Insbesondere bei OAuth-Anfragen ist dies für den Benutzer sehr schmerzlos: Er meldet sich einfach wieder an und erhält sofort einen neuen, während jemand, der nur den Schlüssel gestohlen hat (und kein Passwort hat), wieder am Zeichenbrett sitzt .

Dies ist eine häufig genug vorkommende Verteidigungsmaßnahme, bei der ein intelligenterer Hacker auch versucht, den mit dem gestohlenen Schlüssel verknüpften Benutzeragenten aufzuzeichnen und in allen zukünftigen Anforderungen zu verwenden wenn derselbe Benutzer Anforderungen von mehreren IP-Adressen hat. Wie alles andere auf der Welt kann dies ein Katz-und-Maus-Spiel sein, aber es gibt einige wichtige Take-Aways:

  1. Ein API-Schlüssel / OAuth-Token / Sitzungs-ID ist Eigentlich nur eine Möglichkeit, sich an einen Benutzer auf einem bestimmten Gerät zu erinnern, damit er nicht auf jeder Seite sein Passwort eingeben muss. Im Zweifelsfall können Sie daher einfach alle autorisierten Schlüssel löschen und den Benutzer zwingen, sich erneut anzumelden.
  2. In allen drei Fällen ist es wichtig, eine aktive Sicherheit in Bezug auf diese Dinge zu haben und zu erkennen / zu reagieren, wenn etwas faul passiert, da der Verlust von Schlüssel / Token / ID zu einer Gefährdung eines Kontos führt. Wenn Sie jemals von Facebook / Google / etc Benachrichtigungen über jemanden erhalten haben, der versucht, sich aus Mexiko in Ihr Konto einzuloggen, liegt dies daran, dass ein Sicherheitsbeamter irgendwo seine Arbeit richtig macht.
  3. Die primären Angriffsmethoden für Keys / Token / IDs unterscheiden sich von denen von Passwörtern. Möglicherweise möchten Sie sie weiterhin in Ihrer Datenbank hashen (auch hier handelt es sich nicht um Verschlüsselungsdaten, die im Klartext vorliegen müssen), aber Sie können sie nicht einfach in Ihrer Datenbank hashen und sich selbst als sicher bezeichnen. Sie müssen sicherstellen, dass sie gegen eine ganze Reihe neuer Angriffsmethoden geschützt sind. Wenn Sie sie nur als Passwörter betrachten, werden Sie einige wichtige Teile des Gesamtbildes übersehen.
  4. ol>
Vielen Dank für die hervorragende Erweiterung meiner Antwort Conor!Dies hat einige Dinge für mich geklärt, nämlich warum es so ungewöhnlich erscheint, dass Kundengeheimnisse gehasht werden.
Pedro Rodrigues
2017-02-28 16:38:06 UTC
view on stackexchange narkive permalink

Einer der Hauptgründe, warum Kennwörter vor dem Speichern gehasht werden, ist der Schutz vor einem Angreifer, der einen schreibgeschützten Zugriff auf die Datenbank erhält . Auf diese Weise kann ein Angreifer, wenn er die Liste der Anmeldeinformationen erhält, diese immer noch nicht direkt verwenden, da die Kennwörter gehasht / gesalzen sind.

Und dies ist nicht nur ein theoretisches Problem, das wir ' Wenn Sie versuchen, diese Art von Angriffen zu lösen, passieren sie ( auch für wichtige Akteure in der Branche), und korrektes Hashing hilft dabei, die Auswirkungen eines Angriffs abzuschwächen.

Wenn Sie Benutzern die Authentifizierung mithilfe eines API-Geheimnisses ermöglichen, wurde das API-Geheimnis effektiv zu einem Kennwort . Aus Sicherheitsgründen sollten sie daher dieselben Schutzmechanismen haben wie normale Kennwörter

Amazon selbst erlaubt jetzt nicht das Abrufen des API-Geheimnisses. Wenn Sie es vergessen haben, müssen Sie nach einem neuen fragen.

Nicolas Manzini
2015-11-29 17:10:52 UTC
view on stackexchange narkive permalink

Nein, für bestimmte Dienste ist dies nicht in Ordnung.

Implementierung

1. Bei Benutzerverbindung mit Anmeldekennwort Generieren Sie einen aus seinem Kennwort abgeleiteten Schlüssel, um Daten für diesen Benutzer zu verschlüsseln und in einer Sitzung auf dem Server zu speichern.

Auf diese Weise hat jeder Benutzer einen eindeutigen Schlüssel. Dieser abgeleitete Schlüssel darf nicht umkehrbar sein, dies ist der Hauptpunkt. Die Verwendung von hash_mac oder einer anderen Hashing-Methode mit Salt und / oder Hauptschlüssel ermöglicht dies.

2. Verwenden Sie diesen Schlüssel, um das generierte API-Geheimnis mit AES 256 mit einem zufälligen iv für zu verschlüsseln jeder Benutzer.

oder

2.bis Verwenden Sie diesen Schlüssel, um im letzten Moment den echten Verschlüsselungsschlüssel zu generieren und die API-Methode auf die gleiche Weise wie in zu verschlüsseln 2. Um schwebende Kennwörter im Speicher zu vermeiden.

3. Speichern Sie das iv zusammen mit der Benutzer-ID und der App-ID in einer dedizierten Tabelle in der Datenbank.

4. Speichern Sie das verschlüsselte API-Geheimnis in der Datenbank in der entsprechenden Tabelle.

Verwendung

Jetzt, wenn der Benutzer eine Verbindung herstellt In seinem Control Panel können Sie den Schlüssel neu erstellen, das iv abrufen, das API-Geheimnis für diesen Benutzer entschlüsseln und es im Klartext anzeigen. Sie zeigen auch den Schlüssel an und fragen beim API-Aufruf nach beiden, damit Sie das App-Geheimnis überprüfen können.

Wenn Sie vermeiden möchten, den Schlüssel anzuzeigen und ihn nicht beim API-Aufruf anfordern müssen, können Sie dies auch tun Verwenden Sie für die Authentifizierung dieselbe Methode wie für die Anmeldung. Das heißt, Sie können eine weitere Tabelle erstellen, um einen zufälligen Schlüssel / Salt für jede Client-App und eine hash_mac-Version des API-Geheimnisses zu speichern. Daher sind nur die API-ID und das API-Geheimnis erforderlich, um die API-Anforderung zu authentifizieren. Aber es ist mehr Arbeit.

Hinweis

Dies entspricht praktisch der Antwort von @Polynomial.

Auf diese Weise ist es für jemanden, der Ihren Server und Ihre Datenbank hackt, sehr, sehr schwierig, die Anmeldeinformationen Ihrer Benutzer zu stehlen und in ihrem Namen einen API-Anruf zu tätigen. Sie können jetzt beurteilen, ob eine Anforderung, die von einem API-Client angenommen wurde, der richtige Client oder deren Verlust ist.

Wenn der Benutzer sein Kennwort verliert, generieren Sie ein neues API-Geheimnis und einen neuen Schlüssel aus seinem neuen Kennwort neu .

Andrew Smith
2012-08-13 00:26:20 UTC
view on stackexchange narkive permalink

Nun, in diesem Backend können Sie auch Server bereitstellen und trotzdem alle Daten lesen. Sie müssen sicherstellen, dass niemand auf Ihr Backend zugreifen kann, da er sonst alle Ihre Daten einschließlich Backups auf einmal liest.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...