it-swarm.com.de

Ist die Offenlegung der Serverzeit ein Sicherheitsrisiko?

Wenn ich ein Servlet erstelle, das die Serverzeit öffentlich zurückgibt (keine Authentifizierung erforderlich), ist dies ein Sicherheitsproblem? Ich konnte mir kein Problem damit vorstellen, aber irgendwie sagt mir etwas, dass ich falsch liegen könnte.

Um mehr zu erklären, wird dieser Endpunkt von mobilen Apps verwendet, um deren Sicherheit zu verbessern (um Betrug durch Anpassen des Gerätedatums zu vermeiden).

59
Manny

Die Serverzeit ist für einen Angreifer im Allgemeinen von geringem Nutzen, solange sie korrekt ist. Tatsächlich wird nicht die aktuelle Zeit (abgesehen von der relativistischen Physik, die Zeit ist überall konsistent) offenbart, sondern die Zeitverschiebung. Beachten Sie, dass es häufig zahlreiche Möglichkeiten gibt, die lokale Serverzeit zu ermitteln, auch wenn Sie die Uhrzeit nicht explizit angeben. Beispielsweise bettet TLS bis Version 1.2 die aktuelle Zeit in den Handshake ein. Auf Webseiten wird möglicherweise die zuletzt geänderte angezeigt Daten dynamischer Seiten, HTTP-Antworten selbst können die aktuelle Uhrzeit und das aktuelle Datum in Antwortheadern usw. enthalten.

Die genaue Zeitverschiebung eines Servers zu kennen, ist nur bei sehr spezifischen Bedrohungsmodellen ein Problem:

  • Clock Skew kann bei Angriffen verwendet werden, um versteckte Dienste von Tor zu dekanonymisieren.

  • Schlecht geschriebene Anwendungen verwenden möglicherweise Serverzeit, um geheime Werte zu generieren.

  • Die Umgebungsbedingungen des RTC können in erfundenen Situationen offenbart werden.

85
forest

"Servlet" klingt so, als würden Sie dort bereits einen komplexen Server betreiben.

Es gibt viele Möglichkeiten, wie Protokolle die Serverzeit verlieren. Beispielsweise verfügt HTTP über ein beliebtes Headerfeld für die Erstellungs-/Änderungszeit, und dynamisch generierte Daten haben bei ordnungsgemäßer Verwendung immer die aktuelle Systemzeit.

Aus Gründen der TLS-Authentifizierung können Sie sogar binär suchen, um das Datum und die Uhrzeit eines Endpunkts mithilfe ablaufender Clientzertifikate zu ermitteln.

Dies ist ein notwendiges Übel - wenn Sie TLS ausführen, muss Ihr Server eine Vorstellung davon haben, was ein gültiger Schlüssel/ein gültiges Zertifikat ist und was nicht. Wenn dies der Fall ist, wird dies sehr wahrscheinlich eine NTP-koordinierte Zeit sein. Sie können also wirklich nichts über den Server sagen, was ein Angreifer nicht bereits wissen würde - es gibt wirklich nur eine "richtige" Zeit.

Wenn Sie kein TLS ausführen: Das Auslaufen der Systemzeit ist wahrscheinlich nicht das erste, was Sie beheben sollten.

In Bezug auf die Sicherheit: Sie sind sich nicht sicher, ob Sie ein weiteres Servlet nur für Geräte verfügbar machen sollten, um die Weltzeit herauszufinden.

Um mehr zu erklären, wird dieser Endpunkt von mobilen Apps verwendet, um deren Sicherheit zu verbessern (um Betrug durch Anpassen des Gerätedatums zu vermeiden).

Rote Fahne. Sie sind abhängig von der Unverändertheit Ihres Kunden in Bezug auf die Sicherheit. TU das niemals. Sie können einfach nichts vertrauen, was auf den Geräten Ihres Benutzers passiert. Dies sind nicht Ihre Geräte. Sie können einfach einen Debugger anschließen und Zeitvorstellungen im Speicher Ihres Prozesses ändern, unabhängig davon, ob sie vom Betriebssystem des Telefons oder von Ihrer Anwendung gespeichert werden.

11
Marcus Müller

Die Serverzeit ist kein geheim. Im Gegenteil, es wird dringend empfohlen, Ihre Zeit mit einer externen objektiven Zeitquelle zu synchronisieren (z. B. einer Atomuhr, die über einen Zeitserver verfügbar gemacht wird).

Nicht geheim zu sein hat zwei Konsequenzen:

  1. sie müssen es nicht schützen oder verstecken. Sie können davon ausgehen, dass der Angreifer in der Lage ist, die aktuelle Uhrzeit zu ermitteln.
  2. es sollte keine Funktion für etwas haben, das Sie schützen oder verbergen möchten. Zum Beispiel sollten Sie keine Schlüssel oder Geheimnisse aus der Zeit ableiten. Alle zufälligen Funktionen, die Sie verwenden, sollten nicht mit der aktuellen Zeit (in vielen Fällen immer noch ein fauler Standard), sondern mit einer besseren Startquelle gesetzt werden.
2
Tom

Das einzige, was wirklich ein Sicherheitsrisiko darstellen könnte, sind die hochpräzisen Timer und Leistungsindikatoren. Diese können verwendet werden, um genau zu bestimmen, wie lange ein kryptografischer Prozess auf dem Server dauert, und um daraus geheime Daten abzuleiten.

Es ist unwahrscheinlich, dass Timing-Daten auf die Millisekunden- oder normale "Tick" -Rate dies aussetzen.

2
pjc50

Das einzige, woran ich denken kann, ist, wenn Sie die "Betriebszeit" des Servers offenlegen - dies könnte einen Hinweis auf die zuletzt installierten Patches geben; Ich glaube jedoch, dass dies normalerweise nicht öffentlich zugänglich gemacht wird, aber nicht überprüft wurde. Es könnte sich daher lohnen, dies zu bestätigen, wenn Sie interessiert sind.

1
user195233

Die Kenntnis der Serverzeit ist für einen Angreifer von geringem Nutzen. Hier sollten Sie sich also über mögliche Nebenwirkungen informieren.

  • ist der Schutz für dieses Servlet (in irgendeiner Weise) schwächer als der eines anderen Servlets? Was sind die möglichen Auswirkungen von keine Authentifizierung erforderlich in Bezug auf DOS/DDOS-Angriffe. Es kann von Bedeutung sein, ob die Authentifizierung auf anderen sichereren Servern verarbeitet wurde. Gibt es einen Unterschied beim Reverse Proxy?
  • was sind die Risiken für Sicherheitslücken in diesem Servlet? Hat es die gleichen Qualitätsversicherungskontrollen wie die anderen Servlets durchgeführt? Was ist mit dem Wartungszyklus?
  • was ist mit seinem Servlet-Container?
1
Serge Ballesta

Ich möchte darauf antworten, indem ich darauf hinweise, was sich aus der Annahme ergeben würde, dass das Offenlegen der Serverzeit tatsächlich ein Risiko darstellt. Dies würde bedeuten, dass Systemadministratoren zufällige Zeiten auf ihren Systemen festlegen müssten, da jeder Server, der auf die richtige Zeit eingestellt ist, anfällig wäre, da eine korrekte oder nahezu korrekte Serverzeit einfach zu leicht zu erraten ist. Es würde auch einen extremen Entwicklungsaufwand bedeuten, eine falsche Einstellung in eine korrekte Zeit für die Verwendung in jeder zeitbezogenen Anwendung zu übersetzen. Jede einzelne Datei im System hätte einen falschen Zeitstempel.

Nach meiner Erfahrung verursachen Sie durch das Einstellen falscher Serverzeiten viel mehr Probleme, als Sie mit der richtigen Einstellung erwarten können. Einige Beispiele werden in anderen Antworten erwähnt, aber Sie müssen auch verteilte Anwendungen oder Cluster berücksichtigen, bei denen normalerweise korrekte Zeiteinstellungen erforderlich sind. Grundsätzlich sind alle zeitbezogenen Informationen, die Sie speichern, fehlerhaft.

Wenn es also Ihr größtes Risiko wäre, Ihre Systemzeit offenzulegen, hatten Sie Glück. Aber höchstwahrscheinlich gibt es viele andere Bedenken, denen Sie nicht genug Aufmerksamkeit geschenkt haben. Unter https://www.owasp.org/index.php/Main_Page finden Sie sicherheitsrelevante Probleme und Best Practices.

1
Javatasse