原创 花十一一 2023-07-24 09:21 北京
SSH(Secure Shell)协议是一种用于远程登录和安全网络传输的协议,默认端口是22
SSH(Secure Shell)协议是一种用于远程登录和安全网络传输的协议,默认端口是22,主要用于主机间的身份认证。SSH 协议支持多种身份验证方式,比如密码、公钥、证书等多种方式。当用户使用 SSH 连接到远程主机时,会先进行身份验证,以确保用户具有访问权限。如果身份验证成功,用户就可以在远程主机上执行命令或传输文件等。SSH 协议还提供了加密和完整性校验机制,可以确保数据在传输过程中不被篡改或窃听。
SSH协议分析
SSH 协议为了确保数据在传输过程中的安全性和完整性,使用了加密和消息认证码(MAC)两种技术。在 SSH 协议中,每个数据包都会使用 Cipher 加密算法进行加密,以防止数据被窃听或篡改。每个数据包发送之前,会生成一个 MAC,用于验证数据包在传输过程中是否发生了修改或被篡改。SSH 协议支持多种 MAC 算法,常用的有 HMAC-SHA1、HMAC-SHA2 等。输入ssh -Q cipher获取客户端支持的加密算法列表。
(8)Client: New Keys。这里说明两端的加密通道已经建立。接下来就到了SSH认证流程。传输的数据都会用会话密钥进行加密了。
应用场景
1、SSH登录
执行命令"ssh root@172.17.10.52"进行ssh连接,还没有输入密码时,客户端和服务端在进行密钥交换(New keys)后会产生两次数据传输。
2、SSH爆破这里我们使用hydra进行ssh暴力破解账密,分析产生的流量。
attacker: 172.17.10.43victim: 172.17.10.52首先使用hydra加载不包含真实密码的字典进行ssh爆破,抓取期间存在流量。
3、SSH隧道
SSH 隧道(SSH Tunnel)是通过SSH协议建立的加密通道,原理是利用 SSH 协议的端口转发功能,将本地端口与远程服务器端口进行绑定,从而实现数据的加密传输。SSH 隧道分为本地转发和远程转发两种方式:本地转发:将本地计算机上的应用程序请求发送到远程服务器上,并在远程服务器上执行相应的操作后将结果返回给本地计算机。远程转发:将远程服务器上的应用程序请求发送到本地计算机上,并在本地计算机上执行相应的操作后将结果返回给远程服务器。通过使用 SSH 隧道,可以在不安全的网络环境中实现安全的数据传输,同时也可以绕过某些网络限制和防火墙策略。创建ssh隧道的常用参数如下:-C:压缩传输,提高传输速度
-f :将ssh传输转入后台执行,不占用当前的shell
-N:建立静默连接(建立了连接,但是看不到具体的会话)
-g 允许远程主机连接本地用于转发的端口。
-L:本地端口转发
-R:远程端口转发
-D:动态转发(socks代理)
-p:指定ssh端口这里搭建下本地端口转发的环境,并分析传输的数据包。
attacker: 172.17.10.43victim: 172.17.10.52首先使用python在受害主机上搭建http服务,开启 8888端口
# python -m SimpleHTTPServer 8888
ssh -g -L 2222:172.17.10.52:8888 -fN root@172.17.10.52
工具使用packetStrider是一款针对SSH的数据包取证工具。通过对ssh协议的消息内容、方向、数据包大小、延迟时间等维度进行解析,利用统计分析和滑动窗口对解析后的数据包进行特征提取和匹配,来分析会话启动、按键、人类/脚本行为、密码长度、客户端证书的使用情况等信息,并得出对应的分析报告。项目地址:https://github.com/thisisfalcon/packetStrider使用方法:
# python packetStrider-ssh.py -f /root/44.pcap -k -p -o out
参考链接
https://goteleport.com/blog/ssh-handshake-explained/https://github.com/benjeems/packetStrider