???? 博主 libin9iOak帶您 Go to New World.???
?? 個人主頁——libin9iOak的博客??
?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~??
?? 《IDEA開發(fā)秘籍》學會IDEA常用操作,工作效率翻倍~??
???? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請批評指正!????
第三章 網(wǎng)絡攻擊預防與技術
3.1 威脅與攻擊分類
這一節(jié)我們來學習網(wǎng)絡安全威脅與攻擊的分類,安全威脅可以從多個角度來進行分類。首先我們來看,從信息流動的角度,可以分成中段,截取、修改、捏造,從威脅的來源可以分為內部威脅和外部威脅,另外又可以分為自然的威脅和人為的威脅兩類。從攻擊者的行為上來可以分為主動威脅和被動威脅。從威脅的動機上來看的話,可以分成偶發(fā)性的威脅和故意威脅。這題我們來具體看一下,從信息流動的角度,網(wǎng)絡安全攻擊的類型。
這里有一張圖,最上面是正常的信息活動,正常的信息活動,信源發(fā)送一條信息到信速,中間沒有任何的干擾和攻擊的存在。第一種攻擊中斷,很容易理解,就是在中間這個信息的傳輸被阻斷了,到不了這個信速。第二種攻擊是截取新語言,發(fā)送數(shù)據(jù)到迅速過程當中,在中途被攻擊者截獲了復制了一份,這個就攻擊了信息安全的保密性。第三種攻擊修改,這個攻擊者把這個信源發(fā)送的數(shù)據(jù)截獲下來,并且做這個相應的修改,然后再把它發(fā)送給迅速,這個就攻擊了信息安全的這個完整性。第4種是捏造,所謂捏造就是無中生有,性緣本身沒有活動,結果攻擊者冒充信源發(fā)送一個信息給信速。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nQtuukAP-1687880215511)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]
我們剛才提到可以從攻擊者的行為角度,將攻擊分為被動攻擊和主動攻擊。這個分類方式是美國提出的信息保障,技術框架、iat、f當中提出的分類方式,在這個框架當中將網(wǎng)絡攻擊分成了如下的5類,在這個框架當中,除了被動攻擊主動攻擊之外,還有物理臨近攻擊,內部人員攻擊和軟硬件配狀攻擊。
首先我們來看被動攻擊,被動攻擊就是攻擊者非法獲取信息,但不對信息做任何的修改,常見的手段就是搭線監(jiān)聽或者是無線截獲以及其他的截獲方式,或者進一步對信息的內容進行分析或者做這個業(yè)務流分析。這個攻擊是攻擊我們前面講的信息安全基礎屬性,三角形的保密性,因為它不做任何的修改,是一種非授權的訪問信息,這種攻擊方式受害者是難以感知到的,受害者不容易感覺到我的信息傳輸被監(jiān)聽了或者被這個截獲了,所以是不易被發(fā)現(xiàn)的。這種攻擊方式如何來進行防御?重點在于預防,在傳輸之前事先對信息進行一定的處理,比如說加密或者通過虛擬專用網(wǎng) VPN進行傳輸,其實VPN它的主要的作用就是加密。
接下來我們再來看主動攻擊,主動攻擊就是攻擊者,他要去篡改我們傳輸?shù)臄?shù)據(jù)流,或者產生虛假的流,具體的攻擊方式包括假冒,一個實體,假裝成另外一個實體去產生活動去發(fā)送信息。第二種攻擊方式叫做重放,攻擊者截獲一個發(fā)送到目的主機的數(shù)據(jù)包,并且把它重新再發(fā)送給目的主機,從而起到一個欺騙目的主機的這樣一個效果和作用,主要用于身份認證過程,通過這種攻擊可以非法的通過這個認證。這里我們舉一個例子,假設一個用戶要登錄他的郵件服務器,首先它要進行認證,這個認證就需要進行認證的交換,發(fā)送用戶的賬戶名稱然后以及密碼,然后通過賬戶和密碼通過認證,如果有一個攻擊者在這個過程當中把這個認證的數(shù)據(jù)包給截獲了,然后回頭再把這個數(shù)據(jù)包原封不動的再發(fā)給郵件服務器,那這個就是一個存放攻擊。由于攻擊者發(fā)送了這個認證的完整的報文,這個時候它就可以借助這個認證的報文,通過這個郵件服務器的認證,從而起到一個冒充我們郵件用戶的這樣一個效果。
第三種方式是篡改攻擊者非法的改變,延遲或者亂敘一個合法消息,以及這個消息當中的部分。非法改變實際上就是破壞消息的完整性,另外延遲就是把這個消息讓它延遲在發(fā)送。我們知道有些消息它是具有這個時效性的,延遲之后時效性就被破壞了,就起到了一個攻擊的效果。
延遲:消息延遲發(fā)送,破壞時效性。
還有亂序,有些消息可能是由若干個分片組成的,那這個時候如果攻擊者把消息的順序給他打亂了,那這個時候消息他的完整性也受到了破壞,有效性也受到了破壞。
亂序:打亂消息順序,破壞完整性。
還有一種是拒絕服務,拒絕服務就是阻礙信息系統(tǒng)或者其部分設施的正常使用,讓這個系統(tǒng)不能工作了,讓別人沒辦法使用了,攻擊這個可用性。
總結一下就是主動攻擊,攻擊我們前面講的信息安全屬性三角的完整性和可用性,這種攻擊方式我們受害者是容易感知到的,也是容易檢測出來的,但是它是不易有效防止的。
自動審計:針對這種攻擊方式如何來進行防御?第一種方式就是我們進行審計,我們把這個攻擊的活動給記錄下來,以便事后來追究一些責任。
入侵檢測:盡快的及時的把入侵行為檢測出來,以便可以及時的進行響應。
完整性恢復:進行完整性的恢復,因為它可以破壞完整性,我們就可以采用一些措施讓這個信息被篡改之后能夠把它恢復過來。
系統(tǒng)加固:針對拒絕服務,我們可以加固系統(tǒng),提高系統(tǒng)防御水平。
接下來我們簡單看一下內部人員攻擊,內部人員攻擊可以分為惡意的和非惡意的,
惡意攻擊就是我們內部人員蓄謀已久的有計劃的實施竊聽偷竊或者損害信息,或者是拒絕其他授權用戶的訪問,而非惡意攻擊,就是內部人員。由于初心安全意識的缺乏或者知識的缺乏,或者為了完成工作等無意間繞開安全策略,從而對系統(tǒng)產生了破壞的行為。
我們再看一下物理零件攻擊與軟硬件配裝攻擊,物理臨近攻擊就是指攻擊者,它可以物理上面臨近網(wǎng)絡系統(tǒng)或者設備,從而進行未授權的更改或者收集信息,或者進行相應的破壞。軟硬件的配裝攻擊,又稱為分發(fā)攻擊,就是在軟硬件的生產廠商或者在軟硬件的產品分發(fā)過程當中惡意修改硬件或者軟件。
前面我們介紹了網(wǎng)絡安全威脅和攻擊的分類,這里我們再來看網(wǎng)絡安全威脅的分級,國際上有一個等級劃分,將網(wǎng)絡安全威脅分成了ABC三級,c級就是個體的信息犯罪,通常他們是單點攻擊,采用比較簡單的攻擊方法,當然目前也有自動化平臺化的趨勢,總體而言單點攻擊它的攻擊的破壞力有限。第二級 b級是指有組織的分布式的協(xié)同的攻擊,從多點采用多種技術發(fā)動協(xié)同的攻擊,并且相互掩護,危害相對來說更大,難以兌付,往往能夠攻擊一些比較大型的網(wǎng)站,一些大的服務器,a級是最高級戰(zhàn)爭威脅,比如說信息戰(zhàn)爭、網(wǎng)絡戰(zhàn)爭,這種類型它實施更大范圍的攻擊,攻擊的技術也更全面,危害更大,可以采用一切的攻擊手段。我國信息系統(tǒng)的安全等級保護條例,將信息系統(tǒng)的安全等級保護分為了5級,相應的安全威脅也分成了5級,具體如何來劃分,大家可以下來參與一下這個等級保護條例,這里我們就不再詳細的介紹。
3.2 網(wǎng)絡攻擊環(huán)節(jié)
我們來學習一下網(wǎng)絡攻擊的環(huán)節(jié),網(wǎng)絡攻擊設計哪些環(huán)節(jié),天時、地利、人和。孟夫子提出作戰(zhàn)要取得勝利的話,需要天時地利人和。
網(wǎng)絡攻擊同樣一次網(wǎng)絡攻擊要想成功的話,也需要天時地利人和。
天時就是時間,地利就是地點,或者說網(wǎng)絡攻擊的發(fā)起的位置或者覆蓋的位置,人和就是攻擊者他的背景。當然除了天時地利人和之外,還包括攻擊的手段,攻擊的目標。
首先我們來看時間環(huán)節(jié),我們前面講信息安全問題的根源是內憂外患,內憂就是信息系統(tǒng)普遍存在漏洞,信息信息系統(tǒng)的硬件、軟件、網(wǎng)絡、策略人員等等各個環(huán)節(jié)都可能存在漏洞,這些漏洞就為攻擊者、攻擊系統(tǒng)、打開了方便之門。這個信息系統(tǒng)的漏洞它是有生命周期的,通常在系統(tǒng)發(fā)布的時候,這個漏洞就存在了,但是這個時候漏洞還是安全的,因為沒有被發(fā)現(xiàn),隨著時間推移,這個漏洞可能就被發(fā)現(xiàn)了,暴露出來了。暴露了一段時間之后,廠商或者第三方的人員就發(fā)布相應的補丁,然后再等用戶去安裝補丁,把這個漏洞進行修補。這個時候這個漏洞的生命周期就完結了,接下來可能又會有新的漏洞暴露,然后再來新補丁被發(fā)布出來再來安裝。我們就可以看到在漏洞的這個生命周期當中,從漏洞發(fā)現(xiàn)到被安裝上補丁,這么一段時間就是我們漏洞的道路窗口,只有在漏洞的暴露窗口,攻擊者才會有機可乘,所以這段時間就是攻擊窗口,一個漏洞的攻擊窗口越短,我們這個系統(tǒng)就越安全,就越不容易被攻擊者攻擊。
接下來我們再來看地點,地點通常是攻擊者的位置或者說攻擊的范疇,這個入侵和攻擊的范疇可以分為如下幾類,一類是internet,就是攻擊或者說這個攻擊影響的范疇是在我們互聯(lián)網(wǎng)的范圍之內。第二個就是局域網(wǎng),然后再下來就是本地甚至是離線的,
攻擊的范圍在互聯(lián)網(wǎng)上,在internet上的話,攻擊者可以發(fā)動如下一些攻擊,比如說這個協(xié)同攻擊多個攻擊者相互的協(xié)作,然后也可以發(fā)動會話劫持,當合法用戶在進行這個信息活動的時候,通過了認證,攻擊者就把這個會話接管過來,頂替合法的用戶進行后續(xù)的活動,也可以發(fā)動欺騙攻擊,模仿或者是采取不失自己身份的一些行為,也可以發(fā)動反射攻擊,利用第三方的機器服務器轉播或者反射通信流量造成攻擊,來自于第三方的假象。還有安裝特洛伊木馬,通過木馬實現(xiàn)對目標的遠程控制,木馬通常平時是潛伏藏匿起來的,然后偷偷的活動,竊取信息,然后安裝后門等等。這些攻擊方式有些我們在后面的章節(jié)會進行更具體的介紹。
我們再來看在局域網(wǎng)范圍內可以發(fā)動哪些攻擊?
第一種典型的是網(wǎng)絡嗅探,當和攻擊目標處于同一個局域網(wǎng)范圍的時候,攻擊者就可以發(fā)動網(wǎng)絡嗅探來竊聽局域網(wǎng)上面的全部或者部分的流量。然后第二種是廣播攻擊廣播攻擊,就是以這個廣播地址作為我們數(shù)據(jù)包的目標地址,然后發(fā)送大量的數(shù)據(jù)包,然后這些大量的數(shù)據(jù)包會消耗網(wǎng)絡帶寬,造成網(wǎng)絡的拒絕服務或者網(wǎng)絡服務質量的下降。在局網(wǎng)范圍之內,我們可以發(fā)起一些非授權的文件訪問,比如說通過獲取呃目標用戶的賬戶或者口令,然后去非法的訪問別人的文件資源,另外我們還可以發(fā)動ARP欺騙攻擊,這個攻擊主要是污染其他主機的ARP緩存,污染之后就可以假冒乘其他的主機,然后實施欺騙攻擊。
接下來我們再看一下在本地范圍內攻擊者可以實施什么樣的攻擊。
第一種就是旁側偷看,攻擊者臨近受害目標,然后去偷偷的看別人的信息活動,看別人使用電腦敲入了什么樣的數(shù)據(jù)。
第二種是偷用未上鎖的終端,當這個攻擊目標短暫的離開了它的終端,而未對終端進行鎖屏上鎖的話,攻擊者就可以趁此機會去偷用別人的計算機,然后去查看別人的數(shù)據(jù)或者拷貝,偷取別人的數(shù)據(jù)。
另外可以搜索被寫下的口令,有些用戶他的口令比較常復雜,難以記憶的時候,有可能會把這個口令寫下來,寫在紙上或者筆記本上面,甚至把這個寫下的這些口令又把它廢棄了,扔到廢紙,或者把這個寫下的口令扔到垃圾桶里面,那這個時候我們就可以搜索這些被寫下的口令,從而去獲取它的口令。
我們還可以實施一些拒絕服務之類的攻擊,直接把別人的機器的電源線網(wǎng)線拔掉,讓別人無法工作。
接下來我們看離線的情況,在離線的時候,攻擊者可以怎么樣來進行攻擊?
離線的時候攻擊者可以對之前下載的口令文件實施一些破解操作,或者對下載的加密文本實時破解,另外也可以什么?呀借助一些存儲設備來進行數(shù)據(jù)的復制。
接下來我們再來,看人物接下來我們再來看人和也就是人物,人物主要就是指攻擊者的身份以及攻擊者他的目標。我們前面實際上在講這個信息安全問題的根源的時候提到過,這個外因就是存在各種各樣不同身份的呃攻擊者,那這里我們就不再詳細介紹,大家可以在以后這樣一張表來回顧一下。
接下來我們再來看手段,手段實際上就是攻擊方式,常見的攻擊方式有很多,這里我列出了一些,然后包括欺騙攻擊、中間人攻擊、拒絕服務,緩沖區(qū)溢出,后門漏洞,暴力破解等等。這些攻擊方式有些我們在后面會更進一步的詳細介紹。
接下來我們看目標,也就是容易遭到攻擊的目標。信息系統(tǒng)當中的如下一些組件或者服務器就容易成為攻擊者的目標。比如路由器、數(shù)據(jù)庫、郵件服務器、域名服務器、web、APP服務器等等,就容易成為我們攻擊者的目標。他們我就是我們應該重點保護的對象。
3.3網(wǎng)絡攻擊步驟
接下來我們來看一下網(wǎng)絡攻擊的步驟,網(wǎng)絡攻擊的常見步驟通常有如下的5步,叫做5步曲,第一步叫做踩點,踩點主要就是確定我們攻擊的目標,第二步叫做定位,就是確定目標之后我們來分析一下目標,它有什么樣的弱點,什么樣的漏洞我們可以利用,接下來一步就是我們實施攻擊,留后門就是在攻擊目標里面,我們安裝一些后門方便以后再來,
最后就是去痕跡攻擊畢竟是一個非法的行為,攻擊者往往會最后把他的入侵的痕跡清除掉,消滅犯罪證據(jù)。
剛才我們看到的攻擊五部曲,我們又可以把它分成三大階段,攻擊之前叫做預攻擊階段,確定目標,分析目標,然后攻擊就是實施各種攻擊手段,留后門去痕跡就是后攻擊階段。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vfAMhKUu-1687880215513)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)]
我們看一下剛才的三大階段,他們分別的目標和這個內容是什么?
在預攻擊階段主要是為了收集信息,然后進行目標的分析,然后最后來進行攻擊的決策。在攻擊階段,他的目標就是實時攻擊,獲取有用的信息,獲取一定的權限。后攻擊階段目標就是清除痕跡,然后維持一個長期的權限。
我們再來看預攻擊階段,他要實施的攻擊內容,主要是獲取攻擊目標的相關信息并進行相應的分析。獲取的信息內容包括攻擊目標的域名,它的IP分布,然后攻擊目標,它內部的一個網(wǎng)絡托普,以及它的服務器上面的操作系統(tǒng),然后另外攻擊目標它的端口以及開放的服務,還有就是攻擊目標它的應用系統(tǒng)的情況,以及它的漏洞的情況。在攻擊階段要實施的活動就包括獲取遠程權限,進入遠程系統(tǒng),然后再來進行一個權限的提升,然后進一步的擴展權限,然后進行一些實質性的一些操作。后攻擊階段的主要活動內容,包括自入,后門安裝木馬,方便進行遠程的這樣一個控制。然后另外就是清除痕跡,攻擊者在攻擊目標上面的活動往往會留下很多日志,這個時候我們把日志給它刪除掉,然后另外要修補一些明顯的漏洞,為什么我們要幫助攻擊目標來修補它的漏洞?原因有兩方面,一方面是避免這個攻擊目標漏洞太多,而被其他的攻擊者惦記,另外就是防止攻擊目標自身來修補漏洞,他自己修補漏洞的話,可能我們這個系統(tǒng)后期就沒有辦法再很容易的進來了,然后另外就是進一步的去進行這個滲透的擴展,可以把當前這個目標作為攻擊跳板,進而去攻擊其他的系統(tǒng)。
接下來請大家看一張圖,這張圖是對應我們剛才講的預攻擊、攻擊和后攻擊三個階段,黑客們常常采用的攻擊的策略和步驟,以及一些具體的操作,這個圖當中每個階段黑客都會同時很多相應的活動,具體的活動部分我們會在后續(xù)的章節(jié)進行介紹,這里我們就不再詳細的進行這個深入,大家可以自己來看一看。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9iVNF8GG-1687880215513)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)]
3.4 預攻擊階段
接下來我們進入預攻擊階段,我們來看一下攻擊者他如何來收集信息,分析目標以及進行攻擊的決策。
收集信息、目標分析、攻擊決策
這是我們前面看到的,在預攻擊階段攻擊者要獲取哪些信息。我們來看一下預攻擊階段攻擊者常采用的方式和手段,有技術手段,也有非技術手段,技術手段主要是利用一些工具來探測收集攻擊目標的相關信息,非技術手段主要是利用公開的信息或者利用社會工程來套取攻擊目標的信息。首先我們來看一下域名和ip的查詢,要查詢攻擊目標的域名和IP,我們可以利用會議這個工具,這個工具是提供了域名和IP信息的查詢和收集服務,它是一個標準的服務,可以查詢域名是否被注冊以及注冊的詳細信息,具體可以查詢到信息包括域名所有者是誰,域名及IP地址的對應關系。域名所有者他的聯(lián)系方式,域名的到期時間、注冊時間以及域名所使用的域名服務器等等。
接下來我們看一下ping這個網(wǎng)絡工具,這個工具是用于探測目標主機是否是開啟的,只有開啟的主機才能夠成為攻擊目標。它主要是利用我們前面介紹過的icmp協(xié)議,來向目標主機打一個招呼,具體是使用icmp的a口這個子協(xié)議。通常在工作的時候,發(fā)起者發(fā)送一個Aiko request的請求信息,等待對方進行應答。如果我們等到了應答的話,就說明目標主機它是開啟的,如果沒有應答可能有多種原因,一方面可能是這個主機沒有開啟,另外一方面有可能由于這個目標主機它前面的路由網(wǎng)關設置不正確,網(wǎng)絡是不通的,另外也有可能這個網(wǎng)卡的配置是不正確的,還有就是我們發(fā)送的請求報文和這個應答,報文可能在網(wǎng)絡傳輸過程當中超時了,另外也有可能我們發(fā)送的探測包以及響應包都被防火墻給攔截了,這里是我們使用這個 ping工具進行探測的一個事例,大家如果打開你們的計算機使用命令行提示符敲入cmd這樣一個命令,然后你就可以在這個命令行窗口下面輸入拼命令,然后后面跟上一個域名或者是IP地址,再敲回車,你就可以發(fā)起1個探測。這個拼命令它會發(fā)出4個請求,然后等待對方的回應,如果對方有應答的話,他就會最后給出一個報告,然后表明對方主機然后是如何來進行響應的,發(fā)出了多少個包,收到多少個響應。
接下來我們看一下炊事root這樣一個工具,這個工具是用來探測我們執(zhí)行這個命令的主機到目標主機的路徑,這個命令又叫做路由跟蹤,它的原理是發(fā)送若干的短命IC MP包,什么叫短命的IC MP包?我們每個IP包里頭都有一個字段叫ttl短命的ismp包就是這個包里面它的ttl值設置的比較小,ttl這個字段是用來干嘛?這個 Ttl,字段是設置的數(shù)據(jù)包的生存周期,它是為了避免IP數(shù)據(jù)包在網(wǎng)絡存在環(huán)路或者說目標不可達的時候,在網(wǎng)絡當中無限的路由轉發(fā),無限的循環(huán),浪費網(wǎng)絡資源,所以設置了這樣一個字段。
路由器在轉發(fā)一次數(shù)據(jù)包的時候,就會把這個 ttl值減一,當這個 ttl值為0的時候,路由器就會把這個數(shù)據(jù)包丟掉,然后并且會向發(fā)送這個數(shù)據(jù)包的源端發(fā)送一個icm告警,告訴他這個數(shù)據(jù)包的生命周期終止了。
我們結合下面這張圖來說一下Traceroute它的具體工作過程。這張圖當中左邊是這個發(fā)起方,這張圖當中的左邊的主機是探測方,而我們右邊這個主機是探測目標,中間可能會經過若干的路由器組成的這樣一個路徑,Traceroute的目標就是把中間這些路由器一一的按照順序給探測出來,Traceroute在工作的時候,它會向探測目標發(fā)送若干個ttl值從一開始遞增的smp包。第一個數(shù)據(jù)包到達第一個路由器的時候,由于它的ttl值為一,路由器會把這個 ttl值減1,這個時候就變成了0,路由器會把這個包丟棄,然后并且像發(fā)送方報告一個信息告訴他,你這個包到我這兒終止了,生命周期結束了。接下來探測方再發(fā)送第二個探測包,第二個探測包它的ttl值v2,它自然可以順利的通過第一個路由器,但是當它到達第二個路由器的時候,ttl值又變成了0,路由器會繼續(xù)的向探測方再發(fā)送一個告警告訴他,你的數(shù)據(jù)包到我這兒,然后生命終止了。以此順序,探測方發(fā)送一系列 smp包,最終到達探測目標。這個過程當中,我們中途的這些路由器就會分別的向探測方報告,當天你數(shù)據(jù)包到什么地方了,然后我給你終止了,最后我們就可以把整條完整的鏈路通過這樣一種方式逐條的一一的給探測出來,接下來我們再來看一下net craft,通過這樣一個服務可以查詢大部分知名網(wǎng)站的信息,比如網(wǎng)站它運行了什么服務器,用什么web服務器,甚至網(wǎng)站在哪個機房,有些都可以查詢出來,這個是相應的它的一個界面,大家下來可以去訪問一下,試著用一下。接下來我們看一下如何對目標主機進行端口和服務的分析,要對目標主機進行端口和服務分析,我們可以使用應用程序進行測試,比如使用這個知名的太陽能FTP等等這樣一些應用程序,像目標主機的目標端口,申請服務發(fā)起一個請求,如果對方有應答,就可以說明這個端口或者服務它是開放的。另外我們可以使用網(wǎng)絡掃描的工具和軟件,對目標主機一定范圍的這個端口進行掃描,可以全部的掌握目標主機的端口情況。這里我們來看一下如何利用公開信息對目標進行分析,合理的利用公開信息可以分析和挖掘背后的很多信息。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LhmLE8WR-1687880215514)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)]
合理利用公開信息分析和挖掘背后的信息。這里我們舉一個事例,這是一張照片,是1964年中國畫報的封面。鐵人王進喜在大慶油田,當時日本的一個廠商想要競標中國大慶油田的鉆探設備,于是對這張圖展開了一個公開信息分析。從這張圖他們展開了如下的判斷,結合當時的時間以及衣著判斷,這張圖片拍攝于北緯46度到48度之間的區(qū)域,也就是齊齊哈爾與哈爾濱之間。然后根據(jù)王進喜所握手柄的架勢,可以推測油井的大概直徑,然后根據(jù)鉆井與背后油田之間的間距以及這個井架的密度,可以大概推測它的儲量和產量。正是利用這些公開信息分析和挖掘的背后信息,日本的廠商也一舉中標。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xI06syOL-1687880215514)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg)]
接下來我們來看信息搜索,如何利用網(wǎng)絡來搜集有效信息。一是利用網(wǎng)站信息,比如某網(wǎng)絡服務提供商在他的網(wǎng)站上進行宣傳,特惠服務器租用red hat8.0支持my circle PHP采用性能優(yōu)異的帕奇1.3web服務器。這條宣傳信息就告訴我們了很多有價值的信息,它的服務器采用什么操作系統(tǒng),采用了什么工具,采用了什么服務器,接下來我們來看一下如何利用搜索引擎來挖掘信息。如果攻擊者在掌握了某些漏洞信息或者漏洞利用腳本信息的前提下面,它就可以利用搜索引擎,然后以漏洞或者腳本信息最關鍵詞來進行搜索,有可能搜索引擎就會搜索出存在這些漏洞,或者可以被攻擊腳本利用的網(wǎng)站或者服務器信息出來。
接下來我們來介紹一下社交工程攻擊又叫社會工程攻擊,它是利用社會關系社交活動來探聽竊取信息,這個是攻擊者在預攻擊階段常采用的一種攻擊方式,想必很多同學都有一些社交工程攻擊的一些體會,比如攻擊者可以冒充新的資源去尋求幫助,試圖找到在計算機上面完成某個特定任務的方法。攻擊者有時候會冒充憤怒的領導給下屬打電話,到院口令失效了或者遺忘了,讓下屬幫他恢復,攻擊者也可以冒充系統(tǒng)管理員打電話或者發(fā)郵件給一些資源更新或者修改系統(tǒng)或者用戶賬戶需要使用職員的口令,
攻擊者也可以冒充新雇傭的遠程管理員打電話給公司,詢問系統(tǒng)的安全配置情況或者資料,
攻擊者還常常冒充客戶打電話給供應商,詢問公司的新計劃,發(fā)展方向以及公司的主要負責人。
3.5網(wǎng)絡掃描器
接下來我們來學習一下網(wǎng)絡掃描器,網(wǎng)絡掃描器是自動的檢測遠程或本地系統(tǒng)安全弱點的這樣一個程序或者工具,它的目標可以是工作站、服務器、交換機、數(shù)據(jù)庫等等相關的應用。
網(wǎng)絡掃描器的主要功能可以分為如下幾部分,網(wǎng)絡掃描器可以實施主機掃描,確定主機它的工作狀態(tài)是開機還是關機的,還可以進行端口掃描,識別判斷主機端口、開放的情況,然后還可以進行系統(tǒng)識別識別我們目標系統(tǒng)它的操作系統(tǒng)以及它的服務程序的類型和版本,然后還可以進行漏洞掃描,根據(jù)已知的漏洞情況,分析一下系統(tǒng)是否存在這些漏洞。最后它可以生成一個掃描的一個報告。我們來簡單介紹一下掃描器的工作原理,掃描器的工作原理實際上就是一個投石問路。投石問路,我們經常在一些武俠小說或者武俠電影里面看到過,在一個月黑風高的夜晚,一個夜行俠潛入到一個大宅子,他要穿過一個門廊,這個門廊是否安全,是否可以通過這個時候它要探測一下,通常夜行俠會扔一個石頭,看一下門廊那個地方有沒有相應的反應,有沒有守衛(wèi),有沒有看門狗,如果沒有任何反應的話,說明這個門廊是可以通過的。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Rh2BKuxv-1687880215514)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg)]
我們掃描器采用相同的原理,首先我們掃描器可以給目標主機發(fā)送一些探測報文,探測這個主機它是否是存活的,是否是開機的,如果對方是開機的,我們再進一步的扔一些石頭過去,看一下它的端口是否是開放的,這個時候就會發(fā)送一些端口,探測的報文。如果對方的端口是開放的,接下來我們就要看一下目標主機它是否存在一些漏洞,或者是脆弱性,我們又可以繼續(xù)發(fā)送一些知名漏洞,它的利用的腳本或者相應的攻擊方式去嘗試的去攻擊一下,看一下有沒有反應,能不能攻破。如果是可以利用的,那這個時候說明對方它是存在這個漏洞的。
最后這一通的投石問路,探索完了,掃描器它就會給你出一個相應的報告,告訴你目標主機它的一個安全狀況。
3.6 主機掃描
接下來我們來看一下如何來進行主機掃描。
主機掃描有一些傳統(tǒng)的掃描手段,主要就是基于smpa口協(xié)議來跟目標主機進行一個打招呼或者說搭訕。
最簡單的就是 p掃描,我們前面已經介紹過,可以使用ping這個工具來發(fā)起簡單的smpa口的掃描,它是比較簡單的系統(tǒng)支持,但是很容易被防火墻限制。
第二個傳統(tǒng)的方式就是smp swap掃描,這個掃描是并行的掃描,它可以同時的探測多個目標,從而提高這個探測效率。
還有廣播ICM掃描,它是利用廣播向廣播地址發(fā)送sm pico request請求包,這個時候就可以探測整個廣播域內的主機它們是否是存活的。使用廣播的話,它也會有一些相應的限制。它只適用于, UNIX或者Linux環(huán)境,windows環(huán)境會忽略這個廣播掃描,它的另外一個缺點就是廣播容易引起廣播風暴,就容易被發(fā)現(xiàn)。還有一些掃描技術是非a口的I3P掃描,剛才我們看到的掃描都是基于IC MPa口協(xié)議來進行掃描的,他們容易被感知和攔截,所以需要有其他的掃描方式。我們如果去看icmp協(xié)議的類型的話,我們可以看到還有其他類型的這個 smp協(xié)議,它同樣是請求應答這樣一種模式,請求這樣一種應答模式,它就可以被利用來進行這個掃描和探測,發(fā)起方發(fā)送請求被探測方進行應答,這個時候就可以探測。從這張表當中我們可以看到編號13 14 41對,請求應答嫌疑,請求時間戳,然后進行相應的應答。編號15 16又是一對請求應答,請求這個信息,然后這個編號17和18的又是一對請求應答,請求這個子網(wǎng)掩碼,利用這三對協(xié)議,我們就可以構造掃描,這上面有些請求和應答今天已經被作廢了,大家下來可以嘗試一下。
剛才我們看到的傳統(tǒng)的主機掃描技術,不管是a口的還是c口的,都是 icmp的這個報文,都是利用icmp來進行這個搭訕,防火墻網(wǎng)絡過濾設備就比較容易進行攔截和過濾,所以后來又產生了高級的掃描技術,高級的掃描技術是利用smp協(xié)議它提供的網(wǎng)絡間傳輸錯誤信息的這樣一個功能來實現(xiàn)探測。也就是說smp協(xié)議,當發(fā)現(xiàn)網(wǎng)絡當中出現(xiàn)一些錯誤的時候,比如說收到一些異常的數(shù)據(jù)包,然后他會報告這個錯誤,把它報告給數(shù)據(jù)包的發(fā)起方,我們就可以利用這一點來實施主機的掃描,我們可以構造存在異常的IP包,或者存在這個錯誤填充的IP包,或者是構造存在錯誤分片的IP包。另外還可以構造超長的ip包,用來探測我們這個目標它內部的路由情況。我們首先來看一下異常IP包頭探測,這種探測就是像目標主機,發(fā)送這個 Ip包頭錯誤的IP包,常見的這個可以利用的,字段就是這個 IP包頭的頭部長度字段和IP選項字段,我們在這兩個字段填充錯誤的信息,如果目標主機是開機的,這個時候目標主機以及它前面的過濾設備就會進行反饋,反饋icmp參數(shù)錯誤信息,借助這個信息,我們就可以判斷目標主機它是否開機。我們再來看填充錯誤IP報探測,這種探測就是像目標主機發(fā)送填充這段錯誤的IP包。我們前面看這個IP頭部報文的格式的時候,專門看到過IP頭部有一個填充字段,當我們發(fā)送填充這段錯誤的IP包的時候,目標主機如果它是開機的,這個時候目標主機或它的過濾設備就會反饋icmp目標不可達的信息。
接下來我們看一下錯誤分片IP包,錯誤分片IP包探測是利用IP層它的分片機制,當傳輸層交給IP層的數(shù)據(jù)比較大的時候,IP層就會對數(shù)據(jù)進行分片構造分片的IP包。這種探測就是像目標主機發(fā)送存在分片錯誤的IP包,當目標主機接收到分片錯誤的IP包的時候,比如某些分片丟失了,并且在規(guī)定的時間之內得不到更正,這個時候如果目標主機它是開機的,它就會丟棄這個數(shù)據(jù)包,并且進行反饋反饋icmp分片重組時間超時的這樣一個錯誤報文。根據(jù)我們是否收到這個反饋報文,我們就可以判斷目標主機它是否開機。
接下來我們來看一下如何構造超長IP包來探測目標系統(tǒng)內部的路由器。有些攻擊方式專門利用IP分片來實施攻擊。鑒于此,有些目標系統(tǒng)和路由器會設置一個最大的傳輸數(shù)據(jù)包的長度,并且禁止分片,借助這一點,我們就可以發(fā)送超長的IP數(shù)據(jù)包來探測目標系統(tǒng)它的路由器的情況,進而推斷目標系統(tǒng)的網(wǎng)絡托普。當這個路由器收到超長的數(shù)據(jù)包之后,它會進行相應的反饋反饋,需要分辨,但是不允許分辨這樣的差錯報文。接收到這樣的報文,我們就可以獲知目標系統(tǒng)它的內部路由器,進一步推斷它的網(wǎng)絡拓撲。
3.7 端口掃描
完成了主機掃描,我們就進一步來看一看目標端口開放的情況。我們來看端口掃描,首先看端口掃描的類型,端口是我們傳輸層的概念,所以大部分的端口掃描都基于TCP連接建立的握手過程與這個連接斷開的灰色過程。主要分為如下三類,開放掃描,半開放掃描和這個隱蔽商標。我們來簡單看一下TCP建立連接的三次握手過程,這里有兩臺主機,儲能機a儲機b主機a作為客戶端,主機b作為服務端,首先主機a發(fā)起第一次的握手,像主機b服務端發(fā)送一個tcpson的報文,son代表同步代表的是我們這個建立連接的一個請求,這個數(shù)據(jù)包被主機b接收到之后,主機b會對它進行應答,然后同樣給他發(fā)送一個豹紋,這個豹紋會把這個 Suv和ack進行一個自衛(wèi)表示,我們同意你的請求,我們對他進行應答。這個報文被主機a客戶端收到之后,組件a再發(fā)送一個報文,同意建立這個連接,這個三次握手就完成了,后續(xù)雙方就可以進行TCP的有連接通信了。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pqDbmKwF-1687880215515)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg)]
首先我們來看開放掃描,又叫TCP connect掃描,這個掃描的思路很簡單,就是嘗試與目標主機的目標端口建立連接,如果能夠完成三次握手,就說明對方的端口是打開的。具體在實施的時候,我們可以調用socket函數(shù)connect對方的目標端口進行連接,如果能夠connect成功,就說明對方的端口是偵聽狀態(tài),否則說明端口是關閉的。下面是示意圖,當然我們也可以借助一些工具來自動化的完成這樣一個掃描過程。我們再來看一下開放掃描它的優(yōu)缺點,它優(yōu)點就是穩(wěn)定可靠,不需要特殊的權限,但是也是有缺點的。缺點就是跟對方完成完整的刪除握手的話,他不隱蔽會被日志記錄下來,容易被發(fā)現(xiàn)。我們剛剛看到開放掃描它有缺點容易被發(fā)現(xiàn),所以又產生了半開放掃描。我們回過頭去看一下三次握手的過程,我們可以發(fā)現(xiàn)其實前兩次握手完成了,我們就可以斷定對方端口的開放情況,所以這個半開放掃描就是我們只需要完成三次握手的前兩次,利用這前兩次握手,我們來判斷對方端口是否開放??催@里有一個圖,探測方向,被掃描主機發(fā)送一個 s1的探測包,發(fā)起第一次握手,如果對方的端口是開放的,處于偵聽狀態(tài),這個時候它就會進行第二次握手,對第一個包進行一個應答。如果對方的端口是不開放的,這個時候對方就會發(fā)送一個rst reset重置的一個反饋。如果對方的端口前面有防火墻進行過濾的話,那這個時候就收不到任何的反饋。通過這種反饋的情況,我們就可以判斷對方的端口是否開放。
接下來我們來看一下隱蔽掃描,隱蔽掃描主要有下面4種方式,包括FIN掃描,finish,包括這個 Now掃描,xx掃描,ack掃描。
FIN掃描
NULL掃描
Xmas掃描
ACK掃描
隱蔽掃描主要基于TCP斷開連接的4次揮手過程,這里我們簡單看一下四肢揮手的過程,這里同樣是主機a主機b分別作為客戶端和服務端。
首先主機a發(fā)起一個斷開連接的請求發(fā)送TCP包,其中控制為FIN自衛(wèi),主機b收到這個包之后對它進行這個響應,然后發(fā)送這個 tcpack自衛(wèi)的這個包。接著主機b再發(fā)送一個TCP FM自衛(wèi)的這個包發(fā)起它的這個方向斷開連接的這個請求。組件a收到這個包之后,同樣對這個請求進行應答,再發(fā)送一個包給主機b這個時候雙向的連接就斷開了,四肢握手,到這兒兩個方向上的連接都斷開了,4次揮手過程到這兒就結束了。我們來看一下TCP FM掃描。FM代表finish,這個掃描是向目標主機的端口發(fā)送 FM字位的TCP包,如果目標主機的目標端口它是關閉的,這個包會被丟掉,并且返回一個are的寶寶。Are Estee代表reset。如果端口是開放的,會簡單的把這個包丟掉,不反饋任何的東西。這種掃描方式它的優(yōu)點就是不包含TCP三次握手的任何部分無法被記錄下來,當然也有缺點,缺點就是需要有超級用戶或者是授權用戶的權限能夠訪問專門的系統(tǒng)調用,而且這個掃描它適用于UNIX主機,windows主機環(huán)境下面它是無效的,不管端口是否開放,操作系統(tǒng)都會反饋 reset。
我們再來看其他的TP隱蔽掃描,首先null掃描,null代表虛無,這種掃描就是像目標主機的目標端口,發(fā)送沒有任何標志位的TCP包,根據(jù)協(xié)議,如果目標端口它是關閉的,那這個時候它會硬打一個reset包,對這個發(fā)送進行一個自衛(wèi),接下來是x上描,這種掃描像目標主機,目標端口發(fā)送一個fnurg以及psh自衛(wèi)的TCP包。同樣根據(jù)協(xié)議,如果端口是關閉的,也會反饋一個rst包 。
Ack掃描是向目標主機目標端口發(fā)送一個ack字位的TCP包,根據(jù)協(xié)議如果目標端口是開放的,它會反饋一個rst包
我們前面看到的掃描都是針對TCP端口進行掃描的,傳輸層還有一大類協(xié)議就是udp,udp的端口如果要掃描的話,就可以采用udp端口掃描。這種掃描就是像目標主機的udp,目標端口發(fā)送udp、數(shù)據(jù)報,如果對方的端口是關閉的,它會觸發(fā)一個icm端口不可達的插座豹紋,
這種掃描方式它的優(yōu)點是可以完成對我們udp端口的探測。當然它的缺點就是需要我們系統(tǒng)管理員的權限,而且掃描的結果它是不可靠的,因為udp本來就是一個不可靠的協(xié)議,有可能對方給我們了應答,但是這個應答傳輸過程當中可能會傳丟了,而且這種掃描它的速度是比較慢的,有些這個相關的協(xié)議草案對這個 smp報文生成的速度作出了限制,
我們前面介紹了端口掃描的技術,接下來我們來分析一下端口掃描的策略,如果不講任何的策略的話,掃描容易被察覺被發(fā)現(xiàn)。端口掃描策略主要有如下幾種,
第一種策略隨機端口掃描,我們前面講的這個端口掃描,特別是利用一些工具在進行掃描的時候,可能會大段大段的端口進行連續(xù)的掃描,這種掃描方式就比較容易被發(fā)現(xiàn),所以我們可以進行隨機端口的掃描,我們隨機的選取一些端口來進行掃描,或者按照隨機的順序來掃描一段端口。另外就是我們采用一些工具來掃描的時候,可能會比較快,很快速的掃描的話就比較容易發(fā)現(xiàn),這個時候我們可以適當?shù)膾呙璧乃俣冉迪聛?,進行慢掃描,
我們還可以進行碎片化的掃描,我們利用這個分片的技術等等,我們來產生一些碎片的這個掃描數(shù)據(jù)包,單個包來看的話,看不出他是在進行掃描,只有當這些分片重組之后,它才是一個完整的掃描。此外我們還可以進行這個欺騙掃描,用欺騙的IP地址來發(fā)起掃描,使對方找不到掃描的發(fā)起端在什么地方。我們還可以協(xié)同掃描,從多個地方由多個人發(fā)起,共同的掃描。
接下來我們介紹兩個端口掃描的工具。第一個是n map,它被稱為掃描器之王,有for window和for UNIX兩種版本,它需要這個 Name pick up或者是when pick up兩個基礎庫的支持,這個工具能夠實施普通的掃描,也可以執(zhí)行各種高級的掃描,還可以進行操作系統(tǒng)的類別之別。這里是使用這個工具的一個示意圖,大家可以看一下。我們再來看第二個工具,super sCAn。這個工具是基于windows平臺的,它是圖形化的界面,操作比較方便,然后速度是比較快的,可以實現(xiàn)傻瓜化的端口掃描。
3.8 操作系統(tǒng)識別
接下來我們來學習操作系統(tǒng)的識別。操作系統(tǒng)是一個復雜的系統(tǒng),往往存在大量的漏洞,這使他們成為了攻擊者病毒惡意代碼的一大攻擊目標。不同的操作系統(tǒng)有不同的漏洞,而且不同的版本往往也有不同的漏洞,所以操作系統(tǒng)的識別就成為了我們預攻擊階段的一個常規(guī)任務。操作系統(tǒng)的識別主要是通過操作系統(tǒng)當中的協(xié)議站的指紋進行識別。我們知道TCP協(xié)議有標準化的定義,但是各個廠商或者組織在實現(xiàn)他們各自操作系統(tǒng)的TCP協(xié)議站的時候,往往做出了不同的解釋和不同的實現(xiàn)。這些獨有的特性就被稱為指紋。通過這些指紋細微的差別,我們就可以對操作系統(tǒng)以及它的具體版本來進行推斷。比如不同的操作系統(tǒng)可能會對下面的4個IP的參數(shù)有不同的默認設置。Ttl我們前面提到過的數(shù)據(jù)包的生命期,不同的操作系統(tǒng)可能會設置不同的初始數(shù)據(jù)包生命期,還有df字段,要不要分片?不同操作系統(tǒng)可能選擇不一樣。還有就是tos,服務類型,不同的操作系統(tǒng)的初始設置,這個值也是不一樣的。另外還有就是我們TCP的滑動窗口,它的初始尺寸,不同操作系統(tǒng)它的設置也是不一樣的,除了剛才我們看到的幾種IP的初始設置之外,還有一些其他的操作系統(tǒng)識別依據(jù),比如ack的序號,我們在發(fā)送ack應答的時候,不同的操作系統(tǒng)會對這個序號做不同的設置,另外 icmp地址源碼請求,不同的操作系統(tǒng)也會做出不同的響應方式,有些操作系統(tǒng)會進行應答,而有些操作系統(tǒng)則不會應答。另外還有就是這個 FM掃描,針對不同的系統(tǒng),它的響應方式也是不一樣的,除了這些之外,還有一些其他的操作系統(tǒng)識別依據(jù),我們這里由于時間關系就不再一一的對大家進行介紹,同學們下來可以自行學習一下。
3.9 漏洞掃描
我們來學習漏洞掃描。漏洞掃描是基于漏洞數(shù)據(jù)庫,對指定的遠程或本地計算機系統(tǒng)的安全脆弱性進行檢測,發(fā)現(xiàn)是否存在可利用漏洞的行為,包括網(wǎng)絡漏掃、主機漏掃、數(shù)據(jù)庫漏掃等不同種類。
漏洞掃描它是一把雙刃劍,網(wǎng)絡管理員能夠通過漏洞掃描,了解系統(tǒng)網(wǎng)絡和應用服務的安全狀態(tài),及時發(fā)現(xiàn)安全漏洞,客觀評估我們系統(tǒng)和網(wǎng)絡的風險等級,而攻擊者也能夠借助漏洞掃描,發(fā)現(xiàn)攻擊目標的漏洞情況,進而進行這個攻擊的決策,以便發(fā)起漏洞利用攻擊。
接下來我們看漏洞掃描的方法,漏洞掃描方法可以使用漏洞庫、匹配法、模擬黑客攻擊法以及使用漏洞工具,漏洞庫匹配法是基于獲取的漏洞庫,把其中的漏洞與掃描目標進行一一的匹配,看有沒有命中的,模擬黑客攻擊法就是模擬黑客攻擊的手法,對掃描目標進行漏洞利用攻擊。比如我們下面可以看一看,配置錯誤漏洞的話,我們可以嘗試使用這個 Ipc命名管道攻擊,去看一下是否存在相應的漏洞。然后針對一些應用的話,我們可以采用一些Unicode攻擊方法去嘗試一下。然后針對緩存溢出漏洞的話,我們可以發(fā)起一些相應的緩沖區(qū)溢出攻擊,如果系統(tǒng)有沒有拒絕服務漏洞,我們可以發(fā)動一些拒絕服務攻擊去嘗試一下。如果懷疑我們系統(tǒng)是否存在弱口令的話,我們可以嘗試進行這個口令猜測或者暴力破解。
我們再來看漏洞掃描工具法,漏洞掃描工具就是利用漏洞掃描工具來實施這個漏洞的掃描,漏洞掃描工具有很多類型,比如有網(wǎng)絡設備的漏洞掃描器,比如Cisco的審計工具,還有集成化的漏洞掃描器,比如說Nessus,還有Shadow Security Scanner 以及Internet Security Scanner等等這樣一些工具。另外一類就是web掃描軟件,比如IBM的appscan
,還有比如Acunetix 的web漏洞掃描工具,還有就是數(shù)據(jù)庫漏洞掃描器,比如ISS 的Database Scanner,還有就是oracle的數(shù)據(jù)庫掃描器oscanner。
接下來我們就重點看幾個工具的簡要情況,首先nephew,這個工具它是一個CS架構的工具,有客戶端,還有服務端,客戶端連接服務端,下載插件和相應的掃描策略,而真正的掃描是由服務端發(fā)起的,客戶端服務端它通過加密通信,這個工具它的優(yōu)勢是具有強大的插件功能,然后是完全免費的升級快速。這里是這個工具的一個界面,
這是國產自主開發(fā)的xx,它也是一個免費的一個工具,相對來說比較古老,缺乏維護,這個是它早期的一個操作界面。這是IBM的APP sCAn,它是web掃描工具,這是它的一個程序界面,如果大家對web的安全比較感興趣的話,可以去嘗試一下這個工具。最后是這個 Arctics的web安全測試軟件,它也是一個圖形界面的軟件,大家也可以嘗試一下。
3.10 攻擊階段
前面我們介紹完了預攻擊階段,接下來攻擊者就要進入攻擊階段了,攻擊階段的攻擊手法也很多,但是往往攻擊者會首先去獲取權限。攻擊者在獲取權限的時候,往往首先獲取一個一般的權限,然后獲取一般權限,往往攻擊者會采用比如說社交工程攻擊,騙取一般用戶的賬戶或者口令,或者設法盜竊賬戶文件,然后進行破解,獲取某一個用戶的賬戶和口令。另外還可以利用某些工具或者系統(tǒng)漏洞登錄到主機上面來,直接獲取操作權限。一般用戶的權限是比較受限的,攻擊者在目標主機上面能夠執(zhí)行的操作有限,所以很多攻擊者會進一步的提升權限,或者直接去獲取目標主機的管理權限,這個也是很多攻擊者的終極目標。要獲取目標主機的管理權限可以有如下幾種途徑,第一種是直接獲取管理員的口令,比如進行口令的猜測,暴力破解口令文件或者發(fā)起社會工程攻擊去欺騙管理員。另外,還可以利用系統(tǒng)管理安全的漏洞,比如錯誤的文件訪問權,錯誤的系統(tǒng)配置,或者某些緩沖區(qū)溢出漏洞等等,通過這些手段來獲取管理員的權限。另外還可以通過安裝置入特洛伊木馬來竊取管理員的口令。
3.11 后攻擊階段
剛才我們介紹了在攻擊階段,攻擊者如何來獲取權限,提升權限,獲取完權限之后,攻擊者就要實施具體的攻擊了,具體的攻擊可能有各種各樣的類型,我們在后面的章節(jié)會陸續(xù)的對他們其中的一些重要的攻擊進行介紹。這里我們就進入到后攻擊階段,看一下攻擊者們如何清掃戰(zhàn)場。后攻擊階段,我們攻擊者的一旦任務就是藏匿自己的行蹤,攻擊者的在系統(tǒng)當中的行為或者活動往往會被系統(tǒng)記錄下來,這個時候就要清除日志,然后刪除拷貝的文件,有可能攻擊者會在目標主機里面去下載拷貝一些文件,要把這些痕跡清除掉,操作系統(tǒng)不管是Linux還是UNIX,還是windows,都有相應的日志的存放機制和相應的位置,大家下來可以查閱一些資料去把這些日志找到去看一看。另外攻擊者在進入我們目標機之后可能會啟動一些相應的程序進程,我們這個時候攻擊者還需要把這些進程給隱藏起來,另外可能攻擊者還會在目標主機上發(fā)起一些對外的連接,這個時候需要把這些網(wǎng)絡連接也隱藏起來。
有時候攻擊者可能不具備去刪除我們日志的這樣一些權限,這時就可以退而求其次,通過修改系統(tǒng)時間去造成這個日志文件的紊亂。攻擊者可能還需要刪除在系統(tǒng)當中的一些中間文件,或者刪除在系統(tǒng)當中自己創(chuàng)建的一些用戶。
我們前面看到攻擊者要突破或者拿下一個目標系統(tǒng),它要經過很多技術的和非技術的手段,比較耗費時間和精力,所以很多攻擊者在突破一個系統(tǒng)之后會放置后門,以方便下一次可以直接的比較順利的進入到系統(tǒng)。通過后門,攻擊者還可以監(jiān)視用戶的行為隱私,然后遠程的控制用戶的主機。
后門放置的方式要看攻擊者是否已經把這個系統(tǒng)給成功的入侵了,如果成功入侵的情況下,面攻擊者可以添加用戶,在系統(tǒng)里面添加一個自己的用戶,下一次就可以通過用戶密碼登錄系統(tǒng),或者可以修改系統(tǒng)的登錄程序或者修改相應的配置。通過這些修改后的程序和配置,也是可以快速的繞開系統(tǒng)的安全防護,然后快速的登錄到系統(tǒng)當中來。如果攻擊者還沒有成功入侵的話,這個時候也可以放置后門,比如說利用系統(tǒng)的漏洞,然后通過遠程自入的方式或者誘騙目標系統(tǒng)去執(zhí)行一些惡意代碼通過惡意代碼來竊取系統(tǒng)的這個呃賬戶口令等等,進入到系統(tǒng)當中去。
3.12共享式網(wǎng)絡嗅探
接下來我們來介紹一下網(wǎng)絡嗅探。網(wǎng)絡嗅探是監(jiān)視網(wǎng)絡的流量狀態(tài),數(shù)據(jù)等信息,然后進一步的分析數(shù)據(jù)包,從而獲取有價值的信息。獲取的信息通常包含口令賬號,一些機密的或者敏感的數(shù)據(jù)和信息,還有就是可以通過網(wǎng)絡嗅探來進行我們前面介紹過的業(yè)務流分析。
網(wǎng)絡嗅探要分網(wǎng)絡環(huán)境,當前主要有兩種網(wǎng)絡環(huán)境,一種是共享式的網(wǎng)絡環(huán)境,通過harbor極限器連接的網(wǎng)絡,另外一種是交換式的網(wǎng)絡,通過交換機來組建的網(wǎng)絡。網(wǎng)絡嗅探是局域網(wǎng)范圍內的攻擊方式,具體的攻擊技術又跟具體的網(wǎng)絡環(huán)境相關,早期的網(wǎng)絡通過Hub極限器來連接網(wǎng)絡,是一種共享式的網(wǎng)絡,今天的網(wǎng)絡主要是通過交換機來組建的,是交換式的網(wǎng)絡,這兩類不同的環(huán)境,它的網(wǎng)絡嗅探技術是不一樣的,我們下面分別來看一下。共享式網(wǎng)絡通過Hub組件極限期來組網(wǎng)。它是我們物理層的一個中繼器,它的功能單一,主要就是放大信號、延長網(wǎng)絡的距離,它沒有載波監(jiān)聽和碰撞檢測,就意味著當網(wǎng)絡當中有多個節(jié)點,同時在發(fā)送數(shù)據(jù)的時候會產生碰撞,而Hub無能為力,從而造成通信的效率比較低,因為沖突多了,大家就只有重傳了。在工作的時候,它將從一個接口接收到的數(shù)據(jù),簡單的廣播到其他的接口上面,從而就形成了廣播,就意味著一個主機發(fā)送的數(shù)據(jù)到網(wǎng)絡當中,會被所有其他主機的網(wǎng)卡都增添到。這里有一張Hub組件的共享是網(wǎng)絡的簡單示意圖,中間是Hub,它有4個網(wǎng)絡接口,分別連接了ABCD4臺計算機。假設主機a要發(fā)送一個數(shù)據(jù)到主機d這個時候,它發(fā)送的數(shù)據(jù)包就進入了Hub的與a連接了一個接口,這個時候Hub就簡單的把這個數(shù)據(jù)包從這個接收到的接口把它復制廣播到其他所有的接口上面。這個時候除了地主機可以偵聽到a發(fā)送的數(shù)據(jù)包之外,b和c他也可以增添到這個 a主機發(fā)送的數(shù)據(jù)包,這就是廣播。
我們來看一下共享式網(wǎng)絡環(huán)境下面監(jiān)聽的原理,我們剛才提到共享是網(wǎng)絡當中所有的主機的網(wǎng)卡,它都能夠增添到網(wǎng)絡當中的所有的數(shù)據(jù)增。舉個例子,假設我們身處一個大的一個房間里面,有很多人在各自聊天說的話,這個時候只要聲音足夠大的話,我們每一個人都可以聽到其他所有人的講話。普通模式下面的話,網(wǎng)卡只接收發(fā)送給自己的數(shù)據(jù)增,就好比剛才那樣一個場景當中,我們每個人可能只接收跟自己相關的這個談話,而其他人的通話雖然我們聽到了,但是我們并沒有往心里去,如果在共享式網(wǎng)絡環(huán)境下面要實時監(jiān)聽的話,這個時候就可以把自己的網(wǎng)卡設置為混雜模式,混雜模式網(wǎng)卡會將所有增添到的數(shù)據(jù)增,然后都把它接收下來,然后交給上層協(xié)議站去進行解析和解讀。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pQvuyZlo-1687880215515)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg)]
攻擊者將它的網(wǎng)卡設置為混雜模式之后,它就可以來實施網(wǎng)絡監(jiān)聽了,實時網(wǎng)絡監(jiān)聽可以手動的,也可以自動的。手動就是基于pcap之類的網(wǎng)絡抓包函數(shù)庫,手動編寫程序來抓包并進行解析。另外可以利用一些自動化的工具,比如說sniffer、wireshark等工具自動抓包和解析。
3.13 交換式網(wǎng)絡硝酸交換機毒化攻擊
harbor主網(wǎng)的共享式網(wǎng)絡,今天已經不多見了,今天主要是交換機組件的交換式網(wǎng)絡,我們來看一下交換機以及交換機組件的交換式的網(wǎng)絡,交換機工作在數(shù)據(jù)鏈路層,它的內部維護一個MAC地址到端口的映射表,又叫做交換表。這里有1個示意圖,這個圖當中有一臺交換機,有6個接口,分別接入了A、B、C、A’、B’、C’、6臺計算機,這有一個交換表的示意圖,從這個圖當中我們可以看到,主機A接入到交換機的一號端口,主機B接入到交換機的二號端口,C接在三號端口等等。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-al3CkgJg-1687880215515)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif)]
交換機在工作的時候,接到數(shù)據(jù)幀之后查表來轉發(fā)這個幀,例如A主機假設要發(fā)送一個數(shù)據(jù)幀到A’主機,這個時候我們交換機從一號端口接收到這個數(shù)據(jù)幀之后,它就把這個幀當中的目的MAC地址,也就是A’的MAC地址來查表,通過查表發(fā)現(xiàn)A’是接在交換機的4號端口上面,所以交換機就把這個數(shù)據(jù)幀直接轉發(fā)到4號端口。交換機采用端口到端口的轉發(fā)方式,而不在廣播就使得不同的端口它可以同時工作工作效率更高。比如我們這個示意圖當中,我們A到A’可以通信,同時B到B’也可以通行,他們這兩個通信是不沖突的,因為它不在廣播,在這樣一個交換式的網(wǎng)絡環(huán)境當中,由于不在廣播了,所以就不容易嗅探了。
接下來分析一下交換機的交換機詞,交換機的核心是交換表,可以說交換機是表驅動的,交換表有若干的表象,每一個表象是我們交換機接入的主機的MAC地址跟對應的接口的映射。另外交換表空間有限,所以為每個表現(xiàn)設置了一個TTL,生命期過期之后就要被刪除掉,或者用新的表象去替代舊的表象。交換機的交換表如何來構造,并不需要我們進行設置或者填充,而是交換機自學習。初始的時候交換表為空,交換機按照harbor的方式來工作,也就是說收到一個數(shù)據(jù)幀,然后就把它廣播到其他所謂的端口上面。當交換機接收到一個數(shù)據(jù)真實,這個時候交換機就要記錄這個數(shù)據(jù)幀的、源MAC地址跟對應的接口,然后把它作為我們交換表的一個表象填到交換表里面去。在示意圖當中,假設A主機發(fā)送一個數(shù)據(jù)幀到交換機,這個時候我們交換機收到這個數(shù)據(jù)幀之后,它就把這個數(shù)據(jù)幀的原MAC地址,也就是我們主機A的MAC地址,以及主機A接入的我們交換機的端口,這兩個信息記錄下來,然后添加一個TTL把它填到交換表里面來。這就好比我們在使用手機的過程當中,我們要生成一個通訊錄,假設我們最開始的時候這個通訊錄是為空,這個時候有人給我們打電話,告訴我們我是誰、電話多少,那這個時候我們就把這個通信者添加到通訊錄當中去,那隨著我們接收的電話越來越多,我們就逐步的把這個通訊錄建立起來。
剛才介紹了交換機的工作方式,接下來我們看一下在交換式的網(wǎng)絡環(huán)境當中如何來實時監(jiān)聽,我們剛才看到了,在正常情況下面交換機是通過查表來工作的,也就是說交換機在收到一個數(shù)據(jù)幀之后,就把這個數(shù)據(jù)幀它的目的MAC地址來查詢它的交換表,如果查表命中了,有一個對應的選項,這個時候就按照這個查詢出的這個結果把這個幀轉發(fā)到對應的交換機端口,如果查表沒有命中的話,交換機它并不會把這個數(shù)據(jù)真就直接丟棄了,而是怎么把這個數(shù)據(jù)增采用Hub的方式廣播出去,要讓這個數(shù)據(jù)幀繼續(xù)往前走,要進行傳輸。如果接收到的數(shù)據(jù)幀是一個廣播幀,那就直接廣播出去。在交換式網(wǎng)絡環(huán)境當中來監(jiān)聽的話,實質上就是要讓本來不應該到達本地的數(shù)據(jù)幀到達本地,可以采取如下三種方式:第一種方式是利用交換機的鏡像功能,有些交換機具有這個鏡像功能,它有一個專門的鏡像端口,鏡像端口就是所有的其他端口上面的數(shù)據(jù)都會在鏡像端口上面進行復制,也就是說只要你介入到鏡像端口,你就可以接收到所有交換機其他端口上面的數(shù)據(jù),這個就可以實現(xiàn)監(jiān)聽了,把所有的端口的數(shù)據(jù)都可以接收下來。第二種在交換式網(wǎng)絡環(huán)境當中,實施網(wǎng)絡監(jiān)聽的方法就是交換機讀化工機。我們看這個示意圖,假設B撇就是攻擊者,正常的工作模式下面交換機通過查詢交換表工作,也就是說發(fā)送給主機A的數(shù)據(jù)幀,交換機就只把它交到A接入的端口,發(fā)送給主機B的數(shù)據(jù)增,我們交換機就只發(fā)送到B的接口,這個時候B撇攻擊者他是收不到發(fā)送給A和B的數(shù)據(jù),這個時候它如何來實施監(jiān)聽。這個時候攻擊者就可以對交換機實施毒化攻擊,把交換機的交換表給它污染,讓它的表成為一張無效的表,無效的表我們交換機在工作的時候,收到一個針去查詢的時候就不會命中,在不會命中的情況下面,交換機剛才講了,它查表未命中的話,它就會退化成我們HUB的工作模式,把這個數(shù)據(jù)增進行廣播,廣播就好辦了,本部應該到達攻擊者的數(shù)據(jù)包都被廣播了,都會到達攻擊者的網(wǎng)卡,這個時候攻擊者就可以實施網(wǎng)絡鑒定了。第三種監(jiān)聽方式就是利用ARP欺騙,我們下面再看利用ARP欺騙。這里再來具體的分析一下這個交換機毒化攻擊。我們剛才講交換機的交換表它空間是有限的,所以交換表象它會有一個生命期,時間一到,它就會失效被刪除。另外的話,新的表象會替代舊的表象,交換機的毒化攻擊就是攻擊者發(fā)送大量具有不同偽造原MAC地址的幀,然后讓交換機去自學習。也就是說交換機收到這些經過偽造的數(shù)據(jù)之后,他會來學習,把這個偽造針里面的MAC地址跟這個端口的映射,把它填充到交換表里面去。因為發(fā)送了大量的,而且不同的語言MAC地址的真這個時候這些真就會把整個交換表完全的填充,把原來有效的交換表給替換掉。毒化攻擊后,交換機的交換表它就無效了,因為他的表象全都是偽造的MAC地址跟端口的映射。這個時候交換機在工作的時候查表他就自然是沒辦法命中的,交換機完全退化成廣播模式,跟Hub主網(wǎng)一樣,在這種模式下面,攻擊者要來實施監(jiān)聽就非常容易了,跟前面一樣設置混雜模式,然后手動或自動來抓包再來解析,就可以了。
3.14 ARP欺騙
我們剛剛提到交換式網(wǎng)絡環(huán)境下面還可以實施ARP欺騙攻擊來實現(xiàn)網(wǎng)絡監(jiān)聽。接下來我們就來看一下如何來進行ARP欺騙網(wǎng)絡監(jiān)聽。我們在前面計算機網(wǎng)絡基礎當中提到,互聯(lián)網(wǎng)絡主要是有兩層裙子,IP地址和MAC地址,IP地址是邏輯地址,主要用于遠程的路由,MAC地址是網(wǎng)絡接口的地址,主要用于在局域網(wǎng)范圍之內的數(shù)據(jù)幀投遞,我們這兒可以做一個類比,IP地址可以類比作單位名稱,比如電子科技大學這個名稱也可以作為一個地址,我們在收發(fā)郵件收發(fā)快遞的時候,用電子科學大學作為地址,有些情況下面也是可以進行這個投遞的。另外我們學校也有它具體的物理地址,比如建設北路二段4號就是我們沙河校區(qū)的地址,這兩層地址通過地址解析協(xié)議ARP來實現(xiàn)映射和綁定。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3Uer63GB-1687880215516)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg)]
這里有一張示意圖,我們可以看到在這個局域網(wǎng)當中我們有幾臺主機,每臺主機有兩個地址,IP地址用于遠距離的路由選路,然后MAC地址用于在局域網(wǎng)范圍之內的尋址。ARP協(xié)議實現(xiàn)IP地址到MAC地址的映射和綁定。當我們在發(fā)送IP數(shù)據(jù)包的時候,要把它交到下層數(shù)據(jù)量層封裝成真,這個時候我們就需要去根據(jù)目的IP地址查詢對應的目的MAC地址,然后如果每一次封裝真的時候都來查詢的話,效率會比較的低下。這個時候每個節(jié)點實質上它都會有一個ARP表,也就是 ARP緩存,它會緩存鄰居的IP和MAC地址的映射,類似于交換機的交換表,這個表象就是IP地址加上MAC地址,還有一個TTL時間,這個是表示我們IP和MAC地址映射的一個有效時間,典型的數(shù)為20分鐘,這個表也是通過自學習建立的,一方面通過這個 ARP、查詢,查詢完了之后,我們就把這個對應的IP和MAC的綁定關系添加到ERP表當中去。另外就是我們進行旁聽,在局域網(wǎng)范圍之內,如果有其他節(jié)點,他在發(fā)起ARP的查詢或者收到了應答,我們如果旁聽到的話,也把它添加到ARP表里面去。大家在自己的主機上面,如果在命令行提示符下面,我們可以敲入ARP這個命令,然后可以看一下自己當前主機的ARP緩存是什么樣的。比如下面這個這個框,我們可以看到我當前主機,我的ERP緩存有兩條記錄,分別記錄了兩個鄰居節(jié)點,他的IP地址和他們的MAC地址。
說到ARP欺騙,我們首先來看一下ARP協(xié)議的工作過程。我們前面講了TCPIP協(xié)議的數(shù)據(jù)包封裝過程,當一個節(jié)點在發(fā)送數(shù)據(jù)的時候,當這個數(shù)據(jù)到達了網(wǎng)絡層我們網(wǎng)絡層,封裝好了IP數(shù)據(jù)包之后,就要把它交到數(shù)據(jù)鏈路廠去封裝成真。這個時候發(fā)送節(jié)點,首先它要根據(jù)數(shù)據(jù)包的IP地址來判斷一下這個目的節(jié)點他是否跟自己在同一個網(wǎng)站,它可以根據(jù)IP地址與指望野馬來做一個計算,就可以判別這個目的方跟自己是否在同一個網(wǎng)段。如果是在同一網(wǎng)段的話,這個接收方就是自己在局域網(wǎng)當中的鄰居,這個時候就需要這個接收方他的MAC地址來作為真的目的MAC地址。這個時候我們發(fā)送方就可以首先檢查一下自己的ARP緩存,來查詢一下這個鄰居他在不在我的ARP緩存里面,如果在的話,我們就直接把緩存里頭這個鄰居節(jié)點它的MAC地址拿出來,直接封裝成幀發(fā)送就好了。如果查詢ARP緩存沒有命中,那這個時候怎么辦?發(fā)送方它就可以發(fā)起一個ARP請求,然后詢問一下誰的IP地址是我當前這個要發(fā)送的目的IP地址,讓大家來報告一下。這個請求它是一個廣播方式發(fā)送的請求,目的節(jié)點收到這個請求之后,它就會進行相應的一個應答,報告一下自己的MAC地址是多少,報告給發(fā)送節(jié)點。同時這個目的節(jié)點在收到這個請求的時候,除了報告他還,會把自己的ARP表更新一下,把這個發(fā)送方的IP以及它的MAC地址做一個更新或者添加,而發(fā)送方在收到這個應答之后,它就可以獲取目的節(jié)點的 MAC地址,然后同時把這個目的節(jié)點剛才返回的這個 Mac地址添加到自己的ARP表里面去,如果沒有收到這個應答的話,那說明目的節(jié)點可能不在這個網(wǎng)絡當中,這個時候傳輸就失敗了。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dMo2PTUN-1687880215517)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg)]
另外一種情況,如果經過剛才的計算,發(fā)現(xiàn)這個目的方不跟自己在同一個網(wǎng)段,那這個時候這個數(shù)據(jù)就需要發(fā)送給網(wǎng)關,同樣我們可以采用剛才的過程再來查詢網(wǎng)關的MAC地址,如果查詢ARP命中我們就直接封包,不行的話,我們就再來發(fā)起一個ARP查詢,然后去查找網(wǎng)關的MAC地址,然后再來進行傳輸。接下來我們通過這樣一個簡單的事例來說明一下剛才講解的ARP協(xié)議工作方式。在這樣一個簡單的局域網(wǎng)當中,網(wǎng)關下面有4臺主機,假設這個時候 IP尾段為101的主機,想要跟 IP尾段為102的主機進行通信,但是沒有102它對應的MAC地址。這個時候根據(jù)協(xié)議,首先101它會發(fā)起一個廣播的查詢,詢問一下誰的IP是尾號為102的,這個廣播就會把它發(fā)送到網(wǎng)絡當中,所有的節(jié)點包括網(wǎng)關都能夠收到這個廣播查詢。這個廣播發(fā)送完了之后,尾號為102的主機就收到了這個廣播,發(fā)現(xiàn)是在查詢他的MAC地址,這個時候它就會生成一個應答,然后直接發(fā)送給101。01收到這個應答之后,就會根據(jù)應答的信息把我們102的 IP地址跟他的MAC地址添加到他的ARP緩存當中。同時其他的網(wǎng)絡節(jié)點由于都收到了剛才101的廣播查詢,所以他們也會把101的IP和它的 MAC地址都刷新到自己的ARP緩存當中,以便后面再來使用。這里就是我們 ERP協(xié)議工作的一個簡要過程,我們剛才看了ARP協(xié)議的工作過程,ARP欺騙是如何實現(xiàn)的?這里我們就來分析一下ARP協(xié)議它存在的問題,ARP協(xié)議它是通過廣播請求單播應答的方式來實現(xiàn)的,廣播請求我們剛才看到全部的接收者都會更新或者添加關于發(fā)送者的ARP表象,也就是說這個其他的廣播請求的接收者會把廣播者他的IP地址以及他的MAC地址作為表象,刷新到自己的ERP緩存當中去。
舉個例子,比如說在一個群里面,忽然有個人跳出來說我是你是,我的電話是多少,實質上它是一個假的理事,這個時候所有其他人收到這條消息,就會把這個假的李四跟這個他的電話號碼存起來,如果我們要跟李四打電話的話,可能就會打到這個假的李四的電話手里面去,造成欺騙。這個廣播請求如果我們這個查詢方他發(fā)送的ARP請求當中攜帶的是錯誤的pd值,這個時候就構成了欺騙,就污染了大家的ARP緩存。我們再來看應答,ARP的應答是單波應答它是無狀態(tài)的,無狀態(tài)就是說這個請求和應答之間并沒有明顯的對應關系,甚至可以是無問自答,也就是說當前沒有節(jié)點在查詢的情況下面,節(jié)點可以主動的來進行應答,這個信息也會被認為是有效的信息。還可能出現(xiàn)張冠李戴,本來是在查詢 B組機的MAC地址,結果這個時候 C組機可以出來應答,然后把自己的MAC地址報告給查詢方,這個時候就會造成查詢方誤認為這個 C主機就是B主機,這就造成了欺騙。
這里我們通過一個簡單的事例來看一下ARP的欺騙過程,這是一個簡單的局域網(wǎng),網(wǎng)關上面有兩臺主機A和B。正常情況下面主機要跟外網(wǎng)進行通信,它的所有的數(shù)據(jù)流都會經過網(wǎng)關進行轉發(fā)。假設在這個網(wǎng)絡當中A主機是攻擊者,A主機想要監(jiān)聽我們B組機的全部的通信,這個時候 A主機就可以直接給B主機發(fā)送一個ARP應答報文,把網(wǎng)關的IP地址也就是10.0.0.1與自己的MAC地址發(fā)送給主機B。主機B收到這個應答ARP報文之后,就把這個報文當中對應的 IP和MAC更新到自己的ARP緩存,這個時候主機B它就會誤認為A主機就是它的網(wǎng)關,后續(xù)他就會把所有的數(shù)據(jù)包都發(fā)送給這個假網(wǎng)關讓假網(wǎng)關,幫他進行路由轉發(fā),這個時候就構成了ARP欺騙,A主機就可以實現(xiàn)對B主機通信的監(jiān)聽。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WMi0fJyu-1687880215518)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg)]
3.15 拒絕服務攻擊
接下來我們來了解一下另外一種典型的網(wǎng)絡攻擊方式,拒絕服務攻擊。
有一個事例,前些年聽說有一個軟件,叫做“忽視你”。通過這個軟件可以不斷給用戶的手機打電話,讓用戶的手機沒辦法正常的接聽,這個時候就造成了對該手機用戶的拒絕服務。拒絕服務攻擊是攻擊者使用某種手段讓目標主機或者網(wǎng)絡停止向合法用戶提供正常的訪問或者服務。
拒絕服務的目的通常有如下三種:
第一種是破壞組織的正常運行,這個可以用于打擊競爭對手,把同行業(yè)的競爭對手干垮了,這個時候自己的服務就可以得到更多的用戶。
第二類是癱瘓服務器,以便黑客冒充我們前面介紹的 DNS欺騙攻擊,我們攻擊者如果要去假冒DNS服務器的話,可能首先需要把真正的服務器攻擊到,才能更好的去冒充。
第三類是啟動木馬,我們攻擊者在安裝了木馬之后,必須要把木馬啟動起來,它才能夠去破壞去攻擊。這個時候怎么樣來啟動目標主機,常用的一種方式就是通過拒絕服務攻擊去把目標主機給強制重啟。
我們接下來看一下拒絕服務攻擊的基本模式拒絕服務攻擊有多種模式。
第一種是資源,耗盡型就是消耗資源,信息系統(tǒng)當中有很多資源典型的網(wǎng)絡帶寬、磁盤空間和CPU內存資源等。網(wǎng)絡帶寬資源攻擊者有意的制造大量的數(shù)據(jù)包或者傳輸大量的文件,消耗有限的網(wǎng)絡帶寬,致使合法用戶無法正常的使用網(wǎng)絡。第二類消耗磁盤空間,攻擊者在短時間內制造大量的垃圾數(shù)據(jù),急速的消耗存儲資源,使系統(tǒng)和用戶因沒有磁盤空間而停止工作。
還有消耗CPU和內存資源,利用系統(tǒng)存在的缺陷,過度的使用CPU,內存資源,導致系統(tǒng)的服務性能下降,甚至造成系統(tǒng)的崩潰。
我們再來看配置修改型,拒絕服務,計算機系統(tǒng)包括網(wǎng)絡,如果配置不當?shù)脑?,可能會造成系統(tǒng)網(wǎng)絡沒法正常的運行,攻擊者可以通過改變或破壞系統(tǒng)的配置信息,阻止合法用戶使用計算機系統(tǒng)或者網(wǎng)絡。
漏洞或策略利用型拒絕服務,它們可以利用目標系統(tǒng)或通信協(xié)議的漏洞,或者是安全策略來實施拒絕服務攻擊。很多系統(tǒng)的登錄都有相應的策略限制用戶的登錄次數(shù),或者說試探次數(shù),以避免攻擊者對用戶進行口令猜測,這個時候攻擊者就可以利用這個策略來實施對用戶賬戶的拒絕服務,有益的輸錯口令,導致系統(tǒng)鎖定用戶的賬號。
還有一種物理實體破壞型的拒絕服務,它是通過破壞或者改變系統(tǒng)或網(wǎng)絡部件實現(xiàn)拒絕服務。例如,物理臨近破壞計算機,路由器,網(wǎng)絡配線時,主干網(wǎng)段的電纜電源冷卻設備等等。
3.16 典型拒絕服務攻擊
下面我們來介紹幾種典型的拒絕服務攻擊,包括land pin of death,tear drop,Sean flood。
首先我們來看NAND,又叫自我手攻擊,是向目標主機發(fā)起一個特別的TCP連接請求,也就是發(fā)起一個三次握手的第一次握手。它結合了一個IP欺騙,把受害者的IP作為這個請求的源IP,所以該請求就會造成目的IP和原IP是相同的情況。這會導致目的主機向自己發(fā)送這個應答,形成第二次握手,這個第二次握手又來進行應答,產生第三次握手都是跟自己在握手,從而創(chuàng)建一個空的連接。這個空的連接后續(xù)由于沒有這個正常的通信,也自然沒有一個主動的斷開連接的請求,所以每一個這樣的連接都會被保留到超時。這里有一個示意圖,一張小狗在追著自己的尾巴空耗體力,這個就好比是我們這個 land攻擊自己跟自己握手,然后消耗網(wǎng)絡資源。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-tdhdCnHs-1687880215518)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg)]
這個攻擊的影響會造成許多UNIX系統(tǒng)崩潰,而windows系統(tǒng)往往會變得極其的緩慢,大約會持續(xù)5分鐘。
我們再來看ping of death又叫做死亡之聘,許多早期的操作系統(tǒng)版本會限制網(wǎng)絡數(shù)據(jù)包的最大長度,比如說tcpip協(xié)議,它的IC MP包最大為64KB這個64是IP包的頭部當中的認識字段來制定的認識字段兩個字節(jié)正好16位,最大值就是65535。我們來看一下IP分片的示意圖,當IP數(shù)據(jù)包的數(shù)據(jù)部分比較大的時候,我們就可以把這個數(shù)據(jù)部分分成若干個分片,每個分片攜帶一個獨立的IP、包頭,除了進入這個原目的IP地址之外,還要記錄這個分片在整個數(shù)據(jù)部分它的偏移量以及這個分片的長度,以便我們接收端收到這些數(shù)據(jù)包之后進行這個重組ping of death攻擊,它會改變我們最后一個分片的正確偏移量和這個段長度,造成我們接收端在重組這個分片報文的時候,總長度超過64KB,從而導致內存分配錯誤。整個TCP協(xié)議站崩潰時機。
Tear drop,又叫類d這個攻擊是向攻擊目標發(fā)送多個分片重疊的IP包,它也是利用IP分片,某些操作系統(tǒng)在收到分片重疊的IP包時會崩潰和重啟。例如有一個40個字節(jié)的數(shù)據(jù)報,被分成了兩個分片,第一個分片發(fā)送036個字節(jié),正常情況下面第二個分片就應該是剩下的3739這幾個字節(jié),這個時候錯誤的分辨。第二個分片發(fā)送24~27個字節(jié),在某些情況下面,這個重疊的分片就會破壞整個IP協(xié)議站造成系統(tǒng)的重啟。
接下來我們來看一下Sean flood的攻擊,這個攻擊會結合IP欺騙,攻擊者會偽造大量的IP地址,然后向受害者發(fā)起三次握手的第一次握手,發(fā)起一個s彎的請求,受害者收到這個第一次握手請求之后,他就會進行應答,發(fā)起第二次握手。由于我們這個請求的原ip地址是偽造的,所以受害者自然等不到第三次握手。這個時候受害者他會以為我們第二次握手被網(wǎng)絡傳輸傳丟了,這個時候它會等一個比較短的時間片,比如說第一次三秒,然后再來重傳這個第二次握手的硬大包,自然這個應答也是不會得到響應的,這個時候受害者會把等待時間加倍,如此循環(huán)5次,大概我們這個受害者會等待98秒的時間。如果有大量這樣的請求,受害者會維持很多這樣的半連接,每個連接都會耗時大概98秒,這樣就會造成受害者大量的網(wǎng)絡資源消耗,從而造成拒絕服務。
我們再來看Smurf反射攻擊,這種攻擊會找出網(wǎng)絡當中會回應我們ICMP Echo request的路由器,然后以受害者的IP,像路由器廣播地址發(fā)送ping包,也就是發(fā)送 icmpa口request請求包,實際上就是假冒成受害者向路由器發(fā)送這個請求路由器會廣播這個 Ping包,把它廣播到對應的詞網(wǎng),對應值網(wǎng)當中的主機收到這個聘廣播的設備,他們會同時向這個受害者進行應答,這個時候大量的應答會同時的到達受害者,從而將受害者他的網(wǎng)絡帶寬耗盡,把它淹沒,造成拒絕服務。
剛才介紹的幾種典型拒絕服務攻擊的防御方法的特征是比較明顯的,相對來說防御起來也比較的容易,爛的攻擊可以通過打補丁的方式加固協(xié)議戰(zhàn),也可以在收到數(shù)據(jù)包的時候,我們做一個比對,我們丟棄源和目的IP地址相同的這些包,ping of death我們可以通過打補丁,也可以通過防火墻來進行攔截。Teardrop也是一樣的,我們可以加入一些條件判斷,我們來判斷一下是否存在 IP分片錯誤的這些包,然后把它給丟棄,然后也可以打補丁加固血液站。Smurf是利用廣播利用反射,這個時候就可以攔截廣播,從而攔截這種攻擊。Sean Flood的攔截來說相對比較困難,因為他發(fā)起的攻擊包每個包單個來看的話,它就是三次握手的第一次握手一個連接建立的請求,這個是不太具有明顯的攻擊特征的。針對這種攻擊,我們往往會提高受害者或者被攻擊一方它的抗擊打能力,讓它能夠消化更多的攻擊流量。
接下來我們學習一般的拒絕服務攻擊的防御策略。對于網(wǎng)絡而言,我們可以配置路由器和防火墻,減少拒絕服務攻擊的危害,還可以部署入侵檢測系統(tǒng),及時的檢測異常行為。對系統(tǒng)而言,我們可以升級系統(tǒng)內核,打上必要的補丁,然后關掉不必要的服務和網(wǎng)絡組件,如果有些配額功能的話,我們要進行正確的設置,同時我們還要監(jiān)視我們系統(tǒng)的運行,避免降低到這個極限以下,然后檢測系統(tǒng)配置信息的變化。我們還要保障我們物理上面的安全,然后建立備份和這個合理的恢復機制,以便在系統(tǒng)被攻破的時候我們進行恢復。
3.17 分布式拒絕服務攻擊
接下來我們介紹 DDOS。分布式拒絕服務攻擊拒絕服務攻擊,它是一對一的一種方式,早期它的效果比較明顯,但是隨著攻擊目標抗擊打能力的提升,對惡意攻擊包的消化能力加強,拒絕服務攻擊他的困難程度逐漸加大。特別是計算機的處理能力增強了,內存增加了,網(wǎng)絡帶寬提高了,比如攻擊軟件,如果每秒能夠發(fā)送3000個攻擊數(shù)據(jù)包,目標主機或者網(wǎng)絡帶寬每秒可以處理1萬個攻擊包,這樣一來這個攻擊就產生不了什么效果。普通的拒絕服務攻擊,它的攻擊效果越來越差,所以后來就發(fā)展出了DDOS攻擊,分布式拒絕服務攻擊。這種攻擊會入侵并控制若干存在安全漏洞的計算機,作為傀儡和肉雞,把他們聯(lián)合起來作為攻擊的平臺,形成僵尸網(wǎng)絡。我們前面講過的導致半個美國掉線的僵尸網(wǎng)絡,有數(shù)千萬個 IP節(jié)點。分布式拒絕服務攻擊往往采用客戶端服務器的模式及技術,在肉機上面安裝代理程序,而攻擊者安裝主控程序,攻擊者通過主控程序與這個肉雞上的代理程序通訊,然后發(fā)起攻擊指令,操縱這些大量的傀儡主機,同時對一個或多個目標發(fā)動拒絕服務攻擊。這個主控程序能夠在幾秒內激活,成百上千個代理程序運行,成倍的提高,拒絕服務攻擊的為例。
分布式拒絕服務攻擊的過程可以分為兩大步驟,
第一是發(fā)展團隊,攻占代理主機,探測掃描大量主機,以尋找可以被入侵作為肉雞的主機。第二步就是入侵這些具有安全漏洞的主機取得控制權。
接下來是協(xié)同向目標發(fā)起攻擊,安裝攻擊所需要的客戶競爭或者守護競爭,然后通過主控端向這些客戶進程發(fā)起命令,操縱這些代理主機進行協(xié)同的攻擊。
今天很多黑產鏈以及暗網(wǎng)當中也在售賣成型的江蘇網(wǎng)絡,只要去購買或者租用這些僵尸網(wǎng)絡,就可以發(fā)起分布式拒絕服務攻擊。
這里我們來簡單看一下分布式拒絕服務攻擊的簡單示意,攻擊者首先去發(fā)展大量的傀儡主機,然后去安裝這個代理程序,接下來攻擊者就可以向攻擊代理發(fā)送指令,讓他們同時向目標系統(tǒng)發(fā)起攻擊,發(fā)送大量的比如虛假的連接請求,消耗攻擊目標的資源,造成他的拒絕服務。分布式拒絕服務攻擊有很多工具,這里我羅列了幾個同學們下來可以自己去學習一下,分布式拒絕服務攻擊的防御是一個難題,我們可以采用本地防御,通過分布式集群加負載均衡,我們部署多臺服務器形成集群,然后提升節(jié)點的攻擊承受力,如一個節(jié)點受攻擊,無法提供服務,系統(tǒng)可以自動的切換到另外的節(jié)點。另外我們還可以進行異常流量的清洗,我們不熟分布的拒絕服務硬件防火墻來清洗異常流量。還可以使用高仿智能的DNS解析服務。智能的根據(jù)用戶的上網(wǎng)線路,將這個DNS解析請求解析到用戶所屬的網(wǎng)絡服務器,分擔服務器的壓力。另外,還可以用它當機檢測,隨時將癱瘓的服務器智能的更換到正常的服務器。我們還可以租用第三方的云清洗服務,通過第三方的服務,把 Dns攻擊的流量進行一定程度上的清洗,從而緩解他的攻擊壓力。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-sOvHH8YZ-1687880215519)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg)]
3.18 緩沖區(qū)溢出攻擊
這一節(jié)我們來介紹緩沖區(qū)溢出攻擊,緩沖區(qū)溢出攻擊是最大的網(wǎng)絡安全威脅之一,大部分的網(wǎng)絡蠕蟲都是利用緩沖區(qū)溢出進行攻擊和傳播的。比如1988年莫里斯從就是我們世界上第一個利用緩沖區(qū)溢出進行的攻擊。生活當中也有緩沖區(qū)溢出的例子,比如我們大家使用的水杯水桶都是用來裝水的緩沖區(qū),如果我們在裝水的時候,不管水杯水桶的容量而裝入超出它容量的水的話,就會產生溢出,打濕桌面地面和衣物造成破壞。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-a0Gl2p0M-1687880215520)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image030.gif)]
接下來我們首先看一下緩沖區(qū)溢出攻擊的相關概念。首先緩沖區(qū)是我們程序用于保存用戶數(shù)數(shù)據(jù)臨時數(shù)據(jù)的內存空間,通常是在我們程序的堆棧當中分配的函數(shù)的局部變量數(shù)組等。
緩沖區(qū)通常是我們在編程的時候程序員預先分配,然后當程序運行起來之后,我們再來使用這些緩沖區(qū)在里面存取數(shù)據(jù)。緩沖區(qū)溢出漏洞就是程序不對,輸入的緩沖區(qū),數(shù)據(jù)的長度做限制,這個時候超出的數(shù)據(jù)就會覆蓋程序,為其他數(shù)據(jù)分配的內存空間造成溢出。緩沖區(qū)溢出最常出現(xiàn)在C、C++編寫的程序當中,成因主要有兩個,一個是這兩個語言,他們讓程序員自己來管理內存,程序員往往安全意識比較淡薄,總是假設我們緩沖區(qū)當中輸入的數(shù)據(jù)長度與我們緩沖區(qū)的空間是相匹配的,不會溢出。第二個原因就是歷史遺留問題,我們今天的網(wǎng)絡信息系統(tǒng)當中還包含了大量的歷史遺留代碼,他們仍然在發(fā)揮著作用,這些代碼在編寫之初,那個時候計算機的內存資源是比較匱乏的,程序員為了節(jié)省內存資源,壓縮程序代碼,部編寫對輸入緩沖區(qū)的數(shù)據(jù)長度做匹配和限制的代碼,從而造成了緩沖區(qū)溢出的漏洞。
這里我們來看一個簡單的緩沖區(qū)溢出事例,這兒是一個c語言的簡單程序,程序當中首先定義了1個8個字節(jié)的str字符數(shù)組,接下來又定了一個叫input的有256個字節(jié)的數(shù)組。再接下來用get這個函數(shù)從鍵盤輸入了一個字符串到input當中,接著用str copy串拷貝函數(shù),把我們input當中剛才輸入的字符串把它復制到str這個串當中,然后程序結束了。這個程序我們運行的時候,如果輸入的字符串長度是小于或等于8個字符的,這個時候這個程序運行是沒有問題的。把這個程序運行完,并且輸入了超過8個字符的字符串,這個時候會發(fā)生下面這個現(xiàn)象,程序停止工作,這個就是造成了緩沖區(qū)溢出,并且讓程序崩潰。我們來分析一下為什么會產生這個原因?我們這個程序代碼當中定義了兩個緩沖區(qū)str跟input,我們在input當中裝入了字符串之后,然后用串拷貝string copy這個函數(shù),把input當中的字符串把它裝到str這個緩沖區(qū)當中。由于str只有8個字符,而這個始終copy這個函數(shù),這個 String copy函數(shù)在進行字符串復制的時候,它不檢查這個原創(chuàng)input的長度跟我們目的串str的長度是否匹配,是否超出直接往里面裝數(shù)據(jù)。當這個原創(chuàng)的長度超過目的串的這個容量的時候,就造成了緩沖區(qū)的溢出,從而污染內存,造成程序崩潰。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UHkhgyJK-1687880215520)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg)][外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5QDYjY7c-1687880215520)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg)]
接下來我們來說一下緩沖區(qū)溢出攻擊,緩沖區(qū)溢出攻擊是利用目標程序當中的緩沖區(qū)域出漏洞,然后向這個緩沖區(qū)當中寫入超出其長度的內容,造成緩沖區(qū)溢出,從而改變程序的執(zhí)行流程,跳轉執(zhí)行其他的代碼或者程序。緩沖區(qū)溢出攻擊,它的攻擊效果可以分為兩個層次。一個層次就是我們剛才看到了一個事例當中的破壞程序的堆棧,讓程序終止運行,產生一個拒絕服務的效果。這個是超出的這個部分,它會寫入或者覆蓋我們程序堆棧當中的其他的空間,然后破壞程序的堆棧,然后使程序崩潰。第二個效果就是在第一個效果的基礎之上,然后使程序發(fā)生一個跳轉,或者叫做重定向到其他的指令,主要是通過溢出來改變函數(shù)的返回地址,讓其指向其他的指令或者惡意代碼,比如說指向這個注入的CFO的,然后獲得系統(tǒng)的這個操作權限。什么是c2CAll的?Cea kod是一個軟件漏洞,利用代碼,經常讓攻擊者獲得一個縣而得名。這個線是一個交互式的操作界面,我們在使用windows的時候,我們敲入cmd這個命令會彈出一個命令行提示的一個窗口,在這個窗口當中我們可以敲入各種各樣的命令,讓操作系統(tǒng)執(zhí)行相應的操作。而我們很多這個操作系統(tǒng),比如說unix Linux,還有一些很多服務器,實際上都是使用share來進行操作的,這個 share這個操作雖然不如圖形界面窗口來的直觀和方便,但是它的運營效率是比較高的,所以深受很多程序員和系統(tǒng)管理人員的喜愛。所以對攻擊者來說,通過緩沖區(qū)域出漏洞,然后獲取了這個 share,實質上就獲取了目標系統(tǒng)的操作權控制權。這里我們用這樣一張圖來說明一下緩沖區(qū)溢出攻擊的流程,這里有一個攻擊者,以及一個遠程的提供了遠程服務的被攻擊系統(tǒng),攻擊者首先找到遠程系統(tǒng)當中可利用的緩沖區(qū)溢出漏洞,
然后往這個漏洞當中去注入惡意的數(shù)據(jù),這個惡意的數(shù)據(jù)到達了被攻擊系統(tǒng)的緩沖區(qū)之后,就產生了緩沖區(qū)溢出,然后通過溢出重定向到攻擊程序,然后執(zhí)行相應的攻擊程序,這個攻擊程序執(zhí)行之后,攻擊者就獲得了一個遠程的控制權,然后他就可以通過這個遠程的控制權去任意的執(zhí)行我們被攻擊系統(tǒng)上面的程序,執(zhí)行相應的操作。
接下來我們介紹一下緩沖區(qū)溢出攻擊的危害性,在UNIX平臺Linux平臺通過緩沖區(qū)溢出攻擊,可以獲得一個向我們剛剛提到獲得希爾實質上就獲得了控制權,而在windows平臺可以上載并且執(zhí)行任何的代碼。當然這個緩沖區(qū)溢出攻擊的話,它這個發(fā)掘需要較高的技巧和知識性,但是一旦有人編寫出了緩沖區(qū)溢出的代碼,并且發(fā)現(xiàn)了可以利用的緩沖區(qū)域出漏洞,使用起來就非常的簡單。與其他類型的攻擊相比而言,緩沖區(qū)一出攻擊不太需要太多的先決條件,它的殺傷力很強,然后技術性也更強。另外緩沖區(qū)溢出攻擊,它可以穿透防火墻,因為我們緩沖區(qū)域處攻擊通常是攻擊的,提供了遠程服務的這樣一些程序,所以從防火墻的視角來看,攻擊的流量實際上它是嵌入到提供遠程服務的這些程序的流量當中,具有較強的隱蔽性。
3.19 緩沖區(qū)域處攻擊的原理
接下來我們分析一下緩沖區(qū)域處攻擊的原理。緩沖區(qū)溢出攻擊主要發(fā)生在函數(shù)的調用及返回過程當中,然后主要也是利用了編譯器對函數(shù)調用的管理的漏洞進行的。
所以首先我們來看一下函數(shù)的調用過程及管理。我們高級語言編寫的程序通常都包含了若干的函數(shù)調用,比如c語言我們編寫的時候,必須要編一個main函數(shù),所以 c語言至少會包含一個函數(shù)調用,編譯器,使用堆棧來管理函數(shù)的調用。怎么樣來管理?編譯器會記錄每個函數(shù)的執(zhí)行環(huán)境活動,然后在堆棧當中形成一個棧,這個棧當中具體就包含了參數(shù),函數(shù)返回地址和我們函數(shù)的局部變量。當函數(shù)返回的時候,會從這個棧當中去取回這個返回地址,然后同時把這個棧釋放了,然后再根據(jù)這個返回地址去找到相應的后續(xù)要執(zhí)行的代碼,然后再來執(zhí)行相應的代碼。
下面的左圖這個簡單的程序調用的過程,程序在main函數(shù)當中,首先調用了a函數(shù),
然后進入a函數(shù)運行,然后在中間又調用了b函數(shù),這個時候程序的運行就轉移到b函數(shù)當中去運行,當b函數(shù)執(zhí)行完了之后,它就要進行函數(shù)的返回,返回到什么地方?返回到a函數(shù)當中,調用b函數(shù)的后面的程序,然后這個 A函數(shù)調用完了之后,又進一步的再返回到main函數(shù)當中,執(zhí)行后續(xù)的main函數(shù)當中的部分。右圖是我們一次函數(shù)執(zhí)行過程當中形成的一個棧,我們可以看到棧的最下面是函數(shù)的參數(shù),然后接下來存放函數(shù)的返回地址,然后在上面是堆棧的基礎,在上面是函數(shù)的局部變量,這個局部變量就是緩沖區(qū)所在。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aV0jU5Mh-1687880215521)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image036.gif)][外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xKX3iN0d-1687880215521)(file:///C:/Users/libin/AppData/Local/Temp/msohtmlclip1/01/clip_image038.jpg)]
緩沖區(qū)溢出攻擊主要是在程序內存的堆棧段當中進行,但實質上堆和站是兩個不同的區(qū)域,我們這里重點講解戰(zhàn)當中進行的緩沖區(qū)溢出攻擊,在棧當中溢出的緩沖區(qū)攻擊,它的原理是這樣的,首先攻擊者找到存在溢出漏洞的緩沖區(qū),也就是某些函數(shù)的局部變量,然后通過往這些局部變量當中寫入超出其長度的數(shù)據(jù)溢出緩沖區(qū),然后這個溢出會修改我們堆棧當中的函數(shù)返回地址,并且讓這個函數(shù)的返回地址指向攻擊代碼,也就是說用這個攻擊代碼它的地址去覆蓋我們函數(shù)的返回地址。這個時候當函數(shù)返回的時候,程序就會取到這個被篡改后的返回地址而返回,這個時候這個篡改后的返回地址就會去觸發(fā)攻擊代碼,從而執(zhí)行攻擊代碼。
我們前面提到緩沖區(qū)溢出攻擊它的技術性較強,這里我們來看一下緩沖區(qū)溢出攻擊的技術挑戰(zhàn)是什么?
緩沖區(qū)溢出攻擊的目標是遠程主機上的程序,遠程主機上的程序,它的內存空間和戰(zhàn)爭對我們攻擊者來說是不透明的,是不清楚的,所以有兩個關鍵的技術問題需要進行這個預估和這個測算。一個就是函數(shù)的返回地址,我們前面介紹攻擊實質上就是去改寫函數(shù)的返回地址,讓他去指向攻擊代碼,所以要改寫這個函數(shù)的返回地址,你首先你得把這個函數(shù)的返回地址存放的位置給找到,精確的對它進行定位。這個函數(shù)的返回地址我們可以把它叫做緩沖區(qū)域除攻擊的攻擊瞄準器,指哪打哪。第二個就是我們要用用攻擊代碼的地址去覆蓋函數(shù)的返回地址,而這個攻擊代碼往往也是存在于我們攻擊目標程序它的內存空間的,所以也要對這個攻擊代碼的地址進行精確的定位,從而才能夠去覆蓋函數(shù)返回地址,然后去觸發(fā)它。
3.20 緩沖區(qū)溢出攻擊的步驟
分析完了緩沖區(qū)溢出攻擊的原理以及它的技術挑戰(zhàn)。我們接下來看緩沖區(qū)溢出攻擊的步驟。
緩沖區(qū)域溢出攻擊的步驟可以分為兩大步,第一步是攻擊代碼的安排,可以采用代碼自助的方式,也可以利用已經存在的代碼。第二步是攻擊代碼安排好之后,我們再來修改程序的,流程控制也就是通過去改寫函數(shù)的返回地址,讓他去指向我們前邊安排好的攻擊代碼去觸發(fā)他,當然這兩步也可以合二為一,在一步當中完成代碼的置入和流程控制。攻擊代碼的安排就是解決攻擊代碼從何而來的問題。一方面可以采用代碼自助的方式,攻擊者通過遠程注入的方式,在存在緩沖區(qū)域出漏洞的緩沖區(qū)當中,然后去寫入事先準備好的攻擊代碼。另外攻擊者也可以利用目標程序當中已經存在的代碼,我們目標程序當中的代碼有些也是可以被我們攻擊者利用來發(fā)起攻擊的,主要是 exec函數(shù)的調用,exec函數(shù)族可以實現(xiàn)在一個進程當中去啟動另外一個程序的方法,實現(xiàn)這個程序的跳轉,這正好是我們緩沖區(qū)溢出攻擊想要達到的一個目的。
主要有兩類調用方式是可以被我們利用的。一種就是exec,這個往往是我們系統(tǒng)當中這個線程序它的位置,或者說它的路徑,執(zhí)行這條代碼就會在當前的進程當中去啟動線,那這正好是我們很多緩沖區(qū)運出攻擊所要想達到的目標,在當前的程序當中我們去啟動線,那就可以掌握系統(tǒng)的控制權。如果我們在目標程序當中沒有找到直接以兵線為參數(shù)的 exe函數(shù)調用,我們就可以找其他參數(shù)的exe函數(shù)調用。開始攻擊代碼安排好了之后,我們就可以通過修改程序的控制流程,然后讓它指向攻擊代碼,進而激活攻擊代碼。如何來修改程序的流程控制有三種方式:第一種是激活記錄,也就是溢出緩沖區(qū),用攻擊代碼的地址去覆蓋函數(shù)的返回地址,這是一種常用的方式。第二種就是函數(shù)指針,函數(shù)指針指向一個函數(shù),它可以定位任何的地址空間,并且這個地址空間它是可以被執(zhí)行的,我們就可以通過溢出函數(shù)指針附近的緩沖區(qū),從而修改這個函數(shù)的指針地址,讓這個地址指向攻擊代碼,從而這個函數(shù)指針被激活的時候,就可以去執(zhí)行攻擊代碼。第三種就是長跳轉緩沖區(qū),也就是通過長的跳轉來改寫程序的流程控制。c語言當中具有檢驗和恢復機制,當程序當中出現(xiàn)了異?;蛘甙l(fā)生故障的時候,我們可以跳轉到前邊的某一個正常的位置,然后再重復的執(zhí)行程序。這個檢驗和恢復機制主要利用setjmp結合longjmp進行程序異常處理。這兩個函數(shù)類似go to語句,但是go to通常跳轉范圍限定在一個函數(shù)的內部,而這個兩個函數(shù)配合可以實現(xiàn)跨躍函數(shù)范圍的跳轉。具體在使用的時候,三次降波函數(shù)它設定一個跳轉的位置,然后通過這個 long jump跟上一個參數(shù),實現(xiàn)這個跳轉。當longjump跟上這個參數(shù),例如buffer,這個時候就可以利用溢出去修改,使buffer指向攻擊代碼。這樣,當程序在執(zhí)行這個 long jump的時候,就會去跳轉到攻擊代碼,從而觸發(fā)攻擊代碼,實現(xiàn)攻擊。
如何移步完成代碼的置入和流程控制,可以在一個緩沖區(qū)當中置入攻擊代碼,并且繼續(xù)溢出,用這個攻擊代碼的地址去覆蓋函數(shù)返回地址,就同時完成了激活記錄,當然也可以同時這兩個緩沖區(qū)當中來溢出,然后實現(xiàn)代碼的自助和流程控制。
3.21緩沖區(qū)溢出攻擊的防御
接下來我們來看一下緩沖區(qū)溢出攻擊的防御技術緩沖區(qū)域出攻擊的防御技術分為如下幾類:
第一個是使用類型安全的編程語言和相對安全的函數(shù)庫;第二是修改編譯器;第三可以對內核打補丁;第四可以使用靜態(tài)分析方法和動態(tài)檢測方法;最后還有基于硬件的防御技術?,F(xiàn)在我們分別來看一下。
首先來看類型安全的編程語言,以及相對安全的函數(shù)庫。c語言和c++語言不夠安全,所以出現(xiàn)了其他的一些高級語言,比如Python等等更安全的語言。此外,我們還可以替換一些不安全的函數(shù),比如我們最開始的事例當中看到的串拷貝、string copy,都有相應的函數(shù)對它進行替代更安全一些。另外,同類的函數(shù)還有這個串連接的string counter,可以把它替換為strain encounter,而中間這個 en就代表我們在進行串的拷貝或者說連接過程當中,我們會進行這個量體裁衣。我們在拷貝或者在復制的時候,我們先看一下目標串有多長,然后再往里面去復制相應的數(shù)據(jù)。另外 print函數(shù)也是不夠安全的,這里也有安全的版本,s print函數(shù)可以對它進行替代。
再來看修改編譯器,一方面可以增強編譯器的邊界檢查能力,比如說針對gnuc編譯器可以擴展數(shù)組和指針的邊界檢查能力,另外 VOC加加點net的GS選項可以動態(tài)的檢測緩沖區(qū)的溢出。我們還可以對返回地址進行完整性的保護,我們開頭看到緩沖區(qū)域助攻機主要是去改寫返回地址,我們可以將返回地址備份那別的內存空間,然后在函數(shù)調用返回之前,再把這個備份的地址重新寫回堆棧,而從而從而避免被緩沖區(qū)溢出攻擊覆蓋和改寫。針對這個修改編譯器的攻擊防御方法,它也是有缺點的,一方面就是它具有性能的代價,我們修改這個編譯器難度還是比較大的。另外就是這種檢查方法目前仍然還是不夠完善的,還在進一步的發(fā)展當中。
我們再來看內核補丁這種防御技術。我們前面看到緩沖區(qū)域出攻擊,很多時候需要在緩沖區(qū)當中去置入攻擊代碼,然后觸發(fā)攻擊代碼的執(zhí)行,所以可以通過內核補丁將堆和站以及數(shù)據(jù)段等標注為不可執(zhí)行,這個時候即使攻擊者在當中埋伏了攻擊代碼,由于它不可執(zhí)行,所以也不能激活攻擊代碼。比如Linux的內核補丁o ppo rsx等等,就實現(xiàn)了不可執(zhí)行的對賬。內核補丁這種防御技術也是有它的缺點的,對于一些需要堆棧數(shù)據(jù)段為可執(zhí)行狀態(tài)的程序是不合適的。然后另外的話這種技術需要重新編譯我們原來的程序,如果原程序它只有可執(zhí)行代碼而沒有源代碼的話,那就不能獲得這樣一種保護。
我們再來看靜態(tài)分析方法,靜態(tài)分析就是對程序源代碼進行檢查,主要有質點檢查法和程序注解法,字典檢查法就是便利原程序,查找不安全的庫函數(shù)和系統(tǒng)調用。比如靜態(tài)分析工具,its4軟等等,就可以對CC加加等等語言的程序進行這個掃描和檢查,去發(fā)現(xiàn)是否存在不安全的庫函數(shù)和系統(tǒng)調用。這種方法也是有缺點的,通過工具來進行字典檢查,往往誤報率比較高,需要大量的人工配合進行檢查工作。
程序注解法就是利用工具讓程序員在編程的時候插入很多注解,包括緩沖區(qū)的大小指針是否可以為空輸入的有效約定等等,然后利用靜態(tài)分析的工具,然后結合這個注釋對源代碼進行掃描,去發(fā)現(xiàn)是否存在不安全的函數(shù),或者是否存在我們有漏洞的緩沖區(qū)。這個方法的缺點就是它非常依賴我們注釋注解的質量
再來看動態(tài)檢測法,動態(tài)檢測法就是讓程序運行起來去檢測,主要有兩種方法,一種是輸入檢測法,另外一種是CAnary base的檢測方法。輸入檢測法就是向我們程序提供不同的輸入,檢查是否有益處的情況,以及是否有內存越界。輸入檢查的工具有這個 Pure if I via the faced等等這樣一些工具。這種檢測方法的缺點就是我們輸入檢查,實際上是讓程序去運行,是一種動態(tài)的測試方法,這個方法它的開銷會比較大,可能會導致系統(tǒng)性能的明顯降低。輸入檢測法它的檢測效果取決于輸入是否能夠激發(fā)緩沖區(qū)溢出等安全問題的出現(xiàn)。
CAnary based檢測方法,CAnary就是一個檢測值,我們將CAlorie放到緩沖區(qū)和需要保護的數(shù)據(jù)之間,如果有攻擊對需要保護的數(shù)據(jù)進行了溢出的話,勢必會造成CAlorie被改寫。所以我們只需要檢測CAlorie是否被改寫,就可以檢測是否存在緩沖區(qū)溢出攻擊。比如說有些動態(tài)檢測工具,steak、god、steak、host等等都具有這樣的檢測功能。這個檢測方法的缺點是需要修改編譯器實現(xiàn)這個功能,需要重新的編譯程序。另外就是如果緩沖區(qū)溢出攻擊,它是可以繞開檢測值,通過溢出不同的緩沖區(qū)造成攻擊的話,那這種情況下面就無法檢測出來。
基于硬件的防御技術,有些我們計算機的硬件通過引入一些新的特性,可以對緩沖區(qū)溢出攻擊進行防御。比如英特爾和AMD的64位處理器引入了稱為nx,非執(zhí)行或者AVP高級病毒保護的新特性,將以前的CPU合為一個狀態(tài),存在的數(shù)據(jù)頁狀態(tài)分為了數(shù)據(jù)頁只讀和數(shù)據(jù)頁可執(zhí)行兩個獨立的狀態(tài),這樣的話我們就可以把堆棧設置為數(shù)據(jù)頁只讀的狀態(tài),從而避免在其中埋伏的攻擊代碼被執(zhí)行。另外 elf64、ctmvabi通過計算器來傳遞函數(shù)的參數(shù),而不是像原來一樣放在堆棧當中,那這樣的話就可以避免緩沖區(qū)溢出攻擊,對函數(shù)參數(shù)進行溢出。這種防御方法使得我們64位的處理器不僅可以抵制需要注入攻擊代碼的緩沖區(qū)溢出攻擊,還可以抵制return-to-libc的這類攻擊。
原創(chuàng)聲明
=======
作者: [ libin9iOak ]
本文為原創(chuàng)文章,版權歸作者所有。未經許可,禁止轉載、復制或引用。
作者保證信息真實可靠,但不對準確性和完整性承擔責任。
未經許可,禁止商業(yè)用途。
如有疑問或建議,請聯(lián)系作者。
感謝您的支持與尊重。文章來源:http://www.zghlxwxcb.cn/news/detail-507480.html
點擊
下方名片
,加入IT技術核心學習團隊。一起探索科技的未來,共同成長。文章來源地址http://www.zghlxwxcb.cn/news/detail-507480.html
到了這里,關于《計算機系統(tǒng)與網(wǎng)絡安全》 第三章 網(wǎng)絡攻擊預防與技術的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!