2007年5月23日 星期三

網路攻防戰(Port Scanner)

網路上的絕對安全,我想每個有上網的人應該都知道是不可能的,但是要怎樣可以取得一個相對安全的環境,就是大家所努力的目標,先不論您用什麼防毒軟體、防火牆、掃廣告或木馬軟體等,您還是可以針對自己電腦上網時的安全,做個小小的測試

(筆者先聲明,限對自己的電腦檢測,不然會被視為入侵他人電腦的駭客)

首先,大家要先瞭解一下,網路上所有的服務都會經過一個稱為Port的通道來傳送,例:80是http、21是ftp...等,基本上除了常用的一些Port號之外(網路上大家共同使用的Port),其它的Port就是隨機開啟的通道,目前認可的Port數共有66536個(0~65535)

有了這個概念之後,其實再怎麼強的駭客程式也是要經由這個通道來進出,所以如果您能夠把這些port管理的很好的話,就可以大大的減少被駭的可能性


只是有一點比較麻煩的事,那就是這些Port號,經常都是會有共用的,例如:80是http預設使用的Port,但是像有些IM軟體(MsnSkype...等)當它們原先的port號無法跟外界溝通時,一樣會經由80這個Port號與外界連上線,所以這只是一個小小的防護及檢測手段

下面筆者介紹一下在不同系統平台查看Ports的方法

Windows

指令:netstat[-a] [-e] [-n] [-s] [-p protocol] [-r] [interval]

C:...>netstat -a (可查看所有與電腦的連線狀態,不過太繁雜了)
C:...>netstat -p tcp/udp (可查看與電腦的tcp/udp的連線狀態,常用)

-------------------------------
Proto   Local Address     Foreign Address     State
(服務)  (本機)       (遠端)      (連線狀態)
 TCP  xx-pc:1476  nz-in-f191.google.com:http   Established

其中比較難瞭解的部份應該是State那一欄,它是指TCP的狀態

Established:代表連線已建立
Listening:代表這個Port號正再等待連線(Server端常見)
Time_Wait:代表連線已逾時

如果真的還想知道更多的話,可以利用netstat/?的方式來查詢其它用法

那如果想要知道別人電腦開了什麼Port的話呢?(就是筆者所說的危險
在Windows系統中,筆者沒有找到什麼指令可以掃描遠端的Port,不過在網路上這樣子的相關軟體到是挺多的,就拿很多人愛用的NetView(NetBrute Scanner)來說,您可以從官網的下載點(1.0.0.9版)取得這個小程式

筆者裡不做詳細的說明,它本身就包含NetBrute、PortScan和WebBrute三種模式可應用,它原本的用意是用來檢測自己的電腦,但是常被人拿來做為刺探它人所用,所以如果濫用的話,後果就要自行負責了,其中的PortScan就可以針對遠端進行Port的掃描

Linux

指令:netstat(本機端)、nmap(遠端)

netstat的用法與Windows下雷同,只是有些參數部份不一樣

常用的 option:
    -t:針對TCP服務
    -l:針對在listening的Port,指Server端服務居多
    -u:針對UDP服務
    -n:電腦名稱的部份改以數字代表,例:Localhost --> 127.0.0.1
    -p:針對那些相對的應用程式

其它更多的用法可以用man netstat來查詢

nmap的用法很簡單,其實它原本預設的功能已經很強大了

例:nmap localhost(查詢自己所有開放的port,結果與netstat類似)
  nmap IP(查詢某特定IP開放的port)
  nmap 192.168.1.0(查詢192.168.1.0~192.168.1.254開放的port)
  nmap 192.168.0-10(查詢192.168.1.0~192.168.1.10開放的port)
  nmap -sT/-sU IP(查詢某特定IP開放有關TCP/UDP的port)

其它更多的用法可以用man nmap來查詢(man就是所謂的說明文件)

不過因為nmap這個指令太過強大,筆者極度建議只針對本機端使用,除非你是網路管理者,不然很有可能因為這指令的強大惹上麻煩


文中的NetBrute軟體,也許也是利用相關的指令方式來測試遠端電腦

不過還是有些是傳統的使用者會利用ping的方式來查詢,不過現在絕大數的防火牆軟硬體都不會回應ping這個指令了,所以這跟上面的使用方法是不一樣的喔!

不過,不要以為開了Port就一定是不好的喔!因為重點是在你開啟這個Port的應用軟體,而不是這個Port有問題,因為筆者一開始就說過了,它只是一個通道呀!

你在高速公路上逛大街,危險的是「高速公路」,還是在上頭的「」呢?

4 則留言:

  1. 你好~
    我想請教你一下
    關於這篇文章linux的部分
    我剛剛試了一下指令
    nmap 127.0.0.1
    雖然有列出我有開的服務
    但是像ssh我改過port
    他就沒有列出來
    他是不是只針對一些預設的port去做測試呢?
    例如http就測試80
    而不是從1~65536去做掃描

    P.S 我是你的忠實讀者唷!不過是第一次留言^^

    回覆刪除
  2. To 生蛋:
    首先,很高興你浮出水面了,多謝你的賞光,有問題大家說不定可以教學相長。

    關於你所提的這個問題,我也親自嘗試了一下你可能會遇到的問題,以下是我的猜測狀況。

    你更改的ssh port應該是非tcp的port,所以用nmap來掃描時,不會看見它的存在,因為nmap預設狀況只會掃描tcp協定的port(你可以從/etc/services中查閱有那些port是由tcp協定採用,從訊息中你就可以看見它掃描了1678個port)

    所以你開修改ssh port時,剛好不是其中一個時,它就不會顯示出來。

    如果要硬掃出來時,就可以利用指定掃描port號的方式來進行掃描,例:
    「nmap -p 0-65535 127.0.0.1」

    我的測試過程如下,分享給你參考(OS:CentOS 5)

    #netstat -tlnp | grep sshd
    tcp 0 0 :::10011 :::* LISTEN 2053/sshd
    ↑↑
    這邊可以看見我修改sshd port

    [root@centos etc]# nmap 127.0.0.1

    Interesting ports on centos.home (127.0.0.1):
    Not shown: 1678 closed ports
    PORT STATE SERVICE
    21/tcp open ftp
    25/tcp open smtp

    Nmap finished: 1 IP address (1 host up) scanned in 0.315 seconds

    ↑↑
    用nmap預設的方式掃描,而且可以看見它一共會掃1680個port(services中tcp的協定),其中只有這兩個開啟

    [root@centos etc]# nmap -p 0-65535 127.0.0.1

    Interesting ports on centos.home (127.0.0.1):
    Not shown: 65533 closed ports
    PORT STATE SERVICE
    21/tcp open ftp
    25/tcp open smtp
    10011/tcp open unknown

    ↑↑
    修改掃描範圍,一樣可以找出你所修改的ssh port。

    以上,希望可以解決你的疑惑,這個回文有點長,感覺好像可以再寫一篇了...

    多謝你的留言,當然也歡迎你的多多造訪,只要我的時間允許,我都會盡力回覆大家的問題。

    (重點是希望我的留言機制不會造成讀者的困擾,因為最近來留言加LINK的SPAM愈來愈多了,還請見諒。)

    回覆刪除
  3. 原來是他有個預設的條件在進行掃描阿~
    那我知道原因了
    謝謝

    留言機制不錯阿
    因為就連wordpress有裝圖形驗證的外掛
    還是有垃圾留言
    不過審核過後若有信件通知
    基本上對讀者來說都不會有太大困擾

    回覆刪除
  4. To 生蛋:

    能夠解決你的疑問,我想對我來說就是最重要的一件事,至於留言機制的部分,如果每個讀者登能夠接受的話就好了。

    畢竟,我這麼做還是會讓人覺得我是否會"私自"把留言給刪除的疑慮,所以我當初在使用前也是經過一番掙扎的。

    多謝你的支持跟打氣,我會繼續寫下去的。

    回覆刪除