SSH

Bách khoa toàn thư mở Wikipedia

Bước tới: menu, tìm kiếm

1. Định nghĩa

SSH (tiếng Anh: Secure Shell) là một giao thức mạng dùng để thiết lập kết nối mạng một cách bảo mật. SSH hoạt động ở lớp trên trong mô hình phân lớp TCP/IP. Các công cụ SSH (như là OpenSSH, PuTTy,...) cung cấp cho người dùng cách thức để thiết lập kết nối mạng được mã hoá để tạo một kênh kết nối riêng tư. Hơn nữa tính năng tunneling (hoặc còn gọi là port forwarding) của các công cụ này cho phép chuyển tải các giao vận theo các giao thức khác. Do vậy có thể thấy khi xây dựng một hệ thống mạng dựa trên SSH, chúng ta sẽ có một hệ thống mạng riêng ảo VPN đơn giản.

Mỗi khi dữ liệu được gửi bởi một máy tính vào mạng, SSH tự động mã hoá nó. Khi dữ liệu được nhận vào, SSH tự động giải mã nó. Kết quả là việc mã hoá được thực hiện trong suốt: người dùng có thể làm việc bình thường, không biết rằng việc truyền thông của họ đã được mã hoá an toàn trên mạng.


2. Lịch sử phát triển các phiên bản SSH

SSH1 và giao thức SSH-1 được trình bày năm 1995 bởi Tatu Ylõnen, một nhà nghiên cứu ở trường đại học kĩ thuật Helsinki của Phần Lan. Sau khi mạng trường đại học của ông ta là nạn nhân của một cuộc tấn công đánh cắp password vào đầu năm đó.

Tháng 7 năm 1995, SSH1 được phát hành rộng rãi dưới dạng một phần mềm miễn phí có source code, cho phép mọi người sao chép và sử dụng mà không thu phí. Vào cuối năm đó, ước tính có khoảng 20.000 người dùng trên 50 quốc gia đã sử dụng SSH1, và mỗi ngày Ylõnen nhận 150 mail yêu cầu hỗ trợ. Để đáp lại, Ylõnen đã thành lập SSH Communications Security (SCS, http://www.ssh.com) vào tháng 12 năm 1995 để duy trì, thương nghiệp hoá và tiếp tục phát triển SSH.

Cũng trong năm 1995, Ylõnen soạn thảo giao thức SSH-1 còn gọi là Internet Engineering Task Force (IETF), nó diễn tả hoạt động cơ bản của phần mềm SSH1 trên thực tế. Nó là một giao thức có phần quảng cáo nhưng còn một số lỗi và giới hạn nhưng rất phổ biến. Năm 1996, SCS giới thiệu một phiên bản mới đó là phiên bản chính của giao thức, SSH 2.0 hay SSH-2, phiên bản này được kết hợp chặt chẽ những thuật toán mới và không hợp với SSH-1. Trong lúc đó, IETF thành lập một nhóm làm việc gọi là SECSH (Secure Shell) để chuẩn hoá giao thức và chỉ đạo sự phát triển của nó trên lợi ích chung. Nhóm làm việc SECSH đã trình bày bản phác thảo Internet đầu tiên đối với giao thức SSH-2 vào tháng 2 năm 1997.

Năm 1998, SCS phát hành sản phẩm phần mềm “SSH Secure Shell” (SSH2), dựa trên giao thức SSH-2. Tuy nhiên, SSH2 không thay thế SSH1 trong một số lĩnh vực, có 2 lí do. Thứ nhất, SSH2 không có một số tiện ích, các đặc điểm có ích và cấu hình tuỳ chọn như SSH1. Thứ hai, SSH2 có nhiều giới hạn về việc đăng kí. Bản chính SSH1 đã có sẵn miễn phí từ Ylõnen và trường đại học kĩ thuật Helsinki. Phiên bản mới hơn của SSH1 từ SCS vẫn có sẵn miễn phí cho hầu hết người dùng, thậm chí cả cấu hình thương mại cũng miễn phí chỉ cần phần mềm đó không được trực tiếp bán cho việc thu lợi nhuận hoặc được tặng như là một dịch vụ cho khách hàng. Vì thế, tuy SSH2 đã xuất hiện, nhưng hầu hết những người đang sử dụng SSH1 đều nhận ra vài ưu điểm của SSH1 so với SSH2 và tiếp tục sử dụng SSH1, ba năm sau khi SSH2 ra đời thì SSH1 vẫn là phiên bản được sử dụng phổ biến trên Internet và vượt qua cả SSH2 là giao thức tốt hơn và bảo mật hơn.

Tuy nhiên, SSH2 cũng có hai sự phát triển hưa hẹn, đó là một bản nới lỏng của SSH2 bản quyền và sự xuất hiện SSH-2 bổ sung. Năm 2000, SCS mở rộng SSH2 bản quyền để cho phép sử dụng khi làm việc riêng lẻ đối với các tổ chức hoạt động phi lợi nhuận. Nó cũng được mở rộng cho phép dùng miễn phí đối với Linux, NetBSD, FreeBSD và hệ điều hành OpenBSD. Cùng thời gian đó, OpenSSH (http://www.openssh.com) đã được phát triển nổi bật như là một SSH bổ sung, được phát triển dưới hoạt động của dự án OpenBSD (http://www.openbsd.org) và miễn phí sẵn bên dưới OpenBSD có đăng kí. OpenSH hỗ trợ cả SSH-1 và SSH-2 trong một chương trình. Tuy OpenSSH được phát triển trên nền OpenBSD nhưng nó cũng hoạt động được trên Linux, Solais, AIX và những hệ điều hành khác. Mặc dù OpenSSH tương đối mới và không có vài đặc điểm có trong SSH1 và SSH2 nhưng nó đang trên đà phát triển nhanh chóng và hứa hẹn trở thành bản SSH chính trong tương lai không xa.

3. Bên trong giao thức SSH

3.1. Tổng quan về các đặc điểm của SSH

Các đặc điểm chính của giao thức SSH là:

- Tính bí mật (Privacy) của dữ liệu thông qua việc mã hoá mạnh mẽ - Tính toàn vẹn (integrity) của thông tin truyền, đảm bảo chúng không bị biến đổi. - Chứng minh xác thực (authentication) nghĩa là bằng chứng để nhận dạng bên gửi và bên nhận - Giấy phép (authorization) :dùng để điều khiển truy cập đến tài khoản. - Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling) để mã hoá những phiên khác dựa trên giao thức TCP/IP

3.1.1. Tính bí mật (Privacy)

Tính bí mật có nghĩa là bảo vệ dữ liệu không bị phơi bày. Mạng máy tính bình thường không bảo đảm tính bí mật, bất cứ ai truy cập đến phần cứng của mạng hoặc đến những host kết nối với mạng đều có thể sẽ đọc được tất cả dữ liệu đi qua mạng. Mặc dù mạng chuyển mạch hiện đại đã giảm những vấn đề này trong mạng vùng cục bộ nhưng nó vẫn còn một vấn đề nghiêm trọng đó là mật khẩu dễ bị những kẻ xấu đánh cắp.

SSH cung cấp tính bí mật bằng việc mã hoá dữ liệu đi qua mạng. Đó là việc mã hoá hai đầu dựa trên khoá ngẫu nhiên (sinh ra để phục vụ cho một phiên kết nối và được huỷ đi khi phiên kết nối thành công). SSH hỗ trợ nhiều thuật toán mã hoá đối với phiên dữ liệu, đó là những thuật toán mã hoá chuẩn như: AES, ARCFOUR, Blowfish, Twofish, IDEA, DES và triple-DES (3DES)

3.1.2. Tính toàn vẹn (Integrity)

Tính toàn vẹn nghĩa là bảo đảm dữ liệu được truyền từ một đầu này đến đầu kia của mạng không bị thay đổi. Giao thức SSH sử dụng phương pháp kiểm tra toàn vẹn mật mã, phương pháp này kiểm tra cả việc dữ liệu có bị biến đổi hay không và dữ liệu đến có đúng là do đầu kia gửi hay không. Nó sử dụng thuật toán băm khoá là MD5 và SHA-1.

3.1.3. Chứng minh xác thực (authentication)

Chứng minh xác thực là kiểm tra định danh của ai đó để xác định chính xác đúng là người đó hay không. Mỗi kết nối SSH bao gồm hai việc xác thực: client kiểm tra định danh của SSH server (server authentication) và server kiểm tra định danh của người sr dụng yêu cầu truy cập (user authentication). Server authentication chắc chắn rằng SSH server là chính xác và không phải là kẻ lừa đảo để đề phòng kẻ tấn công lại gửi kết nối mạng đến một máy khác. Server authentication cũng bảo vệ việc bị kẻ xấu ngồi ở giữa hai bên, lừa gạt cả hai bên nghĩa là kẻ xấu sẽ nói với server nó là client và nói với client nó là server để đọc được dữ liệu trao đổi giữa hai bên.

User authentication theo truyền thống là làm việc với mật khẩu. Để xác thực định danh của bạn, bạn phải đưa ra mật khẩu, và dễ bị lấy cắp. Thêm nữa, để dễ nhớ một mật khẩu, người ta thường đặt nó ngắn và có ý nghĩa nào đó nên dễ bị kẻ xấu đoán ra. Đối với mật khẩu dài hơn thì người ta thường chọn những từ hoặc câu trong ngôn ngữ bẩm sinh nên cũng dễ bị bẻ khoá.

SSH hỗ trợ xác thực bằng mật khẩu, mã hoá mật khẩu khi nó truyền đi trên mạng. Đây là sự cải thiện rất lớn so với những giao thức truy cập từ xa thông thường khác (Telnet, FTP) mà chúng gửi mật khẩu qua mạng dưới dạng clear text. Tuy nhiên, việc chứng thực như thế vẫn chỉ là chứng thực mật khẩu đơn giản vì thế SSH cung cấp cơ chế mạnh hơn và dễ sử dụng hơn: mỗi user có nhiều chữ kí khoá công cộng (per-user public-key signature) và một cải tiến rlogin-style xác thực với định danh host được kiểm tra bằng khoá công khai. Hơn nữa, những bản bổ sung khác nhau của SSH hỗ trợ vài hệ thống khác bao gồm Kerberos, RSA, mật khẩu S/Key one-time và PAM. Một SSH client và SSH server đàm phán với nhau để xác định cơ chế xác thực sẽ sử dụng dựa trên cấu hình của chúng và một server thậm chí có thể yêu cầu nhiều kiểu xác thực.

3.1.4. Việc cấp giấy phép

Việc cấp giấy phép có tác dụng quyết định ai đó có thể hoặc không thể làm gì đó. Nó diễn ra sau khi xác thực, bởi vì bạn không thể chấp nhận một ai đó có quyền gì khi chưa biết đó là ai. SSH server có nhiều cách khác nhau để giới hạn hành động của client. Truy cập đến phiên đăng nhập tác động lẫn nhau như TCP port và X Window forwarding, key agent forwarding, … có thể tất cả đều được điều khiển mặc dù không phải tất các đặc điểm đều có sẵn trên tất cả các bản bổ sung SSH,và chúng không luôn luôn tống quát hoặc linh hoạt như bạn ý muốn. Giấy phép có thể được điều khiển tại một mức server rộng (ví dụ: /etc/ssh/sshd_config file đối với OpenSH) hoặc theo tài khoản phụ thuộc vào phương thức xác thực sử dụng.

3.1.5. Chuyển tiếp (forwarding) hoặc tạo đường hầm (tunneling)

Chuyển tiếp hoặc tạo đường hầm là đóng gói dịch vụ dựa trên TCP khác như là Telnet hoặc IMAP trong một phiên SSH mang lại hiệu quả bảo mật của SSH đến với các dịch vụ dựa trên TCP khác. Ví dụ, một kết nối Telnet bình thường truyền username, password của bạn và phiên đăng nhập của bạn ở dạng clear text. Bằng cách chuyển tiếp telnet thông qua SSH, tất cả dữ liệu sẽ tự động được mã hoá và kiểm tra định danh và bạn có thể xác nhận dùng SSH tin cậy. SSH hỗ trợ 3 kiểu chuyển tiếp:

 TCP port forwarding:

SSH dùng TCP/IP làm cơ chế truyền, thường dùng port 22 trên máy server khi nó mã hoá và giải mã lưu lượng đi trên mạng. Ở đây chúng ta nói đến một đặc điểm mã hoá và giải mã lưu lựong TCP/IP thuộc về ứng dụng khác, trên cổng TCP khác dùng SSH. Tiến trình này gọi là port forwarding, nó có tính trong suốt cao va khá mạnh. Telnet, SMTP, NNTP, IMAP và những giao thức không an toàn khác chạy TCP có thể được bảo đảm bằng việc chuyển tiếp kết nối thông qua SSH. Port forwarding đôi khi được gọi là tunneling bởi vì kết nối SSH cung cấp một “đường hầm” xuyên qua để kết nối TCP khác có thể đi qua. Giả sử bạn có một máy H ở nhà đang chạy IMAP và bạn muốn kết nối đến một IMAP server trên máy S để đọc và gửi mail. Bình thường thì việc kết nối này không đảm bảo an toàn, tài khoản và mật khẩu mail của bạn được truyền đi dưới dạng clear text giữa chương trình mail của bạn và server. Đối với SSH port forwarding, bạn có thể định tuyến lại trong suốt kết nối IMAP ( tìm cổng TCP 143 trên server S) để truyền đi thông qua SSH, mã hoá bảo đảm dữ liệu truyền đi trên kết nối. Máy IMAP server phải chạy một SSH server cho port forwarding để cung cấp việc bảo đảm đó.

Tuy nhiên, SSH port forwarding chỉ hoạt động trên giao thức TCP và không làm việc được trên các giao thức khác như UDP hay AppleTalk

 X forwarding

X là một hệ thống window phổ biến đối với các trạm làm việc Unix, một trong những đặc điểm tốt nhất của nó là tính trong suốt. Sử dụng X bạn có thể chạy ứng dụng X từ xa để mở các cửa sổ của chúng trên màn hình hiển thị cục bộ của bạn

 Agent forwarding SSH client có thể làm việc với một SSH agent trên cùng một máy. Sử dụng mọt đặc trưng gọi là agent forwarding, client cũng có thể liên lạc với các agent trên những máy từ xa. Điều thuận lợi là nó cho phép client trên nhiều máy làm việc với một agent và có thể tránh vấn đề liên quan đến tường lửa.


4. Kiến trúc chung của giao thức SSH

SSH có khoảng một bộ 12 thuộc tính riêng lẻ, các thành phần tác động lẫn nhau cho ra các nét đặc trưng riêng.

SSH cũng có khoá (keys), phiên (sessions) và những thứ ngộ nghĩnh khác. Ở đây chúng ta qui định một bản tóm tắt tổng quan của tất cả các thành phần, ví thế bạn có thể bắt đầu thấy được bức tranh lớn về SSH như sau:

Server

Một chương trình cho phép đi vào kết nối SSH với một bộ máy, trình bày xác thực, cấp phép, … Trong hầu hết SSH bổ sung của Unix thì server thường là sshd. Client

Một chương trình kết nối đến SSH server và đưa ra yêu cầu như là “log me in” hoặc “copy this file”. Trong SSH1, SSH2 và OpenSSH, client chủ yếu là ssh và scp.

Session

Một phiên kết nối giữa một client và một server. Nó bắt đầu sau khi client xác thực thành công đến một server và kết thúc khi kết nối chấm dứt. Session có thể được tương tác với nhau hoặc có thể là một chuyến riêng.

Key

Một lượng dữ liệu tương đối nhỏ, thông thường từ mười đến một hoặc hai ngàn bit. Tính hữu ích của việc sử dụng thuật toán ràng buộc khoá hoạt động trong vài cách để giữ khoá: trong mã hoá, nó chắc chắn rằng chỉ người nào đó giữ khoá (hoặc một ai có liên quan) có thể giải mã thông điệp, trong xác thực, nó cho phép bạn kiểm tra trễ rằng người giữ khoá thực sự đã kí hiệu vào thông điệp. Có hai loại khóa: khoá đối xứng hoặc khoá bí mật và khoá bất đối xứng hoặc khóa công khai. Một khoá bất đối xứng hoặc khoá công khai có hai phần: thành phần công khai và thàn phần bí mật.

User key


Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bởi client như một sự chứng minh nhận dạng của user ( một người dùng đơn lẻ có thể có nhiều khoá)

Host key


Là một thực thể tồn tại lâu dài, là khoá bất đối xứng sử dụng bới server như sự chứng minh nhận dạng của nó, cũng như được dùng bởi client khi chứng minh nhận dạng host của nó như một phần xác thực đáng tin. Nếu một bộ máy chạy một SSH server đơn, host key cũng là cái duy nhất để nhận dạng bộ máy đó. Nếu bộ máy chạy nhiều SSH server, mỗi cái có thể có một host key khác nhau hoặc có thể dùng chung. Chúng thường bị lộn với server key.

Server key

Tồn tại tạm thời, là khoá bất đối xứng dùng trong giao thức SSH-1. Nó đựợc tái tạo bởi server theo chu kỳ thường xuyên ( mặc định là mỗi giờ) và bảo vệ session key. Thường bị lộn với host key. Khoá này thì không bao giờ được lưu trên đĩa và thành phần bí mật của nó không bao giờ được truyền qua kết nối ở bất cứ dạng nào, nó cung cấp “perfect forward secrecy” cho phiên SSH-1

Session key

Là một giá trị phát sinh ngẫu nhiên, là khoá đối xứng cho việc mã hoá truyền thông giữa một SSH client và SSH server. Nó được chia ra làm 2 thành phần cho client và server trong một loại bảo bật trong suốt quá trình thiết lập kết nối SSH để kẻ xấu không phát hiện được nó.

Key generator

Một chương trình tạo ra những loại khoá lâu dài( user key và host key) cho SSH. SSH1, SSH2 và OpenSSH có chương trình ssh-keygen Known hosts database Là một chồng host key. Client và server dựa vào cơ sở dữ liệu này để xác thực lẫn nhau. Agent

Một chương trình lưu user key trong bộ nhớ. Agent trả lời cho yêu cầu đối với khoá quan hệ hoạt động như là kí hiệu một giấy xác thực nhưng nó không tự phơi bày khoá của chúng. Nó là một đặc điểm rất có ích. SSH1, SSH2 và OpenSSH có agent ssh-agent và chương trình ssh-add để xếp vào và lấy ra khoá được lưu.

Signer

Một chương trình kí hiệu gói chứng thực hostbased.

Random seed

Một dãy dữ liệu ngẫu nhiên đựoc dùng bởi các thành phần SSH để khởi chạy phần mềm sinh số ngẫu nhiên

Configuration file

Một chồng thiết lập để biến đổi hành vi của một SSH client hoặc SSH server. Không phải tất cả thành phần đều được đòi hỏi trong một bản bổ sung của SSH. Dĩ nhiên những server, client và khoá là bắt buộc nhưng nhiều bản bổ sung không có agent và thậm chí vài bản không có bộ sinh khoá.

4. SSH2

4.1 Bên trong giao thức SSH2

Giao thức SSH-2 được chia làm 4 bộ phận chính, được diễn tả như 4 giao thức riêng rẽ trong nhiều tài liệu IETF khác nhau. Theo thông thường, chúng được sắp xếp cùng với nhau để cung cấp thiết lập các dịch vụ mà hầu hết người dùng kết hợp chúng thành một SSH-2 đầy đủ.

- Giao thức lớp vận chuyển SSH (SSH-TRANS) - Giao thức xác thực SSH (SSH-AUTH) - Giao thức kết nối SSH (SSH-CONN) - Giao thức truyền file SSH (SSH-SFTP)

Hình 3-2 phác thảo việc phân chia công việc giữa các giao thức, và chúng quan hệ với nhau như thế nào, những chương trình ứng dụng và mạng. Những chữ nghiêng là phần mở rộng giao thức.

Hình 3-2 Đặc điểm giao thức SSH-2

SSH-2 đươc thiết kế để mở rộng và modul hoá. Tất cả các giao thức lõi định nghĩa miêu tả các dịch vụ mà chúng cung cấp và chúng phải phù hợp nhưng cho phép nhiều cơ chế có thể làm việc, cũng như là một cach để dễ dàng thêm vào một cơ chế mới. Tất cả những tham số chủ yếu của kết nối SSH đều có thể được thương lượng, bao gồm những thuật toán và phương thức sử dụng trong:  Trao đổi khoá phiên  Xác thực server  Bảo toàn và bí mật dữ liệu  Xác thực người dùng  Nén dữ liệu

Client và server thương lượng việc sử dụng một thiết lập phổ biến, cho phép thao tác rộng giữa các phần bổ sung khác nhau. Trong hầu hết các loại, giao thức định nghĩa ít nhất một phương thức để đẩy mạnh thao tác giữa các phần xa hơn. Nên nhớ rằng điều này chỉ có nghĩa một việc tuân theo được thực hiện đòi hỏi hỗ trợ phương thức trong đoạn mã của nó ; bất cứ một phương thức ngoại lệ nào cũng có thể bị tăt bởi người quản trị trong một điều kiện đặc biệt nào đó. Vì thế, trên thực tế việc chứng thực khoá công khai đòi được hỏi bởi SSH-AUTH không có nghĩa là nó luôn luôn có sẵn cho client từ bất cứ máy nào chạy SSH server, nó chỉ có nghĩa là nó phải có sẵn và có thể được bật lên nếu cần.

4.2. Tóm tắt cơ chế hoạt động của SSH2

Một phiên làm việc của SSH-2 trải qua 4 bước chủ yếu như sau:

Thiết lập kết nối ban đầu (SSH-TRANS) Tiến hành xác thực lẫn nhau (SSH-AUTH) Mở phiên kết nối để thực hiện các dịch vụ (SSH-CONN) Chạy các dịch vụ ứng dụng SSH ( có thể là SSH-SFTP)

SSH-TRANS là khối xây dựng cơ bản cung cấp kết nối ban đầu, ghi chép giao thức, xác thực server, mã hoá cơ bản và các dịch vụ bảo toàn. Sau khi thiết lập một kết nối SSH-TRANS, client có một kết nối đơn, đảm bảo, luồng truyền byte full-duplex đến một xác nhận tương đương.

Kế đến, client có thể dùng SSH-AUTH thông qua kết nối SSH-TRANS đến xác thực của chính nó với server. SSH-AUTH định nghĩa một cái khung đối với việc nhiều cơ chế xác thực có thể được sử dụng, sữa chữa mọi thứ như là định dạng và những yêu cầu khác của xác thực,những điều kiện để thành công hoặc có thể bị lỗi và làm thế nào client học được những phương thức có sẵn. Có thể là một phương thức bất kỳ nào đó được thi hành, và giao thức cho phép trao đổi tuỳ ý một phần của bất kỳ cơ chế riêng nào để phần mở rộng giao thức dễ định nghĩa để kết hợp chặt chẽ với bất cứ phương thức xác thức mong muốn nào trong tương lai. SSH-AUTH chỉ yêu cầu một phương thức: khoá công cộng với thuật toán DSS. Xa hơn nữa, nó định nghĩa hai phương thức: mật khẩu và dựa trên host. Một số phương thức đã được định nghĩa trong nhiều bản thảo Internet khác nhau và vài bản đã được chấp nhận rộng rãi.

Sau khi xác thực, SSH client yêu cầu giao thức SSH-CONN để cung cấp một sự đa dạng của các dịch vụ thông qua một kênh đơn cung cấp bởi SSH-TRANS. Điều này bao gồm mọi thứ cần để hỗ trợ nhiều phiên tương tác và phiên không tương tác: những luồng đa thành phần khác nhau (hoặc channel) ngang qua kết nối bên dưới, quản lý X, TCP và agent forwarding, truyền tín hiệu thông qua kết nối, nén dữ liệu và thực thi chương trình từ xa. Cuối cùng, một ứng dụng có thể sử dụng SSH-SFTP qua một kênh SSH-CONN để cung cấp truyền file và các chức năng thao tác hệ thống tập tin từ xa.

5. Các kiểu tấn công mà SSH có thể phòng ngừa

Cũng giống như bất kỳ công cụ bảo mất nào, SSH có những mối đe dọa chống lại các ảnh hưởng của nó và các chương trình khác không định địa chỉ. Chúng ta sẽ thảo luận về hình thức này đầu tiên.

Eavesdropping

Một eavesdropper là một người rình mò trên mạng, có thể biết được giao thông mạng mà không làm ảnh hưởng đến đường truyền. Hình thức mã hóa của SSH chống lại eavesdropping. Nội dung của một session SSH , ngay cả khi bị chặn, cũng không thể bị giải mã bởi một “kẻ rình mò”.

Dịch vụ đặt tên và giả mạo IP

Nếu một kẻ tấn công phá hoại dịch vụ đặt tên (DNS, NIS, …), các chương trình liên quan đến mạng có thể bị ép buộc kết nối đến máy tính khác. Cũng tương tự, một kẻ tấn công có thể giả mạo một host bằng cách đánh cắp địa chỉ IP đang dùng. Trong các trường hợp khác, bạn cũng sẽ gặp rắc rối: các chương trình trên máy khách có thể kết nối sai đến máy chủ, đánh cắp mật khẩu mà bạn cung cấp. Trình bảo vệ SSH chống lại kiểu tấn công này bằng cách kiểm tra mã hóa và nhận dạng máy chủ. Khi cài đặt một session, máy khách SSH kiểm tra tính hợp lệ khóa của máy chủ dựa vào danh sách cục bộ kết hợp với tên máy chủ và các địa chỉ cùng với khóa của chúng. Nếu khóa mà Host cung cấp không đúng với trong danh sách, SSH sẽ cảnh báo. Tính năng này có thể bị vô hiệu hóa trong một số ít các thiết lập an ninh khi mà các thông báo cảnh báo gây khó chịu.

Giao thức SSH-2 cho phép bao gồm chứng nhận PKI cùng với các khóa. Trong tương lai, chúng ta hi vọng sự bổ xung tính năng này vào các sản phẩm SSH cùng với nhiều sự triển khai phổ biến của PKI sẽ xóa đi gánh nặng quản trị khóa và giảm bớt sự cần thiết cho sự thỏa hiệp an ninh nói riêng này.

Chiếm đoạt kết nối

Một kẻ tấn công lanh lợi không chỉ có thể theo dõi được giao thông mạng, mà còn có thể xen vào, chiếm đoạt một kết nối TCP, đánh cắp nó theo nghĩa đen từ một điểm cuối hợp pháp. Đây là các tai hại rõ ràng: dù cho phương thức xác nhận của bạn có tốt như thế nào đi nữa, kẻ tấn công có thể đơn giản là đợi cho đến khi bạn đăng nhập, sau đó đánh cắp kết nối và chèn các lệnh bất chính của hắn vào trong session của bạn. SSH không thể chống lại kiểu chiếm quyền điều khiển này, từ đó trở đi đây trở thành điểm yếu trong TCP hoạt động bên dưới SSH. Tuy nhiên, SSH đáp trả không hiệu quả (trừ kiểu tấn công từ chối dịch vụ). Trình kiểm tra tính toàn vẹn của SSH phát hiện một session có bị sửa đổi hay không, và ngắt kết nối ngay lập tức mà không sử dụng bất kỳ dữ liệu bị sửa đổi nào.

Các kiểu tấn công Man-in-the-Middle

Kiểu tấn công người dùng ở giữa là kiểu tấn công chủ động đặc biệt không dễ bị phát hiện và được mô tả trong phần 3-5. Một đối thủ ngồi giữa bạn và người ngang hàng thực sự (ví dụ giữa máy khách SSH và máy chủ), chặn tất cả sự qua lại và thay đổi hoặc xóa những thông báo. Hãy tưởng tượng rằng bạn cố gắng kết nối đến một máy chủ SSH, nhưng Mary “hiểm độc” chặn kết nối của bạn. Cô ấy cư xử giống như một máy chủ SSH, dù cho bạn không để ý, cô ấy kết thúc chia sẻ khóa session với bạn. Đồng thời, cô ấy cũng bắt đầu tạo kết nối của chính cô ấy đến máy chủ mong đợi của bạn, thu về được khóa session riêng biệt với máy chủ. Cô ấy có thể đăng nhập giống như bạn bởi vì bạn sử dụng password hợp lệ và vì vậy cũng là đưa cho co ấy password của bạn. Bạn và máy chủ đều nghĩ là đang kết nối đến nhau, nhưng thực tế thì cả 2 đang kết nối đến Mary. Sau đó cô ấy chỉ cần ngồi giữa, truyền dữ liệu ngược lại và tới lui giữa bạn và máy chủ (giải mã một bên với một khóa và mã hóa lại với cái khác dùng để truyền lại). Tất nhiên, cô ấy có thể đọc mọi thứ đi qua và sửa lại theo ý muốn.

SSH chống lại kiểu tấn công này theo 2 cách. Đầu tiên là xác nhận máy chủ. Nếu Mary không chặn bên trong máy chủ, cô ấy không thể mạo nhận, bởi vì cô ấy không có khóa riêng của máy chủ. Lưu ý rằng, để sự bảo vệ này hoạt động, trên thực tế máy khách phải kiểm tra khóa public mà máy chủ cung cấp dựa vào danh sách host mà nó biết, nếu không thì sẽ không có bảo đảm rằng máy chủ là thật. Nếu bạn kết nối lần đầu tiên đến một máy chủ mới và để cho SSH chấp nhận khóa của host, thực tế là bạn đang mở ra 1 kiểu tấn công “Người ở giữa”. Tuy nhiên, cứ cho rằng bạn không bị lừa vào lúc này, nhưng các kết nối trong tương lai đến máy chủ này chỉ an toàn cho đến khi khóa host server bị đánh cắp.

Khả năng bảo vệ SSH thứ 2 là qua phương thức người dùng xác thực. Phương pháp password hiển nhiên là dễ bị tấn công, nhưng khóa public và sự xác thực dựa trên máy chủ sẽ chống lại kiểu các tấn công MITM. Mary không thể phát hiện ra khóa session một cách dễ dàng thông qua việc trao đổi khóa, cô ấy phải thực hiện một cuộc tấn công chủ động để trao đổi riêng biệt với mỗi bên, thu về các khóa riêng biệt của riêng cô ấy với máy khách và máy chủ. Trong cả 2 giao thức SSH-1 và SSH-2, sự trao đổi khóa được thiết kế sao cho nếu cô ấy thực hiện điều này, thì sự nhận dạng session ở mỗi phía sẽ khác nhau. (Điều này không có ở giao thức SSH-1 cũ).

Nếu bạn không xác nhận tên/khóa của máy chủ tương ứng, Mary vẫn có thể thực hiện kiểu tấn công “người ở giữa”, thậm chí dù cô ấy không thể đăng nhập như chính bạn ở phía máy chủ. Cô ấy có thể đăng nhập vào tài khoản của cô ấy hoặc của người khác mà cô ấy đã lấy được. Với sự lanh lợi, cô ấy vẫn sẽ có thể đánh lừa bạn đủ lâu để phá hoại.


Công cụ cá nhân