端口碰撞技術(Port knocking)
從安全管理的角度來說,開啟的服務端口越多,就越不安全,有道是“明槍易躲,暗箭難防”,因此“系統安全加固服務”中,最常用的方式,就是先關閉無用端口,再對提供服務的端口做訪問控制。
而作為遠程管理與維護的人員通常需要開啟一些服務端口,如FTP和SSH,這些服務使用大家熟悉的一些端口,長時間開啟這些端口,往往是“嚴重”的安全隱患。所以能在“需要”的時候才開啟服務,并只對特定的人提供服務,服務完畢端口有恢復關閉狀態,攻擊者就難以利用這個“安全隱患”了,端口碰撞技術提供了比較理想的解決方案。
端口碰撞技術是一種允許服務設備在用戶按照約定的序列碰撞后,打開一個約定的服務端口提供服務的技術。所謂碰撞是由一個嘗試訪問系統中關閉端口的序列組成,也就是特定端口的連接請求。
說起來,端口碰撞技術的實現很簡單:
1、 開啟固定的端口服務
如在服務器上設置為:服務器接收到同一個用戶的對端口2048、2049、2055、2058連接序列嘗試后,則服務器打開TCP服務端口號28,該用戶可以通過該端口進行遠程工作,連接結束后自動關閉該服務端口。若是防火墻等網關類設備,則在截獲該序列的嘗試后,在訪問列表中增加一條規則來放行該用戶的TCP28數據包,使該連接可以通過防火墻。收到連接關閉命令后,再刪除該規則,恢復對該端口的拒絕服務。
2、 動態開啟端口服務
若需要使用端口碰撞技術打開的服務端口有多個,或者動態變化服務的端口,在設計服務器上的碰撞序列時,可以采用在序列中“指定”端口,在序列某個位置上“告之”希望打開的服務端口。如設定規則為,最后的一個端口減2000為服務端口好,則碰撞序列為2048、2049、2055、2058、2443時,就是希望開啟443端口的服務。
端口碰撞技術看起來不復雜,對于使用者了說,在正常的連接建立前,又增加了一層“密碼”驗證,可以做個小工具軟件來自動化你每次的碰撞過程,把碰撞序列作為密碼一樣順序發出,就可以直接工作了。并且不僅在防火墻上可以實現(此時服務器上可以默認打開該服務端口),而且在服務器上也可以直接實現。在實現的設備上增加了一個匹配的緩沖池,以狀態機的方式跟蹤進入匹配的用戶(源IP),從匹配第一個端口包,開始啟動狀態機,該用戶后來的包逐個匹配序列,完成一個進入下一個狀態,直到整個序列匹配,若有一個包不匹配,則回到初試狀態。
端口碰撞技術的安全性
既然,端口碰撞技術實現起來不麻煩,對于工作人員(使用人少的服務合適,若大量用戶的功能顯然不適合)的“特殊”服務需求的開啟就很方便,那它的安全性有問題嗎?
“密碼”類的防護有兩種“天敵”,一是密碼簡單,很容易猜測,因為帳號一般不是保密的,即使是系統默認的一些系統管理的高級帳號,所以容易破解。二是暴力破解,目前128位的密碼破解的時間已經縮短到小時級別,所以密碼類防護技術,目前的方式大多的增加長度與組合。
端口碰撞采用端口號的組合方式,有些類似密碼,但首先端口序列本身沒有含義,是使用者自己設置的,所以不容易猜測,端口號理論上有六萬多個,沒有開啟服務的都可以拿來做碰撞使用,組合數量也很龐大。其次,碰撞序列的長度不固定,這讓掃描類的破解工具很“頭痛”,因為不知道何時為猜測的結束。再次,也是最重要的一點,碰撞可以采用與連接的初始包一樣包做碰撞,也可以不一樣,如采用Ping包,或者采用特殊標記的SYN包等。端口碰撞是探測服務器沒有開啟的服務端口,服務器的回復(很多是不理睬)不能說明你現在是否是匹配的,即使你“有幸”找到了碰撞序列,但下一個數據包應該是你開始正常連接的數據包,而這時若選錯了,前邊的“匹配”立即“歸零”,因此,該技術抗掃描的能力是很強的。
碰撞技術的擴展
端口碰撞技術最理想的應用應該是遠程設備管理,因為這是使用不頻繁,而威脅很大的需求,也是網絡維護人員最需要的功能。另外,應用到一些保密文檔的遠程獲取,也是不錯的選擇,也就是說可以在FTP服務上增加動態共享保密文件的功能,碰撞的方式可以不再是端口,而是FTP普通服務命令的特殊組合序列,匹配時臨時為該用戶開通保密文檔的下載功能,使用完后可以立即取消。