Bài giảng Giao thức SSH
Dịch vụ cung cấp
Bí mật
Toàn vẹn
Xác thực
Chức năng
Đảm bảo thực hiện các lệnh từ xa an toàn (Secure command shell, remote execution of commands)
Đảm bảo truyền file an toàn
Tạo các tunnel truyền dữ liệu cho các ứng dụng dựa trên TCP/IP
GIAO THỨC SSH SSH—Secure Shell Thay thế telnet, rlogin,… Được khởi đầu từ một dự án của một trường Đại học tại phần lan SSH1 ngừng sử dụng vào 1995 do lỗi về bảo mật SSH2 đang được sử dụng Chức năng và dịch vụ của SSH Dịch vụ cung cấp Bí mật Toàn vẹn Xác thực Chức năng Đảm bảo thực hiện các lệnh từ xa an toàn (Secure command shell, remote execution of commands) Đảm bảo truyền file an toàn Tạo các tunnel truyền dữ liệu cho các ứng dụng dựa trên TCP/IP Kiến trúc bộ giao thức SSH Phía Server: Giao thức SSH transport layer protocol (TLP) Đảm bảo tính xác thực, bí mật và toàn vẹn Phía Client: Giao thức xác thực người dùng UAP- user authentication protocol Giao thức kết nối: CP (SSH connection protocol ) Thiết lập các phiên đăng nhập, thực hiện các lệnh từ xa, chuyển hướng các kết nối TCP/IP Chạy trên cả hai giao thức dành cho Server và client Transport Layer User Authentication Connection Giao thức SSH Transport Layer Giao thức tầng vận tải (SSH transport layer protocol) Client khởi tạo kết nối đến Server Thực hiện trao đổi chuỗi định danh Trao đổi thuật toán mã hoá Trao đổi khoá Thiết lập kết nối Client khởi tạo kết nối tới cổng 22 của Server Khi kết nối được thiết lập cả Client và Server sẽ gửi cho nhau thông tin phiên bản đó là chuỗi ID ở dạng SSH-protoversion-softwareversion comments” Trao đổi khoá Cả Client và Server đều có danh sách các thuật toán mã hoá sử dụng. Mỗi phía thực hiện chọn một thuật toán sử dụng và gửi khoá khởi tạo tương ứng cho phía bên kia Nếu sự lựa chọn này trùng nhau thì thuật toán đó sẽ được sử dụng Nếu thuật toán lựa chọn khác nhau thì thủ tục này sẽ được lặp lại ở phía Client Giao thức và phương pháp xác thực người dùng Giao thức và phương pháp xác thực Giao thức xác thực Phương pháp xác thực Dựa trên khoá công khai Dựa trên mật khẩu Dựa trên định danh máy (host based) Giao thức xác thực người dùng Được sử dụng để chạy trên giao thức tầng vận tải SSH Nó được sử dụng với giả định các giao thức phía dưới cung cấp tính toàn vẹn và bí mật Giao thức xác thực người dùng Dịch vụ cho giao thức này là “ssh-userauth” Khi bắt đầu thực hiện, nó nhận định danh phiên làm việc, nó được sử dụng cho việc ký để chứng nhận người sở hữu khoá bí mật Giao thức xác thực người dùng Client gửi yêu cầu xác thực SSH_MSG_USERAUTH_REQUEST mà không có phương pháp xác thực cụ thể Yêu cầu này là bước lấy danh sách các phương pháp xác thực được chấp nhận Giao thức xác thực người dùng Server sẽ trả lời với thông điệp và kèm theo danh sách các phương pháp xác thực mà server hỗ trợ Điều này sẽ cho phép Server chủ động trong quá trình xác thực Client có thể lựa chọn phương pháp xác thực từ danh sách trên Giao thức xác thực người dùng Thời gian chờ cho việc xác thực trong thời gian khoảng 10 phút Có hạn định số lần đăng nhập không thành công trong một phiên làm việc Nếu vượt quá ngưỡng thì server sẽ ngắt kết nối Giao thức xác thực người dùng Định dạng thông điệp request của Client: byte SSH_MSG_USERAUTH_REQUEST string user name (in ISO-10646 UTF-8 encoding [RFC2279]) string service name (in US-ASCII) string method name (US-ASCII) Giao thức xác thực người dùng Cấu trúc thông báo xác thực thất bại byte SSH_MSG_USERAUTH_FAILURE string authentications that can continue boolean partial success Cấu trúc thông báo thành công từ Server byte SSH_MSG_USERAUTH_SUCCESS Phương pháp xác thực Phương pháp sử dụng khoá công khai: Xác thực được thực hiện bằng cách gửi chữ ký được tạo ra với khoá bí mật của người sử dụng Người dùng gửi yêu cầu lấy thuật toán khoá công khai sử dụng Server sẽ từ chối yêu cầu nếu như nó không hỗ trợ thuật toán đó Phương pháp sử dụng khoá công khai Nếu hỗ trợ nó sẽ gửi thông điệp SSH_MSG_USERAUTH_PK_OK Sau khi quyết định thuật toán sử dụng, người dùng gửi thông điệp đã được ký Server phải kiểm tra xem khoá và chữ ký hợp lệ không Nếu cả hai đều hợp lệ thì người dùng được xác thực Phương pháp xác thực Phương pháp sử dụng mật khẩu: Người dùng gửi gói sau: SSH_MSG_USERAUTH_REQUEST Phương pháp xác thực Mật khẩu được truyền đi trong gói ở dạng rõ nhưng toàn bộ gói tin đã được mã hoá bởi tầng vận tải Phương pháp xác thực dựa trên định danh máy (host) Được thực hiện qua việc client gửi chữ ký được tạo ra với khóa bí mật của máy client, và Server kiểm tra bằng cách sử dụng khóa công khai của host đó Một khi định danh máy client được thiết lập, sự xác thực sẽ được dựa trên tên người dùng Phương pháp xác thực Giao thức kết nối Giao thức kết nối (SSH connection protocol) Cung cấp các phiên đăng nhập, thực hiện các lệnh từ xa, chuyển hướng các kết nối TCP/IP Tất cả các kênh được ghép vào một tunnel được mã hóa Được thiết kế để chạy trên tầng vận tải SSH và giao thức xác thực người dùng Giao thức kết nối Kênh (Channel) Mở kênh (Open channel) Truyền dữ liệu Đóng kết nối Cơ cấu kênh truyền Tất cả các phiên làm việc dạng terminal, chuyển hướng kết nối là các kênh (channels) Mở kênh, truyền dữ liệu, đóng kênh Cũng có thể mở một kênh và những kênh này được ghép vào một kết nối Những kênh này được định danh bởi các số Các yêu cầu mở một kênh chứa số kênh của người gửi. Mở một kênh Khi một bên muốn mở một kênh mới, nó gán một số cục bộ cho kênh, sau đó gửi thông điệp dưới đây đến bên kia, bao gồm cả số kênh cục bộ và khởi tạo cửa sổ byte SSH_MSG_CHANNEL_OPEN Dạng kênh: string channel type Kênh người gửi: uint32 sender channel Khởi tạo cửa sổ: uint32 initial window size Gói tin lớn nhất: uint32 maximum packet size ... Mở một kênh Phía nhận quyết định mở kênh hoặc không và trả lời theo một trong hai cách sau byte SSH_MSG_CHANNEL_OPEN_CONFIRMATION uint32 recipient channel uint32 sender channel uint32 initial window size uint32 maximum packet size ... Hoặc byte SSH_MSG_CHANNEL_OPEN_FAILURE uint32 recipient channel uint32 reason code string additional textual information Truyền dữ liệu Truyền dữ liệu được thực hiện với định dạng thông điệp sau: byte SSH_MSG_CHANNEL_DATA uint32 recipient channel string data Đóng kênh Khi không bên nào muốn gửi dữ liệu nữa thì nó sẽ gửi thông điệp byte SSH_MSG_CHANNEL_EOF uint32 recipient_channel Khi một bên nào đó muốn đóng kênh thì nó sẽ gửi thông điệp SSH_MSG_CHANNEL_CLOSE. Cấu trúc thông điệp byte SSH_MSG_CHANNEL_CLOSE uint32 recipient_channel Phiên làm việc Một phiên làm việc là sự thực thi một chương trình từ xa Chương trình có thể là một shell, một ứng dụng, một lệnh hệ thống, vv.. Nhiều phiên có thể thực hiện đồng thời Hết Mở một phiên làm việc Phiên được khởi tạo bằng cách gửi thông điệp sau byte SSH_MSG_CHANNEL_OPEN string "session" uint32 sender channel uint32 initial window size uint32 maximum packet size Khởi tạo một shell Khi một phiên được thiết lập, một chương trình được khởi tạo chương trình có thể là một shell hoặc một ứng dụng byte SSH_MSG_CHANNEL_REQUEST uint32 recipient channel string "shell" boolean want reply Thực hiện một lệnh Cấu trúc sử dụng để thực hiện một lệnh trên máy từ xa như sau byte SSH_MSG_CHANNEL_REQUEST uint32 recipient channel string "exec" boolean want reply string command
File đính kèm:
- Bài giảng Giao thức SSH.ppt