openssl 提交日志分析

         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的情况。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 132,349评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 168,052评论 26 707
  • 起床:冬天6点夏天5点 清嗓练嗓早读 早饭:7点到7点二十 工作期间抽出时间看书,提高自身素养 中午:午休,工作看...
    沂南036张霞阅读 127评论 0 1
  • " 一 开 始 你 是 我 的 秘 密 我 怕 你 知 道 又 怕 你 不 知 道 又 怕 你 知 道 却 装 作...
    云成章阅读 388评论 5 7
  • W3C中关于H5拖拽(拖放)的介绍 拖放(Drag 和 drop)是 HTML5 标准的组成部分拖放是一种常见的特...
    云音流阅读 720评论 0 3