135、137、138、139和445埠
目錄
首先,這幾個埠都是與檔案共享和印表機共享有關的埠,而且在這幾個埠上經常爆發很嚴重的漏洞。比如去年危害全球的永恆之藍,就是利用的445埠。
Windows預設開放135、137、138、139和445五個埠,主要是方便初級使用者操作,即不進行必要地設定就可以使用網路通訊和各種共享服務。但這樣一來,使用者不希望啟動或者用不到的一些服務都會隨機啟動,主機連線因特網後會在使用者不知曉的情況下洩露本機資訊。因此我們應儘可能的多瞭解一些這些埠的作用,權衡埠開放的利與弊,然後制定相應的安全策略。
TCP135埠
135埠在Windows預設的五個典型開放埠中,135用途最為複雜,也最容易引起自外部攻擊。若使用SecurityFriday公司開發的一款“IEen”軟體進行埠安全性驗證,就能清楚地看到這個埠開放是非常的危險的。
IEen是一種遠端操作IE瀏覽器的工具。使用它不僅可以獲得其它電腦IE瀏覽器的資訊,而且還可以對瀏覽器進行操作。具體而言,就是可以得到正在執行的IE瀏覽器的視窗一覽表、各視窗所顯示的Web站點的URL和Cookie,以及在檢索站點中輸入的檢索關鍵詞等資訊。
IEen使用的是 Windows NT4.0/2000/XP 整合的分散式物件技術 DCOM(分散式元件物件模組),可以遠端操作其他電腦中的DCOM應用程式。該技術使用的是 RPC(Remote Procedure Call,遠端過程呼叫
這個RPC服務使用的就是135埠。RPC是 Windows 作業系統使用的一個遠端過程呼叫服務。RPC 提供了一種程序間的通訊機制,通過這一機制,允許在某臺計算機上執行的程式流暢地在遠端系統上執行程式碼。協議本身源自OSF(開放式軟體基礎)RPC 協議,但增加了一些 Microsoft 特定的擴充套件 。由於使用 RPC 的程式不必瞭解支援通訊的網路協議的情況,因此 RPC 提高了程式的互操作性。
因為在 RPC 中發出請求的程式是客戶程式,而提供服務的程式是伺服器。所以利用RPC功能進行通訊時,就會向對方電腦的135埠詢問可以使用哪個埠進行通訊。這樣,對方的電腦就會告知可以使用的埠號。在非加密狀態下,使用IEen可以看到對方電腦本應受到SSL保護的資料,甚至能夠直接看到比如在網路銀行等輸入的銀行現金卡密碼等資訊。所以也不可避免地暴露了漏洞。攻擊者能利用該漏洞在受影響的系統上以本地系統許可權執行程式碼,執行任何操作,包括安裝程式,檢視、更改或者刪除資料,或者建立系統管理員許可權的帳戶。針對這一漏洞的蠕蟲病毒有許多。早期的這些蠕蟲病毒只是攻擊此漏洞,造成遠端系統的崩潰,而大名鼎鼎的衝擊波漏洞”則會利用這一漏洞進行快速傳播,輕而易舉地控制他人的IP地址和註冊名,使更多的個人或公司系統遭殃。
迴避這種危險的最好辦法是關閉RPC服務。如果不使用DCOM特定的應用程式如 Web伺服器、郵件或DNS伺服器等,即便關閉135埠,也不會出現任何問題。關閉RPC服務的方法是在“控制面板”的“管理工具”中選擇“服務”,在“服務”視窗中開啟“Remote Procedure Call”屬性,在屬性視窗中將啟動型別設定為“已禁用”,重新啟動電腦,RPC就不再執行。也可開啟登錄檔編輯器,將“HKEY_LOCAL_MACHINE//SYSTEM//CurrentControlSet//Services//RpcSs”的“Start”的值由0x04變成0x02後,重新起動機器即生效。
不過,關閉RPC服務後會給Windows的執行帶來很大的影響。因為Windows的很多服務都依賴於RPC,而這些服務在將RPC設定為無效後將無法正常起動。比如,如果客戶端關閉了135埠,就無法使用Outlook連線Exchange Server。因為管理分散式處理的MSDTC、負責應用程式之間的資訊交換的MSMQ以及動態地向連線網路的電腦分配地址的DHCP等服務也都使用這個埠。同時, Windows 啟動的速度會變的非常慢。
關閉RPC服務弊端非常大,一般不能輕易關閉。但為了避免遭受攻擊,網路客戶端卻可以禁止遠端登入電腦。方法是依次選擇“控制面板”、“管理工具”和“本地安全策略”,開啟本地安全設定視窗,選擇本地策略中的使用者權利指派,然後利用該項下的“拒絕從網路訪問這臺計算機”,指定拒絕訪問的物件。如果想拒絕所有的訪問,最好指定為“Everyone”。
在公司內部,如果不想讓其他計算機操作自己電腦,可以將DCOM設定為無效。方法是用DOS命令執行Windows NT/2000/XP標準整合的“dcomcnfg.exe”工具。從開啟的分散式COM配置屬性視窗中,選擇“預設屬性”頁標,取消“在這臺計算機上啟用分散式COM”選項即可。
DCOM(分散式物件模型)是一種能夠使軟體元件通過網路直接進行通訊的協議。DCOM 以前叫做“網路 OLE”,它能夠跨越包括 Internet 協議(例如 HTTP)在內的多種網路傳輸。
UDP137、138埠
只需向對方Windows的137埠傳送一個詢問連線狀態的資訊包,就可以得到該機的計算機名和註冊使用者名稱,該機是否為主域控制器和主瀏覽器、是否作為檔案伺服器使用、IIS和Samba是否正在執行以及Lotus Notes是否正在執行等資訊。
不只是公司內部網路,連線因特網的電腦也是如此。只要知道對方的IP地址,就可以向這臺電腦的137埠傳送一個請求,獲得諸多資訊。如果捕捉到正在利用137埠進行通訊的資訊包,還有可能得到目標主機的起動和關閉時間。這是因為Windows起動或關閉時會由137埠傳送特定的資訊包。如果掌握了目標主機的起動時間,就可以非常輕鬆地使用上一次所講的IEen等軟體通過135埠操作對方的DCOM。
137埠為什麼會使各種資訊包洩漏到網路上呢?這是因為,在Windows網路通訊協議——“NetBIOS over TCP/IP(NBT)”的計算機名管理功能中使用的是137埠(計算機名管理是指Windows網路中的電腦通過用於相互識別的名字——NetBIOS名,獲取實際的IP地址的功能。)為了得到通訊物件的IP地址,137埠就要交換很多資訊包。
137埠資訊包洩漏主要有兩種途徑:
- 一種途徑,位於同一組中的電腦之間利用廣播功能進行計算機名管理。電腦在起動時或者連線網路時,會向位於同組中的所有電腦詢問有沒有正在使用與自己相同的NetBIOS名的電腦。每臺收到詢問的電腦如果使用了與自己相同的NetBIOS名,就會發送通知資訊包。這些通訊是利用137埠進行的。
- 另一種途徑,利用WINS(Windows因特網名稱服務)管理計算機名。被稱為WINS伺服器的電腦有一個IP地址和NetBIOS名的對照表。WINS客戶端在系統起動時或連線網路時會將自己的NetBIOS名與IP地址傳送給WINS伺服器。當主機與其他計算機通訊時,會向WINS伺服器傳送目標主機NetBIOS名,然後WINS伺服器會根據NetBIOS名將ip地址發回給主機。這種方法也使用137埠。
隨意地洩漏這樣的資訊,就好像是很友好地告訴攻擊者應該如何來攻擊自己的電腦。使惡意攻擊者根本不必特意地通過埠掃描來尋找,就可以下手入侵。比如,如果知道IIS服務正在執行,就可以輕鬆地瞭解這臺電腦上已經起動的服務。這對入侵者來說,惡意攻擊簡直太方便了。
138埠提供NetBIOS的瀏覽功能。在該功能中,被稱為主瀏覽器的電腦管理著連線於網路中的所有電腦,該電腦上存在該網路內所有電腦的瀏覽列表。比如,在Windows2000中,從“網路上的芳鄰”選擇了“整個網路”後,就能清楚地看到連線網路的所有的鄰近電腦。
138埠提供NetBIOS的瀏覽功能。該功能使用的是與137埠計算機名管理不同的執行機制,主要用來顯示連線於網路中的電腦一覽表。每臺電腦在起動時或連線網路時都會利用138埠廣播自己的NetBIOS名,將自己的電腦資訊傳送給同組中的所有電腦。 收到NetBIOS名的主瀏覽器會將這臺電腦追加到瀏覽列表中。當收到瀏覽列表顯示請求時,收到請求的主瀏覽器會發送瀏覽列表給請求的主機。關閉電腦時,主機會通知主瀏覽器,以便讓主瀏覽器將自己的NetBIOS名從列表中刪除掉。儘管138埠的資訊量沒有137埠那麼多,但也存在不容忽視的安全隱患。
NetBIOS服務主要使用137和138埠的向外部發送自己資訊。NetBIOS主要用於Windows網路中,雖然Windows 2000以上的版本,不使用NetBIOS也能夠管理計算機名,完全可以停止NBT,但會降低Windows網路使用的方便性,如無法顯示用於尋找檔案共享物件的資訊。這對於基於公司內部網路環境構築Windows網路的電腦來說,NetBIOS服務還是必要的。
停止NetBIOS服務,首先由控制面板中選擇目前正在使用的網路連線,在屬性視窗中檢視“Internet協議(TCP/IP)”的屬性。在“常規”頁標中單擊“高階”按鈕,在“WINS”頁標中選擇“禁用TCP/IP上的NetBIOS(S)”即可。這樣,就可以關閉137、138以及後面將要講到的139埠。
需要注意的一點。NetBEUI協議如果為有效,NetBIOS服務將會繼續起作用。在Windows 95中,NetBIOS是在預設條件下安裝的。在更高的Windows版本中,如果選擇也可以安裝。所以不僅要停止NBT,還應該確認NetBEUI是否在起作用。如果使用NetBEUI,即便關閉137埠,也仍有可能向外部洩漏資訊。
TCP139、445埠
139和445埠的通訊過程是通過SMB(伺服器資訊塊)協議實現的。即根據DNS伺服器中的名字列表資訊,尋找需要通訊的物件。如果順利地得到物件的IP地址,就可以訪問共享資源 。Windows 2000以前版本的Windows使用NetBIOS協議解決各計算機名的問題。通過向WINS伺服器傳送通訊物件的NetBIOS名,取得IP地址。而Windows2000以後的版本所採用的CIFS則利用DNS解決計算機的命名問題。
在SMB通訊中,首先要取得通訊物件的IP地址,然後向通訊物件發出開始通訊的請求。如果對方充許進行通訊,就會確立會話層(Session)。並使用它向對方傳送使用者名稱和密碼資訊,進行認證。如果認證成功,就可以訪問對方的共享檔案。在這些一連串的通訊中使用的就是139埠。
除此之外,Windows 2000以後的系統還使用445埠。檔案共享功能本身與139埠相同,但該埠使用的是與SMB不同的協議。這就是在Windows 2000中最新使用的CIFS(通用因特網檔案系統)協議。 CIFS和SMB解決計算機名的方法不同。SMB使用NetBIOS和WINS解決計算機名,而CIFS則使用DNS。當139和445埠同時開啟的話,網路檔案共享優先使用445埠。當445埠關閉時,網路檔案共享使用139埠。但是自從win10開始,檔案共享只使用445埠,445埠關閉的話,則不能使用檔案共享服務。因此,在檔案伺服器和列印伺服器使用Windows的公司內部網路環境中,就無法關閉139和445埠。
在預設設定下,Windows會開放提供檔案共享服務的TCP 139號埠。一旦檔案共享服務起動,系統就會進入等待狀態。而共享資源則可以利用net命令輕鬆地進行分配。儘管C盤如果沒有管理員許可權就無法共享,但如果不經意地將Guest帳號設定為有效以後,攻擊者就能夠訪問C盤,非常輕鬆地破壞硬碟。如果客戶端使用Windows 2000以上系統構成的網路,自身不公開檔案,就可以關閉這兩個埠。 這是因為如前所述,該網路只用445埠就能夠進行檔案共享。由於在解決計算機名過程中使用DNS,所以也可以關閉137和138埠。而在很多情況下,檔案共享和印表機共享在普通的業務中必須使用139埠通過SMB協議進行通訊,因此就無法關閉139埠。另外,瀏覽時還需要137~139埠。
公開伺服器絕對應該關閉這些埠
在因特網上公開的伺服器要另當別論。公開伺服器開啟139和445埠是一件非常危險的事情。就像本文開頭所說的那樣,如果有Guest帳號,而且沒有設定任何密碼時,就能夠被人通過因特網輕鬆地盜看檔案。如果給該帳號設定了寫入許可權,甚至可以輕鬆地篡改檔案。也就是說在對外部公開的伺服器中不應該開啟這些埠。通過因特網使用檔案伺服器就等同自殺行為,因此一定要關閉139和445埠。對於利用ADSL永久性接入因特網的客戶端機器可以說也是如此
要關閉139埠,與137和138埠一樣,可以選擇“將NetBIOS over TCP/IP設定為無效”。而要想關閉445埠則必須進行其他工作。利用登錄檔編輯器在“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters”中追加名為“SMBDeviceEnabled”的DWORD值,並將其設定為0,然後重新起動機器
相關文章:Linux檔案共享服務之Samba
Windows中的共享檔案和檔案伺服器