4 cách cấu hình để bảo mật cho SSH
1. Trao đổi khóa
OpenSSH hỗ trợ 2 phương thức trao đổi khóa là: Diffie-Hellman (DH) và 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 SHA22. diffie-hellman-group1-sha1: 1024 bit DH with SHA1
3. diffie-hellman-group14-sha1: 2048 bit DH with SHA14. diffie-hellman-group-exchange-sha1: Custom DH with SHA16. ecdh-sha2-nistp256: ECDH over NIST P-256 with SHA25. diffie-hellman-group-exchange-sha256: Custom DH with SHA2 7. ecdh-sha2-nistp384: ECDH over NIST P-384 with SHA28. 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 cho ssh.
- 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. ECDSA3. Ed255194. 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_keyHostKey /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/nullssh-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
>> Tìm hiểu thêm: Bảo mật trên OpenSSH