孟宏偉
"摘要:內(nèi)存訪問異常能夠?qū)е聡乐氐能浖毕?。詳細介紹了與內(nèi)存訪問相關(guān)的軟件缺陷典型案例,深入剖析了這些缺陷產(chǎn)生的原因、帶來的影響,并針對性地給出了解決方法和預(yù)防措施。對提升軟件可靠性具有實際意義。
關(guān)鍵詞:軟件可靠性;軟件缺陷;案例剖析
中圖分類號:TP311.55 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)21-0076-05
Abstract: Memory access exceptions can cause serious software defects. Typical case of software defects related to memory access is introduced in detail. The causes and effects of these defects are analyzed, and the targeted solutions and preventive measures are given. Has practical significance to improve the reliability of software.
Key words: software reliability; software defect; case analysis
隨著軟件規(guī)模和復(fù)雜性的快速增長,軟件開發(fā)難度也在增大,導(dǎo)致在開發(fā)過程中存在某些不確定性的錯誤或缺陷。正是在開發(fā)過程中不可避免地存在缺陷,造成軟件在使用中給用戶帶來不少損失,因此軟件的可靠性和軟件質(zhì)量越來越受到重視[1]。軟件測試是軟件生命周期模型中的重要階段,是保證軟件質(zhì)量和提高軟件可靠性的重要途徑[2]。系統(tǒng)對軟件質(zhì)量和可靠性的要求越來越高,給軟件測試行業(yè)帶來巨大挑戰(zhàn)。
C/C++是廣泛用于系統(tǒng)和應(yīng)用軟件開發(fā)的語言,也是使用最為廣泛的編程語言[3]。同時C/C++也是易學(xué)難用的語言,程序中指針和數(shù)組的靈活性在于它能讓程序員方便地對內(nèi)存進行操作,但這種靈活性也容易成為問題的所在。因此C/C++開發(fā)的系統(tǒng)往往更容易產(chǎn)生嚴重的生產(chǎn)事故,一旦出現(xiàn)事故,定位問題根源也比較困難。
本文將根據(jù)實際工程經(jīng)驗,總結(jié)出軟件測試過程中遇到的與內(nèi)存訪問相關(guān)的典型問題,并通過對這些問題的闡述和分析,提出了預(yù)防此類問題發(fā)生的解決方法。在每個案例中,先給出錯誤代碼示例,然后分析缺陷的現(xiàn)象、原因和后果,最后給出解決方案和建議。
本文案例有助于提升軟件測試人員分析和審查代碼的能力,從而快速發(fā)現(xiàn)并準(zhǔn)確定位軟件問題;對于開發(fā)人員,有利于助其繞過Bug構(gòu)建穩(wěn)定可靠的生產(chǎn)系統(tǒng)、編寫出健壯可靠的代碼,從而達到提高軟件質(zhì)量,減少生產(chǎn)故障,提高工作效率的目的。
1 與內(nèi)存訪問越界相關(guān)的缺陷案例分析及解決方案
在嚴重威脅軟件系統(tǒng)可靠性和安全性的多類軟件缺陷中,內(nèi)存訪問越界屬于危害性很強且廣泛存在的一類缺陷[4]。內(nèi)存越界多數(shù)情況下,系統(tǒng)內(nèi)存檢查機制也不能立即給出出錯信息,它們隱藏在程序中,隨時會引起系統(tǒng)崩潰,而且定位非常困難。許多經(jīng)定位、抽象之后看似簡單的問題,在規(guī)模較大且邏輯復(fù)雜的情況下往往容易被忽略。
1.1 計算得到錯誤的下標(biāo)導(dǎo)致數(shù)組越界
1.1.1 問題描述
int i, arr[10];
…
i = num_a – num_b ;
arr[i] = i;
1.1.2 機理分析
當(dāng)num_a – num_b的值小于0或大于等于10時,將造成對數(shù)組arr的越界寫入,帶來難以預(yù)測的風(fēng)險,可能導(dǎo)致段錯誤。
1.1.3 風(fēng)險控制方法
當(dāng)數(shù)組下標(biāo)由計算得出時,使用前應(yīng)檢查其合法性。避免出現(xiàn)可導(dǎo)致程序出錯的非整數(shù)下標(biāo)和負下標(biāo)等。
1.2 函數(shù)返回錯誤的下標(biāo)導(dǎo)致數(shù)組越界
1.2.1 問題描述
int i, arr[10];
…
i = getIndex();
arr[i] = i;
1.2.2 機理分析
當(dāng)getIndex函數(shù)返回的值小于0或大于等于10時,將造成對數(shù)組arr的越界寫入,帶來難以預(yù)測的風(fēng)險。
1.2.3 風(fēng)險控制方法
當(dāng)數(shù)組下標(biāo)由函數(shù)返回得到時,使用前應(yīng)檢查其合法性。
1.3 循環(huán)次數(shù)錯誤導(dǎo)致數(shù)組越界
1.3.1 問題描述
int i, arr[10], num;
…
for(i = 0; i <= num; i++)
{
arr[i] = 0;
}
1.3.2 機理分析
整型數(shù)num經(jīng)過一系列運算后,作為循環(huán)控制變量決定著循環(huán)次數(shù),未經(jīng)判斷的情況下,當(dāng)num大于等于10時,將會導(dǎo)致死循環(huán),甚至更嚴重的后果。原因在于循環(huán)越界,訪問了arr[10]的位置,即賦值arr[10] = 0,而根據(jù)局部變量在棧中的分布方式,arr[10]的位置即為變量i的位置,此時i被賦值為0,導(dǎo)致循環(huán)條件依然成立,陷入死循環(huán);當(dāng)num大于10時,將越界覆蓋更多內(nèi)存,帶來嚴重的隱患。
1.3.3 風(fēng)險控制方法
當(dāng)數(shù)組下標(biāo)由循環(huán)變量控制時,使用前應(yīng)檢查其合法性。C/C++語言中數(shù)組下標(biāo)越界,編譯器是不會檢查出錯誤的,但一旦出錯后果會很嚴重,可能會導(dǎo)致程序崩潰等。因此當(dāng)使用變量作為數(shù)組下標(biāo)訪問數(shù)組元素時,檢查數(shù)組下標(biāo)的合理性是一個良好的編程習(xí)慣。
1.4 由strcpy函數(shù)造成的數(shù)組訪問越界
2 網(wǎng)絡(luò)安全管理實施對策
2.1 在全網(wǎng)部署硬件防火墻
根據(jù)內(nèi)部網(wǎng)絡(luò)的需求,在內(nèi)網(wǎng)和外網(wǎng)之間架設(shè)硬件防火墻,隔離外網(wǎng)與內(nèi)網(wǎng)之間的訪問。在防火墻中打開IP和端口控制,設(shè)立DMZ區(qū),打開所需的常用網(wǎng)絡(luò)服務(wù)如HTTP、FTP等,這樣就可防范外部對內(nèi)部用戶的攻擊;及時查看防火墻的日志文件,對防火墻的管理可以指定獨立的管理IP。通過對防火墻規(guī)則的設(shè)置,使用戶需要的應(yīng)用協(xié)議才能通過,讓內(nèi)部網(wǎng)絡(luò)變得更安全。
2.2 利用專用服務(wù)器安裝網(wǎng)絡(luò)版殺毒軟件
采用網(wǎng)絡(luò)版殺毒軟件,可以對整個內(nèi)部網(wǎng)絡(luò)采取全面的病毒防護?,F(xiàn)在的網(wǎng)絡(luò)版殺毒軟件有瑞星和江民。他們都能對整個內(nèi)部網(wǎng)絡(luò)進行防病毒統(tǒng)一管理,制作一定的防病毒策略,定時對全網(wǎng)系統(tǒng)進行自動查、殺病毒。網(wǎng)絡(luò)防病毒策略一般包括:升級和修補,及時更新病毒程序包和殺毒軟件版本;備份,定時備份所需的重要數(shù)據(jù)以便在出現(xiàn)故障時進行恢復(fù);安裝軟件時使用經(jīng)過確認的軟件包;一旦某臺機器感染病毒,找到感染源并徹底清除;任何客戶端都不能自行卸載殺毒軟件,設(shè)立卸載密碼。
2.3 網(wǎng)絡(luò)安全漏洞修補
定期采用專用的漏洞掃描軟件對內(nèi)部網(wǎng)絡(luò)的專用服務(wù)器如WWW服務(wù)器、視頻會議服務(wù)器、數(shù)據(jù)庫服務(wù)器、FTP服務(wù)器等進行漏洞掃描、分析和評估,并生成掃描報告。根據(jù)評估的安全風(fēng)險,及時修補漏洞及下載系統(tǒng)更新補丁,還要對重要數(shù)據(jù)進行備份,以達到增強網(wǎng)絡(luò)的安全性的目的。
2.4 用戶級訪問控制
對所有用戶采用專用的用戶口令和訪問規(guī)則及權(quán)限,以確保只有合法用戶才能訪問合法資源。網(wǎng)絡(luò)管理員應(yīng)該對不同的設(shè)備設(shè)置不同的口令,而且設(shè)置的口令最好是大小寫字母、數(shù)字加特殊字符等,最好是8位以上的密碼,還需要定期更改密碼并將密碼記錄下來。
2.5 內(nèi)部網(wǎng)絡(luò)計算機認證訪問
我們都知道,計算機的MAC地址在全球是唯一的,在網(wǎng)絡(luò)中對所有計算機進行IP地址和MAC地址進行綁定,就能夠標(biāo)識每臺計算機的使用人,只有經(jīng)過綁定的計算機的IP才能夠訪問網(wǎng)絡(luò)。這種綁定可以使用具有三層功能的核心交換來做,也可以使用軟件在專用服務(wù)器上做。利用這種綁定不但可以控制網(wǎng)內(nèi)用戶隨意更換IP的問題,還可以很容易找到某些存在問題的計算機。
2.6 網(wǎng)絡(luò)機房安全管理
網(wǎng)絡(luò)安全管理不僅僅要從計算機硬件、軟件和人員使用上管理到位,而且對機房也要納入安全管理范圍,并建立各種安全管理制度,如機房管理制度、設(shè)備管理制度、安全系統(tǒng)管理制度、病毒防范制度、操作安全管理制度、安全事件應(yīng)急制度、各服務(wù)器檢查備份制度等,建立相應(yīng)的各種檢查記錄文件,定期修訂不安全的因素,最終采取切實有效的措施保證制度的執(zhí)行。
通過以上對各種網(wǎng)絡(luò)安全技術(shù)的分析,我們給出了相應(yīng)的解決問題的對策,從技術(shù)和制度管理上保證了療養(yǎng)院信息網(wǎng)絡(luò)安全的運行。我相信,隨著網(wǎng)絡(luò)安全管理人員的進一步學(xué)習(xí)和實踐,并積極參加國內(nèi)外的各種網(wǎng)絡(luò)安全培訓(xùn),必將會進一步提高我們信息網(wǎng)絡(luò)管理的安全,使網(wǎng)絡(luò)安全正常的運行。
參考文獻:
[1] Anne Carasik-Henmi. 防火墻核心技術(shù)精解[M]. 北京: 中國水利水電出版社, 2005:10-14.
[2] 戴浩, 楊林. 端端通信系統(tǒng)安全體系結(jié)構(gòu)[J]. 計算機安全, 2004(2).
[3] 譚兵, 吳宗文, 黃偉. 網(wǎng)絡(luò)入侵檢測技術(shù)綜述[J]. 電腦編程技巧與維護, 2010(2).