微软 2026 数字防御报告:Agent 本质上是一个身份问题

·9 分钟阅读·Evergreen Tools Team

微软于 10 月 1 日发布 2026 年版数字防御报告,总结文章由客户安全管理办公室 CVP 兼副 CISO Terrell Cox 撰写。这篇文章值得一读的原因只有一个:它列出了安全团队如今必须审视的 AI 相关事项。Agent 身份、合适的访问权限、Agent 之间的认证、归因能力,以及撤销访问的能力。如果你是做 Agent 的人,这份清单就是你的待办列表。同时值得注意的是,这其实是一份老问题的清单,只是换了新标签。

锁与加密概念图

Agent 身份先于 Agent 能力

不渲染恐慌地描述威胁态势中的 AI

报告对攻击性使用的结论具体而不夸张:威胁行为者正在把 AI 用于侦察、社会工程、恶意软件与漏洞利用开发,以及攻陷后活动,而且大部分使用仍集中在既有攻击流程的某些环节。AI 给攻击者带来更高的速度、规模,以及更高效地定制活动的能力,社会工程变得更精准,技术工作的一部分被压缩。底层手法仍然熟悉:人、身份、暴露的系统与受信任的访问,依旧在微软观察到的事件中占据显著位置。这是一次有用的校准——威胁换了形状、换了工具,却没有替换掉那些本来就应该在做的基本功。

# Every agent needs an owner, a purpose and an expiry. Most have none.
import json

AGENT = {
    'name': 'invoice-reconciler',
    'owner_team': 'finance-platform',
    'purpose': 'match supplier invoices against purchase orders',
    'identity_type': 'workload-identity',
    'credential_ttl_minutes': 60,
    'scopes': ['erp.read', 'erp.write:reconciliation-notes'],
    'may_call_agents': ['notification-agent'],
    'human_approval_required_for': ['erp.write:payments'],
}

REQUIRED = ['owner_team', 'purpose', 'credential_ttl_minutes', 'scopes']

def validate(agent):
    missing = [k for k in REQUIRED if not agent.get(k)]
    long_lived = agent.get('credential_ttl_minutes', 0) > 1440
    return {'missing': missing, 'long_lived_credential': long_lived,
            'status': 'reject' if missing or long_lived else 'accept'}

print(json.dumps(validate(AGENT), indent=2))

# An agent with no owner is an anonymous insider with a job title.

Agent 就是身份问题

这是应该重塑路线图的部分。报告指出,Agent 可以与企业数据、应用、API 和工具交互,访问级别与自主程度因设计与部署方式而异;这些连接既是 Agent 有用的原因,也是安全团队必须理解的对象。接着它点名了这些问题:Agent 身份、合适的访问权限、Agent 之间的认证、归因、以及撤销访问的能力。在服务间通信架构里,这些每一个都是已被解决的问题,这是好消息。别扭的新意在于:Agent 带着被委派的人类意图行事,并且会依据文本改变行为,同一个原语必须在更模糊的输入集合下依然成立。

# Least privilege is easier to review as a diff than as a policy PDF.
GRANTED = {
    'erp.read', 'erp.write:reconciliation-notes', 'crm.read',
    'mail.send:internal', 'files.read:/shared/finance',
}
REQUESTED_BY_TASK = {
    'match_invoice':    {'erp.read'},
    'write_note':       {'erp.write:reconciliation-notes'},
    'notify_purchasing': {'mail.send:internal'},
}

def unused_grants(granted, requested):
    needed = set().union(*requested.values())
    return sorted(granted - needed)

print('unused grants:', unused_grants(GRANTED, REQUESTED_BY_TASK))

# Anything an agent can do and nothing asks it to do is a permission
# waiting for a prompt injection to find.
相互连接的网络节点

单点日志是噪音,跨源关联才是信号

报告点出的五个属性

除了身份,报告还审视了 AI 特有的安全考量:提示词注入、记忆、模型与数据、Agent 行为,以及 AI 系统周边软件与服务的完整性。把它们当成设计检查清单来读,每一条都能对应到可测试的东西。提示词注入是输入校验问题,且不存在完美解析器。记忆是持久化问题,它会把一次瞬时注入变成长期驻留的注入。模型与数据是供应链问题。Agent 行为是可观测性问题,而且很难,因为「正确行为」的规格常常是用散文写的。周边软件完整性则是普通的依赖问题,而大多数真实事故仍然落在那里。

# Agent-to-agent calls deserve the same checks as service-to-service calls.
def verify_agent_token(claims, caller, callee):
    checks = {
        'issuer_trusted': claims.get('iss') in {'auth.internal'},
        'audience_is_callee': claims.get('aud') == callee,
        'subject_is_caller': claims.get('sub') == caller,
        'not_expired': claims.get('exp', 0) > 0,
        'is_agent_identity': claims.get('actor_type') == 'agent',
        'human_on_behalf_of': bool(claims.get('act')),
    }
    failures = [k for k, ok in checks.items() if not ok]
    return {'allow': not failures, 'deny_reasons': failures}

TOKEN = {'iss': 'auth.internal', 'aud': 'notification-agent', 'sub': 'invoice-reconciler',
         'exp': 1, 'actor_type': 'agent', 'act': {'sub': 'user:1043'}}

print(verify_agent_token(TOKEN, 'invoice-reconciler', 'notification-agent'))

# The act claim is the one people forget: which human asked for this?

漏洞发现是一把双刃剑

报告很谨慎地把 AI 辅助代码分析描述为双向发展,而不是防御方的胜利。把 AI 应用于代码分析的进展,使更有效地检查软件、识别弱点成为可能,从而带来更早发现漏洞、在弱点被利用前加固软件的机会。同样的进展,也让威胁行为者获得更强的漏洞发现与利用开发工具。微软「双方都在继续进步」的说法是诚实的。对小团队而言的实际后果是:修复时间(time-to-patch)变成了竞争变量——如果发现对所有一方都变便宜了,未修补依赖的「半衰期」就缩短了。

# Revocation is a rehearsal, not a diagram. Time it.
import subprocess, time

REVOCATION_DRILL = [
    ('disable workload identity', 'az ad sp update --id $AGENT_SP --set accountEnabled=false'),
    ('rotate the agent secret',   'vault kv put secret/agent key=-'),
    ('block the agent egress',    'firewall-cli deny --tag agent-invoice-reconciler'),
    ('invalidate cached tokens',  'auth-cli revoke --subject $AGENT_SP'),
    ('confirm in the audit log',  'siem query --actor $AGENT_SP --since 5m'),
]

def drill(dry_run=True):
    timings = []
    for label, cmd in REVOCATION_DRILL:
        start = time.time()
        if not dry_run:
            subprocess.run(cmd, shell=True, check=False)
        timings.append((label, round(time.time() - start, 3)))
    return timings

print(drill(dry_run=True))

# If the answer to how long it takes is unknown, the honest answer is not short.
电路板特写

给 Agent 发的权限要对得上任务清单

关联分析才是能规模化的防御

报告里最不起眼的那一节,恰恰是大多数团队应该动手的部分。安全团队要处理来自端点、身份、云环境、应用、邮件、网络与威胁情报的信息,而这些信号能被放在一起考虑时才更有价值,因为横跨多个系统的威胁活动可能留下任何单一来源都看不到的模式。同样的原则通过可信的情报共享延伸到自己组织之外。在自动化方面,报告划出一条值得记住的线:把已知信息连起来、执行既有手法,越来越可以自动化;而发现一条未记录的进攻路径,仍然需要经验丰富的操作者。前者交给自动化,后者留给人。

# Correlate across sources, because single-source alerts miss the pattern.
EVENTS = [
    {'ts': '03:02', 'source': 'identity', 'actor': 'invoice-reconciler', 'event': 'token_issued'},
    {'ts': '03:04', 'source': 'network',  'actor': 'invoice-reconciler', 'event': 'egress_denied'},
    {'ts': '03:06', 'source': 'erp',      'actor': 'invoice-reconciler', 'event': 'bulk_read', 'rows': 41250},
    {'ts': '03:07', 'source': 'email',    'actor': 'invoice-reconciler', 'event': 'external_send'},
]

def correlate(events, actor):
    by_actor = [e for e in events if e['actor'] == actor]
    sources = {e['source'] for e in by_actor}
    signals = []
    if {'identity', 'network'} <= sources: signals.append('new identity with denied egress')
    if any(e.get('rows', 0) > 10000 for e in by_actor): signals.append('bulk read')
    if any(e['event'] == 'external_send' for e in by_actor): signals.append('outbound to external')
    return {'actor': actor, 'sources': sorted(sources), 'signals': signals}

print(correlate(EVENTS, 'invoice-reconciler'))

# One source is a log line. Four sources is an incident.

随之而来的清单

给每个 Agent 一个负责人、一个书面用途,以及以小时而不是以月计的凭据。把它被授予的权限映射到它实际执行的任务上,撤销那些没有任何任务请求的权限,因为一条没被用到的权限,就是提示词注入的战利品。Agent 之间的调用要按服务间调用的标准做认证,并记录这次动作是代表哪个人发起的。把撤销演练一遍并计时;没有计时的撤销方案是一张图,不是一项控制。然后跨身份、网络、应用与邮件关联信号,让「新身份+出网被拒」「批量读取」「外发消息」不再只是三行日志,而是一起事件。

📌 常见问题 FAQ

微软数字防御报告是什么?

这是微软基于其安全与威胁情报团队观察结果发布的年度报告,本版于 2026 年 10 月发布。它覆盖更广泛的威胁态势、网络犯罪、韧性,以及在一个日益互联的环境里技术、身份、系统与人之间的关系。

报告如何描述 AI 与攻击者?

威胁行为者正在把 AI 用于侦察、社会工程、恶意软件与漏洞利用开发以及攻陷后活动,且大部分使用集中于既有流程的某些环节。AI 给他们带来更高的速度、规模与定制能力,而底层手法、以及对身份与受信任访问的依赖,仍然熟悉。

为什么说 Agent 安全是身份问题?

因为报告就是这么框定的:Agent 身份、合适的访问权限、Agent 之间的认证、归因,以及撤销访问的能力。每个 Agent 都需要独立身份、被限定范围的权限、对其他 Agent 的可验证调用,以及被快速关停的手段。

报告列出哪些 AI 特有风险?

提示词注入、记忆、模型与数据、Agent 行为,以及 AI 系统周边软件与服务的完整性,此外还有与之相关的身份与授权问题。

开发者应该先做什么?

盘点 Agent 身份及其负责人、缩短凭据生命周期、移除未使用的权限、为 Agent 间调用加上认证与归因、用秒表演练一次撤销,并跨身份、网络、应用与邮件来源做信号关联。