百科解釋
一個端口就是一個潛在的通信通道,也就是一個入侵通道。對目標計算機進行端口掃描,能得到許多有用的信息。進行掃描的方法很多,可以是手工進行掃描,也可以用端口掃描軟件進行。
在手工進行掃描時,需要熟悉各種命令。對命令執(zhí)行后的輸出進行分析。用掃描軟件進行掃描時,許多掃描器軟件都有分析數(shù)據(jù)的功能。
通過端口掃描,可以得到許多有用的信息,從而發(fā)現(xiàn)系統(tǒng)的安全漏洞。
什么是掃描器
掃描器是一種自動檢測遠程或本地主機安全性弱點的程序,通過使用掃描器你可一不留痕跡的發(fā)現(xiàn)遠程服務器的各種TCP端口的分配及提供的服務和它們的軟件版本!這就能讓我們間接的或直觀的了解到遠程主機所存在的安全問題。
工作原理
掃描器通過選用遠程TCP/IP不同的端口的服務,并記錄目標給予的回答,通過這種方法,可以搜集到很多關于目標主機的各種有用的信息(比如:是否能用匿名登陸!是否有可寫的FTP目錄,是否能用TELNET,HTTPD是用ROOT還是nobady在跑!)
掃描器能干什么
掃描器并不是一個直接的攻擊網絡漏洞的程序,它僅僅能幫助我們發(fā)現(xiàn)目標機的某些內在的弱點。一個好的掃描器能對它得到的數(shù)據(jù)進行分析,幫助我們查找目標主機的漏洞。但它不會提供進入一個系統(tǒng)的詳細步驟。
掃描器應該有三項功能:發(fā)現(xiàn)一個主機或網絡的能力;一旦發(fā)現(xiàn)一臺主機,有發(fā)現(xiàn)什么服務正運行在這臺主機上的能力;通過測試這些服務,發(fā)現(xiàn)漏洞的能力。
編寫掃描器程序必須要很多TCP/IP程序編寫和C, Perl和或SHELL語言的知識。需要一些Socket編程的背景,一種在開發(fā)客戶/服務應用程序的方法。開發(fā)一個掃描器是一個雄心勃勃的項目,通常能使程序員感到很滿意。
常用的端口掃描技術
TCP connect() 掃描
這是最基本的TCP掃描。操作系統(tǒng)提供的connect()系統(tǒng)調用,用來與每一個感興趣的目標計算機的端口進行連接。如果端口處于偵聽狀態(tài),那么connect()就能成功。否則,這個端口是不能用的,即沒有提供服務。這個技術的一個最大的優(yōu)點是,你不需要任何權限。系統(tǒng)中的任何用戶都有權利使用這個調用。另一個好處就是速度。如果對每個目標端口以線性的方式,使用單獨的connect()調用,那么將會花費相當長的時間,你可以通過同時打開多個套接字,從而加速掃描。使用非阻塞I/O允許你設置一個低的時間用盡周期,同時觀察多個套接字。但這種方法的缺點是很容易被發(fā)覺,并且被過濾掉。目標計算機的logs文件會顯示一連串的連接和連接是出錯的服務消息,并且能很快的使它關閉。
TCP SYN掃描
這種技術通常認為是“半開放”掃描,這是因為掃描程序不必要打開一個完全的TCP連接。掃描程序發(fā)送的是一個SYN數(shù)據(jù)包,好象準備打開一個實際的連接并等待反應一樣(參考TCP的三次握手建立一個TCP連接的過程)。一個SYN|ACK的返回信息表示端口處于偵聽狀態(tài)。一個RST返回,表示端口沒有處于偵聽態(tài)。如果收到一個SYN|ACK,則掃描程序必須再發(fā)送一個RST信號,來關閉這個連接過程。這種掃描技術的優(yōu)點在于一般不會在目標計算機上留下記錄。但這種方法的一個缺點是,必須要有root權限才能建立自己的SYN數(shù)據(jù)包。
TCP FIN 掃描
有的時候有可能SYN掃描都不夠秘密。一些防火墻和包過濾器會對一些指定的端口進行監(jiān)視,有的程序能檢測到這些掃描。相反,F(xiàn)IN數(shù)據(jù)包可能會沒有任何麻煩的通過。這種掃描方法的思想是關閉的端口會用適當?shù)腞ST來回復FIN數(shù)據(jù)包。另一方面,打開的端口會忽略對FIN數(shù)據(jù)包的回復。這種方法和系統(tǒng)的實現(xiàn)有一定的關系。有的系統(tǒng)不管端口是否打開,都回復RST,這樣,這種掃描方法就不適用了。并且這種方法在區(qū)分Unix和NT時,是十分有用的。
IP段掃描
這種不能算是新方法,只是其它技術的變化。它并不是直接發(fā)送TCP探測數(shù)據(jù)包,是將數(shù)據(jù)包分成兩個較小的IP段。這樣就將一個TCP頭分成好幾個數(shù)據(jù)包,從而過濾器就很難探測到。但必須小心。一些程序在處理這些小數(shù)據(jù)包時會有些麻煩。
TCP 反向 ident掃描
ident 協(xié)議允許(rfc1413)看到通過TCP連接的任何進程的擁有者的用戶名,即使這個連接不是由這個進程開始的。因此你能,舉個例子,連接到http端口,然后用identd來發(fā)現(xiàn)服務器是否正在以root權限運行。這種方法只能在和目標端口建立了一個完整的TCP連接后才能看到。
FTP 返回攻擊
FTP協(xié)議的一個有趣的特點是它支持代理(proxy)FTP連接。即入侵者可以從自己的計算機a.com和目標主機target.com的FTP server-PI(協(xié)議解釋器)連接,建立一個控制通信連接。然后,請求這個server-PI激活一個有效的server-DTP(數(shù)據(jù)傳輸進程)來給Internet上任何地方發(fā)送文件。對于一個User-DTP,這是個推測,盡管RFC明確地定義請求一個服務器發(fā)送文件到另一個服務器是可以的。但現(xiàn)在這個方法好象不行了。這個協(xié)議的缺點是“能用來發(fā)送不能跟蹤的郵件和新聞,給許多服務器造成打擊,用盡磁盤,企圖越過防火墻”。
我們利用這個的目的是從一個代理的FTP服務器來掃描TCP端口。這樣,你能在一個防火墻后面連接到一個FTP服務器,然后掃描端口(這些原來有可能被阻塞)。如果FTP服務器允許從一個目錄讀寫數(shù)據(jù),你就能發(fā)送任意的數(shù)據(jù)到發(fā)現(xiàn)的打開的端口。
對于端口掃描,這個技術是使用PORT命令來表示被動的User DTP正在目標計算機上的某個端口偵聽。然后入侵者試圖用LIST命令列出當前目錄,結果通過Server-DTP發(fā)送出去。如果目標主機正在某個端口偵聽,傳輸就會成功(產生一個150或226的回應)。否則,會出現(xiàn)"425 Can''t build data connection: Connection refused."。然后,使用另一個PORT命令,嘗試目標計算機上的下一個端口。這種方法的優(yōu)點很明顯,難以跟蹤,能穿過防火墻。主要缺點是速度很慢,有的FTP服務器最終能得到一些線索,關閉代理功能。
這種方法能成功的情景:
220 xxxxxxx.com FTP server (Version wu-2.4(3) Wed Dec 14 ...) ready.
220 xxx.xxx.xxx.edu FTP server ready.
220 xx.Telcom.xxxx.EDU FTP server (Version wu-2.4(3) Tue Jun 11 ...) ready.
220 lem FTP server (SunOS 4.1) ready.
220 xxx.xxx.es FTP server (Version wu-2.4(11) Sat Apr 27 ...) ready.
220 elios FTP server (SunOS 4.1) ready
這種方法不能成功的情景:
220 wcarchive.cdrom.com FTP server (Version DG-2.0.39 Sun May 4 ...) ready.
220 xxx.xx.xxxxx.EDU Version wu-2.4.2-academ[BETA-12](1) Fri Feb 7
220 ftp Microsoft FTP Service (Version 3.0).
220 xxx FTP server (Version wu-2.4.2-academ[BETA-11](1) Tue Sep 3 ...) ready.
220 xxx.unc.edu FTP server (Version wu-2.4.2-academ[BETA-13](6) ...) ready.
UDP ICMP端口不能到達掃描
這種方法與上面幾種方法的不同之處在于使用的是UDP協(xié)議。由于這個協(xié)議很簡單,所以掃描變得相對比較困難。這是由于打開的端口對掃描探測并不發(fā)送一個確認,關閉的端口也并不需要發(fā)送一個錯誤數(shù)據(jù)包。幸運的是,許多主機在你向一個未打開的UDP端口發(fā)送一個數(shù)據(jù)包時,會返回一個ICMP_PORT_UNREACH錯誤。這樣你就能發(fā)現(xiàn)哪個端口是關閉的。UDP和ICMP錯誤都不保證能到達,因此這種掃描器必須還實現(xiàn)在一個包看上去是丟失的時候能重新傳輸。這種掃描方法是很慢的,因為RFC對ICMP錯誤消息的產生速率做了規(guī)定。同樣,這種掃描方法需要具有root權限。
UDP recvfrom()和write() 掃描
當非root用戶不能直接讀到端口不能到達錯誤時,Linux能間接地在它們到達時通知用戶。比如,對一個關閉的端口的第二個write()調用將失敗。在非阻塞的UDP套接字上調用recvfrom()時,如果ICMP出錯還沒有到達時回返回EAGAIN-重試。如果ICMP到達時,返回ECONNREFUSED-連接被拒絕。這就是用來查看端口是否打開的技術。
ICMP echo掃描
這并不是真正意義上的掃描。但有時通過ping,在判斷在一個網絡上主機是否開機時非常有用。
典型掃描工具:nmap
在網上可以很容易地找到nmap的源碼,有興趣的話可以自行分析。