2016-05-20 6 views
0

オフラインの状況で、PCのクロックがドリフトしているか、スタンドアロンのJavaアプリケーションで操作されているかどうかを検出する必要があります。これをどのように検出できますか?Javaのシステム時計の改ざんを検出する方法

混雑した部屋では、アプリケーションはユーザーの手元に3時間以上置かれるため、熟練した攻撃者ではなく、ハッキング環境をセットアップすることもできません。 ほとんどの場合、少なくとも秒単位のジャンプを検出したいと考えています。

スタンドアロンワークステーション上のJavaアプリケーションで、システムクロック内の重要な「ジャンプ」を検出できるようにする技術を見つける必要がありますが、同時に「falseカジュアルなスロードンウイングにはポジティブです。

解決策は、ソースコードやシステムクロックの熟練した操作に耐える必要はありません。このアプリケーションは、数千のワークステーションにインストールされますが、非常に限られた時間(時間)および一般的な状況でインストールされます。それは単なるコンピュータベースのテストソフトウェアです。

これまで、System.nanoTime()を使用してSystem.nanoTime()を繰り返し呼び出してからの経過時間を計算することで、内部的な時間測定を設定しようとしました。 このようにすれば、クロックの変更や問題を完全に無視することができます。 しかし、いくつかのマシン(マルチコア)では、APIの後続のリクエストがランダムコアから値を返して、測定が難しいため、失敗でした。

いくつかのワークステーションでは、自分自身をリセットするクロックが間違っているため(テストが行​​われている)、テスト中にクロックアップデートが行われているため(ワークステーションをネットワークに接続しないでください。誰かが私たちの兆候を聞いていない)、そしておそらくいくつかの候補者はシステム時間を変更しようとします。

答えて

0

Apache Commons Net'sNTP clientを使用して、信頼できるNTPサーバーに対してPCの時計を確認し続けることができます。

UPDATE 1

ワークステーションがオフラインになっています。

これは純粋にJavaでは解決できません。あなたはリアルタイムでPCの時計をチェックするためにGPSまたはラジオ時計のハードウェアを使用することができます。

+0

ワークステーションはオフラインです。 – Maxvader

+0

@Maxvader:更新されました。 – wilx

0

のアプリケーションでは、それを確実に実行することはできません。

たとえば、アプリケーションが外部NTPタイムソースを使用している場合、悪意のある人物はNTPサーバーへのアクセスをブロックするか、偽のNTPサーバーに巧妙にリダイレクトする可能性があります。

編集:オフラインの状況です。

これにより、さらに難しくなります。システムクロックの見かけの減速またはスピードアップを、最新の多くのマシンで自動的に発生するCPUクロックレートスケーリングの効果と区別することはできません。


1 - 私は完全にラメ試みの話ではありません...あなたのアプリケーションが動いている間に時計を後方にワーピングするようなものです。それは検出するのが簡単です。悪い人はそれよりも微妙なことは簡単です。常に悪い人は少なくともあなたのようにスマートであると仮定します。また、あなたのコードを逆コンパイルして、クロック・ディドリングをどのように検出しようとしているのか把握し、それを克服しようとしていると仮定します。またはチェックを無効にするだけです。

+0

いいえ、私は時間の流れを追跡し、後方へのジャンプを検出するならば確かにすることができます。 前進はダニを測定するのを避けることができますが、エラーが起こりやすいので、ライブラリの質問.... – Maxvader

+0

Yest、私は、スリープと他の間のミリ秒を信頼性をもって確実にカウントするタイマー実装またはアルゴリズムを探していました。 、またはそのようなもの。 しきい値に達したときに例外を発生させることができます。 – Maxvader

+0

これはうまくいかないでしょう。 –

0

100%解決策はありません。しかし、あなたは時計を操作することをより困難にすることができます。

コンピュータの起動時に作成された一部のシステムファイルを確認できます。彼らは決して将来的になるべきではありません。これは、クロックを操作するときに少なくともコンピュータを再起動する必要があります。

関連する問題