Rules to hack by

漏洞 Mar 16, 2022

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)
    • 持续的反馈让你专注于任务

漏洞研究很难,但它是一项可学习的技能

建设性地处理挫折和新信息是成功的关键区别

读代码是一种不同于写代码的技能,需要练习

标签