Giao thức SFTP và FTPS

lời tựa

Chỉ một tuần trước, tôi đang viết một bài luận về chủ đề nêu trong tiêu đề và phải đối mặt với thực tế là không có nhiều thông tin giáo dục trên Internet. Chủ yếu là thông tin khô khan và hướng dẫn thiết lập. Vì vậy, tôi quyết định sửa lại một chút văn bản và đăng nó dưới dạng một bài viết.

FTP là gì

FTP (Giao thức truyền tệp) là một giao thức để truyền tệp qua mạng. Nó là một trong những giao thức Ethernet cơ bản. Xuất hiện vào năm 1971 và ban đầu hoạt động trong mạng DARPA. Hiện tại, giống như HTTP, việc truyền tệp dựa trên mô hình bao gồm một bộ giao thức TCP/IP (Giao thức điều khiển truyền/Giao thức Internet). Được xác định trong RFC 959.

Giao thức xác định như sau:

  • Việc kiểm tra lỗi sẽ được thực hiện như thế nào?
  • Phương pháp đóng gói dữ liệu (nếu sử dụng bao bì)
  • Làm thế nào để thiết bị gửi thông báo rằng nó đã hoàn thành tin nhắn?
  • Làm thế nào thiết bị nhận cho biết nó đã nhận được tin nhắn?

Giao tiếp giữa máy khách và máy chủ

Chúng ta hãy xem xét kỹ hơn các quá trình xảy ra trong quá trình hoạt động của FTP. Kết nối được khởi tạo bởi trình thông dịch giao thức của người dùng. Việc trao đổi được điều khiển thông qua kênh điều khiển theo tiêu chuẩn TELNET. Các lệnh FTP được tạo bởi trình thông dịch giao thức của người dùng và gửi đến máy chủ. Phản hồi của máy chủ cũng được gửi đến người dùng thông qua kênh điều khiển. Nói chung, người dùng có khả năng thiết lập liên hệ với trình thông dịch giao thức của máy chủ và bằng các phương tiện khác ngoài trình thông dịch của người dùng.

Tính năng chính của FTP là nó sử dụng kết nối kép. Một trong số chúng được sử dụng để gửi lệnh đến máy chủ và xuất hiện theo mặc định thông qua cổng TCP 21, cổng này có thể thay đổi được. Kết nối điều khiển tồn tại miễn là máy khách liên lạc với máy chủ. Kênh điều khiển phải được mở khi truyền dữ liệu giữa các máy. Nếu nó bị đóng, việc truyền dữ liệu sẽ dừng lại. Thông qua lần thứ hai, việc truyền dữ liệu trực tiếp xảy ra. Nó mở ra mỗi khi quá trình truyền tệp diễn ra giữa máy khách và máy chủ. Nếu một số tệp được truyền đồng thời, mỗi tệp sẽ mở kênh truyền riêng.

FTP có thể hoạt động ở chế độ chủ động hoặc thụ động, việc lựa chọn chế độ nào sẽ quyết định cách thiết lập kết nối. Ở chế độ hoạt động, máy khách tạo kết nối điều khiển TCP với máy chủ và gửi địa chỉ IP của nó cũng như số cổng máy khách tùy ý đến máy chủ, sau đó đợi máy chủ bắt đầu kết nối TCP với địa chỉ và số cổng này. Trong trường hợp máy khách nằm sau tường lửa và không thể chấp nhận kết nối TCP đến, có thể sử dụng chế độ thụ động. Ở chế độ này, máy khách sử dụng luồng điều khiển để gửi lệnh PASV đến máy chủ, sau đó nhận từ máy chủ địa chỉ IP và số cổng của nó, sau đó máy khách sử dụng để mở luồng dữ liệu từ cổng tùy ý của nó.

Có thể dữ liệu sẽ được chuyển sang máy thứ ba. Trong trường hợp này, người dùng tổ chức một kênh điều khiển với hai máy chủ và tổ chức kênh dữ liệu trực tiếp giữa chúng. Các lệnh điều khiển được truyền qua người dùng và dữ liệu được truyền trực tiếp giữa các máy chủ.

Khi truyền dữ liệu qua mạng, có thể sử dụng bốn cách biểu diễn dữ liệu:

  • ASCII - được sử dụng cho văn bản. Dữ liệu, nếu cần, được chuyển đổi từ biểu diễn ký tự trên máy chủ gửi sang "ASCII tám bit" trước khi truyền và (một lần nữa, nếu cần) thành biểu diễn ký tự trên máy chủ nhận. Đặc biệt, các ký tự dòng mới được thay đổi. Do đó, chế độ này không phù hợp với các tệp không chỉ chứa văn bản thuần túy.
  • Chế độ nhị phân - thiết bị gửi gửi từng byte tệp theo byte và người nhận lưu trữ luồng byte khi nhận. Hỗ trợ cho chế độ này đã được khuyến nghị cho tất cả các triển khai FTP.
  • EBCDIC - được sử dụng để chuyển văn bản thuần túy giữa các máy chủ trong mã hóa EBCDIC. Mặt khác, chế độ này tương tự như chế độ ASCII.
  • Chế độ cục bộ - cho phép hai máy tính có cài đặt giống hệt nhau gửi dữ liệu ở định dạng riêng mà không cần chuyển đổi sang ASCII.

Việc truyền dữ liệu có thể được thực hiện ở bất kỳ chế độ nào trong ba chế độ:

  • Chế độ luồng - dữ liệu được gửi dưới dạng luồng liên tục, giải phóng FTP khỏi việc thực hiện bất kỳ quá trình xử lý nào. Thay vào đó, mọi quá trình xử lý đều được thực hiện bởi TCP. Chỉ báo cuối tập tin không cần thiết ngoại trừ việc phân tách dữ liệu thành các bản ghi.
  • Chế độ khối - FTP chia dữ liệu thành nhiều khối (khối tiêu đề, số byte, trường dữ liệu) và sau đó truyền chúng tới TCP.
  • Chế độ nén – dữ liệu được nén bằng một thuật toán duy nhất (thường bằng cách mã hóa độ dài lần chạy).

Máy chủ FTP là máy chủ cung cấp khả năng sử dụng Giao thức truyền tệp. Nó có một số tính năng nhất định để phân biệt với các máy chủ web thông thường:

  • Yêu cầu xác thực người dùng
  • Tất cả các hoạt động được thực hiện trong phiên hiện tại
  • Khả năng thực hiện các hành động khác nhau với hệ thống tập tin
  • Một kênh riêng biệt được sử dụng cho mỗi kết nối

Máy khách FTP là một chương trình cho phép bạn kết nối với máy chủ từ xa thông qua FTP và cũng thực hiện các hành động cần thiết trên đó với các thành phần của hệ thống tệp. Máy khách cũng có thể là một trình duyệt, trong thanh địa chỉ mà bạn phải nhập địa chỉ là đường dẫn đến một thư mục hoặc tệp cụ thể trên máy chủ từ xa, theo sơ đồ khối URL chung:

ftp://user:pass@address:port/directory/file

Tuy nhiên, việc sử dụng trình duyệt web trong ngữ cảnh này sẽ chỉ cho phép bạn xem hoặc tải xuống các tệp quan tâm. Để tận dụng tối đa tất cả các ưu điểm của FTP, bạn nên sử dụng phần mềm chuyên dụng làm máy khách.

Xác thực FTP sử dụng sơ đồ tên người dùng/mật khẩu để cấp quyền truy cập. Tên người dùng được gửi đến máy chủ bằng lệnh USER và mật khẩu được gửi bằng lệnh PASS. Nếu thông tin do khách hàng cung cấp được máy chủ chấp nhận thì máy chủ sẽ gửi lời mời đến khách hàng và phiên bắt đầu. Người dùng có thể, nếu máy chủ hỗ trợ tính năng này, đăng nhập mà không cần cung cấp thông tin xác thực nhưng máy chủ chỉ có thể cấp quyền truy cập hạn chế cho những phiên như vậy.

Máy chủ cung cấp dịch vụ FTP có thể cung cấp quyền truy cập FTP ẩn danh. Người dùng thường đăng nhập bằng tên người dùng "ẩn danh" (có thể phân biệt chữ hoa chữ thường trên một số máy chủ FTP). Mặc dù người dùng thường được yêu cầu cung cấp địa chỉ email thay vì mật khẩu nhưng thực tế không có xác minh nào được thực hiện. Nhiều máy chủ FTP cung cấp các bản cập nhật phần mềm hỗ trợ truy cập ẩn danh.

Sơ đồ giao thức

Sự tương tác giữa máy khách và máy chủ trong quá trình kết nối FTP có thể được hiển thị như sau:

Giao thức SFTP và FTPS

FTP an toàn

FTP ban đầu không nhằm mục đích bảo mật vì nó được dùng để liên lạc giữa nhiều cơ quan và cơ quan quân sự. Nhưng với sự phát triển và lan rộng của Internet, nguy cơ truy cập trái phép đã tăng lên gấp nhiều lần. Cần phải bảo vệ máy chủ khỏi nhiều kiểu tấn công khác nhau. Vào tháng 1999 năm 2577, các tác giả của RFC XNUMX đã tóm tắt các lỗ hổng vào danh sách các vấn đề sau:

  • Các cuộc tấn công ẩn (tấn công nảy)
  • Tấn công giả mạo
  • Tấn công bạo lực
  • Bắt gói, đánh hơi
  • Cướp cảng

FTP thông thường không có khả năng truyền dữ liệu ở dạng mã hóa, do đó tên người dùng, mật khẩu, lệnh và thông tin khác có thể bị kẻ tấn công chặn một cách dễ dàng và dễ dàng. Giải pháp thông thường cho vấn đề này là sử dụng các phiên bản "an toàn", được bảo vệ bằng TLS của giao thức dễ bị tấn công (FTPS) hoặc một giao thức khác, an toàn hơn, chẳng hạn như SFTP/SCP, được cung cấp cùng với hầu hết các triển khai giao thức Secure Shell.

FTPS

FTPS (FTP + SSL) là một phần mở rộng của giao thức truyền tệp tiêu chuẩn bổ sung thêm chức năng cơ bản của nó là tạo các phiên được mã hóa bằng giao thức SSL (Lớp cổng bảo mật). Ngày nay, khả năng bảo vệ được cung cấp bởi TLS tương tự tiên tiến hơn (Bảo mật lớp vận chuyển).

SSL

Giao thức SSL được Netscape Communications đề xuất vào năm 1996 để đảm bảo tính bảo mật và quyền riêng tư của các kết nối Internet. Giao thức này hỗ trợ xác thực máy khách và máy chủ, độc lập với ứng dụng và minh bạch với các giao thức HTTP, FTP và Telnet.

Giao thức bắt tay SSL bao gồm hai giai đoạn: xác thực máy chủ và xác thực ứng dụng khách tùy chọn. Ở giai đoạn đầu tiên, máy chủ phản hồi yêu cầu của khách hàng bằng cách gửi các tham số mã hóa và chứng chỉ của nó. Sau đó, máy khách tạo khóa chính, mã hóa nó bằng khóa chung của máy chủ và gửi nó đến máy chủ. Máy chủ giải mã khóa chính bằng khóa riêng của nó và tự xác thực với máy khách bằng cách trả về một tin nhắn được xác thực bằng khóa chính của máy khách.

Dữ liệu tiếp theo được mã hóa và xác thực bằng các khóa lấy từ khóa chính này. Trong bước thứ hai, là tùy chọn, máy chủ sẽ gửi yêu cầu đến máy khách và máy khách sẽ tự xác thực với máy chủ bằng cách trả lại yêu cầu bằng chữ ký số của chính nó và chứng chỉ khóa chung.

SSL hỗ trợ nhiều thuật toán mã hóa khác nhau. Trong quá trình thiết lập liên lạc, hệ thống mật mã khóa công khai RSA được sử dụng. Sau khi trao đổi khóa, nhiều mật mã khác nhau được sử dụng: RC2, RC4, IDEA, DES và TripleDES. MD5 cũng được sử dụng - một thuật toán để tạo bản tóm tắt thông báo. Cú pháp cho chứng chỉ khóa công khai được mô tả trong X.509.

Một trong những ưu điểm quan trọng của SSL là tính độc lập hoàn toàn với nền tảng phần mềm. Giao thức được phát triển dựa trên các nguyên tắc về tính di động và hệ tư tưởng xây dựng nó không phụ thuộc vào các ứng dụng mà nó được sử dụng. Ngoài ra, điều quan trọng nữa là các giao thức khác có thể được phủ lên trên giao thức SSL một cách minh bạch; hoặc để tăng thêm mức độ bảo vệ các luồng thông tin mục tiêu hoặc để điều chỉnh khả năng mã hóa của SSL cho một số nhiệm vụ được xác định rõ ràng khác.

Kết nối SSL

Giao thức SFTP và FTPS

Kênh bảo mật do SSL cung cấp có ba thuộc tính chính:

  • Kênh này là riêng tư. Mã hóa được sử dụng cho tất cả các tin nhắn sau một cuộc đối thoại đơn giản nhằm xác định khóa bí mật.
  • Kênh được xác thực. Phía máy chủ của cuộc trò chuyện luôn được xác thực, trong khi phía máy khách được xác thực tùy chọn.
  • Kênh này đáng tin cậy. Việc truyền tải thông điệp bao gồm việc kiểm tra tính toàn vẹn (sử dụng MAC).

Đặc điểm của FTPS

Có hai cách triển khai FTPS, sử dụng các phương pháp cung cấp bảo mật khác nhau:

  • Phương pháp ngầm liên quan đến việc sử dụng giao thức SSL tiêu chuẩn để thiết lập phiên trước khi gửi dữ liệu, do đó, điều này sẽ phá vỡ khả năng tương thích với máy khách và máy chủ FTP thông thường. Để tương thích ngược với các máy khách không hỗ trợ FTPS, cổng TCP 990 được sử dụng để kết nối điều khiển và cổng 989 được sử dụng để truyền dữ liệu. Cổng này giữ lại cổng 21 tiêu chuẩn cho giao thức FTP. Phương pháp này được coi là lỗi thời.
  • Explicit thuận tiện hơn nhiều vì nó sử dụng các lệnh FTP tiêu chuẩn nhưng mã hóa dữ liệu khi phản hồi, điều này cho phép bạn sử dụng cùng một kết nối điều khiển cho cả FTP và FTPS. Máy khách phải yêu cầu rõ ràng việc truyền dữ liệu an toàn từ máy chủ và sau đó phê duyệt phương thức mã hóa. Nếu máy khách không yêu cầu truyền an toàn, máy chủ FTPS có quyền duy trì hoặc đóng kết nối không an toàn. Cơ chế đàm phán xác thực và bảo mật dữ liệu đã được thêm vào trong RFC 2228, bao gồm lệnh FTP AUTH mới. Mặc dù tiêu chuẩn này không xác định rõ ràng các cơ chế bảo mật nhưng nó chỉ rõ rằng một kết nối an toàn phải được khởi tạo bởi máy khách bằng thuật toán được mô tả ở trên. Nếu máy chủ không hỗ trợ kết nối an toàn thì phải trả về mã lỗi 504. Máy khách FTPS có thể lấy thông tin về các giao thức bảo mật được máy chủ hỗ trợ bằng lệnh FEAT, tuy nhiên, máy chủ không bắt buộc phải tiết lộ mức độ bảo mật của nó hỗ trợ. Các lệnh FTPS phổ biến nhất là AUTH TLS và AUTH SSL, tương ứng cung cấp bảo mật TLS và SSL.

SFTP

SFTP (Giao thức truyền tệp an toàn) là giao thức truyền tệp lớp ứng dụng chạy trên kênh bảo mật. Đừng nhầm lẫn với (Giao thức truyền tệp đơn giản), có cùng chữ viết tắt. Nếu FTPS chỉ đơn giản là một phần mở rộng của FTP thì SFTP là một giao thức riêng biệt và không liên quan, sử dụng SSH (Secure Shell) làm cơ sở.

Secure Shell

Giao thức được phát triển bởi một trong các nhóm IETF có tên Secsh. Tài liệu làm việc cho giao thức SFTP mới chưa trở thành tiêu chuẩn chính thức nhưng bắt đầu được sử dụng tích cực để phát triển ứng dụng. Sau đó, sáu phiên bản của giao thức đã được phát hành. Tuy nhiên, việc tăng dần chức năng trong đó đã dẫn đến thực tế là vào ngày 14 tháng 2006 năm XNUMX, người ta đã quyết định ngừng phát triển giao thức do đã hoàn thành nhiệm vụ chính của dự án (phát triển SSH) và thiếu có đủ trình độ chuyên môn để chuyển sang phát triển giao thức hệ thống tệp từ xa chính thức .

SSH là một giao thức mạng cho phép điều khiển hệ điều hành từ xa và tạo đường hầm cho các kết nối TCP (ví dụ: để truyền tệp). Có chức năng tương tự như các giao thức Telnet và rlogin, nhưng không giống như chúng, nó mã hóa tất cả lưu lượng truy cập, bao gồm cả mật khẩu được truyền đi. SSH cho phép lựa chọn các thuật toán mã hóa khác nhau. Máy khách SSH và máy chủ SSH có sẵn cho hầu hết các hệ điều hành mạng.

SSH cho phép bạn chuyển hầu hết mọi giao thức mạng khác một cách an toàn trong môi trường không an toàn. Do đó, bạn không chỉ có thể làm việc từ xa trên máy tính của mình thông qua shell lệnh mà còn có thể truyền luồng âm thanh hoặc video (ví dụ: từ webcam) qua kênh được mã hóa. SSH cũng có thể sử dụng tính năng nén dữ liệu được truyền để mã hóa tiếp theo, điều này thuận tiện, chẳng hạn như để khởi chạy máy khách X WindowSystem từ xa.

Phiên bản đầu tiên của giao thức, SSH-1, được phát triển vào năm 1995 bởi nhà nghiên cứu Tatu Ulönen từ Đại học Công nghệ Helsinki (Phần Lan). SSH-1 được viết để cung cấp sự riêng tư cao hơn các giao thức rlogin, telnet và rsh. Năm 1996, một phiên bản giao thức an toàn hơn, SSH-2, đã được phát triển, phiên bản này không tương thích với SSH-1. Giao thức này thậm chí còn trở nên phổ biến hơn và đến năm 2000, nó đã có khoảng hai triệu người dùng. Hiện nay, thuật ngữ “SSH” thường có nghĩa là SSH-2, bởi vì Phiên bản đầu tiên của giao thức hiện nay thực tế không được sử dụng do những thiếu sót đáng kể. Năm 2006, giao thức này đã được nhóm làm việc IETF phê duyệt là tiêu chuẩn Internet.

Có hai cách triển khai SSH phổ biến: thương mại riêng tư và nguồn mở miễn phí. Việc triển khai miễn phí được gọi là OpenSSH. Đến năm 2006, 80% máy tính trên Internet đã sử dụng OpenSSH. Việc triển khai độc quyền được phát triển bởi SSH Communications Security, một công ty con thuộc sở hữu hoàn toàn của Tectia Corporation và miễn phí cho mục đích sử dụng phi thương mại. Những triển khai này chứa gần như cùng một bộ lệnh.

Giao thức SSH-2, không giống như giao thức telnet, có khả năng chống lại các cuộc tấn công nghe lén lưu lượng truy cập (“đánh hơi”), nhưng không chống lại các cuộc tấn công trung gian. Giao thức SSH-2 cũng có khả năng chống lại các cuộc tấn công chiếm quyền điều khiển phiên vì không thể tham gia hoặc chiếm quyền điều khiển một phiên đã được thiết lập sẵn.

Để ngăn chặn các cuộc tấn công trung gian khi kết nối với máy chủ mà máy khách chưa biết khóa, phần mềm máy khách sẽ hiển thị cho người dùng một “dấu vân tay chính”. Bạn nên kiểm tra cẩn thận “ảnh chụp nhanh khóa” được hiển thị bởi phần mềm máy khách với ảnh chụp nhanh khóa máy chủ, tốt nhất nên lấy qua các kênh liên lạc đáng tin cậy hoặc trực tiếp.

Hỗ trợ SSH có sẵn trên tất cả các hệ thống giống UNIX và hầu hết đều có máy khách và máy chủ ssh làm tiện ích tiêu chuẩn. Có nhiều triển khai máy khách SSH cho các hệ điều hành không phải UNIX. Giao thức này đã trở nên phổ biến rộng rãi sau sự phát triển rộng rãi của các máy phân tích lưu lượng và các phương pháp làm gián đoạn hoạt động của mạng cục bộ, như một giải pháp thay thế cho giao thức Telnet không an toàn để quản lý các nút quan trọng.

Giao tiếp bằng SSH

Để hoạt động thông qua SSH, bạn cần có máy chủ SSH và máy khách SSH. Máy chủ lắng nghe các kết nối từ máy khách và khi kết nối được thiết lập, máy chủ sẽ thực hiện xác thực, sau đó nó bắt đầu phục vụ máy khách. Máy khách được sử dụng để đăng nhập vào một máy từ xa và thực hiện các lệnh.

Giao thức SFTP và FTPS

So sánh với FTPS

Điều chính giúp phân biệt SFTP với FTP và FTPS tiêu chuẩn là SFTP mã hóa hoàn toàn tất cả các lệnh, tên người dùng, mật khẩu và thông tin bí mật khác.

Cả giao thức FTPS và SFTP đều sử dụng kết hợp các thuật toán bất đối xứng (RSA, DSA), thuật toán đối xứng (DES/3DES, AES, Twhofish, v.v.), cũng như thuật toán trao đổi khóa. Để xác thực, FTPS (hay chính xác hơn là SSL/TLS qua FTP) sử dụng chứng chỉ X.509, trong khi SFTP (giao thức SSH) sử dụng khóa SSH.

Chứng chỉ X.509 bao gồm khóa chung và một số thông tin về chứng chỉ của chủ sở hữu. Mặt khác, thông tin này cho phép xác minh tính toàn vẹn của chứng chỉ, tính xác thực và chủ sở hữu của chứng chỉ. Chứng chỉ X.509 có khóa riêng tương ứng, thường được lưu trữ riêng biệt với chứng chỉ vì lý do bảo mật.

Khóa SSH chỉ chứa khóa chung (khóa riêng tương ứng được lưu trữ riêng). Nó không chứa bất kỳ thông tin nào về chủ sở hữu của chìa khóa. Một số triển khai SSH sử dụng chứng chỉ X.509 để xác thực nhưng thực tế chúng không xác minh toàn bộ chuỗi chứng chỉ—chỉ sử dụng khóa chung (điều này khiến việc xác thực đó không hoàn chỉnh).

Kết luận

Giao thức FTP chắc chắn vẫn đóng một vai trò quan trọng trong việc lưu trữ và phân phối thông tin trên mạng dù đã có tuổi đời đáng nể. Nó là một giao thức thuận tiện, đa chức năng và được tiêu chuẩn hóa. Nhiều kho lưu trữ tệp đã được xây dựng trên cơ sở của nó, nếu không có công tác kỹ thuật nào sẽ không hiệu quả. Ngoài ra, nó rất dễ cài đặt và các chương trình máy chủ và máy khách tồn tại cho hầu hết các nền tảng hiện tại và không hiện tại.

Đổi lại, các phiên bản được bảo vệ của nó giải quyết vấn đề bảo mật dữ liệu được lưu trữ và truyền đi trong thế giới hiện đại. Cả hai giao thức mới đều có ưu và nhược điểm và có vai trò hơi khác nhau. Ở những khu vực cần lưu trữ tệp, nên sử dụng FTPS, đặc biệt nếu FTP cổ điển đã được sử dụng ở đó trước đó. SFTP ít phổ biến hơn do không tương thích với giao thức cũ, nhưng nó an toàn hơn và có nhiều chức năng hơn vì nó là một phần của hệ thống quản lý từ xa.

Danh sách các nguồn

Nguồn: www.habr.com

Thêm một lời nhận xét