信息安全課程:復習綱要
問答題[60分]:
一、ARP協議問題。
- ARP協議的作用是什么。
- 引入ARP緩存的功能是什么。
- ARP緩存中毒的攻擊方法和效果是什么。
二、IP協議安全問題
- 為什么IP要進行分片?
- IP分片如何進行重組?
- 淚滴攻擊(teardrop)的原理是什么?
- 包過濾防火牆,通過過濾SYN包,防止外部鏈接。攻擊者可以如何繞過這個過濾?
三、ICMP協議安全。
- 什么是SMURF攻擊?如何防止?
- 什么是ICMP重定向攻擊?如何防止?
四、TCP協議安全。
- 什么是SYN flooding攻擊?效果是什么?如何防止?
- 端口掃描的原理是什么?
- nmap -sS和nmap -sT的區別是什么?
- nmap -sA掃描的原理是什么?
- nmap idle掃描的原理是什么?
五、防火牆。
- iptables是狀態防火牆。狀態防火牆相比於包過濾防火牆的優點是什么?
- NAT的作用是什么?
- sudo iptables –P INPUT DROP; iptables -A INPUT -p tcp --sport 80 -j ACCEPT 這兩條語句的作用是什么?
六、Rootkit。
- 什么是rootkit?
- LKM的好處是什么?
- 請描述系統調用劫持的過程。
- 請解釋,為何Unix可以做到一切皆文件。
七、緩沖區溢出。
- 什么是返回地址?
- 匯編語言中,call指令的作用是什么?
- 請描述當函數調用發生時,進程地址空間中棧幀的變化。
- 如何防止緩沖區溢出攻擊。
一、ARP協議相關
Dos攻擊:netwox 80 使用ARP攻擊,阻止局域網內系統正常聯網
ARP:IP-->MAC
主機廣播IP來尋找MAC,返回是單播;
然后(所有主機都)緩存IP--MAC的對應關系到ARP表,
但ARP表不是一成不變的,因為IP--MAC對應關系不斷改變。(比如:虛擬機中的IP地址,多啟動幾回可能就換掉了)
局域網(以太網)幀格式:
幀類型 Frame types: 0800 IP 0806 ARP 8035 RARP
了解以太網幀的格式之后,就可以根據幀的結構發包;也可以借助netwox 80發ARP包,導致同在一個局域網的另一個主機不能聯網。
1)ARP協議的作用是什么?
地址解析,根據IP地址獲取對應的mac地址。
2)引入ARP緩存的功能是什么?
將ip和mac的映射保存在本地,防止每次發送ip數據包之前都要進行一次ARP解析。
3)ARP緩存中毒的攻擊方法和效果是什么?
因為ARP緩存是無狀態的,只要每次接收到ARP信息就對ARP緩存進行更新。
攻擊方法:用netwox 80發包,對主機X 發送一個假的ARP應答報文,將X 的ARP緩存中的ip映射到一個錯誤的mac地址。
效果:使得被攻擊主機不能聯網。
二、IP協議安全問題
以太網幀:frame_head+frame_data(ip數據報:iphead+ipdata)
ip頭部:
1)為什么IP要進行分片?
主要是因為硬件環境的MTU限制。
單個IP報文65535的最大長度;
但是網絡硬件限制了幀的大小(限制以太網1500字節)。
2)IP分片如何進行重組?
1.標識(IDENT,用於標識IP報文段的唯一標識符,具有同一IDENT的片段屬於同一個IP報文)、
2.標志(FLAGS,第一位保留,不使用;第二位為DF(Don't Fragment)位,DF=1時不分片;第三位為MF(More Fragments)位,DF=0的情況下,除了最后一個分段的IP包的包頭,其他分段的MF位都設為1)
3.片偏移(FO:FRAGMENT OFFSET,指明當前片段在原始完整的IP報文中的位置(偏移)。該偏移的單位是8個字節。)
3)淚滴攻擊(TearDrop)的原理是什么?
構造兩個分片,滿足以下兩個條件:
1、第二個分片完全包含在第一個分片中。(第一個分片的FO+len > 第二個分片的FO+len)
2、發生重疊時,使用第一個分片來覆蓋第二個分片的重疊內容。
由於第二個分片完全包含在第一個分片中,計算第二分片剩余部分的長度 len= end- pre_end 為負數,
又因為剩余長度的數據結構為unsigned,導致產生一個特別大的數。
導致拷貝超多無關數據,導致內存占用過多以及系統崩潰。
( 解決方法:加上一個 if 判斷語句,來保證 end-pre_end>0 )
4)包過濾防火牆,通過過濾SYN包,防止外部鏈接。攻擊者可以如何繞過這個過濾?
1. 微小碎片攻擊:使得第一個分片不包含SYN字段。第二個分片包含TCP的SYN=1字段。這樣兩個分片都能通過防火牆,然后在上層進行重組SYN包。
2. 重疊碎片攻擊:如果系統采用的重疊方式后一片覆蓋前一片的情況下,可以使用碎片重疊攻擊,使得第一個分片的SYN字段不為1,第二個分片的FO!=0並包含TCP的SYN=1字段。這樣兩個分片也都能通過防火牆,然后在上層重組,第二個分片覆蓋第一個分片后就能重新組成SYN包。
【詳細版——分片攻擊】
防火牆通過數據包包頭信息,進行攔截(包過濾器防火牆)
RFC:互聯網國際標准機構 Request For Comment
原有協議:有些端口阻止 外部訪問請求,但是接受 對本機請求的回復(本機先發出請求)
漏洞是:只檢查FO=0(第一個)數據片。
只要第一個混過去(包裝成無害的樣子),后面(具有同樣IDentifier標識符的)分片可以跟着全部通過防火牆
(1)微小碎片攻擊
攻擊方法
強迫TCP頭部進入第二個分片,從而躲過防火牆過濾器的匹配(SYN)
通過許多IP實現,可以在發出數據包上形成異常小的片段大小。如果片段大小足夠小以迫使某些TCP數據包的TCP頭字段進入第二個片段,則指定這些字段的模式的過濾規則將不匹配。如果過濾實現沒有強制執行最小片段大小,則可能會通過不允許的數據包,因為它在過濾器中沒有得到匹配。
防止措施
- 直接法:FO=0的包長度<min,丟之
- 間接法:若存在FO=1的分片,丟之 (ps:FO=2以上就可以了)
(2) 重疊碎片攻擊
攻擊方法
用第二個分片(有害),覆蓋第一個無害分片(用於頂包接受檢查)。
例如:第一個分片 SYN = 0,ACK = 1(應答)
第二個分片 SYN = 1,ACK = 0 (請求連接)
這樣在重組之后就是有害的報文。
防止措施
丟掉FO==1,且protocal==TCP 的包(此方法不徹底夠用)
三、ICMP協議安全
ICMP: 互聯網消息控制協議
明確一點信息,本身就是ICMP差錯報文的情況下,不會產生ICMP差錯報文。但是,ICMP查詢報文可能會產生ICMP差錯報文。
ICMP報文格式:
1)什么是SMURF攻擊?如何防止?
Smurf攻擊是一種DDOS攻擊。
冒充受害者的IP地址,將大量ICMP的ECHO REQUEST廣播到有大量主機的網絡。默認情況下,網絡上的大多數設備都會通過向源IP地址發送回復ECHO REPLY來對此做出響應。 如果網絡上接收和響應這些數據包的機器數量非常大,受害者的計算機將忙於處理 ping 回復包。 這可能會使受害者的計算機變慢,無法繼續工作。
(DDOS==分布式拒絕服務;DOS==拒絕服務;ICMP==互聯網控制消息協議)
如何防止Smurf攻擊呢?
1. 配置各個主機和路由器,不響應ICMP請求或廣播;
2. 配置路由器不轉發定向到廣播地址的數據包。
2)什么是ICMP重定向攻擊?如何防止?【考試重點,應該會展開考實驗細節】
A:攻擊者
B:受害者
C:受訪問的網絡
首先,當B要訪問C網絡的時候,會向當前網關發送訪問請求。A通過pcap網絡嗅探等工具捕獲這一請求的時候,A冒充B的網關向B發送ICMP重定向報文,將網關地址重定向為虛假地址。當B收到A發送的重定向報文的時候,就會修改B的路由表,將訪問C網絡的網關地址改為重定向的地址。這樣B上網會發生部分失敗(因為路由器會更新正確的路由給B,但A會改成錯的,兩者互相改,造成部分對部分錯)
防御手段:過濾掉ICMP重定向報文。
實驗流程:1.pcap抓包得到受害者ip 2. 使用raw socket來手動修改ip、icmp里面的內容 3.開始發包,攻擊受害者
四、TCP協議安全問題
這里說明一下校驗和的一些內容:TCP的校驗和計算和IP頭部的校驗和計算方法是一致的,但是覆蓋的數據范圍不一樣。TCP校驗和覆蓋TCP首部和TCP數據,而IP首部中的校驗和只覆蓋IP的頭部。TCP的校驗和是必需的,而UDP的校驗和是可選的。TCP和UDP計算校驗和時,都要加上一個12字節的偽首部。偽首部包含:源IP地址、目的IP地址、保留字節(置0)、傳輸層協議號(TCP是6)、TCP報文長度(報頭+數據)。偽首部是為了增加TCP校驗和的檢錯能力:如檢查TCP的源和目的IP地址、傳輸層協議等。
1)什么是SYN flooding攻擊?效果是什么?如何防止?
A:攻擊者
B:被攻擊服務器
C:其他訪問者
首先,B開放一個端口,進行偵聽。A構造大量的TCP的SYN包發給B。
B一旦接收到SYN包就需要為即將建立的TCP連接分配TCB(Transmission Control Block),並進入半連接狀態。由於B最多可開啟的半開連接個數是一定的,受內存限制,當半開連接的個數過多,就會消耗掉可用的內存,使得新的正常的連接請求不能被處理。此時C對B進行訪問,建立TCP連接的請求就不能被正常處理。
效果:Dos攻擊--占用資源(內存、CPU、帶寬),deny of service,拒絕正常的服務。(SYN flooding可以以小博大)
防止:
1. SYN Cookie:在(第三握)ACK到達之前不分配任何資源。
SYN Cookie關鍵在於:如何在不分配資源的同時,能夠識別是否是一個完整的TCP三次握手。 SYN cookie精心構建初始序列號:t、m、s來驗證。
2. SYNCache:四元組<源ip,源port,目的ip,目的port>,那么可以在接收到SYN包時,僅僅分配有限的空間,來維持其后可能需要的信息,而不是分配整個的TCP控制塊。到第三步才分配。
2)端口掃描的原理是什么?
nmap的工作原理:首先嘗試與一個個的端口連接:
- 沒有任何回復是被過濾了:filtered
- 收到 SYN+ACK 就是開着的:open
- 收到 RST 就是關閉的:close
3)nmap -sS和nmap -sT的區別是什么?
sS:發SYN包,無連接發RST(不建立連接、無痕跡;但需要root權限 =》最常用)
nmap -sS:向目標主機發送TCP的SYN包,
當目標主機返回SYN/ACK包的時候,直接發送RST包。
不與目標主機建立完整的TCP連接。可以不留下掃描痕跡,但需要特殊權限。
sT:連接后發RST包 (建立連接、不隱蔽 =》不推薦使用)
nmap -sT:與目標主機建立完整的TCP連接后,
再向目標主機發送RST包。不需要特殊權限,但是會留下掃描痕跡。
4)nmap -sA掃描的原理是什么?
sA:發ACK包
ACK數據包不會啟動會話建立,所以比較隱蔽;同時,因為ACK數據包不會單獨出現。
所以,對於端口,不管是開放的還是關閉的,如果收到一個不請自來的ACK數據包,都會發一個RST包。(只能判斷是否被過濾)
5)nmap idle掃描的原理是什么?
A:攻擊者
B:Zombie主機
C:目標主機
首先A先向B發送SYN/ACK包,然后B返回一個RST包,並記錄該包的IPID。
然后A冒充B向C發送SYN包。如果C的端口開放,則返回SYN/ACK包,B收到后會回復一個RST包,並且IPID+1。如果C的端口不開放,則直接返回RST。
之后A再向B發送一個SYN/ACK包,查看B返回的IPID的值,如果IPID的值增加了2,則可知C的端口開放。
idle無法區分關閉和被過濾的情況。
知識點:
- 如果沒有發送SYN情況下,收到SYN|ACK包(不請自來),那么會回復RST。
- 一個不請自來的RST,會被忽略。
- 每個IP包都有Identifier(IPID),用於標識屬於同一數據包的所有IP碎片
- 每發一個數據包,大部分操作系統簡單地進行:Identifier+1
- 因此,從Identifier可以知道,主機在上一次發包后又發了幾個數據包
利用網絡里空閑的Zombie僵屍主機:
攻擊者idle掃描:
通過IPID的值判斷,目標主機端口狀態:
- 如果IPID+1: 關閉 or 過濾 +1 就是A又去探測了一次 所以加了1
- 如果IPID+2: 開 +2是除了A探測,又加了一個B回復C的RST
五、防火牆
防火牆分為三類:1. 包過濾防火牆(packet filter);2. 應用層網關代理(Application level Gateway)3. 狀態防火牆(stateful firewall)。
包過濾防火牆也可以成為無狀態防火牆,靜態防火牆。最核心的五元素就是源地址、目標地址、協議、源端口、目標端口。優點:實現簡單,規則也簡單,所以包過濾防火牆的處理速度快,並且易於配置。缺點:難以處理分片【IP碎片攻擊】; 不支持某些復雜的協議;不能防止應用層等惡意攻擊(原因很簡單,因為它根本不識別應用層的數據)。
1)iptables是狀態防火牆。狀態防火牆相比於包過濾防火牆的優點是什么?
- 包過濾防火牆(packet filter):無狀態、靜態。易於設置、處理速度快;
缺點:無法分析上下文,難以處理分片【IP碎片攻擊】,不支持某些復雜的協議,不能防止應用層等惡意攻擊。
- 狀態防火牆。優點為:建立連接狀態表,結合上下文狀態進行過濾,可以實現較好的過濾效果。
在同一個會話中,五元組不會變化;但是各種狀態標識(SYN、SYN+ACK以及ACK)、分片(FO)等都是可以變化的。
2)NAT的作用是什么?
NAT:網絡地址轉換。
一種把內部私有網絡地址(IP地址)翻譯成合法網絡IP地址的技術。在一定程度上,能夠有效的解決公網IP地址不足的問題。
- 內網主機向外發出數據包時,NAT服務負責將數據包的源IP地址改成公網IP地址(SNAT); S->Source 發包時:轉換源地址
- 當外網對內網主機的回復到達時,NAT服務將回復包的目的IP再改成內網IP地址(DNAT)。 D->Destination 收包時:轉換目的地址
3)sudo iptables –P INPUT DROP;
iptables -A INPUT -p tcp --sport 80 -j ACCEPT;
這兩條語句的作用是什么?
- 第一句,將iptables的策略制定為:丟棄所有傳入的數據包。
- 第二句,添加INPUT策略,允許tcp 源端口號 為80的數據包通過防火牆。==》允許HTTP包傳入
六、Rootkit
1)什么是rootkit?
黑客安裝后門backdoor,獲取長期root權限后,
便於之后回訪,安裝rootkit,隱藏蹤跡,收集信息,便於長期回訪以及獲得對其他系統的訪問權限。
rootkit一般和后門backdoor配合着使用,一前一后
(短暫的root權限+backdoor+rootkit==>長期的root權限)
2)LKM的好處是什么?
LKM: 可加載內核模塊(Loadable Kernel Module)
優點是動態加載:內核進行修改和擴展時,不需要重編譯內核和重啟系統。
( LKM 包含 entry 和 exit 函數,分別用於插入、刪除)
3)請描述系統調用劫持的過程。
首先,當進行一次系統調用的時候,會觸發軟中斷(INT $0x80)==》進入內核的系統調用處理程序。
然后在系統調用處理程序的代碼中尋找到sys_call_table的地址。
接下來,根據系統調用表sys_call_table地址 和 eax中存放的系統調用號,
找到真正的 系統調用例程的地址,
將其替換為 攻擊者的 系統調用處理函數地址。
4)請解釋,為何Unix可以做到一切皆文件?
虛擬文件系統(VFS)
- 向上,對應用層 (的System Call) 提供一個標准的文件操作接口 (如read/write);
- 對下,對文件系統提供一個標准的接口,以便其他操作系統的文件系統可以方便的移植到Linux上;
VFS內部則通過一系列高效的管理機制,比如inode cache, dentry cache 以及文件系統的預讀等技術,使得底層文件系統不需沉溺到復雜的內核操作,即可獲得高性能;此外VFS把一些復雜的操作盡量抽象到VFS內部,使得底層文件系統實現更簡單。
Linux中,一切皆文件。現在一般使用 Ext4 文件系統。
FAT(File Allocation Table文件分配表):FAT占用內存過多,難以管理較大的硬盤存儲。
七、緩沖區溢出
緩沖區:分配一段有限大小的內存空間
緩沖區溢出:從緩沖區 讀/寫 的數據超出了緩沖區可以容納的范圍。
1)什么是返回地址?
從子程序返回后,主程序繼續執行的指令地址稱為“返回地址”。
返回地址就是主程序中CALL指令后面一條指令的地址。函數的返回地址,也就是函數調用語句的下一條語句的地址。
2)匯編語言中,call指令的作用是什么?
轉移到調用的程序。
call + 調用函數的地址。
當執行調用(call)時,堆棧指針esp 遞減4個字節(32位),
並且調用后的指令地址(返回地址)被寫入現在由esp引用的存儲器位置,
換句話說,返回地址被壓入棧。
然后將 指令指針eip 設置指定為要調用的操作數的地址,並從該地址繼續執行。
ret恰恰相反。簡單的ret不會占用任何操作數。
處理器首先從esp中包含的內存地址中讀取值,然后將esp增加4個字節,它會從堆棧中彈出返回地址。
eip設置為此值,並從該地址繼續執行。
3)請描述當函數調用發生時,進程地址空間中棧幀的變化。
首先,把函數調用的參數壓棧,然后cs、eip(返回地址)壓棧,
ebp(棧底)壓棧,接下來,更新ebp的值為esp的值(棧對齊),
將esp減少一個特定的值(與調用函數內部申請空間相關),為調用函數獲取一定的棧空間。
4)如何防止緩沖區溢出攻擊? [本章重點]
1. 編譯器進行了棧保護:canary保護,和防止棧運行。
2. 棧起始地址隨機化,不同次運行同一個程序時,棧的起始位置都不一樣。(防止猜測 ShellCode 的入口地址)
其他一些內容:
幾種典型攻擊(可以自己演示的):
1.1 netwox 80 使用ARP攻擊,阻止局域網內系統正常聯網
1.2 netwox 86 通過ICMP重定向,成為受害者、網關之間的中間人
1.3 netwox 76 TCP里面的SYN Flooding,Dos攻擊。
2. 在他人的系統上裝上后門backdoor(用於長期控制root權限);通常和rootkit配套使用,rootkit負責消除痕跡
3. stackoverflow 匯編代碼...
常用網絡相關Linux命令:
ping 發送ICMP請求
- ping www.baidu.com:測試能否正常聯網
- ping 192.168.3.33(本機gateway網關)
- ping localhost:測試系統協議棧
ifconfig 配置網絡接口
- 查看IP號、網卡等信息 ifconfig
- 啟動 網卡(硬件,用於朝外發包) sudo ifconfig ens33 up
netwox 發包工具
- 80 ARP攻擊局域網
- 86 ICMP重定向
- 76 TCP里SYN Flooding
traceroute 追蹤路由信息(一般最多30跳)類似於 Windows系統-cmd中的tracert命令
nslookup 查看域名對應的IP地址,類似於DNS服務 例子:nslookup www.baidu.com
whois 查看IP屬於哪個組織。 例子:whois 219.219.220.1
netstat 顯示網絡狀態:網絡連接、路由表。。 例子:netstat -ant 查看tcp路由表、連接狀態等
tcpdump 網絡抓包工具。 例子:sudo tcpdump -i ens33 -c 20 其中i后面跟接口,c 20表示抓前20個包(packets)
應用軟件wireshark 可用於抓包
netcat 用於TCP/UDP中讀寫數據:文件傳輸、即時通訊 (網絡工具中的瑞士軍刀)
- 查看某IP的端口開放狀態:例子:查看百度網站的80端口(HTTP) nc -v www.baidu.com 80 顯示:連接成功
- 查看端口段:例子:nc -v localhost 20-30 同時查看20-30這11個端口
- 局域網內 群聊:例子:001主機: nc -l 192.168.3.34 80 002主機:nc 192.168.3.34 80 然后就可以聊天了。。
nmap 用於端口掃描(TCP安全相關)
ssh 遠程連接
Mitnick米特尼克聖誕節攻擊
3個對象說明:
Target是黑客想要的文件,
X-terminal 與Target有連接(互相信任),
Server(X-terminal的服務器)與X-terminal 有TCP信任連接
攻擊鏈條: Target的訪問 <---> X-terminal <---> Server
攻擊思路:訪問 Target文件(最終目標)
--->劫持X-terminal與Target的連接
--->獲得X-terminal的root權限,並加載內核STREAMS模塊
---> 遠程修改X-terminal的.rhosts文件(賬戶信任關系)
---> 以X-terminal信任的Server,建立TCP連接,在TCP中傳遞命令
- 對X-terminal:IP源地址欺騙和TCP序列號預測;
- 對Server:Dos攻擊,使之不能(對意外SYN-ACK)發出RST;
1.1 SYN、ACK和RST分別在什么時候使用?
SYN:A向B請求建立TCP連接的時候使用。
ACK:B同意與A的TCP連接請求的時候使用。或者A收到B的SYN/ACK報文時,第三次握手的時候。
RST:A-SYN->B,而B不同意與A建立TCP連接的時候使用,B-RST->A。或者,B-SYN/ACK->A,而A拒絕的時候使用,A-RST->B。或者,A-ACK->B(非正常連接),則B-RST->A。
1.2 攻擊為什么要選擇在聖誕節?
該攻擊程序注意到連續的兩個數據包之間,初始序列號增長了128,000。因此,該攻擊程序破解了序列號生成規則(等差序列)。
下村的機器必須處於閑置狀態,攻擊才能進行成功。不然的話,其他的連接將改變數據包的初始序列號,並使其更難以預測。這就是黑客選擇在聖誕節攻擊的原因。
(簡版:因為聖誕節的時候放假了,不會對B進行頻繁的訪問,以便預測B生成的TCP序列號。)
1.3 進行SYN flooding以實現DoS的可信server的端口號是多少?為什么要選擇這個端口?能不能換用一個其他端口?
0~1024。因為攻擊者是是冒充工作站的服務器進行與server的訪問的。客戶端的端口號一般大於1024,而服務器的端口號則在0~1024之間。
1.4 在成功添加后門后,攻擊者為何要發送RST釋放可信Server中的TCP連接?
清除攻擊痕跡,使得C能夠被正常訪問,並不保留連接記錄。
drwxrwxr-x d表示directory,文件夾默認權限775
-rw-rw-r-- -表示是文件,文件默認權限664
/usr/bin/passwd:4755==》紅字,無法訪問(此時eid不等於rid)
chmod改成 755 ==》綠字,可以訪問
47==>rws 7==>rwx
引入了真實UID(real UID)、有效UID(effective UID)以及 保存的UID(saved set-user-ID)的概念。
- rid實際用戶ID和實際組ID標示我們實際上是誰;這兩個字段是在登錄時讀取口令文件中的登錄項。一般情況下,在一個會話期間,實際用戶和實際組用戶不會改變;但超級用戶的進程可能改變它們。
- eid有效用戶ID,有效組ID以及附加組ID決定了文件訪問權限;
《信息安全》另外3篇筆記:
信息安全 學習筆記(1)——常用攻擊、網絡命令、ARP安全、IP安全
信息安全 學習筆記(2)——防火牆(Netfilter/ IPtables)
信息安全 學習筆記(3)—— 后門(Backdoor+rootkit)
參考:
信息安全課程18:復習 https://zhuanlan.zhihu.com/p/62970150