【安全掃描器原理】網絡掃描算法
- 1.非順序掃描
- 2.高速掃描 & 分布式掃描
- 3.服務掃描 & 指紋掃描
1.非順序掃描
參考已有的掃描器,會發現幾乎所有的掃描器都無一例外地使用增序掃描,即對所掃描的端口自小到大依次掃描,殊不知,這一效果可以被對方的防火墻或IDS作為判斷正被掃描的特征。雖然通過多線程會使這一特征發生少量的變化,但從整體效果上看,仍然顯示增序現象
改變增序特征并不難,一般有如下幾種非順序掃描算法:
1?? 逆序掃描算法,在掃描的時候,采用從大到小的逆序掃描方式
2?? 隨機重排掃描算法,在新排的順序中,為了避免漏掉或重復使用某一端口,可以采用互換位置的方式進行
3?? 線程前加延時掃描算法
在 Windows 系統中,多個線程是并發執行的,調度是基于搶占式的。也就是說,線程之間會競爭 CPU 時間片。但線程的啟動順序往往是按照創建線程的順序來的,尤其在短時間內創建多個線程時,它們的啟動時間差可能非常小。如果不作處理,線程 1 總是比線程 2 先執行,那么它掃描的端口或地址也往往先于線程 2,可能導致掃描行為過于集中和有規律,易被防護系統識別
為了讓多個線程的掃描順序更加隨機化、分散,防止被探測機制或防火墻認為是異常行為,可以采用如下策略:
Sleep(rand() % 5000); // 每個線程延遲 0~4999 毫秒
這樣,每個線程在啟動執行掃描邏輯之前,會暫停一段隨機時間,避免線程之間形成固定順序和節奏
2.高速掃描 & 分布式掃描
1、高速掃描
常見的高速掃描算法有多線程并行掃描技術、基于KB(Knowledge Base,知識庫)技術、將掃描和判斷分離的技術
KB技術是指把掃描過的主機信息存儲起來,當下次掃描的時候,首先以上次的掃描結果作為參考,先對用戶最關心的方面進行重新掃描,然后對其余部分進行掃描,這樣既能提高掃描速度,又能有效降低占用的帶寬。例如,某次掃描中,用戶只關心原有“開”的端口是否仍處于開的狀態,則只需要掃描上次記錄中“開”狀態的端口即可
2、分布式掃描
高速掃描主要依靠多線程實現,而分布式掃描則主要使用多臺主機同時對目標主機進行掃描,參與的主機可以事先約定后主動加入,也可以被入侵后植入掃描程序。在實施掃描的時候,由主控主機向各參與的主機發送要掃描的主機IP地址和端口范圍,然后所有主機同時向被測主機進行掃描
3.服務掃描 & 指紋掃描
1、服務掃描
端口掃描器只能掃描出端口的狀態是否開放,而不會判斷端口所對應的服務是否為該端口所具有的默認服務。服務掃描則是直接對服務進行掃描,并通過服務的存在與否,間接地判斷端口是否處于“開”狀態
2、指紋掃描
所謂指紋識別技術就是與目標主機建立連接,并發送某種請求,由于不同操作系統以及相同操作系統不同版本所返回的數據或格式不同,這樣,根據返回的數據就可以判定目標主機的操作系統類型及版本
通常的指紋識別算法有幾大類:
一類是通過操作系統提供的服務進行判斷,各主流操作系統都內嵌一些服務器軟件,常見的如FTP、Telnet、HTTP和DNS服務器,這些軟件都會在歡迎信息、版權聲明、命令回復中或多或少地透露自身的版本號,這也可以間接地反映出操作系統的類型和版本號。但這種方式也有不足之處,就是這些信息有些不準,甚至是錯誤的
另一類就是根據一些協議實現上各操作系統的細微差別進行判斷,如通過TTL值進行操作系統識別?、TCP FIN掃描等方法