網(wǎng)絡(luò)攻防原理與技術(shù)課件版第8-14章_第1頁
網(wǎng)絡(luò)攻防原理與技術(shù)課件版第8-14章_第2頁
網(wǎng)絡(luò)攻防原理與技術(shù)課件版第8-14章_第3頁
網(wǎng)絡(luò)攻防原理與技術(shù)課件版第8-14章_第4頁
網(wǎng)絡(luò)攻防原理與技術(shù)課件版第8-14章_第5頁
已閱讀5頁,還剩575頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第 八 章 網(wǎng)絡(luò)監(jiān)聽第 八 章 網(wǎng)絡(luò)監(jiān)聽內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)絡(luò)監(jiān)聽防御內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)知識回顧如何攻陷控制一臺主機?網(wǎng)絡(luò)偵察網(wǎng)絡(luò)掃描口令攻擊緩沖區(qū)溢出攻擊木馬 控制一臺主機后如何把戰(zhàn)果擴大到該局域網(wǎng)?知識回顧如何攻陷控制一臺主機? 控制一臺主機后如何把戰(zhàn)網(wǎng)絡(luò)監(jiān)聽網(wǎng)絡(luò)監(jiān)聽( Network Listening):是指在計算機網(wǎng)絡(luò)接口處截獲網(wǎng)上計算機之間通信的數(shù)據(jù),也稱網(wǎng)絡(luò)嗅探(Network Sniffing )。協(xié)助網(wǎng)絡(luò)管理員監(jiān)測網(wǎng)絡(luò)傳輸數(shù)據(jù),排除網(wǎng)絡(luò)故障;被黑客利用來截獲網(wǎng)絡(luò)上的敏感信息,給網(wǎng)絡(luò)安全帶來極大危

2、害。網(wǎng)絡(luò)監(jiān)聽網(wǎng)絡(luò)監(jiān)聽( Network Listening):是網(wǎng)絡(luò)監(jiān)聽案例網(wǎng)絡(luò)監(jiān)聽在安全領(lǐng)域引起普遍注意是在1994年。在該年2月,一個不知名的人在眾多的主機和骨干網(wǎng)絡(luò)設(shè)備上安裝了網(wǎng)絡(luò)監(jiān)聽軟件,對美國骨干互聯(lián)網(wǎng)和軍方網(wǎng)竊取了超過10萬個有效的用戶名和口令。該事件是互聯(lián)網(wǎng)上最早期的大規(guī)模網(wǎng)絡(luò)監(jiān)聽事件,使網(wǎng)絡(luò)監(jiān)聽從“地下”走向了公開,并迅速地在大眾中普及開來。網(wǎng)絡(luò)監(jiān)聽案例網(wǎng)絡(luò)監(jiān)聽在安全領(lǐng)域引起普遍注意是在1994年。在黑客用網(wǎng)絡(luò)監(jiān)聽能干什么?嗅探敏感的帳號信息Telnet會話的用戶名和密碼;HTTP應(yīng)用程序的用戶名和密碼;FTP口令;電子郵件消息截獲網(wǎng)絡(luò)上傳輸?shù)奈募治鰠f(xié)議信息黑客用網(wǎng)絡(luò)監(jiān)聽能干

3、什么?嗅探敏感的帳號信息網(wǎng)絡(luò)監(jiān)聽環(huán)境LANInternet 內(nèi)網(wǎng) 外網(wǎng) 主機A 主機B 主機C 路由器R 黑客 監(jiān)聽點網(wǎng)絡(luò)監(jiān)聽環(huán)境LANInternet 內(nèi)網(wǎng) 外網(wǎng) 主機A 主機要實施網(wǎng)絡(luò)監(jiān)聽,主要解決兩個問題:一是網(wǎng)絡(luò)流量劫持,即使監(jiān)聽目標的網(wǎng)絡(luò)流量經(jīng)過攻擊者控制的監(jiān)聽點(主機),主要通過各種地址欺騙或流量定向的方法來實現(xiàn)二是在監(jiān)聽點上采集并分析網(wǎng)絡(luò)數(shù)據(jù),主要涉及網(wǎng)卡的工作原理、協(xié)議分析技術(shù),如果通信流量加密了,則還需要進行解密處理。網(wǎng)絡(luò)監(jiān)聽要解決的問題要實施網(wǎng)絡(luò)監(jiān)聽,主要解決兩個問題:網(wǎng)絡(luò)監(jiān)聽要解決的問題內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)絡(luò)監(jiān)聽防御內(nèi)容提綱2流量劫

4、持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)攻擊者要想監(jiān)聽目標的通信,首先要能夠接收到目標的網(wǎng)絡(luò)通信數(shù)據(jù),如何做到呢?與網(wǎng)絡(luò)環(huán)境有關(guān)。一般來說,網(wǎng)絡(luò)環(huán)境可以劃分為共享式網(wǎng)絡(luò)環(huán)境和交換式網(wǎng)絡(luò)環(huán)境兩類。問題攻擊者要想監(jiān)聽目標的通信,首先要能夠接收到目標的網(wǎng)絡(luò)通信數(shù)據(jù)共享式網(wǎng)絡(luò)監(jiān)聽的原理廣播特性的總線:主機發(fā)送的物理信號能被物理連接在一起的所有主機接收到。網(wǎng)卡處于混雜模式:接收所有的數(shù)據(jù)幀。共享式網(wǎng)絡(luò)監(jiān)聽的原理廣播特性的總線:主機發(fā)送的物理信號能被物共享式網(wǎng)絡(luò)監(jiān)聽:總線型以太網(wǎng)B向 D發(fā)送數(shù)據(jù) C D A E不接受 不接受 不接受 接受 B只有 D 接受B 發(fā)送的數(shù)據(jù) 廣播特性的總線:所有都能收到,

5、但只有地址對了,才處理,從而實現(xiàn)了一對一的通信共享式網(wǎng)絡(luò)監(jiān)聽:總線型以太網(wǎng)B向 D C D 共享網(wǎng)絡(luò)監(jiān)聽:Hub共享網(wǎng)絡(luò)監(jiān)聽:Hub一、交換式網(wǎng)絡(luò)監(jiān)聽一、交換式網(wǎng)絡(luò)監(jiān)聽交換機的工作方式端口管理 端口1 端口2 緩存 交換機 以太網(wǎng) 交換機 1 2 MAC 端口 3 CAM存儲轉(zhuǎn)發(fā)實現(xiàn)了無碰撞地傳輸數(shù)據(jù)Content Addressable Memory,內(nèi)容可尋址存儲器交換機的工作方式端口管理 端口1 端口2 緩存 交換機 (一)交換網(wǎng)絡(luò)監(jiān)聽:交換機+集線器交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R (一)交換網(wǎng)絡(luò)監(jiān)聽:交換機+集線器交換機 內(nèi)網(wǎng)外網(wǎng)A:10.(二)交換網(wǎng)絡(luò)監(jiān)聽:端口鏡像1 2 3

6、4 5 6 端口鏡像(Port Mirroring):是把交換機一個或多個端口的數(shù)據(jù)鏡像到某個端口的方法。管理員為了部署網(wǎng)絡(luò)分析儀等設(shè)備,通過配置交換機端口鏡像功能來實現(xiàn)對網(wǎng)絡(luò)的監(jiān)聽。(二)交換網(wǎng)絡(luò)監(jiān)聽:端口鏡像1 2 3 4 5 6 端口鏡像(三)交換網(wǎng)絡(luò)監(jiān)聽:MAC洪泛攻擊思路:在局域網(wǎng)中發(fā)送帶有欺騙性MAC地址源的數(shù)據(jù);CAM表中將會填充偽造的MAC地址記錄,隨著記錄增多,與CAM表相關(guān)的交換機內(nèi)存將被耗盡,這時交換機以類似于集線器的模式工作,向其它所有的物理端口轉(zhuǎn)發(fā)數(shù)據(jù)。CAM MAC地址 端口 MAC1 1 MAC2 2 MAC3 3 偽造MAC 3 偽造MAC 3 偽造MAC 3

7、偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 (三)交換網(wǎng)絡(luò)監(jiān)聽:MAC洪泛攻擊思路:CAM MAC地址交換網(wǎng)絡(luò)監(jiān)聽:MAC洪泛為什么MAC洪泛攻擊會成功?難道交換機不能根據(jù)自己的端口數(shù)來固定CAM表的長度嗎? CAM MAC地址 端口 MAC1 1 MAC2 2 MAC3 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 偽造MAC 3 交換網(wǎng)絡(luò)監(jiān)聽:MAC洪泛為什么MAC洪泛攻擊會成功?難道交換(三)交換網(wǎng)絡(luò)監(jiān)聽:MAC洪泛問題:網(wǎng)絡(luò)速度明顯降低;目前許多交換機具有MAC洪泛免疫功能。(三)交換網(wǎng)絡(luò)監(jiān)聽:M

8、AC洪泛問題:步驟1:攻擊者向主機A和B發(fā)送ARP欺騙報文(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 的MAC地址是11:22:33:44:55:CC的MAC地址是11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:AA 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:BB 11:22:33:44:55:CC步驟1:攻擊者向主機A和B發(fā)送ARP欺騙報文

9、(四)交換網(wǎng)絡(luò)監(jiān)(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC步驟2:攻擊者從網(wǎng)絡(luò)接口上嗅探受害主機發(fā)過來的數(shù)據(jù)幀(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:10.10(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 11:22:33:44:55:CC IP地址 MAC地址 11:22:33

10、:44:55:RR 11:22:33:44:55:CC 11:22:33:44:55:CC IP地址 MAC地址 11:22:33:44:55:RR 11:22:33:44:55:CC步驟3:攻擊者將嗅探到的數(shù)據(jù)發(fā)送回原本應(yīng)該接收的主機(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:10.10(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙需要監(jiān)聽的通信雙方主機不在一個局域網(wǎng)內(nèi)?需要監(jiān)聽主機與外界網(wǎng)絡(luò)之間的通信?(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙需要監(jiān)聽的通信雙方主機不在一個(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 路由器或網(wǎng)關(guān)是內(nèi)網(wǎng)與外網(wǎng)之間報文轉(zhuǎn)發(fā)的必經(jīng)節(jié)點寫出使用ARP欺騙的方法

11、監(jiān)聽局域網(wǎng)與外網(wǎng)之間通信的的詳細步驟。課后思考題:(四)交換網(wǎng)絡(luò)監(jiān)聽:ARP欺騙交換機 內(nèi)網(wǎng)外網(wǎng)A:10.10目標主機的IP為22,它的網(wǎng)關(guān)IP地址為,網(wǎng)關(guān)MAC地址為00-e8-4c-68-17-8b網(wǎng)關(guān)欺騙ARP目標主機的IP為22,它的網(wǎng)關(guān)IP地攻擊主機的IP地址為48,MAC地址為00-0c-29-6c-22-04,在運行攻擊程序arpspoof.py之前,還需要開啟對網(wǎng)關(guān)和目標IP地址的流量轉(zhuǎn)發(fā)功能,在終端輸入“echo 1 /proc/sys/net/ipv4/ip_forward”命令,然后運行上述攻擊程序(需要root權(quán)限)后即可發(fā)起對目標主機的ARP欺騙攻擊網(wǎng)關(guān)欺騙ARP攻擊

12、主機的IP地址為48,MAC地址攻擊主機發(fā)起ARP攻擊后,目標主機的網(wǎng)關(guān)MAC地址已經(jīng)被修改成攻擊主機的MAC地址,目標主機的流量被攻擊主機成功劫持網(wǎng)關(guān)欺騙ARP攻擊主機發(fā)起ARP攻擊后,目標主機的網(wǎng)關(guān)MAC地址已經(jīng)被修改從圖中可以看出,目標主機訪問了2 () 網(wǎng)站的web服務(wù)網(wǎng)關(guān)欺騙ARP從圖中可以看出,目標主機訪問了2 攻擊停止后,目標主機的網(wǎng)關(guān)MAC地址恢復正常網(wǎng)關(guān)欺騙ARP攻擊停止后,目標主機的網(wǎng)關(guān)MAC地址恢復正常網(wǎng)關(guān)欺騙ARP(五)交換網(wǎng)絡(luò)監(jiān)聽:端口盜用交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 步驟1:發(fā)送偽造以太網(wǎng)幀:源MAC為受害者的MAC;目的MAC為攻擊者的MAC。1 2 3

13、 4 11:22:33:44:55:BB 2 MAC地址 端口 11:22:33:44:55:CC 3 11:22:33:44:55:RR 4 11:22:33:44:55:AA 1 我的源MAC是A的MAC,目的MAC是C的MAC 11:22:33:44:55:AA 3 (五)交換網(wǎng)絡(luò)監(jiān)聽:端口盜用交換機 內(nèi)網(wǎng)外網(wǎng)A:10.10.(五)交換網(wǎng)絡(luò)監(jiān)聽:端口盜用交換機 內(nèi)網(wǎng)外網(wǎng)A:B:C:路由器R: 步驟2:受害主機將數(shù)據(jù)幀發(fā)送給攻擊者,攻擊者從網(wǎng)絡(luò)接口嗅探數(shù)據(jù)。1 2 3 4 11:22:33:44:55:BB 2 MAC地址 端口 11:22:33:44:55:CC 3 11:22:33:4

14、4:55:AA 3 11:22:33:44:55:RR 4 問題:攻擊者怎么把嗅探數(shù)據(jù)發(fā)還給受害主機? 步驟3:攻擊者將數(shù)據(jù)緩存,讓網(wǎng)絡(luò)正常后,再將數(shù)據(jù)轉(zhuǎn)交。然后再開始新一輪的攻擊。(五)交換網(wǎng)絡(luò)監(jiān)聽:端口盜用交換機 內(nèi)網(wǎng)外網(wǎng)A:10.10.33交換網(wǎng)絡(luò)監(jiān)聽小結(jié)網(wǎng)絡(luò)管理員交換機+集線器端口鏡像黑客MAC洪泛ARP欺騙端口盜用33交換網(wǎng)絡(luò)監(jiān)聽小結(jié)網(wǎng)絡(luò)管理員二、DHCP欺騙二、DHCP欺騙DHCP(Dynamic Host Configuration Protocol,動態(tài)主機配置協(xié)議)通常被應(yīng)用在大型的局域網(wǎng)絡(luò)環(huán)境中,主要作用是集中的管理、分配IP地址,使網(wǎng)絡(luò)環(huán)境中的主機動態(tài)地獲得IP地址、Ga

15、teway地址、DNS服務(wù)器地址等信息,并能夠提升地址的使用率。DHCP基本原理DHCP(Dynamic Host ConfiguratioDHCP基本原理DHCP基本原理DHCP欺騙DHCP欺騙三、DNS劫持三、DNS劫持在因特網(wǎng)中,域名解析系統(tǒng)(DNS)負責將域名(Domain Name)解析成 IP 地址。同ARP協(xié)議一樣,DNS同樣可以被黑客利用來進行網(wǎng)絡(luò)流量竊取。DNS在因特網(wǎng)中,域名解析系統(tǒng)(DNS)負責將域名(Domain 攻擊者還可以通過社會工程學等手段獲得域名管理密碼和域名管理郵箱,然后將指定域名的DNS紀錄指向到黑客可以控制的DNS服務(wù)器,進而通過在該DNS服務(wù)器上添加相應(yīng)

16、域名紀錄,從而使網(wǎng)民訪問該域名時,進入了黑客所指向的主機。DNS攻擊攻擊者還可以通過社會工程學等手段獲得域名管理密碼和域名管理郵DNS緩存投毒:控制DNS緩存服務(wù)器,把原本準備訪問某網(wǎng)站的用戶在不知不覺中帶到黑客指向的其他網(wǎng)站上。其實現(xiàn)方式有多種,比如可以通過利用網(wǎng)民ISP端的DNS緩存服務(wù)器的漏洞進行攻擊或控制,從而改變該ISP內(nèi)的用戶訪問域名的響應(yīng)結(jié)果;或者通過利用用戶權(quán)威域名服務(wù)器上的漏洞,如當用戶權(quán)威域名服務(wù)器同時可以被當作緩存服務(wù)器使用,黑客可以實現(xiàn)緩存投毒,將錯誤的域名紀錄存入緩存中,從而使所有使用該緩存服務(wù)器的用戶得到錯誤的DNS解析結(jié)果。DNS攻擊DNS緩存投毒:控制DNS緩存

17、服務(wù)器,把原本準備訪問某網(wǎng)站的DNS劫持DNS劫持CDN入侵 CDN入侵 四、Wi-Fi 流量劫持四、Wi-Fi 流量劫持Wi-Fi 熱點Wi-Fi 熱點Wi-Fi 熱點釣魚Wi-Fi 熱點釣魚Wi-Fi 強制斷線Wi-Fi 強制斷線內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)絡(luò)監(jiān)聽防御內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)一、網(wǎng)卡的工作原理一、網(wǎng)卡的工作原理MAC地址網(wǎng)卡地址MAC地址網(wǎng)卡地址網(wǎng)卡工作方式單播(Unicast):網(wǎng)卡在工作時接收目的地址是本機硬件地址的數(shù)據(jù)幀;廣播(Broadcast):接收所有類型為廣播報文的數(shù)據(jù)幀;多播(Multica

18、st):接收特定的組播報混雜模式(Promiscuous):是指對報文中的目的硬件地址不加任何檢查,全部接收的工作模式。網(wǎng)卡工作方式單播(Unicast):網(wǎng)卡在工作時接收目的地址網(wǎng)卡的處理流程網(wǎng)卡的處理流程二、數(shù)據(jù)采集二、數(shù)據(jù)采集以太網(wǎng)的廣播方式發(fā)送B向 D發(fā)送數(shù)據(jù) C D A E不接受 不接受 不接受 接受 B只有 D 接受B 發(fā)送的數(shù)據(jù) 物理層 數(shù)據(jù)鏈路層 網(wǎng)絡(luò)層 傳輸層 應(yīng)用層 網(wǎng)卡 網(wǎng)卡 物理層 數(shù)據(jù)鏈路層 網(wǎng)絡(luò)層 傳輸層 應(yīng)用層 網(wǎng)卡是否工作在混雜模式?廣播特性的總線實現(xiàn)了一對一的通信以太網(wǎng)的廣播方式發(fā)送B向 D C D A Libpcap(Libaray for Packet C

19、apture),即分組捕獲函數(shù)庫,是由勞倫斯伯克利國家實驗室開發(fā)的一個在用戶級進行實時分組捕獲的接口,其特點是獨立于操作系統(tǒng)。Libpcap的Windows版本,稱為Winpcap目前的Libpcap已成為開發(fā)跨平臺的分組捕獲和網(wǎng)絡(luò)監(jiān)視軟件的首選工具。LibpcapLibpcap(Libaray for Packet CapLibpcapLibpcap三、協(xié)議分析三、協(xié)議分析協(xié)議分析協(xié)議分析內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)絡(luò)監(jiān)聽防御內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)WiresharkWiresharkWiresharkWiresharkWi

20、resharkWireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wireshark案例:Cain Wire

21、shark案例:Cain Wireshark內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)絡(luò)監(jiān)聽防御內(nèi)容提綱2流量劫持3數(shù)據(jù)采集4網(wǎng)絡(luò)監(jiān)聽概述1網(wǎng)絡(luò)監(jiān)聽工具5網(wǎng)如何發(fā)現(xiàn)Sniffer通過下面的方法可以分析出網(wǎng)絡(luò)上是否存在Sniffer:構(gòu)造特殊的報文,根據(jù)目標主機的反映判斷其網(wǎng)卡是否處于混雜模式。往網(wǎng)上發(fā)大量包含著不存在的物理地址的包 ,由于監(jiān)聽程序?qū)⑻幚磉@些包,將導致性能下降,通過比較前后該機器性能(ICMP echo delay等方法)加以判斷。如何發(fā)現(xiàn)Sniffer通過下面的方法可以分析出網(wǎng)絡(luò)上是否存在如何發(fā)現(xiàn)Sniffer使用Anti-Sniffer、promisc、cm

22、p等工具,發(fā)現(xiàn)大型網(wǎng)絡(luò)上的Sniffer 。測試網(wǎng)絡(luò)接口有無被設(shè)置成混雜模式,因為雖然在非混雜模式下可以運行Sniffer,但只有在混雜模式下才可以捕獲共享網(wǎng)絡(luò)中的所有會話。對于SunOS、Linux和BSD Unix可以采用命令: ifconfig -a如何發(fā)現(xiàn)Sniffer使用Anti-Sniffer、promSniffer的防范規(guī)劃網(wǎng)絡(luò): 一般將網(wǎng)絡(luò)分段劃分得越細,Sniffer收集到的信息越少。采用加密通信: 加密后,即使Sniffer捕獲了數(shù)據(jù),也難于獲得數(shù)據(jù)的原文。目前比較流行的做法是使用SSL協(xié)議和SSH安全產(chǎn)品。Sniffer的防范規(guī)劃網(wǎng)絡(luò): 一般將網(wǎng)絡(luò)分段劃分得越細,SSni

23、ffer的防范要想防止對WLAN的監(jiān)聽攻擊,可以啟用一些安全策略,考慮采用無線VPN產(chǎn)品增強認證和加密功能。對于主動監(jiān)聽工具,簡單地采用交換機來防止監(jiān)聽已經(jīng)不夠了。要防止ARP緩存改寫,必須對敏感網(wǎng)絡(luò)中所有主機的ARP緩存表進行硬編碼,這些主機包括在線網(wǎng)站、DNS和Mail服務(wù)器、防火墻和DMZ路由器等。另外還應(yīng)該用Ipsec、VPN和其它的加密技術(shù)來保護敏感信息Sniffer的防范要想防止對WLAN的監(jiān)聽攻擊,可以啟用一網(wǎng)絡(luò)監(jiān)聽的難點是什么?小結(jié)網(wǎng)絡(luò)監(jiān)聽的難點是什么?小結(jié)作業(yè)8-1 寫出使用ARP欺騙的方法監(jiān)聽局域網(wǎng)與外網(wǎng)之間通信的步驟8-2 對交換機使用MAC洪泛攻擊,為什么會使得交換機以

24、類似于集線器的模式工作,向所有端口轉(zhuǎn)發(fā)數(shù)據(jù)?8-3 你認為使用端口盜用的方法對交換網(wǎng)絡(luò)實施監(jiān)聽,最需要克服的技術(shù)難題是什么?作業(yè)8-1 寫出使用ARP欺騙的方法監(jiān)聽局域網(wǎng)與外網(wǎng)之間通信第 九 章 緩沖區(qū)溢出攻擊第 九 章 緩沖區(qū)溢出攻擊基礎(chǔ)知識回顧什么是程序?程序是指令的集合,告訴計算機如何完成指定的任務(wù)。程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)什么是進程?可并發(fā)執(zhí)行的程序在一個數(shù)據(jù)集合上的運行過程。動態(tài)性;并發(fā)性;獨立性;異步性;結(jié)構(gòu)特征(程序段、數(shù)據(jù)段及進程控制塊)基礎(chǔ)知識回顧什么是程序?內(nèi)容提要緩沖區(qū)溢出概述1緩沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類型3緩沖區(qū)溢出攻擊防御措施4內(nèi)容提要緩沖區(qū)溢出概述1緩

25、沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類概念緩沖區(qū):用戶為程序運行時在計算機中申請得的一段連續(xù)的內(nèi)存,它保存了給定類型的數(shù)據(jù)。緩沖區(qū)溢出:計算機程序向緩沖區(qū)內(nèi)填充的數(shù)據(jù)位數(shù)超過了緩沖區(qū)本身的容量,溢出的數(shù)據(jù)覆蓋在合法數(shù)據(jù)上。緩沖區(qū)溢出攻擊:(一般情況下,緩沖區(qū)溢出引起程序運行錯誤,但是在攻擊者的設(shè)計下)向程序的緩沖區(qū)寫入超出其長度的內(nèi)容,造成緩沖區(qū)的溢出,從而破壞程序的堆棧,使程序轉(zhuǎn)而執(zhí)行其他的指令,以達到攻擊的目的。概念緩沖區(qū):用戶為程序運行時在計算機中申請得的一段連續(xù)的內(nèi)存緩沖區(qū)溢出的根源溢出的根源在于編程:如果緩沖區(qū)被寫滿,而程序沒有去檢查緩沖區(qū)邊界,也沒有停止接收數(shù)據(jù),這時緩沖區(qū)溢出就會發(fā)生

26、。Unix和MS Windows系統(tǒng)由于要實現(xiàn)更好的性能和功能,往往在數(shù)據(jù)段中動態(tài)地放入可執(zhí)行的代碼。C/C+語言問題:對數(shù)組下標訪問邊界不做檢查或者少做檢查。程序員的編程習慣:忽略對輸入數(shù)據(jù)進行嚴格的邊界檢查。緩沖區(qū)溢出的根源溢出的根源在于編程:如果緩沖區(qū)被寫滿,而程序發(fā)展歷史1988年,Morris蠕蟲攻擊VAX 和 Sun機器,使當時Internet的大約10%崩潰。1996年,Elias Levy發(fā)表文章“Smashing the stack for fun and profit”,顯示了很多程序都存在緩沖區(qū)溢出的危險。緩沖區(qū)溢出攻擊被廣泛關(guān)注。1999年,Dark spyrit AK

27、A Barnaby jack提出使用系統(tǒng)核心dll中的“jmp esp”指令完成shellcode跳轉(zhuǎn)的想法,開創(chuàng)了Win32平臺下緩沖區(qū)溢出的新思路,大量windows平臺下緩沖區(qū)溢出漏洞被利用。2001年8月,“紅色代碼”利用微軟IIS漏洞產(chǎn)生緩沖區(qū)存溢出,成為攻擊企業(yè)網(wǎng)絡(luò)的“罪魁禍首”。 2003年1月,Slammer蠕蟲利用微軟SQL漏洞產(chǎn)生緩沖區(qū)溢出對全球互聯(lián)網(wǎng)產(chǎn)生沖擊。同年,“沖擊波”蠕蟲病毒利用微軟RPC遠程調(diào)用存在的緩沖區(qū)漏洞對Windows 2000/XP、Windows Server 2003進行攻擊,波及全球網(wǎng)絡(luò)系統(tǒng)。發(fā)展歷史1988年,Morris蠕蟲攻擊VAX 和 S

28、un機發(fā)展歷史2004年5月爆發(fā)的“振蕩波”利用了Windows系統(tǒng)的活動目錄服務(wù)緩沖區(qū)溢出漏洞。2005年8月利用Windows即插即用緩沖區(qū)溢出漏洞的“狙擊波”被稱為歷史上最快利用微軟漏洞進行攻擊的惡意代碼。2008年底至2009年的Conficker蠕蟲利用的是Windows處理遠程RPC請求時的漏洞(MS08-067) 。發(fā)展歷史2004年5月爆發(fā)的“振蕩波”利用了Windows系危害性和普遍性緩沖區(qū)溢出漏洞可以使一個匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權(quán)。緩沖區(qū)溢出攻擊占了遠程網(wǎng)絡(luò)攻擊的絕大多數(shù),操作系統(tǒng)中超過50%的安全漏洞都是由內(nèi)存溢出引起的。 任何平臺

29、、任何程序都可能存在緩沖區(qū)溢出的漏洞。1998年Lincoln實驗室用來評估入侵檢測的的5種遠程攻擊中,有2種是緩沖區(qū)溢出。而在1998年CERT的13份建議中,有9份是是與緩沖區(qū)溢出有關(guān)的,在1999年,至少有半數(shù)的建議是和緩沖區(qū)溢出有關(guān)的。危害性和普遍性緩沖區(qū)溢出漏洞可以使一個匿名的InternetBuffer Overflow普遍性1999年,CERT安全建議中50%以上同它有關(guān)。嚴重性獲得系統(tǒng)最高權(quán)限。沒有有效預防措施C語言問題程序員編程習慣,安全意識薄弱Buffer Overflow普遍性1999年,CERT安安全漏洞數(shù)量(CERT)安全漏洞數(shù)量(CERT)內(nèi)容提要緩沖區(qū)溢出概述1緩

30、沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類型3緩沖區(qū)溢出攻擊防御措施4內(nèi)容提要緩沖區(qū)溢出概述1緩沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類三種內(nèi)存分配模式(1)靜態(tài)分配:在進程創(chuàng)建時由系統(tǒng)一次性分配的整塊靜態(tài)內(nèi)存,這塊空間在進程運行期間保持不變。包括:正文( TEXT)段:指令數(shù)據(jù)( DATA)段:初始化的全局靜態(tài)數(shù)據(jù)BSS段:未初始化的全局數(shù)據(jù)棧空間三種內(nèi)存分配模式(1)靜態(tài)分配:在進程創(chuàng)建時由系統(tǒng)一次性分配三種內(nèi)存分配模式(2)棧(Stack)分配:調(diào)用程序的地址信息,函數(shù)參數(shù)的內(nèi)存分配。整個棧空間已在進程創(chuàng)建時分配好。進程剛啟動時,??臻g是空的,里面沒有實體。 在進程運行期間,對具體實體的棧分配是進程自

31、行生成(壓棧)和釋放(彈出)實體,系統(tǒng)并不參與。 只要壓入的實體的總長度不超過??臻g尺寸,棧分配就與系統(tǒng)無關(guān)。如果超過了,就會引發(fā)棧溢出錯誤。三種內(nèi)存分配模式(2)棧(Stack)分配:調(diào)用程序的地址信三種內(nèi)存分配模式(3)堆(Heap)分配:當進程需要生成實體時,向系統(tǒng)申請分配空間;不再需要該實體時,可以向系統(tǒng)申請回收這塊空間。堆分配使用特定的函數(shù):malloc();new()。 堆分配的空間利用率最高。三種內(nèi)存分配模式(3)堆(Heap)分配:當進程需要生成實體三種內(nèi)存分配模式比較靜態(tài)分配 棧分配 堆分配 空間的生成 進程創(chuàng)建時進程創(chuàng)建時用一點分配一點 實體生成時間 進程創(chuàng)建時 進程運行時

32、 進程運行時 實體生成者 操作系統(tǒng) 進程 進程申請/系統(tǒng)實施 生命期 永久 臨時 完全可控 訪問方式標識標識指針三種內(nèi)存分配模式比較靜態(tài)分配 棧分配 堆分配 空間的生成 進內(nèi)存布局不同區(qū)域: 堆棧保存調(diào)用程序的地址信息,所需要的變量,其它幀指針等: HEAP動態(tài)內(nèi)存分配,本地變量: BSS符號塊起始地址 :未初始化全局數(shù)據(jù)段,即:int foo; float baz;: DATA初始化全局靜態(tài)數(shù)據(jù),即:int shit=9,char head=”ugh”;: TEXT機器指令 = 操作碼 + 操作數(shù);read-only編譯時分配執(zhí)行時分配內(nèi)存布局不同區(qū)域: 堆棧保存調(diào)用程序的地址信息,所需內(nèi)存

33、布局ArgumentsVariablesenvironmentstackHeapBSSDatatext(code)Adresses hautesAdresses bassesuserstackframe代碼區(qū)數(shù)據(jù)區(qū)棧堆內(nèi)存布局ArgumentsstackHeapBSSDatat一、棧溢出一、棧溢出堆棧堆棧是一種數(shù)據(jù)結(jié)構(gòu)。堆棧中的對象具有一個特性:最后一個放入堆棧中的物體總是被最先拿出來,這個特性通常稱為后進先出(LIFO)隊列。堆棧中兩個最重要的操作是PUSH和POP:PUSH在堆棧的頂部加入一個元素, POP從堆棧頂部移去一個元素, 同時改變堆棧的大小。堆棧堆棧是一種數(shù)據(jù)結(jié)構(gòu)。堆棧中的對象具

34、有一個特性:最后一個放堆棧的相關(guān)概念SP:堆棧指針,指向堆棧的頂部;堆棧的增長方向:向下增長(向內(nèi)存低地址);FP:幀指針,指向堆棧的幀頭。 堆棧的相關(guān)概念SP:堆棧指針,指向堆棧的頂部;棧幀的一般結(jié)構(gòu)棧幀的一般結(jié)構(gòu)函數(shù)調(diào)用過程Func函數(shù)中的局部變量調(diào)用Func函數(shù)前的EBP退出Func函數(shù)后的返回地址傳遞給Func的實參內(nèi)存低地址內(nèi)存高地址最先壓入棧最后壓入棧函數(shù)調(diào)用過程Func函數(shù)中的局部變量調(diào)用Func函數(shù)前的EB函數(shù)調(diào)用的棧幀變化假設(shè)過程P調(diào)用過程Q:Q的參數(shù)放在P的棧幀中;當P調(diào)用Q時,P中的返回地址被壓入棧中,形成P的棧幀的末尾;返回地址就是當程序從Q返回時應(yīng)繼續(xù)執(zhí)行的地方;Q的

35、棧幀從保存的幀指針的值開始,后面是保存的其他寄存器的值。函數(shù)調(diào)用的棧幀變化假設(shè)過程P調(diào)用過程Q:假設(shè)有一個程序,其函數(shù)調(diào)用順序如下: main() - func_1() - func_2() - func_3() 棧布局假設(shè)有一個程序,其函數(shù)調(diào)用順序如下: 棧布局函數(shù)調(diào)用例子void function(int a, int b, int c) char buffer15;char buffer210;void main() function(1,2,3);函數(shù)調(diào)用例子void function(int a, int函數(shù)調(diào)用過程按c、b、a的順序?qū)?shù)壓棧;把指令指針(IP)壓棧,IP也稱為返回

36、地址(RET);把FP壓棧,被保存的FP稱為SFP;將當前的SP復制到FP,成為新的幀指針;將SP的值減小,為局部變量保留空間。函數(shù)調(diào)用過程按c、b、a的順序?qū)?shù)壓棧;堆棧圖buffer1cbaretsfpbuffer2堆棧頂部(內(nèi)存低端)堆棧底部(內(nèi)存高端)堆棧圖buffer1cbaretsfpbuffer2堆棧頂部緩沖區(qū)溢出攻擊的原理攻擊的原理:通過往程序緩沖區(qū)寫入超過其邊界的內(nèi)容,造成緩沖區(qū)溢出,使得程序轉(zhuǎn)而執(zhí)行攻擊者指定的代碼,通常是為攻擊者打開遠程連接的ShellCode。關(guān)鍵點:存在能夠被攻擊的數(shù)據(jù)結(jié)構(gòu)要有被執(zhí)行的攻擊代碼緩沖區(qū)溢出攻擊的原理攻擊的原理:通過往程序緩沖區(qū)寫入超過其

37、邊緩沖區(qū)溢出代碼/ 函數(shù)定義void function(char *str) char buffer16;strcpy(buffer,str);/ 主函數(shù)void main() char large_string256;int i;for( i = 0; i 1) copy(argv1);活動記錄示意代碼copy(char* msg)活動記錄棧幀示意圖buffer0buffer511previous fpReturn addressargv1spfpattackcodeStack growthMemory growth活動記錄棧幀示意圖buffer0previous fpR3、函數(shù)指針(Fun

38、ction Pointers )函數(shù)指針可以用來定位任何地址空間。例如:“void (* foo)()”聲明了一個返回值為void的函數(shù)指針變量foo。攻擊者只需在任何空間內(nèi)的函數(shù)指針附近找到一個能夠溢出的緩沖區(qū),然后溢出這個緩沖區(qū)來改變函數(shù)指針。在某一時刻,當程序通過函數(shù)指針調(diào)用函數(shù)時,程序的流程就按攻擊者的意圖實現(xiàn)了。3、函數(shù)指針(Function Pointers )函數(shù)指針用函數(shù)指針控制程序流程圖示用函數(shù)指針控制程序流程圖示函數(shù)指針示意代碼int good (const char* str) copy(char* msg) int (*fptr)(const char* str); c

39、har buffer512; fptr=(int(*)(const char* str)good; strcpy(buffer,msg); (void)(*fptr)(buffer);main(int argc, char* argv)if(argc1)copy(argv1);函數(shù)指針示意代碼int good (const char* 函數(shù)指針棧幀示意圖buffer0buffer511fptrprevious fpReturn addressargv1spfpattackcodeStack growthMemory growth函數(shù)指針棧幀示意圖buffer0fptrprevious4、長跳轉(zhuǎn)

40、緩沖區(qū) (Longjmp buffers )在C語言中包含了一個簡單的檢驗/恢復系統(tǒng),稱為“setjmp/longjmp”,意思是在檢驗點設(shè)定“setjmp”,用longjmp“來恢復檢驗點。如果攻擊時能夠進入緩沖區(qū)的空間,那么“l(fā)ongjmp”實際上是跳轉(zhuǎn)到攻擊者的代碼。像函數(shù)指針一樣,longjmp緩沖區(qū)能夠指向任何地方,所以攻擊者所要做的就是找到一個可供溢出的緩沖區(qū)。一個典型的例子就是Perl 5.003,攻擊者首先進入用來恢復緩沖區(qū)溢出的longjmp緩沖區(qū),然后誘導進入恢復模式,這樣就使Perl的解釋器跳轉(zhuǎn)到攻擊代碼上了。4、長跳轉(zhuǎn)緩沖區(qū) (Longjmp buffers )在C語二

41、、堆溢出二、堆溢出堆溢出當我們需要較大的緩沖區(qū)或在寫代碼時不知道包含在緩沖區(qū)中對象的大小,常常要使用堆。 堆溢出的工作方式幾乎與棧溢出的工作方式完全相同,唯一不同的是,堆沒有壓棧和入棧操作,而是分配和回收內(nèi)存。C語言中使用malloc()和free()函數(shù)實現(xiàn)內(nèi)存的動態(tài)分配和回收,C+語言使用new()和delete()函數(shù)來實現(xiàn)相同的功能。 堆溢出當我們需要較大的緩沖區(qū)或在寫代碼時不知道包含在緩沖區(qū)中堆溢出實例# include # include # include # include # define BUFFER-SIZE 16# define OVERLAYSIZE 8 /* 我們將

42、覆蓋buf2 的前OVERLAYSIZE 個字節(jié) */int main()u-long diff ;char * buf1 = (char * )malloc (BUFFER-SIZE) ;char * buf2 = (char * )malloc (BUFFER-SIZE) ;diff = (u-long) buf2 - (u-long) buf1 ;printf (buf1 = %p , buf2 = %p , diff = 0 x %x ( %d) bytes n, buf1 , buf2 , diff , diff) ;/* 將buf2 用a填充 */memset (buf2 , a,

43、 BUFFER-SIZE - 1) , buf2BUFFER-SIZE - 1 = 0;printf (before overflow: buf2 = %s n, buf2) ;/* 用diff + OVERLAYSIZE 個b填充buf1 */memset (buf1 , b, (u-int) (diff + OVERLAYSIZE) ) ;printf (after overflow: buf2 = %s n, buf2) ;return 0 ; 堆溢出實例# include 堆溢出實例運行結(jié)果: / users/ test 41 % . / heap1 buf1 = 0 x8049858

44、 , buf2 = 0 x8049870 , diff = 0 x18 (24) bytes before overflow: buf2 = aaaaaaaaaaaaaaa after overflow: buf2 = bbbbbbbbaaaaaaa我們看到,buf2的前八個字節(jié)被覆蓋了,這是因為往buf1中填寫的數(shù)據(jù)超出了它的邊界進入了buf2的范圍。由于buf2的數(shù)據(jù)仍然在有效的Heap區(qū)內(nèi),程序仍然可以正常結(jié)束。 堆溢出實例運行結(jié)果:堆溢出實例雖然buf1和buf2是相繼分配的,但它們并不是緊挨著的,而是有八個字節(jié)的間距。這是因為,使用malloc()動態(tài)分配內(nèi)存時,系統(tǒng)向用戶返回一個內(nèi)

45、存地址,實際上在這個地址前面通常還有8字節(jié)的內(nèi)部結(jié)構(gòu),用來記錄分配的塊長度、上一個堆的字節(jié)數(shù)以及一些標志等。這個間距可能隨不同的系統(tǒng)環(huán)境而不同。buf1溢出后,buf2的前8字節(jié)也被改寫為bbbbbbbb,buf2內(nèi)部的部分內(nèi)容也被修改為b。 堆溢出實例雖然buf1和buf2是相繼分配的,但它們并不是緊堆溢出實例示意圖:堆溢出實例示意圖:堆溢出堆溢出不如棧溢出流行,原因在于比棧溢出難度更大需要結(jié)合其他的技術(shù)對于內(nèi)存中變量的組織方式有一定的要求堆溢出堆溢出不如棧溢出流行,原因在于三、BSS段溢出三、BSS段溢出BSS溢出.bss段存放全局和靜態(tài)的未初始化變量,其分配比較簡單,變量與變量之間是連續(xù)

46、存放的,沒有保留空間。下面這樣定義的兩個字符數(shù)組即是位于BSS段: static char buf116,buf216;如果事先向buf2中寫入16個字符A,之后再往buf1中寫入24個B,由于變量之間是連續(xù)存放的,靜態(tài)字符數(shù)組buf1溢出后,就會覆蓋其相鄰區(qū)域字符數(shù)組buf2的值。利用這一點,攻擊者可以通過改寫B(tài)SS中的指針或函數(shù)指針等方式,改變程序原先的執(zhí)行流程,使指針跳轉(zhuǎn)到特定的內(nèi)存地址并執(zhí)行指定操作。 BSS溢出.bss段存放全局和靜態(tài)的未初始化變量,其分配比較四、格式化字符串溢出四、格式化字符串溢出格式化串溢出與前面三種溢出不同的是,這種溢出漏洞是利用了編程語言自身存在的安全問題。格

47、式化串溢出源自*printf()類函數(shù)的參數(shù)格式問題(如printf、fprintf、sprintf等)。int printf (const char *format, arg1, arg2, ); 它們將根據(jù)format的內(nèi)容(%s,%d,%p,%x,%n,),將數(shù)據(jù)格式化后輸出。問題在于:*printf()函數(shù)并不能確定數(shù)據(jù)參數(shù)arg1,arg2,究竟在什么地方結(jié)束,即函數(shù)本身不知道參數(shù)的個數(shù),而只會根據(jù)format中打印格式的數(shù)目依次打印堆棧中參數(shù)format后面地址的內(nèi)容。 格式化串溢出與前面三種溢出不同的是,這種溢出漏洞是利用了編程格式化串溢出實例/*程序說明:%#x:按16進制輸出

48、,并在前面加上0 x%.20d:按10進制輸出,輸出20位,并在前面補0%n:將顯示內(nèi)容的長度輸出到一個變量中去*/# include main()int num= 0 x61616161 ;printf (Before : num = %#x n, num) ;printf (%.20d %n n, num, &num) ;printf (After : num = %#x n, num) ; 格式化串溢出實例/*程序說明:格式化串溢出實例當程序執(zhí)行第二個printf語句時,參數(shù)壓棧之后的內(nèi)存布局如下:格式化串溢出實例當程序執(zhí)行第二個printf語句時,參數(shù)壓棧格式化串溢出實例根據(jù)C函數(shù)調(diào)用

49、約定,參數(shù)從右向左依次壓棧,所以參數(shù)&num比參數(shù)num先壓入棧中。也就是說,程序中將&num (num的地址)壓入棧作為printf()的第三個參數(shù),而使用打印格式%n會將打印總長度保存到對應(yīng)參數(shù)(&num)的地址中去,從而改變了num的值。 整個程序的輸出結(jié)果為: Before : num = 0 x61616161 00000000001633771873 After : num = 0 x14變量num的值已經(jīng)變成了0 x14(20)。格式化串溢出實例根據(jù)C函數(shù)調(diào)用約定,參數(shù)從右向左依次壓棧,所格式化串溢出實例如果將第二個printf語句修改為: printf (%.20d %n n,

50、 num) ; /注意,這里沒有壓num的地址入棧 則運行的結(jié)果為: Before : num= 0 x61616161 Segmentation fault (core dumped) /執(zhí)行第二個printf()時發(fā)生段錯誤了原因:printf()將堆棧中main()函數(shù)的變量num當作了%n所對應(yīng)的參數(shù),因此會將0 x14保存到地址0 x61616161中去,而0 x61616161是不能訪問的地址,因此系統(tǒng)提示發(fā)生段錯誤。如果可以控制num的內(nèi)容,那么就意味著可以修改任意地址(當然是允許寫入的地址)的內(nèi)容。格式化串溢出實例如果將第二個printf語句修改為:格式化串溢出在實際應(yīng)用中,如

51、果遇到脆弱的程序,將用戶的輸入錯誤地放在格式化串的位置,就會造成緩沖區(qū)溢出的攻擊。如果攻擊者可以事先構(gòu)造好可以攻擊的代碼shellcode,如果可以將返回地址覆蓋成shellcode的起始地址,當緩沖區(qū)溢出發(fā)生后,程序就會跳到精心設(shè)計好的shellcode處執(zhí)行,達到攻擊的目的。 格式化串溢出在實際應(yīng)用中,如果遇到脆弱的程序,將用戶的輸入錯內(nèi)容提要緩沖區(qū)溢出概述1緩沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類型3緩沖區(qū)溢出攻擊防御措施4內(nèi)容提要緩沖區(qū)溢出概述1緩沖區(qū)溢出攻擊原理2緩沖區(qū)溢出攻擊類防御策略系統(tǒng)管理上的防御策略關(guān)閉不需要的特權(quán)程序及時給程序漏洞打補丁程序開發(fā)中的防御策略編寫正確的代碼非執(zhí)行的

52、緩沖區(qū)數(shù)組邊界檢查程序指針完整性檢查其它方法防御策略系統(tǒng)管理上的防御策略1、關(guān)閉不需要的特權(quán)程序緩沖區(qū)溢出只有在獲得更高的特權(quán)時才有意義;關(guān)閉一些不必要的特權(quán)程序就可以降低被攻擊的風險。如Solaris下的fdformat是個有緩沖區(qū)溢出漏洞的suid程序。1、關(guān)閉不需要的特權(quán)程序緩沖區(qū)溢出只有在獲得更高的特權(quán)時才有2、及時給程序漏洞打補丁大部分的入侵是利用一些已被公布的漏洞達成的;如能及時補上這些漏洞,無疑極大的增強了系統(tǒng)抵抗攻擊的能力。2、及時給程序漏洞打補丁大部分的入侵是利用一些已被公布的漏洞3、編寫正確的代碼在所有拷貝數(shù)據(jù)的地方進行數(shù)據(jù)長度和有效性的檢查,確保目標緩沖區(qū)中數(shù)據(jù)不越界并有

53、效;很多不安全程序的出現(xiàn)是由于調(diào)用了一些不安全的庫函數(shù)。這些函數(shù)有strcpy()、sprintf()、strcat()等,用更安全的函數(shù)代替,比如用strncpy()替換strcpy() ;漏洞探測。利用一些工具,人為隨機地產(chǎn)生一些緩沖區(qū)溢出來尋找代碼的安全漏洞。已有這方面的一些高級的查錯工具,如fault injection等。3、編寫正確的代碼在所有拷貝數(shù)據(jù)的地方進行數(shù)據(jù)長度和有效性的4、非執(zhí)行的緩沖區(qū)通過使被攻擊程序的數(shù)據(jù)段地址空間不可執(zhí)行,從而使得攻擊者不可能執(zhí)行被植入被攻擊程序輸入緩沖區(qū)的代碼,這種技術(shù)被稱為非執(zhí)行的緩沖區(qū)技術(shù)。信號傳遞:Linux通過向進程堆棧釋放代碼然后引發(fā)中斷

54、來執(zhí)行在堆棧中的代碼來實現(xiàn)向進程發(fā)送Unix信號。GCC的在線重用:gcc在堆棧區(qū)里放置了可執(zhí)行的代碼作為在線重用之用,關(guān)閉這個功能并不產(chǎn)生任何問題。非執(zhí)行堆棧的保護可以有效地對付把代碼植入自動變量的緩沖區(qū)溢出攻擊,而對于其他形式的攻擊則沒有效果。4、非執(zhí)行的緩沖區(qū)通過使被攻擊程序的數(shù)據(jù)段地址空間不可執(zhí)行,5、數(shù)組邊界檢查數(shù)組邊界檢查能防止所有的緩沖區(qū)溢出的產(chǎn)生和攻擊。方法包括:C的數(shù)組邊界檢查(Jones & Kelly );Compaq C 編譯器(Compaq公司為Alpha CPU開發(fā)的C編譯器支持有限度的邊界檢查 );內(nèi)存存取檢查(Purify 工具):使用“目標代碼插入”技術(shù)來檢查

55、所有的內(nèi)存存??;類型-安全語言:Java,C#等。5、數(shù)組邊界檢查數(shù)組邊界檢查能防止所有的緩沖區(qū)溢出的產(chǎn)生和攻6、指針完整性檢查程序指針完整性檢查:阻止由于函數(shù)返回地址或函數(shù)指針的改變而導致的程序執(zhí)行流程的改變。原理:在每次在程序指針被引用之前先檢測該指針是否已被惡意改動過,如果發(fā)現(xiàn)被改動,程序就拒絕執(zhí)行。因此即使一個攻擊者成功地改變程序的指針,由于系統(tǒng)事先檢測到了指針的改變,因此這個指針不會被使用。三個研究方向:手寫的堆棧檢測、堆棧保護、保護指針。6、指針完整性檢查程序指針完整性檢查:阻止由于函數(shù)返回地址或7、其它防御方法改進標準庫。比如改進C語言函數(shù)庫,對具有緩沖區(qū)溢出攻擊隱患的系統(tǒng)函數(shù)如

56、gets(),sprintf(),strcpy(),strcat(),fscanf(),scanf(),vsprintf()等進行改進,開發(fā)出更安全的封裝了若干已知易受堆棧溢出攻擊的庫函數(shù)。分割控制和數(shù)據(jù)堆棧 :將堆棧分割為兩個堆棧,一個用于存儲控制信息(如返回地址),另一個用于控制其他所有數(shù)據(jù)。使堆棧向高地址增長:使用堆棧壓入數(shù)據(jù)時向高地址方向前進,那么無論緩沖區(qū)如何溢出,都不可能覆蓋低地址處的函數(shù)返回地址指針,也就避免了緩沖區(qū)溢出攻擊。但這種方法仍然無法防范利用堆和靜態(tài)數(shù)據(jù)段的緩沖區(qū)進行溢出的攻擊。 7、其它防御方法改進標準庫。比如改進C語言函數(shù)庫,對具有緩沖緩沖區(qū)溢出的防范策略堆棧(St

57、ack Buffer)堆(Heap Buffer)靜態(tài)數(shù)據(jù)段(Static Buffer)活動記錄堆棧保護非執(zhí)行的緩沖區(qū)堆棧保護堆棧保護函數(shù)指針指針保護非執(zhí)行的緩沖區(qū)指針保護指針保護長跳轉(zhuǎn)緩沖區(qū)指針保護非執(zhí)行的緩沖區(qū)指針保護指針保護其它變量手工的指針保護非執(zhí)行的緩沖區(qū)手工的指針保護手工的指針保護緩沖區(qū)溢出的防范策略堆棧堆靜態(tài)數(shù)據(jù)段活動記錄堆棧保護堆棧保討論對于類型-安全的語言Java, 是不是就不存在緩沖區(qū)溢出的危險?如果要對其進行緩沖區(qū)溢出攻擊,該考慮從什么方面入手?作為Java執(zhí)行平臺的Java虛擬機是C程序,因此通過攻擊JVM的一條途徑是使JVM的緩沖區(qū)溢出。討論對于類型-安全的語言Ja

58、va, 是不是就不存在緩沖區(qū)溢出小結(jié)小結(jié)作業(yè)9-1 簡述緩沖區(qū)溢出攻擊的原理?9-2 在程序開發(fā)過程中,防御緩沖區(qū)溢出需要做哪些工作?作業(yè)9-1 簡述緩沖區(qū)溢出攻擊的原理?第 十 章 Web網(wǎng)站攻擊技術(shù)第 十 章 Web網(wǎng)站攻擊技術(shù)Web應(yīng)用程序體系結(jié)構(gòu)Web客戶端 Web服務(wù)器 Web應(yīng)用程序 Web應(yīng)用程序 Web應(yīng)用程序 傳輸層 數(shù)據(jù)庫 連接器 數(shù)據(jù)庫 連接器 IE, Chrome,Firefox,etc.HTTP/HTTPS請求明文或SSLHTTP響應(yīng)( HTML, JavaScript, etc.) Apache IIS etc. Perl C+ CGI Java ASP PHP e

59、tc. ADO ODBC JDBC etc. Oracle SQL Server etc.Web應(yīng)用程序體系結(jié)構(gòu)WebWebWebWebWeb傳輸層 Web應(yīng)用體系結(jié)構(gòu)潛在弱點Web客戶端:活動內(nèi)容執(zhí)行,客戶端軟件漏洞的利用,交互站點腳本的錯誤;傳輸:偷聽客戶-服務(wù)器通信,SSL重定向;Web服務(wù)器:Web服務(wù)器軟件漏洞;Web應(yīng)用程序:攻擊授權(quán)、認證、站點結(jié)構(gòu)、輸入驗證,以及應(yīng)用程序邏輯;數(shù)據(jù)庫:通過數(shù)據(jù)庫查詢運行優(yōu)先權(quán)命令,查詢操縱返回額外的數(shù)據(jù)集。Web應(yīng)用體系結(jié)構(gòu)潛在弱點Web客戶端:活動內(nèi)容執(zhí)行,客戶端Web應(yīng)用Web Applications: Software applicati

60、ons that interact with users or other applications using HTTP or HTTPSWeb Application Vulnerabilities:Weakness in custom Web Application, architecture, design, configuration, or code.Web應(yīng)用Web Applications: SoftwarWeb應(yīng)用安全的嚴重性在安全漏洞報告中,Web應(yīng)用安全漏洞一直占據(jù)最前列。比如SANS RISK 在2007年8月的安全漏洞報告:SANS RISK Aug 20078/78

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論