Xác thực hai yếu tố cho SSH

“Secure shell” SSH là một giao thức mạng để thiết lập kết nối an toàn giữa các máy chủ, tiêu chuẩn qua cổng 22 (tốt hơn nên thay đổi). Máy khách SSH và máy chủ SSH có sẵn cho hầu hết các hệ điều hành. Hầu như mọi giao thức mạng khác đều hoạt động bên trong SSH, nghĩa là bạn có thể làm việc từ xa trên một máy tính khác, truyền luồng âm thanh hoặc video qua kênh được mã hóa, v.v. Bên cạnh đó, thông qua proxy SOCKS trên máy chủ từ xa bạn có thể kết nối với các máy chủ khác thay mặt cho máy chủ từ xa này.

Quá trình xác thực diễn ra bằng mật khẩu, nhưng các nhà phát triển và quản trị viên hệ thống thường sử dụng khóa SSH. Vấn đề là khóa riêng có thể bị đánh cắp. Về mặt lý thuyết, việc thêm cụm mật khẩu sẽ bảo vệ khỏi bị đánh cắp khóa riêng, nhưng trên thực tế, khi chuyển tiếp và lưu khóa vào bộ đệm, chúng sẽ vẫn có thể được sử dụng mà không cần xác nhận. Xác thực hai yếu tố giải quyết vấn đề này.

Cách triển khai xác thực hai yếu tố

Các nhà phát triển từ Honeycomb đã xuất bản gần đây hướng dẫn chi tiết, cách triển khai cơ sở hạ tầng phù hợp trên máy khách và máy chủ.

Các hướng dẫn giả định rằng bạn có một máy chủ cơ bản nhất định mở ra Internet (pháo đài). Bạn muốn kết nối với máy chủ này từ máy tính xách tay hoặc máy tính thông qua Internet và truy cập tất cả các thiết bị khác nằm phía sau nó. 2FA đảm bảo rằng kẻ tấn công không thể làm điều tương tự ngay cả khi chúng có quyền truy cập vào máy tính xách tay của bạn, chẳng hạn như bằng cách cài đặt phần mềm độc hại.

Tùy chọn đầu tiên là OTP

OTP - mật khẩu kỹ thuật số dùng một lần, trong trường hợp này sẽ được sử dụng để xác thực SSH cùng với khóa. Các nhà phát triển viết rằng đây không phải là một lựa chọn lý tưởng vì kẻ tấn công có thể tạo ra một pháo đài giả, chặn OTP của bạn và sử dụng nó. Nhưng có còn hơn không.

Trong trường hợp này, ở phía máy chủ, các dòng sau được ghi vào cấu hình Chef:

  • metadata.rb
  • attributes/default.rb (từ attributes.rb)
  • files/sshd
  • recipes/default.rb (sao chép từ recipe.rb)
  • templates/default/users.oath.erb

Bất kỳ ứng dụng OTP nào cũng được cài đặt ở phía client: Google Authenticator, Authy, Duo, Lastpass, đã cài đặt brew install oath-toolkit hoặc apt install oathtool openssl, thì một chuỗi (khóa) base16 ngẫu nhiên được tạo ra. Nó được chuyển đổi sang định dạng Base32 mà trình xác thực di động sử dụng và nhập trực tiếp vào ứng dụng.

Do đó, bạn có thể kết nối với Bastion và thấy rằng giờ đây nó không chỉ yêu cầu cụm mật khẩu mà còn yêu cầu mã OTP để xác thực:

➜ ssh -A bastion
Enter passphrase for key '[snip]': 
One-time password (OATH) for '[user]': 
Welcome to Ubuntu 18.04.1 LTS...

Tùy chọn thứ hai là xác thực phần cứng

Trong trường hợp này, người dùng không bắt buộc phải nhập mã OTP mỗi lần vì yếu tố thứ hai trở thành thiết bị phần cứng hoặc sinh trắc học.

Ở đây, cấu hình Chef phức tạp hơn một chút và cấu hình máy khách phụ thuộc vào hệ điều hành. Nhưng sau khi hoàn thành tất cả các bước, máy khách trên MacOS có thể xác nhận xác thực trong SSH bằng cụm mật khẩu và đặt ngón tay lên cảm biến (yếu tố thứ hai).

Chủ sở hữu iOS và Android xác nhận đăng nhập bằng cách nhấn một nút trên điện thoại thông minh của bạn. Đây là công nghệ đặc biệt của Krypt.co, thậm chí còn an toàn hơn cả OTP.

Trên Linux/ChromeOS có một tùy chọn để hoạt động với mã thông báo USB YubiKey. Tất nhiên, kẻ tấn công có thể đánh cắp mã thông báo của bạn nhưng hắn vẫn không biết cụm mật khẩu.

Nguồn: www.habr.com

Thêm một lời nhận xét