信息安全期末

一、ARP協議問題

1. ARP協議的作用是什麼。

32位IP地址和48位MAC之間的轉換。(廣播詢問,單播答覆)

2. 引入ARP緩存的功能是什麼。

將這一映射關係保存在 ARP 緩存中,使得不必重複運行 ARP 協議。

3. ARP緩存中毒的攻擊方法和效果是什麼。

  • 方法:因爲 ARP 緩存中的映射表並不是一直不變的,主機會定期發送 ARP 請求來更新它的 ARP 映射表,利用這個機制,攻擊者可以僞造 ARP 應答幀使得主機錯誤的更新自己的 ARP 映射表,這個過程就是 ARP 緩存中毒。
  • 效果:要麼使主機發送 MAC 幀到錯誤的 MAC 地址,導致數據被竊聽;要麼由於 MAC 地址不存在,導致數據發送不成功。
預防
(1)小型網絡
靜態IP地址和靜態ARP映射表。
(2)大型網絡
“端口安全” 功能是允許你強制使你的交換機在每個端口只允許 (IP地址對應的) 一個MAC地址通過。這個功能會阻止黑客改變他機器的MAC地址或試圖映射多個MAC地址到他的機器上。
(3)一般網絡
ARP監視工具,比如ARPwatch,當有不正常的ARP通信時它會提醒你。
# 攻擊前需要清除本機ARP緩存
arp -n                  #查看arp表
arp -d address          #刪除一個arp表項
arp -s address hw_addr  #設置一個arp表項

# -e爲MAC地址,-i爲被攻擊主機的IP地址,netwox是一個發包工具
netwox 80 --eth "00:00:00:00:00:00" --ip "192.168.224.134" 


二、IP協議安全問題

1. 爲什麼IP要進行分片?

考慮到效率和正確性,每一種物理網絡都會規定鏈路層數據幀的最大長度,稱爲鏈路層MTU。在以太網的環境中可傳輸的最大IP報文爲1500字節。

2. IP分片如何進行重組?

在IP頭裏面16bit的TOTAL LENGTH表示當前的分片長度。16bit的IDENT唯一記錄了一個IP包的標識符,用以確定分片是否屬於同一個數據包,具有同一個IDENT的IP分片纔會從新組裝。13bit的片偏移FRAGMENT OFFSET記錄了一個IP分片相對於整個數據包的位置。3bit的標誌位FLAGS記錄了該分片後面是否還有新的分片,第一位現在一般都是0,表示未使用)、第二位爲DF(don‘t fragment)、第三位爲MF(more fragment)。根據這三個數據段來進行重組。

3. 淚滴攻擊(teardrop)的原理是什麼?

原理,在於構造兩個分片。其中,第二個分片完全包含在第一個分片中。也即,第二個分片的FO大於第一個分片的FO,但是第二個分片的FO+ Len,都小於第一個分片最後一個字節的位置,也即第一個分片的FO+len。計算出end - offset爲負數。
攻擊的成功,依賴於一種當分片發生重疊時,主機使用第一個分片來覆蓋第二個分片的重疊內容。

防範:丟棄FO == 1片段;限制最小數據傳輸大小。

4. 包過濾防火牆,通過過濾SYN包,防止外部鏈接。攻擊者可以如何繞過這個過濾?

利用微小碎片攻擊。由於每個互聯網模塊最小能夠轉發68個八位字節的數據報,不允許進一步分段。這是因爲IP頭部最多可達60個八位字節,最小片段爲8個八位字節。而重要的傳輸頭信息(例如,TCP頭的CODE字段)可能超出了第8個數據八位字節。這就可以構造一個68字節的IP數據報分片,數據部分只有8字節,而包含控制位SYN信息的數據部分(SYN TCP數據報中控制位爲頭部的13字節之後)在第二個分片中,這樣就可以通過第一次包過濾,不檢查之後的數據包信息。



三、ICMP協議安全

1. 什麼是SMURF攻擊?如何防止?

Smurf攻擊是一種分佈式拒絕服務攻擊,其中使用IP廣播地址將具有預期受害者的欺騙源IP的大量互聯網控制消息協議(ICMP)分組廣播到計算機網絡。 默認情況下,網絡上的大多數設備都會通過向源IP地址發送回覆來對此做出響應。 如果網絡上接收和響應這些數據包的機器數量非常大,受害者的計算機將忙於處理ping回覆包。 這可能會使受害者的計算機變慢,無法繼續工作。

預防:(1)配置各個主機和路由器不響應ICMP請求或廣播;(2)配置路由器不轉發定向到廣播地址的數據包。 

2. 什麼是ICMP重定向攻擊?如何防止?

主機假設路由器的信息更權威,當主機ICMP重定向功能開啓時,攻擊者冒充默認網關,給目標主機發送ICMP重定向報文,報文中的重定向地址爲虛假不可達的、網絡不通的或攻擊者主機的地址。當目的主機收到ICMP重定向報文後,就會對路由表進行添加、修改,將重定向的IP地址設置爲指定目標之間的通信網關IP地址,使得通信失敗或者攔截通信數據包。

預防:
(1)網關端:變長子網掩碼劃分網段;使用網絡控制列表(ACL)和代理。
(2)主機端:關閉ICMP重定向(accept_redirects);可以使用防火牆等過濾掉ICMP報文,或使用反間諜軟件監控;結合防ARP、IP欺騙等進行防禦。 
# ICMP重定向攻擊,-f爲過濾器,-g爲重定向的網關IP,-i爲原來的網關IP
$ sudo netwox 86 -f "host ${被攻擊主機ip地址}" -g "${新指定的網關ip地址}" -i "${當前網關ip地址}"


四、TCP協議安全

1. 什麼是SYN flooding攻擊?效果是什麼?如何防止?

利用TCP三次握手的原理。當應用開放了一個TCP端口後,該端口就處於偵聽狀態,不停地監視發到該端口的SYN報文,一旦接收到SYN報文,就需要爲即將建立的TCP連接分配TCB(Transmission Control Block),通常一個TCB需要280~1300個字節;並且進入半開連接狀態,也即收到SYN包而還未收到ACK包時的連接狀態。操作系統實現的最多可開啓的半開連接個數是一定的,譬如512,而受到內存的限制,可能還達不到這個數字。

效果:如果半開連接的個數過多,就會消耗掉可用的內存,使得新的正常的連接請求不能被處理或者處理的非常慢。

預防:
(1)SYN Cache。每次來了SYN包,那麼就在SYN Cache隊列中生成一個項,保持一些基本信息;然後在收到ACK時檢查SYN Cache隊列,如果能找到合適的項,那麼開始建立TCP連接,然後刪除SYN Cache中的項。
(2)SYN Cookie。在ACK到達之前不分配任何資源,服務器構造TCP SYN + ACK數據包中的seq爲特定的初始值,即SYN Cookie。
sudo netwox 76 -i ${攻擊IP地址} -p ${端口號}

2. 端口掃描的原理是什麼?

首先一個個地嘗試與一些端口的連接,如果端口有響應,並且能夠建立起連接,那麼就能夠判斷得出來,這個端口是open的,之後主動發出RST中斷即可。如果是close的端口,那麼會收到主機主動的發送一個RST數據包。

3. namp -sS和nmap -sT的區別是什麼?

tcp connect(-sT)掃描,和TCP SYN(半開-sS)掃描。可以判斷三種狀態。
普通權限會建立了連接,連接記錄被主機log下來;超級權限下可以只發送第一次握手數據包,之後RST,不會建立完整的連接。

4. nmap -sA掃描的原理是什麼?

作用是判斷端口有沒有被過濾。
nmap會構造一個ACK數據包(設置A。CK位)併發送給目的主機的某一端口。對於端口,不管是開放的還是關閉的,如果收到一個不請自來的ACK數據包,都會發一個RST包。而如果端口被防火牆過濾了,則不會對該數據包作出響應。

補充:nmap -sF/-sX/-sN作用是驗證端口是否關閉,關閉時回覆RST,打開和過濾不回覆。namp fragment掃描(-f)將數據包拆分成若干個。

5. nmap idle掃描的原理是什麼?

每發一個IP數據包,很多操作系統對identifier字段簡單地增加1;
(1)發送SYN/ACK探測Zombie的RST中IP ID並記錄下來;
(2)掃描這個RST數據包,並僞造Zombie主機發送SYN數據包給目標主機。目標端口開啓,Zombie主機會給目標主機發送一個RST,IP ID加1;端口關閉或過濾,則會忽略收到的RST;
(3)再探測Zombie主機的IP ID,比較兩次得到IP ID值。如果IP ID多了2則表示目標端口開啓,多了1表示目標端口關閉,大於2表示多發了數據包。

註明:隱蔽且可以繞過防火牆,但是無法區分端口關閉和過濾的情況。



五、防火牆。

1. iptables是狀態防火牆。狀態防火牆相比於包過濾防火牆的優點是什麼?

  • 包過濾防火牆
    通過ACL(Access Control List)規則控制數據流的。IP數據包中最明顯最核心的五元素就是,源地址、目標地址、協議、源端口sport、目標端口dport。包過濾主要也就是根據這些包頭部的元素進行判斷。

    缺點:是1. 難以處理分片【IP碎片攻擊】。2. 不支持某些複雜的協議。3. 不能防止應用層等惡意攻擊,原因很簡單,因爲它根本不識別應用層的數據。

  • 應用級網關代理防火牆
    優點:對數據的控制直接上升到應用層,對數據包檢測非常充分。
    缺點:同時爲了實現這一點,對於每一個服務應用,寫要編寫特定的安全代理程序,也即相應的客戶端與服務器端程序。

  • 狀態檢測防火牆/動態包過濾防火牆
    通信過程中的會話數據包不是一個個完全獨立的數據包,而是有前後連接狀態的。在接收到連接建立請求時,就可以建立一張表,在表中存儲相關的各個連接的信息,建立連接狀態規則,基於這個表對進入和出去的數據包進行匹配。

    優點:由於不需要對每個數據包進行規則檢查,而是一個連接的後續數據包直接進行狀態檢查,從而使得性能得到了較大提高;而且,由於狀態表是動態的,因而可以有選擇地、動態地開放關閉端口,使得安全性得到進一步地提高;隔離客戶端和服務器,充當代理。

2. NAT的作用是什麼?

NAT(網絡地址轉換)是一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。因此NAT在一定程度上,能夠有效的解決公網地址不足的問題。

NAT表用於IP地址或端口的轉換,一般用於共享上網或特殊端口的轉換服務。(s/d/pnat,地址/目標地址/目標端口轉換)

3. sudo iptables –P INPUT DROP; iptables -A INPUT -p tcp --sport 80 -j ACCEPT 這兩條語句的作用是什麼?

(1)在INPUT鏈中制定丟棄/過濾所有目的地址是本機的數據報的策略;(-P,制定鏈表的策略)
(2)在INPUT鏈尾增加一條過濾規則,接收目的地址是本機,源端口是80的tcp數據包。(-A,追加新規則於指定鏈的尾部)

TYPE(8-bit): identifies the message,可以用於–icmp-type類型
0:Echo Reply (ICMP Echo即ping)
3:Destination Unreachable
5:Redirect (change route)
8:Echo Request

filter的五條鏈:
在這裏插入圖片描述
PREROUTING鏈(處理目的地址)上一般的動作是DNAT,而POSTROUTING鏈(處理源地址)上的動作一般是SNAT。



六、Rootkit

1. 什麼是rootkit?

Rootkit是一種黑客安全工具,用於捕獲進出計算機的密碼和消息流量,允許黑客爲系統提供後門,掩蓋系統被破壞的事實,等等。其三要素是:隱藏、操縱、收集數據。
Rootkit的作用在於“能維持root權限的一套工具”。它的目的是隱藏自己以及惡意程序,達到長期在目的主機存在並收集信息的目的。Rootkit一般和後門等程序結合使用,幫忙隱藏後門的蹤跡。

2. LKM的好處是什麼?

可加載內核模塊(Loadable Kernel Module,LKM),是一段運行在內核空間的代碼,可以動態熱加載,可以訪問操作系統最核心的部分。
不用重新編譯內核和重啓系統。
優點:動態加載,在不重編譯內核和重啓系統的條件下對類Unix系統的系統內核進行修改和擴展。否則的話,對Kernel代碼的任何修改,都需要重新編譯Kernel,大大浪費了時間和效率。

補充——權限:
當用戶需要改變權限的時候,就需要更換用戶ID或者組ID。爲了實現這種機制,引入了真實UID(real UID)、有效UID(effective UID)以及 保存的UID(saved set-user-ID)的概念。
Root作爲特權用戶,UID=0;新註冊用戶一般是1000開始。使用getuid()和geteuid()可以獲得當前進程的真實ID和有效ID。
中斷向量表(128號異常處理函數sys_call)、系統調用表

3. 請描述系統調用劫持的過程。

爲了篡改系統調用服務例程sys_xyz()。
(1)我們首先需要找到sys_call_table的地址(雖然32位和64位計算機有所不同,但是思路都是先找到系統處理函數地址,反彙編找到系統調用表SCT地址)。sys_call_table的地址是加載內核之後形成的,因此不同的系統的值也不一樣。
(2)篡改系統調用,將SCT表中指向正常的系統調用的指針,改成我們自己的函數地址。首先,要對SCT取消寫保護,通過設置cr0寄存器的WP位爲0,禁止CPU上的寫保護。寫完之後恢復寫保護,防止SCT被其他進程意外篡改。
(3)實現自己的系統調用函數,一般來說,主要是對系統原有的結果進行過濾,注意需要從用戶態將數據拷貝到內核態。

方法:修改虛擬文件系統、利用IDT表找到SCT位置、用自己的中斷描述符替換0x80

在這裏插入圖片描述

4. 請解釋,爲何Unix可以做到一切皆文件。

虛擬文件系統(Virtual File System, 簡稱 VFS), 是 Linux 內核中的一個軟件層,用於給用戶空間的程序提供文件系統接口;同時,它也提供了內核中的一個抽象功能,允許不同的文件系統共存。系統中所有的文件系統不但依賴 VFS 共存,而且也依靠 VFS 協同工作。
爲了能夠支持各種實際文件系統,VFS 定義了所有文件系統都支持的基本的、概念上的接口和數據結構;一個實際的文件系統想要被 Linux 支持,就必須提供一個符合VFS標準 的接口,才能與 VFS協同工作。
相同API的I/O操作
(1)向上,對應用層提供一個標準的文件操作接口;
(2)對下,對文件系統提供一個標準的接口,以便其他操作系統的文件系統可以方便的移植到Linux上;
(3)VFS內部則通過一系列高效的管理機制,使得底層文件系統不需沉溺到複雜的內核操作,即可獲得高性能;
(4)此外VFS把一些複雜的操作儘量抽象到VFS內部,使得底層文件系統實現更簡單。

更高層次的系統調用如下:
sys_getdents-> iterate_dir-> struct file_operations 裏的iterate->省略若干層次 -> struct dir_context 裏的actor(mostly filldir)。
要達到隱藏文件的目的,我們需要hooking filldir,在hooking function中去掉我們需要隱藏的文件記錄,不填到緩衝區,這樣應用程序就收不到相應的記錄,也就打到了隱藏文件的目的。

具體思路是hooking相應目錄的iterate,把dir_context的actor改爲fake filldir,fake filldir把隱藏的文件過濾。



七、緩衝區溢出

緩衝區溢出就是寫入到緩衝區或者從緩衝區讀取的數據超出了緩衝區可以容納的範圍。
在這裏插入圖片描述
esp指向堆棧頂部的地址;ebp指向堆棧底部的地址;eip指向當前正在執行的指令的地址。

1. 什麼是返回地址?

當一個程序調用一個函數時,該函數會開始調用其他函數等操作,然後返回調用它的函數。要返回調用函數,必須有一個調用函數的記錄:執行應該從函數調用指令後的指令恢復。該指令的地址稱爲返回地址。

每當調用一個函數時,返回地址都會被壓入堆棧。每當函數返回時,返回地址都會從堆棧中彈出,處理器開始執行該地址的指令。

2. 彙編語言中,call指令的作用是什麼?

系統調用指令,保護當前程序上下文,軟中斷切換至內核態,執行調用函數。即將先將call指令的下一條指令的CS和IP入棧;再轉移到調用的子程序。
操作數?

3. 請描述當函數調用發生時,進程地址空間中棧幀的變化。

函數調用指令call執行時,堆棧指針esp遞減4個字節(32位),並且調用後的指令地址(返回地址)被寫入現在由esp引用的存儲器位置,即返回地址被壓入棧。然後將eip設置爲指定爲要調用的操作數的地址,並從該地址繼續執行。
調用函數執行完畢,函數返回指令ret執行(不佔用任何操作數),處理器首先從esp中包含的內存地址中讀取值,然後將esp增加4個字節 ,從堆棧中彈出返回地址。 eip設置爲此值,並從該地址繼續執行。返回調用前上下文。

4. 如何防止緩衝區溢出攻擊。

(1)OS:爲了防禦緩衝區溢出攻擊,編譯器進行了canary金絲雀保護(在緩衝區和控制信息間插入一個 canary word,看這個值是否被修改)和防止棧運行等防禦。
(2)爲了防止猜測棧起始地址,棧起始地址隨機化(randomize_va_space)。
(3)限制可執行代碼的區域,判斷ret地址區域是否改變。
破解:將 ShellCode 放在 large_string 的中部,而前面則一律填充爲 NOP 指令(NOP 指令是一個任何事都不做的指令,主要用於延時操作),只要猜測的地址落在NOP指令串中,程序就會一直執行到shellcode。

攻擊原理:將shellcode置於內存的某處,然後通過緩衝區溢出將返回地址指向shellcode。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章