<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AD on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/ad/</link>
        <description>Recent content in AD on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Thu, 08 Oct 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/ad/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>服务账号密码过期，应用为何批量认证失败？</title>
            <link>https://blog.5772447.xyz/posts/13e99f9c/</link>
            <pubDate>Thu, 08 Oct 2026 09:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/13e99f9c/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;公司 AD 里有一个服役多年的共享服务账号 &lt;code&gt;svc_appdb&lt;/code&gt;,被 17 个内部应用用来连数据库与相互调用——报表平台、工单系统、短信网关、数据同步服务全挂在这一个账号上。因为&amp;quot;改一次密码要通知一堆应用&amp;quot;，这个账号的密码四年没有轮换过，是安全部年度审计报告上的老问题。&lt;/p&gt;&#xA;&lt;p&gt;10 月上旬，安全部启动账号治理专项：所有超过一年未改密的账号强制重置，&lt;code&gt;svc_appdb&lt;/code&gt; 在名单里。安全部按流程发了变更通知邮件，应用团队回了&amp;quot;已知悉&amp;quot;，随后在维护窗口改掉了 AD 里的密码——原计划是&amp;quot;各应用按文档自助更新配置&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;次日上午 9 点 20 分起，工单系统开始报数据库认证失败；半小时内 17 个应用中有 14 个连环告警，数据同步全部中断，报表平台查询报错。一场以&amp;quot;提升安全&amp;quot;为目的的改密，把半个应用层打瘫了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;应用侧报错统一:&lt;code&gt;Login failed for user &#39;svc_appdb&#39;&lt;/code&gt;(状态 18456),连接池重建后依然失败——不是瞬时抖动，是凭据问题。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;kubectl exec&lt;/code&gt; 抽查两个应用容器，配置文件里的密码确实是&lt;strong&gt;旧密码&lt;/strong&gt;；环境变量注入的另几个应用同样如此。&lt;/li&gt;&#xA;&lt;li&gt;AD 侧确认：新密码已生效，账号未锁定(没有锁定事件)——排除了&amp;quot;改错密码&amp;quot;和&amp;quot;误触发账户锁定策略&amp;quot;。&lt;/li&gt;&#xA;&lt;li&gt;17 个应用里 3 个正常——事后核实，这 3 个用的根本不是这个服务账号，而是各自独立的账号；依赖 &lt;code&gt;svc_appdb&lt;/code&gt; 的 14 个全军覆没。&lt;/li&gt;&#xA;&lt;li&gt;故障没有自愈迹象：连接池重试永远失败，因为旧密码在服务端已经失效。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;第一步还原时间线，确定&amp;quot;谁改的、改了什么&amp;quot;。AD 审计日志(4723 密码修改尝试/4724 重置)确认 9:00 维护窗口内 &lt;code&gt;svc_appdb&lt;/code&gt; 被重置，操作者是安全部治理专项的服务账号——变更属实、流程走了，问题在&amp;quot;改完之后&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;第二步弄清&amp;quot;为什么应用没跟上&amp;quot;。应用侧的密码落地方式盘点下来有三类：写在配置文件里(6 个)、注入环境变量(5 个)、走 K8s Secret(3 个)——&lt;strong&gt;没有任何一类有自动轮换机制&lt;/strong&gt;，全部依赖人工按通知去改。而安全部的通知只发了应用团队邮箱列表，17 个应用的负责人里只有 5 人在列表里，其中 2 人当天休假；&amp;ldquo;按文档自助更新&amp;quot;的前提根本不成立。&lt;/p&gt;&#xA;&lt;p&gt;第三步回答&amp;quot;为什么密码会过期&amp;rdquo;。此前四年没人动过这个账号，大家默认&amp;quot;服务账号不受密码过期策略约束&amp;quot;——这个认知是错的。AD 的域密码策略按账号应用，&lt;code&gt;svc_appdb&lt;/code&gt; 所在 OU 没有配置例外 PSO(Fine-Grained Password Policy),四年没过期纯属&amp;quot;运气差在恰好这次审计触发了重置&amp;quot;；本次重置同时落入了&amp;quot;下次过期时间 = 现在 + 90 天&amp;quot;的默认策略，意味着&lt;strong&gt;三个月后同样的事故会精确重演&lt;/strong&gt;，除非中间有人补上治理机制。&lt;/p&gt;&#xA;&lt;p&gt;第四步明确修复边界。紧急恢复只需要把新密码同步到 14 个应用；但要避免三个月后重演，必须回答&amp;quot;这个账号到底该怎么管&amp;quot;——一个账号被 14 个应用共享，本身就是轮换断链的根源。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;紧急恢复(30 分钟)&lt;/strong&gt;：从密码保险库取新密码，按应用清单逐个更新配置/Secret 并滚动重启；10:05 全部 14 个应用恢复。清单来自 CMDB 的依赖登记——这次能快速对齐，靠的是去年资产梳理时留下的&amp;quot;服务账号 → 应用&amp;quot;映射表。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;账号拆分(治本)&lt;/strong&gt;：废弃 &lt;code&gt;svc_appdb&lt;/code&gt; 一号通吃模式，按应用拆分为 14 个独立服务账号；每个账号的密码落在密码保险库，由 K8s External Secrets Operator 同步到对应 Secret。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;轮换自动化&lt;/strong&gt;：优先把支持 gMSA 的 Windows 侧服务迁移到组托管服务账号(AD 自动轮换 120 天，应用零改动)；Linux 侧与数据库接入凭据轮换工具，配置&amp;quot;改密 → 分发 → 验证 → 回滚&amp;quot;四步流水线，人工只做审批。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;策略例外与台账&lt;/strong&gt;：为暂时无法自动轮换的账号建 PSO 例外(延长过期周期)+ 显式登记&amp;quot;轮换责任人/下次轮换日&amp;quot;；AD 里所有服务账号打上 &lt;code&gt;svc-&lt;/code&gt; 前缀并纳入季度审计，超期未轮换自动告警到安全部与应用团队双清单。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;直接根因是&lt;strong&gt;服务账号密码重置后，14 个依赖应用侧的旧凭据没有任何自动跟进机制，全部静默失效&lt;/strong&gt;。深层根因有三层：其一，一个账号被 14 个应用共享，密码轮换的爆炸半径天然失控；其二，&amp;ldquo;服务账号不受密码策略约束&amp;quot;的错误认知使账号四年裸奔，过期策略一触发就现出原形；其三，变更通知的触达名单不全，&amp;ldquo;通知即生效&amp;quot;的流程假设在组织上就不成立。三层缺一，事故都到不了&amp;quot;半个应用层瘫痪&amp;quot;的量级。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;服务账号一律禁止跨应用共享，新应用接入默认独立账号+保险库+自动同步；&lt;/li&gt;&#xA;&lt;li&gt;可迁移服务分批 gMSA 化，季度通报迁移进度；&lt;/li&gt;&#xA;&lt;li&gt;变更通知强制要求&amp;quot;逐应用确认回执&amp;rdquo;，未回执的应用在变更窗口内暂停执行；&lt;/li&gt;&#xA;&lt;li&gt;密码过期类变更执行前先跑依赖映射检查，输出受影响应用清单作为变更附件；&lt;/li&gt;&#xA;&lt;li&gt;安全治理专项与运维变更日历对齐，杜绝&amp;quot;审计驱动突袭改密&amp;rdquo;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;这次事故最讽刺的地方在于：它是一次成功的安全整改的直接后果。审计发现了问题、流程走了、密码改了——但改密动作和应用侧的凭据跟进之间隔着一条没人负责的断链。服务账号治理的本质不是&amp;quot;定期改密码&amp;quot;这个动作，而是让每个凭据都有明确的属主、自动化的分发通道和可验证的生效确认；三者齐了，改密才是安全的收尾而不是事故的开场。那 3 个没受影响的应用，靠的正是当初坚持用了独立账号——正确的架构比任何变更流程都可靠。&lt;/p&gt;&#xA;&lt;h2 id=&#34;延伸阅读&#34;&gt;&lt;a href=&#34;#%e5%bb%b6%e4%bc%b8%e9%98%85%e8%af%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;延伸阅读&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/6f0650ff/&#34; &gt;域用户密码过期，定时同步任务为何批量失败？&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/903f5f9d/&#34; &gt;LAPS 部署后终端本地管理员密码为何未更新？一次策略应用与事件日志的排查记录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/f78d7f76/&#34; &gt;域控 NTP 时间源失效，全公司 Kerberos 为何大面积失败？&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
