一、教师讲座内容总结
讲座一、Web安全与内容安全
在本次讲座中,张健毅老师首先讲述了信息技术的发展阶段,接着讲了信息化发展凸显的信息安全问题,之后重点讲解了Web应用安全,包括常见的Web漏洞,如SQL注入、XSS跨站脚本攻击、CSRF跨站请求伪造等。另外,张老师还为我们介绍了隐私安全。
1. 信息技术的发展阶段
通信(电报/电话) -> 计算机 -> 网络 -> 网络化社会
信息安全的历史从通信开始。
2. 信息化发展凸显了信息安全问题
2010年6月 震网病毒(stuxnet病毒) -> 证明物理隔离也不一定安全
2015年9月 XcodeGhost -> 证明编译层面也可能存在安全漏洞
网络威胁惊人,每天超过亿次GPT攻击,攻击方式:可探测 -> 可访问 -> 可掌控
威胁方-防护方的非对称性:
- 攻防技术非对称
大量自动化攻击工具的出现,使得入侵网络与信息系统的门槛降到极低。 - 攻防成本非对称
攻防技术的非对称带来了攻防成本的非对称。风险成本也极低。对于国家安全而言,攻防成本的非对称性具有特殊的意义。
伪基站短信照片案例层出不穷。 - 攻防主体非对称
3. Web应用安全
常见的Web漏洞:
漏洞名称 | 漏洞等级 |
---|---|
SQL注入 | 高危 |
跨站脚本攻击漏洞 | 高危 |
Cookie欺骗 | 高危 |
CSRF(跨站请求伪造) | 中危 |
Web信息泄露 | 中危 |
权限问题 | 中危 |
逻辑漏洞 | 中危 |
第三方程序漏洞 | 高危 |
Web服务器解析漏洞 | 高危 |
弱口令 | 高危 |
SSRF | 中危 |
3.1 SQL注入
SQL注入本质是由于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。 攻击者通过在应用程序预先定义好的SQL语句结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的查询,篡改命令。
- 按提交字符类型可分为:数字型、字符型、搜索型。
- 按HTTP提交方式可分为:GET、POST、Cookie。
- 按注入方式可分为:盲注、union注入、报错注入。
3.2 XSS跨站脚本攻击
当用户访问网页时, 攻击代码在用户的浏览器上被执行, 就形成了一次XSS跨站脚本攻击。根据XSS漏洞的原理可以将XSS跨站攻击划分成反射性XSS和存储型XSS。对于反射性XSS, 攻击者需要欺骗用户点击一个恶意URL才能攻击成功。存储型XSS的危害相对来说更大一些, 攻击者提交的恶意代码, 会被Web服务器端接收并存储, 访问该网页的用户, 他们的浏览器会执行这段恶意代码。
3.3 CSRF跨站请求伪造
攻击者使用被攻击者的身份,以其名义发送恶意请求,会造成个人隐私泄露以及财产安全。
4. 隐私安全
当前许多企业和公司会对用户轨迹进行分析,导致用户隐私安全受到威胁。
讲座二、量子密码
在本次讲座中,孙莹老师为我们系统地讲解了量子密码的研究背景、量子密码的基本物理概念、量子密码典型协议BB84量子密钥分配协议、量子密码四个基本步骤、量子密码的研究现状即实验进展。
1 量子密码研究背景
传统密码
对称密码体制 | 公钥密码体制 | |
---|---|---|
优点 | 加密速度快,适合批量加密数据 | 可解决密钥分配、管理问题,可用于签名 |
缺点 | 密钥分配、密钥管理、没有签名功能 | 加密速度慢 |
实际使用时,多用混合密码体制:用公钥密码体制分发会话密钥,用对称密码体制加密数据。
传统密码的挑战
然而,这种传统密码受到了来自量子密码的挑战:基于大数分解的Shor算法和基于快速搜索的Grover算法能够迅速破解传统密码。
量子密码
量子秘钥分配(QKD)的特点:
- 可以检测到潜在窃听行为。
- 基于物理学原理,理论上可达到无条件安全。
也就是说,量子密码可达到无条件安全的保密通信。
2 基本物理概念
量子
微观世界的某些物理量不能连续变化而只能取某些分立值,相邻分立值的差称为该物理量的一个量子。
直观理解:具有特殊性质的微观粒子或光子。
量子态
- 经典信息:比特0或1,可用高低电压等表示。
- 量子信息:量子比特(Qubit) |0> (水平方向) |1> (竖直方向)
- 量子比特还可以处在不同状态的叠加态上。
量子态的可叠加性带来一系列特殊性质
- 量子计算的并行性:强大的计算能力
- 不可克隆定理:未知量子态不可准确测量
- 测不准原理:未知量子态不可准确测量
- 对未知量子态的测量可能会改变量子态
量子比特的测量--力学量、测量基
- 每个力学量都对应一个厄米算符(矩阵)
- 测量某个力学量时,测量结果为此力学量对应厄米算符的本征值(特征值)
- 测量后量子态塌缩到此本征值对应的本征态(特征向量)
3. 四个基本步骤
- 信息传输
- 窃听检测
- 纠错
- 保密增强
信息传输:通常用到两种信道
量子信道
- 传输量子载体,例如:光纤、自由空间等。
- 允许窃听者对传输的量子消息进行任意窃听和篡改。
经典信道
- 传输经典信息,例如:测量基、测量结果等。
- 基本假设:窃听者只能窃听经典消息而不能篡改它们。
窃听检测
- 一般手段:随机选择部分量子载体,比较初末状态。
- 对好的协议:窃听必然干扰量子态,进而引入错误。
- 一旦发现存在窃听(错误率过高),则终止通信,丢弃相关数据。
- 因为传输的是密钥(即随机数),而不是秘密消息,因此可以丢弃它们而不会因此泄露秘密。
纠错和保密增强:解决噪声问题
- 理想情况(无噪声):有错误就认为有窃听
- 实际情况(有噪声):噪声也会带来一定错误率
- 对策:设定一个阈值,当错误率高于这个阈值时丢弃通信数据,反之保留(即允许有一定的错误)
- Alice和Bob的密钥可能不完全一致
- Eve可能在噪声掩饰下获得部分密钥信息
- Alice和Bob的密钥可能不完全一致
- 纠错:纠正密钥中的错误
- 保密增强:通过压缩密钥长度,将Eve可能获得的部分密钥信息压缩至任意小,得到安全的密钥
讲座三、人工智能与密码分析设计
在本次讲座中,金鑫老师主要分为五个部分为我们详细讲述了人工智能与密码分析设计的结合,包括技术背景、密码分析与机器学习、深度学习简介与现状、深度学习与密码分析、深度学习与密码设计。
1. 技术背景
AI+Security=AISec
用AI和ML解决安全问题(让安全更智能):
计算机取证、垃圾邮件检测、身份验证、网络钓鱼检测与预防、僵尸网络监测、入侵检测和响应、异常行为检测、恶意软件标识、数据匿名/反匿名、社会网络安全、大数据安全分析等。用安全性解决A问题(让AI更安全):
分布式安全推理与决策、安全的多方计算和加密方法、隐私保护数据挖掘、差异隐私、验证码的设计与分析、人工智能信任和声誉方法、通过智能探测进行漏洞测试、生成训练和测试集的技术和方法等。
2. 密码分析与机器学习
密码分析与机器学习之间有天然的相似性:
x -> F(x) -> y
对于机器学习:
x为输入样本,F(x)为机器学习的模型(可以理解为一个函数),y为输出,如果是分类,则y是分类标签,如果是回归,则y是真实值向量。
对于密码分析:
x为输入的明文,F(x)为密钥(可以理解为一个函数),y为加密后得到的密文。
从研究趋势来看,越来越多的密码分析方法开始使用机器学习结束,例如破解DES的遗传算法、用于侧信道分析的支持向量机算法等。
3. 深度学习简介与现状
人工智能(AI)/机器学习(ML)/深度学习(DL)
人工智能分为很多分支,机器学习只是人工智能的其中一个分支,而深度学习是机器学习的一个分支。这三者之间是包含关系。
深度学习简介
近几年,深度学习技术掀起了人工智能研究与应用的新一轮浪潮,深度学习技术在多个方面取得了较大突破,其在人工智能系统中所占的比例日趋增大,已经应用于多项实际场景业务系统中。深度学习技术涌现出大量性能优秀的深度神经网络(DNN),例如卷积神经网络(CNN)、循环神经网络(RNN)、生成对抗网络(GAN)等,在大树分析、图像识别、机器翻译、视频监控中取得了较大进步。
4. 深度学习与密码分析
4.1、神经网络的侧信道攻击
4.2、基于循环神经网络的明文破译
4.3、基于生成对抗网络的口令破译
4.4、基于深度神经网络的密码基元识别
5. 深度学习与密码设计
目前密码算法的设计还停留在人工设计阶段,较为耗时耗力,难以适应未来对密码算法设计的需求,能不能让机器自动设计密码算法?
生成对抗网络(Generative Adversarial Network, GAN)
生成式对抗网络(GAN, Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。
密码组件经过生成对抗网络中的算法生成器,得到设计出来的密码算法,同时密码破解器将对此密码算法进行破解,算法生成器和密码破解器就这样在相互博弈中学习产生出好的算法和好的破解方法。
讲座四、信息隐藏
在本次讲座中,夏超老师为我们全方位讲述了信息隐藏相关知识,其中重点讲解了信息隐藏的重要技术--隐写,包括隐写技术、隐写分类、隐写分析等。
1. 从密码到信息隐藏
- 密码主要解决了信息保密传输、数据来源认证与完整性认证等信息安全问题。
保护保密通信的数据--加密,但密码方法不能解决以下两方面问题:
1、保密通信的行为隐蔽性问题
保护保密通信的事实--隐蔽通信(隐写)2、内容保护与内容认证问题
密码保护数据,但是内容≠数据,内容个别肆意传播的问题要归信息隐藏“管”。
密码保护的是内容,而信息隐藏保护的是信息“传输”这个行为。
2. 信息隐藏
信息隐藏是指将特定用途的信息隐蔽地藏于其他载体(Cover)中,使得它们难以被发现或者消除,通过可靠提取隐藏的信息,实现隐蔽通信、内容认证或内容保护功能。
信息隐藏主要包括水印、可视密码、隐写等。
信息隐藏--鲁棒水印(Robust Watermaking)
鲁棒水印是重要的数字产权管理与安全标识技术之一,指将与数字媒体版权或者购买者有关的信息嵌入数字媒体中,使攻击者难以在载体不遭到显著破坏情况下消除水印,而授权者可以通过检测水印实现对安全所有者或者内容购买者等信息的认定。
信息隐藏--可视密码(Visual Cryptography)
可视密码技术使Naor和Shamir于1994年首次提出的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别出来。其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。
信息隐藏--隐写(Steganography)
- 隐写是基于信息隐藏的隐蔽通信或者隐蔽存储方法,将秘密信息难以感知地隐藏在内容可公开的载体中,保护保密通信或者保密存储这些行为事实。
- 称隐写后的载体为隐写媒体Stego。
3. 隐写技术
隐写技术可被恐怖组织和非法团体等用于传递信息,从事分裂国家主权、破坏社会稳定等非法活动。
- 为了有效遏制隐写的恶意使用,隐写分析已受到国内外学术界的广泛关注和高度重视,被诸多国家安全军事部门应用于实战之中。
- 隐写分析是隐写的反向技术,主要用于检测媒体文件是否含有隐藏的信息,可用于对隐写媒体文件进行预警、阻断。
隐写分析对抗隐写的主要手段:发现与识别隐写对各类特征的扰动。
- 有效提取隐写分析特征。发现与提取对隐写敏感的特征。
- 有效构造隐写特征识别系统。构造与训练能有效识别隐写分析特征的系统。
- 有效获得先验知识。先验知识是指分析者知道的有关隐写者所采用的算法和参数等信息,它能帮助分析者更好地提取隐写分析特征并构造特征识别系统。
- 有效提取隐写分析特征。发现与提取对隐写敏感的特征。
4. 隐写分类
- 文本
- 轻微改变字符间距
- 不可见字符
- (Office, PDF, HTML)的格式信息
- 轻微改变字符间距
- 音频
- MP3
- AMR
- 视频
- 运动向量
- 变换系数
- 帧内/间预测模式、量化参数、熵编码
- 运动向量
- 图像
- 空域图像
- JPEG图像
- 空域图像
5. 隐写
LSB嵌入
最简单且最普遍的隐写算法就是最低有效位嵌入算法(The Least Significant Bit, LSB)
矩阵嵌入(改得少)
以最小的嵌入修改数目达到嵌入要传递信息的目的,可提高嵌入效率,即利用较少的嵌入修改嵌入同样数量的秘密信息。
对于2bit的信息,LSB需要平均改动1个像素,矩阵嵌入只需平均改动3/4个像素。
自适应隐写(改的好)
非自适应隐写(Non-adaptive Steganography)
非自适应隐写不考虑载体的图像内容,随机嵌入信息。
“嵌入失真函数+STCs编码”(Syndrome-Trellis Codes)
根据构造的嵌入失真函数计算载体图像中元素发生更改所引起的失真,利用隐写编码控制秘密信息的嵌入位置,在最小化图像总体嵌入失真的同时保证秘密信息的准确提取。
HUGO(Highly Undetectable steGO)是第一个基于“嵌入失真函数+STCs编码”的自适应隐写算法,应用于BOSS(Break our Steganographic System)隐写分析竞赛。
自适应隐写
- 空域自适应隐写
- WOW(Wavelet Obtained Weights)
- S-UNIWARD(Spatial UNIversal WAvelet Relative Distortion)
- HILL(HIgh-pass, Low-pass, and Low-pass)
- WOW(Wavelet Obtained Weights)
- JPEG域自适应隐写
- UED(Uniform Embedding Distortion)
- SC-UED(Single Coefficient UED)
- JC-UED(Joint Coefficients UED)
- J-UNIWARD(JPEG UNIversal WAvelet Relative Distortion)
- UED(Uniform Embedding Distortion)
7. 隐写分析
高维隐写分析特征
高维隐写分析特征可以尽可能多地捕获隐写对图像统计特性的影响。空域高维隐写分析特征:
JPEG图像解压到空域,之前的JPEG图像隐写分析特征都是在DCT系数上提取的。因为空域提取的特征对JPEG图像自适应隐写更为敏感。
利用了相位信息(JPEG phase),所以被称为JPEG-phase-aware特征。
选择信道高维隐写分析特征
讲座五、区块链
在本次讲座中,张健毅老师为我们讲述了区块链技术、比特币、挖矿工作、共识机制、奖励合作的制度设计、区块链的未来等。
区块链
什么是比特币
比特币(Bitcoin),是一种由开源的P2P软件产生的电子币,数字币,是一种网络虚拟资产。比特币基于一套密码编码、通过复杂算法产生,这一规则不受任何个人或组织干扰,去中心化;任何人都可以下载并运行比特币客户端而参与制造比特币;比特币利用电子签名的方式来实现流通,通过P2P分布式网络来核查重复消费。每一块比特币的产生、消费都会通过P2P分布式网络记录并告知全网,不存在伪造的可能。
比特币的特点
- 数字货币。
- 不依托于任何国家或组织而利用计算机技术独立发行。
- 通过P2P分布式技术实现,无中心点。
- 所有人均可自由的参与。
- 总量有限,不可再生。
- 本身机制开源,可以被山寨。
比特币交易
每一位所有者(A)利用他的私钥对前一次交易T1和下一位所有者(B)的公钥(俗称:地址)签署一个随机散列的数字签名,A将此数据签名制作为交易单T2并将其(交易单T2)广播全网,电子货币就发送给了下一位所有者。
其中:
1.交易发起者的私钥:私钥为个人所知,他人无从知晓。
2.前一次交易:前一次交易数据说明了该次交易的货币的来源(这部分货币是怎么到当前发起人这里来的)。
3.下一位所有者的公钥:即交易接收方的地址,此数据说明了当前交易的目标是谁。
4.数字签名:发起方将前一次交易数据和接收方公钥连接起来并对其求Hash值x,再利用自己的私钥对x加密,便得到了这份数字签名。
Block
- 比特币网络中,数据以文件的形式被永久记录,称之为区块(Block)。
- 记录交易单的数据单元叫做Block,一个Block上会记录很多交易单。
- Block有很多份,每个Block只记录比特币全网10分钟内的交易信息,每约10分钟产生一个新的Block。
- 每个新的Block含有的一定数额的比特币归创建者所有,此规则称为“激励”。
比特币虽然是电子货币,但比特币系统中并没有特定的数据结构用来单纯代表货币。本质上,比特币的存在是通过交易单来提现。通俗的来讲,现实生活中我们有实在的纸张来代表我们的货币(比如面值10块的RMB纸张代表着10块钱RMB),当我们去银行核对财务时银行也提供对账单来表示我们的货币去留。比特币的提现依托于交易单,交易单类似于银行的对账单,其通过记录货币的去留来证明你有多少货币,而不是提供给你具体的货币单元。
挖矿工作
生产Block的过程,被形象的称为“挖矿”,生产工也被称为“矿工”。
挖矿过程实际上就是反复去尝试寻找一个随机数(又称“幸运数”),使得将最后一个Block的hash值、当前世界中尚未被加入到任何Block的交易单、随机数三部分组织起来送入SHA256算法计算出散列值X(256位),如果X满足一定条件(比如前20位均为0),那么该节点初步获得创建Block的权利。
工作量证明难度系数
对于每个Block存在一个难度系数,此系数可以转换为一个256位的整数,挖矿计算出的Hash值X必须小于该整数,此条件作为寻找随机数的附加条件。
当某时刻网络检测到新Block的产生速度不符合约10分钟一个时,将调解该系数(加大或者缩小),从而使下一个Block的产生速度符合预期。
每当节点(矿工)计算出了一个符合条件的随机数时,它仅仅获得了创建临时Block的权利,它立即将相关数据打包好作为一个临时Block并广播全网。
每10分钟内全网不止一个节点能计算出幸运数字,即十分钟内会有多个节点在网络中广播它们各自打包好的临时Block(都是合法的)。通过谁先计算出谁后计算出来决定接受谁的临时Block转正显然很难做到,因为所有节点的时间不可能严格一致(而且可以任意被调节),而且网络传输有快有慢。
Block链分支
某一节点若收到多个针对同一前续Block的后续临时Block,则该节点会在本地Block链上建立分支,多个临时Block对应多个分支。
从block hash算法我们知道,合理的block并不是唯一的,同一高度存在多个block的可能性。那么,当同一个高度出现多个时,主链即出现分叉(Fork)。遇到分叉时,网络会根据下列原则选举出Best Chain:
- 不同高度的分支,总是接受最高(即最长)的那条分支
- 相同高度的,接受难度最大的
- 高度相同且难度一致的,接受时间最早的
- 若所有均相同,则按照从网络接受的顺序
- 等待Block Chain高度增一,则重新选择Best Chain
分支博弈
我们假设所有的节点都是理性的,追求收益最大化;都是不诚实的,且不惜任何手段获取利益;所有节点均独自挖矿不理会其他节点,并将所得收益放入自己口袋,现象就是一个节点挖一个分支。由于机器的配置总是有差别的,那么算力最强的节点挖得的分支必然是最长的,如果一个节点的分支不是最长的,意味其收益存在不被认可的风险(即零收益)。为了降低、逃避此风险,一些节点肯定会联合起来一起挖某个分支,试图成为最长的分支或保持最长分支优势。
一旦出现有少量的节点联合,那么其他节点必然会效仿,否则他们收益为零的风险会更大。于是,分支迅速合并汇集,所有节点都会选择算力更强的分支,只有这样才能保持收益风险最小。最终,只会存在一个这样的分支,就是主干分支(Best/Main Chain)。
对于不诚实节点来说,结局是无奈的:能且只能加入主干挖矿。不加入即意味被抛弃,零收益;加入就是老实干活,按占比分成。
区块链技术
点对点对等网络
- 网格网络
- 权限对等、数据公开
- 数据分布式、高冗余存储
共识机制
- 工作量证明(PoW)
- 权益证明(PoS)
- 基于信任的Quorum
PoS是PoW的一种升级共识机制,根据每个节点所占代币的比例和时间,等比例的降低挖矿难度,从而加快找随机数的速度。在一定程度上缩短了共识达成的时间,但还是需要挖矿,本质上没有解决商业应用的痛点。
共识机制防止了“双重支付”
- 信息复制的零边际成本vs价值的唯一不可复制性
- 信息互联网->价值互联网
数据可验证
- PKI公钥体系
- 数字签名提供密码学证据
- 零知识证明
- 数字签名提供密码学证据
- 不可变数据
- 只可添加,不可编辑
- 不可变数据+时间戳,为互联网加上了时间轴
- 只可添加,不可编辑
奖励合作的制度设计
- 非合作博弈--不基于信任,无外部强制力
- 合作是一种演化稳定策略,合作达到纳什均衡
- 51%攻击问题
51%攻击
攻击步骤:
- 将手中的BTC充值各大交易所,然后卖掉,提现;或者也可以直接卖给某人或某一群人;
- 运用手中的算力,从自己对外付款交易之前的区块开始,忽略自己所有对外的付款交易,重新构造后面的区块,利用算力优势与全网赛跑,当最终创建的区块长度超过原主分支区块,成为新的主分支,至此,攻击完成;
攻击结果:
由于撤销了所有对外付款交易,等于收回来所以已卖掉的比特币。
可行性评估:
现在比特币全网算力差不多90T,而且还会快速增长,现在看来只有现在的几大矿池联合,才具有发动51%攻击的实力,普通个人或机构实施此攻击的可能性越来越小。
讲座六、安全漏洞利用与挖掘
在本次讲座中,王志强老师通过具体漏洞挖掘示例为我们详细介绍了常见的漏洞挖掘技术以及漏洞挖掘技术的研究进展。
1.常见漏洞挖掘技术
1.1 手工测试
定义:由测试人员手工分析和测试被测目标,发现漏洞的过程,是最原始的漏洞挖掘方法。【凭经验依次检验每个可能产生漏洞的脆弱点】
- 优点:人-主观能动性-显而易见和复杂不易见
缺点:人-无规律可循、不可大规模等
1.2 补丁比对
- 定义:一种通过对比补丁之间的差异来挖掘漏洞的技术。
- 文本(难定位,难出难理解)
- 汇编指令(易理解,输出范围大,难定位)
- 结构化(迅速直观,流行)
- 文本(难定位,难出难理解)
- 优点:发现速度快
- 缺点:已知漏洞
- 常见工具:PatchDiff2、bindiff
1.3 程序分析
程序分析包括静态和动态
静态程序分析
- 定义:是指在不运行计算机程序的条件下,通过词法分析、语法分析、语义分析、控制流分析、污点分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性等指标的一种代码分析技术。
- 优点:覆盖率100%,自动化程度高
- 缺点:漏报和误报(RICE,程序分析问题不可判定)
动态程序分析
- 定义:在运行计算机程序的条件下,验证代码是否满足规范性、安全性等指标的一种代码分析技术。
- 一般通过插桩技术分析程序的异常行为。
插桩技术是指在保证被测程序逻辑完整性的基础上在程序的关键位置插入一些“桩”,即加入一些测试代码,然后执行插桩后的程序,通过“桩”的执行获取程序的控制流和数据流信息,进而分析程序的异常行为。
- 优点:自动化程度高、覆盖率较高
- 缺点:漏报和误报(RICE,程序分析问题不可判定)、冗余代码时间开销 ↑
1.4 二进制审核
定义:源代码不可得,通过逆向获取二进制代码,在二进制代码层次上进行安全评估
- 优点:缺点: 同静态审核
- 逆向导致信息丢失,理解困难,甚至引入逻辑错误。
二进制及编辑工具:IDA Pro、Ollydbg、UltraEdit、Hex Workshop以及WinHex
1.5 模糊测试
- 定义:通过向被测目标输入大量的畸形数据并监测其异常来发现漏洞
关键:测试用例构造,自动化
- 优点:无须源码、误报低、自动化程度高
- 缺点:覆盖率低
工具:Peach、Sulley、Autodafe、SPIKE等
2.漏洞挖掘技术研究进展
2.1 二进制程序函数识别
二进制程序函数识别是二进制分析的基础,对于软件漏洞分析与修复,甚至恶意软件检测、协议逆向等都至关重要。由于二进制代码缺少高级语言程序中的信息,函数的识别往往比较困难,现有的反汇编分析工具具有识别正确率低的缺陷。
Shin等用循环神经网络算法(RNN)改进了ByteWeight方案的性能,在模型训练时间上有了数量级上的提升,并取得了更高的准确率。
2.2 测试用例生成
- 在软件漏洞挖掘中,构造代码覆盖率高或脆弱性导向型的测试输入能提高漏洞挖掘的效率和针对性。
- 机器学习→指导生成更高质量的测试输入样本
- Godefroid等首次把模糊测试中的高结构化样本生成问题转换成了NLP领域的文本生成问题,采用了Char-RNN(recurrentneural network)模型实现对PDF文件格式中的obj语法的学习,并用训练好的模型生成具有多样性的obj对象和PDF文件。
2.3 路径约束求解
- 模糊测试,特别是代码覆盖率制导的模糊测试(如AFL),侧重于筛选可以覆盖新路径的样本为种子文件,但对种子文件变异时并没有充分利用程序数据流等信息指导变异,这使得变异盲目低效,生成样本冗余。
- 具备路径约束求解能力是符号执行比模糊测试等漏洞挖掘技术更先进的体现,也使得符号执行在理论上具备了系统性探索程序执行路径的能力。
- 约束求解→问题:路径爆炸,效率较低
- Chen等提出了Angora,采用污点追踪测试输入中影响条件分支的字节,然后使用梯度下降的方式对变异后生成的路径约束进行求解(目标函数不可导将有问题)
二、各小组讲座内容总结
讲座1 在10秒内找到未知的恶意:在Google-Play规模上大规模审查新的威胁
本文开发了一种名为MassVet的新技术,用于大规模审查应用程序,而无需了解恶意软件的外观和行为方式。与通常使用重量级程序分析技术的现有检测机制不同,文中所用的方法只是将提交的应用程序与已经在市场上的所有应用程序进行比较,重点关注那些共享类似UI结构(表示可能的重新打包关系)和共性的区别。一旦公共库和其他合法代码重用被删除,这种差异/通用程序组件就会变得非常可疑。研究中,本文在一个有效的相似性比较算法之上构建了这个“DiffCom”分析,该算法将应用程序的UI结构或方法的控制流图的显著特征映射到一个快速比较的值。在流处理引擎上实施了MassVet,并评估了来自全球33个应用市场的近120万个应用程序,即Google Play的规模。最后研究表明,该技术可以在10秒内以低错误检测率审核应用程序。此外,它在检测覆盖率方面优于VirusTotal(NOD32,赛门铁克,迈克菲等)的所有54台扫描仪,捕获了超过10万个恶意应用程序,包括20多个可能的零日恶意软件和数百万次安装的恶意软件。仔细观察这些应用程序可以发现有趣的新观察结果:例如,谷歌的检测策略和恶意软件作者的对策导致某些Google Play应用程序的神秘消失和重新出现。
本文的检测思路:
MassVet结构:
讲座2 幽灵攻击:利用预测执行
幽灵攻击主要利用了CPU的预测执行机制。
预测执行机制
通常,处理器不知道程序的未来指令流。例如,当无序执行执行条件分支指令时,会发生这种情况,该条件分支指令的方向取决于其执行尚未完成的先前指令。在这种情况下,处理器可以保存包含其当前寄存器状态的检查点,对程序将遵循的路径进行预测,并沿路径推测性地执行指令。如果预测结果是正确的,则不需要检查点,并且在程序执行顺序中退出指令。否则,当处理器确定它遵循错误的路径时,它通过从检查点重新加载其状态并沿着正确的路径继续执行来放弃沿路径的所有待处理指令。执行放弃指令,以便程序执行路径外的指令所做的更改不会对程序可见。因此,推测执行维护程序的逻辑状态,就好像执行遵循正确的路径一样。
幽灵攻击
幽灵攻击涉及诱使受害者推测性地执行在正确的程序执行期间不会发生的操作,并且通过旁路分支将受害者的机密信息泄露给攻击者。论文中的幽灵攻击结合了侧信道攻击,故障攻击和面向返回编程的方法,可以从受害者的进程中读取任意内存。更广泛地说,论文说明了推测性执行实施违反了许多软件安全机制所依据的安全假设,包括操作系统进程分离,静态分析,容器化,即时(JIT)编译以及缓存时序/侧通道的对策攻击。由于在数十亿设备中使用的Intel,AMD和ARM微处理器中存在易受攻击的推测执行能力,这些攻击对实际系统构成严重威胁。
欺骗推测分支训练器
下面这段代码中,攻击者首先使用有效的x调用相关代码,训练分支预测器判断该if为真。 然后,攻击者设置x值在array1_size之外。 CPU推测边界检查将为真,推测性地使用这个恶意x读取array2 [array1 [x] * 256]。 读取array2使用恶意x将数据加载到依赖于array1 [x]的地址的高速缓存中。当处理器发现这个if判断应该为假时,重新选择执行路径,但缓存状态的变化不会被恢复,并且可以被攻击者检测到,从而找到受害者的存储器的一个字节。
运行结果
讲座3 您所有的GPS都属于我们:对道路导航系统的秘密操作
这篇论文主要探讨了对道路导航系统进行隐身操纵攻击的可行性目标是触发假转向导航,引导受害者到达错误的目的地而不被察觉。其主要想法是略微改变GPS位置,以便假冒的导航路线与实际道路的形状相匹配并触发实际可能的指示。为了证明可行性,该论文首先通过实施便携式GPS欺骗器并在真实汽车上进行测试来执行受控测量。然后,该论文设计一个搜索算法来实时计算GPS移位和受害者路线。该论文使用追踪驾驶模拟(曼哈顿和波士顿的600辆出租车道路)进行广泛的评估,然后通过真实驾驶测试(攻击我们自己的车)来验证完整的攻击。最后,该研究组在美国和中国使用驾驶模拟器进行欺骗性用户研究,结果显示95%的参与者遵循导航没有意识到这种攻击就到了错误的目的地。
本篇论文共做出三点贡献:
- 提出了一种秘密操纵道路导航系统的攻击方法。该算法利用了现实中出租车行驶轨迹,并对算法进行了广泛的评估。
- 我们实现了攻击算法和一个低成本的便携式GPS欺骗器.在道路上的实际测量和驾驶测试证实了攻击的可行性。
- 我们进行了一项用户调查研究,以证明在道路行驶过程中人为的因素可以影响攻击是否成功。这些结果表明,有些司机常见的驾驶习惯大概率会让他们遭受到GPS欺骗攻击,并对结果进行了分析和提出了相应的对策。
讲座4 伟大的训练带来巨大的弱点:针对转移学习的实际攻击(本组)
这篇论文讲的主要讲的是对迁移学习的攻击及相应的防御。
迁移学习
迁移学习过程
学生模型通过复制教师模型的前N-1层来初始化,并增加了一层全连接层用于分类,之后使用自己的数据集对学生模型进行训练,训练过程中,前K层是被冻结的,即它们的权重是固定的,只有最后N-K层的权重才会被更新。前K层之所以在训练期间要被冻结,是因为这些层的输出已经代表了学生任务中的有意义的特征,学生模型可以直接使用这些特征,冻结它们可以降低训练成本和减少所需的训练数据集。
迁移学习方法
根据训练过程中被冻结的层数K,可以把迁移学习分为以下3种方法:深层特征提取器(Deep-layer Feature Extractor)、中层特征提取器(Mid-layer Feature Extractor)、全模型微调(Full Model Fine-tuning)。
- Deep-layer Feature Extractor:K=N-1,学生任务与教师任务非常相似,需要的训练成本最小
- Mid-layer Feature Extractor:K<N-1,允许更新更多的层,有助于学生为自己的任务进行更多的优化
- Full Model Fine-tuning:K=0,学生任务和教师任务存在显著差异,所有层都需要微调
本文的攻击
本文攻击模式
由于当前模型的默认访问模式是:
- 教师模型被深度学习服务平台公开。
- 学生模型离线训练且不公开。
本文提出了一个新的针对迁移学习的对抗性攻击,即对教师模型白盒攻击,对学生模型黑盒攻击。攻击者知道教师模型的内部结构以及所有权重,但不知道学生模型的所有权值和训练数据集。
本文具体攻击思路
攻击目标:把source图猫误识别为target图狗
本文的攻击思路:首先将target图狗输入到教师模型中,捕获target图在教师模型第K层的输出向量。之后对source图加入扰动,使得加过扰动的source图(即对抗样本)在输入教师模型后,在第K层产生非常相似的输出向量。由于前馈网络每一层只观察它的前一层,所以如果我们的对抗样本在第K层的输出向量可以完美匹配到target图的相应的输出向量,那么无论第K层之后的层的权值如何变化,它都会被误分类到和target图相同的标签。
如何计算扰动
本文通过求解一个有约束的最优化问题来计算扰动。目标是是模拟隐藏层第K层的输出向量,约束是扰动不易被人眼察觉。即在扰动程度perturb_magnitude小于一定约束值(扰动预算P)的前提下,最小化对抗样本(扰动后的source image)第K层的输出向量与target image 第K层的输出向量的欧式距离。前人计算扰动程度都是使用Lp范数,但是它无法衡量人眼对于图像失真程度的感知。所以本文使用DSSIM计算扰动程度,它是一种对图像失真度的客观测量指标。
目标/非目标攻击
目标攻击:将source image x_s 误分类成target image s_t 所属标签
非目标攻击:将source image x_s 误分类成任意其他的source image 所属标签
非目标攻击需要确定一个“方向”把source image推出它自己的决策边界。但是要预测这个“方向“是非常难的,所以本文的解决方法是,把每个目标攻击的攻击目标都试一遍,然后选出与source image第K层输出向量距离最小的类别作为目标。
防御
论文还提出了3种针对本文攻击的防御方法,其中最可行的是修改学生模型,更新层权值,确定一个新的局部最优值,在提供相当的或者更好的分类效果的前提下扩大它和教师模型之间的差异。这又是一个求解有约束的最优化问题,约束是对于每个训练集中的x,让教师模型第K层的输出向量和学生模型第K层的输出向量之间的欧氏距离大于一个阈值,在这个前提下,让预测结果和真实结果的交叉熵损失最小。
复现结果
下图为65张人脸分类任务的攻击结果:
上下分别是:
对31号进行目标攻击,误分类为2号,攻击成功;
对64号进行目标攻击,误分类为46号,攻击失败;
左图为source image,中图为加过扰动的对抗样本,右图为其要误分类成的target image。
讲座5 Safeinit:全面而实用的未初始化读取漏洞缓解
一些概念
- 未初始化漏洞:未初始化值的使用仍然是C / C ++代码中的常见错误。这不仅导致未定义的和通常不期望的行为,而且还导致信息泄露和其他安全漏洞。
未定义行为:简单地说,未定义行为是指C语言标准未做规定的行为。编译器可能不会报错,但是这些行为编译器会自行处理,所以不同的编译器会出现不同的结果,什么都有可能发生,这是一个极大的隐患,所以我们应该尽量避免这种情况的发生。 - 未定义行为:简单地说,未定义行为是指C语言标准未做规定的行为。编译器可能不会报错,但是这些行为编译器会自行处理,所以不同的编译器会出现不同的结果,什么都有可能发生,这是一个极大的隐患,所以我们应该尽量避免这种情况的发生。
本文贡献
- 提出了SafeInit,一种基于编译器的解决方案。
- 通过确保栈和堆上的初始化来自动减轻未初始化的值读取。
- 提出的优化可以将解决方案的开销降低到最低水平(<5%),并且可以直接在现代编译器中实现基于clang和LLVM的SafeInit原型实现,并表明它可以应用于大多数真实的C / C++应用程序而无需任何额外的手动工作。
- 评估我们在CPU-intensiv占用CPU资源的操作、IO-intensive占用I/O设备的操作以及Linux内核方面的工作,并验证是否成功地减轻了现存的漏洞。
Safeint
llvm/clang架构
LVM包括了一个狭义的LLVM和一个广义的LLVM。广义的LLVM其实就是指整个LLVM编译器架构,包括了前端、后端、优化器、众多的库函数以及很多的模块;而狭义的LLVM其实就是聚焦于编译器后端功能(代码生成、代码优化等)的一系列模块和库。Clang是一个C++编写、基于LLVM的C/C++/Objective-C/Objective-C++编译器。Clang是一个高度模块化开发的轻量级编译器,它的编译速度快、占用内存小、非常方便进行二次开发。
Safeinit架构
编译器在获得C/C++文件后,编译器前端将源文件转换为中间语言(IR),通过初始化、代码优化结合现存编译器的优化器,之后通过无效数据消除、强化分配器最后获得二进制文件。Safeinit在整个过程中所添加的就是 初始化全部变量、优化以及强化分配器,来避免或缓解未初始化值。最后,SafeInit优化器提供了非侵入式转换和优化,它们与现有的编译器优化(必要时自行修改)以及最终组件(现有“死存储消除”优化的扩展)一起运行。
讲座6 操纵机器学习:回归学习的中毒攻击与对策
本文贡献
- 对线性回归模型的中毒攻击及其对策进行了第一次系统研究。
- 提出了一个针对中毒攻击和快速统计攻击的新优化框架,该框架需要对培训过程的了解很少。
- 采用原则性方法设计一种新的鲁棒防御算法,该算法在很大程度上优于现有的稳健回归方法。
- 在医疗保健,贷款评估和房地产领域的几个数据集上广泛评估作者提出的攻击和防御算法。
- 在案例研究健康应用中证明了中毒攻击的真实含义。
系统架构
- 理想世界:学习过程包括执行数据清理和标准化的数据预处理阶段,之后可以表示训练数据;
- 测试阶段:模型在预处理后应用于新数据,并使用在训练中学习的回归模型生成数值预测值;
- 对抗性世界:在中毒攻击中,攻击者在训练回归模型之前将中毒点注入训练集。
Trim算法及成果
讲座7 卷积神经网络用于句子分类
用卷积神经网络分类句子的优势
- 特征提取的高效性
机器学习首先需要选取好特征,每一个特征即为一个维度,特征数目过少,我们可能无法精确的分类出来,即我们所说的欠拟合;如果特征数目过多,可能会导致我们在分类过程中过于注重某个特征导致分类错误,即过拟合。这样就需要我们在特征工程上花费很多时间和精力,才能使模型训练得到一个好的效果。然而神经网络的出现使我们不需要做大量的特征工程,譬如提前设计好特征的内容或者说特征的数量等等,我们可以直接把数据灌进去,让它自己训练,自我“修正”,即可得到一个较好的效果。 - 数据格式的简易性
在一个传统的机器学习分类问题中,我们“灌”进去的数据是不能直接灌进去的,需要对数据进行一些处理,譬如量纲的归一化,格式的转化等等,不过在神经网络里我们不需要额外的对数据做过多的处理。 - 参数数目的少量性
在面对一个分类问题时,如果用SVM来做,我们需要调整的参数包括核函数,惩罚因子,松弛变量等等,不同的参数组合对于模型的效果也不一样,想要迅速而又准确的调到最适合模型的参数需要对背后理论知识的深入了解(当然,如果全部都试一遍也是可以的,但是花的时间可能会更多)。对于一个基本的三层神经网络来说(输入-隐含-输出),我们只需要初始化时给每一个神经元上随机的赋予一个权重w和偏置项b,在训练过程中,这两个参数会不断的修正,调整到最优质,使模型的误差最小。所以从这个角度来看,我们对于调参的背后理论知识并不需要过于精通(只不过做多了之后可能会有一些经验,在初始值时赋予的值更科学,收敛的更快罢了)。
本文CNN结构
三、感想与体会
在这门课的六次教师讲座+7个学生讲座中,我学到了不同研究方向的密码新技术,涉及面很广,虽然有些东西并不能在课上完全听懂,但是通过课下的查找资料,阅读相关研究方向的经典/最新论文,就基本能了解这个方向,受益良多。另外,本门课的论文阅读复现部分,因为之前在实验室做过深度学习相关的实验,且本科的第三次教师讲座中,金鑫老师也讲的是人工智能与密码的结合,所以我们小组选择了一篇关于迁移学习攻击的18年论文。这次论文阅读复现工作拓宽了我对深度学习安全性的认知,并且使我的英文论文阅读理解能力、团队合作能力、课堂演讲能力得到了很大的提升。总体来说,本门课不论是讲座部分,还是论文阅读复现部分都对我帮助很大。
四、对本课程的建议和意见
- 建议论文复现部分可以更早一些开始,不然时间不够。
- 建议论文复现部分老师可以给几篇推荐的参考题目或方向,或由本课各个讲座的授课老师推荐本讲座研究方向的几篇经典/最新论文。