CryptoFP:基于时间的设备指纹识别

作者:{Caviar}@ArkTeam

原文作者:Iskander Sanchez-Rola,
Igor Santos,
Davide Balzarotti

原文题目:Clock Around the Clock: Time-Based Device Fingerprinting

原文来源:ACM SIGSAC Conference on Computer and Communications Security (CCS ’18) 2018

计算机内部的时钟信号差异能够作为硬件指纹来识别设备。但是,以前用于测试时钟信号差异的方法是通过运行目标机器中的代码来执行的复杂的实验。而本文的作者制作了一个名为CryptoFP的工具,通过计算API函数中现有的指令序列的执行时间,它能够为某设备生成硬件指纹。另外,它也可以通过简单地计算一些看似无害的JavaScript代码来远程执行。

计算机执行指令所花费的时间取决于指令所需的时钟周期数以及每个周期的持续时间。内部时钟使用基于石英晶体的振荡器,这些晶体中的微小变化可导致时钟频率的极小但可测量的差异。通过识别现成的函数,重复足够多的次数,来放大不同时钟之间的微小差异。

实验步骤:

  • 生成指纹:采用参数n表示要测量的函数调用次数,参数m表示测量调用n次函数的过程重复的次数。用执行时间的n*m矩阵表示执行时间。


图1 设备时钟信号指纹生成算法

  • 指纹比较:计算所有迭代中每个调用参数的最常见时长,然后将第一指纹的时长与第二指纹中相同调用参数的所有生成值进行比较。如果找到一个匹配,则递增计数器。重复该过程。反转顺序并用第一个指纹中的所有生成值检查第二指纹中最常见的值。如果匹配次数除以比较次数超过固定阈值,则判定两个指纹属于同一台机器。



图2 设备时钟信号指纹比较算法

  • 选择函数:在本文中,作者测试了多种函数的可定时性,最后得出结论,CryptoFP的实现需要一个包含足够数量的指令但不足以经常被调度程序中断的函数。
  • 稳定性测试:①CPU负载:使用Debian发行版中包含的压力生成器和Windows Sysinternals的相应工具部分来控制CPU工作负载。②CPU温度:作者尝试在100%负载下对CPU施加压力20分钟,将CPU内部温度加倍。③长期稳定性:分别在指纹首次生成后一两个月重复测试。

测试场景:

  • 本机运行:CryptoFP选取string::compare,std::regex和std::hash这三个函数用于测试。CryptoFP的工作方式不会产生唯一的标识符,而是产生某种模糊散列,需要通过计算两个值之间的相似性判断指纹是否匹配。这种设计消除了指纹匹配的传递性。
  • Web远程执行:选择API中最简单的方法,即getRandomValues用于设备的指纹识别计数。生成和检查指纹所需的计算时间仅为几毫秒。由于浏览器API只是本机版本的基本包装器,因此浏览器不会进行可能污染时间测量的其他操作或内存访问。但是HTML5时序API的粒度不允许更精确的测量,所以CryptoFP的Web实现远不如本机运行时精确。



图3 摘自Chrome和Firefox的随机数生成函数

发表评论

电子邮件地址不会被公开。 必填项已用*标注