Fwknop:單包授權與端口試探工具

介紹

fwknop實現了一種稱為單包授權(SPA)的授權方案,用於隱藏服務。SPA將單個數據包經過加密,不可重放,並通過HMAC進行身份驗證,以便在傳達到隱藏在防火牆後面的服務。

SPA的主要應用場景是防火牆來過濾一切SSH等服務流量,從而使漏洞的利用(包括0day的和未打補丁)變得更加困難。由於沒有開放端口,因此無法使用Nmap掃描SPA隱藏的任何服務。

fwknop項目支持四種不同的防火牆:Linux,OpenBSD,FreeBSD和Mac OS X上的iptables,firewalld,PF和ipfw。

SPA基本上是下一代Port Knocking(PK),但在保留其核心優勢的同時,解決了PK所表現出的許多限制。PK侷限性包括難以防止重放攻擊,不對稱密碼和HMAC計劃,通常不可能可靠地支持,這是非常簡單的掛載一個DoS攻擊PK服務器通過欺騙一個額外的包成PK順序遍歷網絡(因此令人信服的PK服務器客戶端不知道正確的序列)。所有這些缺點都通過SPA得到了解決。

同時,SPA將服務隱藏在默認的drop防火牆策略後面,被動地獲取SPA數據(通常通過libpcap或其他方法),併為SPA包身份驗證和加密/解密實現標準的加密操作。

由fwknop生成的SPA數據包利用HMAC在加密然後驗證模型中進行身份驗證加密。雖然HMAC的使用目前是可選的(通過--use-hmac命令行開關啟用),但有三個原因強烈建議使用:

1.如果沒有HMAC,除非使用GnuPG,否則fwknop不可能進行加密的強身份驗證,但即使這樣,仍然應該應用HMAC。

2.加密後應用的HMAC可防止密碼分析CBC模式填充oracle攻擊,例如Vaudenay攻擊和相關欺騙(如最近的針對SSL的“Lucky 13”攻擊)。

3.wknopd守護進程驗證HMAC所需的代碼比解密SPA包所需的代碼要簡單得多,因此沒有正確的HMAC的SPA包甚至不會通過解密例程發送。

上面的最後一個原因是,即使SPA數據包使用GnuPG加密,仍然應該使用HMAC,因為SPA數據不是通過libgpgme函數發送的,除非HMAC首先檢出。GnuPG和libgpgme是相對複雜的代碼體,因此限制潛在攻擊者通過HMAC操作與此代碼交互的能力有助於保持更強的安全性。生成用於SPA通信的HMAC除了普通加密密鑰之外還需要專用密鑰,並且可以使用該--key-gen選項生成兩者。

fwknop使用Rijndael分組密碼或通過GnuPG和相關的非對稱密碼對SPA數據包進行加密。如果選擇了對稱加密方法,則通常在客戶端和服務器之間共享加密密鑰(/etc/fwknop/access.conf有關詳細信息,請參閱文件)。用於Rijndael加密的實際加密密鑰是通過標準PBKDF1密鑰導出算法生成的,並且設置了CBC模式。如果選擇GnuPG方法,則加密密鑰從GnuPG密鑰環導出。

用例

使用單數據包授權(SPA)或安全性受到挑戰的同類端口 Knocking(PK)的人通常訪問在部署SPA / PK軟件的同一系統上運行的SSHD。也就是說,在主機上運行的防火牆對所有傳入的SSH連接都有一個默認刪除策略,這樣就不能掃描SSHD,但是SPA守護進程會重新配置防火牆,暫時授予對被動認證的SPA客戶機的訪問權:

Fwknop:單包授權與端口試探工具

fwknop支持上述內容,但也更加牛批,並且使用NAT(對於iptables / firewalld防火牆)。畢竟,重要的防火牆通常是網絡之間的網關,而不是僅部署在獨立主機上。NAT通常用於此類防火牆(至少用於IPv4通信),以便為RFC 1918地址空間上的內部網絡提供Internet訪問,並允許外部主機訪問內部系統上託管的服務。

由於fwknop與NAT集成,因此可以利用SPA 通過外部Internet上的用戶通過防火牆訪問內部服務。雖然這在現代傳統網絡上有很多應用,但它也允許fwknop支持亞馬遜的AWS等雲計算環境:

Fwknop:單包授權與端口試探工具

用戶界面

官方跨平臺fwknop客戶端用戶界面fwknop-gui (下載,github)由Jonathan Bennett開發。支持大多數主要的客戶端SPA模式,包括NAT請求,HMAC和Rijndael密鑰(尚不支持GnuPG),fwknoprc節點保存等。目前fwknop-gui在Linux,Mac OS X和Windows上運行。

這是來自OS X的截圖:

Fwknop:單包授權與端口試探工具

教程

有關fwknop的綜合教程可以在這裡找到:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html

特徵

以下是fwknop項目支持的完整功能列表:

1.在Linux上的iptables和firewalld防火牆,* BSD和Mac OS X上的ipfw防火牆以及OpenBSD上的PF上實現單個數據包授權。

2.fwknop客戶端在Cygwin下的Linux,Mac OS X,* BSD和Windows上運行。此外,還有一個Android應用程序可以生成SPA數據包。

3.支持Rijndael和GnuPG方法用於SPA數據包的加密/解密。

4.支持Rijndael和GnuPG的HMAC認證加密。操作順序是加密 – 然後驗證以避免各種密碼分析問題。

5.通過有效傳入SPA數據包的SHA-256摘要比較來檢測和阻止重播攻擊。還支持其他摘要算法,但SHA-256是默認算法。

6.通過libpcap從導線上被動地嗅探SPA包。fwknopd服務器還可以從由單獨的以太網嗅探器(例如with tcpdump -w <file>),iptables ULOG pcap writer或直接通過UDP套接字--udp-server模式寫入的文件中獲取數據包數據。/<file>

7.對於iptables防火牆,fwknop添加的ACCEPT規則在自定義iptables鏈中添加和刪除(在可配置的超時之後),以便fwknop不會干擾可能已經加載到系統上的任何現有iptables策略。

8.支持經過身份驗證的SPA通信的入站NAT連接(僅適用於iptables防火牆)。這意味著可以將fwknop配置為創建DNAT規則,以便您可以從開放Internet訪問RFC 1918 IP地址上的內部系統上運行的服務(如SSH)。還支持SNAT規則,它實質上將fwknopd轉換為SPA驗證網關,以從內部網絡訪問Internet。

9.fwknop服務器支持多個用戶,並且可以通過/etc/fwknop/access.conf文件為每個用戶分配自己的對稱或非對稱加密密鑰。

10.通過https://www.cipherdyne.org/cgi-bin/myip自動解析外部IP地址 (當從NAT設備後面運行fwknop客戶端時,這非常有用)。由於外部IP地址在此模式下在每個SPA數據包內進行加密,因此中間人(MITM)會攻擊內聯設備攔截SPA數據包並僅從其他IP轉發以獲取訪問權限受到阻礙。

11.SPA數據包的目標端口以及通過iptables NAT功能建立後續連接的端口支持端口隨機化。後者適用於轉發到內部服務的連接以及授予運行fwknopd的系統上的本地套接字的訪問權限。

12.與Tor集成(如本DefCon 14演示文稿中所述)。請注意,由於Tor使用TCP進行傳輸,因此通過Tor網絡發送SPA數據包要求每個SPA數據包都通過已建立的TCP連接發送,因此從技術上講,這打破了“單數據包授權”的“單一”方面。但是,Tor提供的匿名優勢在某些部署中可能超過這一考慮因素。

13.實現SPA通信的版本化協議,因此很容易擴展協議以提供新的SPA消息類型,同時保持與舊的fwknop客戶端的向後兼容性。

14.支持代表有效SPA數據包執行shell命令。

15.fwknop服務器可以配置為對入站SPA數據包施加多個限制,超出加密密鑰強制執行的限制和重放攻擊檢測。即,包年齡,源IP地址,遠程用戶,對請求端口的訪問等。

16.捆綁了fwknop是一個全面的測試套件,它發佈了一系列測試,旨在驗證fwknop的客戶端和服務器部分是否正常工作。這些測試涉及通過本地環回接口嗅探SPA數據包,構建臨時防火牆規則,根據測試配置檢查相應的訪問權限,並解析來自fwknop客戶端和fwknopd服務器的輸出,以獲得每個測試的預期標記。測試套件輸出可以很容易地匿名化,以便與第三方進行通信以進行分析。

17.fwknop是第一個將端口敲擊與被動操作系統指紋識別相結合的程序。但是,單包授權提供了除端口 knocking之外的許多安全優勢,因此通常不推薦端口 knocking操作模式。

License

fwknop項目根據GNU通用公共許可證(GPL v2)或(根據您的選擇)任何更新版本的條款作為開源軟件發佈。最新版本可在http://www.cipherdyne.org/fwknop/找到。

升級

如果您從舊版本的fwknop升級(這也包括原始的perl實現),那麼您將需要閱讀以下鏈接以確保順利過渡到fwknop-2.5或更高版本:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility

Building fwknop

此發行版使用GNU autoconf來設置構建。INSTALL有關使用autoconf的一般基礎知識,請參閱文件。

有一些特定於fwknop的“配置”選項。它們是(從./configure –help中提取):

<code>  --disable-client     Do not build the fwknop client component. The
default is to build the client.
--disable-server Do not build the fwknop server component. The
default is to build the server.
--with-gpgme support for gpg encryption using libgpgme
[default=check]
--with-gpgme-prefix=PFX prefix where GPGME is installed (optional)
--with-gpg=/path/to/gpg Specify path to the gpg executable that gpgme will
use [default=check path]
--with-firewalld=/path/to/firewalld
Specify path to the firewalld executable
[default=check path]
--with-iptables=/path/to/iptables
Specify path to the iptables executable
[default=check path]
--with-ipfw=/path/to/ipfw
Specify path to the ipfw executable [default=check
path]
--with-pf=/path/to/pfctl
Specify path to the pf executable [default=check
path]
--with-ipf=/path/to/ipf Specify path to the ipf executable [default=check
path]

Examples:

./configure --disable-client --with-firewalld=/bin/firewall-cmd
./configure --disable-client --with-iptables=/sbin/iptables --with-firewalld=no/<code>

筆記

從Perl版本的fwknop遷移

對於那些目前正在使用Perl版本並計劃遷移到此版本的人,有一些事項需要注意:

1.並非所有基於Perl的fwknop的特性和功能都被移植到此實現中。我們認為保持C版本儘可能精簡和輕量化非常重要。大多數省略的功能/功能(如電子郵件警報)可以通過其他方式完成(即使用外部腳本監視日誌文件並根據相應的日誌消息發出警報)。

2.fwknop配置和訪問文件指令和值存在一些差異。其中一些是相當微妙的。您應該特別注意這些文件中的文檔和註釋。


分享到:


相關文章: