桂永宏
[摘要]軟件系統(tǒng)開發(fā)建設(shè)過程中存在多個(gè)環(huán)節(jié),需確保每個(gè)環(huán)節(jié)處理源代碼版本的一致性,杜絕因?yàn)槿艘蛩鼗蚍侨藶橐蛩貙?dǎo)致代碼被篡改情況發(fā)生,最終保證編譯后運(yùn)行的目標(biāo)程序與源代碼版本的一致性。
[關(guān)鍵詞]代碼版本一致性;代碼審計(jì);代碼編譯;系統(tǒng)部署
1 引言
軟件系統(tǒng)從設(shè)計(jì)開發(fā)到上線運(yùn)行,中間需要經(jīng)多個(gè)版本的迭代,多個(gè)環(huán)節(jié)的流程,包括代碼開發(fā)、代碼審計(jì)、代碼編譯、系統(tǒng)測(cè)試、部署上線等。需確保每個(gè)環(huán)節(jié)處理的源代碼版本的一致性,杜絕因?yàn)槿艘蛩鼗蚍侨藶橐蛩貙?dǎo)致代碼被篡改情況發(fā)生,最終保證編譯后運(yùn)行的目標(biāo)程序與源代碼的一致性。
2 現(xiàn)狀
綜合分析公司內(nèi)部當(dāng)前多個(gè)軟件系統(tǒng)開發(fā)建設(shè)項(xiàng)目,系統(tǒng)規(guī)模均比較大,均需要多個(gè)開發(fā)人員與其他工作人員配合分工合作,同時(shí)通過SVN進(jìn)行代碼管理與版本控制。
代碼通過SVN或FTP等方式在多個(gè)環(huán)節(jié)流轉(zhuǎn),流轉(zhuǎn)過程缺乏流程與技術(shù)手段保證代碼版本的一致性、完整性,存在流轉(zhuǎn)過程代碼版本混淆、被篡改、被掉包的可能性。
通過對(duì)各項(xiàng)目代碼管理現(xiàn)狀的分析與總結(jié)相關(guān)經(jīng)驗(yàn),初步形成代碼版本一致性技術(shù)保障方案。
3 方案
根據(jù)項(xiàng)目經(jīng)驗(yàn)總結(jié),對(duì)項(xiàng)目進(jìn)行階段劃分,梳理出代碼流轉(zhuǎn)路徑,在流轉(zhuǎn)路徑設(shè)置控制點(diǎn),通過相應(yīng)的控制措施技術(shù)手段來在每一個(gè)控制點(diǎn)驗(yàn)證代碼版本的一致性、完整性,形成驗(yàn)證鏈條,最終保證生產(chǎn)環(huán)境上運(yùn)行的系統(tǒng)程序的一致性、完整性。
3.1 劃分階段
根據(jù)各環(huán)節(jié)工作內(nèi)容的分類,可分為幾個(gè)階段:(1)代碼開發(fā)階段,主要負(fù)責(zé)系統(tǒng)的源代碼開發(fā);(2)代碼審計(jì)階段。主要負(fù)責(zé)對(duì)源代碼的審計(jì),重點(diǎn)審計(jì)代碼安全性;代碼編譯階段,主要負(fù)責(zé)將源代碼編譯成目標(biāo)程序;(3)系統(tǒng)測(cè)試階段,主要負(fù)責(zé)對(duì)系統(tǒng)進(jìn)行功能測(cè)試與安全測(cè)試;(4)系統(tǒng)部署階段,主要負(fù)責(zé)將系統(tǒng)部署到生產(chǎn)環(huán)境上。
通過對(duì)各階段代碼流轉(zhuǎn)路徑的分析,主要存在幾條流轉(zhuǎn)需求與流轉(zhuǎn)路徑:(1)代碼開發(fā)階段流轉(zhuǎn)到代碼審計(jì)階段;(2)代碼開發(fā)階段流轉(zhuǎn)到代碼編譯階段;(3)代碼編譯階段流轉(zhuǎn)到系統(tǒng)測(cè)試階段;(4)代碼編譯階段流轉(zhuǎn)到系統(tǒng)部署階段。
3.2 職責(zé)分離
為確保各階段工作能夠相互牽制、相互監(jiān)督,將各階段工作進(jìn)行明確分工,落實(shí)職責(zé)分離,每個(gè)崗位不能互相兼任。
通過對(duì)各階段工作內(nèi)容的分析總結(jié),大致可分為幾個(gè)崗位:(1)代碼開發(fā)崗,由代碼開發(fā)人員擔(dān)任,負(fù)責(zé)代碼開發(fā)階段系統(tǒng)源代碼的開發(fā);(2)代碼審計(jì)崗,由代碼審計(jì)人員擔(dān)任,負(fù)責(zé)代碼審計(jì)階段對(duì)系統(tǒng)源代碼開展審計(jì)工作,重點(diǎn)審計(jì)代碼安全性;(3)代碼編譯崗,由代碼編譯人員擔(dān)任。負(fù)責(zé)代碼編譯階段將系統(tǒng)源代碼編譯成目標(biāo)程序;(4)系統(tǒng)測(cè)試崗,由系統(tǒng)測(cè)試人員擔(dān)任,負(fù)責(zé)系統(tǒng)測(cè)試階段開展系統(tǒng)程序的測(cè)試工作;(5)系統(tǒng)部署崗。由系統(tǒng)部署人員擔(dān)任,負(fù)責(zé)系統(tǒng)部署階段將系統(tǒng)程序部署到生產(chǎn)系統(tǒng)上。
每個(gè)崗位互相獨(dú)立,根據(jù)各階段工作順序,下一階段的崗位負(fù)責(zé)對(duì)上一階段的崗的輸入進(jìn)行代碼版本一致性、完整性進(jìn)行驗(yàn)證。
3.3 控制點(diǎn)與控制措施
在各個(gè)階段的控制點(diǎn)采用單向散列算法(如MD5、SHA)等措施計(jì)算出代碼文件的指紋信息,通過對(duì)指紋信息的比較,確定代碼的一致性與完整性。
代碼開發(fā)階段:在完成代碼開發(fā)封版后,由代碼開發(fā)崗位人員將源代碼與編譯腳本一起打包,再用單向散列算法(如MD5、SHA)計(jì)算出代碼包的指紋信息。
代碼審計(jì)階段:源代碼包從代碼開發(fā)階段流轉(zhuǎn)至代碼審計(jì)階段,為防止該流轉(zhuǎn)過程中代碼包被篡改,代碼審計(jì)人員收到代碼后須校驗(yàn)指紋信息。由代碼審計(jì)人員使用單向散列算法(如MD5、SHA)計(jì)算出代碼包的指紋信息,并與開發(fā)階段打包時(shí)計(jì)算出來的指紋信息進(jìn)行比較,如果指紋一致即說明代碼包沒有被篡改。
代碼編譯階段:當(dāng)通過代碼審計(jì)確認(rèn)源代碼不存在安全問題后,可進(jìn)入代碼編譯階段。代碼包從代碼開發(fā)階段流轉(zhuǎn)至代碼編譯階段,為防止該流轉(zhuǎn)過程中代碼包被篡改,代碼編譯人員收到代碼后須校驗(yàn)指紋信息。由代碼編譯人員使用單向散列算法(如MD5、SHA)計(jì)算出代碼包的指紋信息,并與開發(fā)階段打包時(shí)計(jì)算出來的指紋信息進(jìn)行比較,如果指紋一致即說明代碼包沒有被篡改。
為防止代碼編譯過程中代碼編譯人員對(duì)代碼的篡改,需對(duì)代碼編譯服務(wù)器進(jìn)行管控,編譯服務(wù)器接入管控平臺(tái)(如堡壘機(jī)、4A系統(tǒng)等),通過在可控制的環(huán)境下對(duì)源代碼進(jìn)行編譯,記錄編譯過程日志并錄屏,同時(shí)可安排第三方人員旁站監(jiān)控整個(gè)編譯過程。
編譯完成后,由代碼編譯人員將目標(biāo)程序打包,再用單向散列算法(如MD5、SHA)計(jì)算出程序包的指紋信息。
系統(tǒng)測(cè)試階段:程序包從代碼編譯階段流轉(zhuǎn)到系統(tǒng)測(cè)試階段,由系統(tǒng)測(cè)試人員對(duì)代碼編譯過程進(jìn)行審計(jì),通過管控平臺(tái)(如堡壘機(jī)、4A系統(tǒng)等)調(diào)出編譯過程的日志與錄屏。確認(rèn)編譯過程沒有違規(guī)操作。
為防止該流轉(zhuǎn)過程中程序包被篡改,系統(tǒng)測(cè)試人員收到程序包后須校驗(yàn)指紋信息。由系統(tǒng)測(cè)試人員使用單向散列算法(如MD5、SHA)計(jì)算出程序包的指紋信息,將指紋信息與編譯階段打包時(shí)計(jì)算出來的指紋信息進(jìn)行比較,如果指紋一致即說明程序包沒有被篡改。
系統(tǒng)部署階段:當(dāng)系統(tǒng)程序通過測(cè)試確認(rèn)可投入到生產(chǎn)環(huán)境運(yùn)行后可將系統(tǒng)程序部署到生產(chǎn)環(huán)境上。程序包從代碼編譯階段流轉(zhuǎn)到系統(tǒng)部署階段,為防止該流轉(zhuǎn)過程中程序包被篡改。系統(tǒng)部署人員收到程序包后須校驗(yàn)指紋信息。由系統(tǒng)部署人員使用單向散列算法(如MD5、SHA)計(jì)算出程序包的指紋信息,將指紋信息與編譯階段打包時(shí)計(jì)算出來的指紋信息進(jìn)行比較,如果指紋一致即說明程序包沒有被篡改。
通過上以每個(gè)階段各控制點(diǎn)實(shí)施控制措施,形成代碼版本一致性與完整性的控制鏈條,確認(rèn)每一個(gè)環(huán)節(jié)都是可控的。確保代碼從開發(fā)階段至部署到生產(chǎn)系統(tǒng)階段的一致性與完整性。
3.4 流程圖
各階段工作流程如圖1所示。
4 結(jié)束語
通過規(guī)范代碼在各個(gè)階段的流轉(zhuǎn)過程,并在每個(gè)階段實(shí)施相應(yīng)的控制措施,形成代碼版本一致性、完整改性控制鏈條,有效地保障了代碼版本的一致性。