SSH là gì?
SSH viết tắt của Secure Socket Shell, là một giao thức điều khiển từ xa cho phép người dùng kiểm soát và chỉnh sửa server từ xa qua Internet. Dịch vụ được tạo ra nhằm thay thế cho trình Telnet vốn không có mã hóa và sử dụng kỹ thuật cryptographic để đảm bảo tất cả giao tiếp gửi tới và gửi từ server từ xa diễn ra trong tình trạng mã hóa. Nó cung cấp thuật toán để chứng thực người dùng từ xa, chuyển input từ client tới host, và relay kết quả trả về tới khách hàng.
Giao thức SSH cung cấp các dịch vụ của máy chủ như xác thực, mã hóa, xác minh tính toàn vẹn dữ liệu và xác thực khách hàng. Máy chủ được SSH xác thực thông qua việc thực hiện DSA, RSA hoặc ECDSA thuật toán mã khóa công khai.
Để xác minh mã hóa và toàn vẹn dữ liệu, một số thuật toán được cung cấp mà mỗi sản phẩm SSH có thể thực hiện trong một khoảng thời gian nhất định. Trong khi đó, xác thực khách hàng lại được SSH thực hiện bằng cách sử dụng mật khẩu, khóa công khai, chỉ 1 tài khoản login trên 1 thời diểm (single sign-on), và các phương pháp khác.
Đặc điểm kỹ thuật giao thức SSH2 được công khai và đã được xem xét bởi một số người thực hiện độc lập. Vì vậy, khi thực hiện đúng và sử dụng chúng, giao thức này hoàn toàn an toàn để bảo mật thông tin và chống lại hầu hết tất cả các cuộc tấn công mật mã.
Khi nào nên sử dụng SSH?
SSH hoạt động ở tầng thứ 4 trong mô hình TCP/IP. Nó cho phép tương tác giữa máy chủ và máy khách, sử dụng cơ chế mã hoá nhằm ngăn chặn các hiện tượng nghe trộm, đánh cắp thông tin trên đường truyền. Đây là điều mà các giao thức trước đây như telnet, rlogin không đáp ứng được.
Vì vây, bạn nên lựa chọn sử dụng SSH nếu muốn thiết lập một kết nối mạng được mã hóa và cung cấp môi trường an toàn cho người tiêu dùng. Các công cụ SSH phổ biến hiện nay có thể kể đến như PuTTY, OpenSSH,..
SSH hoạt động như thế nào?
Quy trình hoạt động của SSH có thể tóm gọn thông qua 3 bước đơn giản sau:
- Bước 1: Định danh host – xác định định danh của hệ thống tham gia phiên làm việc SSH. Đơn giản hơn, đây là bước khởi tạo kết nối SSH. Kết nối này là một kênh giao tiếp bảo mật giữa server và client.
- Bước 2: Mã hoá dữ liệu – thiết lập kênh làm việc mã hoá. Sau khi Client xác định được định danh của Server 1 kết nối bảo mật đối xứng được hình thành giữa 2 bên.
- Bước 3: Chứng thực và giải mã – xác thực người sử dụng có quyền đăng nhập hệ thống. Kết nối này sẽ được sử dụng để Server xác thực Client.
Các kỹ thuật mã hóa SSH
Lợi điểm khiến SSH hơn hẵn những giao thức cũ là khả năng mã hóa và truyền tải dữ liệu an toàn giữa host và client. Host đại diện cho máy chủ từ xa bạn muốn kết nối tới và client là máy tính của bạn dùng để truy cập tới host. Có 3 cách khác nhau để mã hóa qua SSH:
- Symmetrical encryption
- Asymmetrical encryption
- Hashing.
SSH Symmetrical Encryption
Symmetric encryption là một dạng mã hóa sử dụng secret key (chìa khóa bí mật) ở cả 2 chiều mã hóa và giải mã tin nhắn bởi cả host và client. Điều này có nghĩa là bất kỳ ai nắm được khóa đều có thể giải mã tin nhắn trong quá trình chuyền.
Nguyên tắc hoạt động của Symmetrical Encryption là cả client và server tạo chung một key bí mật và key đó không được tiết lộ cho bên thứ ba. Quá trình tạo symmetric key được thực hiện bởi key exchange algorithm. Key đó được dùng như chìa khóa mã hóa cho cả hai đầu kết nối.
Điều khiến cho thuật toán này an toàn là vì key không được truyền giữa client và host. Thay vào đó, cả 2 máy tính chia sẽ thông tin chung và sau đó sử dụng chúng để tính ra khóa bí mật. Vì vậy, kể cả có máy khác bắt được thông tin chung, nó cũng không thể tính ra key bí mật vì không biết được thuật toán tạo key.
SSH Asymmetrical Encrytion
Không giống với symmetrical encryption, asymmetrical encryption sử dụng 2 khóa khác nhau để mã hóa và giải mã. 2 khóa này được gọi là public key và private key. Cả 2 hình thành nên một cặp khóa là public-private key pair. Trong đó, khóa public sẽ được công khai cho tất cả các bên liên quan còn private key phải luôn luôn được đảm bảo an toàn.
Asymmetrical Encrytion chỉ được sử dụng trong quá trình trao đổi thuật toán của khóa của symmetric encryption. trước khi bắt đầu một phiên giao dịch an toàn. Sau khi kết nối symmetrict an toàn đã được thiết lập, server sử dụng public key của client để tạo và challenge và truyền nó tới client để chứng thực. Nếu client có thể giải mã tin nhắn, có nghĩa là nó đang giữ đúng private key cần thiết cho kết nối.
SSH Hashing
Hash một chiều khác với cả 2 phương thức mã hóa trên ở chỗ nó không được sinh ra để giải mã. Thay vào đó, nó tạo ra một giá trị duy nhất với độ dài nhất định cho mỗi lần nhập liệu mà không có hướng nào khác để khai thác.
Vì vậy, SSH sử dụng hashes để xác nhận tính xác thực của tin nhắn. Nó được thực hiện bởi HMACs. Việc này đảm bảo lệnh không bị giả mạo bởi bất kỳ phương thức nào.
Cách thức hoạt động của SSH
SSH hoạt động bằng mô hình client-server cho phép chứng thực an toàn giữa 2 máy từ xa và mã hóa dữ liệu được truyền giữa chúng.
SSH vận hành trên TCP port 22 mặc định (có thể được thay đổi nếu cần). Host (server) nghe port 22 (hoặc bất kỳ port nào SSH được gán vào) cho nhưng kết nối tới. Nó sẽ thiết lập kết nối an toàn khi chứng thực giữa client và môi trường shell đang mở thành công.
Client phải bắt đầu kết nối SSH bằng cách tạo ra TCP handshake với server, đảm bảo có thể thiết lập kết nối symmetric, xác thực thông tin của server có khớp dữ liệu cũ không (thông thường được trong RSA key store file), và so sánh thông tin đăng nhập của user kết nối để xác thực đúng kết nối.
Có 2 giai đoạn để thiết lập kết nối: trước tiên cả 2 bên đồng ý chuẩn mã hóa để bảo vệ giao tiếp trong tương, thừ 2, user phải được xác thực. Nếu thông tin đăng nhập khớp, user có quyền truy cập.
Session Encryption Negotiation
Khi client cố kết nối tới server qua TCP, server sẽ trình ra encrytpion protocal và những phiên bản liên quan nó hỗ trợ. Nếu client cũng có protocol tương ứng và phiên bản đúng như vậy, một thỏa thuật sẽ được đặt ra và kết nối bát đầu tiếp nhận protocol. Server cũng sử dụng một symmetric public key mà client có thể dùng để xác thực tính chính xác của server.
Khi đã được thiết lập, cả 2 bên sử dụng một thuật toán được biết là Diffie-Hellman Key Exchange Algorithm để tạo symmetrical key. Thuật toán này cho phép cả client và server có cùng một key chung được dùng để mã hóa toàn bộ liên lạc sau này.
Đây là cách thuật oán hoạt động về cơ bản:
- Cả client và server đồng ý dựa trên một số nguyên lớn, dĩ nhiên là không có bất kỳ tính chất chung nào. Số này được gọi là seed value.
- Tiếp theo, cả 2 bên đồng ý một cách mã hóa được tạo ra từ seed value bằng một dạng thuật toán nhất định. Những cơ chế này là nguồn tạo mã hóa, hoạt đông lớn trên seed value. Ví dụ như là generator llà AES (Advanced Encryption Standard).
- Cả 2 bên độc lập tạo một số khác. Nó được dùng như là một private key bí mật cho tương tác.
- Key private mới tạo này, với số chung và thuật toán mã hóa ở trên (AES) được dùng để tạo ra một key public được phân phối cho máy còn lại.
- 2 bên sau đó sử dụng private key của chính nó, public key của máy còn lại và số nguyên ban đầu để tạo ra một key chung cuối cùng. Key này độc lập được tính toán bởi cả 2 máy nhưng sẽ tạo ra một key mã hóa giống nhau trên cả 2.
- Bây giờ cả 2 đã có shared key, chúng có thể tạo mã hóa symmetric cho cả phiên SSH. Một key chung được sử dung để mã hóa và giải mã tin nhắn (đọc lại mục: symmetrical encryption).
Bây giờ phiên giao dịch được mã hóa symmetric đã được thiết lập, chứng thực cho user sẽ được tiến hành.
Chứng thực người dùng
Bước cuối là khi user được cấp quyền truy cập vào server xác thực chính thông tin đang nhập đó. Để làm vậy, hầu hết SSH user sử dụng mật khẩu. Người dùng được hỏi để nhập username, tiếp theo là mật khẩu. Những thông tin đăng nhập này được chuyển an toàn qua một đường hầm bảo mật symmetric, vì vậy không có cách nào chúng bị lấy cắp từ bên thứ 3.
Mặc dù mật khẩu đã được mã hóa, chúng tôi vẫn không khuyên sử dụng mật khẩu để thiết lập kết nối. Lý do là vì bằng thủ thuật tấn công brute fore, mật khẩu mặc định hoặc dễ đoán có thể được lần ra và bạn sẽ bị chiếm quyền tài khoản. Vì vậy, cách tốt nhất là sử dụng SSH Key Pairs.
Đây là một bộ khóa asymmetric được dùng để chứng thực thành viên mà không đòi hỏi phải nhập mật khẩu.
Kết luận
Hy vọng với bài hướng dẫn SSH này, chúng tôi đã giúp bạn có cái nhìn khác về công nghệ và nó là thành tố chính để bạn tạo một hệ thống mạnh mẽ và bảo mật. Cũng vì lẽ đó, bạn đã hiểu vì sao Telnet đã là quá khứ và vì sao SSH đã chiếm lấy mọi chỗ đứng của nó.