關於Network Discovery的一些思考
摘要:2、測試一下rate爲210kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。3、測試一下rate爲170kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。
少俠,請留步!
在下這有一份你要搞的那個內網的主機端口明細表。
少俠你在接下來進行的全內網端口探測的過程中,可能會遇到以下棘手的情況:
①需要對巨量的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、先測試一下本地網絡最大能支持的包轉發率,如下圖所示
結果:表示包轉發率的rate值一直在170-kpps~210kpps之間波動
2、測試一下rate爲210kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測的開放端口數量爲38個
3、測試一下rate爲170kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲48個
4、測試一下rate爲110kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲52個
5、測試一下rate爲100kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲52個
6、測試一下rate爲80kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲53
7、測試一下rate爲50kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲53個
8、測試一下rate爲10kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲53個
9、測試一下rate爲1kpps的情況下掃描內網中24個ip的全端口,探測到的存活端口數量是多少。如下圖所示
結果:探測到開放端口數量爲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的掃描結果如何?如下圖所示
結果:探測到開放的的端口數量爲157個
這與剛纔的100kpps時發現的53個相比,幾乎三倍!!!
在這種情況下我估算了一下它的速度:10分鐘掃描1000個ip的全端口。
這是nmap速度的一千多倍,而且在準確度上幾乎沒有差別。
在獲得ip的全端口探測結果之後,你並不能確定端口對應的服務是什麼?
這時候就可以使用nmap了,nmap有着豐富的指紋庫,可以爲我們確定端口對應的服務版本。
先調用masscan庫掃描,再調用nmap庫掃描,如果ip端口數量過多,可以配合多線程;後面會完善一下代碼再放在github上,這裏先放出簡略版。
以上代碼實現如下:
還有開篇提到的最後一個問題,有些服務器有着嚴格的防火牆策略怎麼辦?
有防火牆,需要對其進行各種騷姿勢的繞過時,masscan就顯得很無力了。
這時還是nmap更爲適合,配合python的多線程,速度也過的去。
過防火牆姿勢有很多,感興趣的可以去看《nmap滲透測試》這本書,這裏只講我平時常用的兩種。
1、數據包分片
有些防火牆爲了減少數據包壓力,不會對數據包進行組合之後再檢查,而是對單個數據包直接檢查。
如下圖所示
2、指定源端口
防火牆的存在往往會影響一些業務的工作,管理員很有可能會放行來自特定端口的數據包,比如說源端口53的dns服務。
如下圖所示