发布日期:2025-12-23 浏览次数:

安全外壳协议 ( SSH ) 是最值得信赖的远程管理、自动化和在非信任网络上进行安全通信的协议之一。它通过加密网络流量并消除发送明文密码的需求来保护敏感操作。
SSH 身份验证的核心在于密钥对机制,它允许用户和机器安全地访问系统,而无需依赖传统的基于密码的登录。
这时,SSH密钥就派上了用场。SSH密钥对由存储在客户端计算机上的私钥和存储在服务器上的公钥组成。它们共同构成一个安全的握手过程,无需在网络上泄露任何敏感信息即可验证用户或系统的身份。由于其强大的安全优势,SSH密钥已成为服务器、应用程序和自动化工作流程中最广泛使用的安全身份验证机制之一。
但与密码或数字证书不同,SSH 密钥不会自然过期。一旦创建,密钥对即可无限期有效,即使用户角色发生变化、离开组织或系统已停用很久之后,密钥仍然有效。这一根本特性造成了企业安全中最持久、最危险的盲点之一。
被遗忘或孤立的密钥可能在不可见的情况下继续授予访问权限,这使得组织难以实施最小权限原则或维护适当的审计控制。研究反复表明,许多组织无法跟踪所有活跃的 SSH 密钥,使其基础设施面临滥用、内部威胁和潜在安全漏洞的风险。
在本文,我们将深入探讨为什么永不过期的 SSH 密钥会造成隐藏的安全风险,以及组织如何有效地防止这些风险。
SSH密钥是SSH协议用于验证客户端身份和建立安全会话的加密凭证。每个SSH密钥对都包含一个公钥和一个私钥。
理解 SSH 密钥的一个简单方法是将其想象成一把挂锁和一把钥匙。
公钥就是一把挂锁。它并不敏感,您可以随意复制。您可以将这把挂锁添加到您想要访问的任何远程机器上的~/.ssh 文件夹中的 authorized_keys 文件中。挂锁添加后,该机器就知道应该信任任何能够打开它的人。
另一方面,私钥才是真正用来打开那把“挂锁”(公钥)的钥匙。这把钥匙由您保管,必须像真正的钥匙一样妥善保管。当您尝试连接到远程系统时,SSH 会检查您的私钥是否可以打开服务器上存储的“挂锁”(公钥)。如果可以,则会安全地授予访问权限,无需密码。
现在我们已经了解了 SSH 密钥是什么,让我们来看看它们在实践中是如何工作的,以便更好地了解它们可能带来的风险。
如您所知,基于 SSH 密钥的身份验证依赖于一对加密密钥,该密钥几乎总是在客户端系统上生成。传统上,私钥安全地存储在客户端计算机上,而相应的公钥则被复制到服务器并保存在 ~/.ssh/authorized_keys 文件中。
当客户端尝试建立连接时,SSH 服务器会检查传入的请求,并在授权密钥文件中查找匹配的公钥。如果找到匹配项,服务器会向客户端发送一个加密挑战。客户端使用其私钥对该挑战进行签名(无需传输私钥本身),并将签名后的响应发送回服务器。然后,服务器使用存储的公钥验证签名。
如果验证成功,客户端即可通过身份验证,而无需通过网络传输私钥或任何密码。所有这些操作均自动安全地完成,无需用户手动操作,也不会通过网络传输任何密码。
实际上,SSH密钥认证的工作方式类似于使用用户名和密码登录,但更加安全便捷。一旦你的公钥在远程系统上注册,你就可以无需输入凭据即可从本地计算机连接,并像坐在远程计算机上一样使用终端。这意味着你可以运行诸如ls、cd之类的命令或任何管理操作,所有操作都通过加密通道进行。
人们常常误以为这个加密通道是由你的私钥保护的。实际上,SSH 仅在身份验证期间使用你的非对称密钥对来验证身份并协商会话密钥。连接验证成功后,SSH 会切换到速度更快的对称会话密钥,并在会话的剩余时间内使用该对称密钥加密所有命令、文件和终端数据。
由于私钥始终保存在客户端设备中,并且能够抵御暴力破解攻击,因此 SSH 密钥认证被认为是目前最安全的远程访问认证机制之一。然而,这种安全性也伴随着一个常被忽视的重大缺陷。我们将在下一节中探讨这一缺陷。
虽然 SSH 密钥认证安全便捷,但也存在隐患。默认情况下,SSH 密钥不会自动过期。一旦公钥被添加到服务器上的 authorized_keys 文件中,除非手动删除,否则它将一直有效。这虽然简化了管理,但也带来了长期的安全隐患。不再需要的密钥,或者属于前员工或已停用的系统的密钥,仍然可以继续授予访问权限,而且往往难以察觉。
SSH 的设计初衷是提供强大的加密和可靠的身份验证,但它本身并不包含密钥过期、续订或自动有效性检查的内置机制。因此,企业经常会遇到SSH 密钥蔓延的问题,即密钥在服务器、账户和环境中不受控制地累积。本质上,密钥蔓延是指旧的、未使用的或孤立的密钥随着时间的推移不断堆积,从而形成难以追踪的隐藏访问点。
一项研究表明,57%的受访者认为管理SSH密钥既麻烦又困难。该研究指出,到2024年,随着人们意识的提高和最佳实践的改进,这一比例将降至27%,但密钥管理对许多组织而言仍然是一项重大挑战。这表明,尽管人们对这个问题有了更深入的了解,但密钥管理不善的风险依然存在。
未妥善管理的 SSH 密钥的后果包括:
持久访问
即使员工离职或岗位变更,密钥仍然有效。这使得前用户能够继续访问关键系统,一旦其个人电脑遭到入侵,就会造成严重的内部威胁或安全漏洞。这严重违反了最小权限原则。
已禁用或不活跃的帐户可能仍然在服务器上拥有有效的密钥,从而留下可能被攻击者利用的隐藏访问点。
当服务器被克隆、迁移或备份时,嵌入式 SSH 密钥通常会随之复制。这会在不同系统中创建同一密钥的多个副本,无意中扩大了访问权限并增加了风险。
随着时间的推移,密钥的创建者、所有者以及是否仍然需要等信息会变得模糊不清。如果没有完善的密钥清单,将密钥与其各自的所有者、系统或应用程序关联或映射几乎是不可能的,这使得事件响应、审计和访问权限审查变得极其困难。
五年前或十年前创建的密钥仍然会持续用于身份验证,不会中断。如果没有明确的轮换或撤销计划,这些长期处于休眠状态的密钥会显著增加安全漏洞、权限蔓延和未经授权访问的风险。
持久存在的密钥、过期密钥、重复密钥和未监控密钥的综合作用,导致组织内部存在大量隐蔽的攻击面。攻击者可以利用这些孤立或遗忘的密钥进行横向移动并提升权限。
如果缺乏妥善的密钥生命周期管理,这些未受管理的密钥可能会导致严重的安全、运营和合规性挑战。下一节我们将详细探讨这些风险,以了解为什么解决这些风险对您的组织至关重要。
长期有效的 SSH 密钥会带来多种风险,这些风险会随着时间的推移而悄然增长。其中一些主要风险包括:
永不过期的密钥实际上就成了一个永久后门。如果私钥因终端设备被攻破、Git 代码库被盗、备份文件泄露或员工旧设备泄露,攻击者就能不受限制地访问关键服务器和系统。
随着时间的推移,映射到特权账户(root、admin、服务账户)的密钥会不断累积,赋予账户远超实际所需的访问权限。员工角色会变动,项目会结束,服务会被弃用,但旧的密钥往往仍然处于激活状态。这违反了最小权限原则,而且通常难以察觉。
手动跟踪、分发、轮换和撤销成百上千个系统中的密钥既耗时又容易出错。如果没有集中式密钥管理,新员工入职将变得困难,因为难以确保及时、适当的访问权限;而离职时,遗忘的密钥也可能导致未关闭的访问权限。
发生安全事件时,响应人员面临着巨大的挑战。如果没有密钥使用时间戳、过期日期或集中式日志记录,就很难确定哪些密钥处于活动状态、谁在使用它们,以及哪些系统被访问过。这会阻碍取证分析,并延长补救工作。
NIST 800-53、CIS Controls、ISO 27001 和 SOX 等框架要求进行凭证轮换、访问审查和正确的身份绑定。永不过期的 SSH 密钥直接违反了这些要求,使组织面临合规性漏洞和监管处罚的风险。
CI/CD 流水线、定时任务和集成脚本等自动化工作流程通常依赖于 SSH 密钥。这些密钥很少经过审计、轮换或删除,使其成为网络内部横向移动攻击者的理想目标。由于许多组织仍然缺乏集中式密钥管理,并且依赖电子表格等手动流程,自动化工作流程中密钥被忽略或孤立的风险极高,导致关键系统面临被入侵的风险。
既然我们已经了解了这些风险,接下来让我们看看组织如何通过适当的 SSH 密钥生命周期管理来应对这些风险。
许多组织面临的困境并非源于 SSH 本身的脆弱性,而是因为 SSH 的部署、监控和管理方式存在漏洞,使得攻击者能够伪装成合法用户。为了应对这一风险,组织需要一套结构化的方法来管理 SSH 密钥的整个生命周期,从而降低风险暴露、强化问责机制并保持控制。一套完善的 SSH 密钥生命周期管理策略应包含以下内容:
集中式 SSH 密钥管理可确保一致的控制,降低运维复杂性,并防止密钥扩散。集中式 SSH 密钥管理平台/策略可提供以下优势:
审计与报告:合规性验证、取证准备和治理监督。
定期轮换可确保 SSH 密钥保持短期有效,定期重新生成,并在失效前使其失效。频繁轮换可降低密钥被盗的影响,并增强对密钥种类及其用途的可见性。
推荐的最佳实践:
与离开组织的用户、已停用的系统或疑似遭到入侵的系统关联的密钥必须立即撤销。
撤销程序包括:
现代环境不再使用静态密钥,而是转向按需生成的临时 SSH 密钥,这些密钥仅在短时间内有效,通常为几分钟或几小时。
福利包括:
拥有成熟安全计划的组织正在采用 SSH证书颁发机构来用短期 SSH 证书取代静态密钥。
福利包括:
管理 SSH 密钥固然重要,但强化服务器上的 SSH 配置同样至关重要。即使密钥管理机制完善,配置错误的 SSH 服务仍可能暴露关键系统。关键的运维强化措施包括:
首先要禁用直接 root 用户登录,因为允许 root 访问会绕过审计和问责机制,一旦凭据或密钥泄露,攻击者就能完全控制系统。相反,应该使用具有管理员权限的普通用户帐户,并通过 sudo 命令进行操作,这样可以确保所有操作都可追踪且经过授权。
另一项关键措施是将默认的 SSH 端口从 22/TCP 更改为其他端口。默认端口众所周知,经常成为自动化暴力破解攻击或端口扫描器的目标;将 SSH 迁移到非标准端口可以降低风险,但这应该作为其他安全措施的补充,而不是替代。
仅允许已知且受信任的网络访问 SSH。如果 SSH 暴露在公共互联网上,攻击者将有无数机会探测服务器、暴力破解凭据或利用漏洞,因此将访问限制在特定 IP 地址可以显著降低风险。
SSH 的 X11 和 TCP 转发等功能对于图形应用程序或流量隧道非常有用,但也可能被利用来访问客户端系统或重定向敏感数据。除非明确需要,否则禁用这些功能并将其限制为仅限受信任用户使用,可以最大限度地降低这种风险。
密码为空的账户提供了简单的访问入口,绕过了其他安全控制,因此必须阻止所有此类账户,并应强制执行强身份验证。
为了加强身份验证,应强制使用基于公钥的登录方式,用加密密钥取代密码。公钥身份验证更加安全,能够抵御暴力破解攻击,支持自动化工作流程,并可在保持强加密的同时实现无密码登录。
政策与监测
制定正式的 SSH 密钥管理策略可确保管理的一致性。该策略建议:
实施这些策略可确保 SSH 密钥在其整个生命周期内始终受到严格控制、可审计且安全,从而降低运营、安全和合规风险。
揽阁信息 · 值得您信赖的信息安全顾问!