2019年密码与安全新技术讲座-课程总结报告
作者:互联网
2019年密码与安全新技术讲座-课程总结报告
课程讲座总结
网络(web)安全与内容安全
信息化的发展使得信息安全越发重要。在网络中由于存在威胁方-防护方技术、成本、风险、主题的非对称性,维护信息安全的难度非常之高,没有哪一个系统敢说自己是绝对安全的,但起码应该对常见的威胁做出应对,避免系统被很容易的攻破。
目前WEB应用中存在很多漏洞,常见的WEB漏洞如下:
SQL注入攻击
不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一。
SQL注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击。
黑客们能通过SQL注入进行攻击基于一种SQL语言的技术基础——构造动态字符串。这种技术可以概括为以下几点:
- SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字符为不同命令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等的条件式)
- SQL命令对于传入的字符串参数是用单引号字符所包起来。(但连续2个单引号字符,在SQL数据库中,则视为字符串中的一个单引号字符)
- SQL命令中,可以注入注解(连续2个减号字符 -- 后的文字为注解,或“/”与“/”所包起来的文字为注解)
- 因此,如果在组合SQL的命令字符串时,未针对单引号字符作转义处理的话,将导致该字符变量在填入命令字符串时,被恶意窜改原本的SQL语法的作用。
具体来说,在应用程序中若有下列状况,则可能应用程序正暴露在SQL Injection的高风险情况下:
- 在应用程序中使用字符串联结方式或联合查询方式组合SQL指令。
- 在应用程序链接数据库时使用权限过大的账户(例如很多开发人员都喜欢用最高权限的系统管理员账户(如常见的root,sa等)连接数据库)。
- 在数据库中开放了不必要但权力过大的功能(例如在Microsoft SQL Server数据库中的xp_cmdshell延伸存储程序或是OLE Automation存储程序等)
- 太过于信任用户所输入的数据,未限制输入的特殊字符,以及未对用户输入的数据做潜在指令的检查。
SQL注入攻击可通过以下措施预防:
- 在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据访问功能。
- 在组合SQL字符串时,先针对所传入的参数加入其他字符(将单引号字符前加上转义字符)。
- 如果使用PHP开发网页程序的话,需加入转义字符之功能(自动将所有的网页传入参数,将单引号字符前加上转义字符)。
- 使用php开发,可写入html特殊函数,可正确阻挡XSS攻击。
- 其他,使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的数据库连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。
- 使用SQL防注入系统。
- 增强WAF的防御力
XSS跨站脚本攻击
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
通过XSS攻击,攻击者期待达到以下目的:
- 盗用cookie,获取敏感信息。
- 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
- 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
- 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
避免XSS最根本的方法是关闭浏览器的Javascript选项,但这可能使一些网页无法正确执行,一般来说使用更新比较频繁的浏览器能获得更好的安全保证。从技术手段上来说,避免XSS攻击的方法主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤:
- PHP的htmlentities()或是htmlspecialchars()。
- Python的cgi.escape()。
- ASP的Server.HTMLEncode()。
- ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
- Java的xssprotect (Open Source Library)。
- Node.js的node-validator。
CSRF跨站请求伪造
跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。[1] 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
伪基站诈骗
伪基站,又称假基站、假基地台,是一种利用GSM单向认证缺陷的非法无线电通信设备,主要由主机和笔记本电脑组成,能够搜取以其为中心、一定半径范围内的GSM移动电话信息,并任意冒用他人手机号码强行向用户手机发送诈骗、推销等垃圾短信,通常安放在汽车或者一个比较隐蔽的地方发送。伪基站运行时,用户手机信号被强制连接到该设备上,无法连接到公用电信网络,以影响手机用户的正常使用。
思考
张健毅老师的课生动简洁,为我们讲述了当前针对各种安全漏洞的攻击方式,更是结合不少实际的例子加深我们的认识。其中震网病毒和XCodeGhost给我很深的印象。如今我们使用的手机、电脑、各种工业设备,核心部分从源头上说都是国外掌握,像win10系统市场占有率早已超过50%,但我们对其核心代码一无所知,也很难对可能的安全漏洞进行测试和防护;像我们日常使用的编译器visual studio、XCode等也都不是开源,它们在编译中到底有没有做什么别的我们也无从得知。
尤其是我国许多机密要害部分,使用这些不明不白的产品难保不会有什么安全问题,核心技术还是掌握在自己手中才能放心,操作系统等的国产化还是尽快推进为上。
量子密码
量子与量子态
微观世界的某些物理量不能连续变化而只能取某些 分立值,相邻分立值的差称为该物理量的一个量子 。
在量子力学里,量子态(quantum state)指的是量子系统的状态。态矢量可以用来抽象地表示量子态。采用狄拉克标记,态矢量表示为右矢|?>;其中,在符号内部的?可以是任何符号,字母,数字,或单字。例如,在计算氢原子能谱时,能级与主量子数n有关,所以,每个量子态的态矢量可以表示为 |?>。
一般而言,量子态可以是纯态或混合态。上述案例是纯态。混合态是由很多纯态组成的概率混合。不同的组合可能会组成同样的混合态。当量子态是混合态时,可以用密度矩阵做数学描述,这密度矩阵实际给出的是概率,不是密度。纯态也可以用密度矩阵表示。
哥本哈根诠释以操作定义的方法对量子态做定义:量子态可以从一系列制备程序来辨认,即这程序所制成的量子系统拥有这量子态。例如,使用z-轴方向的施特恩-格拉赫实验仪器,可以将入射的银原子束,依照自旋的z-分量S_z分裂成两道,一道的S_z为上旋,量子态为|↑>或|Z+,另一道的S_z为下旋,量子态为|↓>或|Z->,这样,可以制备成量子态为|↑>的银原子束,或量子态为|↓>的银原子束。银原子自旋态矢量存在于二维希尔伯特空间。对于这纯态案例,相关的态矢量 |ψ= α|↑+ β|↓>是二维复值矢量 (α , β),长度为1。
在测量一个量子系统之前,量子理论通常只给出测量结果的概率分布,这概率分布的形式完全由量子态、相关的可观察量来决定。对于纯态或混合态,都可以从密度矩阵计算出这概率分布。
另外,还有很多种不同的量子力学诠释。根据实在论诠释,一个量子系统的量子态完整描述了这个量子系统。量子态囊括了所有关于这系统的描述。实证诠释阐明,量子态只与对于量子系统做观察所得到的实验数据有关。按照系综诠释,量子态代表一个系综的在同样状况下制备而成的量子系统,它不适用于单独量子系统。
量子态的可叠加性带来一系列特殊性质 :
- 量子计算的并行性,强大的计算能力。
- 测不准原理,未知量子态不可准确测量。
- 不可克隆定理,未知量子态不可克隆。
- 对未知量子态的测量可能会改变量子态。
量子态的测量
- 每个力学量都对应一个厄米算符(矩阵)
- 测量某个力学量时,测量结果为此力学量对应厄米 算符的本征值(特征值)
- 测量后量子态塌缩到此本征值对应的本征态(特征向量)
提高量子密码性能
- 提高效率:可重用基、纠缠增强、双光子、双探测器
- 提高抗干扰能力:无消相干子空间、量子纠错码
- 提高实际系统抗攻击能力:诱骗态、设备无关
感想
量子力学与相对论一起被称为现代物理学的两大支柱,可以解释微观系统内的物理现象,从我对量子力学的了解来看,量子力学堪称是为人类打开了新世界的大门。
就我个人对物理的兴趣来说,从大学之前的有点感兴趣,到大学因为种种原因的完全不感兴趣,再到现在对量子力学有初步了解后,到了非常感兴趣的程度。科学技术是第一生产力,科技的发展已经大幅改变了人类的生活。科技发展到今天,有可能对人类生活方式产生根本性影响的在我看来只有两点:一是对原子能的利用,二是对量子力学的研究与应用。 对量子力学的初步了解让我感到震惊,量子力学仿佛存在了无限的可能性。
基于深度学习的密码分析与设计初探
机器学习的分类
1.有监督学习
监督学习涉及一组标记数据。计算机可以使用特定的模式来识别每种标记类型的新样本。监督学习的两种主要类型是分类和回归。在分类中,机器被训练成将一个组划分为特定的类。
2.无监督学习
在无监督学习中,数据是无标签的。由于大多数真实世界的数据都没有标签,这些算法特别有用。无监督学习分为聚类和降维。聚类用于根据属性和行为对象进行分组。
3.强化学习
强化学习研究学习器在与环境的交互过程中,如何学习到一种行为策略,以最大化得到的累积奖赏。与前面我们提到的其它学习问题的不同在于,强化学习处在一个对学习器的行为进行执行和评判的环境中:环境将执行学习器的输出,发生变化,并且反馈给学习器一个奖赏值;同时学习器的目标并不在于最大化立即获得的奖赏,而是最大化长期累积的奖赏。
机器学习的步骤
- 选择一个合适的模型,这通常需要依据实际问题而定,针对不同的问题和任务需要选取恰当的模型,模型就是一组函数的集合。
- 判断一个函数的好坏,这需要确定一个衡量标准,也就是我们通常说的损失函数(Loss Function),损失函数的确定也需要依据具体问题而定,如回归问题一般采用欧式距离,分类问题一般采用交叉熵代价函数。
- 找出“最好”的函数,如何从众多函数中最快的找出“最好”的那一个,这一步是最大的难点,做到又快又准往往不是一件容易的事情。常用的方法有梯度下降算法,最小二乘法等和其他一些技巧(tricks)。
学习得到“最好”的函数后,需要在新样本上进行测试,只有在新样本上表现很好,才算是一个“好”的函数。
深度学习
深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。
<deep learning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。
深度学习与密码分析
1.基于卷积神经网络的侧信道攻击:
- TemplateAttack
- MachineLearning
- DeepLearning
2.基于循环神经网络的明文破译:
3.基于生成对抗网络的口令破解:
4.基于深度神经网络的密码基元识别:
深度学习与密码设计
两大重点科学问题包括“组件化可变密码算法设计与安全性评估”和“密文可编程数据安全存储与计算”。因此未来对于新密码算法的设计需求将与日剧增,然而目前密码算法的设计还停留在人工设计阶段,较为耗时耗力,难以适应未来对密码算法设计的需求。
生成对抗网络GAN(Generative Adversarial Network):
机器生成密码算法的思路:
感想
我们应该正确认识AI能够在当前取得的成就,才可以解决更加复杂的问题。我们不能忽略:对于自然语言理解,虽然经过了数十年的发展,依然没有人工智能系统可以做到完全正确地理解人类的语言(包括语音识别和机器翻译);在机器人领域,即使工业机器人发展迅速,我们依然没有看到具有常识和推理能力的智能家庭机器人;在计算机视觉领域,即使我们在人脸识别和图片分类上取得了不小的成就,但是对于关系理解和完整的场景认知,现在系统能做到的还很有限。
正如卡内基梅陇大学机器学习系Alex Smola教授认为:AI技术在未来确实有可能对流水线工人、卡车司机、保洁员等相对低技能要求的工种造成冲击,然而解决的办法只能是提高整个社会的教育水平。其次,我认为社会也在对人工智能技术的发展产生各种积极的约束:譬如,用户对于技术的安全性和稳定性的要求;用户对于数据隐私的要求;用户对于产品的道德约束。总而言之,当前是人工智能发展的一个令人兴奋的时期,机器学习技术对于整个人类的发展,也是具有不可估量的潜力。我们应该正视科学技术发展的进步,理性看待所取得的结果。
信息隐藏
信息隐藏是指将特定用途的消息隐蔽地藏于其他载体(Cover)中,使得它们难以被发现或者消除,通过可靠提取隐藏的信息,实现隐蔽通信、内容认证或内容保护功能。信息隐藏的技术手段主要包括水印、可视密码、隐写等。
鲁棒水印
鲁棒水印是重要的数字产权管理与安全标识技术之一, 指将与数字媒体版权或者购买者有关的信息嵌入数字 媒体中,使攻击者难以在载体不遭到显著破坏情况下 消除水印,而授权者可以通过检测水印实现对版权所 有者或者内容购买者等表示信息的认定。
相比于其他隐藏技术,鲁棒水印有以下两个特点:
- 对于覆盖信号所做的改变应该不会被人类的感官察觉到
- 即使随后改变了水印层,也应该可以恢复隐藏的信息
从根本上说,鲁棒水印是对应于所有信息隐藏技术的优势与稳健性与嵌入率权衡的不同折衷。早在1954年就有了早期的鲁棒水印,20世纪90年代,当娱乐业面临越来越多的盗版行为时,技术发展更为迅速。 鲁棒水印已被视为补充传统基于密码学的内容保护的候选技术。
可视密码
可视密码技术是Naor和Shamir于1994年首次提出的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别 出来。其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。可视密码方案实际上是一种秘密共享方案,即使是一个具有无穷计算能力的攻击者,也不能在拥有的子秘密数量少于一个给定值时获得关于秘密图像的任何信息。
隐写
隐写是基于信息隐藏的隐蔽通信或者隐蔽存储方法,将秘密消息难以感知地隐藏在内容可公开的载体中,保护保密通信或者保密存储这些行为事实。
隐写的信息通常用一些传统的方法进行加密,然后用某种方法修改一个“伪装文本”(covertext),使其包含被加密过的消息,形成所谓的“隐秘文本”(stegotext)。例如,文字的大小、间距、字体,或者掩饰文本的其他特性可以被修改来包含隐藏的信息。只有接收者知道所使用的隐藏技术,才能够恢复信息,然后对其进行解密。
隐写包括多种方法,包括:
- 自适应隐写
- LSB嵌入
- 矩阵嵌入
隐写分析
隐写分析(steganalysis)是指在已知或未知嵌入算法的情况下,从观察到的数据检测判断其中是否存在秘密信息,分析数据量的大小和数据嵌入的位置,并最终破解嵌入内容的过程。
隐写分析的发展历程:
- Li Bin的“Auto-Encoder”,比RichModel还差14%-15% 。
- Qian系列:系统地提出了“GNCNN”,真正开创了CNN应用于Steganalysis,比RichModel差2%-3%。
- XuNet系列,第一层卷积层后用了Absolute(ABS)层以利用残差图像符号的对称性,激活函数选取上,部分层用tanh函数。
- NiJQ最新:YeNet,新结构。
- XuGuanShuo:Res on J-UNIWARD,新的网络结构,比featur-based method好一点(在low payload时不明显)。
一般性的运用深度学习进行隐写分析的过程如下:
感想
信息隐藏这方面的内容在之前的学会或者生活中其实一直被我忽视了,但现在想想信息隐藏其实占有很重要的地位,有很大的发展空间和应用前景,首先就是版权保护方面,数字水印技术如果能得到有效发展和应用,对于版权法追权十分重要;当今互联网的发展状况无论是云存储还是各种新媒体的出现都位隐藏信息的传播提供了十分便捷的途径,这也为我们对有害隐藏信息的检测提出了更高的要求。更广义的信息隐藏,如之前出现过的植入xcode和易语言编译器的后门程序,如果不能被有效检测将带来很大的安全威胁,再比如我们从网上下载资料,会不会不知不觉就成为了病毒或者违法信息的传播者?
区块链
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
区块链架构模型
一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
比特币
比特币也是区块链支付系统和虚拟计价工具,由于其采用密码技术来控制货币的生产和转移,而没有中央的发行机构,无法任意增发,交易在全球网络中运行,有特殊的隐秘性,加上不必经过第三方金融机构,因此得到越来越广泛的应用,也成了非法交易的介质。用户利用个人计算机和智能手机中的加密钱包软件,无需任何银行、信用卡、在线支付公司等中介机构,可随时随地在网络上直接交换物品、服务。 根据剑桥大学2017年的研究,全球有多达580万个加密钱包活跃用户,其中大多数使用比特币。同时,有观点认为,比特币技术得到了广泛的认可和使用,使人类迎来了区块链时代。
新增的数据块总能链接到上一个区块,即整条区块链的尾部。比特币点对点网络将所有的交易历史都存储在“区块链”(blockchain)中,所以区块链可以看作记录着比特币交易的账本。区块链是一群分散的客户端节点,并由所有参与者组成的分布式数据库,是对所有比特币交易历史的记录。中本聪预计,当数据量增大之后,用户端希望这些数据并不全部存储自己的节点中。为了实现这一目标,他采用引入散列函数机制。这样客户端将能够自动剔除掉那些自己永远用不到的部分,比方说极为早期的一些比特币交易记录。
感想
技术改变世界,绝不是一句空话。
编程作为一种技术,可以说是改变世界中成本最低的一种方式。
但技术永远是双刃剑,像区块链技术可以大大方便人们的生活,却也为不法分子的违法活动提供了方便。
作为技术的开发者或持有者,我们要坚守道德底线,帮助技术在对社会有益的方向发挥作用。
安全漏洞利用与挖掘
在计算机的所有设备中,硬件设备是最容易受到网络漏洞的攻击和破坏的,例如防火墙、路由器等。不同的设备所产生的漏洞类型有所不同,产生漏洞的原因也有较大的差异。计算机网络安全漏洞还有一个显著的特点,就是具有一定的时效性,从计算机开始运行起,网络中就会不断产生新的漏洞,因此在日常的使用过程中要不断更新补丁或对系统进行升级,只有这样才能有效的加强对漏洞的防范。与此同时,一些已经进行修补的漏洞有可能会发生新的变化,因此也需要引起注意。
安全漏洞分类
** 网络中的协议漏洞
就拿最我们应用最广泛的TCP/IP协议组来说吧,它是置于可信的环境之下设计的,只考虑到网络互连和开放性问题,而没有过多的考虑安全性。造成了TCP/IP协议组本身在应用方面并不安全,因此导致基于TCP/IP协议的一系列网络服务安全性及其脆弱。
应用软件系统的漏洞
任何一款软件由于设计上的缺陷都或多或少存在一定的漏洞,这种漏洞可以造成系统本身的脆弱。通常该漏洞分为两种:一是由于操作系统本身设计缺陷造成的安全漏洞,并影响到运行在该系统上的应用程序;二是应用程序本身设计漏洞。
配置不当引起的漏洞 **
由于安全策略设置的不完整,系统有时候会在安全策略未发挥作用的时候运行,而管理人员很难发现,直到系统出现问题才有所觉察。
漏洞挖掘技术
1.人工分析
人工分析是一种灰盒分析技术。针对被分析目标程序,手工构造特殊输入条件,观察输出、目标状态变化等,获得漏洞的分析技术。输入包括有效的和无效的输入,输出包括正常输出和非正常输出。非正常输出是漏洞出现的前提,或者就是目标程序的漏洞。非正常目标状态的变化也是发现漏洞的预兆,是深入挖掘的方向。人工分析高度依赖于分析人员的经验和技巧。人工分析多用于有人机交互界面的目标程序,Web漏洞挖掘中多使用人工分析的方法。
2.Fuzzing技术
Fuzzing技术是一种基于缺陷注入的自动软件测试技术,它利用黑盒分析技术方法,使用大量半有效的数据作为应用程序的输入,以程序是否出现异常为标志,来发现应用程序中可能存在的安全漏洞。半有效数据是指被测目标程序的必要标识部分和大部分数据是有效的,有意构造的数据部分是无效的,应用程序在处理该数据时就有可能发生错误,可能导致应用程序的崩溃或者触发相应的安全漏洞。
根据分析目标的特点,Fuzzing可以分为三类:
动态Web页面Fuzzing,针对ASP、PHP、Java、Perl等编写的网页程序,也包括使用这类技术构建的B/S架构应用程序,典型应用软件为HTTP Fuzz;
文件格式Fuzzing,针对各种文档格式,典型应用软件为PDF Fuzz;
协议Fuzzing,针对网络协议,典型应用软件为针对微软RPC(远程过程调用)的Fuzz。
Fuzzer软件输入的构造方法与黑盒测试软件的构造相似,边界值、字符串、文件头、文件尾的附加字符串等均可以作为基本的构造条件。Fuzzer软件可以用于检测多种安全漏洞,包括缓冲区溢出漏洞、整型溢出漏洞、格式化字符串和特殊字符漏洞、竞争条件和死锁漏洞、SQL注入、跨站脚本、RPC漏洞攻击、文件系统攻击、信息泄露等。
与其它技术相比,Fuzzing技术具有思想简单,容易理解、从发现漏洞到漏洞重现容易、不存在误报的优点。同时它也存在黑盒分析的全部缺点,而且具有不通用、构造测试周期长等问题。
常用的Fuzzer软件包括SPIKE Proxy、Peach Fuzzer Framework、Acunetix Web Vulnerability Scanner的HTTP Fuzzer、OWASP JBroFuzz、WebScarab等。
3.补丁比对技术
补丁比对技术主要用于黑客或竞争对手找出软件发布者已修正但未尚公开的漏洞,是黑客利用漏洞前经常使用的技术手段。
安全公告或补丁发布说明书中一般不指明漏洞的准确位置和原因,黑客很难仅根据该声明利用漏洞。黑客可以通过比较打补丁前后的二进制文件,确定漏洞的位置,再结合其他漏洞挖掘技术,即可了解漏洞的细节,最后可以得到漏洞利用的攻击代码。
简单的比较方法有二进制字节和字符串比较、对目标程序逆向工程后的比较两种。第一种方法适用于补丁前后有少量变化的比较,常用的于字符串变化、边界值变化等导致漏洞的分析。第二种方法适用于程序可被反编译,且可根据反编译找到函数参数变化导致漏洞的分析。这两种方法都不适合文件修改较多的情况。
复杂的比较方法有Tobb Sabin提出的基于指令相似性的图形化比较和Halvar Flake提出的结构化二进制比较,可以发现文件中一些非结构化的变化,如缓冲区大小的改变,且以图形化的方式进行显示。
常用的补丁比对工具有Beyond Compare、IDACompare、Binary Diffing Suite(EBDS)、BinDiff、NIPC Binary Differ(NBD)。此外大量的高级文字编辑工具也有相似的功能,如Ultra Edit、HexEdit等。这些补丁比对工具软件基于字符串比较或二进制比较技术。
4.静态分析技术
静态分析技术是对被分析目标的源程序进行分析检测,发现程序中存在的安全漏洞或隐患,是一种典型的白盒分析技术。它的方法主要包括静态字符串搜索、上下文搜索。静态分析过程主要是找到不正确的函数调用及返回状态,特别是可能未进行边界检查或边界检查不正确的函数调用,可能造成缓冲区溢出的函数、外部调用函数、共享内存函数以及函数指针等。
对开放源代码的程序,通过检测程序中不符合安全规则的文件结构、命名规则、函数、堆栈指针可以发现程序中存在的安全缺陷。被分析目标没有附带源程序时,就需要对程序进行逆向工程,获取类似于源代码的逆向工程代码,然后再进行搜索。使用与源代码相似的方法,也可以发现程序中的漏洞,这类静态分析方法叫做反汇编扫描。由于采用了底层的汇编语言进行漏洞分析,在理论上可以发现所有计算机可运行的漏洞,对于不公开源代码的程序来说往往是最有效的发现安全漏洞的办法。
但这种方法也存在很大的局限性,不断扩充的特征库或词典将造成检测的结果集大、误报率高;同时此方法重点是分析代码的“特征”,而不关心程序的功能,不会有针对功能及程序结构的分析检查。
5.动态分析技术
动态分析技术起源于软件调试技术,是用调试器作为动态分析工具,但不同于软件调试技术的是它往往处理的是没有源代码的被分析程序,或是被逆向工程过的被分析程序。
动态分析需要在调试器中运行目标程序,通过观察执行过程中程序的运行状态、内存使用状况以及寄存器的值等以发现漏洞。一般分析过程分为代码流分析和数据流分析。代码流分析主要是通过设置断点动态跟踪目标程序代码流,以检测有缺陷的函数调用及其参数。数据流分析是通过构造特殊数据触发潜在错误。
比较特殊的,在动态分析过程中可以采用动态代码替换技术,破坏程序运行流程、替换函数入口、函数参数,相当于构造半有效数据,从而找到隐藏在系统中的缺陷。
常见的动态分析工具有SoftIce、OllyDbg、WinDbg等。
感想
各类计算机产品和技术不断深入人们的生活,其可能的安全漏洞和安全风险也应得到相应的重视。计算机安全风险,小到危害个人隐私,大到危害国家安全,我们不得不慎重对待。要想防范安全风险,首先要知道风险出现在什么地方,因此漏洞挖掘技术就体现出其应用价值。尤其是现在移动端设备与人们生活关系越发紧密,针对移动端漏洞的挖掘与修复更因该引起重视。
汇报总结
本小组汇报
论文题目:Spectre Attacks: Exploiting Speculative Execution
论文来源:39th IEEE Symposium on Security and Privacy(Oakland)
作者信息:
- Paul Kocher
- Independent
- Daniel Genkin
- University of Pennsylvania and University of Maryland
- Daniel Gruss
- Graz University of Technology
- Werner Haas
- Cyberus Technology
- Mike Hamburg
- Rambus, Cryptography Research Division
- Moritz Lipp
- Graz University of Technology
- Stefan Mangard
- Graz University of Technology
- Thomas Prescher
- Cyberus Technology
- Michael Schwarz
- Graz University of Technology
- Yuval Yarom
- University of Adelaide and Data
本文发表时间不到一年半,引用次数已经达到了416次。
Spectre Attacks(幽灵攻击)
现代处理器使用分支预测和推测执行来最大化性能。 例如,如果分支的目标取决于正在读取的内存值,则CPU将尝试获取目标并尝试提前执行。 当内存值最终到达时,CPU丢弃或提交推测计算。 推测逻辑在执行方式上是不忠实的,可以访问受害者的内存和寄存器,并且可以执行具有可测量副作用的操作。
幽灵攻击涉及诱使受害者以规范的方式执行在正确的程序执行期间不会发生的操作以及泄漏受害者的操作,可以通过侧信道向外界提供的机密信息。幽灵攻击结合了来自侧信道攻击,故障攻击和回归导向编程的方法,可以从受害者的内存中读取任意任意位置的内容。 更广泛地说,推测性执行实施违反了支持数字软件安全机制的安全假设,包括操作系统进程分离,静态分析,容器化,即时(JIT)编译以及对缓存的定时/侧通道攻击的对策。 这些攻击对实际系统构成严重威胁,因为在用于数百万台设备的英特尔,AMD和ARM的微处理器中发现了预测执行的功能的漏洞。
幽灵攻击就像字面所说的意思一样,来无影去无踪,当攻击发生时受害者在毫无察觉的情况下就被CPU的预测执行功能“出卖”了。
Speculative Execution(预测执行)
预测执行简单来说是一些具有预测执行能力的新型处理器,可以估计即将执行的指令,采用预先计算的方法来加快整个处理过程。
预测执行的设计理念是:加速大概率事件。
预测执行是高速处理器使用的一种技术,通过考虑可能的未来执行路径并提前地执行其中的指令来提高性能。例如,当程序的控制流程取决于物理内存中未缓存的值时,可能需要几百个时钟周期才能知道该值。除了通过空闲浪费这些周期之外,过程还会控制控制流的方向,保存其寄存器状态的检查点并且继续在推测的路径上推测性地执行该程序。当值从存储器中偶然到达时,处理器检查最初猜测的正确性。如果猜测错误,则处理器将寄存器状态恢复为存储的检查点并丢弃(不正确的)预测执行,如果猜测是正确的,则该部分代码已被执行过,不需要再次执行,因此带来了显著的性能增益。
可以发现,如果预测错误,即便程序真正执行到这里时错误结果被丢弃,但错误的结果还是短暂的出现在寄存器中,在被丢弃之前,这部分数据就很容易被泄露。
欺骗分支预测器
下面是一段可能被分支预测器错误预估的代码:
标签:总结报告,技术,学习,漏洞,2019,量子态,SQL,区块,技术讲座 来源: https://www.cnblogs.com/thechosenone95/p/11031985.html