问题标签 [side-channel-attacks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 基准测试,易失性
我正在尝试测量使用 rdtsc 执行函数“check()”需要多长时间,如下所示:
但是,我收到的时间差异非常小,我认为这是由于我的编译器(在 Windows 上使用 G++)优化了代码。由于'check()' 不会影响程序的任何其他部分,我认为编译器完全忽略了这个调用。
我读过关于使用称为 asm volatile 的东西来告诉编译器不要优化代码的某个部分,但我不知道如何实现它。
对此有什么帮助吗?
security - Spectre 攻击如何读取它欺骗 CPU 加载的缓存?
我理解论文中他们欺骗 CPU 以推测性地将受害者内存的一部分加载到 CPU 缓存中的部分。我不明白的部分是他们如何从缓存中检索它。
python - 用于防御时序侧信道攻击的 Python 库或技术
考虑一个获取用户名和密码的登录API 入口点。
密码被安全地散列和加盐,如果用户名不存在或密码不正确,按照适当的做法,我们会返回相同的响应。
请注意,我们还尝试确保两个控制流将完成大约相同数量的工作,因此它们应该花费大约相同的时间。
但是关于和应该是让我担心的。
假设在数据库中查找和不查找用户花费相同的时间是否安全?我可以假设散列相同的虚拟散列不会被缓存吗?
我真正想要的是一种方法:
其中constant_time
, 类似于超时,从某种意义上说,它将花费给定的时间。
所以我的问题是:为了防御基于时间的攻击,是否有一个完善的实践或图书馆可以帮助掩盖操作可能花费的时间?
security - Spectre Attack中进程如何共享array2(oracle数组)?
在 Spectre论文中,PoC 将 Victim 和 Attacker 代码放在同一进程中。
代码是这样的:
所以攻击者和受害者可以使用相同的array2
(因为它们在相同的代码、进程中)。
但在现实世界中,攻击者和受害者是分开的(它们是不同的进程),所以他们不能共享array2
。
所以这是我的问题,在这种情况下,攻击者如何测量访问时间array2
?
攻击者如何知道array2
的地址?
我不知道如何攻击者访问array2
. 这里有什么误解?
c - 有没有办法将两个变量映射到 ARM 中的同一缓存集?
我一直在尝试对 ARM 实施缓存侧通道攻击。由于 ARM 没有cflush
定义任何指令或函数(类似于)来刷新缓存内容,我试图通过Evict+Reload方法来实现这一点。此方法要求将逐出集放置在与尝试替换的数据相同的缓存集中,找出数据所在的缓存集的方法是什么,以及如何强制放置我的逐出集在同一个缓存集上?
websecurity - 为什么需要跨域隔离和CORB/CORP?
使用的缩写:
- CORP:跨域资源策略
- CORS:跨域资源共享
- CORB:跨源读取阻塞
- SSCA:投机侧信道攻击,如 Spectre
看了这篇文章,还是不明白为什么需要跨域隔离和CORB/CORP。具体来说:
如果网页可以在不使用跨域隔离功能(如
SharedArrayBuffer
)的情况下执行 SSCA,这就是 Chromium 的假设:- 为什么需要跨域隔离才能访问这些功能?
否则,如果网页在不使用跨域隔离功能的情况下无法执行 SSCA:
- 为什么需要 CORB 和 CORP?
另外,由于网页可以使用跨域隔离功能执行 SSCA,那么使用Cross-Origin-Resource-Policy: cross-origin
和之间有什么区别Access-Control-Allow-Origin: *
,因为 SSCA 可以通过嵌入资源来读取数据并且Access-Control-Allow-Origin: *
不需要它?
security - Flush & Reload 缓存侧通道攻击
我试图了解 Flush + Reload 缓存侧通道攻击。据我所知,攻击利用了可以将非特权数据加载到缓存中的事实(利用分支预测、推测执行等)。然后,攻击者使用探针阵列来访问内存,快速加载的内存被假定在缓存中(秘密数据的一部分)。
我发现不清楚的一件事是攻击者如何能够遍历作为非特权内存的虚拟内存?例如 - 迭代内核虚拟内存或其他进程的内存。
c - 如何在 Linux 系统中体验缓存未命中和命中?
您好,我一直在尝试在 Linux 中体验缓存未命中和命中。为此,我用 C 语言编写了一个程序,我在其中测量了 CPU 周期中执行printf()指令的时间。第一部分测量未命中所需的时间,第二部分测量命中所需的时间。这是给定的程序:
现在我想展示两个进程(两个终端)在公共中有缓存。所以我认为在两个终端上运行这个程序会导致:
但现在我有类似的东西:
我的理解不正确吗?还是我的程序错了?
python - Chipwhisperer TVLA 在站点包中存在错误
我正在尝试在我的 FPGA 板上使用 Chipwhisperer 提供的 TVLA 评估。(标记为 5.1.3 的 repo的克隆)他们为此提供了PA_TVLA_1-Performing_TVLA_Testing_for_Crypto_Validation.ipynb
Jupyterplaybook。我对其进行了修改以初始化 FPGA,但流程的其余部分是相同的,即捕获跟踪并分析它们。
执行分析和错误的代码。
当我运行此代码时,出现以下错误:
我真的不明白出了什么问题,它似乎是某种参数传递,但它在库本身中,所以我期待有什么改变?
更新:内容project.traces
:
project.waves[0]
波的内容是什么<chipwhisperer.common.api.ProjectFormat.IndividualIterable object at 0x7fe48203b350>
样本内容project.textins[0]
该cw
对象作为import chipwhisperer as cw
chipwhisperer 库的一部分导入。它的功能是允许将已经捕获的跟踪加载到一组数组中。
c - 内核模块中的 memcpy 指令导致内核崩溃
我目前正在尝试在 SGX 飞地上重现微架构攻击(CacheZoom),同时我必须挂钩其中一个中断服务例程(apic_timer_interrupt)。原作者继续对我不完全理解的目标地址进行了一些奇怪的计算。最重要的是,memcpy 指令会导致我的系统崩溃。
我对如何调用中断服务处理程序的理解是,有一个中断向量表存储不同中断的处理程序的基地址,所以如果我们想挂钩中断服务处理程序,我们可以通过覆盖中断向量来实现表指向我们的处理程序。我不确定内核符号表(/proc/kallsysms)是存储中断向量表行条目的地址还是处理程序本身的地址。如果它存储中断向量表条目的地址,那么仅将新处理函数的地址复制到与内核符号表中的地址对应的地址是不够的。是我错过了什么吗?
我已经附加了挂钩部分的功能。这里,plocal_apic_timer_interrupt 存储了(sudo cat /proc/kallsyms | grep "T apic_timer_interrupt) 返回的地址,plapic_next_deadLine 存储了(sudo cat /proc/kallsyms | grep "t lapic_next_deadline" | awk '{print $1}') 返回的地址.attack_handler 只是处理函数定义。
我尝试在没有 memcpy 指令的情况下运行代码,内核日志的输出如下。与变量关联的地址(我希望它有助于理解正在发生的事情):