三. 常見掃描主要技術
要了解常見掃描的主要技術,還要以掃描器工作的流程開始,以nmap為例,整個掃描流程如下:
1、存活性掃描:是指大規(guī)模去評估一個較大網絡的存活狀態(tài)。例如跨地域、跨系統(tǒng)的大型企業(yè)。但是被掃描主機可能會有一些欺騙性措施,例如使用防火墻阻塞ICMP數(shù)據包,可能會逃過存活性掃描的判定。
2、端口掃描:針對主機判斷端口開放和關閉情況,不管其是不是存活。端口掃描也成為存活性掃描的一個有益補充,如果主機存活,必然要提供相應的狀態(tài),因此無法隱藏其存活情況。
3、服務識別:通過端口掃描的結果,可以判斷出主機提供的服務及其版本。
4、操作系統(tǒng)識別:利用服務的識別,可以判斷出操作系統(tǒng)的類型及其版本。
這就是以nmap為代表的掃描過程。
3.1 主機存活掃描技術
主機掃描的目的是確定在目標網絡上的主機是否可達。這是信息收集的初級階段,其效果直接影響到后續(xù)的掃描。Ping就是最原始的主機存活掃描技術,利用icmp的echo字段,發(fā)出的請求如果收到回應的話代表主機存活。
常用的傳統(tǒng)掃描手段有:
1. ICMP Echo掃描 精度相對較高。通過簡單地向目標主機發(fā)送ICMP Echo Request 數(shù)據包,并等待回復的ICMP Echo Reply 包,如Ping。
2. ICMP Sweep 掃描:sweep這個詞的動作很像機槍掃射,icmp進行掃射式的掃描,就是并發(fā)性掃描,使用ICMP Echo Request一次探測多個目標主機。通常這種探測包會并行發(fā)送,以提高探測效率,適用于大范圍的評估。
3. Broadcast ICMP掃描:廣播型icmp掃描,利用了一些主機在icmp實現(xiàn)上的差異,設置ICMP請求包的目標地址為廣播地址或網絡地址,則可以探測廣播域或整個網絡范圍內的主機,子網內所有存活主機都會給以回應。但這種情況只適合于UNIX/Linux系統(tǒng)。
4. Non-Echo ICMP掃描:在ICMP協(xié)議中不光光只有ICMP ECHO的ICMP查詢信息類型,在ICMP掃描 技術中也用到Non-ECHO ICMP技術(不僅僅能探測主機,也可以探測網絡設備如路由)。利用了ICMP的服務類型(Timestamp和Timestamp Reply 、Information Request和Information Reply 、Address Mask Request 和Address Mask Reply)。
3.2 規(guī)避技術
為到達規(guī)避防火墻和入侵檢測設備的目的, ICMP協(xié)議提供網絡間傳送錯誤信息的功能也成為了主要的掃非常規(guī)描手段。其主要原理就是利用被探測主機產生的ICMP錯誤報文來進行復雜的主機探測。
常用的規(guī)避技術大致分為4類:
1. 異常的IP包頭 :向目標主機發(fā)送包頭錯誤的IP包,目標主機或過濾設備會反饋ICMP Parameter Problem Error信息。常見的偽造錯誤字段為Header Length 和IP Options。不同廠家的路由器和操作系統(tǒng)對這些錯誤的處理方式不同,返回的結果也不同。
2. 在IP頭中設置無效的字段值:向目標主機發(fā)送的IP包中填充錯誤的字段值,目標主機或過濾設備會反饋ICMP Destination Unreachable信息。這種方法同樣可以探測目標主機和網絡設備。
3. 通過超長包探測內部路由器:若構造的數(shù)據包長度超過目標系統(tǒng)所在路由器的PMTU且設置禁止分片標志, 該路由器會反饋 Fragmentation Needed and Don’t Fragment Bit was Set差錯報文。
4. 反向映射探測:用于探測被過濾設備或防火墻保護的網絡和主機。構造可能的內部IP地址列表,并向這些地址發(fā)送數(shù)據包。當對方路由器接收到這些數(shù)據包時,會進行IP識別并路由,對不在其服務的范圍的IP包發(fā)送ICMP Host Unreachable或ICMP Time Exceeded 錯誤報文,沒有接收到相應錯誤報文的IP地址可被認為在該網絡中。
舉例來看:
|
圖1 |
當發(fā)送一個數(shù)據包的時候,數(shù)據包頭部會顯示其封裝類型,這里顯示的是tcp協(xié)議。其編號是06,看到06就可以知道這是一個tcp報文。如果把報文標識成不可識別的協(xié)議,例如:
|
圖2 |
協(xié)議字段里顯示是unknown,編號是b2,這個協(xié)議是未知的,那嗅探器也會返回給一個unknown。就是這樣發(fā)送一個不可識別的協(xié)議給其他主機的時候,對方主機也無法識別。當不可識別的時候:
|
圖3 |
對方認為自己的協(xié)議棧上無法識別,第一個動作就是先把數(shù)據包丟棄,丟掉報文之后去通知對方,返回了這條icmp的信息。類型為3,目標不可達,其code是2,告訴你目標不可達的原因是協(xié)議不可達。當你發(fā)送一個錯誤的數(shù)據包,對方不可識別就返回給你一個icmp信息,達到了探測對方的目的。
3.3 端口掃描技術
在完成主機存活性判斷之后,就應該去判定主機開放信道的狀態(tài),端口就是在主機上面開放的信道,0-1024為知名端口,端口總數(shù)是65535。端口實際上就是從網絡層映射到進程的通道。通過這個關系就可以掌握什么樣的進程使用了什么樣的通信,在這個過程里面,能夠通過進程取得的信息,就為查找后門、了解系統(tǒng)狀態(tài)提供了有力的支撐。常見流行的端口掃描技術通常有:
3.3.1 TCP掃描:
利用三次握手過程與目標主機建立完整或不完整的TCP連接。
TCP connect()掃描: tcp的報頭里,有6個連接標記,分別是urg、ack、psh、rst、syn、fin。通過這些連接標記不同的組合方式,可以獲得不同的返回報文。例如,發(fā)送一個syn置位的報文,如果syn置位瞄準的端口是開放的,syn置位的報文到達的端口開放的時候,他就會返回syn+ack,代表其能夠提供相應的服務。我收到syn+ack后,返回給對方一個ack。這個過程就是著名的三次握手。這種掃描的速度和精度都是令人滿意的。
Reverse-ident掃描:這種技術利用了Ident協(xié)議(RFC1413),tcp端口113.很多主機都會運行的協(xié)議,用于鑒別TCP連接的用戶。
identd 的操作原理是查找特定 TCP/IP 連接并返回擁有此連接的進程的用戶名。它也可以返回主機的其他信息。但這種掃描方式只能在tcp全連接之后才有效,并且實際上很多主機都會關閉ident服務。
Tcp syn掃描:向目標主機的特定端口發(fā)送一個SYN包,如果端口沒開放就不會返回syn+ack,這時會給你一個rst,停止建立連接。由于連接沒有完全建立,所以稱為半開放掃描。但由于syn flood作為一種ddos攻擊手段被大量采用,因此很多防火墻都會對syn報文進行過濾,所以這種方法并不能總是有用。
其他還有fin、NULL、Xmas等掃描方式。
3.3.2 UDP掃描
由于現(xiàn)在防火墻設備的流行,tcp端口的管理狀態(tài)越來越嚴格,不會輕易開放,并且通信監(jiān)視嚴格。為了避免這種監(jiān)視,達到評估的目的,就出現(xiàn)了秘密掃描。這種掃描方式的特點是利用UDP端口關閉時返回的ICMP信息,不包含標準的TCP三次握手協(xié)議的任何部分,隱蔽性好,但這種掃描使用的數(shù)據包在通過網絡時容易被丟棄從而產生錯誤的探測信息。
但是,UDP掃描方式的缺陷很明顯,速度慢、精度低。UDP的掃描方法比較單一,基礎原理是:當你發(fā)送一個報文給udp端口,該端口是關閉狀態(tài)時,端口會返回給一個icmp信息,所有的判定都是基于這個原理。如果關閉的話,什么信息都不發(fā)。
Traceroute掃描:tracert 向30000以上的高端口(一般認為,主機的30000以上高端口利用率非常低,任何主機都不會輕易開放這種高端口,默認都是關閉的)。如果對方端口關閉,會返回給icmp信息,根據這個往返時間,計算跳數(shù)、路徑信息,了解延時情況。這是tracerote原理,也是從這個原理上演變出來udp掃描技術。
使用udp掃描要注意的是1、udp狀態(tài)、精度比較差,因為udp是不面向連接的,所以整個精度會比較低。2、udp掃描速度比較慢,tcp掃描開放1秒的延時,在udp里可能就需要2秒,這是由于不同操作系統(tǒng)在實現(xiàn)icmp協(xié)議的時候為了避免廣播風暴都會有峰值速率的限制(因為icmp信息本身并不是傳輸載荷信息,不會有人拿他去傳輸一些有價值信息。操作系統(tǒng)在實現(xiàn)的時候是不希望icmp報文過多的。為了避免產生廣播風暴,操作系統(tǒng)對icmp報文規(guī)定了峰值速率,不同操作系統(tǒng)的速率不同) 利用udp作為掃描的基礎協(xié)議,就會對精度、延時產生較大影響。
當前在滲透測試過程中對于端口的掃描是非常靈活的,06年的黑帽大會上,就有人利用了開發(fā)了工具探測網內哪臺主機打開了80端口,這樣的技術在當前的互聯(lián)網上利用的非常普遍。
|
圖4 |