天天看點

我談網絡掃描 -- 之三

     在本系列文章的第一,二部分(我談網絡掃描 -- 之一,之二),我們站在安全從業者的角度,讨論了網絡掃描基礎,各種端口和漏洞掃描技術及使用經驗。接下來,我們讨論如何應對惡意網絡掃描。

五. 如何應對網絡掃描

      現在,網際網路上免費的掃描軟體,太多了,随便 google 一下,就可以找到一大推;而且,現在的掃描軟體,越來越簡單易用,進而使得一些沒有什麼網絡和系統技術的 badegg 們(傳說中的“腳本小子”),也可以用得得心應手;另外,現在的掃描軟體,越來越智能,越來越會逃避 IDS/IPS 的檢測和防護。這一方面友善了安全從業者的工作,提高了我們的工作效率,另一方面也給那些專門想搞破壞的 badegg 們大開了友善之門,增加了安全從業者的負擔。我們不得不承認,網絡掃描工具的這些特點,确實增加了我們工作的難度,但是,那并不意味着我們在面對網絡掃描的時候,就應該束手無策,不知所措,坐以待斃了。相反,我們應該使用各種針對端口和漏洞掃描的檢測和防護措施,來積極地跟惡意的網絡掃描做鬥争,限制他們的掃描範圍,減少他們通過掃描能獲得的資訊,進而更好地保護我們的網絡安全。

1. 檢測網絡掃描

    要有效地檢測網絡掃描,需要先弄清楚幾個問題:

       × 希望檢測外網掃描還是内網掃描?

            檢測的目的決定了我們到底該進行哪種檢測。如果我們想檢測來自公網的惡意掃描,并進行及時封堵,或者檢查我們的網絡防火牆配置是否正确,  那麼應該選擇檢測外網掃描;如果我們對自己内網的安全不太确信,比如曾經被侵入過,想檢測出是否有惡意程式存在,那麼可以選擇檢測内網掃描。

       × 掃描檢測系統應該部署在哪個位置?

            如果想檢測外網掃描,那麼建議将掃描檢測軟體(一般就是入侵檢測/防護系統)部署在公網防火牆後面,因為公網上未經防火牆過濾的惡意掃描實在太多,各種告警資訊會把我們弄崩潰,一旦經過防火牆過濾了,能夠到達掃描檢測軟體的惡意掃描就會明顯少很多,這樣友善我們的工作,而且,也隻有經過防火牆過濾後的惡意掃描,才是我們所關心的;如果想檢測内網掃描,那麼把掃描檢測軟體部署到内網的任何位置都可以,隻要能夠接收到内網的所有網絡資料包就可以了(當然需要我們的精心配制)。

       × 怎樣讓網絡資料包發送到掃描檢測系統?

            通常情況下,不管是檢測外網掃描還是内網掃描,都極有可能涉及到端口資料流鏡像/複制技術,就是把從同一個交換機的其他某些端口進出的資料包,複制到掃描檢測系統所連接配接的交換機端口上來(這種同一個交換機上的端口資料流鏡像/複制,就 cisco 交換機來說,被稱之為 SPAN);或者是把進出其它交換機的某些端口的資料包,複制到掃描檢測系統所連接配接的交換機端口上來(這種不同交換機上的端口資料流鏡像/複制,就 cisco 交換機來說,被稱之為 RSPAN)。

          我在這裡不詳述 SPAN 和 RSPAN 了,隻各舉一個例子:

          SPAN 例子:

               !指定複制哪些端口的流量

               SwitchA(config)# monitor session 1 source int g0/10 rx   

               !指定把流量複制到哪個端口  

               SwitchA(config)# monitor session 1 dest   int g0/24       

          RSPAN 例子:

              ! 定義 RPSN VLAN,必須保證該 VLAN 定義能夠

              ! 被傳輸到交換機 SwitchB 上去

               SwitchA(config)# vlan 1000

               SwitchA(config-vlan)# remote vlan

               SwitchA(config-vlan)# end

               !指定複制交換機 SwitchA 上的哪些端口的流量 

               SwitchA(config)# monitor session 1 source int g0/2 rx

               SwitchA(config)# monitor session 1 dest remote vlan 1000

               !指定複制到交換機 SwitchB 上的哪個端口

               SwitchB(config)# monitor session 1 source remote vlan 1000

               SwitchB(config)# monitor session 1 dest int g0/1

         提示:如果需要檢測的流量比較大,建議隻分析一個方向的資料包。

    接下來,我們看看開源 IDS/IPS snort 對網絡掃描的檢測:

        a. 當我們用 nmap 來進行掃描的時候,snort 能檢測到,并生成 nmap 掃描警告,生成的警告消息如下:

        b. 當我們用 nessus 來進行掃描的時候,snort 能檢測到,并生成 nmap,nessus 及跟目标運作的服務相關的掃描警告,生成的警告消息如下(為了簡潔,我删了一些警告資訊):

        c. 當我們用 nikto 來進行掃描的時候,snort 能檢測到,并生成許多的資訊收集和 WEB 應用攻擊掃描警告,下面是幾條有代表性的掃描警告:

      再次,我們看看商業 IDS/IPS 對網絡掃描的檢測:就筆者所知,Juniper NetScreen-IDP 可以準确檢測出網絡掃描,其它 IDS/IPS 筆者不熟悉,不敢亂說了。

2. 防護網絡掃描

    首先,我們看看防火牆在防護網絡掃描方面的作用:作為一種靜态的網絡安全防護工具,防火牆在防護網絡掃描方面的作用比較小,它能作的事情就是保護我們網絡上監聽着的但未開放給公網的端口(比如隻開放給特定IP位址的端口),避免這些端口被黑客掃描到,僅此而已。其它諸如實時告警和防護,就指望不上了。

     當然,這也意味着我們必須好好利用防火牆這個工具,保護好每一個我們不希望公網通路的端口,避免它們被惡意掃描到。

     其次,我們看看主機入侵檢測系統 OSSEC 在防護網絡掃描方面的表現:OSSEC 是一款優秀的主機入侵檢測軟體,其預設配置就能夠檢測和防護網絡掃描。下面是筆者做的測試,該測試很好地展現了 OSSEC 的自動防護網絡掃描功能。

                在 rac1 掃描 rac2 之前,rac2 的 iptables 規則:

                 [root@rac2 ossec]# iptables -L -n

                 Chain INPUT (policy ACCEPT)

                 target     prot opt source               destination        

                 Chain FORWARD (policy ACCEPT)

                 target     prot opt source               destination        

                 Chain OUTPUT (policy ACCEPT)

                 target     prot opt source               destination  

                 從 rac2 掃描 rac1:      

                 [root@rac1 ~]# nmap -sS -v 192.168.2.222

                 rac1 掃描了 rac2 之後,rac2 的 iptables 規則:

                 target     prot opt source               destination         

                 DROP       all  --  192.168.2.111        0.0.0.0/0           

                 hain FORWARD (policy ACCEPT)

                 target     prot opt source               destination         

                 DROP       all  --  192.168.2.111        0.0.0.0/0          

                 Chain OUTPUT (policy ACCEPT)

                 target     prot opt source               destination 

           可以看出,rac2 已經自動添加防火牆規則,丢棄來自 rac1(192.168.2.111)的任何資料包,自動防護網絡掃描功能,展現出來了,呵呵。

    再次,我們看看端口掃描檢測工具 PortSentry 在防護網絡掃描方面的表現:PortSentry 是一款檢測各種類型端口掃描,實時響應的工具。由于筆者先前沒有寫過關于 PortSentry 的文章,故在此簡單描述一下其安裝和使用:

            第一步:修改 Makefile 檔案

            # vi Makefile 

               # 注釋掉下面一行

               # CC = cc

               # 取消對下面一行的注釋

               CC = gcc

            第二步:修改 portsentry.c 檔案中的一個小 bug

            # vi portsentry.c

               将 1584 行 和 1585 行

                printf ("Copyright 1997-2003 Craig H. Rowland <craigrowland at users dot

             sourceforget dot net>\n");

            修改為下面這一行:

             printf ("Copyright 1997-2003 Craig H. Rowland <craigrowland at users dot sourceforget dot net>\n");

            第三步:安裝

             # make linux && make install

            第四步:配置

              a. 啟用 iptables 防護:修改 /usr/local/psionic/portsentry/portsentry.conf 檔案下面兩行               

                 # iptables support for Linux

                 #KILL_ROUTE="/usr/local/bin/iptables -I INPUT -s $TARGET$ -j DROP"  

                 為

                 # iptables support for Linux

                 KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -j DROP"                   

               b. 把我們信任的網絡或主機的IP位址寫入 /usr/local/psionic/portsentry/portsentry.ignore 檔案,PortSentry 不會 理會來自這些位址的網絡掃描。

            第五步:運作

              # /usr/local/psionic/portsentry/portsentry -tcp                             

              # /usr/local/psionic/portsentry/portsentry -stcp 或者   

              # /usr/local/psionic/portsentry/portsentry -atcp 

              # /usr/local/psionic/portsentry/portsentry -udp

         下面是筆者的測試,該測試很好地展現了 PortSentry 在自動防護網絡掃描時的優秀表現:

                   掃描前 rac2 的防火牆規則:

                   [root@rac2 portsentry]# iptables -L -n

                   Chain INPUT (policy ACCEPT)

                   target     prot opt source               destination        

                   Chain FORWARD (policy ACCEPT)

                   Chain OUTPUT (policy ACCEPT)

                   target     prot opt source               destination  

                  從 rac1 掃描 rac2:

                  [root@rac1 ~]# nmap -sS -O -v 192.168.2.222

                  當 rac1 開始掃描 rac2 後,rac2 的 iptables 規則:

                  [root@rac2 portsentry]# iptables -L -n

                  Chain INPUT (policy ACCEPT)

                  target     prot opt source               destination         

                  DROP       all  --  192.168.2.111        0.0.0.0/0          

                  Chain FORWARD (policy ACCEPT)

                  target     prot opt source               destination        

                  Chain OUTPUT (policy ACCEPT)

                  target     prot opt source               destination    

                  當 rac1 開始掃描 rac2 後,rac2 的 portsentry.history 檔案的内容:

                   [root@rac2 portsentry]# cat portsentry.history 

                   1202224522 - 02/05/2008 23:15:22 Host: 192.168.2.111/192.168.2.111 Port: 23 TCP Blocked

                  當掃描結束後,獲得的資訊:

                   [root@rac1 ~]# nmap -sS -O -v 192.168.2.222

                   Initiating SYN Stealth Scan against 192.168.2.222 [1660 ports] at 23:26

                   SYN Stealth Scan Timing: About 32.20% done; ETC: 23:27 (0:01:03 remaining)

                   Increasing send delay for 192.168.2.222 from 0 to 5 due to 11 out of 21 dropped probes since last increase.

                  SYN Stealth Scan Timing: About 50.66% done; ETC: 23:29 (0:01:31 remaining)

                  Increasing send delay for 192.168.2.222 from 5 to 10 due to 11 out of 11 dropped probes since last increase.

                  Increasing send delay for 192.168.2.222 from 10 to 20 due to 11 out of 11 dropped probes since last increase.

                 SYN Stealth Scan Timing: About 78.01% done; ETC: 23:30 (0:00:52 remaining)

                 Increasing send delay for 192.168.2.222 from 20 to 40 due to 11 out of 11 dropped probes since last increase.

                The SYN Stealth Scan took 263.62s to scan 1660 total ports.

                Warning:  OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port

                Host 192.168.2.222 appears to be up ... good.

                Interesting ports on 192.168.2.222:

                (The 1650 ports scanned but not shown below are in state: filtered)

               PORT     STATE  SERVICE

               21/tcp   closed ftp

               23/tcp   closed telnet

               53/tcp   closed domain

               113/tcp  closed auth

               256/tcp  closed FW1-secureremote

               443/tcp  closed https

               554/tcp  closed rtsp

               636/tcp  closed ldapssl

               1723/tcp closed pptp

               3389/tcp closed ms-term-serv

               Too many fingerprints match this host to give specific OS details

               Nmap run completed -- 1 IP address (1 host up) scanned in 271.799 seconds  

              可以看出,PortSentry 及時添加了 iptables 規則,阻擋了 rac1 的掃描,使得 rac1 的掃描根本就沒能發現什麼有價值的資訊,great!

        OSSEC 和 PortSentry 在檢測和防護 nmap 掃描時确實表現不凡。但是,我們也不得不承認,他們在應對 nessus 和 nikto 掃描時,幾乎無能為力。防護 nessus 和 nikto 掃描的重任,就隻有交給網絡 IDS/IPS 了。

        最後,我們看看網絡入侵檢測系統在防護網絡掃描方面的表現:就筆者所知,工作于 Inline 模式的 Snort 和 Juniper NetScreen-IDP 可以防護各種網絡掃描,諸如 nmap, nessus, nikto 等等,其它 IDS/IPS 筆者不熟悉,不敢亂說了。

        提示:如果我們正确配置了防火牆,那麼惡意端口掃描并不是嚴重的事情,不會對我們的網絡安全構成嚴重威脅。

六. 結語

     在本系列文章的三個部分,我們分别探讨了網絡掃描基礎和端口掃描,漏洞掃描,如何應對網絡掃描。可以看出,網絡掃描并沒有我們想象的那麼簡單,需要注意很多地方和細節,才能夠獲得我們需要的資訊,才能夠避免給生産網絡造成負面影響,才能夠避免給自己帶來麻煩。為了更好地保護自己的網絡,我們需要積極使用多種軟體和技術來檢測和防護惡意的網絡掃描,限制惡意掃描能抵達的範圍,減少惡意掃描所能獲得的資訊,進而蒙上黑客的“眼睛”。

更多資訊,請參考筆者的其它幾篇文章:

《snort 安裝指南》

《主機入侵檢測系統 OSSEC 安裝指南》

《某大型網站在某機房網絡核心交換機配置》 RSPAN 配置部分;

《linux 系統安全規範》       

本文轉自zkjian517 51CTO部落格,原文連結:http://blog.51cto.com/zoukejian/61737

繼續閱讀