




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章網(wǎng)絡(luò)病毒的典型入侵機制3.1棧溢出攻擊3.2單字節(jié)棧溢出攻擊3.3堆溢出攻擊3.4小結(jié)及進一步學(xué)習(xí)的指南3.1棧溢出攻擊棧溢出攻擊是第一代溢出攻擊技術(shù),也稱為Morris代碼注入。先看下面一段C語言程序,這一函數(shù)將來自外部的一串字節(jié)復(fù)制到其局部數(shù)組buffer中,你能看出什么問題嗎?
#defineMAX_BUFFER_SIZE256
voidroutine(char*p)/*p[]是來自外部的字符串*/{
int
x,y,u,v;charbuffer[MAX_BUFFER_SIZE];/*將輸入字符串填入buffer:*/
strcpy(buffer,p);…………return;}
strcpy(buffer,p)將數(shù)組p[]的內(nèi)容逐字節(jié)復(fù)制到數(shù)組buffer[],但沒有檢查p[]的實際長度是否超過buffer[]的容量,即MAX_BUFFER_SIZE!設(shè)想運行期間p[]承載的是來自外部的網(wǎng)絡(luò)消息,而且該消息(有意或無意)確實超過了上界MAX_BUFFER_SIZE,這將導(dǎo)致數(shù)組buffer的溢出。圖3-1棧溢出攻擊圖3-1棧溢出攻擊(續(xù))3.2單字節(jié)棧溢出攻擊看下面的C語言程序,
#defineMAX_BUFFER_SIZE256
voidroutine(char*p)/*p[]是來自外部的字符串*/{charbuffer[MAX_BUFFER_SIZE];
inti,n;/*將輸入字符串填入buffer:*/n=strlen(p)<=MAX_BUFFER_SIZE?strlen(p):MAX_BUFFER_SIZE;for(i=0;i<=n;i++)
buffer[i]=p[i];……}
for循環(huán)在計算數(shù)組上界時錯誤地多計算了一個字節(jié),結(jié)果在運行期間可能實際向棧幀寫入257個字節(jié),即溢出一個字節(jié)。仔細觀察圖3-3(a)中“父棧幀”地址項的位置和含義,不難發(fā)現(xiàn)一條間接的攻擊途徑。為解釋這一攻擊,需要先解釋一下,“Little-Endian”機器和“Big-Endian”機器的區(qū)別。如圖3-2所示,詳細描述了單字節(jié)溢出攻擊。圖3-2Little-Endian和Big-Endian機器的區(qū)別圖3-3Little-Endian機器上的單字節(jié)溢出攻擊細心的讀者會注意到,成功實施這一攻擊的關(guān)鍵在于能夠成功偽造出父函數(shù)的棧幀。父函數(shù)的棧幀記錄的是父函數(shù)在調(diào)用函數(shù)routine之前的臨時狀態(tài),routine返回后其父函數(shù)需要從這一瞬間狀態(tài)繼續(xù)向后執(zhí)行。如果父棧幀偽造不當導(dǎo)致父函數(shù)執(zhí)行發(fā)生錯誤,不能正常結(jié)束而返回,則攻擊者將達不到執(zhí)行病毒代碼的目的。3.3堆溢出攻擊堆(heap)在進程運行期間由操作系統(tǒng)動態(tài)分配并映射成為進程空間的一部分。堆溢出攻擊技術(shù),目的仍然是通過溢出篡改合法數(shù)據(jù),再通過這一篡改改變當前進程的執(zhí)行流。#defineMAX_BUFFER_SIZE256int
main(int
argc,char**argv){{
inti=0,ch;FILE*f;staticcharbuffer[MAX_BUFFER_SIZE];staticchar*szFilename="c:\\procfile.txt";
ch=getchar();
while(ch!=EOF){/*可能導(dǎo)致buffer[]溢出*/
buffer[i]=ch;ch=getchar();i++;}f=fopen(szFilename,"w+b");fputs(buffer,f);……fclose(f);}以上程序中的變量buffer[]和szFilename在進程空間中的布局如圖3-4(a)所示。根據(jù)程序,buffer[]由來自程序輸入流的字節(jié)順序填充,如果攻擊者炮制的輸入流超長而且恰好改寫了緊鄰buffer[]的堆變量szFilename,這意味著該程序?qū)⒋蜷_一個攻擊者指定的文件進行I/O操作。如果這是一個特權(quán)進程,攻擊者將有機會存取操作一個本來沒有權(quán)限存取的敏感文件。利用堆溢出攻擊還有可能篡改進程空間中的函數(shù)地址以改變進程流程??聪旅娴腃語言程序。#defineMAX_BUFFER_SIZE256int
CallBack(constchar*szTemp){……}int
main(int
argc,char**argv){{staticcharbuffer[MAX_BUFFER_SIZE];staticint(*funcptr)(constchar*);/*函數(shù)指針*/
funcptr=(int(*)(constchar*))CallBack;
strcpy(buffer,argv[1]);/*Sizeunchecked!*/
(int)(*funcptr)(argv[2]);……}圖3-4堆溢出攻擊的例子:篡改變量值以上程序沒有檢查argv[1]是否超出長度,從而使攻擊者有可能通過溢出來篡改函數(shù)指針funcptr的值,結(jié)果將以argv[2](注意該參數(shù)也來自攻擊者!)為參數(shù),執(zhí)行的不再是預(yù)期的函數(shù)CallBack,而是攻擊者指定的任何函數(shù)。在圖3-5中描述了這一過程。圖3-5堆溢出攻擊的例子:篡改函數(shù)指針3.4小結(jié)及進一步學(xué)習(xí)的指南附錄3.1網(wǎng)絡(luò)編程概要A3.1.1socketAPI圖3-6socket模型第一,兩個通信進程各自創(chuàng)建一個socket對象,通過定義參數(shù)告知socket對象通信對方是誰,以什么協(xié)議(例如是TCP還是UDP)進行通信,通信過程中的某些輸入/輸出問題如何處理(例如,以TCP傳輸數(shù)據(jù)時,是有任何字節(jié)到達時即通知應(yīng)用程序,還是到達指定的臨界字節(jié)數(shù)后才這樣做)等。第二,一旦通信開始,socket對象負責(zé)處理傳輸過程中的一切事務(wù)。第三,socket對象在網(wǎng)絡(luò)上傳輸?shù)膬H僅是字節(jié)流,即socket不對被傳輸信息的結(jié)構(gòu)做任何假設(shè),所有關(guān)于被傳輸信息的結(jié)構(gòu)和含義的解釋都由應(yīng)用程序完成。第四,socket對象為應(yīng)用程序提供通信功能的方式與具體協(xié)議族無關(guān)。幾個最常用的socketAPI函數(shù)的主要功能。int
socket(int
afam,inttype,intprotocol);
創(chuàng)建一個socket對象,返回socket對象的文件描述符。int
bind(intsock,struct
sockaddr*localaddr,int
addrlen);
對socket對象指定地址及傳輸層端口號,int
connect(intsock,struct
sockaddr*remoteaddr,int
addrlen);
從描述符sock所標識的本地socket對象到remoteaddr所指示的遠程對象建立連接。int
listen(intsock,int
queuelen);listen使TCP-socket對象sock準備接受到達的連接請求。int
accept(intsock,struct
sockaddr*remoteaddr,int*paddrlen);
調(diào)用accept函數(shù)的進程或線程進入睡眠,直到有TCP連接請求到達并且該連接被正確建立后才被喚醒,這時建立TCP連接的三次握手過程已經(jīng)完成,TCP連接已被建立并且被賦予一個新的(由操作系統(tǒng)自動創(chuàng)建的)socket對象,accept的返回值正是該對象的文件描述符。intread(intsock,char*buff,intsize);intwrite(intsock,char*buff,intsize);和accept一樣,這兩個函數(shù)是阻塞式的,即它們使調(diào)用進程或線程睡眠直到其操作完成后返回。recvfrom(intsock,char*buff,intsize,intflags,structsockaddr*from,int*fromlen);sendto(intsock,char*buff,intsize,intflags,structsockaddr*to,inttolen);這兩個函數(shù)在UDP-socket對象上接收和發(fā)送UDP數(shù)據(jù)報,也都是阻塞式函數(shù)。intclose(intsock);在調(diào)用這一函數(shù)后,socket對象不再可用,即不能再在該socket對象上調(diào)用read/write這類函數(shù),否則將返回錯誤。intshutdown(intsock,intflags);這是一個較close更靈活的函數(shù),它關(guān)閉本地socket對象到對方socket對象的TCP連接,這意味著在調(diào)用shutdown之后不能在本地對象上調(diào)用write,但還可以繼續(xù)調(diào)用read正常接收對方發(fā)送的數(shù)據(jù)。intsetsockopt(intsock,intlevel,intoption,char*optval,optlen);它的作用在于可以設(shè)置大量的socket對象配置選項,這些選項用來控制socket對象的行為。A3.1.2基于UDP的客戶機/服務(wù)器系統(tǒng)圖3-7基于UDP的客戶機/服務(wù)器過程A3.1.3基于TCP的客戶機/服務(wù)器系統(tǒng)圖3-8基于TCP的客戶機/服務(wù)器過程圖3-8基于TCP的客戶機/服務(wù)器過程(續(xù))圖3-8基于TCP的客戶機/服務(wù)器過程(續(xù))圖3-8基于TCP的客戶機/服務(wù)器過程(續(xù))圖3-8基于TCP的客戶機/服務(wù)器過程(續(xù))A3.1.4高性能服務(wù)器編程圖3-9多進程服務(wù)器圖3-10多線程服務(wù)器A3.1.5多協(xié)議服務(wù)器編程intselect(intignore,fd_set*refds,fd_set*wrfds,fd_set*exfds,conststructtimeval*timeout),利用select,我們可以實現(xiàn)一個單線程的多協(xié)議服務(wù)器如下。/*創(chuàng)建多個socket對象*/intfd_web=socket(AF_INET,SOCK_STREAM,0);intfd_ftp=socket(AF_INET,SOCK_STREAM,0);……intfd1,fd2,…,fdn;bind(fd_web,…);/*為一個socket對象指派IP地址和Web服務(wù)端口號*/listen(fd_ftp,…);/*為一個socket對象指派IP地址和FTP服務(wù)端口號*/……while(1){FD_SET(fd_web,&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件測試基礎(chǔ)知識試題及答案
- 2025屆欽州市重點中學(xué)數(shù)學(xué)七下期末復(fù)習(xí)檢測模擬試題含解析
- 2025屆北京東城二中學(xué)八年級數(shù)學(xué)第二學(xué)期期末質(zhì)量檢測試題含解析
- C++高級編程技巧試題及答案
- 網(wǎng)絡(luò)安全攻防演練中的策略與技巧試題及答案
- 如何開展精益管理實踐計劃
- 醫(yī)院內(nèi)部培訓(xùn)體系建設(shè)計劃
- 重慶市彭水一中學(xué)2025屆七年級數(shù)學(xué)第二學(xué)期期末教學(xué)質(zhì)量檢測模擬試題含解析
- 軟件開發(fā)常見問題解析試題及答案
- 城市交通與城市規(guī)劃方法創(chuàng)新研究重點基礎(chǔ)知識點
- 第十二周《遇見勞動之美點亮成長底色》主題班會
- 世界環(huán)境日環(huán)保教育班會 課件
- 臨床診療指南-疼痛學(xué)分冊
- 2024認定實際施工人法律風(fēng)險防范與合同完善服務(wù)合同3篇
- 2022年新高考全國Ⅱ卷英語高考真題試卷(含詳解)
- 舞蹈演出編導(dǎo)排練合同模板
- 【MOOC】人工智能原理-北京大學(xué) 中國大學(xué)慕課MOOC答案
- 【MOOC】引領(lǐng)世界的中國乒乓-西南交通大學(xué) 中國大學(xué)慕課MOOC答案
- 絲網(wǎng)印刷技術(shù)全套講解
- 《社會應(yīng)急力量分類分級測評實施辦法》知識培訓(xùn)
- 廈門理工學(xué)院應(yīng)屆生畢業(yè)論文答辯模板
評論
0/150
提交評論