天天看點

關于Network Discovery的一些思考

少俠你在接下來進行的全内網端口探測的過程中,可能會遇到以下棘手的情況:

①需要對巨量的ip進行全端口探測;(nmap耗時太長,等的讓你懷疑人生的那種)

② 高速度與低誤報二者不可兼得;(魚與熊掌不可兼得)

③有些伺服器有着嚴格的防火牆政策;(tcp頭改啥标志位怕也是不好混進去)

關于以上問題本文提出了恰當的解決方案,全文充滿了作者獨到的見解,不可不看呀;

資産統計中你拿到巨多的ip,需要為每個ip統計詳細到每個端口的資訊時,你有沒有經曆過漫長的等待,看着nmap緩慢的百分比進度,簡直想解除安裝了nmap。

nmap的優勢不在于進行如此大範圍的資産探測;

而是對于少量ip進行細緻的探測。

masscan和zmap則是此類擅長者。

關于nmap、zmap、masscan對比,此處不做贅述,請看下面這位老哥的文章;

https://www.freebuf.com/sectool/119340.html

簡言之,zmap與masscan皆采用異步傳輸;

而且,在對任意位址端口的組合的探測時,masscan表現的更加靈活和出色;

但是,masscan和zmap都有一個無法忍受的誤報率。

影響masscan誤報率的因素有很多,主要有這麼三個方面:發包速度、網絡性能、tcp/ip堆棧沖突;

不同網絡環境中網絡的性能不同,且網絡性能涉及到的因素很多,丢包率、抖動率、時延、包轉發率等等,且網絡性能這項是我們無法改變的,是以我們先把網絡性能作為一個常量;

但是發包速度和tcp/ip堆棧沖突是我們能改變的。

理論上:

a、解決了堆棧沖突誤報率會變低;

b、發包速度越慢誤報率越低;

但是發包速度和誤報率之間并不是嚴格的正比關系,并且發包速度太低masscan就沒有了使用意義。

是以,需要先來探究一下,怎樣的網絡性能下配置多少的發包速度可以兼顧速度與準确率。

我在本地網絡做了一個關于masscan的小實驗:

1、先測試一下本地網絡最大能支援的包轉發率,如下圖所示

關于Network Discovery的一些思考

結果:表示包轉發率的rate值一直在170-kpps~210kpps之間波動

2、測試一下rate為210kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測的開放端口數量為38個

3、測試一下rate為170kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為48個

4、測試一下rate為110kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為52個

5、測試一下rate為100kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為52個

6、測試一下rate為80kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為53

7、測試一下rate為50kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為53個

8、測試一下rate為10kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為53個

9、測試一下rate為1kpps的情況下掃描内網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放端口數量為53個

測試速度低于1kpps,就太慢了,就算結果更準确卻沒有意義了,是以低于1kpps的就不做測試了。

統計一下以上測試的結果:

轉發率(kpps) 210 170 110 100 80 50 10 1
探測到的開放端口個數 38 48 52 53 53 53 53 53

我們可以發現在我目前的網絡環境中,轉發率為100kpps時是最合适的速度大小,可能在不同網絡中會有一些差異。

以上是測試結果,我們每一次使用masscan總不可能都這麼測吧,确實如此。

我分享一下我的經驗:最合适的速度一般是在網絡最大轉發率的50%左右。

看完了速度與誤報率的關系後,我們來看一下masscan的tcp/ip堆棧沖突。

其實呀,masscan是擁有獨立的TCP/IP堆棧的;

在平時使用中,我發現當為masscan配置單獨的ip時;

它的性能才能被充分發揮!!!誤報率顯著降低。

我們來看一下,當配置獨立ip,轉發率為100kpps時,其他情況完全不變,masscan的掃描結果如何?如下圖所示

關于Network Discovery的一些思考
關于Network Discovery的一些思考

結果:探測到開放的的端口數量為157個

這與剛才的100kpps時發現的53個相比,幾乎三倍!!!

在這種情況下我估算了一下它的速度:10分鐘掃描1000個ip的全端口。

這是nmap速度的一千多倍,而且在準确度上幾乎沒有差别。

在獲得ip的全端口探測結果之後,你并不能确定端口對應的服務是什麼?

這時候就可以使用nmap了,nmap有着豐富的指紋庫,可以為我們确定端口對應的服務版本。

先調用masscan庫掃描,再調用nmap庫掃描,如果ip端口數量過多,可以配合多線程;後面會完善一下代碼再放在github上,這裡先放出簡略版。

以上代碼實作如下:

關于Network Discovery的一些思考

還有開篇提到的最後一個問題,有些伺服器有着嚴格的防火牆政策怎麼辦?

有防火牆,需要對其進行各種騷姿勢的繞過時,masscan就顯得很無力了。

這時還是nmap更為适合,配合python的多線程,速度也過的去。

過防火牆姿勢有很多,感興趣的可以去看《nmap滲透測試》這本書,這裡隻講我平時常用的兩種。

1、資料包分片

有些防火牆為了減少資料包壓力,不會對資料包進行組合之後再檢查,而是對單個資料包直接檢查。

如下圖所示

關于Network Discovery的一些思考

2、指定源端口

防火牆的存在往往會影響一些業務的工作,管理者很有可能會放行來自特定端口的資料包,比如說源端口53的dns服務。

如下圖所示

關于Network Discovery的一些思考

參考文檔:

《nmap滲透測試指南》

https://yq.aliyun.com/articles/99743?spm=a2c4e.11163080.searchblog.22.264e2ec1iwqogV

https://github.com/robertdavidgraham/masscan

來自FreeBuf.COM