◆李奇冰
(天津南開創(chuàng)元信息技術(shù)有限公司 天津 300384)
軟件開發(fā)中的安全代碼技術(shù)
◆李奇冰
(天津南開創(chuàng)元信息技術(shù)有限公司 天津 300384)
計(jì)算機(jī)漏洞帶來了嚴(yán)重的影響,阻礙了用戶的正常工作,不利于營造一個安全可靠的計(jì)算機(jī)運(yùn)行環(huán)境。本文結(jié)合筆者多年來的工作經(jīng)驗(yàn),圍繞各種網(wǎng)絡(luò)安全攻擊技術(shù),進(jìn)行了針對性的分析,并引出了實(shí)施安全代碼技術(shù)的重要性和應(yīng)對措施,希望對相關(guān)領(lǐng)域的工作有所啟發(fā)。
軟件開發(fā);安全;代碼技術(shù)
現(xiàn)階段,隨著科學(xué)技術(shù)的發(fā)展,各種開發(fā)工具層出不窮,為程序員編程工作的順利進(jìn)行提供了極大的方便。需要值得注意的是,不論是為了保證程序的正常運(yùn)行,還是基于對安全的考慮,編程人員都有權(quán)利和義務(wù)保證程序代碼的安全,并力求在此基礎(chǔ)上強(qiáng)大其功能。所謂安全性代碼是指那些工作于不同信任等級的同一代碼,其能在另一個信任等級處實(shí)現(xiàn)對其他信任級別中任一處理信息的操作,在網(wǎng)絡(luò)程序、CGI腳本以及計(jì)算機(jī)的Web瀏覽器中都有分布。所以,對運(yùn)行調(diào)試期的程序進(jìn)行安全代碼技術(shù)的處理意義重大。
廣義上的軟件是指按照一定順序、規(guī)則組織起來的計(jì)算機(jī)指令和數(shù)據(jù)總和,軟件一般可分為系統(tǒng)軟件和應(yīng)用軟件兩種類型,其中前者可視為后者的運(yùn)行平臺,從編程人員角度來說,一個軟件就相當(dāng)于數(shù)據(jù)、程序、文檔的綜合體。在計(jì)算機(jī)和互聯(lián)網(wǎng)越來越普及的信息時代中,軟件已經(jīng)成為人們?nèi)粘I钪胁豢苫蛉钡墓ぞ?,幾乎每一步操作都與軟件程序有關(guān)。
軟件開發(fā)過程中的安全意識、安全設(shè)計(jì)和安全實(shí)施等工作,直接決定了軟件安全性。鑒于當(dāng)前軟件開發(fā)產(chǎn)品越來越“傻瓜”的特點(diǎn),強(qiáng)調(diào)其應(yīng)用層的功能完善,客觀上忽視了安全層面的機(jī)制完善,容易遭到黑客的覬覦。互聯(lián)網(wǎng)產(chǎn)業(yè)化雖然形成了“BAT”這樣的行業(yè)寡頭,但在安全層面依然存在很多漏洞,且現(xiàn)代人的生活軌跡與軟件應(yīng)用息息相關(guān),如辦公、娛樂、消費(fèi)等。近年來頻頻曝光的黑客攻擊事件,本質(zhì)上是尋找到軟件漏洞、缺陷之后加以攻擊,從而造成大量信息泄露,給當(dāng)事人造成嚴(yán)重的損失;因此,在軟件開發(fā)中必須強(qiáng)調(diào)安全性。
在進(jìn)行代碼編寫的過程中,編程人員并不能準(zhǔn)確找到存在的安全隱患,也不能及時的預(yù)防隱患的發(fā)生,所以在一定程度上影響了代碼編寫工作的效率。因此,對于程序人員來說,不能僅立足于當(dāng)前工作的需要,應(yīng)該在工作中不斷提高自我修養(yǎng),不斷總結(jié)編程經(jīng)驗(yàn)。著名網(wǎng)絡(luò)專家Jeff Schmidt根據(jù)這種現(xiàn)象,提出了安全編寫的思想,下面我們據(jù)此進(jìn)行針對性的分析。
2.1 只授予軟件最低的權(quán)限
軟件根據(jù)自身的功能來獲取不同級別的權(quán)限,如殺毒軟件與通信軟件相比,所開放的權(quán)限更大、更底層。程序在進(jìn)行注冊表和系統(tǒng)文件的更改時,由于其需要通過系統(tǒng)級函數(shù)的權(quán)限,所以也就在一定程度上給黑客帶來了可乘之機(jī)。為此,我們可以根據(jù)不同程序的功能,將其劃分成不同的模塊,并分別授予每個模塊最低權(quán)限。授予軟件最低權(quán)限的優(yōu)勢在于便于程序員檢測和維護(hù),也可以更方便的展開審核。
2.2 檢查所有的返回代碼
在進(jìn)行系統(tǒng)或者第三方提供的外部庫函數(shù)的調(diào)用工作時,程序員必需要認(rèn)真檢查所有的返回代碼,為程序的穩(wěn)定運(yùn)行提供切實(shí)的保證。本質(zhì)上,返回代碼是軟件開發(fā)中的錯誤反饋、異常反饋機(jī)制,在軟件正常工作情況下,系統(tǒng)會反饋相對復(fù)雜、全面的信息內(nèi)容,但在開發(fā)過程中不允許也不具備實(shí)現(xiàn)條件,編程人員需要通過簡單反饋信息加以判斷,并迅速了解出錯位置信息。因此,返回代碼通常是判斷代碼;引起程序出錯的原因有很多,比如,部分非標(biāo)準(zhǔn)格式化的環(huán)境變量、缺乏充足的系統(tǒng)資源以及用戶自行編輯配置文件或注冊表鍵而引起的誤操作等。此外,在程序運(yùn)行過程中,必須將各個模塊的功能充分協(xié)調(diào)起來,使程序更好的工作于任意一個環(huán)境中。
2.3 競態(tài)條件
所謂競態(tài)條件是指攻擊者會在用戶進(jìn)行文件編寫、共享量的修改或者數(shù)據(jù)的更新工作時,乘機(jī)進(jìn)入系統(tǒng),修改程序數(shù)據(jù),使得程序產(chǎn)生錯誤的輸入。比如,某一文件在該程序讀寫文件之前被控制,攻擊者會編寫一段指令代碼將寫入的程序轉(zhuǎn)移到另一個文件中,這在臨時文件中發(fā)生的概率較大。攻擊者會用自己的假文件來替代用戶的臨時文件,實(shí)現(xiàn)數(shù)據(jù)信息之間的轉(zhuǎn)移。為了有效防止這種情況的發(fā)生,我們從兩方面進(jìn)行防治:其一,及時進(jìn)行資源文件的驗(yàn)證,降低事故發(fā)生的概率;其二,建立一個私有目錄用于存放部分臨時文件,并且必要時實(shí)現(xiàn)對系統(tǒng)的鎖定。
2.4 進(jìn)行邊界檢查、防止緩沖區(qū)溢出
當(dāng)程序中存在緩沖區(qū)溢出漏洞時,攻擊者往往會將部分具有一定權(quán)限的安全代碼植入其中,此時其會通過一些手段獲得被攻擊主體的系統(tǒng)管理員權(quán)限。攻擊者利用該漏洞不僅可以叫停目標(biāo)服務(wù),而且還可以獲得更多的訪問權(quán)限或者對于存在緩沖區(qū)溢出漏洞的遠(yuǎn)程服務(wù)來說,可以通過遠(yuǎn)程操作實(shí)現(xiàn)對目標(biāo)的控制。此外,對于檢查代碼來說,其動態(tài)和靜態(tài)緩沖區(qū)存入數(shù)據(jù)的情況需要根據(jù)所使用開發(fā)語言的類型來決定。同時,為了確保緩沖區(qū)的安全,需要從緩存的起始位置開始對每個緩沖區(qū)進(jìn)行跟蹤,直到程序結(jié)束時停止該任務(wù)。
2.5 保證代碼失效時自動關(guān)閉
當(dāng)用戶軟件系統(tǒng)受到攻擊時,采取該方法可以實(shí)現(xiàn)對用戶計(jì)算機(jī)安全的保護(hù)。具體來講就是,如果我們發(fā)現(xiàn)軟件系統(tǒng)無法正常的工作時,應(yīng)該立即停止所有對系統(tǒng)權(quán)限的訪問,關(guān)閉計(jì)算機(jī),避免攻擊者進(jìn)入控制系統(tǒng)。比如,如果攻擊者在編程人員進(jìn)行防火墻系統(tǒng)的代碼編寫工作時,會采取強(qiáng)制性的拒絕服務(wù)功能,那么編程人員應(yīng)在第一時間斷網(wǎng)自保,進(jìn)而將損失降到最小,實(shí)現(xiàn)對計(jì)算機(jī)的保護(hù)。
軟件開發(fā)是一項(xiàng)長期且復(fù)雜的工作,但從生命周期理論角度分析,最復(fù)雜的工作并不是設(shè)計(jì)和實(shí)現(xiàn)環(huán)節(jié),而是必須要進(jìn)行調(diào)試階段的檢驗(yàn),確保軟件系統(tǒng)各項(xiàng)程序處于正常運(yùn)行的條件下。該環(huán)節(jié)雖然集中了開發(fā)小組中所有工作人員的智慧,但是不可避免的依然會存在一些安全隱患問題,為此必須要制定審核程序運(yùn)行性能的標(biāo)準(zhǔn),利用其來指導(dǎo)各項(xiàng)調(diào)試工作。在這個過程中我們需要明確以下幾點(diǎn):
(1)與新軟件的開發(fā)所使用的標(biāo)準(zhǔn)不同,軟件的維護(hù)過程也有一套屬于自己的運(yùn)行標(biāo)準(zhǔn),并且此要求要比開發(fā)流程嚴(yán)格的多。軟件程序調(diào)試、維護(hù)的過程不僅僅是對實(shí)用功能的檢測,同時也包括系統(tǒng)抗壓性、極限性等??紤]到調(diào)試、維護(hù)過程中造成系統(tǒng)崩潰的可能性較大,所以基于此要建立一個完善且功能強(qiáng)大的軟件修改控制系統(tǒng)。
(2)為了使整個調(diào)試工作的目標(biāo)更加明確,且方便實(shí)現(xiàn)對其的全過程檢查,一般選擇根據(jù)實(shí)際情況建立程序的運(yùn)行圖,進(jìn)行針對性的數(shù)據(jù)流分析,進(jìn)而將程序出口和入口處發(fā)生危險(xiǎn)的概率降到最低,且使整個程序更加精簡。同時,為了避免給攻擊者的反跟蹤提供便利,一定要使用較為復(fù)雜的安全代碼。
(3)為了在異常環(huán)境下也能通過其檢測來發(fā)現(xiàn)問題,需要使用一些方法給運(yùn)行程序輸入一些數(shù)據(jù)或命令,有效避免安全隱患的發(fā)生。比如,通過調(diào)試器和反匯編語言綜合作用的結(jié)果,讓代碼運(yùn)行于非正常參數(shù)的環(huán)境中;避免配置文件或者其他類型的文件中出現(xiàn)格式錯誤;利用垃圾數(shù)據(jù)的檢驗(yàn)機(jī)理來實(shí)現(xiàn)對網(wǎng)絡(luò)數(shù)據(jù)的接收等。
(4)在測試階段,十分有必要利用測試性的自我攻擊方法處理涉及網(wǎng)絡(luò)數(shù)據(jù)的軟件,比如,我們可以使用一個自動的漏洞掃描程序,檢測各應(yīng)用軟件的Email、DNS服務(wù)器等核心系統(tǒng),必要時也可以利用端口掃描的方式實(shí)現(xiàn)對連接到Internet的服務(wù)器的檢測,再通過撥號測試的攻擊作用,進(jìn)而使得連接到本網(wǎng)絡(luò)中有缺陷的modem露出原形。這些方法都是切實(shí)可行的,它依托于網(wǎng)絡(luò)內(nèi)部架構(gòu)的工作機(jī)理,通過對其的模擬作用,可以將普通平臺上的漏洞暴露出來,進(jìn)而找到防火墻、操作系統(tǒng)以及服務(wù)器程序的問題設(shè)置。
綜上所述,要想使得計(jì)算機(jī)的安全有所保障,必須要編寫安全可靠的運(yùn)行程序,相應(yīng)的這也對編程人員提出了嚴(yán)格的要求,不僅要時刻具備安全編寫的意識,同時還要不斷提高自己的技能修養(yǎng),熟練掌握安全代碼技術(shù),注重經(jīng)驗(yàn)的積累和創(chuàng)新,徹底擊碎攻擊者的陰謀。
[1]宋威,祁獻(xiàn)鵬.軟件開發(fā)中的安全代碼技術(shù)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2002.
[2]余勇,林為民.軟件安全開發(fā)模型的研究[J].計(jì)算機(jī)安全,2005.
[3]梅宏,王千祥,張路,王戟.軟件分析技術(shù)進(jìn)展[J].計(jì)算機(jī)學(xué)報(bào),2009.
圖1 統(tǒng)計(jì)與下載
調(diào)查問卷結(jié)在分析與下載一項(xiàng)中,包括分析下載、下載答卷、答卷來源分析和完成率分析等。分析與下載是結(jié)果統(tǒng)計(jì)的核心部分,以圖表類型顯示每個問題的答題情況,包括平均分、表格和表格條形圖,表格條形圖下又分為餅狀圖、圓圖、柱狀圖、折線和條形圖可供選擇顯示(見圖1),以圖形的形式顯示調(diào)查結(jié)果使人一目了然,直觀便捷,同時還可下載word版統(tǒng)計(jì)結(jié)果和所有參與者Excel版答題情況匯總(見圖2),Excel表格還可直接進(jìn)行SPSS統(tǒng)計(jì)學(xué)分析。
圖2 Excel表格統(tǒng)計(jì)
問卷調(diào)查是各個行業(yè)常開展的市場調(diào)查行為,由于網(wǎng)絡(luò)在線問卷方式便捷高效費(fèi)用低廉,使用者可根據(jù)實(shí)際問卷要求自由選擇量身定做,通過特定人群問卷,了解行業(yè)覆蓋面人群的認(rèn)知狀況,可以為行業(yè)的發(fā)展提供更好的思路和方法。本文以網(wǎng)絡(luò)問卷平臺為媒介,介紹了問卷的設(shè)計(jì)、傳播媒體的選擇和問卷結(jié)果分析等操作方法和技巧,旨在為使用者提供一些問卷調(diào)查方面的思路和方法。
參考文獻(xiàn):
[1]羅清萍,余芳.實(shí)用社會調(diào)查方法與技能訓(xùn)練[M].經(jīng)濟(jì)管理出版社,2013.
[2]萬聰.網(wǎng)絡(luò)問卷調(diào)查系統(tǒng)分析與設(shè)計(jì)[D].北京:北京交通大學(xué),2014.
[3]曾五一,黃炳藝.調(diào)查問卷的可信度和有效度分析[J].統(tǒng)計(jì)與信息論,2005.
課題項(xiàng)目:山西省高等學(xué)校教學(xué)改革項(xiàng)目(J2015080)。