Security Research - Cryptographic Protocol

搞不动密码学的理论研究,但可以搞搞应用密码学的研究嘛。

研究在工业界中的密码是如何应用的,也是一件非常有趣的事情。

Feed

做研究,不能闭关锁国,一门心思自己搞自己的,还是要保持跟安全圈的联系,多多关注时事资讯,了解行业走向,学习新姿势,为自己提供一些研究思路和经验。

为此,我收录了一些RSS订阅源

每天会花点时间在feedly.com 上看几篇感兴趣的文章。

现在改用Reeder 5 ,每天会花0~4h看订阅的安全资讯、技术文章。

每天都能学到新知识,真的很快乐~


这边记录看过的一些Applied Cryptography相关的文章。

2021.07.06

Cryptography Dispatches: The Most Backdoor-Looking Bug I’ve Ever Seen

Telegram’s modified DHKE protocol allows MITM attack.

有的时候画蛇添足反而会引入新问题

2021.07.07

Kaspersky Password Manager: All your passwords are belong to us

Kaspersky Password Manger使用时间作为MT19937的seed,并用MT19937作为随机源来生成password,导致password会被brute force攻击。

文章还阐述了优秀的密码生成器是怎么实现的,以及用概率论工具来分析password的强度/安全性。

2021.07.12

The Illustrated TLS Connection

TLS全过程详解


Partition Oracle Attacks

2021.07.14

https://mp.weixin.qq.com/s/Ft1IV1Ce8pql0PJ1EGSKog

密码系统的安全性应该仅仅依赖于密钥的安全。

但是,在具体实现过程中,密钥(这个高度敏感的数据)往往都是毫无差别地与普通数据共同存储在内存中。在某些情形下,攻击者只需要从内存中dump部分密钥,即可恢复出所有的密钥,攻破整个密码系统(Heartblood)。

而且有些密码算法会使用PBKDF来生成加密的key,先用password生成主密钥,然后再从主密钥中扩展出子密钥,password、主密钥和子密钥其实是等价的信息,攻击者获取其中任何一个就能攻破整个密码系统。(密钥会扩展延伸,单纯保护密钥是不足够的)

沿着这个思路,GOSSIP研究团队设计出了一套密钥隔离机制,并上了IEEE S&P顶会。

2021.07.16

Pa(dding|rtitioning) oracles, and another hot take on PAKEs

2021.08.07

A New Attack Surface on MS Exchange Part 1 - ProxyLogon!

A New Attack Surface on MS Exchange Part 2 - ProxyOracle!

看了这两篇神仙的挖洞文章,感觉思路,一下子。就。。打开。了。。。

  • 目标选择
    • 找研究目标,也是一个学问
    • Exchange这个玩意儿,千百万的用户使用量,架构迭代很多,必然会为了前后兼容有一些便捷的解决方案以及历史遗留问题,这里面出洞的概率比较大;而且如果真的挖到洞的话,由于用户量大,漏洞的影响范围会很广。
    • 其实5、6年再往前写的软件代码,那个时候开发人员安全意识很不行的,再加上新版本又不可能从0开始,重新造轮子,大多数还是要在旧代码的基础上进一步开发,就会带来一个现象:旧代码本身以及为了与旧代码兼容而写的新代码就有很大的安全隐患。
      • 近期在审计一个比较老旧的内部产品,代码写的很乱,使用的密码组件也不够安全,可见研发人员薄弱的安全意识,这种情况就比较发现一些安全问题。
  • 前期侦查
    • 代码审计第一步,先从一个high level去看,理解整个程序的组件结构与逻辑流程,了解架构设计,有一个大局观,再根据直觉去找哪个具体模块会大概率出问题,找核心模块深入去看具体实现。
    • 分析历史漏洞,从前人的成果里发现规律、总结经验。如果以前有比较弱智的洞,那确实说明这个目标它安全性确实不咋地,再次出洞的概率就很高了,大可以深入去研究。
    • 挖洞也需要权衡投入的时间和精力与回报是否正相关,这个时候就要评估挖洞的风险性。像这种曾经有弱智洞的产品,再有洞的概率就比较大,风险性就相对而言较小;但是如果去日那种golang的标准库,就可能1~2年都没什么成果。
    • 但是现在前期学习的话,其实没必要太过于去考虑风险。hack to learn。挖洞的同时,也是在学习。即使没什么成果,但是了解到了优秀的软件是怎么写的,后面去挖比较菜的软件,就胸有成竹了。
  • 具体挖洞
    • 挖到了一个小漏洞,但是利用条件有限,造不成比较严重的危害,这个时候不要灰心,plz hack harder
    • 危害性比较大的攻击,大多时候都是多个漏洞的组合,但并不是随机组合,而是有联系地串起来的
    • 攻击面要广(常见漏洞,不局限于一种漏洞patten/攻击面,自己找新的攻击面)
      • 例如Windows NTLM身份认证,之前已经有人深入研究过了Windows身份认证及利用思路 ,但是ZeroLogon (主要原因在于底层密码组件)这个评级10.0的漏洞直至2020年9月才被发现。由此可见,要从多个攻击面尝试挖洞。
  • 后期
    • 可以先掖着
    • 如何向vendor报洞,沟通也是一门艺术
    • 写blog/发议题,分享心路历程和挖洞经验(指引他人)

2021.08.13

Security Analysis of Telegram (Symmetric Part)

Telegram私有协议MTProto的密码学安全分析,分析得地很全面。看来应用密码学这个方向确实很有搞头啊,可以大搞特搞。但是遗憾的是,挖到的都是cryptographic weaknesses,而不是cryptographic vulnerabilities,危害性不像RCE这种那么大。


安全多方计算之前世今生


Preventing a timing attack with CodeQL

如何用codeQL来检测timing attack

2021.08.17

BUG HUNTING METHODOLOGY FOR BEGINNERS

Cryptographic Right Answer

crypto subreddit wiki

2021.08.31

https://cryptography.isg.rhul.ac.uk/research-areas/

密码学还是有很多研究领域的

One way of defining cryptography is as the study of the limits of computing (under adversarial conditions): what can and cannot be computed? During the last decade functionalities that were previously considered unattainable have been shown to be feasible: computing on encrypted data (fully homomorphic encryption, FHE), computing with encrypted programs (obfuscation, iO), associating secret keys to function evaluations on the plaintext (functional encryption, FE). Less generically, operations like private set intersection (PSI) have reached a level of maturity that they can be deployed in practice; secure multiparty computation (MPC) is being commercialised and building blocks (e.g. for PSI) like oblivious PRFs (OPRF) are being standardised.

感觉把这些前沿理论,落地实践到工业界中去,是一个很不错的创业方向。

之前就有看到过,有把Quantum Key Distribution做成产品拿出来卖的国内公司 ,这个Private Set Intersection也有看到Apple在Expanded Protections for Children 中用到。


密码学领域写文章如何找研究点和创新点? - Steven Yue的回答 - 知乎

密码学领域的paper,个人感觉特别注重line of work

搞密码学,不能只局限在CTF题目中。

2021.09.10

https://mentor-crypto-2021.github.io

This workshop aims to provide advice for researchers in early stages (students and junior faculty) and women researchers in the area of cryptography.

G.O.S.S.I.P 学术论文推荐 2021-09-08

python代码中的密码学误用检测问题

2021.09.14

GitHub Token Leak


Hacker’s Manifesto

2021.10.15

Practical Padding Oracle Attacks on RSA

Parity Attack => Bleichenbacher Attack => Optimizations of Bleichenbacher Attack

2022.01.16

Introducing Adiantum: Encryption for the Next Billion Users

为了让所有安卓手机用户都能够享有快捷方便的安全加密功能,Google Android团队是如何做的

研究心得

国内似乎少有安全研究人员会主攻这个领域(目前了解到的只有彭博 ),但是国外有不少研究人员和团队在这个领域上有大量的研究成果(例如NCC group

其次,这个领域能挖到的洞,往往都不像RCE那样危害性大,而且大多时候利用难度很大(例如中间人攻击);有些时候协议本身其实问题并不大,只是没有满足更高层次的安全要求罢了。

正是由于国内存在这样一个缺口,对这个领域的研究就很显得有独特性,可以大搞特搞。

挑战:并没有太多前人的经验可以参考,大部分时候只能摸着石头过河,走出一条自己的路。

体系架构

密码原语(cryptographic primitives)

  • Symmetric/Asymmetric encryption algorithms
  • Hash functions
  • Digital signatures
  • Message authenticaiton codes
  • Randomness
  • Key exchange
  • Zero knowledge proof

密码协议(cryptographic protocols)

  • TLS
  • SSH
  • IPSEC

拿做菜来作比方

密码原语=食材、调料

密码协议=菜品

想要做出一个“好”的菜品(密码协议),就得从两方面考虑

  • 食谱(设计层面):食材之间是否有冲突(原语)、是否能符合顾客口味(满足预期需求)
  • 做菜(实现层面):食材是否新鲜、每个食材的下锅顺序、火候把控

一些想法

  • 忧愁:投入了几天的时间,审计了一个开源协议的源码,发现作者写的实在是太规范了,基本上不可能挖到洞。

    我们换一个思路想,从审计源码的过程中学到了很多新知识,不亏;而且通过审计这个协议,了解到了优秀的代码是什么样的,对后面审计一些不太够优秀的代码是有一定帮助的。

  • 可以去搜集一下历史上所有crypto相关的漏洞,做一个类似于区块链安全 | 长亭科技发布公链审计Checklist密码协议审计Checklist,可以在审计的过程中根据历史经验来挖洞(重复性劳动)。

  • 倒是很佩服那些能够挖到新型漏洞的师傅,感觉这需要在审计代码、掌握机理的基础上,深入思考剖析,可能还需要靠直觉和灵感(创造性劳动)。

  • 零信任安全框架是一个很大的东西,涉及到了身份认证、控制访问、流量转发等多个方面,想要全都搞懂需要耗费很多时间和精力的。在安全研究的过程中,为了保证短时内有成果产出,只能选取一些安全风险比较大的组件进行深入研究,例如分析身份认证过程中的使用的具体密码协议/算法,尝试挖掘漏洞。(抓主要矛盾

书籍

Real World Cryptography - David Wong

BULLETPROOF TLS AND PKI - Ivan Ristić

《船》 - 白桦

看到了好几次这首诗,感觉特别有感触,也贴一下,愿与君共勉~

我有过多次这样的奇遇,

从天堂到地狱只在瞬息之间:

每一朵可爱、温柔的浪花

都成了突然崛起、随即倾倒的高山。

每一滴海水都变脸色,

刚刚还是那样的美丽、蔚蓝;

旋涡纠缠着旋涡,

我被抛向高空又投进深渊……

当时我甚至想到过轻生,

眼前一片苦海无边;

放弃了希望就像放弃了舵柄,

在暴力之下只能沉默和哀叹。

今天我才有资格嘲笑昨天的自己,

为昨天落叶似的惶恐感到羞惭;

虚度了多少年华,

船身多次被礁石撞穿……

千万次在大洋里撒网,

才捕获到一点点生活的经验,

才恍然大悟,

啊!道理原是如此浅显;

你要航行吗?

必然会有千妖百怪出来阻拦;

暴虐的欺凌是它们的游戏,

制造灭亡是它们唯一的才干。

命中注定我要常常和它们相逢,

因为我的名字叫做船;

面对强大于自身千万倍的对手,

能援救自己的只有清醒和勇敢。

恐惧只能使自己盲目,

盲目只能夸大魔鬼的狰狞嘴脸;

也许我的样子比它们更可怕,

当我以命相拼,一往无前!

只要我还有一根完整的龙骨,

绝不驶进避风的港湾;

把生命放在征途上,

让勇敢来决定道路的宽窄、长短。

我完完全全的自由了,

船头成为埋葬它们的铁铲;

我在波浪中有节奏地跳跃,

就像荡着一个巨大的秋千。

即使它们终于把我撕碎,

变成一些残破的木片,

我不会沉沦,决不!

我还会在浪尖上飞旋。

后来者还会在残片上认出我,

未来的诗人会唱然长叹:

“这里有一个幸福的灵魂,

它曾经是一艘前进着的航船……”