Bảo mật cho SSH

SSH là một công cụ hữu ích dùng để thực hiện remote login một cách an toàn bằng cách sử dụng các hệ mật mã hiện đại. Tuy nhiên nếu bạn sử dụng cấu hình mặc định cho ssh thì rất có thể các phiên kết nối ssh của bạn sẽ bị giải mã bởi NSA. NSA có thể giải mã các hệ mật mã yếu với một siêu máy tính. Vì vậy, một số thuật toán mã hóa nên bị tắt bỏ để đảm bảo an toàn cho các phiên kết nối ssh.

Tôi sẽ giới thiệu các cách cấu hình cho ssh client và ssh server để đảm bảo an toàn cho các phiên kết nối ssh.

1. Trao đổi khóa

OpenSSH hỗ trợ 2 phương thức trao đổi khóa là: Diffie-Hellman (DH)Elliptic Curve Diffie-Hellman (ECDH). OpenSSL dùng các thuật toán trao đổi khóa dựa trên 2 phương thức trên để thỏa thuận với nhau các bí mật chung, sau đó sinh các khóa dùng để mã hóa đường truyền và xác thực thông điệp.

Các thuật toán trao đổi khóa mà OpenSSH hỗ trợ:

1. curve25519-sha256: ECDH over Curve25519 with SHA2  
2. diffie-hellman-group1-sha1: 1024 bit DH with SHA1  
3. diffie-hellman-group14-sha1: 2048 bit DH with SHA1  
4. diffie-hellman-group-exchange-sha1: Custom DH with SHA1  
5. diffie-hellman-group-exchange-sha256: Custom DH with SHA2  
6. ecdh-sha2-nistp256: ECDH over NIST P-256 with SHA2  
7. ecdh-sha2-nistp384: ECDH over NIST P-384 with SHA2  
8. ecdh-sha2-nistp521: ECDH over NIST P-521 with SHA2  

Có 3 vấn đề cần xem xét:

  • Lựa chọn đường cong ECDH: loại bỏ các thuật toán 6 -> 8 do có thể bị các tấn công về timming.
  • Kích thước khóa: loại bỏ thuật toán 2 do sử dụng khóa quá ngắn không đủ tính bảo mật.
  • Tính bảo mật của hàm băm: loại bỏ các thuật toán 2-> 4 bởi vì SHA1 đã bị phá vỡ.

Chỉ còn lại thuật toán 1 và 5. Thuật toán 1 tốt hơn và được khuyên dùng.

Cấu hình cho ssh server /etc/ssh/sshd_config:

KexAlgorithms curve25519-sha256@libssh.org  

Cấu hình cho ssh client ssh_config:

Host *  
    KexAlgorithms curve25519-sha256@libssh.org

2. Xác thực

OpenSSL cung cấp 4 thuật toán mã khóa công khai dùng để xác thực người dùng:

1. DSA  
2. ECDSA  
3. Ed25519  
4. RSA  

1 và 2 tính bảo mật không cao nên không được khuyến khích dùng.

Cấu hình cho ssh server /etc/ssh/sshd_config:

Protocol 2  
HostKey /etc/ssh/ssh_host_ed25519_key  
HostKey /etc/ssh/ssh_host_rsa_key  

Xóa các khóa không dùng và sinh các khóa mới với độ bảo mật cao hơn cho server:

cd /etc/ssh  
rm ssh_host_*key*  
ssh-keygen -t ed25519 -f ssh_host_ed25519_key < /dev/null  
ssh-keygen -t rsa -b 4096 -f ssh_host_rsa_key < /dev/null  

3. Mã hóa khóa đối xứng

Mã khóa đối xứng dùng để mã hóa phiên kết nối ssh sau khi xác thực người dùng sử dụng các khóa sinh ra ở bước trao đổi khóa.

Các vấn đề cần xem xét để lựa chọn các hệ mã phù hợp gồm:

  • Tính bảo mật của hệ mã: cả DES và RC4 đều đã bị phá vỡ.
  • Kích thước khóa: càng dài càng tốt với độ dài tối thiểu là 128-bit.
  • Kích thước khối: không áp dụng với các mã dòng. Nhỏ nhất là 128-bit.
  • Cipher mode: Authenticated Encription (EA) được khuyên dùng và tùy chọn là CTR vì tính tương thích.

Cấu hình cho ssh server /etc/ssh/sshd_config:

Ciphers chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr  

Cấu hình cho ssh client ssh_config:

Host *  
    Ciphers chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

4. Mã xác thực thông điệp

Mã hóa cung cấp tính bảo mật, mã xác thực thông điệp cung cấp tính toán vẹn của thông điệp. Nếu kiểu mã AE được chọn thì không cần thêm bước MAC ở đây. Nếu CTR được chọn thì MAC sẽ được sử dụng để đảm báo tính toàn vẹn cho các thông điệp.

Có 3 các để kết hợp mã hóa và mã xác thực thông điệp:

  • Encrypt-then-MAC
  • MAC-then-Encrypt
  • Encrypt-and-MAC

Chỉ nên dùng Encrypt-then-MAC do 2 cách dưới sẽ dẫn đến nhiều tấn công làm yếu ssh.

Các tiêu chí khi chọn thuật toán MAC:

  • Tính bảo mật của hàm băm: không dùng MD5 và SHA1.
  • Encrypt-then-MAC
  • Kích thước tag: nhỏ nhất là 128-bit.
  • Kích thước khóa: nhỏ nhất là 128-bit.

Cấu hình cho ssh server /etc/ssh/sshd_config:

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com  

Cấu hình cho ssh client ssh_config:

Host *  
    MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com

Tham khảo

stribika.github.io/2015/01/04/secure-secure-shell