Remark

Abstract

Side-channel attacks allow an adversary to uncover secret program data by observing the behavior of a program with respect to a resource, such as execution time, consumed memory or response size. Side-channel vulnerabilities are difficult to reason about as they involve analyzing the correlations between resource usage over multiple program paths. We present DifFuzz, a fuzzing-based approach for detecting side-channel vulnerabilities related to time and space. DifFuzz automatically detects these vulnerabilities by analyzing two versions of the program and using resource-guided heuristics to find inputs that maximize the difference in resource consumption between secret-dependent paths. The methodology of DifFuzz is general and can be applied to programs written in any language. For this paper, we present an implementation that targets analysis of Java programs, and uses and extends the Kelinci and AFL fuzzers. We evaluate DifFuzz on a large number of Java programs and demonstrate that it can reveal unknown side-channel vulnerabilities in popular applications. We also show that DifFuzz compares favorably against Blazer and Themis, two state-of-the-art analysis tools for finding side-channels in Java programs.

Background

Side-Channel Attack(旁路攻击):
在密码学中,旁路攻击又称侧信道攻击、边信道攻击(英语:Side-channel attack)是一种攻击方式,它基于从密码系统的物理实现中获取的信息而非暴力破解法或是算法中的理论性弱点(较之密码分析)。例如:时间信息、功率消耗、电磁泄露或甚是声音可以提供额外的信息来源,这可被利用于对系统的进一步破解。某些侧信道攻击还要求攻击者有关于密码系统内部操作的技术性信息,不过,其他诸如差分电力分析的方法在黑盒攻击中效果明显。许多卓有成效的侧信道攻击基于由保罗·科切开拓的统计学方法。需要注意的是,如果破解密码学系统使用的信息是通过与其使用人的合法交流获取的,这通常不被认为是旁路攻击,而是社会工程学攻击。

Side-Channel Analysis:
如果攻击者无法通过对系统的观察推断出机密数据,则安全(也称为不干扰)
可以通过self-composition来分析 [Barthe2004]

Example

本文以一个密码检查的例子来说明Side-Channel 分析。下图的两个例子分别以不安全和安全的方式显示了将用户密码与服务器端存储的密码进行比较的代码。第一个例子是一个不安全的代码,因为密码正确和密码错误时存在一个时间差异。攻击者可以通过增量猜测来找到正确的密码(先猜第一位,猜错的话程序执行只会进入第5行1次,猜正确的话会进入2次)。相比之下,第二个例子显得更安全。
在这里插入图片描述
在这里插入图片描述

Approach

Side-channel分析有个经典的self-composition方法,如下图所示。如果攻击者无法通过对系统的观察推断出机密数据,则安全(也称为不干扰)
在这里插入图片描述

在Fuzzing方面,融合了self-composition的思想,同时测试一个程序的两个copies,观察两个输出的difference。
Fuzzing策略上,引导程序的执行增大这两个输出的difference(即下图的cost1和cost2的diff)。
在这里插入图片描述

最后,再让我们将前面的示例用DifFuzz运行一次。
在这里插入图片描述
在这里插入图片描述

Evalutaion

  • build on top of AFL [AFL, Kersten2017, Noller2018]
  • Blazer [Antonopoulos2017]
  • Themis [Chen2017]
  • and more projects from GitHub, and STAC [DARPA2018]
  • runtime: 30min, 5 times
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Personal Thoughts

  • 应用场景好,一般fuzzing的目标是找程序的crashes,DifFuzz是利用fuzzing这个技术去进行resource usage的分析,能找一些程序逻辑上面的问题(e.g., 密码破解,用户敏感信息泄露)。
  • 不仅关注资源消耗的最坏情况,而且关注最好情况(SlowFuzz和PerfFuzz只关注最坏情况)。更重要的是关注不同输入造成的资源消耗上的Diff
  • Diffuzz与其他工具相比的一个优点是,它不仅显示应用程序是否易受攻击,而且还显示了该漏洞的严重性。因为最好情况和最坏情况的差异能一定程度上能反应漏洞的严重程度,SlowFuzz和PerfFuzz没有考虑到这一点(SlowFuzz的Feedback是让|Max-0|增大, 而DifFuzz的Feedback是让|Max-Min|增大。SlowFuzz没有考虑到 Max 和Min之间的差异可以说明程序的安全性)。
  • Fuzzing本身就是以不同输入测试一个程序的过程,这整个过程就能判断出资源消耗的变化(如SlowFuzz,PerfFuzz),硬要做成Differential Fuzzing的意义不大(当然人家为了水Paper我们也不好说什么)。
  • 只是判断某个组件的安全性(密码函数),无法判断整个程序的安全性(如密码组件是安全的,而其它组件的时间消耗也有差异。例如SlowFuzz和Perffuzz揭露的算法复杂性问题而不是side-channal)
  • DifFuzz需要一些人为的努力(e.g. 需要人为编写驱动),并且将函数输入转化为(pub,sec)的形式。
    最好情况的探索经常是没必要的,类似SlowFuzz和PerfFuzz那样只探索最坏情况通常已经足够?其实SlowFuzz和PerfFuzz的方法也适用于这种问题。
  • DifFuzz对于内存消耗的测量方法不好,它是使用固定时间间隔的采样,其精度取决于采样的时间间隔。
DIFFUZZ: Differential Fuzzing for Side-Channel AnalysisRemarkConference: ICSE 2019Full Paper: https://yannicnoller.github.io/publications/icse2019_nilizadeh_diffuzz.pdfCode: https://github.com/i...
侧信道 分析 技术简介 是对安全芯片的侧信道 分析 (s ide channel analysis)的攻击方法,比如通过功耗、电磁辐射、时间、及其它一些可检测到的信息泄露出与密钥相关的信息。 如果集成电路未采取保护措施,则可能只需要很小的代价就可以实现破解并获得密钥。 根据目前报道的文献资料,如未对侧信道攻击进行防御设计,许多算法都可在短期内(几分钟到数天)被破解。 侧信道 分析 攻击方式成为破解密码芯...
DLF uzz : Diff erential F uzz ing Testing of Deep Learning Systems 文章目录DLF uzz : Diff erential F uzz ing Testing of Deep Learning Systems简介摘要动机DLF UZZ 方法架构算法结论结论 DLF uzz : Diff erential F uzz ing Testing of Deep Learning Systems DLF uzz :深度学习系统的 差分 模糊 测试 2018.12 DLFuz
论文笔记:Non-Profiled Deep Learning-based S ide - Channel attacks with Sensitivity Analysis(DDLA) Benjamin Timon eShard, Singapore Contribution 基本思路就是我们先添加一个圆,动态改变他的材质,和大小,然后就出现上图一样的动态效果了,下面我们来实现一下 # 实现思路 我们先来加载一个原形,展示在地图上。官方文档地址https://cesium.com/learn/cesiumjs/ref-doc/EllipseGraphics.html 不会的可以自行看文档 let entity = this.viewer.entities.add({ position: Cesiu
Conference: ICSE 2020 Full Paper:https://yannicnoller.github.io/publications/icse2020_noller_hy diff .pdf Artifact:https://github.com/yannic... 2014 - High Performance F uzz ing 样本选择、Engine 设计、AFL-DYNINST、Windows fork() 2015 - Go Speed Tracer Gu ide d F uzz ing、二进制翻译、硬件 Tracing 2016 - Harnessing Intel Processor...
差分 隐私是一种保护个体隐私的技术,在k-means聚类算法中可应用 差分 隐私来保护敏感数据。在mapreduce框架下,可以通过以下步骤实现支持 差分 隐私保护的k-means聚类方法。 首先,数据拆分。将原始数据集分成多个数据块,每个数据块分配给不同的map任务进行处理。这样可以保证每个map任务只能访问到部分数据而不会暴露整个数据集。 然后,随机扰动。在每个map任务中,对自己所拥有的数据进行随机扰动,通过向特征向量添加噪声来 模糊 数据。这样可以在一定程度上隐藏个体的敏感信息,保护数据隐私。 接下来,局部聚类。每个map任务对自己的数据进行局部聚类操作,生成局部的聚类结果。这些局部聚类结果包含了扰动数据的统计信息,但并不能完全反映原始数据的真实情况。 最后,全局聚类。将所有的局部聚类结果传递给reduce任务,reduce任务对这些局部聚类结果进行整合和统计,得到全局的聚类结果。 通过上述步骤,支持 差分 隐私保护的k-means聚类方法在mapreduce框架下得以实现。由于在每个map任务中对数据进行了扰动,使得原始数据不易被恢复,从而保护了个体的隐私。同时,通过全局聚类操作,还可以得到相对准确的聚类结果,为数据 分析 提供可靠的统计信息。这种方法将 差分 隐私与分布式计算相结合,实现了隐私保护和数据 分析 的平衡。