2016-05-20 14 views
0

Ich muss feststellen, ob die Uhr eines PCs in einer eigenständigen Java-Anwendung in einer Offline-Situation driftet oder manipuliert wird. Wie kann ich das erkennen?So erkennen Sie eine Systemtaktstörung in Java

Die Anwendung wird in den Händen der Benutzer für mindestens 3 Stunden in einem überfüllten Raum, ich erwarte nicht, dass sie qualifizierte Angreifer und in der Lage sein, Hacking-Umgebungen einzurichten. Meistens möchte ich Sprünge mindestens in der Größenordnung von Sekunden erkennen.

Ich muss eine Technik finden, um die Zeit in einer Java-Anwendung auf einer eigenständigen Workstation zu verfolgen, die es ermöglicht, signifikante "Sprünge" in der Systemuhr zu erkennen, aber gleichzeitig nicht "falsch" zu verursachen Positive "auf lockeren Slowdonws.

Es ist nicht notwendig, dass die Lösung gegen geschickte Manipulationen des Quellcodes oder der Systemuhr resistent ist. Die Anwendung wird in Tausenden von Arbeitsstationen installiert, aber für eine sehr begrenzte Zeit (Stunden) und in einer öffentlichen Situation. Es ist nur eine computergestützte Testsoftware.

In der Vergangenheit haben wir versucht, eine interne Zeitmessung mit System.nanoTime() zu erstellen und die abgelaufene Zeit aus wiederholten periodischen System.nanoTime() - Aufrufen zu berechnen. Auf diese Weise haben wir gelernt, dass wir jede Uhrmodifikation oder jedes Problem komplett ignorieren können. Aber es war ein Fehler, weil auf einigen Computern (Multicores) nachfolgende Anforderungen der API Werte aus zufälligen Kernen zurückgegeben, so dass die Maßnahme nicht möglich ist.

So, jetzt versuchen wir nur eine plötzliche Änderung in der Zeit zu erkennen, weil einige Workstations fehlerhafte Uhren haben, die sich selbst zurücksetzen (ja, es passiert), einige andere Updates während der Tests aktualisieren (die Arbeitsstationen sollten nicht vernetzt sein, aber jemand hört nicht auf unsere Angaben), und vielleicht versuchen einige Kandidaten, die Systemzeit zu ändern.

Antwort

0

Sie können die Uhr des PCs mit einem vertrauenswürdigen NTP-Server unter Verwendung der Apache Commons Net'sNTP client überprüfen.

UPDATE 1

Die Arbeitsstationen sind offline.

Dies ist dann nicht rein in Java lösbar. Sie können GPS- oder Funkuhr-Hardware verwenden, um die PC-Uhr in Echtzeit zu überprüfen.

+0

Die Arbeitsstationen sind offline. – Maxvader

+0

@Maxvader: Aktualisiert. – wilx

0

Sie können es nicht zuverlässig in einer Anwendung, Java oder anders tun.

Wenn Ihre Anwendung beispielsweise eine externe NTP-Zeitquelle verwendet, können die bösartigen Personen den Zugriff auf den NTP-Server blockieren oder Sie schleichend auf einen gefälschten NTP-Server umleiten.

Edit: in einer Offline-Situation.

Das macht es noch schwieriger. Sie können eine scheinbare Verlangsamung oder Beschleunigung der Systemuhr nicht von den Effekten der CPU-Taktratenskalierung unterscheiden, die bei vielen modernen Maschinen automatisch auftreten.


1 - Ich spreche nicht über total lahm Versuche ...wie die Uhr rückwärts zu verdrehen, während Ihre Anwendung läuft. Das ist einfach zu erkennen. Es ist einfach für die bösen Jungs, subtiler zu sein. Nimm immer an, dass die Bösen mindestens genauso schlau sind wie du. Nehmen Sie außerdem an, dass sie Ihren Code dekompilieren können und herausfinden können, wie Sie das Clock-Diddeln erkennen und versuchen, es zu besiegen. Oder deaktiviere einfach die Checks.

+0

Nun, nein, wenn ich den Fluss der Zeit verfolge und einen Sprung nach hinten erkenne, kann ich das sicher. Die Vorwärtsbewegung konnte vermieden werden, die Zecken zu messen, aber es ist fehleranfällig, so die Bibliothek Frage .... – Maxvader

+0

Yest, ich war auf der Suche nach einer Timer-Implementierung oder Algorithmus, die Millisekunden zwischen Schlaf und dem anderen, mit einiger Toleranz zuverlässig zählt , oder etwas ähnliches. Um eine Ausnahme auslösen zu können, wenn ein Schwellenwert erreicht wird. – Maxvader

+0

Das wird wahrscheinlich nicht funktionieren. –

0

Es gibt keine 100% Lösung. Aber Sie können es schwieriger machen, die Uhr zu manipulieren.

Sie können einige ausgewählte Systemdateien überprüfen, die beim Start des Computers erstellt werden. Sie sollten niemals in der Zukunft sein. Dies würde zumindest erfordern, dass der Computer neu gestartet wird, wenn die Uhr manipuliert wird.