openssl 提交日志分析

? ? ? ? ?openssl項目的提交日志含有非常重要的信息,比如漏洞的發(fā)現(xiàn)和修復(fù)情況,而根據(jù)經(jīng)驗,一個漏洞的發(fā)現(xiàn),其相關(guān)代碼塊以及修補代碼塊有較大可能性出現(xiàn)漏洞。另一方面,信息安全研究,完整而詳細(xì)的漏洞數(shù)據(jù)是非常珍貴的,可以研究從漏洞數(shù)據(jù)中提取模式,或者函數(shù)特征,對其它項目代碼進行審計。

需求:

1.提取漏洞修復(fù)相關(guān)的commit id

2.根據(jù)commit id獲取修改版本前后的相關(guān)文件

1.提取漏洞修復(fù)相關(guān)的commit id

提取方式,這里主要是對git log進行關(guān)鍵字分析,如CVE,fix,leak,overflow等關(guān)鍵字的匹配。獲取commit log的方式非常簡單,將clone過來的代碼包解壓后,一行命令即可:git log > m_log.txt

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

一般進行關(guān)鍵字匹配時,以一個commit為匹配單元,regex = 'commit [0-9a-f]{40}\nAuthor'就可以唯一標(biāo)識一個完整的commit日志。然后通過調(diào)整index獲取數(shù)據(jù)單元,盡量少用通配符匹配的原因在于通配符往往具有非常低的匹配效率。

為了使得數(shù)據(jù)更加完備,git log命令獲得的日志信息不包含分支的提交日志,可以通過查看github網(wǎng)站上一些對應(yīng)分支的commit id,將版本恢復(fù)到該commit id后,再通過git log來獲取所有該分支相關(guān)的日志。

2.根據(jù)commit id獲取修改版本前后的相關(guān)文件

這里主要的思路分為五個步驟:

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

核心代碼如下:

代碼中的一個優(yōu)化部分,這里沒有對整個log進行匹配分析,是因為已經(jīng)獲得了commit id,那么為了獲取比對,知道修改的內(nèi)容,僅僅需要獲得當(dāng)前之前的一個commit id即可。因為不能判斷每一個commit有多大,這里通過動態(tài)調(diào)整LOG_HEAD變量大小,以處理20行日志沒有包括之前commit id的情況。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,552評論 25 708
  • 起床:冬天6點夏天5點 清嗓練嗓早讀 早飯:7點到7點二十 工作期間抽出時間看書,提高自身素養(yǎng) 中午:午休,工作看...
    沂南036張霞閱讀 228評論 0 1
  • " 一 開 始 你 是 我 的 秘 密 我 怕 你 知 道 又 怕 你 不 知 道 又 怕 你 知 道 卻 裝 作...
    云成章閱讀 510評論 5 7
  • W3C中關(guān)于H5拖拽(拖放)的介紹 拖放(Drag 和 drop)是 HTML5 標(biāo)準(zhǔn)的組成部分拖放是一種常見的特...
    云音流閱讀 917評論 0 3