port knocking 技術可以提供伺服器與網路多一層安全上的防護,讓系統比較不容易被入侵。
這裡我們將從比較高些的角度介紹:
一般說到電腦的連接埠可以分為兩種:
硬體的連接埠比較簡單了解,它其實只是一個插座而已,用來連接其他的電腦或設備,例如網路卡上接網路線的網路孔就是一個常見的例子。
另外一種軟體連接埠就比較抽象,它在概念上跟實體的連接埠類似,只不過它是用在兩個或多個行程(process)之間的溝通上,有點像是行程上的一個插座,同一台電腦或不同台電腦中的行程就可以靠著軟體連接埠進行連線與資料的傳遞。
在實作上,一個 IP 位址加上一個軟體連接埠就可以組成一個可用的連線端點,在伺服器與使用者端電腦在連線時,要判斷一筆網路上的資料是要給哪一台電腦的哪個行程,就是依據 IP 位址與連接埠,而根據伺服器與使用者端電腦的兩個 IP 位址與兩個軟體連接埠,就可以辨識出這條連線。
在討論 port knocking 時,我們談論的連接埠都是指軟體連接埠。
在討論 port knocking 之前,我們先簡略描述一下一般網路駭客所使用的攻擊技術,讓大家先有概念,到底連接埠跟網路攻擊之間有什麼關聯性,而這裡我們要介紹的攻擊技術稱為連接埠掃描(port scanning)。
連接埠掃描是一種常見的網路攻擊技巧,他的原理就是掃瞄一台電腦所有的連接埠,看看哪些連接埠有開啓,而每個開啟的連接埠也會對應一個使用這個連接埠的應用程式,通常一些常見的應用程式其開啓的連接埠都是固定的,換句話說,攻擊者只要找出該電腦所開啓的連接埠是哪些,大約就可以猜出有哪一些應用程式在執行,而攻擊者就可以從中挑選一些安全性較低、容易入侵的程式進行攻擊,透過這樣的方式入侵到系統中。
我們再舉一些常見的例子,像網頁伺服器(HTTP)就會開啓 80 這個連接埠,而檔案傳輸(FTP)的服務就會開啓 21 連接埠等等,攻擊者只要確認你所使用的伺服器軟體,而又剛好找到該軟體的漏洞的話,他就可以有機會入侵系統了。
我個人也有這方面的經驗,在大學時候剛接觸 Linux,對系統不甚了解,用 Wu-FTP 架了一個 FTP 伺服器,因為沒注意 Wu-FTP 有很大的漏洞,伺服器放著一段時間,就這樣給駭客入侵了,後來有經驗之後,就會開始注意這方面的問題。
port knocking 是一個可以在現有的防護措施上再多加上一層保護的技術,它的基本想法就是只有開啓的連接埠才會有被攻擊的風險,所以它就讓所有的連接埠在一開始都不要開啓,然後以連接埠的組合設定一個暗號,只有知道暗號的人才能讓連接埠開啟,然後連線。
我們舉個實際的例子來描述這個概念,平常你在家裡時,為了要避免壞人跑進自己家裡,所以都會把大門鎖上,但是有時候又有朋友來訪,而你在開門之前又無法確認門外的人到底是壞人還是朋友,該怎麼辦呢?這時候你可以設定一個暗號(例如芝麻開門),把這個暗號告訴你的朋友,當朋友來訪時就用送出這個暗號,而你要確認暗號正確才會開門,因為壞人不知道暗號,所以就沒有機會讓你開門,這樣就很安全了。
下面這張圖是以一個很高階的角度來敘述 SSH port knocking 的過程,如果沒有 port knocking 的改念,SSH 伺服器就會讓 SSH 的連接埠(22)持續保持開啟的狀態,但是如果使用了 port knocking 的技術,client 必須先送出一組固定的連接埠組合(暗號),然後等伺服器確認該連接埠組合是正確的之後,才會把 SSH 的連接埠打開讓 client 連線。
透過這樣 port knocking 的方式,可以讓電腦多一層防護,但是攻擊者還是可以用暴力法,不斷的嘗試各種連接埠組合,若要對付這樣的狀況,可以讓防火牆針對這樣不斷嘗連接埠組合的人做一些處理,例如有人如果猜了太多次錯誤的組合,就直接把他擋在門外了。另外,如果想要使用暴力法攻擊,其實也不太可能,因為要猜出由 65535 個連接埠的組合,是非常困難的事情。
這裡整理了一些 port knocking 的優點與缺點。
port knocking 的優點如下:
而 port knocking 的缺點也是不少:
這裡我們簡單介紹了 port knocking 的概念,也列出了目前大家正在討論的優缺點,而這樣技術也還在發展中,可能離實際應用還有一小段距離。
參考資料:The Geek Stuff