OpenSSH 8.2 版本支持 FIDO/U2F 雙因素身份驗證令牌

經過四個月的開發 提出了 釋放 OpenSSH 8.2,客戶端和服務器的開放實現,用於通過 SSH 2.0 和 SFTP 協議工作。

OpenSSH 8.2 版本的一項關鍵改進是能夠在支持該協議的設備上使用雙因素身份驗證 U2F,由聯盟開發 FIDO。 U2F 允許您創建低成本硬件令牌來確認用戶的實際存在,並通過 USB、藍牙或 NFC 進行交互。 這些設備正在作為網站上的雙因素身份驗證手段進行推廣,已得到主要瀏覽器的支持,並且可從各個製造商處獲得,包括 Yubico、Feitian、Thetis 和 Kensington。

為了與確認用戶存在的設備進行交互,OpenSSH 添加了新的密鑰類型“ecdsa-sk”和“ed25519-sk”,它們使用數字簽名算法 ECDSA 和 Ed25519,並結合 SHA-256 哈希。 與令牌交互的過程被移至中間庫,該中間庫的加載方式與 PKCS #11 支持的庫類似,並且是對該庫的綁定 自由度2,它提供了通過 USB 與令牌進行通信的方法(支持 FIDO U2F/CTAP 1 和 FIDO 2.0/CTAP 2 協議)。 由OpenSSH開發人員編寫的中間庫libsk-libfido2 包括 進入libfido2的主要組成部分,比如 HID驅動程序 對於 OpenBSD。

對於身份驗證和密鑰生成,必須在設置中指定“SecurityKeyProvider”參數或設置 SSH_SK_PROVIDER 環境變量,指定外部庫 libsk-libfido2.so 的路徑(export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so )。 可以構建帶有對層間庫的內置支持的 openssh (--with-security-key-builtin),在這種情況下,您需要設置“SecurityKeyProvider=internal”參數。
接下來,您需要運行“ssh-keygen -t ecdsa-sk”,或者,如果已創建並配置密鑰,則使用“ssh”連接到服務器。 運行 ssh-keygen 時,生成的密鑰對將存儲在“~/.ssh/id_ecdsa_sk”中,並且可以像其他密鑰一樣使用。

應將公鑰 (id_ecdsa_sk.pub) 複製到服務器的authorized_keys 文件中。 服務器端僅檢查數字簽名,與令牌的交互在客戶端完成(服務器上不需要安裝libsk-libfido2,但服務器必須支持“ecdsa-sk”密鑰類型) 。 生成的私鑰 (id_ecdsa_sk) 本質上是一個密鑰描述符,僅與存儲在 U2F 令牌一側的秘密序列相結合才能形成真正的密鑰。 如果 id_ecdsa_sk 密鑰落入攻擊者手中,為了通過身份驗證,他還需要獲得硬件令牌的訪問權限,否則 id_ecdsa_sk 文件中存儲的私鑰將毫無用處。

另外,默認情況下,在使用密鑰執行任何操作時(無論是在生成期間還是在認證期間),都需要本地確認用戶的實際存在,例如建議觸摸令牌上的傳感器,這使得很難使用連接的令牌對系統進行遠程攻擊。 作為另一道防線,還可以為 ssh-keygen 啟動步驟提供訪問密鑰文件的密碼。

新版本的 OpenSSH 還宣布即將棄用使用 SHA-1 哈希值的算法,因為 晉升 給定前綴的碰撞攻擊的有效性(選擇碰撞的成本估計約為 45 美元)。 在即將發布的版本之一中,他們計劃默認禁用使用 ssh-rsa 公鑰數字簽名算法的功能,該算法在 SSH 協議的原始 RFC 中提到,並且在實踐中仍然廣泛存在(以檢查 ssh 的使用情況) -rsa 在您的系統中,您可以嘗試通過 ssh 使用“-oHostKeyAlgorithms=-ssh-rsa”選項進行連接)。

為了順利過渡到 OpenSSH 中的新算法,在下一版本中,將默認啟用 UpdateHostKeys 設置,這將自動將客戶端遷移到更可靠的算法。 推薦的遷移算法包括基於 RFC2 RSA SHA-256 的 rsa-sha512-8332/2(自 OpenSSH 7.2 起支持並默認使用)、ssh-ed25519(自 OpenSSH 6.5 起支持)和基於 ecdsa-sha2-nistp256/384/521 RFC5656 ECDSA(自 OpenSSH 5.7 起支持)。

在 OpenSSH 8.2 中,使用“ssh-rsa”進行連接的功能仍然可用,但該算法已從 CASignatureAlgorithms 列表中刪除,該列表定義了允許對新證書進行數字簽名的算法。 同樣,diffie-hellman-group14-sha1 算法已從默認密鑰交換算法中刪除。 值得注意的是,在證書中使用 SHA-1 會帶來額外的風險,因為攻擊者有無限的時間來搜索現有證書的衝突,而對主機密鑰的攻擊時間則受到連接超時 (LoginGraceTime) 的限制。

ssh-keygen 現在默認為自 OpenSSH 2 以來支持的 rsa-sha512-7.2 算法,當嘗試在具有舊版本 OpenSSH 的系統上處理 OpenSSH 8.2 簽名的證書時,該算法可能會產生兼容性問題(在簽名時可以顯式指定“ssh”來解決此問題) -keygen -t ssh-rsa" 或使用自 OpenSSH 2 起支持的 ecdsa-sha256-nistp384/521/5.7 算法)。

其他變化:

  • sshd_config 中添加了 Include 指令,它允許您在配置文件的當前位置包含其他文件的內容(指定文件名時允許使用 glob 掩碼);
  • 向 ssh-keygen 添加了“no-touch-required”選項,生成密鑰時無需物理確認對令牌的訪問;
  • 在 sshd_config 中添加了 PubkeyAuthOptions 指令,以組合與公鑰身份驗證相關的各種選項。 目前,僅支持“無需觸摸”標誌,以在使用令牌授權時跳過物理存在檢查。 以此類推,在authorized_keys文件中添加了“no-touch-required”選項;
  • 向 ssh-keygen 添加了“-O write-attestation=/path”選項,以便在生成密鑰時寫入額外的 FIDO 證明證書。 OpenSSH 尚未使用這些證書,但稍後可以使用它們來驗證密鑰是否放置在受信任的硬件存儲中;
  • 在通過IPQoS指令設置ssh和sshd中,現在可以設置流量優先模式 LE DSCP (省力的每跳行為);
  • 在ssh中,當設置值“AddKeysToAgent=yes”時,如果密鑰不包含帶註釋的字段,則會將其添加到ssh-agent中,並以密鑰的路徑作為註釋。 在
    ssh-keygen 和 ssh-agent 現在也使用 PKCS#11 標籤和 X.509 主題名稱而不是庫路徑作為密鑰中的註釋;

  • 添加了將 DSA 和 ECDSA 密鑰的 PEM 導出到 ssh-keygen 的功能;
  • 添加了新的可執行文件 ssh-sk-helper 用於隔離 FIDO/U2F 令牌訪問庫;
  • 向 ssh 和 sshd 添加了“--with-zlib”構建選項,以使用 zlib 庫支持進行編譯;
  • 根據 RFC4253 的要求,連接時顯示的橫幅中會提供有關由於超出 MaxStartups 限製而阻止訪問的警告。 為了簡化診斷,使用 ps 實用程序時可見的 sshd 進程標頭顯示當前經過身份驗證的連接數和 MaxStartups 限制的狀態;
  • 在 ssh 和 ssh-agent 中,當調用程序顯示通過 $SSH_ASKPASS 設置的提示時,現在會另外傳輸帶有提示類型的標誌:“confirm”- 確認對話框(是/否),“none”- 信息性消息, "blank" — 密碼請求;
  • 向 ssh-keygen 添加了新的數字簽名操作“find-principals”,用於搜索與指定數字簽名關聯的用戶的 allowed-signers 文件;
  • 改進了對使用 seccomp 機制隔離 Linux 上的 sshd 進程的支持:禁用 IPC 系統調用,允許使用clock_gettime64()、clock_nanosleep_time64 和clock_nanosleep()。

來源: opennet.ru

添加評論