Rules to hack by
auditing process
- 理解代码
- 记录你的发现
- 识别偏见
- 工具化
- revisit code base(重新访问代码库,review)
- 分析错误
attempt to understand the code 优势在于理解上下文的能力
- a lot of people try to short-circuit this process
- reliance on tools
- fuzzers/static analyzers/taxonomies are a guide,not the whole process
- many of today‘s vulnerabilities are complex,and require in-depth understanding of the codebase
- small idiosyncrasies
- quirky apis that are prone to mususe
- minor inconsistencies
- 你对程序如何工作的了解越多,你就越有能力发现错误
you tend to observe inconsistencies that don’t amount to anything individually,but are invaluable when combined - 你倾向于观察到非独立的不同,但结合起来却是无价的
例如CVE-2021-30949
https://bugs.chromium.org/p/project-zero/issues/detail?id=2232
怪异机器理论 - 了解某事如何运作的最好方法是向其他人解释
what i'm looking for
软件风险 = 可用的攻击面 x 复杂度
- 攻击面:攻击面就是漏洞,发现bug只是需要细节
- 攻击面可以是间接的,甚至缓解措施都是攻击面
- 通常你对攻击面最初的看法是幼稚的,隐藏/不明显的攻击面是最好的
- 复杂度:
- 复杂性很丰富
- 特性驱动的
- 遗留产品或代码的支持,兼容性 2018-complexitysecuritysec-dullien.pdf
借用想法
- Bugtrackers/Diffs
- 可以显示漏洞在哪里,但不能显示它是什么以及为什么它是安全漏洞
- 有趣的错误的宝贵来源,为什么存在特定的代码,等等
- 可以激发新想法:变体,其他代码库中的相同错误等
- 平均但可行:跟踪容易出错的开发人员的提交
- Comments
- 描述了从未想过的事情
记录你的发现
- 养成记录的习惯
- 想法,Bug 候选者,特性,数据结构,算法(ideas,bug candidates,idiosyncrasies,data structures,algorithms)
- 记录失败的想法与记录成功的想法一样重要
- 避免以后某个时候重复这个想法
- 长远观点:我之后会重新审视这个
广泛应用你的知识
- 查看其他尝试完成相同任务的软件
- 如果一个实现出错...
例如 revisiting natalie‘s state maching bugs
- 启动成本(Startup cost):理解 WebRTC
- payoff:signal,jiochat,mocha,duo,facebook messenger
When auditing some complex code component, it's really interesting to look at a different implementation from your original target to see how other people handled it. Often one of them makes the mistake that the other carefully danced around :)
Revisit code bases and failed bugs
- 代码库不是静态的
- code rewritten
- features added、changed
- 环境不是静态的
分析你的failures:失败是学习的机会
- 如果有人在你没有成功的地方成功了,看看他们发现了什么
- 试想:为什么我错过了
- 这是一次性的还是可教的把戏、盲点
- 你可以提升、改进它吗
- 对于这些错误,这是一种模式吗
工具化:
- 工具和交互式测试可以节省大量时间和精力,在适当的地方构建、节省
- 错误:我几乎总是避免这样做
- 如果你不喜欢模糊测试,请与喜欢的人合作
- 小心,这也是一个巨大的兔子洞
- 工具允许人们处理更少的歧义 - 写作与阅读
- 对大多数人来说更舒适和熟悉
- 最有效的工具是在需要特定的新成果时制定的(new outcome)
- 持续的反馈让你专注于任务