SSH là gì và nó hoạt động như thế nào?

Mã hóa SSH là gì và nó hoạt động như thế nào

Ssinh thái Shell (SSH) là một giao thức bảo mật được triển khai phổ biến với một loạt các mục đích sử dụng khác nhau. Ứng dụng nổi tiếng nhất của nó cho phép người dùng truy cập an toàn máy tính và máy chủ từ xa, nhưng nó cũng có thể được sử dụng để tạo đường hầm, chuyển tiếp cổng, chuyển tập tin an toàn và hơn thế nữa.

Trong hướng dẫn này, chúng tôi sẽ bao gồm SSH là gì, nó được sử dụng để làm gì, lịch sử của giao thức, chi tiết kỹ thuật của nó, cũng như Vân đê bảo mật cần phải được xem xét.

SSH được tạo thành từ ba giao thức riêng biệt: lớp vận chuyển, lớp xác thực và lớp kết nối. Cùng nhau, chúng phục vụ để xác thực bên kia trong kết nối, cung cấp bảo mật thông qua mã hóa và kiểm tra tính toàn vẹn của dữ liệu. SSH hiện được triển khai phổ biến nhất là SSH-2 độc quyền hoặc là phép lặp nguồn mở, OpenSSH.

Việc sử dụng SSH

SSH là một giao thức đa năng. Cấu trúc và tính năng bảo mật của nó cho phép nó được sử dụng theo một số cách, chẳng hạn như để truy cập từ xa, chuyển tiếp cổng, đường hầm và chuyển tập tin an toàn.

Truy cập từ xa

Truy cập từ xa cung cấp cho người dùng một cách để đăng nhập vào máy tính hoặc máy chủ khác từ máy của họ. Nó được sử dụng để truy cập vào máy tính mục tiêu các tập tin cục bộ hoặc thực hiện các dịch vụ trên đó, mà không cần phải có mặt ở đó.

Các chương trình như Telnet và rlogin cũng có chức năng này, nhưng chúng thiếu các tính năng bảo mật của SSH. Các biện pháp mã hóa và xác thực liên quan đến SSH cho phép người dùng kết nối với máy chủ hoặc máy tính khác theo cách được bảo vệ, thậm chí qua mạng trung gian nguy hiểm tiềm tàng.

Truy cập từ xa bằng SSH thường được triển khai để nhân viên có thể làm việc từ xa hoặc cho phép bộ phận CNTT hoàn thành các nhiệm vụ mà không cần phải đi đến máy. Nó có thể được sử dụng cho quản trị từ xa, quản lý cơ sở hạ tầng mạng, để thiết lập tự động hóa, tạo bản sao lưu và hơn thế nữa.

Cổng chuyển tiếp

Chuyển tiếp cổng được sử dụng để chuyển yêu cầu từ một địa chỉ và số cổng sang một bộ khác. Nó áp dụng dịch địa chỉ mạng (NAT) để chuyển hướng các cổng giữa mạng cục bộ và máy tính từ xa, cho phép bạn truy cập một thiết bị từ bên ngoài mạng.

Chuyển tiếp cổng có thể được thực hiện theo ba cách khác nhau:

  • Địa phương cổng chuyển tiếp – Chuyển tiếp cổng cục bộ cho phép bạn kết nối máy khách cục bộ và mạng bên ngoài. Nó có thể hiệu quả để làm những việc như truy cập các trang web bị chặn cục bộ hoặc để kết nối với cơ sở dữ liệu đằng sau tường lửa.
  • Chuyển tiếp cổng từ xa – Kiểu chuyển tiếp này cho phép các ứng dụng phía máy chủ truy cập các dịch vụ ở phía máy khách. Chuyển tiếp cổng từ xa SSH SSH cho phép người dùng kết nối an toàn với các máy chủ từ xa thông qua PC cục bộ của họ bằng cách chuyển hướng một cổng cục bộ sang máy chủ SSH từ xa.
  • Năng động cổng chuyển tiếp – Điều này cho phép người dùng gửi dữ liệu của họ thông qua một cổng cụ thể đến máy tính hoặc máy chủ từ xa bằng cách sử dụng một số máy chủ SSH hoạt động như proxy.

Đường hầm

ssh-2

Các giao thức đường hầm sử dụng đóng gói để di chuyển dữ liệu giữa các mạng. Các đường hầm có thể được triển khai để cho phép các giao thức không phải là bản địa chạy qua các mạng mà thông thường sẽ hỗ trợ chúng. Một cách sử dụng phổ biến khác là cho cung cấp bảo mật qua mạng không an toàn.

Các giao thức đường hầm bao bọc các gói quan trọng bên trong tải trọng của gói khác. SSH đường hầm cho phép người dùng có được xung quanh bảo mật mạng, liên kết các thiết bị bằng giao thức mạng không phải là bản địa và bảo mật dữ liệu đang được truyền. Chúng thường được sử dụng để kết nối người dùng từ xa với tổ chức của họ Tài nguyên trực tuyến một cách an toàn.

SFTP

Giao thức truyền tệp SSH (FTP), đôi khi được gọi là Giao thức truyền tệp an toàn cung cấp một cách an toàn để truy cập, chuyển và quản lý tệp. Đây là một giải pháp thay thế an toàn cho FTP và tận dụng giao thức SSH để gửi, nhận và quản lý các tệp một cách an toàn.

SCP

Giao thức sao chép bảo mật (SCP) tương tự như SFTP, nhưng hạn chế hơn trong phạm vi của nó. Nó chỉ cho phép truyền tệp an toàn, thay vì tập hợp đầy đủ các tính năng cho phép SFTP hoạt động như một giao thức hệ thống tệp từ xa.

Nền tảng & các ứng dụng sử dụng SSH

SSH độc quyền hoặc OpenSSH có thể được sử dụng trên tất cả các hệ điều hành chính. Nó có sẵn trên các nền tảng dựa trên Unix như OpenBSD, macOS, Linux và Solaris, trong khi người dùng Windows có thể sử dụng SSH thông qua PowerShell.

Lịch sử của SSH

SSH được phát triển tại Đại học Công nghệ Helsinki năm 1995 bởi Tatu Ylönen nhằm đáp trả cuộc tấn công đánh hơi bằng mật khẩu trên mạng lưới trường đại học. Nó nhằm mục đích cung cấp một sự thay thế cho các giao thức như FTP, TELNET, rshrlogin, không đảm bảo tính bảo mật hoặc xác thực người dùng một cách an toàn.

SSH được phát hành miễn phí cho công chúng vào năm 1995 và được đón nhận. Trong khi áp dụng nhanh chóng, Ylönen đã thành lập SSH Communications Security vào cuối năm đó để tiếp tục phát triển và thương mại hóa SSH.

Năm 1995, Ylönen cũng xuất bản Dự thảo Internet của Lực lượng đặc nhiệm kỹ thuật Internet (IETF) ghi lại giao thức SSH-1. Những hạn chế đã sớm được tìm thấy trong giao thức, và những điều này không thể được giải quyết mà không ảnh hưởng đến khả năng tương thích ngược. Giải pháp là một phiên bản mới của giao thức và SSH-2 được ra mắt bởi công ty Ylönen vào năm 1996.

SSH-2 nổi bật với các thuật toán mới, khiến IETF tìm thấy một nhóm làm việc nhằm chuẩn hóa giao thức. Nhóm có biệt danh là SECSH, vì Giâyure Shell và nó đã xuất bản Dự thảo Internet đầu tiên cho SSH-2 vào năm 1997.

Phần mềm cho SSH-2 được phát hành vào năm 1998, nhưng nó đã ngay lập tức được áp dụng một cách phổ biến vì cấp phép hạn chế hơn. Năm 2006, IETF đã tạo ra một phiên bản thay đổi của giao thức. Điều này an toàn hơn, sử dụng mã xác thực tin nhắn để kiểm tra tính toàn vẹn và trao đổi khóa Diffie-Hellman để xác thực.

Năm 1999, dự án OpenBSD đã phát hành OpenSSH. OpenSSH là phiên bản miễn phí của giao thức đó là dựa trên những sửa đổi mà Bjorn Grönvall đã thực hiện cho SSH 1.1.12. Các nhà phát triển đã quay lại phiên bản cũ hơn và thay đổi nó rất nhiều, vì đây là phiên bản cuối cùng của SSH hoàn toàn là nguồn mở. OpenSSH hiện là tùy chọn được sử dụng rộng rãi nhất và nó đã được triển khai trong một loạt các hệ điều hành, như Windows, macOS, Linux, Solaris và các hệ thống khác.

SSH-1 so với SSH-2 so với OpenSSH

Như đã lưu ý ở trên, SSH-1 là phiên bản đầu tiên của giao thức, ban đầu được phát hành theo giấy phép nguồn mở. Nó được coi là không an toàn, và nên được thực hiện. Điều này khiến phiên bản độc quyền, SSH-2 và phiên bản miễn phí có sẵn, OpenSSH, là các lựa chọn thay thế khả thi.

SSH-2 và OpenSSH về cơ bản là giống nhau khi nói đến kiến ​​trúc của chúng và cách chúng hoạt động. Sự khác biệt chính là phiên bản độc quyền đi kèm với một loạt các tùy chọn hỗ trợ, trong khi những phiên bản sử dụng OpenSSH cần dựa vào các tài nguyên do cộng đồng tạo ra một cách tự do.

SSH: Các chi tiết kỹ thuật

SSH-1 hoạt động như một giao thức đơn lẻ, nhưng chúng tôi đã thắng được ở đây vì nó đã lỗi thời. Thay vào đó, chúng tôi sẽ tập trung vào SSH-2 và OpenSSH, cả hai đều được tạo thành từ ba giao thức riêng biệt:

  • Giao thức vận chuyển – Điều này thiết lập kết nối và cung cấp bảo mật cơ bản.
  • Giao thức xác thực – Lớp này được sử dụng để xác thực ứng dụng khách.
  • Giao thức kết nối – Giao thức này xử lý các kênh mà dữ liệu được truyền qua.

Mỗi giao thức này đóng vai trò duy nhất hoạt động theo hướng thiết lập và bảo mật kết nối, xác thực bên kia và truyền dữ liệu. Cổng kết nối TCP mặc định là 22 và các kết nối được thiết lập giữa máy khách SSH và máy chủ SSH dọc theo mô hình máy khách-máy chủ.

Quá trình đăng nhập từ xa của SSH tiến hành theo cấu trúc cơ bản sau (với các biến thể tùy thuộc vào cấu hình), mà chúng tôi sẽ đề cập chi tiết hơn sau này:

  • Máy khách liên lạc với máy chủ SSH để bắt đầu kết nối.
  • Sau đó, máy chủ sẽ gửi khóa công khai của nó tới máy khách để xác thực danh tính của nó.
  • Hai bên đàm phán các tham số cho kết nối, sau đó thiết lập một kênh an toàn dọc theo các dòng đó.
  • Sau đó, người dùng đăng nhập vào hệ điều hành của máy chủ lưu trữ và bây giờ có thể quản lý các tác vụ của họ từ xa.

Giao thức vận chuyển

Tầng giao vận là một giao thức cấp thấp đảm nhiệm các nhiệm vụ sau.

  • Xác thực máy chủ
  • Trao đổi khóa
  • Mã hóa để bảo mật dữ liệu
  • Kiểm tra tính toàn vẹn để xác minh rằng dữ liệu chưa bị thay đổi
  • Thiết lập ID phiên có thể được sử dụng trong các giao thức khác

Các giao thức vận chuyển chỉ xác thực máy chủ chứ không phải máy khách (xác thực ứng dụng khách được thực hiện trong giao thức xác thực nếu được yêu cầu).

Trong lớp vận chuyển, kết nối được khởi tạo bởi máy khách và hai bên sau đó đàm phán cách trao đổi các khóa, thuật toán khóa công khai nào sẽ được sử dụng, mật mã khóa đối xứng sẽ mã hóa dữ liệu, thuật toán xác thực tin nhắn nào sẽ được sử dụng để kiểm tra dữ liệu và phương thức nén nào (nếu có) sẽ được thực hiện.

Khi kết nối bắt đầu, cả máy chủ và máy khách cần gửi qua một chuỗi nhận dạng, bao gồm phiên bản giao thức (2.0).

Đàm phán thuật toán

Để thiết lập các tham số của kết nối, cả hai bên đều gửi qua một gói chứa danh sách với các tùy chọn sau:

byte SSH_MSG_KEXINIT

cookie [16] (byte ngẫu nhiên)
danh sách tên kex_alacticms
danh sách tên máy chủ_host_key_alacticms
danh sách tên mã hóa_alacticms_client_to_server
danh sách tên mã hóa_alacticms_server_to_client
danh sách tên mac_alerskyms_client_to_server
danh sách tên mac_alerskyms_server_to_client
danh sách tên nén_alacticms_client_to_server
danh sách tên nén_alerskyms_server_to_client
danh sách tên ngôn ngữ_client_to_server
danh sách tên ngôn ngữ_server_to_client
boolean First_kex_packet_follows
uint32 0 (dành riêng cho phần mở rộng trong tương lai)

Mỗi bên liệt kê các tham số mà họ sẵn sàng chấp nhận trong kết nối, được phân tách bằng dấu phẩy. Thuật toán ưu tiên nên được liệt kê đầu tiên.

Dành cho trao đổi khóa (kex_alacticms), thuật toán đầu tiên mà cả hai bên hỗ trợ sẽ được chọn cho kết nối (cũng có thể có các yếu tố khác cần được đáp ứng, tùy thuộc vào thuật toán nào đã được chọn). Nếu hai bên không thể tìm thấy thuật toán hỗ trợ lẫn nhau thỏa mãn các yêu cầu này, thì kết nối không thành công.

Thuật toán khóa máy chủ là các thuật toán được hỗ trợ cho khóa máy chủ. Máy chủ đưa ra các thuật toán mà nó có khóa máy chủ, trong khi máy khách chỉ định các thuật toán mà nó được chuẩn bị để chấp nhận. Việc lựa chọn sẽ phụ thuộc vào việc phương thức trao đổi khóa đã được giải quyết theo yêu cầu khóa máy chủ có khả năng mã hóa hay chữ ký số

Cả hai bên liệt kê thuật toán khóa đối xứng rằng họ sẵn sàng chấp nhận, với các phương pháp ưa thích ở trên cùng. Tùy chọn đầu tiên xuất hiện trong danh sách máy khách cũng xuất hiện trong danh sách máy chủ của máy chủ phải được sử dụng. Nếu không có thỏa thuận có thể được thực hiện, kết nối thất bại.

Cả hai Thuật toán MACthuật toán nén được đàm phán theo cách tương tự.

Trao đổi khóa

Trao đổi khóa chịu trách nhiệm cho xác thực máy chủ, và nó thiết lập các khóa sẽ được sử dụng để bảo mật kết nối trong các bước sau. Nó thường bắt đầu bằng việc các bên gửi danh sách các thuật toán được hỗ trợ của họ cho nhau. Ngoài ra, mỗi bên có thể đoán thuật toán ưa thích của bên kia và gửi một gói phù hợp với các tham số thuật toán đó khi bắt đầu.

Nếu một bên đoán đoán chính xác, gói đó được sử dụng làm gói trao đổi khóa đầu tiên. Nếu không đoán đúng, thì mỗi bên phải lùi lại một bước và gửi danh sách các thuật toán ưa thích của họ. Nếu thông báo trao đổi khóa bao gồm chữ ký số của máy chủ là bằng chứng về tính hợp pháp của máy chủ, thì nó được coi là xác thực máy chủ rõ ràng. Nếu nó sử dụng bí mật được chia sẻ thay thế, nó được gọi là xác thực máy chủ ngầm.

Việc trao đổi khóa cũng chịu trách nhiệm thiết lập một bí mật chung và hàm băm. Giá trị băm từ trao đổi khóa ban đầu trở thành định danh duy nhất cho phiên và cũng được sử dụng như một phần của chữ ký điện tử chứng minh rằng bên đó là chủ sở hữu thực sự của khóa riêng.

Hàm băm được sử dụng sẽ phụ thuộc vào phương thức trao đổi khóa được quyết định trong đàm phán. Khi hoàn thành trao đổi khóa, tất cả các liên lạc trong tương lai sẽ sử dụng bộ khóa và thuật toán mới.

Theo Dự thảo Internet của Lực lượng đặc nhiệm kỹ thuật Internet (IETF), các phương pháp trao đổi khóa sau đây được coi là an toàn:

  • đường cong25519-sha256
  • đường cong448-sha512
  • diffie-hellman-nhóm-trao đổi-sha256
  • diffie-hellman-nhóm14-sha256
  • diffie-hellman-nhóm15-sha512
  • diffie-hellman-nhóm16-sha512
  • diffie-hellman-nhóm17-sha512
  • diffie-hellman-nhóm18-sha512
  • ecdh-sha2-nistp256
  • ecdh-sha2-nistp384
  • gss-nhóm14-sha256
  • gss-nhóm15-sha512
  • gss-nhóm16-sha512
  • gss-nhóm17-sha512
  • gss-nhóm18-sha512
  • gss-nistp256-sha256
  • gss-nistp384-sha384
  • gss-nistp521-sha512
  • gss-cong25519-sha256
  • gss-cong448-sha512
  • rsa2048-sha256

Thuật toán khóa máy chủ

Các thuật toán khóa công khai này được sử dụng cho xác thực máy chủ cũng như để thiết lập an toàn ID phiên chia sẻ. Chúng cũng có thể được sử dụng tùy chọn để xác thực máy chủ. SSH được thiết kế để hoạt động với một loạt các thuật toán khóa, loại mã hóa và định dạng:

  • Nó sử dụng thuật toán khóa công khai để mã hóa và / hoặc chữ ký số.
  • Một loạt các phương thức mã hóa có thể được thực hiện, cho phép cấu hình với các định dạng dữ liệu, phần đệm và thứ tự byte khác nhau.
  • Các định dạng khóa khác nhau cho phép các khóa được mã hóa theo các cách khác nhau, cũng như một loạt các biểu diễn chứng chỉ.

Các thuật toán mặc định bao gồm các thuật toán sau, tuy nhiên có một số biến thể khác cũng có thể được thực hiện:

  • ssh-rsa
  • ssh-rsa-sha256
  • ssh-dss
  • ssh-dss-sha256
  • x509v3-đăng-dss
  • x509v3-đăng-dss-sha256
  • x509v3-đăng-rsa
  • x509v3-đăng-rsa-sha256

Thuật toán mã hóa

Các thuật toán khóa đối xứng được sử dụng để mã hóa dữ liệu và cung cấp bảo mật. Các tham số và khóa chia sẻ được sử dụng trong quá trình mã hóa được thiết lập trong các giai đoạn trước của kết nối. Thuật toán được chọn mã hóa tải trọng, chiều dài gói, độ dài đệm và các trường đệm.

Một loạt các thuật toán mã hóa khác nhau được chấp nhận trong SSH, nhưng vì mục đích bảo mật, tốt nhất là gắn bó với AES. Các khóa phải tối thiểu là 128 bit, nhưng các khóa lớn hơn được ưu tiên.

Thuật toán MAC

Giao thức vận chuyển xác minh tính toàn vẹn của dữ liệu bằng cách thêm mã xác thực tin nhắn (MAC) vào gói. MAC này dựa trên bí mật chung (được thiết lập trong trao đổi khóa), số thứ tự gói và nội dung gói. Nó được tính toán trước khi mã hóa diễn ra.

Việc triển khai cần đưa ra một thuật toán độc lập để chạy theo từng hướng, mặc dù nó là lý tưởng nếu sử dụng cùng một thuật toán cho cả hai bên. Nhiều thuật toán xác thực tin nhắn có thể được triển khai, tuy nhiên, nên sử dụng SHA-256 trở lên trong hầu hết các tình huống để đảm bảo mức độ bảo mật cao.

Nén

Nén không bắt buộc trong giao thức SSH và việc triển khai nó phải cho phép các kết nối được tiến hành mà không cần nén. Nén chỉ có thể được thực hiện như một tùy chọn, sử dụng các sơ đồ như zlib. Nếu nén được sử dụng, nó chỉ ảnh hưởng đến tải trọng. Trường MAC và chiều dài gói sau đó được tính toán dựa trên tải trọng nén.

Gói giao thức vận chuyển

Gói giao thức vận chuyển được định dạng để bao gồm các thông tin sau (cũng như một số chi tiết ít thích hợp hơn đã bị bỏ qua):

  • Độ dài gói
  • Chiều dài đệm
  • Tải trọng
  • Đệm
  • Mã xác thực tin nhắn (MAC)

ssh-3

Giao thức xác thực

Giao thức này được sử dụng bởi máy chủ để xác thực khách hàng. Nó có thể làm điều này với nhiều cơ chế khác nhau, nhiều cơ chế dựa trên ID phiên được thiết lập trong giao thức truyền tải. Một số sử dụng mã hóa và kiểm tra tính toàn vẹn từ giao thức truyền tải kết hợp với ID phiên, trong khi những người khác sử dụng các thuật toán này một mình.

Máy chủ sử dụng chính sách cục bộ của mình để quyết định phương thức xác thực nào được chấp nhận từ một người dùng cá nhân. Vì máy chủ đã được xác thực trong giao thức truyền tải, không cần xác thực máy chủ một lần nữa.

Tính bảo mật của giao thức xác thực phụ thuộc vào giao thức truyền tải mà nó chạy trên đỉnh. Nếu giao thức truyền tải không thể đảm bảo tính bảo mật hoặc kiểm tra tính toàn vẹn của dữ liệu, thì điều này giới hạn cách sử dụng giao thức xác thực một cách an toàn.

Ví dụ, nếu bảo vệ toàn vẹn không được áp dụng bởi giao thức vận chuyển, thì không nên cho phép các yêu cầu như thay đổi mật khẩu, vì điều này sẽ tạo cơ hội cho kẻ tấn công giả mạo dữ liệu mà không bị chú ý.

Giao thức xác thực sử dụng xác thực khóa chung theo giả định rằng cả khóa riêng của máy chủ cũng như khóa của máy chủ đều không bị xâm phạm. Nếu máy chủ đã bị xâm nhập, điều này có thể dẫn đến tên người dùng và mật khẩu của khách hàng được phát hành cho kẻ tấn công.

Để xác thực dựa trên máy chủ được bảo mật, máy khách không được xâm phạm. Nếu đây là một khả năng, thì nên thêm các phương thức xác thực khác. Nó rất quan trọng để lưu ý rằng quá trình xác thực chỉ mạnh bằng phương thức trao đổi yếu nhất mà máy chủ chấp nhận.

Quá trình giao thức xác thực

Giao thức xác thực bắt đầu khi máy chủ gửi cho khách hàng một danh sách các phương thức xác thực được chấp nhận. Sau đó, khách hàng có thể chọn từ các phương thức này theo bất kỳ thứ tự nào. Quá trình này cung cấp quyền kiểm soát cho máy chủ, nhưng cũng cho phép đủ linh hoạt để khách hàng có thể sắp xếp sử dụng phương pháp thuận tiện nhất.

Các phương thức xác thực ứng dụng khách phổ biến nhất bao gồm:

  • Khóa công khai – Phương pháp này sử dụng các thuật toán như RSA, DSA và ECDSA để xác thực ứng dụng khách thông qua mật mã khóa công khai. Một số triển khai sử dụng chứng chỉ x.509 là tốt. Máy chủ kiểm tra chữ ký số của máy khách đối với khóa công khai của họ để xác minh danh tính của máy khách.
  • Mật khẩu – Mật khẩu cũng có thể được sử dụng để xác thực ứng dụng khách. Máy khách gửi qua mật khẩu của nó (cần được mã hóa bởi giao thức vận chuyển). Nếu mật khẩu khớp với giá trị được lưu trữ của máy chủ, nó được chấp nhận và xác thực sẽ được chuyển tiếp.
  • GSSAPI – Theo phương pháp này, các sơ đồ bên ngoài như Kerberos có thể được sử dụng để đăng nhập một lần.
  • Bàn phím tương tác – Kỹ thuật này cung cấp xác thực mật khẩu một lần bằng cách yêu cầu máy chủ nhắc khách hàng thông tin.

Giao thức kết nối

Giao thức kết nối đặt ra làm thế nào nhiều kênh dữ liệu sẽ được kết hợp trên lớp vận chuyển an toàn. Nó cũng xử lý các tham số được sử dụng để truy cập các hệ thống con an toàn trên máy chủ máy chủ, cũng như chuyển tiếp proxy và truy cập shell.

Giao thức kết nối nằm trên cùng của lớp vận chuyển và giao thức xác thực. Nó cho phép thực thi lệnh từ xa, cũng như chuyển tiếp các kết nối X11 và TCP / IP. Nếu máy chủ hoặc máy khách đã bị xâm nhập, thì giao thức kết nối không an toàn.

Kênh truyền hình

Các kênh là các đường truyền thông cơ bản và chúng có thể được mở bởi một trong hai bên. Các kênh có thể bao gồm các phiên cuối, kết nối chuyển tiếp và các hình thức truyền thông khác. Khi có nhiều kênh, chúng được ghép thành một kết nối.

Mở kênh

Mỗi kênh được đánh số ở cả hai đầu của nó, mặc dù các con số có thể khác nhau ở hai bên. Khi một bên yêu cầu mở kênh, nó sẽ gửi số kênh của mình như một phần của tin nhắn, cũng như thông tin về kích thước cửa sổ ban đầukích thước gói tối đa.

Kích thước cửa sổ ban đầu cho biết số lượng bên mở kênh có thể nhận được. Nếu cần gửi thêm dữ liệu, cửa sổ phải được điều chỉnh trước. Tương tự, kích thước gói tối đa chỉ định mức độ lớn của gói có thể nhận được.

Khi một bên yêu cầu mở kênh, bên còn lại sẽ mở kênh nếu kênh đó có thể chứa. Nếu không, nó sẽ gửi qua một tin nhắn thất bại. Các kênh có thể không được mở vì những lý do sau:

  • Bị cấm bởi chính quyền
  • Không thể kết nối
  • Loại kênh không xác định
  • Thiếu tài nguyên

Nếu một trong hai bên của kết nối muốn gửi nhiều dữ liệu hơn cửa sổ hiện cho phép, họ có thể gửi tin nhắn yêu cầu thêm nhiều byte hơn.

Đóng kênh

Khi một bên của kết nối đã hoàn thành việc truyền dữ liệu của mình, nó sẽ gửi một thông báo cho biết rằng nó đã kết thúc sử dụng kênh. Mặc dù vậy, kênh vẫn được mở và dữ liệu vẫn có thể được gửi bởi bên kia. Nếu một bên muốn chấm dứt hoàn toàn kênh, nó sẽ làm như vậy với một thông báo chấm dứt riêng.

Bảo mật SSH

Các phiên bản khác nhau của SSH đều có vấn đề bảo mật riêng, mặc dù các cấu hình hiện tại của SSH-2 và OpenSSH được coi là an toàn hơn nhiều so với SSH-1.

SSH-1

SSH-1 thường được coi là thiếu sót, với một loạt các lỗ hổng khác nhau. Chúng bao gồm một lỗi trong SSH 1.5 cho phép người dùng trái phép chèn nội dung vào luồng dữ liệu SSH. Cuộc tấn công này đã tận dụng thuật toán CRC-32 bảo vệ tính toàn vẹn dữ liệu tối thiểu của CRC-32.

Cuộc tấn công này đã được giảm nhẹ bằng Trình phát hiện tấn công bù trừ SSH, được tích hợp vào hầu hết các triển khai mới hơn. Khắc phục sự cố này đi kèm với một lỗ hổng mới, có khả năng thực thi mã tùy ý với các đặc quyền gốc.

Ngoài ra còn có một lỗ hổng cho phép đối thủ thay đổi khối cuối cùng trong phiên sử dụng mã hóa IDEA, cũng như một lỗ hổng cho phép máy chủ bị xâm nhập chuyển tiếp quy trình xác thực ứng dụng khách đến một máy chủ khác.

Do những vấn đề bảo mật này, SSH-2 nên được sử dụng thay thế. Để giữ cho việc thực hiện của bạn an toàn, bạn cũng nên vô hiệu hóa đàm phán lại thành SSH-1, bởi vì các cuộc tấn công có thể lợi dụng điều này để truy cập dữ liệu của bạn thông qua mức độ bảo vệ yếu hơn SSH-1.

SSH-2

SSH-2 dễ bị tấn công về mặt lý thuyết đối với chế độ mã hóa mặc định của nó, CBC. Nó cho phép kẻ tấn công phục hồi tối đa 32 bit của bản rõ từ một khối được mã hóa. Điều này có thể được giảm thiểu bằng cách sử dụng chế độ Bộ đếm (TLB) và thay vào đó, biến mật mã khối thành mật mã luồng.

Vào cuối năm 2014, Der Spiegel đã phát hành các tài liệu NSA ngụ ý rằng NSA đôi khi có thể phá vỡ SSH. NSA PowerPoint bị rò rỉ này nói rằng NSA có thểCó khả năng phục hồi tên người dùng và mật khẩuMặc dù không có thêm thông tin chi tiết. Người ta không biết cơ quan nào đã sử dụng phương pháp này để làm điều này, nhưng dường như không chắc rằng nó sẽ nói dối về khả năng của nó trong tài liệu nội bộ của chính nó.

Trong năm 2023 rò rỉ Vault 7, nó đã được tiết lộ rằng CIA có hai công cụ có thể được sử dụng để chặn và đánh cắp thông tin đăng nhập và mật khẩu SSH. BothanSpy nhắm mục tiêu các máy khách Windows Xshell, trong khi Gyrfalcon được sử dụng để chống lại ứng dụng khách OpenSSH trên một số bản phân phối Linux khác nhau.

Những công cụ này có khả năng đánh cắp thông tin đăng nhập và sau đó truyền chúng trở lại máy chủ CIA. Cả hai cuộc tấn công này đều có thể phá vỡ giao thức; họ chỉ sử dụng các cuộc tấn công kênh bên khác có thể khắc phục được trong một số triển khai nhất định.

Bất chấp các cuộc tấn công này, SSH-2 được coi là an toàn trong hầu hết các tình huống, miễn là nó được triển khai phù hợp. Các mục tiêu có giá trị cao hoặc những người sử dụng triển khai lỗi thời hoặc kém nên xem xét các lựa chọn khác.

OpenSSH

Trong OpenSSH phiên bản 2, một cuộc tấn công đã được phát hiện đã lợi dụng điểm yếu trong gói nhị phân SSH. Cuộc tấn công đã cho phép các nhà nghiên cứu từ Đại học London thu hồi 14 bit của bản rõ từ một khối được mã hóa. Điều này đã được giảm nhẹ trong phiên bản 5.2 bằng cách làm cho giao thức đọc toàn bộ chiều dài gói tin hoặc mã xác thực tin nhắn không hợp lệ, thay vì kết thúc kết nối.

Trong phiên bản 6.8 và 6.9, Linux có thể được sử dụng để thực thi các lệnh tùy ý trên các thiết bị đầu cuối của người dùng khác. Điều này đã được thực hiện thông qua một lỗ hổng leo thang đặc quyền cho phép kẻ tấn công tiêm các ký tự với điều khiển đầu vào / đầu ra TIOCSTI.

SSH có an toàn không?

Mặc dù có vẻ như SSH có rất nhiều vấn đề về bảo mật, nó có liên quany bình thường đối với một số lỗ hổng được tìm thấy trong một giao thức triển khai khác nhau. Điều này không có nghĩa là giao thức SSH không an toàn. Thay vào đó, nó chỉ có nghĩa là nó cần được thực hiện một cách chính xác.

Miễn là bạn đang sử dụng SSH-2 hoặc OpenSSH và nó được cấu hình theo cách phù hợp với việc sử dụng của bạn, bạn nên cảm thấy tin tưởng vào sự bảo vệ mà SSH cung cấp kết nối của bạn. Đó là lý do tại sao nó vẫn là một giao thức được sử dụng thường xuyên như vậy, đặc biệt là cho các mục đích truy cập và đường hầm từ xa.

Xem thêm: Các loại mã hóa phổ biến được giải thích

Nền công nghệ mạng bởi TheDigitalArtist được cấp phép theo Muff