首页 文章

如何检测Java中的系统时钟篡改

提问于
浏览
0

在离线情况下,我需要检测PC的时钟是漂移还是在独立的Java应用程序中被操纵 . 我怎么能发现这个?

该应用程序将在拥挤的房间内由用户掌控至少3个小时,我不认为他们是熟练的攻击者并且能够设置黑客环境 . 大多数情况下,我希望检测至少几秒钟的跳跃 .

我需要找到一种技术来跟踪Java应用程序在独立工作站上的时间,该技术允许在系统时钟中检测到有意义的“跳跃”,但同时不会在随意的情况下造成“误报” slowdonws .

解决方案不一定能够抵抗熟练的源代码或系统时钟操作 . 该应用程序将安装在数千个工作站中,但是在非常有限的时间(小时)和公共场合 . 它只是一个基于计算机的测试软件 .

在过去,我们尝试使用System.nanoTime()设置内部时间测量,并计算重复定期System.nanoTime()调用所用的时间 . 通过这种方式,我们可以完全忽略任何时钟修改或问题 . 但这是一次失败,因为在某些机器(多核)上,API的后续请求从随机核返回值,使得该措施不可靠 .

所以,现在我们只是想检测一个突然的时间变化,因为有些工作站有错误的时钟重置自己(是的,它发生了),其他一些在测试期间做了doimain时钟更新(工作站不应该联网,但有些人没有听听我们的指示),也许有些候选人会尝试改变系统时间 .

3 回答

  • 0

    您无法在应用程序,Java或其他方面可靠地执行此操作 .

    例如,如果您的应用程序使用外部NTP时间源,那么坏人可以阻止访问NTP服务器,或者偷偷地将您重定向到伪造的NTP服务器 .

    编辑:处于离线状态 .

    这使得它更难 . 您无法区分系统时钟的明显减速或加速与许多现代机器上自动发生的CPU时钟速率调整的影响 .


    1 - 我不是在谈论完全蹩脚的尝试......比如在应用程序运行时向后扭曲时钟 . 这很容易检测到 . 坏人很容易比这更微妙 . 总是假设坏人至少和你一样聪明 . 此外,假设他们可以反编译您的代码,并弄清楚您是如何尝试检测时钟干扰并试图打败它 . 或者只是禁用检查 .

  • 0

    没有100%的解决方案 . 但是你可以让操作时钟变得更加困难 .

    您可以检查计算机启动时创建的某些选定系统文件 . 他们永远不应该在未来 . 这至少需要在操作时钟时重新启动计算机 .

  • 0

    您可以使用Apache Commons Net's NTP client继续针对受信任的NTP服务器检查PC的时钟 .

    UPDATE 1

    工作站处于脱机状态 .

    这是纯粹用Java解决的 . 您可以使用GPS或无线电时钟硬件来实时检查PC时钟 .

相关问题