cache_template_attacks, 这个库包含几个工具来执行缓存模板攻击

分享于 

10分钟阅读

GitHub

  繁體 雙語
This repository contains several tools to perform Cache Template Attacks
  • 源代码名称:cache_template_attacks
  • 源代码网址:http://www.github.com/IAIK/cache_template_attacks
  • cache_template_attacks源代码文档
  • cache_template_attacks源代码下载
  • Git URL:
    git://www.github.com/IAIK/cache_template_attacks.git
    Git Clone代码到本地:
    git clone http://www.github.com/IAIK/cache_template_attacks
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/IAIK/cache_template_attacks
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    缓存模板攻击

    这个库包含几个工具来执行缓存模板攻击。

    缓存模板攻击是一种新的通用攻击技术,可以自动基于特定的软件版本或者特定的系统信息。

    这里知识库中使用的底层缓存攻击是 FLUSH+RELOAD,Yarom和Falkner在" FLUSH+RELOAD"中提供: 一种高分辨率。低噪声。L3缓存端信道攻击的。

    Gruss。Spreitzer和Mangard的"缓存模板攻击"报纸已经发布到ipqos安全 2015.

    开始前的一个注释

    这些程序应该在 x86-64 CPU 上独立于操作系统( 只要你能把它编译一下)。 子文件夹中提供了不同的操作系统特定版本。

    警告:这里代码提供了以下代码。 你负责保护自己。你的财产和数据,以及其他由这里代码引起的风险。 这里代码可能无法检测到你的应用程序的漏洞。 这里代码仅用于测试目的。 仅在不包含敏感数据的测试系统上使用。

    入门:校准

    启动缓存模板攻击之前,你必须找到系统的缓存命中/缺失阈值。

    为此目的使用校准工具:

    
    cd calibration
    
    
    make
    
    
    ./calibration
    
    
    
    

    这个程序应该为缓存命中和缓存未命中打印直方图。 基于直方图,提出了合适的阈值( 这里值也由程序返回)。

    注意:在大多数程序中,我定义了一个常量值。 根据你的阈值更改它,如有必要。

    入门:自动按键分析

    从很好的事件开始,比如按键和应用程序来处理这些事件是非常有用的。 你可以在分析文件夹中找到分析工具。

    运行以下命令在程序( 程序应该运行,并且应该在你启动 spy 脚本时立即获得焦点) 中查找按键信息泄漏:

    
    cd profiling/linux_low_frequency_example
    
    
    make
    
    
    ./spy.sh 5 200 gedit # in our example we profile keypresses in gedit
    
    
    
    

    结果日志文件的格式可以由 gif Calc或者类似软件解析。 你可以使用这里日志文件通过缓存分析信息泄漏。

    详细说明:Keypresses ( 带有 libxdotool )

    在本例中,我们手工执行一些步骤来说明背景中发生了什么。 因此,我们将首先找到要攻击的地址范围。

    
    $ cat/proc/`ps -A | grep gedit | grep -oE"^[0-9]+"`/maps | grep r-x | grep gdk-3
    
    
    7fc963a05000-7fc963ab4000 r-xp 00000000 fc:01 2637370/usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2
    
    
    
    

    我们不关心虚拟地址,但只有地址范围和文件( 在本示例中,为 00000000 ) 中的偏移量。 这也是我们不需要考虑地址空间布局随机化的原因。

    注意:你可以使用工具vmmap找到同样的信息。

    这里行可以在以下步骤直接传递到分析工具。 我们将在这个步骤中创建一个缓存模板。 使用libxdo库。请确保在尝试这里操作之前安装它。

    注意:有第二个版本,没有libxdo运行,但是你必须通过其他方式来发布事件。

    在分析过程中,我们将模拟大量的按键。 因此,你的测试系统可能在几分钟内无法使用。 switch 到已经打开的gedit窗口/spy 已经启动。 在Linux上,运行以下行:

    
    cd profiling/linux_low_frequency_example
    
    
    make
    
    
    echo"switch to gedit window"
    
    
    sleep 5;./spy 200 7fc963a05000-7fc963ab4000 r-xp 00000000 fc:01 2637370/usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2> libgdk.csv
    
    
    
    

    在 Windows 和 MSYS/MINGW 上,运行以下行:

    
    cd profiling/windows_low_frequency_example
    
    
    mingw32-make
    
    
    echo"switch to notepad window"
    
    
    sleep 5;./spy 200 C:WindowsSystem32notepad.exe> notepad.csv
    
    
    
    

    结果日志文件的格式可以由 gif Calc或者类似软件解析。 你可以使用这里日志文件通过缓存分析信息泄漏。

    通常,查找具有单个高峰值的事件,如下所示:

    
    file, addr, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
    
    
    /usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2, 0x85ec0,= 3/110,= 0/112,= 0/117,= 0/122,= 0/120,= 1/123,= 0/125,= 0/123,= 1/124,= 0/124,= 1/123,= 0/120,= 0/122,= 0/121,= 0/122,= 0/123,= 0/122,= 0/123,= 1/123,= 1/121,= 0/118,= 0/123,= 0/122,= 126/122,= 0/122,= 2/117,= 0/117,= 0/119,= 0/121,= 0/123,= 3/118,= 14/122,= 0/120,= 0/122,= 0/117,= 4/116
    
    
    
    

    这一项在 122键按键的键按下时有 126个缓存命中。 在按其他键时几乎没有。

    为了验证我们的结果,我们现在将使用通用开发 spy 工具:

    
    cd exploitation/generic
    
    
    make
    
    
    ./spy/usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2 0x85ec0
    
    
    
    

    现在这个工具在用户按( 在任何GTK3窗口中) 键时打印一条消息。 这个 spy 工具也可以在 Windows 上使用,就像。

    详细说明:Keypresses ( 没有 libxdotool )

    没有 libxdotool,我们可以使用通用低频分析工具。 这个工具需要你以某种方式生成事件。 这取决于你想要描述的东西,它可以是另一个模拟按键的程序,一个干扰键,一个不断触发事件的程序。 在我们的例子中,我们将阻塞一个键并创建一个缓存模板,显示哪些地址响应键的笔划。 为了过滤 false 正缓存命中,我们应该执行第二次分析扫描而不干扰密钥。

    注意:缓存模板攻击可以完全自动化,但这需要事件也自动进行。 在前面的例子中,我们使用libxdotool来。

    在 Windows 或者OSX上,你可能没有procfs来检索共享库映射。 然而,在 Windows 上有 vmmap,它提供了相同的信息,在OSX上,你至少可以使用ldd并扫描二进制代码。 因此,我们执行与前面类似的通用示例工具:

    
    cd profiling/generic_low_frequency_example
    
    
    make
    
    
    sleep 5;./spy 200 7fc963a05000-7fc963ab4000 r-xp 00000000 fc:01 2637370/usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2> libgdk.csv
    
    
    
    

    OpenSSL AES表攻击

    这个例子需要一个自编译的OpenSSL库来启用它的T-Table-based AES实现。 将 libcrypto.so 放在同一文件夹中,并确保程序实际将它的用作共享库。 然后运行

    
    cd profiling/aes_example
    
    
    make
    
    
    ./spy
    
    
    
    

    t 表很容易在日志文件中定位,因为只有 64个地址经常被访问,但不总是访问。 随后,你可以从配置文件中监视地址,以导出有关密钥的信息。

    在开发阶段,spy 工具必须使用未知密钥触发加密本身,然后可以在大约1 个加密密钥之后,确定每个密钥字节的上限。

    当然,我们知道OpenSSL不再使用 T-Table-based AES实现。 但是可以使用这个工具来配置任何( 可能已经关闭的源) 二进制文件,以查找它是否包含一个加密算法,该算法通过缓存泄漏关键。 只使用固定键触发算法执行

    完全自动化攻击

    在这个例子中,我们将运行一个脚本,它将根据需要自动执行分析阶段,然后 switch 到multi_spy开发工具。

    然后运行

    
    cd exploitation/multi_spy
    
    
    make
    
    
    cd.. /../profiling/linux_low_frequency_automated
    
    
    ./spy.sh 5 200/usr/lib/x86_64-linux-gnu/libgdk-3.so.0.1200.2
    
    
    
    

    配置文件完成后,spy 工具应进入开发模式。 分析阶段的结果将打印在屏幕上,例如:

    
    Events per address:
    
    
     0x85d00:q
    
    
     0x85d40:q
    
    
     0x85d80:ghijklnqtuvwz
    
    
     0x85dc0:iuzn
    
    
     0x85e00:iznuj
    
    
     0x85e40:inzu
    
    
     0x85e80:n
    
    
     0x85ec0:n
    
    
    
    

    就是这样,现在它取决于你的软件泄漏数据以及如何利用它。 我希望它能帮助你关闭这些漏洞。


    tool  rep  REPO  TEMP  template  Repository  
    相关文章