专栏首页Rust 编程Rust 视界 | Rustls 完成第三方安全审计

Rust 视界 | Rustls 完成第三方安全审计

理清头脑混沌,觉醒心智天地

Rustls 是一个用Rust编写的现代TLS库,它使用ring forcryptography和libwebpki进行证书验证。

该项目由CNCF发起和赞助,由Cure53团队的四名专业成员花费30天来完成审计(2020年5月下旬和2020年6月上旬)。因为CNCF有一些项目依赖于rustls,比如 linkerd。本次审计也包括了rustls的依赖库:rustls-native-certs,sct.rs,ring和webpki。(注:Cure53是德国知名网络安全公司)

Cure53 团队创建了一个专用的Slack Channel来沟通交流。审计范围内每个项目的维护代表均被邀请参与讨论,并提供反馈,范围澄清,问题答案等等。

审计结果:只有四个小发现,均不是漏洞(vulnerabilities),只是一些缺陷(weaknesses)。

审计过程

Cure53团队审计过程学习:

  1. 使用 Clippy 扫描代码库中的问题
  2. 跟踪了项目中每一个单元测试。Rustls利用libfuzzer-sys(LLVM的libfuzzer的Wrapper)以及客户端和服务器消息的语料库作为样本输入,因此给定的测试用例已经涵盖了警报和握手消息的大量示例输入,所以Cure53不再关注模糊测试(Fuzz)
  3. Cure53团队还在逻辑方面研究了代码的正确性:TLS状态机实现是否正确、整数算术释放正确处理可能截断的问题、协议解析(QUIC是否满足IETF规范)和实现代码的正确性等。
  4. 特别关注检查可能包含严重逻辑问题的代码,比如webpki中的主机名验证代码。
  5. 对ring的核心功能进行了审计:
    • 验证了基于分组密码的AEAD(例如AES-GCM)的正确实现
    • 检查ChaCha20绑定的功能正确性
    • 检查了Curve25519的基本椭圆曲线算法的功能正确性, 还验证了在其上实现的原语,例如Diffie-Hellman的X25519和数字签名的Ed25519,以确保功能正确性
    • 检查了由环形库暴露的每个恒定时间比较功能的功能正确性
    • 检查Poly1305的绑定是否正确使用
    • 检查了HKDF实现的功能正确性
    • 特别注意支持的RSA PKCS标准和提供的填充方法
    • 对于ECDSA,审核员已验证了针对有偏的随机数生成的最近攻击(例如LadderLeak)的不适用性
    • 特别注意的是,要确定所提供的AES实现是否具有s-box或类似构造的旁通道特性

缺陷

审计团队发现的一些缺陷概述:

  1. 使用 unchecked unwrap 。代码中并不总是正确处理Option的值,使用了类似于 is_some之类的方法,虽然这些代码是安全的,但其实可以用 if let之类进行更严谨的处理。
  2. 在审查webpki 时,发现名称约束代码允许使用非连续子网掩码。这意味着像42.42.42.42这样的子网掩码将被验证者视为有效,这可能会带来意想不到的后果。建议将名称约束中包含不连续子网掩码的证书视为无效。
  3. 在查看DER解析和生成代码时,发现rustls / src / x509.rs文件中的wrap_in_asn1_len函数在长度大于0xffff字节的输入序列上无法正常运行。

小结

审计总结:

  1. Cure53无法发现任何破坏rustls的安全漏洞。
  2. 审核团队成员认为总体代码质量是出色的,这得益于 Rust 语言。
  3. 所检查的代码始终具有良好的文档编制和可读性,表明rustls复杂区的开发和文档编制过程中已根深蒂固地使用了安全流程。从设计的角度以及从实施的角度来看,整个范围都可以被认为是极高的标准。
  4. 从密码学角度来看,密码操作的执行和管理都非常谨慎。可以说,就密码工程而言,rustls 在协议层和基础层中表现出的谨慎程度和质量是卓越的。
  5. 关于rustls或其底层ring 库,未发现任何问题。看得出来 rustls 的开发团队对于如何正确实现TLS,以及避免TLS生态中常见陷阱有着丰富的经验,并且在开发过程中非常注重安全性的开发方法

相关链接:

rustls 源码仓库:

https://github.com/ctz/rustls

rustls官方博文:

http://jbp.io/2020/06/14/rustls-audit.html

审计报告论文:

https://github.com/ctz/rustls/blob/master/audit/TLS-01-report.pdf

本文分享自微信公众号 - 觉学社(WakerGroup),作者:张汉东

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谁 说 Rust 文档团队解散了?!

    盗版横行也就罢了,还在这故意歪曲事实,实名鄙视这家媒体!!!也许继续割韭菜和传播盗版文件更适合你们!

    张汉东
  • Rust 视界 | 为 Rust 编译器提速

    #68914 : 增量编译使用「SipHasher128」哈希算法来确定自上一次编译器调用以来更改了哪些代码。此PR极大地改善了从输入字节流中提取字节的过程(...

    张汉东
  • Rust 2020 路线图

    继续为Rust的目标而努力:Rust,一门赋予每个人构建可靠且高效软件能力的语言。

    张汉东
  • Python进阶教程(二)

    概述 在上一篇博客中,我们介绍了Python进阶教程(一),还有一些新的技巧没有翻译完,我们下面来继续我们的翻译。 Intermediate Python 中译...

    BrianLv
  • C++之虚析构

    在继承的时候,父类的指针(或引用)可以指向(引用)子类的对象。如果子类有自己的指针属性,那么就需要将父类的析构函数声明为虚析构函数,否则通过父类指针(或者引用)...

    zy010101
  • 280字编程挑战:把一条推特长度的代码玩出花

    开源社区总是鼓励人们分享代码。近日,BBC 举办了这样一个活动,名为 BBC Micro Bot。比赛要求参赛者在推特上 @BBC Micro Bot 这一账号...

    机器之心
  • 马化腾两会议案:关于以创新为驱动,促进我国数字内容产业发展的建议

      近年来,互联网和信息技术快速进步,与文化创意产业深度融合,正在逐步改变内容创作、传播和消费的模式,包括网络文学、网络游戏、数字音乐、网络动漫、网络视频在内的...

    腾讯研究院
  • 如何在SAP CRM Fiori My Task应用里创建task

    The task creation UI url in My Account application:

    Jerry Wang
  • SAP Cloud for Customer Service Control工作中心介绍

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 程序员到底要不要读研,过来人给你几点建议!

    作者黄小斜,斜杠青年,某985硕士,阿里研发工程师,于2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer

    黄小斜

扫码关注云+社区

领取腾讯云代金券