首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >一个简单的flush reload侧信道攻击复现,永远检测失败是为什么?

一个简单的flush reload侧信道攻击复现,永远检测失败是为什么?

提问于 2024-10-25 06:58:54
回答 1关注 0查看 39

这是我的代码,靠flush+reload来读取secret,但是输出一直都是array2[0],这是为什么

代码语言:txt
AI代码解释
复制
#include <cstdint>
#include <cstring>
#include <iostream>
#include <x86intrin.h>

using namespace std;

class Exp1 {

public:
    unsigned int junk = 0;
    uint8_t array2[4096 * 256]{};  // 用于存储不同字符的数组
    uint8_t array3[256]{};          // 结果存储数组

    uint64_t CACHE_HIT_THRESHOLD = 80; // 缓存命中阈值

    const char *secret = "exp1{flush_reload_attack}"; // 要读取的秘密

    // 用于计算 CACHE_HIT_THRESHOLD 的方法
    void cal_threshold() {
        uint64_t sum_hit = 0;
        uint64_t sum_miss = 0;
        uint64_t time;
        //volatile uint8_t *addr;

        // 计算缓未存命中时间
       // addr = &array3[0];
        for (int i = 0; i < 1000; i++) {
            _mm_mfence();
            _mm_lfence();
            _mm_clflush(&array3[0]);                // Flush 缓存

            _mm_mfence();
            _mm_lfence();
            uint64_t start = __rdtscp(&junk); // 开始计时
            _mm_lfence();
            junk = array3[0];      
            _mm_lfence();              // 访问地址
            uint64_t end = __rdtscp(&junk); // 结束计时
            sum_miss += (end - start);
        }

        // 计算缓存命中时间
        for (int i = 0; i < 1000; i++) {
            _mm_mfence();
            _mm_lfence();
            uint64_t start = __rdtscp(&junk); // 开始计时
            _mm_lfence();
            junk = array3[0];                     // 访问地址
            _mm_lfence();
            uint64_t end = __rdtscp(&junk);   // 结束计时
            sum_hit += (end - start);
        }

        // 平均时间计算
        uint64_t avg_miss = sum_miss / 1000;
        uint64_t avg_hit = sum_hit / 1000;
        cout << "sum_miss: " << avg_miss << endl;
        cout << "sum_hit: " << avg_hit << endl;

        // 设定阈值
        CACHE_HIT_THRESHOLD = (2*avg_hit + avg_miss) / 3;
       // CACHE_HIT_THRESHOLD = avg_hit;
        cout << "Calculated CACHE_HIT_THRESHOLD: " << CACHE_HIT_THRESHOLD << endl;
    }

    // 读取一个字节的内存值
   void readMemoryByte(int malicious_x, uint8_t &value, int &score) {
    int count = 1000;
    int results[256] = {0};  // 统计每个字节的计数

    // 预加载一个与攻击无关的数据地址
    volatile uint8_t temp = 0;
    for (int i = 0; i < 256; i++) {
        _mm_mfence();
        _mm_lfence();
        _mm_clflush(&array3[i]); // 清除无关数据
    }

    for (int t = 0; t < count; t++) {
        // 1. Flush 所有的 array2 缓存
        for (int i = 0; i < 256; i++) {
            _mm_mfence();
            _mm_lfence();
            _mm_clflush(&array2[i * 4096]);
        }

        // 访问一些不相关的内存地址
        temp ^= array3[0];

        // 2. Encode: 依据秘密信息访问 array2
        _mm_mfence();
        junk &= array2[secret[malicious_x] * 4096]; // 利用 secret 进行访问
        _mm_mfence();

        // 3. Reload: 通过访问时间判断哪个 array2 的位置在缓存中
        for (int i = 0; i < 256; i++) {
            _mm_mfence();
            _mm_lfence();
            uint64_t start = __rdtscp(&junk); // 计时开始
            _mm_lfence();
            junk = array2[i * 4096];          // 访问 array2
            _mm_lfence();
            uint64_t end = __rdtscp(&junk);   // 计时结束

            // 如果访问时间小于阈值,则认为该位置在缓存中
            if ((end - start) < CACHE_HIT_THRESHOLD) {
                results[i]++;
            }
        }
    }

    // 找出出现次数最多的字节
    int max = -1;
    int max_idx = -1;
    for (int i = 0; i < 256; i++) {
        if (results[i] > max) {
            max = results[i];
            max_idx = i;  // 猜测的字节值
        }
    }
    value = max_idx; // 将最有可能的字节值赋给 value
    score = max;     // 将命中次数赋给 score
}


    // 构造函数:逐字节读取 secret
    Exp1() {
        int len = 0;
        int score = 0;
        uint8_t value = 0;

        // 计算缓存命中和未命中的阈值
        cal_threshold();

        // 逐字节读取 secret
        while (len < (int)strlen(secret)) {
            readMemoryByte(len, value, score);
            cout << "Reading secret value at secret[" << len << "] = " << value
                 << " with a score of " << score << endl;
            len++;
        }
    }
};

int main() {
    Exp1 exp;  // 实例化类,执行攻击
    return 0;
}

回答 1

liquid

发布于 2024-04-17 02:04:24

本地的记录只能在APP内查看

和开发者交流更多问题细节吧,去 写回答
相关文章
BiocAsia 2022 会议记录
Bioconductor在上周四、五举行了年度的亚洲会议 BiocAsia2022,有幸拿到填邮箱送票活动的一张免费的门票(在此感谢),有空的时候听了一些报告,对于其中感觉不错的,自我觉得有一些价值的截图记录了一下,做个备份,也分享给感兴趣的读者。
王诗翔呀
2023/03/07
2660
BiocAsia 2022 会议记录
等保2.0,腾讯云TStack通过等保四级测评
近日,腾讯云TStack高分通过公安部“网络安全等级保护”四级资质测评。安全等级保护等级越高,安全保护能力越强,四级是目前云服务提供商所能满足的最高级别。 01 高标准严要求,四级认证显实力  此次测评,基本框架包含了技术和管理两个核心维度,并具体分为物理和环境安全、网络和通信安全、设备和计算安全多个模块。这验证了腾讯云TStack具有稳定、全面的安全性能,可为用户提供高效可靠的云服务,同时助力用户进行等保合规。 腾讯云TStack通过等保四级测评,一方面直接证明其可为政府、企业等用户,在关键应用
腾讯云TStack
2019/05/21
6.1K0
等保2.0,腾讯云TStack通过等保四级测评
“等保”要求趋严,腾讯云安全助力企业快速通过等保
网络安全等级保护制度推进史概览 1999 国家标准:GB17859 国家强制标准发布,信息系统等级保护建设必须遵循的强制性标准。  2017 《网络安全法》 2017年《网络安全法》中对于网络安全等级
腾讯云安全
2018/06/12
2.7K0
Java开发的党员管理系统党员会议系统党务管理系统
Java开发的大学生党员管理系统,主要功能会议,会议记录,会议主持,设置参会人员,请假申请,会议内容附件上传下载,党费管理,入党积极分子预备党员管理,人员变动,入党,表现评价等。主要侧重与开会流程 。
飞一样的编程
2023/01/02
9890
会议签到二维码的应用优势及制作流程
会议签到是会议组织者和参与者的重要环节,它可以帮助组织者了解会议的出席情况,提高会议的管理效率和质量。传统的会议签到方式,如纸质签到表、人工核对名单等,存在着耗时耗力、易出错、不环保等弊端。
草料二维码
2023/04/11
5160
会议签到二维码的应用优势及制作流程
优音通讯:接入SDK,即可享受4大电话会议功能
随着物联网、互联网+时代的到来,各类通信技术的迭代更新,企业办公越来越便捷。其中,电话会议产品的应用,打破了集中式会议在空间和时间的局限性,使企业办公不再受地域限制,只要有电话,即可随时召开或参加会议
BestSDK
2018/03/02
9280
优音通讯:接入SDK,即可享受4大电话会议功能
高效会议的十三条军规
在蓝鲸项目经常能够听到这样的声音。这也难怪,团队大了,总有各种会议和讨论,沟通成本上升不少。但是我们不能只是抱怨,如何提高开会的效率才是关键。
ThoughtWorks
2019/07/30
7160
高效会议的十三条军规
如何提升「会议效率」
会议本身并不产生价值,而执行会后达成的结论并成功拿到结果,则会创造价值。本文的目的不是帮读者消灭会议,而是希望通过探究会议的目的及合理的组织形式,试图把你从冗长低效的会议中解放出来,让会议的价值最大化。
有赞coder
2020/08/25
1.5K0
如何提升「会议效率」
等保测评师角度浅谈等保2.0
目前网络安全话题越来越火,网上关于网络安全的话题比比皆是,但大都是从甲方或乙方的角度写的,鲜有从测评机构的角度分析和总结,因此,本文将从一个4年的测评工作角度进行探讨和分析当前网络安全行业的问题,并窃以展望未来网络安全行业的发展趋势。
FB客服
2020/10/27
2.8K0
等保测评师角度浅谈等保2.0
使用Kimi AI整理会议记录,同事都来围观
俗话说“工欲善其事,必先利其器”,做会议记录有很多专业的工具,比如说onenote、notion、印象笔记、WPS等等。
朱卫军 AI Python
2024/03/26
2.6K0
使用Kimi AI整理会议记录,同事都来围观
有效管理的5大兵法之战术十二条令,指令、行动、沟通、汇报
上一篇分享了《有效管理的5大兵法》的核心价值观,是抽象的底层逻辑,而今天要分享的十二条令,是从指令、行动、沟通、汇报四个方面的战术指导,每一条指令,都是对自己的高要求,有助于提高自己的职业素质。
用户4361942
2019/08/27
12.9K0
有效管理的5大兵法之战术十二条令,指令、行动、沟通、汇报
什么是等保2.0?读懂等保标准新变化
2008年发布的《GB/T22239-2008 信息安全技术 信息系统安全等级保护基本要求 》简称为等保1.0。 近年来随着人工智能、大数据、物联网、云计算等的快速发展,安全趋势和形势的急速变化,原来发布的标准已经不再适用于当前安全要求,从2015年开始,等级保护的安全要求逐步开始制定2.0标准,包括5个部分:安全通用要求、云计算安全扩展要求、移动互联安全扩展要求、物联网安全扩展要求、工业控制安全扩展要求。 2017年8月,公安部评估中心根据网信办和安标委的意见将等级保护在编的5个基本要求分册标准进行了合并
安智客
2018/03/30
3.1K0
什么是等保2.0?读懂等保标准新变化
腾讯会议创建会议API调用设置主持人不成功
https://cloud.tencent.com/document/product/1095/42417
gz_naldo
2020/09/05
3.6K2
【玩转腾讯云】关于腾讯会议,一些你不知道的事
关于腾讯会议,一些你不知道的事
是为三水牛
2020/04/12
4.9K0
【玩转腾讯云】关于腾讯会议,一些你不知道的事
腾讯会议创建会议API调用设置主持人不成功
https://cloud.tencent.com/document/product/1095/42417
gz_naldo
2020/10/30
1.6K0
腾讯会议创建会议API调用设置主持人不成功
等保2.0的发展历史
等保2.0时代,将根据信息技术的发展应用和网络安全的态势,不断地丰富制度的内涵、拓展保护范围、完善监管措施,逐步健全网络安全等级保护制度政策、标准和支撑体系。
牛油果
2019/10/12
1.7K0
鹅厂内部分享 | 如何优雅的完成一次事故复盘
今天邀请了腾讯社交网络质量部的高级工程师给大家做个分享,一起来看看我鹅内部对事故复盘的切身体会。 事故复盘(前、中、后)应该怎么做? 作者:lu 姐 -----------------/ BEGIN /--------------- 拉起现网事故复盘对于互联网公司来说是家常便饭,但是如何做一次漂亮的复盘?通过复盘发掘产品或者项目真正的问题,并通过制定改进措施,促进各个角色配合起来解决问题,避免类似的事故重复出现。 尤其是一些影响面广、涉及部门和角色众多的事故复盘,怎样才能搞清楚,搞明白,搞的漂亮? 对于
腾讯云安全
2018/06/12
1.2K0
如何优雅的完成一次事故复盘
本文转载自:腾讯小 Q 聊质量 对于如何主导一次事故复盘很有讲究和方法。对于主导事故复盘的人我们这里称其为“复盘owner”:有的公司是QA,有的公司是测试、开发或者其他角色来承担。 复盘的几个误区 复盘owner仅仅是个会议记录仪:参会的各个角色讨论,owner无法发表任何意见。 复盘到的原因不是根本原因:表面原因,解决不了问题。 主体责任方搞错了:后面又要拉起第二次复盘。或者一味的去追责任方的责任,而忽略了事故本身的原因分析。 改进措施非常难以落地:比如改进措施严重依赖人的自觉,或者实施高复杂度的流程
小时光
2018/01/29
5.2K0
腾讯会议-restapi创建会议时指定主持人不生效问题分析
近期工单有企业版客户反馈调restapi创建会议时指定某用户为主持人但不生效,进入会议后看到自己不是主持人,想确认是什么问题导致的。
usher
2020/12/09
3.3K1
等保三级
# 1. 安装防病毒软件 ClamAV:ClamAV 是一款开源的、跨平台的防病毒软件。它可以检测很多类型的恶意软件,包括病毒、蠕虫、特洛伊木马等。要在 CentOS 7 上安装 ClamAV,请按照以下步骤操作: sudo yum install epel-release sudo yum install clamav clamav-update sudo freshclam 设置定时更新病毒库和定时扫描 #定时更新 0 1 1 * * /usr/bin/freshclam --quiet #定时扫描 0
章工运维
2023/05/19
7730

相似问题

腾讯会议能否在参会人入会前获得需要参会人的userId?

1631

腾讯会议记录?

11.2K

腾讯会议如何限定参会人只能通过腾讯会议APP方式入会?

11.4K

关于腾讯云的等保报告?

1736

腾讯会议能否支持对参会人设置不同的身份?

1589
相关问答用户
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档