信息安全 期末重點 中科大 USTC


一、ARP協議問題
1. ARP協議的作用是什么。
地址解析協議,即IP地址和MAC地址之間的轉換。

2. 引入ARP緩存的功能是什么。
將這一映射關系保存在 ARP 緩存中,使得不必重復運行 ARP 協議。

3. ARP緩存中毒的攻擊方法和效果是什么。
方法:因為 ARP 緩存中的映射表並不是一直不變的,主機會定期發送 ARP 請求來更新它的 ARP 映射表,利用這個機制,攻擊者可以偽造 ARP 應答幀使得主機錯誤的更新自己的 ARP 映射表,這個過程就是 ARP 緩存中毒。
效果:要么使主機發送 MAC 幀到錯誤的 MAC 地址,導致數據被竊聽;要么由於 MAC 地址不存在,導致數據發送不成功。

二、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欺騙等進行防御。 

四、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。

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,追加新規則於指定鏈的尾部)

 

 

 

 

六、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)實現自己的系統調用函數,一般來說,主要是對系統原有的結果進行過濾,注意需要從用戶態將數據拷貝到內核態。

 

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

 

七、緩沖區溢出
緩沖區溢出就是寫入到緩沖區或者從緩沖區讀取的數據超出了緩沖區可以容納的范圍。

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM