SSH là gì ?
SSH tên đầy đủ là Secure SHell là một giao thức mạng mang tính bảo mật, cung cấp cách thức truy cập từ xa vào một thiết bị khác một cách an toàn thông qua các cơ chế mã hóa. Bằng cách sử dụng một số kỹ thuật mã hóa, xác thực mỗi bên với nhau để đảm bảo dữ liệu trao đổi giữa các máy trong phiên làm việc được mã hóa và giải mã nhằm mục đích giữ vững tính toàn vẹn của dữ liệu và bảo vệ an ninh thông tin.
Hoạt động của SSH
SSH hoạt động theo mô hình client-server để xác thực hai bên và mã hóa dữ liệu giữa chúng. Client sẽ là thành phần tạo phiên kết nối SSH đến thành phần khác, còn Server sẽ cho phép Client mở phiên SSH kết nối vào chính mình.
Để làm được điều này Server sẽ lắng nghe trên một port được chỉ định cho SSH, mặc định là port 22. Mỗi kết nối SSH bao gồm hai việc xác thực: xác thực SSH Server và xác thực SSH Client. Client chịu trách nhiệm khởi tạo quá trình bắt tay TCP với Server, thương lượng kết nối an toàn, xác thực Server và cung cấp thông tin đăng nhập để Server xác thực mình. Còn Server có trách nhiệm thương lượng kết nối an toàn, xác thực bên Client và sinh ra phiên làm việc nếu thông tin đăng nhập được chấp nhận. SSH Client và SSH Server thương lượng với nhau để xác định cơ chế xác thực sẽ sử dụng thậm chí có thể yêu cầu nhiều kiểu xác thực để thiết lập kết nối an toàn trong quá tình trao đổi dữ liệu giữa chúng.
Đối với SSH version 1 là hoạt động của version 1 này có thể được chia làm 3 bước chính:
Bước 2: Server sẽ gửi các thông tin quan trọng tới Client, đây là những thông tin nắm vai trò chính trong session hiện tại:
Cho đến lúc này Client vẫn chưa thể xác thực được Server, nó chỉ biết được định danh của Server dựa vào RSA Public Key. Để xác thực Server thì Client phải chắc chắn Server có khả năng giải mã được Session Key. Bởi vậy sau khi gửi Session Key xong Client sẽ chờ hồi âm từ phía Server. Nếu nhận được thông báo xác nhận Client đã sẵn sàng để xác thực được Server thì quá trình này hoàn tất.
Bước 3: Server xác thực Client: có nhiều phương pháp, trong đó có 2 phương pháp phổ biến nhất:
Kể từ giờ kết nối SSH đã sẵn sàng, Client và Server cũng đã có thể gửi các gói tin cho nhau
Tuy nhiên SSH version 1 rất hạn chế trong việc hỗ trợ sử dụng nhiều thuật toán để trao đổi Session Key, Message Authentication Code (MAC), thuật toán nén. Còn đối với SSH version 2 chẵng những cung cấp nhiều lựa chọn cho Client để sử dụng các thuật toán trao đổi Key mà còn có không gian để có thể thêm thuật toán tùy chỉnh riêng của người sử dụng.
SSH version 2 là giao thức SSH mặc định được sử dụng ngày nay bởi một số tiến bộ trong version 2 so với version 1 như cải tiến các chuẩn mã hóa, Public Key Certification, Message Authentication Code tốt hơn và phân bố lại Session Key.
Trong hoạt động của SSH version 1, sau khi chọn một thuật toán trong danh sách từ Server hỗ trợ, Client tạo 1 Session Key, mã hóa kép và gửi đến Server, mã hóa lần đầu bởi Public Key, mã hóa lần 2 bởi Server Key. Trong SSH version 2, không có khái niệm Server Key. Thay vào đó, Server cung cấp thêm danh sách các phương thức trao đổi khóa mà nó hỗ trợ, từ đó Client chọn một phương thức. SSH version 2 hoạt động dựa trên phương thức diffie-hellman-group1-sha1 và diffie-hellman-group14-sha1 để trao đổi khóa.
Sự thay đổi thứ hai trong SSH version 2 là một khái niệm gọi là cơ quan cấp chứng chỉ (Certificate Authority - CA), CA sẽ ký vào Public Key được sử dụng trong giao tiếp giữa Client và Server.
Message Authentication Code được sử dụng trong bất kỳ giao tiếp bảo mật nào để xác minh tính toàn vẹn của dữ liệu. Ngay cả phiên bản SSH 1 cũng sử dụng Message Authentication Code được gọi là CRC-32. CRC mặc dù kiểm tra sự thay đổi trong dữ liệu, nhưng không được coi là tốt nhất. SSH version 2 sử dụng Message Authentication Code nâng cao. Một số Message Authentication Code SSH version 2 hỗ trợ như: hmac-md5; hmac-sha1; Hmac-ripemd160
Rekeying Session Key: Trong SSH version 1, chỉ có một Session Key được sử dụng cho toàn bộ session làm việc của SSH. Trong SSH version 2 có bổ sung tính năng Rekeying Session Key cho phép thay đổi Session Key mà không làm mất session làm việc hiện tại.
SSH trong Cisco IOS
SSH được sử dụng rất nhiều trong các ứng dụng và được cài đặt, tích hợp vào nhiều hệ thống, hệ điều hành, trên Cisco IOS cũng vậy, nhưng chỉ những phiên bản IOS có kí tự k9 với version từ 12.1 trở về sau thì mới hỗ trợ SSH, đối với IOS phiên bản 12.2 trở về trước thì chỉ hỗ trợ SSH version 1, còn những phiên bản từ 12.3 trở lên sẽ hỗ trợ cả SSH version 2. Có thể dùng lệnh “show version” để xem phiên bản IOS. Ví dụ 1 phiên bản IOS có hỗ trợ SSH: c2800nm-adventerprisek9-mz.124-24.T8.bin. SSH được tích hợp vào Cisco IOS cho phép thiết bị vừa có thể thực hiện SSH đến 1 SSH Server khác vừa có thể làm 1 SSH Server để 1 Client khác kết nối vào. Ngoài ra còn có thể sử dụng kết hợp chứng thực SSH Client thông qua cặp username/password cục bộ hoặc thông qua 1 RADIUS Server hoặc TACACS+ Server.
Các bước để cấu hình SSH trên thiết bị Cisco sử dụng Password Authentication
1. Cấu hình Host name
tạo cặp username/password cho thiết bị
Sau khi cấu hình host name, cần cấu hình lệnh
để bật tính năng xác thực bằng cặp username và password trên thiết bị, hoặc có thể thay thế bằng lệnh
trong cổng vty
2. Cấu hình domain name cho thiết bị
Thiết bị sẽ dùng domain name này để tạo SSH Key
3. Tạo SSH Key để sử dụng
sẽ tạo ra 1 Key, nhưng do không chỉ rõ chiều dài của Key nên lúc này thiết bị sẽ hỏi chiều dài của Key muốn tạo, mặc định Cisco IOS sẽ tạo ra 1 Key có chiều dài 512 bit, nếu muốn sử dụng SSH version 2 thì chiều dài của Key phải từ 768 bit trở lên, nếu cấu hình chỉ định rõ chiều dài của Key trong câu lệnh thì
Lệnh “Router(config)#crypto key generate rsa”ngoài tạo ra 1 Key còn có tác dụng bật giao thức SSH trên thiết bị.
Có thể kiểm tra Key bằng lệnh
Ngoài ra còn có một số thông số đi kèm như thời gian kết thúc session SSH mặc định 120 giây, số lần nhập sai username/password 3 lần thì phải khởi tạo lại 1 session SSH mới. Có thể hiệu chỉnh các thông số này bằng lệnh
Bật phương thức truy cập SSH trên cổng vty
Mặc định phương thức truy cập ở cổng vty là Telnet, nếu muốn sử dụng SSH cần cấu hình phương thức truy cập ở cổng vty thành SSH
Kiểm tra Version SSH hiện tại bằng lệnh
Kiểm tra trạng thái các session SSH hiện tại
Kiểm tra tiến trình hoạt động của SSH
SSH tên đầy đủ là Secure SHell là một giao thức mạng mang tính bảo mật, cung cấp cách thức truy cập từ xa vào một thiết bị khác một cách an toàn thông qua các cơ chế mã hóa. Bằng cách sử dụng một số kỹ thuật mã hóa, xác thực mỗi bên với nhau để đảm bảo dữ liệu trao đổi giữa các máy trong phiên làm việc được mã hóa và giải mã nhằm mục đích giữ vững tính toàn vẹn của dữ liệu và bảo vệ an ninh thông tin.
Hoạt động của SSH
SSH hoạt động theo mô hình client-server để xác thực hai bên và mã hóa dữ liệu giữa chúng. Client sẽ là thành phần tạo phiên kết nối SSH đến thành phần khác, còn Server sẽ cho phép Client mở phiên SSH kết nối vào chính mình.
Để làm được điều này Server sẽ lắng nghe trên một port được chỉ định cho SSH, mặc định là port 22. Mỗi kết nối SSH bao gồm hai việc xác thực: xác thực SSH Server và xác thực SSH Client. Client chịu trách nhiệm khởi tạo quá trình bắt tay TCP với Server, thương lượng kết nối an toàn, xác thực Server và cung cấp thông tin đăng nhập để Server xác thực mình. Còn Server có trách nhiệm thương lượng kết nối an toàn, xác thực bên Client và sinh ra phiên làm việc nếu thông tin đăng nhập được chấp nhận. SSH Client và SSH Server thương lượng với nhau để xác định cơ chế xác thực sẽ sử dụng thậm chí có thể yêu cầu nhiều kiểu xác thực để thiết lập kết nối an toàn trong quá tình trao đổi dữ liệu giữa chúng.
Đối với SSH version 1 là hoạt động của version 1 này có thể được chia làm 3 bước chính:
- Khởi tạo 1 kết nối SSH, chính là tạo ra 1 kênh giao tiếp bảo mật giữa Server và Client.
- Client xác thực Server. 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.
- Server xác thực Client dựa trên kết nối được thiết lập ở trên.
- Phiên bản Protocol mà Server hỗ trợ
- Phiên bản của gói cài đặt SSH trên Server
Bước 2: Server sẽ gửi các thông tin quan trọng tới Client, đây là những thông tin nắm vai trò chính trong session hiện tại:
- Server cho Client biết định danh của mình bằng RSA Public Key trên Server. Mọi Client kết nối tới Server đều nhận được RSA Public Key giống nhau.
- Server Key. Server Key này được tái tạo theo mỗi khoảng thời gian nhất định.
- 1 chuỗi 8 bytes ngẫu nhiên được gọi là checkbytes. Sau này Client sẽ sử dụng chuỗi này để hồi đáp lại cho Server.
- Cuối cùng, Server cấp cho Client biết toàn bộ các phương thức xác thực, mã hóa mà Server hỗ trợ.
Cho đến lúc này Client vẫn chưa thể xác thực được Server, nó chỉ biết được định danh của Server dựa vào RSA Public Key. Để xác thực Server thì Client phải chắc chắn Server có khả năng giải mã được Session Key. Bởi vậy sau khi gửi Session Key xong Client sẽ chờ hồi âm từ phía Server. Nếu nhận được thông báo xác nhận Client đã sẵn sàng để xác thực được Server thì quá trình này hoàn tất.
Bước 3: Server xác thực Client: có nhiều phương pháp, trong đó có 2 phương pháp phổ biến nhất:
- Password Authentication: Đây là phương pháp phổ biến và đơn giản nhất. Server yêu cầu Client cung cấp user name và password. Server xác nhận password dựa trên cơ sở dữ liệu được lưu trên Server. Và dĩ nhiên, Client sẽ mã hóa Password bằng Session Key trước khi gửi cho Server kiểm chứng Password này.
- Public Key Authentication: Để sử dụng Public Key Authentication, Client cần phải tạo ra RSA Public Key và RSA Private Key, 2 Key này chỉ dùng để xác thực Client. Public Key này sẽ được gửi đến Server và được Server lưu lại. Bất kỳ dữ liệu nào được mã hóa bằng Public Key chỉ có thể giải mã bằng Private Key tương ứng.
Kể từ giờ kết nối SSH đã sẵn sàng, Client và Server cũng đã có thể gửi các gói tin cho nhau
Tuy nhiên SSH version 1 rất hạn chế trong việc hỗ trợ sử dụng nhiều thuật toán để trao đổi Session Key, Message Authentication Code (MAC), thuật toán nén. Còn đối với SSH version 2 chẵng những cung cấp nhiều lựa chọn cho Client để sử dụng các thuật toán trao đổi Key mà còn có không gian để có thể thêm thuật toán tùy chỉnh riêng của người sử dụng.
SSH version 2 là giao thức SSH mặc định được sử dụng ngày nay bởi một số tiến bộ trong version 2 so với version 1 như cải tiến các chuẩn mã hóa, Public Key Certification, Message Authentication Code tốt hơn và phân bố lại Session Key.
Trong hoạt động của SSH version 1, sau khi chọn một thuật toán trong danh sách từ Server hỗ trợ, Client tạo 1 Session Key, mã hóa kép và gửi đến Server, mã hóa lần đầu bởi Public Key, mã hóa lần 2 bởi Server Key. Trong SSH version 2, không có khái niệm Server Key. Thay vào đó, Server cung cấp thêm danh sách các phương thức trao đổi khóa mà nó hỗ trợ, từ đó Client chọn một phương thức. SSH version 2 hoạt động dựa trên phương thức diffie-hellman-group1-sha1 và diffie-hellman-group14-sha1 để trao đổi khóa.
Sự thay đổi thứ hai trong SSH version 2 là một khái niệm gọi là cơ quan cấp chứng chỉ (Certificate Authority - CA), CA sẽ ký vào Public Key được sử dụng trong giao tiếp giữa Client và Server.
Message Authentication Code được sử dụng trong bất kỳ giao tiếp bảo mật nào để xác minh tính toàn vẹn của dữ liệu. Ngay cả phiên bản SSH 1 cũng sử dụng Message Authentication Code được gọi là CRC-32. CRC mặc dù kiểm tra sự thay đổi trong dữ liệu, nhưng không được coi là tốt nhất. SSH version 2 sử dụng Message Authentication Code nâng cao. Một số Message Authentication Code SSH version 2 hỗ trợ như: hmac-md5; hmac-sha1; Hmac-ripemd160
Rekeying Session Key: Trong SSH version 1, chỉ có một Session Key được sử dụng cho toàn bộ session làm việc của SSH. Trong SSH version 2 có bổ sung tính năng Rekeying Session Key cho phép thay đổi Session Key mà không làm mất session làm việc hiện tại.
SSH trong Cisco IOS
SSH được sử dụng rất nhiều trong các ứng dụng và được cài đặt, tích hợp vào nhiều hệ thống, hệ điều hành, trên Cisco IOS cũng vậy, nhưng chỉ những phiên bản IOS có kí tự k9 với version từ 12.1 trở về sau thì mới hỗ trợ SSH, đối với IOS phiên bản 12.2 trở về trước thì chỉ hỗ trợ SSH version 1, còn những phiên bản từ 12.3 trở lên sẽ hỗ trợ cả SSH version 2. Có thể dùng lệnh “show version” để xem phiên bản IOS. Ví dụ 1 phiên bản IOS có hỗ trợ SSH: c2800nm-adventerprisek9-mz.124-24.T8.bin. SSH được tích hợp vào Cisco IOS cho phép thiết bị vừa có thể thực hiện SSH đến 1 SSH Server khác vừa có thể làm 1 SSH Server để 1 Client khác kết nối vào. Ngoài ra còn có thể sử dụng kết hợp chứng thực SSH Client thông qua cặp username/password cục bộ hoặc thông qua 1 RADIUS Server hoặc TACACS+ Server.
Các bước để cấu hình SSH trên thiết bị Cisco sử dụng Password Authentication
1. Cấu hình Host name
R1(config)#hostname Router |
Router(config)#username cisco password vnpro |
Router(config)#aaa new-model |
Router(config)#line vty 0 4 Router(config-line)#login local |
2. Cấu hình domain name cho thiết bị
Router(config)#ip domain-name vnpro.org |
3. Tạo SSH Key để sử dụng
Router(config)#crypto key generate rsa |
Router(config)#crypto key generate rsa general-keys modulus integer |
Có thể kiểm tra Key bằng lệnh
Router#show crypto key mypubkey rsa |
Router(config)#ip ssh {[timeout seconds] | [authentication-retries integer]} |
Mặc định phương thức truy cập ở cổng vty là Telnet, nếu muốn sử dụng SSH cần cấu hình phương thức truy cập ở cổng vty thành SSH
Router(config-line)#transport input ssh |
Router#show ip ssh |
Router#show ssh |
Debug ip ssh |