Giao thức này hoạt động dựa trên mô hình client - server, trong đó có một máy chủ FTP FTP server và các máy khách FTP FTP clients.. Máy khách gửi yêu cầu đến máy chủ để sử dụng dịch vụ h
TỔNG QUAN GIAO THỨC FTP
Giới thiệu về giao thức FTP
FTP (viết tắt của File Transfer Protocol, dịch ra là “Giao thức truyền tập tin”) thường được dùng để trao đổi tập tin qua mạng sử dụng giao thức TCP/IP
Giao thức này hoạt động dựa trên mô hình client - server, trong đó có một máy chủ FTP (FTP server) và các máy khách FTP (FTP clients) Máy khách FTP thực hiện các yêu cầu truy cập, truyền tải hoặc quản lý tệp tin đến hoặc từ máy chủ FTP
FTP gốc không cung cấp bảo mật dữ liệu hoặc thông tin đăng nhập
Thông tin đăng nhập và dữ liệu truyền tải không được mã hóa mặc định
Tuy nhiên, có phiên bản cải tiến của FTP gọi là SFTP (SSH File Transfer
Protocol) hoặc FTPS (FTP over SSL/TLS) Vì giao thức FTP là một giao thức chuẩn công khai, cho nên bất cứ một công ty phần mềm nào, hay một lập trình viên nào cũng có thể tạo ra mô hình FTP client - server Hầu như bất cứ một nền tảng hệ điều hành máy tính nào cũng hỗ trợ giao thức FTP Điều này cho phép tất cả các máy tính kết nối với một mạng lưới có nền TCP/IP, xử lý tập tin trên một máy tính khác trên cùng một mạng lưới với mình, bất kể máy tính ấy dùng hệ điều hành nào nếu các máy tính đều cho phép sự truy cập của các máy tính khác dùng giao thức FTP FTP hỗ trợ quản lý người dùng và quyền truy cập thông qua cơ chế xác thực tên người dùng và mật khẩu Người quản trị có thể cấu hình máy chủ FTP để kiểm soát quyền truy cập của người dùng đến các thư mục và tệp tin
Mô hình Client - Server và kiến trúc xử lý
Trong mô hình Client - Server, có hai loại thành phần chính: máy khách (client) và máy chủ (server) Máy khách là một thiết bị hoặc chương trình máy tính mà người dùng sử dụng để truy cập và yêu cầu dịch vụ từ máy chủ Máy chủ là một thiết bị hoặc chương trình máy tính mà cung cấp dịch vụ hoặc tài nguyên cho máy khách
Mô hình Client-Server có tính phân tán, trong đó các máy khách và máy chủ có thể nằm ở các vị trí vật lý khác nhau và kết nối với nhau thông qua mạng Máy khách gửi yêu cầu đến máy chủ để sử dụng dịch vụ hoặc tài nguyên như truyền tải tệp tin, lấy dữ liệu từ cơ sở dữ liệu, hoặc thực hiện tính toán phức tạp Máy chủ nhận yêu cầu từ máy khách, xử lý yêu cầu và gửi lại kết quả hoặc dịch vụ tương ứng Như vậy quá trình trao đổi dữ liệu giữa client-server bao gồm:
- Truyền một yêu cầu từ chương trình client tới chương trình server
- Yêu cầu được server xử lý
- Truyền đáp ứng cho client
1.2.2 Mô hình kiến trúc xử lý trong giao thức FTP
Không giống như các ứng dụng khác chạy trên nền TCP, mô hình xử lý trong giao thức FTP không chỉ cần một kết nối TCP mà còn được thiết kế xung quanh 2 kênh logic trong quá trình giao tiếp giữa client FTP và server FTP là Control Channel và Data Channel:
- Control Channel: Đây là kết nối TCP logic chính được tạo ra khi phiên làm việc được thiết lập Nó được duy trì trong suốt phiên
9 làm việc và chỉ cho các thông tin điều khiển đi qua ví dụ như yêu cầu và phản hồi Nó không được sử dụng để gửi dữ liệu
- Data Channel: Mỗi khi dữ liệu được gửi từ server tới client hoặc ngược lại, một kết nối dữ liệu TCP riêng biệt được thiết lập giữa chúng Dữ liệu được truyền qua kết nối này Khi hoàn tất việc truyền dữ liệu, kết nối được hủy bỏ
Hình 1.1 Mô hình kênh truyền dữ liệu trong giao thức FTP
Sự phân chia thành 2 kênh riêng biệt này tạo ra sự linh động trong cách hoạt động của FTP nhưng nó cũng tạo ra sự phức tạp cho FTP
Do chức năng điều khiển và dữ liệu được truyền tải bằng cách sử dụng các kênh riêng biệt nên mô hình FTP chia phần mềm trên mỗi thiết bị thành 2 thành phần giao thức logic chịu trách nhiệm cho mỗi kênh:
- Thành phần protocol interpreter (PI): là thành phần quản lý kênh điều khiển, phát và nhận lệnh và trả lời
- Thành phần data transfer process (DTP): chịu trách nhiệm gửi và nhận dữ liệu giữa client và server
Ngoài hai thành phần trên, tiến trình bên phía người dùng còn có thành phần thứ ba là giao diện người dùng (user interface) dùng để tương tác với người dùng FTP, thành phần này không có ở phía server
Như vậy, có hai thành phần trong tiến trình bên phía server và ba thành phần trong tiến trình bên phía client Các thành phần này được nhắc đến trong các mô hình FTP bằng cái tên cụ thể, được sử dụng trong các tiêu chuẩn để mô tả chi tiết hoạt động của giao thức.
Mô hình hoạt động và các mã thông điệp đáp trả trong mô hình FTP Client – Server
1.3.1 Mô hình hoạt động Client-Server FTP Đăng nhập
Hình 1.2 Quá trình giao tiếp Client - Server trong phiên đăng nhập
Trao đổi dữ liệu giữa Client và Server
Hình 1.3 Quá trình trao đổi file giữa client và server
1.3.2 Các mã thông điệp đáp trả trong mô hình FTP Client – Server
Trong mô hình FTP Client-Server, có một loạt các mã thông điệp đáp trả mà máy chủ FTP có thể gửi lại cho máy khách FTP sau khi nhận các yêu cầu từ máy khách Dưới đây là một số mã thông điệp đáp trả phổ biến trong FTP:
- Đăng nhập: o Client: Client sẽ gửi thông tin đăng nhập username và password lên server:
PASS o Server: 120: dịch vụ đã sẵn sàng trong nnn phút
220: dịch vụ đã sẵn sàng cho người dùng mới
○ Nếu thông tin đăng nhập sai:
530: thông tin đăng nhập sai, bạn cần kiểm tra username và password
○ Client: Tải filename.txt từ server
○ Server: 220: dịch vụ đã sẵn sàng cho người dùng mới
250: kết nối tới thư mục server thành công
227: bước vào chế độ thụ động
150: file trong trạng thái ổn, kết nối đang được mở
○ Client: Gửi filename.txt lên server
○ Server: 250: Kết nối tới thư mục server thành công
227: bước vào chế độ thụ động
150: File trong trạng thái ổn, kết nối đang được mở
- Thông điệp và phản hồi khác: Ngoài các mã trạng thái, máy chủ FTP cũng có thể gửi các thông điệp và phản hồi khác như thông tin về trạng thái kết nối, yêu cầu bổ sung, hoặc thông tin chi tiết về lỗi nếu có Mã trạng thái và các thông điệp đáp trả trong FTP rất quan trọng để máy khách FTP hiểu được trạng
13 thái của yêu cầu và thực hiện các hành động tiếp theo một cách phù hợp Điều này giúp cải thiện trải nghiệm người dùng và đảm bảo rằng việc truyền tải dữ liệu được thực hiện một cách hiệu quả và đáng tin cậy
AN TOÀN ỨNG DỤNG FTP SERVER
Nghiên cứu kỹ thuật khai thác giao thức FTP
Giao thức FTP tập trung vào việc cung cấp cho máy khách và máy chủ một tốc độ chấp nhận được khi truyền tệp, nhưng nó không bao gồm các tính năng liên quan đến bảo mật Nhược điểm của giao thức này là thông tin được truyền đi dưới dạng văn bản thuần túy, bao gồm thông tin xác thực truy cập khi máy khách xác thực trên máy chủ
2.1.1 Module ftplib Để nghiên cứu và khai thác lỗ hổng trong giao thức FTP, người nghiên cứu hoặc kẻ tấn công sẽ sử dụng mô-đun ftplib của python Đây là một mô-đun của python cho phép kết nối với máy chủ FTP và thực thi các câu lệnh trên máy chủ này Nó được thiết kế để tạo các máy khách FTP với một vài dòng mã và một vài thao tác đơn giản của máy chủ FTP Để biết thêm về mô-đun ftplib, có thể tham khảo tài liệu chính thức tại trang web: https://docs.python.org/3.10/library/ftplib.html
Mô-đun ftplib trong Python cung cấp các công cụ để tương tác với các máy chủ FTP, cho phép người lập trình kết nối với máy chủ FTP, xác thực bằng tên người dùng và mật khẩu, và thực hiện các hoạt động như tải lên, tải xuống, xóa, đổi tên và quản lý thư mục
2.1.1.1 Các phương thức tiêu biểu của mô-đun ftplib
FTP(host='', user='', passwd='', acct='', timeout=None)
Phương thức này được sử dụng để khởi tạo một kết nối FTP đến máy chủ đã chỉ định Bạn có thể chỉ định tên người dùng, mật khẩu và tài khoản
15 tùy chọn Nếu không có đối số nào được cung cấp, kết nối sẽ được thiết lập đến localhost login(user='', passwd='', acct='')
Phương thức này được sử dụng để đăng nhập vào máy chủ FTP với tên người dùng, mật khẩu và tài khoản tùy chọn Nếu bạn đã khởi tạo đối tượng FTP mà không cung cấp các thông tin xác thực, bạn cũng có thể sử dụng phương thức này để đăng nhập sau khi đã kết nối cwd(path)
Phương thức này thay đổi thư mục làm việc hiện tại trên máy chủ FTP đến đường dẫn đã chỉ định Điều này cho phép bạn di chuyển qua lại giữa các thư mục trên máy chủ FTP retrbinary(command, callback, blocksize92, rest=None)
Phương thức này được sử dụng để tải tệp tin từ máy chủ FTP dưới dạng nhị phân và gọi hàm callback cho mỗi khối dữ liệu Điều này thường được sử dụng khi bạn muốn tải xuống các tệp tin lớn từ máy chủ FTP storbinary(command, file, blocksize92, callback=None, rest=None)
Phương thức này được sử dụng để tải lên tệp tin từ máy tính cục bộ lên máy chủ FTP dưới dạng nhị phân Bạn cung cấp một đối tượng tệp tin mở trong chế độ đọc nhị phân và phương thức sẽ lấy dữ liệu từ tệp tin này và gửi đến máy chủ FTP
Phương thức này được sử dụng để xóa một tệp tin từ máy chủ FTP
Bạn chỉ cần cung cấp tên của tệp tin cần xóa và phương thức này sẽ thực hiện việc xóa đó từ máy chủ FTP
2.1.1.2 Truyền file trên server FTP sử dụng module ftplib
Có thể sử dụng module ftplib để tải file tiến hành tải file từ máy client lên server ftp
1 2 3 4 5 6 7 8 9 10 def upload_file_to_ftp_server(ftp_server_ip, local_file_path, remote_file_path): try: ftp = FTP(ftp_server_ip) ftp.login('user', '1') with open(local_file_path, 'rb') as file: ftp.storbinary(f'STOR {remote_file_path}', file) ftp.quit() print("File uploaded successfully!") except Exception as e: print(f"Error: {e}")
Hàm upload_file_to_ftp_server() được định nghĩa nhận ba tham số: ftp_server_ip là địa chỉ IP của máy chủ FTP, local_file_path là đường dẫn đến tệp tin trên máy tính cục bộ và remote_file_path là đường dẫn đến tệp tin trên máy chủ FTP Hàm này sẽ thực hiện kết nối đến máy chủ FTP, thực hiện đăng nhập bằng tài khoản client, tạo một handle file cho file trên máy client từ local_file_path sau đó sử dụng phương thức ftp.storbinary(f'STOR {remote_file_path}', file) để tiến hành truyền file từ máy cục bộ vào đường dẫn đích ở remote_file_path (là đường dẫn file đích
17 trên server FTP), tải xong thì đóng kết nối FTP server Toàn bộ quá trình trên được đặt trong try-exception để xử lý những ngoại lệ nếu có (file không tồn tại, đường dẫn sai, không kết nối được đến máy chủ ftp, …)
Mô-đun ftplib trong Python là một công cụ mạnh mẽ cho việc tương tác với máy chủ FTP từ các chương trình Python Bằng cách sử dụng các phương thức có sẵn trong module này, người lập trình có thể dễ dàng thực hiện các hoạt động như tải lên, tải xuống và quản lý các tệp tin trên máy chủ FTP một cách hiệu quả
Giao thức truyền tệp ẩn danh là một phương pháp cho phép người dùng truy cập các tệp công khai từ một máy chủ hoặc trang lưu trữ từ xa mà không yêu cầu họ xác thực với máy chủ hoặc trang lưu trữ Người dùng sử dụng chương trình FTP hoặc giao diện lệnh FTP và nhập “anonymous” làm user ID của họ Mật khẩu có thể được cung cấp bởi máy chủ FTP hoặc người dùng có thể cung cấp mật khẩu của riêng họ (thông thường, tài khoản và mật khẩu đều là “anonymous”)
FTP ẩn danh cho phép truy cập công khai các thông tin có nghĩa là bất kỳ ai đăng nhập vào máy chủ đều có thể đọc được thông tin đó Vì vậy, kẻ tấn công có thể truy cập vào máy chủ hoặc trang lưu trữ có thể download các file và upload các file có chứa mã độc nhằm đánh lừa người dùng tải file đó về máy tính của mình
Kẻ tấn công có thể sử dụng module ftplib để viết một script đơn giản kiểm tra xem liệu server FTP có cho phép người dùng ẩn danh đăng nhập hay không, bằng cách đơn giản là sử dụng lệnh ftplib.FTP(host, user="anonymous") để đăng nhập thử vào server
Vấn đề bảo mật của giao thức FTP
Giao thức FTP mặc dù đã tồn tại từ lâu và được sử dụng rộng rãi, nhưng vẫn đối diện với nhiều vấn đề cần được giải quyết Một trong những thách thức chính là bảo mật thông tin FTP không mã hóa dữ liệu khi truyền qua mạng, khiến cho thông tin dễ bị đánh cắp hoặc thay đổi bởi bên thứ ba Ngoài ra, việc quản lý phiên kết nối trong FTP cũng là một bài toán phức tạp, đặc biệt khi cần xử lý các vấn đề như việc mở nhiều kết nối đồng thời Hiệu suất của FTP cũng có thể bị ảnh hưởng bởi nhiều yếu tố như độ trễ mạng, dung lượng băng thông và số lượng người dùng đồng thời Đối mặt với những thách thức này, cần có sự đổi mới và phát triển để nâng cao hiệu suất và bảo mật của giao thức FTP
FTPS (File Transfer Protocol over SSL/TLS) là giao thức được mở rộng từ giao thức FTP FTPS giữ lại tất cả các chức năng được tìm thấy trong FTP nhưng được hỗ trợ thêm các giao thức mã hóa như: Transport Layer Security (TLS) và Secure Sockets Layer (SSL) Nhờ SSL và TLS, FTPS có thể mã hóa thông tin được truyền qua nó
SSL/TLS (Secure Sockets Layer/Transport Layer Security) là một bộ các giao thức hoặc quy tắc giao tiếp được sử dụng để đảm bảo tính bảo mật trong việc truyền tải dữ liệu qua mạng internet SSL là phiên bản ban đầu đã được phát triển thành TLS, với TLS là giao thức chuẩn được sử dụng rộng rãi hơn ngày nay
Chứng chỉ kỹ thuật số SSL/TLS có khả năng mã hóa dữ liệu được truyền giữa máy khách FTPS và máy chủ FTPS bằng cách mã hóa khóa công khai, sử dụng hai khóa khác nhau để mã hóa và giải mã một thông điệp PKI (Public Key Infrastructure) cung cấp phương thức để một bên thiết lập nhận dạng của một bên khác bằng cách sử dụng các chứng chỉ nếu cả hai đều tin tưởng bên thứ ba - được gọi là cơ quan cấp chứng chỉ
Cơ quan cấp chứng chỉ xác minh chứng chỉ và xác thực cả hai bên trước khi giao tiếp bắt đầu Có hai cách để có thể có được chứng chỉ SSL/TLS là từ Certificate Authority (CA) - Cơ quan cấp chứng chỉ hoặc có thể tạo thủ công thông qua OpenSSL
2.2.1.2 Quá trình hoạt động của FTPS
FTPS client và FTPS server sẽ bắt đầu thiết lập kết nối bằng quá trình bắt tay (handshake) Quá trình này bắt đầu khi FTPS server sẽ gửi một chứng chỉ SSL/TLS (SSL/TLS certificate) để xác minh danh tính, sau đó
FTP client sẽ kiểm tra chứng chỉ này để đảm bảo rằng máy chủ là đáng tin cậy và không bị giả mạo Khi đã xác thực thành công, cả hai sẽ bắt đầu quá trình thiết lập kết nối an toàn sử dụng SSL/TLS bao gồm việc thiết lập các thông số bảo mật như cơ chế mã hóa và chứng thực Bước tiếp theo client cần cung cấp thông tin để có thể xác thực người dùng như: tên người dùng và mật khẩu Sau khi xác thực người dùng thành công, các lệnh FTP (ví dụ: LIST, RETR, STOR) và dữ liệu kể cả thông tin xác thực được truyền giữa client và server sẽ được mã hóa và bảo vệ bởi SSL/TLS Client và Server có thể đóng kết nối an toàn bằng cách chấm dứt phiên kết nối SSL/TLS
2.2.1.3 Các phương pháp bảo mật của FTPS
Implicit FTPS hay FTPS ẩn cung cấp kết nối hoàn toàn an toàn cho cả kênh điều khiển và kênh dữ liệu Khi sử dụng FTPS ẩn, kết nối SSL ngay lập tức được thiết lập qua cổng 990 trước khi đăng nhập hoặc truyền dữ liệu Nếu người nhận không tuân thủ yêu cầu bảo mật, máy chủ sẽ ngay lập tức ngắt kết nối
FTPS ẩn thực sự nghiêm ngặt khi toàn bộ phiên của kênh điều khiển và kênh dữ liệu được mã hóa mọi lúc do đó làm cho FTPS ẩn rất tốn tài nguyên khi cả dữ liệu không nhạy cảm cũng được mã hóa và làm mất đi tính linh hoạt
Explicit FTPS hay FTPS rõ ràng được thiết lập khi client yêu cầu một cách rõ ràng khi kết nối với FTP server Đây là một yêu cầu tùy chọn, nếu client không yêu cầu bảo mật, FTP server có thể cho tiếp tục ở chế độ không an toàn hoặc từ chối hoặc giới hạn kết nối Ban đầu, FTP client và
FTP server giao tiếp qua giao thức FTP không bảo mật trên cổng tiêu chuẩn (thường là cổng 21) Sau khi đăng nhập thành công, client có thể gửi một lệnh "AUTH TLS" (hoặc "AUTH SSL") đến phía server để yêu cầu thiết lập kết nối bảo mật SSL/TLS Nếu server hỗ trợ và chấp nhận yêu cầu này, quá trình kết nối sẽ chuyển sang sử dụng SSL/TLS để mã hóa dữ liệu
SFTP là viết tắt của SSH File Transfer Protocol hoặc Secure File Transfer Protocol SFTP truyền tệp bằng giao thức mạng Secure Shell
(SSH) - giao thức mạng được sử dụng để thiết lập kết nối an toàn giữa hai thiết bị Giao thức SSH được sử dụng rộng rãi để đảm bảo an ninh trong việc truyền tải dữ liệu và thực hiện các hoạt động từ xa trên các hệ thống Để thiết lập kết nối SSH, đầu tiên client cần xác minh server bằng cách gửi yêu cầu thông qua cổng 22 Nếu client là lần đầu tiên truy cập vào server thì client phải xác minh thủ công khóa công khai của server, ngược lại không phải là lần đầu tiên truy cập server thì danh tính của server đã được ghi lại trước đó và có thể được xác minh mà không cần sự tham gia của client Sau đó, client và server thống nhất về khóa phiên sẽ được sử dụng để mã hóa và giải mã dữ liệu Cuối cùng server sẽ xác thực client bằng cách sử dụng khóa đã được thống nhất
SFTP sử dụng các lệnh tương tự như giao thức truyền tệp (FTP) tiêu chuẩn và hầu hết các lệnh SFTP tương tự hoặc giống hệt các lệnh trong shell Linux Để thiết lập kết nối với máy chủ, SFTP chỉ cần được kết nối với SSH qua cổng 22 SFTP cũng cần một SFTP client và server, SFTP client cho phép người dùng kết nối với máy chủ và lưu các tệp tin trên máy chủ đó Khi người dùng tương tác với một tệp tin, yêu cầu sẽ được gửi đến
26 máy chủ Sau đó, dữ liệu này được gửi đến thiết bị yêu cầu SFTP đảm bảo rằng tất cả các tệp tin được mã hóa trước khi truyền đi Người dùng sử dụng khóa SSH để xác thực, mỗi cặp khóa SSH bao gồm hai phần: khóa công khai (public key) và khóa riêng tư (private key), họ sẽ sử dụng cặp khóa SSH này để tự động hóa quyền truy cập vào máy chủ SFTP Nếu người dùng đăng nhập vào máy chủ SFTP, máy chủ sẽ yêu cầu người dùng cung cấp khóa riêng tư (private key) tương ứng với khóa công khai (public key) đã lưu trữ trên máy chủ Nếu khóa riêng tư (private key) khớp với khóa công khai (public key) trên máy chủ, người dùng được xác thực thành công và có quyền truy cập vào máy chủ SFTP SFTP hoạt động trên luồng dữ liệu SSH để thiết lập kết nối an toàn Các thuật toán mã hóa giúp việc dữ liệu một cách an toàn đến máy chủ, giữ cho các tệp tin không thể đọc được trong suốt quá trình này
SFTP được sử dụng để thực hiện các mục đích sau đây:
- SFTP giúp đáp ứng các tiêu chuẩn dữ liệu cho các quy định nghiêm ngặt về việc bảo vệ thông tin cá nhân và dữ liệu
- Việc sử dụng mã hóa trong SFTP giúp bảo vệ dữ liệu khỏi bị đọc hoặc can thiệp trong quá trình truyền tải
- Dữ liệu có thể được gửi bằng cách sử dụng đồng thời giao thức
SFTP và công nghệ VPN để gia tăng tính bảo mật cho dữ liệu bằng cách mã hóa dữ liệu trên cả hai mặt trước khi truyền đi qua mạng công cộng
Các ưu điểm của SFTP:
TRIỂN KHAI XÂY DỰNG VÀ THỰC HIỆN
Dịch vụ FTP
3.1.1.1 Cài đặt dịch vụ vsftpd
Dịch vụ vsftpd là một tiện ích mã nguồn mở được sử dụng trên Ubuntu để xây dựng một FTP Server
Hình 3.1 Cài đặt công cụ vsftpd
Sau đó sẽ bắt đầu công cụ này và cho phép tự động bật khi khởi động máy
Hình 3.2 Khởi động dịch vụ vsftpd
3.1.1.2 Cấu hình cho phép truy cập với người dùng ẩn danh
Tiến hành chỉnh sửa file /etc/vsftpd.conf
Hình 3.3 Chỉnh sửa file /etc/vsftpd.conf
Ta sẽ sửa chế độ “anonymous_enable” thành YES, để cho phép người dùng ẩn danh truy cập
Với chế độ “local_enable”, nếu là “YES” thì sẽ cho phép người dùng có tài khoản được phép đăng nhập, còn là “NO” thì sẽ chỉ được phép sử dụng tài khoản ẩn danh
Hình 3.4 Thêm các dòng cấu hình trong file /etc/vsftpd.conf
- “anon_root”: là cài đặt thư mục gốc cho người dùng anonymous
- “no_anon_password”: là dừng việc thông báo nhập password đối với người dùng anonymous
- “hide_ids”: sẽ ẩn đi chủ sở hữu và nhóm, hiển thị mặc định sẽ là ftp:ftp
- “pasv_min_port” và “pasv_max_port”: giới hạn phạm vi cổng cho chế độ FTP bị động
Sau đó tiến hành tạo một thư mục dành cho người dùng ẩn danh và cấp quyền cho thư mục đó
Hình 3.5 Tạo thư mục gốc cho người dùng ẩn danh và cấp quyền
3.1.1.3 Tạo user và cấu hình tường lửa
Tạo một user để sử dụng dịch vụ FTP
Bật tường lửa và mở các cổng
Hình 3.7 Bật tường lửa và mở các cổng
Hình 3.8 Khởi động lại dịch vụ vsftpd
3.1.1.4 Đăng nhập server FTP Đăng nhập với chế độ người dùng ẩn danh
Hình 3.9 Đăng nhập với người dùng ẩn danh Đăng nhập với người dùng User
Hình 3.10 Đăng nhập với người dùng user
Thực hiện bắt gói tin FTP bằng Wireshark
Hình 3.11 Bắt gói tin FTP bằng wireshark trong phiên đăng nhập
Hình 3.12 Nội dung gói tin FTP trong phiên đăng nhập
Xem nội dung gói tin FTP, có thể thấy dữ liệu được truyền đi ở dạng bản rõ và không được mã hoá
Với người dùng ẩn danh
Hình 3.13 Người dùng ẩn danh tải tệp lên
Nguyên nhân người dùng ẩn danh không có quyền được tải tệp lên là vì trong cài đặt là không cho phép người dùng ẩn danh có quyền tải tệp lên
Hình 3.14 Người dùng user tải tệp lên
Tiến hành bắt gói tin FTP bằng Wireshark
Hình 3.15 Bắt gói tin FTP bằng Wireshark
Xem nội dung gói tin FTP-DATA, có thể thấy dữ liệu được truyền đi cũng ở dạng bản rõ và không được mã hoá
Hình 3.16 Nội dung gói tin FTP-DATA
Với người dùng ẩn danh
Hình 3.17 Người dùng ẩn danh tải xuống tệp tin
Hình 3.18 Người dùng user tải xuống tệp tin
Với người dùng ẩn danh
Hình 3.19 Người dùng ẩn danh xóa tệp tin
Nguyên nhân thao tác xóa thất bại: vì người dùng ẩn danh không có quyền xóa tệp tin
Hình 3.20 Người dùng user xóa tệp tin
3.1.2 Khai thác một số lỗ hổng trên dịch vụ FTP
3.1.2.1 Kiểm tra chế độ người dùng ẩn danh
Script này sẽ kiểm tra host mình nhập vào có đang cho phép người dùng ẩn danh truy cập hay không
Hình 3.21 Kết quả kiểm tra chế độ người dùng ẩn danh
Hình 3.22 Kết quả brute force
Script này sẽ dùng cách vét cạn tất cả các trường hợp username kết hợp với password lấy từ các file đầu vào để kiểm tra đăng nhập
Nếu trong danh sách có username và password đăng nhập thành công thì sẽ thông báo ra màn hình.
Triển khai FTPS và SFTP
Công cụ OpenSSL là một thư viện mã nguồn mở cung cấp các công cụ và thư viện mã hóa, giải mã và xác thực các giao thức mạng như SSL (Secure Sockets Layer) và TLS (Transport Layer
Security).OpenSSL còn cung cấp các công cụ liên quan đến quản lý chứng chỉ số và các chức năng mã hóa dữ liệu
Thực hiện cài đặt OpenSSL trên Ubuntu: sudo apt install openssl
Sau khi cài đặt thành công OpenSSL trên Ubuntu, câu lệnh sau được sử dụng để thực hiện sinh khóa và certificate: sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- openssl req: yêu cầu cấp chứng chỉ của openssl
- -x509: tạo một chứng chỉ tự kí từ một khóa riêng đã tạo
- -nodes: tạo private key mà không cần mật khẩu
- -days 3650: chứng chỉ có hạn trong 3650 ngày
- -newkey rsa:2048: tạo khóa RSA với độ dài là 2048 bit
- -keyout /etc/ssl/private/vsftpd.pem: Nơi đặt khóa riêng
- -out /etc/ssl/private/vsftpd.pem: Nơi đặt certificate
Thực hiện cấu hình Server FTPS trong file /etc/vsftpd.conf:
Hình 3.23 Thiết lập thêm lớp SSL trên vsftpd qua file vsftpd.conf
- rsa_cert_file: nơi đặt certificate
- rsa_private_key_file: nơi đặt khóa riêng
- ssl_enable: mở chức năng ssl trong vsftpd
- allow_anon_ssl: cho phép người dùng ẩn danh sử dụng giao thức mã hóa SSL/TLS
- force_local_data_ssl: bắt buộc các dữ liệu truyền qua từ người dùng đăng nhập không phải ẩn danh phải được mã hóa bằng SSL/TLS
- force_local_logins_ssl: bắt buộc các phiên đăng nhập phải sử dụng mã hóa bằng SSL/TLS
- ssl_tlsv1: sử dụng giao thức TLSv1
- ssl_sslv2: sử dụng giao thức SSLv2
- ssl_sslv3: sử dụng giao thức SSLv3
- require_ssl_reuse: yêu cầu tái sử dụng phiên làm việc
- ssl_ciphers=HIGH: sử dụng mức độ cao nhất của thuật toán mã hóa
Sau khi lưu file cấu hình server, thực hiện khởi động lại máy chủ bằng: systemctl restart vsftpd.service
FileZilla Client là chương trình mã nguồn mở dành cho người dùng FTP Chương trình hỗ trợ cả giao thức FTP và giao thức FTPS
(FTP trên SSL/TLS) Để cài đặt FileZilla Client trên Windows: https://download.filezillaproject.org/client/FileZilla_3.67.0_win64_ sponsored2-setup.exe Để cài đặt FileZilla Client trên Ubuntu: sudo apt install filezilla
Sau khi cài đặt ứng dụng, thực hiện đăng nhập:
Hình 3.24 Giao diện FileZilla Client trên Kali Linux
Lưu ý: Client sẽ nhận thông báo về certificate được gửi từ Server như ở dưới, người dùng thực hiện xác nhận chứng chỉ
Hình 3.25 Thông tin chứng chỉ SSL trên FileZilla Client
Tiến hành bắt gói tin FTPS bằng Wireshark:
Hình 3.26 Bắt thông tin trong phiên đăng nhập
Hình 3.27 Bắt thông tin trong phiên gửi file
Hình 3.28 Bắt thông tin trong phiên tải file
Giao thức truyền tệp SFTP hoặc SSH là phương pháp truyền dữ liệu an toàn giữa hai máy tính và hơn thế nữa FTP của nó chạy trên giao thức SSH và tận dụng tính năng bảo mật cũng như hỗ trợ đầy đủ tính năng xác thực của nó
Ngày nay, nên sử dụng SFTP thay vì giao thức FTP hoặc FTPS cũ SFTP được bảo mật theo mặc định vì đó là cách SSH hoạt động
Từ quan điểm bảo mật, SFTP cũng bảo vệ bạn khỏi bị dò mật khẩu và tấn công trung gian
Hình 3.29 Cài đặt dịch vụ OpenSSH
Hình 3.30 Tạo group và user, thêm user vào group để sử dụng dịch vụ SFTP
Chúng ta sẽ quản lý quyền truy cập của người dùng thông qua group, những người trong group sẽ chỉ có quyền sử dụng dịch vụ SFTP và không thể sử dụng SSH được tới máy chủ
Hình 3.31 Tạo và định cấu hình thư mục chroot cho người dùng
Với cấu hình trên, ta có thể thấy:
- Thư mục /home/user là thư mục chính mặc định
- Người dùng user không thể ghi vào thư mục /home/user, nhưng có thể đọc bên trong thư mục đó
- Người dùng user có thể tải tệp lên máy chủ SFTP tại thư mục /home/user/data
Hình 3.32 Chỉnh sửa cấu hình ssh /etc/ssh/sshd_config
- Match Group sftpgroup: Xác định các cài đặt trên sẽ chỉ áp dụng cho các thành viên trong nhóm "sftpgroup"
- ChrootDirectory %h: Khi user đăng nhập, họ sẽ bị hạn chế trong phạm vi của thư mục home của họ (%h) và không thể di chuyển ra ngoài
- X11Forwarding no: Vô hiệu hóa chuyển tiếp X11 (hiển thị GUI) từ máy chủ đến máy khách Điều này được thực hiện để tăng cường bảo mật bằng cách ngăn chặn việc truyền tiếp dữ liệu GUI qua kết nối SSH
- AllowTCPForwarding no: Vô hiệu hóa chuyển tiếp TCP từ máy chủ đến máy khách, điều này ngăn chặn user trong nhóm
"sftpgroup" khỏi việc chuyển tiếp các kết nối TCP từ máy chủ đến máy khách, giúp tăng cường bảo mật
- ForceCommand internal-sftp: Đặt lệnh mà user trong nhóm
"sftpgroup" sẽ bị buộc sử dụng khi họ kết nối vào máy chủ là
"internal-sftp" Điều này đảm bảo rằng họ chỉ có thể sử dụng dịch vụ SFTP và không thể thực hiện các lệnh khác thông qua SSH
Hình 3.33 Khởi động lại dịch vụ SSH
Hình 3.34 Đăng nhập với user trong group
Hình 3.35 Bắt gói tin trong phiên đăng nhập
Hình 3.36 Thực hiện tương tác với các tập tin
Hình 3.37 Bắt gói tin trong các phiên tương tác với tập tin
User trong group chỉ được cấp quyền sử dụng dịch vụ SFTP mà không thể sử dụng dịch vụ SSH:
Hình 3.38 Thực hiện SSH bằng tài khoản user trong group.