DOI: 10.6084/m9.figshare.20528937.v3
title: DataSet

description: <strong>A Dataset of Cache Side-Channel Attacks</strong><br> <strong>About</strong><br> Cache side-channel attacks, capable of deducing secret by analyzing timing differences in the shared cache behavior of modern processors, pose a serious security threat.<br> Flush+Reload and Prime+Probe are two widely-used cache side-channel attacks. On the one hand, they can leverage the Last Level Cache (LLC) to break the logical isolation between the attacker and victim, thus can launch cross-core, cross-VM attacks. On the other hand, they can be combined with the new micro-architecture attacks, such as Spectre , leading to more powerful and effective attack variants.<br> This repository contains four types of cache side-channel attack techniques on the Intel x86-64 architecture, they are as follows:<br> Flush+Reload Family Prime+Probe Family Spectre (Flush+Reload based) Spectre (Prime+Probe based) <strong>File Tree</strong><br> The file tree of our dataset can be shown as follows. Each folder contains a type of cache side channel attack.<br> DATASET<br> ├── Flush+Reload<br> │ ├── fr*.c<br> │ ├── fr*.c.out<br> │ ├── ff*.c<br> │ ├── ff*.c.out<br> │ ├── er*.c<br> │ └── er*.c.out<br> ├── Spectre(Flush+Reload)<br> │ ├── fr_spectre*.c<br> │ └── fr_spectre*.c.out<br> ├── Prime+Probe<br> │ ├── pp*.c<br> │ └── pp*.c.out<br> └── Spectre(Prime+Probe)<br> ├── pp_spectre*.c<br> └── pp_spectre*.c.out<br> There exists 400 samples for each type of attack. For every attack sample, the mutated source code file and the compiled binary are attached. Note that we compile the source code on Ubuntu 16.04 with GCC/G++ 5.4.0.<br> <strong>Flush+Reload Family</strong><br> Our samples of Flush+Reload are collected from three Github Repos respectively:<br> fr1*.c<br> To compile fr1*.c, use:<br> <code>$ g++ -o fr1*.out fr1*.c -lcrypto</code> <br> <code>$ cp /usr/lib/x86_64-linux-gnu/libcrypto.so ./libcrypto.so</code> fr2*.c<br> To obtain the fr2*.out, use:<br> <code>$ g++ -o fr2*.out fr2*.c -lcrypto</code> <br> <code>$ cp /usr/lib/x86_64-linux-gnu/libcrypto.so ./libcrypto.so</code> fr3*.c<br> <code>$ cp fr3*.c /Path/to/Mastik/src/</code><br> <code>$ cd /Path/to/Mastik/demo/</code><br> <code>$ gcc FR-1-file-access.c ../src/fr3*.c ../src/timestats.c ../src/vlist.c ../src/util.c -o fr3*.out</code> ff*.c<br> To compile ff*.c, use:<br> <code>$ g++ -o ff*.out ff*.c -lcrypto</code><br> <code>$ cp /usr/lib/x86_64-linux-gnu/libcrypto.so ./libcrypto.so</code> er*.c (adapted from fr1.c)<br> To compile er*.c, use:<br> <code>$ g++ -o er*.out er*.c -lcrypto</code><br> <code>$ cp /usr/lib/x86_64-linux-gnu/libcrypto.so ./libcrypto.so</code> <strong>Prime+Probe Family</strong><br> Our samples of Prime+Probe are collected from two Github Repos respectively:<br> pp1*.c<br> To compile pp1*.c, use:<br> <code>$ g++ -o pp1*.out pp1*.c -lcrypto</code> <br> <code>$ cp /usr/lib/x86_64-linux-gnu/libcrypto.so ./libcrypto.so</code> pp2*.c<br> To obtain the pp2*.out, use:<br> <code>$ touch transmitted-secret.txt</code> <br> <code>$ echo "test for pp" &gt; transmitted-secret.txt</code> <br> <code>$ gcc -o pp2*.out pp2*.c</code> <strong>Spectre (Flush+Reload based)</strong><br> Our samples of Flush+Reload with Spectre are collected from the original paper and two Github Repos respectively:<br> fr_spectre1*.c<br> To compile ff_spectre1*.c, use:<br> <code>$ gcc fr_spectre1*.c -o ff_spectre1*.out -std=gnu99</code> fr_spectre2*.c<br> To obtain the ff_spectre2*.out, use:<br> <code>$ gcc fr_spectre2*.c -o ff_spectre2*.out -std=gnu99</code> fr_spectre3*.c<br> Also, we compile ff_spectre3*.c with following command:<br> <code>$ gcc fr_spectre3*.c -o ff_spectre3*.out -std=gnu99</code> <strong>Spectre (Prime+Probe based)</strong><br> Our samples of Prime+Probe with Spectre are collected from the original paper:<br> pp_spectre*.c<br> To compile pp_spectre*.c, use:<br> <code>$ gcc pp_spectre*.c -o pp_spectre*.out -pthread -std=gnu99</code>