无论我们是网络工程师,还是运维工程师,我们应该都听过这么一个知识:FTP通信是不安全的,而SFTP通信是安全的!其原因就是FTP在传输数据(包括命令、密码、文件内容)时完全不加密,就像用明信片写信,所有信息在网络上都是“裸奔”的。而SFTP建立在加密的SSH连接之上,所有通信在传输前都被加密,就像把明信片放进了只有你和收件人才能打开的保险箱。本文就跟大家分享FTP与SFTP的区别,以及通过whireshark抓包工具进行分析FTP与SFTP两种传输协议,让大家真正搞懂为何FTP不安全,而SFTP是安全的!
3.FTP及SFTP客户端连接工具FileZilla Client
FTP - 文件传输协议
FTP是一个诞生于1971年的古老协议,设计之初完全没有考虑安全性。它有两个主要问题:
明文传输:所有信息,包括:
双端口连接模式:
SFTP - SSH文件传输协议
SFTP并不是FTP的安全升级版,而是一个完全不同的协议。它是作为SSH协议的一部分设计的。
基于SSH:SFTP运行在一条已经建立好的、加密的SSH连接之上。SSH默认端口是22。
单一加密通道:所有SFTP的命令、应答和文件数据都通过这一条加密的SSH连接进行传输。
强加密和认证:它继承了SSH的所有安全特性,包括:
以下基于whireshark抓包工具抓对应的FTP包及SFTP进行分析。1.打开whireshark抓包工具,选择对应网卡,即可开始抓包,如下图所示:2.FileZilla Client客户端终端中,输入FTP相关信息后,进行连接,点开FTP服务器相关文件目录,下载文件等一系列操作,如下所示:
这里清晰地看到 FTP 的整个会话过程:
USER username:明文用户名。
PASS password:明文密码(这是 FTP 极不安全的铁证)。
PORT 或 PASV:建立数据连接的命令。
RETR filename.txt:下载文件的命令。
STOR filename.txt:上传文件的命令。
在 Wireshark 的显示过滤器栏中,输入ftp-data 并回车。会看到一系列数据包,协议显示为 FTP-DATA。这些包里面就承载着实际的文件内容。右键单击任意一个 FTP-DATA 数据包 -> Follow -> TCP Stream。
此时,Wireshark 会打开一个新窗口,重组并显示整个 TCP 连接中传输的原始数据。
如果传输的是 文本文件(如 .txt, .html, .csv, 源代码等),你将直接看到文件的完整可读内容。
如果传输的是 二进制文件(如 .zip, .exe, .jpg 等),你会看到一堆乱码,但这正是该文件的二进制内容。你可以将其另存为原始文件。此时也可以得到对应的完整内容。
1.跟抓FTP包过程一样,做相关操作后停止抓包后。经tcp.port == 22 过滤,得到如下数据包:
整个过程可以分解为以下几个关键阶段:
阶段一:TCP 三次握手
首先是标准的 TCP 三次握手([SYN], [SYN, ACK], [ACK]),建立基础连接。
阶段二:SSH 协议版本协商
客户端和服务器交换它们支持的 SSH 协议版本。数据包标识为 SSH: Client Protocol 和 SSH: Server Protocol。
阶段三:密钥交换和算法协商(最关键的阶段)
这是建立安全通道的核心。数据包标识为 SSH: Key Exchange Init。
密钥交换算法:双方协商用于安全生成共享密钥的算法(如 diffie-hellman-group14-sha1)。
加密算法:协商后续通信使用的对称加密算法(如 aes128-ctr, aes256-gcm)。
MAC 算法:协商用于数据完整性校验的算法。
压缩算法:协商是否启用压缩。
在此阶段,所有通信仍然是明文的,因为加密通道尚未建立。你可以在这个阶段的包中看到协商的算法列表。
阶段四:用户认证
数据包标识为 SSH: Client Authentication Request。
在此之后,所有通信都开始使用阶段三协商好的密钥进行加密。
你无法看到认证方式(是密码还是公钥)的具体内容,更看不到密码本身。
服务器返回 SSH: Authentication Success 或失败信息,但这些结果也是加密的。
阶段五:SFTP 会话(完全加密)
在 SSH 连接建立后,客户端会启动一个 SFTP 子系统。你会看到:
这就是 SFTP 通信发生的地方! 所有 SFTP 命令(如 OPEN, READ, WRITE, STAT)和传输的文件数据,都作为 “Channel Data” 在加密的 SSH 连接中传输。
在任何一个 SSH: Encrypted packet 或 SSH: Channel Data 数据包上右键,选择 Follow -> TCP Stream。
你会发现,与 FTP 分析时不同,这里显示的全是乱码。
为什么是乱码?
因为这些数据已经被 SSH 协议使用强大的加密算法(如 AES)加密了。没有服务器的私钥或会话密钥,Wireshark 或任何第三方都无法解密这些内容。
通过抓包分析,大家应该都知道为什么FTP不安全,而SFTP是安全的原因了吧。以下给大家整理FTP及SFTP区别:
总结对比表
| | |
|---|
| 安全性 | 不安全 | 安全 |
| 加密 | 无 | 有 |
| 认证信息 | | |
| 数据传输 | | |
| 完整性 | | |
| 端口 | | |
| Wireshark分析 | 可直接看到所有内容 | 只能看到加密的乱码 |
阅读原文:原文链接
该文章在 2025/10/29 18:51:27 编辑过