| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 检测工具进阶——结合静态分析的动态分析工具论文分享 -> 正文阅读 |
|
[开发测试]检测工具进阶——结合静态分析的动态分析工具论文分享 |
本文目标:精度论文 “CRYLOGGER: Detecting Crypto Misuses Dynamically” 。 针对密码算法的 API 误用,本文算是对上一篇 CryptoGuard 的改进版,实现了一个开源的动态和静态结合的自动检测工具。该论文发布于 2020 年的 S&P ,点击即可免费获取该工具,基准测试工具同 CryptoGuard 使用的论文相同,这里就放 CryptoGuard 实现的基准测试工具链接吧!研究就是层层递进的过程,我们都站在巨人的肩膀上,下一步该向哪儿爬,全在我们一念之间~ 念叨一念之间:现在的密码算法怎么样了?对于一个密码算法来说,能保证系统安全最重要的一点就是保证密钥的安全。从算法角度上讲,要保障系统机密性的话,就得关注加密算法;要保障系统完整性的话,就得关注加密 Hash 函数。 当然,研究这些基础加密算法的学者有很多,但至今也没能找到一个完全安全的加密算法。即便能够确保一个算法完全正确且安全,我们也无法保证这个算法的实现过程毫无漏洞,比如说误用。 举个具体的例子🌰吧:椭圆曲线加密算法的理论似乎很强悍,像我们的身份证就使用了这种算法去做加密,但早在 2012 年,就有学者利用 OpenSSL 的算法 bug 获取到了椭圆曲线加密算法的完整私钥。连密钥都拿到了,系统估计也就没啥安全性可言了。 抛开算法的理论层面,从上述提到的算法实现上探究,一些伴随着加密的新问题便显现了出来。2013 年就有学者调研出:从 Google Play Store 上下载的 88% 个 Android apps 至少有一种加密误用。具体而言,在保障系统机密性的层面上,一些 apps 使用硬编码密钥进行加密,而不是真正的随机密钥;在保障系统完整性的层面上,一些 Android apps 的哈希函数可能发生冲突,例如 SHA1 。 近年来,研究者们致力于分析各种情况下的密码误用。 解决问题的前提是,要找到问题,所以检测工具就是这么产生的。由于上一篇的 CryptoGuard 自称是第一个最好的静态分析工具,因此,作者大概是读过 CryptoGuard 之后产生了新的 idea ,立刻反手做了第一个动态检测工具。接下来,作者从密码算法的 API 误用着手,针对一些常量,改进了 CryptoGuard 静态分析工具。 具体来说,CRYLOGGER 就是在 CryptoGuard 的基础上做了动态分析方法和静态分析方法相结合的策略,在线记录log文件,离线检测分析,使得整个工具更加完善。下面我们一点一点来分析 CRYLOGGER ~ 二念之间:热门的 “自动检测”自动化越来越流行,检测工具也不例外,在介绍动态 CRYLOGGER 之前,让我们先谈一谈热门的 “自动检测” 吧!这是设计 CRYLOGGER 工具的关键步骤。 一般来说, “自动检测” 的思想主要是这么两个方面:(1)定义一组加密规则;(2)通过验证加密 API 的传参,检查 apps 是否遵守了这些规则。 💨定规则 (依据) 可以举个例子🌰:① 设置用于加密的最小密钥大小,例如 RSA 是 2048 位;② 设置用于密钥推导的最小迭代次数,例如 PKCS#5 是 1000 次。 💨守规则 总之,现状就是探索静态分析方法的人多,而探索动态分析方法的人少,这也是作者发现的研究缺口。 来看看 CRYLOGGER 怎么运用自动检测的吧: 还是上面说的两个方面:定规则、守规则。
为什么要分离成上述的两个过程? 现在我们已经清楚这个工具要从哪里入手了,接下来就把这两个过程了解得更清楚一点吧! 三念之间:给通用加密库定规则先上图: 当然,这里仅包含了现存的静态工具使用的类及其在Java和Android中实现的相应类,它们是误用情况最严重的,但这个库仍不够完整。因此,作者加强了规则的可扩展性,使用者可以任意添加其需要的检测规则。 现在来解释这个图的具体含义: (1)消息摘要 —— 用于检查数据完整性
【重点参数】 (2)对称加密的分组密码
【重点参数】 (3)非对称加密的公钥加密算法
【重点参数】 (4)密钥派生
【重点参数】 (5)随机数生成 【重点参数】 (6)密钥存储 —— 存储加密密钥、证书等敏感内容 【重点参数】 (7) SSL/TLS/Certif 。 【重点参数】 以上便是针对加密算法所需要关注的脆弱点。 ?等等,图中的圆圈还没介绍? 别急,我们上一”念“中提到过,定规则有两大依据:论文里的 加密算法或其错误配置 造成的漏洞;NIST、IETF 等组织和机构定义的加密相关标准。 作者从论文和 NIST 和 IETF的 官方发布文档中搜集 CRYLOGGER 应支持的规则,并制成下表。 💨 R-01 不允许 apps 使用不安全的 哈希函数 ,也就是那些可以产生冲突的函数,比如 SHA1 ; 💨 R-02 禁止使用不安全的对称加密 算法 ,比如 Blowfish 、 DES 等; 💨 R-03和R-04 不允许 apps 使用 ECB 、CBC 操作模式 。因为 ECB 将相同的明文加密形式不变,这打破了语义安全的属性,容易受到攻击;而 CBC 在 C/S 中易受 padding oracle 攻击; 💨 R-05和R-06 限制 密钥的生成 。对称加密的密钥是由 apps 随机生成的,而非硬编码常量;密钥的随机生成器应安全; 💨 R-07和R-08 与上一条类似。对称加密中应使用的 IV ,而非密钥。作者认为当 IV 与某些操作模式 (如GCM) 匹配时, IV 始终随机且非常数。作者认为使用 IV 可以加强数据的保密性; 💨 R-09 不允许 重用 相同的 (密钥/ IV)对 加密不同的消息。因为重用可预测; 💨 R-10和R-05 是一样的,这里针对密钥生成中使用的 盐值 ; 💨 R-11 要求 盐值足够大 (≥64位); 💨 R-12 禁止 重用 相同盐值,因为它违背了向相应密码中添加随机性的目的; 💨 R-13 密钥生成算法的 迭代足够多 ,防暴力攻击; 💨 R-14和R-15 不允许使用列入 黑名单的密码 ,增大密码破解难度; 💨 R-16 禁止使用 固定密码 ; 💨 R-17 要求 伪随机数生成器(PRNG) 的 seed 使用随机值,而非常量值。因为常量 seed 生成的数字序列可预测; 💨 R-18 不允许 apps 使用未经批准的 PRNG ,比如 java.util.Random ; 💨 R-19、R-20和R-21 禁止 RSA算法 的某些配置。密钥应该 ≥2048位 ,加/解密时必须使用不同于 NOPADDING 和 PKCS1-v1.5 的填充算法; 💨 R-22 禁止使用 HTTP ,要求使用 更安全的 HTTPS ; 💨 R-23 禁止使用 静态密码 存储密钥; 💨 R-24和R-25 要求 正确验证 主机名和证书,比如不允许接受所有主机名或所有证书; 💨 R-26 禁止修改 标准主机名验证器 ,因为修改可能导致不安全的 SSL/TLS 通信。 以上,规则全部阐述完毕。下面开始检测! 四念之间:检测详情 —— 长篇代码预警!五念之间:这工具好用不?六念之间:涉及到的逆向工程七念之间:还是有局限性的… |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 0:35:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |