在當(dāng)今信息社會(huì),計(jì)算機(jī)和互聯(lián)網(wǎng)已成為人們工作和休閑不可缺少的工具。業(yè)余時(shí)間,人們通過電腦聊天、娛樂和看電影。在工作中,人們會(huì)利用計(jì)算機(jī)和網(wǎng)絡(luò)處理公文、傳遞公文,甚至開展金融業(yè)務(wù)。
? ? ? ?因此,黑客有機(jī)會(huì)利用系統(tǒng)中的漏洞專門開發(fā)某些程序。通過添加一系列匹配參數(shù),它們將獲得對(duì)我們計(jì)算機(jī)的控制,監(jiān)視我們的隱私,竊取我們的信息,甚至給我們帶來名譽(yù)和財(cái)產(chǎn)損失。在專業(yè)領(lǐng)域,由于程序員的不足而導(dǎo)致的系統(tǒng)漏洞稱為溢出。
溢出有幾種類型,一種是緩沖區(qū)溢出,另一種是內(nèi)存溢出,另一種是數(shù)據(jù)溢出。三種溢出對(duì)每個(gè)計(jì)算機(jī)用戶都是非常有害的。今天,編輯重點(diǎn)介紹內(nèi)存溢出的一些基本知識(shí)。
可以說,自從軟件開發(fā)以來,內(nèi)存溢出就一直存在,隨著軟件開發(fā)的發(fā)展到現(xiàn)在,它已經(jīng)成為歷史上存在了幾十年的一個(gè)大問題,也成為黑客攻擊個(gè)人電腦、窺探企業(yè)機(jī)密等性能的最大罪魁禍?zhǔn)自趦?nèi)存溢出的紅色代碼病毒事件中,引起了當(dāng)時(shí)業(yè)界的恐慌。
而且,根據(jù)相關(guān)安全部門的調(diào)查統(tǒng)計(jì),操作系統(tǒng)中一半以上的安全漏洞是由內(nèi)存溢出造成的,這些漏洞大多與微軟技術(shù)密切相關(guān)。
雖然微軟的軟件是為臺(tái)式機(jī)開發(fā)的,但如果不連接互聯(lián)網(wǎng),內(nèi)存溢出不會(huì)帶來嚴(yán)重后果,但問題是,目前,網(wǎng)絡(luò)已經(jīng)成為個(gè)人或企業(yè)不可或缺的一部分。內(nèi)存溢出已成為黑客攻擊的最有利助手。
內(nèi)存溢出是由多種問題引起的,一是使用C或Category+等非類型安全語(yǔ)言,內(nèi)存溢出可以說是C或C+語(yǔ)言無法克服的缺陷,因?yàn)樗鼈儾粰z查數(shù)組邊界,也不檢查類型的可靠性。他們開發(fā)的程序的目標(biāo)代碼與機(jī)器內(nèi)核的目標(biāo)代碼非常接近,因此他們可以直接訪問寄存器和內(nèi)存,這可以大大提高C或C+語(yǔ)言代碼的性能,在執(zhí)行效率上有優(yōu)勢(shì),但也更容易造成內(nèi)存溢出問題。
其次,以不可靠的方式訪問或復(fù)制內(nèi)存緩沖區(qū),簡(jiǎn)而言之,如果將16毫升的溶液倒入只能容納12毫升的試管中,那么額外的4毫升溶液將自然溢出。
第三,編譯器設(shè)置的內(nèi)存緩沖區(qū)離鍵數(shù)據(jù)結(jié)構(gòu)太近,假設(shè)一個(gè)函數(shù)的堆棧與內(nèi)存緩沖區(qū)緊密相連,那么保存的函數(shù)返回地址將與內(nèi)存緩沖區(qū)相鄰。
黑客可以將大量數(shù)據(jù)復(fù)制到內(nèi)存緩沖區(qū),從而使內(nèi)存緩沖區(qū)溢出,并覆蓋先前存儲(chǔ)在堆棧中的函數(shù)的返回地址,造成損失。
那么如何為程序員預(yù)防和解決這個(gè)問題呢?
? ? ? 有兩種措施。一是在用CAccord+編寫代碼時(shí),要注意處理用戶數(shù)據(jù)的方式。當(dāng)函數(shù)的數(shù)據(jù)源不可靠且同時(shí)使用內(nèi)存緩沖區(qū)時(shí),則必須嚴(yán)格遵循1、必須獲得內(nèi)存緩沖區(qū)的總長(zhǎng)度。2、驗(yàn)證內(nèi)存緩沖區(qū)。3、從源代碼開始要保持警惕。第二個(gè)措施是使用一些新技術(shù),因?yàn)閹缀醪豢赡苤竿绦騿T永遠(yuǎn)不會(huì)出錯(cuò),所以現(xiàn)在已經(jīng)開發(fā)了一些新技術(shù),如基于檢測(cè)的方法、堆棧防御、分段控制和數(shù)據(jù)堆棧,它允許底層系統(tǒng)自動(dòng)保護(hù)程序不受內(nèi)存溢出的影響。