FreeRADIUS 的 Blast-RADIUS 弱點修補

這個問題源自於名為 Blast-RADIUS (CVE-2024-3596) 的 RADIUS 協定漏洞,只要是在不安全的網路環境裡面使用非 EAP 驗證框架搭配 RADIUS over UDP 協定,就容易遭受中間人攻擊

因為我們是使用 FreeRADIUS,所以在官方的 Security Note 裡面也有提到這個訊息。

然而文中也提到,他們其實早在 1998 年就注意到也嘗試的修正

The truly sad thing is that we’ve been trying to fix this issue since 1998. The first public record we can find of anyone complaining about this issue is by Alan DeKok (FreeRADIUS founder) in 1998. Alan further tried to fix it in RFC 5080, Section 2.2.2, in 2007.

當然最好的辦法就是將你的 RADIUS Server 升級到可支援 RadSec (RADIUS over TCP) 這個協定並啟用他,只不過這件事情非同小可,整個通訊架構將會有所改變,勢必需要長期規劃。

需要特別注意以下的設定,因為關係到各個環境的舊設備不支援發送 Message-Authenticator 時,會導致驗證失敗。

因為早期的設備並沒有強制發送 Message-Authenticator,當 FreeRADIUS 啟動這個參數,只要 Access-Request 裡面沒有包含 Message-Authenticator 這個 attribute,一律都會 reject,所以要特別注意環境中是否有這樣的設備。

如果平常有開啟 detail 紀錄 log,可以從中檢視一下。

Enable Security function

另一個方式,如果你的 FreeRADIUS 版本是 3.2.5 以上,你可以在 radiusd.conf 啟用新的 security function

1
2
3
4
5
security {
...
require_message_authenticator = auto
limit_proxy_state = auto
}

Workaround from 2.0.0 to 3.2.4

若版本位於 2.0.0 到 3.2.4 之間,可以使用 workaround 的做法

修改 clients.conf,在 client section 裡面加入 require_message_authenticator = yes ,用來檢驗 NAS 送過來的 Access-Request 必須包含 Message-Authenticator 這個 attribute

然後在 sites-enabled 這個資料夾裡面修改你有用到的 virtual-server (例如 default),找到 authorize section 加入

1
2
3
4
5
6
authorize {
if (!EAP-Message) {
update reply {
Message-Authenticator := 0x00
}
}

這樣就可以讓所有 Access-* 的封包裡面都會包含 Message-Authenticator 這個 attribute

Prior to 2.0.0

如果你的版本是 2.0.0 以前,唯一的建議還是打掉重裝比較好。