美文网首页程序员
openssl 提交日志分析

openssl 提交日志分析

作者: bohunwuren | 来源:发表于2017-09-28 00:08 被阅读0次

         openssl项目的提交日志含有非常重要的信息,比如漏洞的发现和修复情况,而根据经验,一个漏洞的发现,其相关代码块以及修补代码块有较大可能性出现漏洞。另一方面,信息安全研究,完整而详细的漏洞数据是非常珍贵的,可以研究从漏洞数据中提取模式,或者函数特征,对其它项目代码进行审计。

需求:

1.提取漏洞修复相关的commit id

2.根据commit id获取修改版本前后的相关文件

1.提取漏洞修复相关的commit id

提取方式,这里主要是对git log进行关键字分析,如CVE,fix,leak,overflow等关键字的匹配。获取commit log的方式非常简单,将clone过来的代码包解压后,一行命令即可:git log > m_log.txt

可以看到m_log.txt中日志的组织形式如下:

一般进行关键字匹配时,以一个commit为匹配单元,regex = 'commit [0-9a-f]{40}\nAuthor'就可以唯一标识一个完整的commit日志。然后通过调整index获取数据单元,尽量少用通配符匹配的原因在于通配符往往具有非常低的匹配效率。

为了使得数据更加完备,git log命令获得的日志信息不包含分支的提交日志,可以通过查看github网站上一些对应分支的commit id,将版本恢复到该commit id后,再通过git log来获取所有该分支相关的日志。

2.根据commit id获取修改版本前后的相关文件

这里主要的思路分为五个步骤:

1.git reset —hard commit_id

2.git log | head -n 20

3.git diff commit_id1 commit_id2 > diff.txt

4.cp changed_filename dst

5.git reset —hard commit_id2;cp before_filename dst

核心代码如下:

代码中的一个优化部分,这里没有对整个log进行匹配分析,是因为已经获得了commit id,那么为了获取比对,知道修改的内容,仅仅需要获得当前之前的一个commit id即可。因为不能判断每一个commit有多大,这里通过动态调整LOG_HEAD变量大小,以处理20行日志没有包括之前commit id的情况。

相关文章

网友评论

    本文标题:openssl 提交日志分析

    本文链接:https://www.haomeiwen.com/subject/tlhkrxtx.html