你的漏洞发现过程是怎样的?

逆向工程 漏洞分析
2021-07-09 08:46:40

我自己是一个静态分析人;十年前我基本上放弃了动态逆向工程。所以这几天,我的流程通常是定位我的输入进入我感兴趣的模块的位置,然后进行大量的静态分析,以确定我的输入如何操纵程序的状态。我发现了一些巧妙的错误,例如这种方式的信息泄露;然而,与使用大量动态分析和动态输入生成(例如,随机模糊测试)的同行相比,我无疑要慢得多。

您通常采取哪些步骤来发现闭源程序中的漏洞?

1个回答

这就是我通常这样做的方式,尽管这在很大程度上取决于目标/项目,而且这只是我自己喜欢的方式:

  • 一旦有了目标,就开始(可能是愚蠢的)对应用程序进行模糊测试。
  • 同时,静态分析应用程序以了解它是如何工作的,并可能找到悬而未决的漏洞。
  • 尝试了解一旦在 IDA 中发现了足够多的结构和功能,是否可以使您的模糊器更智能。
  • 如果您的 fuzzer 遇到问题,请找出问题的根本原因,以及它是否可以被利用。尽管如此,如果不是,则值得深入检查坠机发生的区域,因为该坠机很可能是一个值得关注的有趣区域的指标。
  • 如果您在进行静态分析时遇到问题,请尝试为其编写一个简单的触发器。
  • 重点关注存在bug的部分,继续静态分析。
  • 通过模糊测试或静态分析发现 1 个真正的漏洞后,编写规则/脚本以查找类似的漏洞。
  • 可能会为它编写一个漏洞利用程序并返回到 2。
  • 当厌倦了寻找此类漏洞并了解应用程序的内部工作原理后,请尝试查找逻辑缺陷。

PS:阅读文档也是发现一些漏洞的好方法,以及阅读更改日志、差异补丁、提交消息等...如果您可以访问源代码(有时您可以部分访问目标的源代码,即使对于闭源应用程序)。

只有我的 2 美分。