一条关于"安全研究人员购得6TB中转站日志、内含多家企业真实SSH密钥与云凭证"的消息在圈子里传得很快。很多人第一反应是"又有企业要倒霉了",但作为常年跟基础设施安全打交道的人,我看到这条消息时心里想的却是另一件事:这类数据为什么会出现在中转站?中转站日志里出现SSH密钥和云凭证,到底意味着什么?
先说结论:这不是一次简单的数据泄露,而是把很多企业内部安全管理的底裤直接扯了下来。SSH密钥和云凭证不是普通数据,它们是进入企业核心系统的钥匙。一把钥匙出现在不该出现的地方,说明这把钥匙的整个生命周期早就失控了。这篇文章我就从安全从业者的视角,把这件事拆开揉碎聊清楚:这类数据是怎么流出去的、会造成什么后果、企业该怎么自查、以及从根上怎么堵住漏洞。
这篇文章适合三类人看:一是企业的运维和安全负责人,需要评估自己有没有类似风险;二是研发和DevOps工程师,看看自己的日常操作有没有在无意间"扔钥匙";三是刚入行安全领域的朋友,这是一份很典型的真实案例教材。
1. 一条6TB的日志,撕开了基础设施安全的遮羞布
1.1 中转站日志到底是什么
先把这个概念说清楚。中转站对外行来说可能有点陌生,但在网络安全领域,它指的是那些临时存储和转发数据的服务器或服务节点。攻击者在渗透过程中,经常利用这类节点做数据中转——把从目标系统里窃取的数据先传到中转站,再从那里转移到攻击者自己的存储里。这么做的目的很简单:切断受害者和攻击者之间的直接联系,让溯源难度加大。
但这次有意思的点在于,被曝光的不是某个受害企业的数据库,而是中转站本身的日志。这意味着什么?意味着攻击者的基础设施也被"抄了家"。安全研究人员拿到的不只是某一家的数据,而是很多企业数据的"集散记录"。这就好比警察端掉了一个赃物中转仓库,仓库里的账本上密密麻麻记着哪些东西来自哪些人家。
中转站日志里通常包含几类信息:传输记录、连接来源IP、目标地址、传输文件的元数据、偶尔还会有操作这台中转站的运维痕迹。而在这6TB的日志里,安全研究人员发现了更致命的东西——企业真实的SSH密钥和云服务凭证。
1.2 SSH密钥和云凭证为什么会出现在日志里
SSH密钥是运维人员登录服务器的凭证,云凭证是调用云服务API的身份凭证。这两样东西出现在中转站日志里,大致有几种可能:
第一种可能是攻击者在渗透过程中,从受害企业的服务器或代码仓库里窃取了这些凭证文件,然后把它们当作"战利品"集中存放在中转站上,准备日后复用。这种情况下,中转站日志会记录这些文件的传输过程,而文件内容本身可能被独立存储。
第二种可能是企业的应用或脚本在运行时,把包含密钥或凭证的信息输出到了日志里,而这些日志又被攻击者拖走并转存到中转站。这种情况听起来更离谱,但在真实世界里非常常见——我见过太多应用把数据库连接串、甚至是私钥内容直接打印在日志里的案例。
第三种可能是企业内部的某些自动化流程,本身就在调用中转站类的服务做数据同步,而同步的数据里恰好包含了未加密的配置文件和凭证。
无论哪种可能,核心问题只有一个:这些企业的SSH密钥和云凭证,以一种随时可以被读取和复用的形态,离开了企业的安全边界。这才是最要命的。
1.3 这批数据的真正危险之处
看到"6TB"这个数字,很多人可能觉得量大是主要问题。但以我做安全审计的经验来看,数量从来不是关键,关键是数据的精确度和可用度。
被盗的SSH密钥意味着什么?它意味着攻击者不需要破解密码,不需要绕过堡垒机,只要找到这个密钥对应的服务器IP,就可以直接以合法用户的身份登录进去。云凭证更严重,尤其是AccessKey这类长期凭证,一旦泄露,攻击者就可以通过API调用云服务,创建虚拟机、读取对象存储里的数据、篡改DNS解析、甚至克隆整个云环境。
小米、蔚来这类企业被点名,是因为它们作为知名企业,资产规模大、业务系统多,一旦凭证被滥用,损失是不可估量的。但说实话,这类事件没有企业大小之分——任何一家企业,只要把密钥和管理员凭证弄丢了,都等于把家门钥匙交给了陌生人,区别只是家里值钱东西多少而已。
还有一个被很多人忽略的问题:中转站日志是6TB,说明攻击者运营这个基础设施已经有相当一段时间了,积累了大量企业的敏感信息。这意味着这些企业的凭证泄露可能不是最近才发生的,而是已经存在了几个月甚至更久。时间越长,风险越高,因为在这段时间里,攻击者完全可能已经在利用这些密钥做某些"低噪音"的操作——比如定期读取某个数据库、偶尔登录一两台服务器查看内部结构。这些操作不会触发告警,但日积月累,受害企业的核心资产早就被摸了个透。
2. 密钥和凭证泄露的常见路径:这不是巧合,而是系统性失误
2.1 最经典的坑:密钥被提交进代码仓库
我跟很多企业的安全团队聊过,大家公认的头号泄露源头就是代码仓库。开发人员为了方便部署,把.env文件、配置目录甚至直接硬编码的密钥提交到了Git仓库里。这操作我见得实在太多了。
Git有个特性让这个问题变得尤其棘手:就算你在后续的提交里删掉了包含密钥的文件,历史记录里依然保留着它。任何人只要有权访问这个仓库,甚至仓库被设为公开,就可以在提交历史里翻出那些密钥。很多企业处理这个问题的流程是"发现了就删,删完就以为安全了",但完全没用——只要密钥曾经进过版本库,就应该默认它已经泄露,必须立即轮换。
更隐蔽的路径是通过第三方组件。现在的项目大量依赖开源软件包,而有些恶意或失陷的依赖包会在安装时读取环境变量、读取本地配置文件,把里面的密钥信息悄悄发送到指定服务器。这类供应链攻击在近几年增长非常快。你什么都没做错,就因为拉了一个依赖包,本机的凭证就飞出去了。
2.2 CI/CD 流水线日志里的"隐私裸奔"
相比代码仓库,CI/CD流水线日志的泄露问题在我看来说得更少,但发生概率更高。
典型的场景是这样的:流水线在构建过程中需要连接服务器或推送镜像,这时候就需要用到SSH私钥或云凭证。很多团队的流水线配置里,把凭证作为环境变量传入构建环境,然后在执行脚本时把这些变量打印到了日志里。更夸张的,有人在脚本里写了类似cat ~/.ssh/id_rsa的调试命令,部署完没删,于是每次构建都会把私钥内容打到日志面板上。
还有一种常见场景是构建产物里带出了凭证。Docker镜像就是个重灾区。构建镜像时执行了ADD命令把配置目录复制进去,或者设置了包含密钥的环境变量,结果镜像被推到公共仓库或者企业内部共享仓库,任何能拉取镜像的人都能从镜像分层里提取出密钥文件。
中转站日志里出现企业真实的SSH密钥和云凭证,从时间线来推断,很可能就是某个企业的构建日志被攻击者拖走后集中汇总的。毕竟流水线日志里不仅包含凭证,还包含完整的代码路径、服务器地址、内网网段等大量敏感元数据,这对攻击者来说等于是白送的地图。
2.3 文件传输与协作工具的"顺手牵羊"
还有一条特别容易忽略的路径,就是内部员工使用不安全的文件传输工具。
很多企业内部的运维人员习惯用各种网盘、云笔记、在线文档来记录服务器信息、粘贴配置文件内容。这些工具方便是方便,但权限管理往往稀松。一个员工离职后,他的账号如果没有被及时禁用,那么他曾经分享过的含密钥文档就依然可以被访问。更有甚者,一些云笔记工具的默认分享链接是"知道链接就能看",一旦链接被搜索引擎收录或者被爬虫抓取,内容就直接裸奔到公网了。
还有一类是堡垒机和跳板机的操作日志。一些企业的堡垒机配置不当,会把运维人员的操作录屏、输入的命令、甚至通过SFTP传输的文件内容记录下来,但这些日志又缺少严格的访问控制。内网里一台机器被攻破后,攻击者第一件事就是找这类运维日志——从中可以提取出大量的密码、密钥和敏感路径。所以,围观的这些数据源,实际上为攻击者提供了另一条稳定的凭证获取通道。
2.4 员工终端:最薄弱的"最后一公里"
说到员工终端的泄露,很多人会想到钓鱼和木马,但更普遍的其实是备份和同步习惯导致的。
我处理过一个真实的案例:某员工为了在家办公方便,把公司的SSH密钥打包成了zip文件,上传到了个人的网盘。结果网盘账号密码和其他平台撞库,整个压缩包就被脱走了。我们事后追溯时发现,那把私钥对应的服务器上没有任何异常登录记录——这更让人后怕,说明攻击者拿到钥匙后一直在潜伏,等着合适的时机。
另外,开发者的本地环境也常常是脏乱差的重灾区。~/.ssh目录里堆了几十把历史遗留的私钥,不知道对应哪台服务器;~/.aws/credentials里存着好几个账号的AccessKey,有些是好几年前的老账号,权限设置还贼大,管理员权限。这类"僵尸凭证"一旦泄露,排查起来非常痛苦,因为你根本不知道哪把钥匙对应哪个门。
3. 拿到静默凭证之后攻击者会做什么:从一次登录到全面沦陷
3.1 第一阶段:身份验证与资产测绘
很多人对凭证泄露的危害没有具象认知,总觉得"就算拿到密码,不是还有防火墙吗""服务器不是有白名单吗"。我一向很反感这种侥幸心理。
攻击者拿到一把企业真实的SSH密钥之后,首先做的事情一定是资产测绘。他们会拿着公网IP库去批量匹配,或者用这把密钥尝试登录企业暴露在公网上的所有服务器。这个过程完全自动化进行,速度极快。一旦发现某台服务器可以登录,攻击者不会急着搞破坏,而是会先确认这台服务器的角色——是应用服务器、数据库服务器、还是管理跳板机。
云凭证的操作逻辑也类似。攻击者拿到AccessKey之后,会先调用GetCallerIdentity之类的接口确认这个凭证的身份和权限范围,然后列举这个账号下的所有资源:ECS实例、RDS数据库、OSS存储桶、RAM用户、安全组规则。这一步做完,你的云上资产布局在攻击者眼里已经是透明的了。
3.2 第二阶段:横向移动与权限提升
确认资产之后,接下来就是横向移动。这一步最考验企业内网的纵深防御能力,但现实中绝大多数企业内部网络都是"薄饼"结构——服务器之间没有严格隔离,一台机器沦陷后,攻击者可以从这台机器跳到任何相邻机器。
在这个过程中,SSH密钥的价值会进一步放大。很多人有一个坏习惯:为了防止忘记密码,在一台服务器上配置了到所有其他服务器的免密登录。这把"万能钥匙"一旦被攻击者拿到,整个集群就变成了一个门全开的大房间。攻击者用第一台机器作为跳板,扫描内网网段,用同一把密钥批量尝试登录,成功率往往高得吓人。
云环境里的横向移动则体现在利用RAM角色和临时凭证上。很多应用在设计时会为ECS实例绑定一个RAM角色,而攻击者在拿到实例控制权后,可以直接通过实例元数据服务获取这个角色的临时凭证。如果这个角色权限设置过大——比如绑定了管理员策略——那攻击者就直接用云平台的身份体系完成了权限提升。
3.3 第三阶段:持久化与数据窃取
到了第三阶段,事情就变得非常难收拾了。攻击者会在你的系统里埋几个"持久化后门",常见手段包括:修改SSH配置让特定密钥可以反复登录、在服务器上种一个计划任务来保持通信、在云平台的访问控制里偷偷添加一个隐藏用户。
这个阶段最危险的地方在于,攻击者的操作会刻意保持"低姿态"。他们不删数据、不改配置、不引起告警,每天的流量也就几兆。你可能觉得一切正常,但攻击者已经把你最核心的数据一点点往外搬了。等到你发现自己已经被"搬空"时,可能已经是几周甚至几个月之后了。
中转站日志在这个阶段扮演的角色,就是攻击者的"数据集装箱"。受害企业的数据库备份、源代码压缩包、敏感配置文件,会被分批次上传到中转站,然后定期转走。这个过程会留下大量的连接元数据——也就是这次被安全研究人员拿到的那些日志记录。
4. 企业收到泄露通报后该如何自查:别慌,分步来
4.1 第一步:确认影响范围,别急着删东西
如果你的企业收到类似"密钥出现在泄露数据中"的通报,第一反应千万别是立刻登录服务器把所有密钥都改了。虽然凭证轮换是对的,但更关键的是先搞清楚问题的全貌——不改的话也许能借此跟踪攻击者的行为,改了反而打草惊蛇。
我建议的做法是:先冻结相关的访问通道,但不是全员通知。由核心安全人员成立临时小组,梳理这些被泄露的密钥和凭证具体对应哪些系统、哪些账号、哪些人有权限使用。同时,保留相关服务器的登录日志和云API调用记录,后续审计要用。
这里有个很实用的记录方法:你可以把疑似泄露的SSH公钥的指纹列出来,然后在所有服务器的authorized_keys文件里做一次全量匹配,找出所有安装了这把公钥的主机。云凭证也一样,在云平台的RAM控制台里查看这些AccessKey的最后使用时间和使用记录,来判断是否已经被恶意调用。
4.2 第二步:日志审计与异常行为回溯
接下来要做的是回溯攻击者的行为轨迹。这一步需要细心,但逻辑很清晰:既然密钥已经在外面了,那攻击者大概率已经用过了。你要找的就是那些"不属于正常操作的登录和调用"。
SSH层面,重点查看目标服务器的/var/log/secure或/var/log/auth.log,筛选认证成功的记录,比对这些登录时间是否对应正常运维时间、来源IP是否在预期范围内。特别注意那些深夜凌晨的登录、来自异常地理位置的登录、以及同一个IP对多台服务器的连续登录。
云平台层面,在云审计服务里拉取涉及你凭证的API调用记录。重点看几类高危操作:创建或修改RAM用户、创建AccessKey、修改安全组规则、导出RDS备份、创建新的ECS实例、调用对象存储的批量下载接口。这些操作的任何一条都值得高度警惕。
4.3 第三步:轮换凭证与阻断会话
确认影响范围后,凭证轮换必须立即执行。SSH密钥的轮换流程分几步走:生成新的密钥对,通过安全通道(堡垒机或带外管理)把新公钥分发到服务器,确认新密钥可登录后,从authorized_keys中移除旧公钥。顺序不能乱——先发新钥、再登录测试、最后删旧钥,避免出现"钥匙全换完但人都进不去"的尴尬。
云凭证的处理相对直接,在云平台禁用旧的AccessKey并创建新的,但要注意检查依赖该凭证的应用程序和自动化脚本,别在轮换时把线上服务搞挂了。这也是我反复提醒的:凭证轮换要有变更流程,要提前通知到所有关联方。
如果攻击者可能还保持着活跃会话,还需要查看服务器当前登录会话和云平台控制台登录会话,强制踢出可疑会话。这一步需要云平台或堡垒机的配合,但既然已经确认凭证泄露,就必须动手清理。
4.4 第四步:排查残留后门,防止二次入侵
修改完密码和密钥只是"止血",后续还有一个容易被忽略的关键步骤——排查系统里是否已经被埋了后门。攻击者在拿到权限后常常会做几件事:把另一把公钥写入authorized_keys、创建新的系统用户、修改计划任务、在启动项里塞脚本。这些痕迹不会因为你换了密码就消失。
这个阶段的排查建议覆盖几个层面:比对系统用户列表,检查是否有陌生的高权限账号;审查/etc/cron*和systemd定时任务,看有没有可疑的执行脚本;检查Web目录和临时目录下有没有近期新增的可疑文件;在云平台上检查是否有陌生的ECS快照、镜像和隐藏资源。
我遇到过不止一次的教训是:企业以为换个密码就安全了,结果攻击者通过早就埋好的后门,用新学到的虚拟内网工具又摸了回来。排查后门这一步省不得,也快不得。
5. 亡羊补牢:从根源上管住密钥与凭证
5.1 建立密钥的全生命周期管理
事件处理完之后,真正该做的是让这类问题不再发生。首当其冲的是建立SSH密钥的全生命周期管理。很多企业的密钥管理是"从生到死"全靠运维个人自觉:生成没人管、分配没人记、回收没人催。这种管理方式下,密钥数量只会越来越多,配对的服务器关系越来越乱,最后谁都没法说清楚钥匙究竟在谁手里。
排查思路并不复杂。做好基线管理就好:一是统一密钥生成和分发入口,尽量用堡垒机或统一运维平台来托管密钥,员工本地不再存放私钥;二是建立密钥台账,记录每把密钥的用途、负责人、有效期;三是定期轮换,建议不超过三个月就要换一次;四是员工离职时第一时间回收个人密钥权限并撤销云端凭证。
工具选型方面,如果你有预算,可以直接上企业级的特权账号管理产品,这类工具会把密钥的统一托管、自动轮换、操作审计全部做成闭环。预算有限的团队,至少要做到把私钥的存储位置从个人电脑收拢到统一的安全存储里,并用配置管理工具统一下发公钥。
5.2 从架构层面减少静态凭证的使用
相比之下,我更推荐从架构层面降低凭证的暴露面。思路其实很直白:好用且不容易泄露的凭证形式,才最有可能成为大家真正用起来的默认选择。
云上EC2实例尽量绑定临时凭证而不是长期AccessKey。临时凭证自带过期时间,攻击者即使拿到,几分钟后也就失效了。数据库连接尽量走内网、通过IAM或STS换取临时凭证,而不是把账号密码明文写进连接串。对于需要大量配置项的场景,可以引入KMS或Vault这样的密钥管理服务,把敏感信息从配置文件里抽离出来,应用运行时刻动态获取密钥,而不是把密钥随代码一起分发。
这里再专门提醒一下,有人会觉得动态凭证方案"太重""架构改动大"。但说句实话,相对泄露后动辄几十上百万的罚款和声誉损失,前期投入是完全划算的。现实中没有完美的绝对安全方案,任何安全机制本质上都是成本和风险的权衡。
5.3 日志与敏感数据的分级处置与脱敏
这次事件的核心是"日志"二字。日志本身是运维排查问题的刚需,但日志里放什么内容完全是可控的。我强烈建议企业做一次日志内容基线审查:排查所有应用日志、系统日志、CI/CD日志的输出内容中,有没有出现密码、密钥、令牌、云凭证等敏感信息。
具体的做法是建立敏感词检测规则,在日志采集端就进行过滤和脱敏。比如把SSH私钥的标记行、AccessKey的特征字符、数据库连接串里的密码字段,在写入日志前就替换成掩码。对于已经产生的历史日志,要做一次全量扫描和清洗,该删除的删除,该脱敏的脱敏,该归档加密的归档加密。
另外,日志系统的访问权限也要重新审视。日志集中收集是好事,但如果所有开发都能随意查询生产环境日志,那敏感信息就等于向全员开放了。建议对日志平台做细粒度的权限控制:谁可以查、可以查哪几个项目、能查多久的数据,都要有明确设置。
5.4 用演练倒逼安全习惯落地
最后一点,也是我觉得最容易被忽略的:安全规范和工具订好了,不演练等于白搭。很多企业买了一大堆安全产品,制度也写得头头是道,但一旦问下去,真正按照规范执行的人没几个。为什么?因为不演练,大家就没有真实感知。
我建议安全团队定期做一次"凭证泄露应急演练"。别搞太复杂的剧本,就模拟一个最简单的场景:某员工的SSH密钥泄露了,现在需要排查影响面并完成轮换。让运维、研发、安全一起走一遍流程。走完之后你会发现,哪些环节不顺畅、哪些人对流程不熟悉、哪些工具在实际操作中不好用,全都暴露出来。演练的价值就在这里——让问题在可控的小范围内暴露,而不是等真出事时手忙脚乱。
这类演练做多了,团队的肌肉记忆也就形成了。真到某天收到泄露通报,大家知道第一步做什么、第二步找谁、第三步怎么处理,整个响应过程就会从容很多。
写在最后
这次6TB中转站日志曝光事件,表面上是安全研究人员的"战利品展示",本质上却是给整个行业敲了一记警钟。这些企业不是没有安全投入,而是投入的方向偏了——过度依赖边界防御,却忽略了内部凭证的全生命周期管理。防火墙再厚,也挡不住有人拿着合法钥匙从正门走进来。
我做安全这些年,最大的体会是:安全建设里最贵的东西永远是"人",最难改的也是习惯。补齐密钥管理工具链、建立日志脱敏机制是治理层面的事,真正让安全落地的关键一步是每一个工程师都意识到“自己手下的密钥,不是个人私有物品,而是企业资产的钥匙”。从这个角度看,建议筛查范围不止于基础设施和配置文件,还可以延伸到代码仓库、开发机、跳板机、云控制台等所有会接触敏感信息的角落。
今天的皮球在每一家企业脚下。要不要去查,怎么查,什么时候查,答案已经写在这条新闻里了。