发布于21小时前21小时 背景:从边界设备漏洞到内网信任失守2024 年 1 月 10 日,Ivanti 披露 Connect Secure 与 Policy Secure 中的 CVE-2023-46805 和 CVE-2024-21887:前者属于认证绕过,后者属于命令注入。两者组合后,攻击者可在特定受影响版本上绕过认证并执行命令。披露时,相关漏洞已经出现实际利用。2024 年 1 月 19 日,CISA 发布紧急指令 ED 24-01;2 月 1 日又发布补充方向,要求美国联邦文职行政机构按规定断开相关产品连接并开展处置。这些要求有明确适用对象,但其处置思路值得企业参考:对可能失陷的 VPN,不能只验证补丁是否安装,还必须确认设备完整性、凭据暴露情况和下游访问范围。本文是针对上述历史事件的技术复盘,不代表当前版本状态。版本是否受影响、应安装哪个修复版本,应以 Ivanti 对具体产品和分支的公告为准;以下操作仅用于自有或明确授权环境。问题定位:为什么“VPN 已修复”不等于事件结束这条漏洞链的关键不只是公网入口出现远程代码执行,而是 VPN 设备处于高信任位置:它可能接触用户认证过程、LDAP 绑定账户、RADIUS 共享密钥、设备证书,以及通往内网的网络路径。需要分别验证三个边界,不能将它们混为一谈:设备边界:攻击者是否只发送了探测请求,还是已经执行命令、修改文件或建立持久化。身份边界:哪些账户、密钥和会话可能暴露,暴露期间是否仍然有效。网络边界:VPN 设备自身能够访问哪些服务器,VPN 地址池又能够访问哪些管理接口。设备进程权限并不自动等于域管理员权限;但如果设备持有高权限目录绑定账户,或者能直连域控、备份平台和虚拟化管理面,事件影响就可能越过原本的边界。技术分析:把公开情报转成可验证假设CVE-2023-46805 涉及 Web 组件的认证检查绕过,CVE-2024-21887 涉及命令注入。生产排查不应以执行漏洞利用命令作为首选,更不应通过写文件或执行系统命令来“证明受影响”。可以先用版本、配置、暴露时间和历史日志确认暴露面,再结合完整性检查判断是否存在入侵证据。公开事件分析涉及设备组件被修改、凭据窃取及清理痕迹等行为。因此,设备本地日志和本地完整性检查都不能作为唯一可信来源。优先使用事件发生前已经外送的日志、交换机或防火墙记录,以及身份系统日志交叉验证。操作步骤:先保全,再隔离,再建立时间线登记设备型号、版本、补丁记录、互联网暴露时段、管理入口和认证后端,保留时区信息。在不延误必要隔离的前提下,按厂商流程导出支持包、配置和日志,记录采集时间与操作人员。不要先恢复出厂再寻找证据。使用厂商适用的完整性检查工具,将结果与文件变化、升级记录一起分析;检查正常不等于排除入侵。从集中日志平台导出 HTTP 请求、VPN 登录、管理员操作及设备出站连接记录,统一为 UTC 时间。关联目录服务、RADIUS、堡垒机和目标服务器日志,检查异常身份是否从 VPN 设备地址或地址池访问管理面。命令示例:离线筛查异常路径,保留原始证据以下脚本只处理已导出的日志,不向设备发送请求。先将日志转换为 JSONL,每行包含 time、src_ip、method、path、status 字段;不存在的字段可以留空。脚本对路径做有限次数解码,筛出路径穿越特征,并保留原始路径用于复核。import json import sys from urllib.parse import unquote, urlsplit for line_no, line in enumerate(sys.stdin, 1): try: row = json.loads(line) except json.JSONDecodeError: print(f'跳过无效 JSON,行号={line_no}', file=sys.stderr) continue raw = str(row.get('path', '')) decoded = raw for _ in range(3): next_value = unquote(decoded) if next_value == decoded: break decoded = next_value # 仅检查路径,避免将查询参数里的普通文本误当成路径。 path = urlsplit(decoded).path.replace('\\', '/') if '..' not in path.split('/'): continue print(json.dumps({ 'time': row.get('time'), 'src_ip': row.get('src_ip'), 'method': row.get('method'), 'status': row.get('status'), 'raw_path': raw, 'decoded_path': path, 'reason': '路径包含父目录跳转片段,需人工复核' }, ensure_ascii=False)) sha256sum access-export.jsonl > access-export.jsonl.sha256 python3 triage_paths.py < access-export.jsonl > suspicious-paths.jsonl 这不是专用漏洞检测器,既可能漏报,也可能将普通扫描标记出来。路径异常只能作为调查入口;HTTP 200 不等于执行成功,HTTP 403 也不能单独证明设备未失陷。若导出日志已经规范化路径,原始编码和穿越片段还可能丢失。对命中时间点,应继续检查前后数分钟内是否出现异常管理操作、设备对陌生地址的出站连接,以及随后使用有效账户访问内网的行为。关联时区、NAT、代理和 VPN 地址分配记录,避免仅凭同一源 IP 就认定是同一攻击者。风险与修复建议:补丁、重建和凭据轮换各解决不同问题修补入口:按厂商对应分支的公告升级,并复核临时缓解措施是否仍适用。不能把旧缓解脚本视为永久修复。处置失陷设备:出现完整性异常或明确入侵证据时,按厂商及事件响应流程重建,不能只覆盖升级。恢复配置前先检查管理员、认证源、路由和访问策略。轮换身份材料:在可信环境恢复后,评估并轮换设备能够接触的绑定凭据、共享密钥和私钥,撤销可疑会话。避免在仍可能受控的设备上输入新凭据。收紧权限边界:目录绑定账户仅保留必要查询权限;VPN 地址池不应默认可达全部内网,管理面应使用独立入口和访问控制。补齐日志留痕:将认证、管理操作和网络连接日志持续外送,明确保存周期,并验证设备断开或重建后仍可查询历史记录。总结与核验来源这起事件最重要的情报价值,是提醒防守方把 VPN 从“接入工具”提升为“高价值安全边界”来审计。一次合格的授权验证,应回答入口是否关闭、设备是否可信、身份是否需要轮换、内网是否发生后续访问,而不只是提交一张版本截图。核验资料:Ivanti 关于 CVE-2023-46805 与 CVE-2024-21887 的安全公告;CISA ED 24-01 及 Supplemental Direction V1;Mandiant 于 2024 年 1 月发布的相关在野利用分析。CISA 原始指令: 。 安全动态、影响面和处置建议示意 代码审计、调用链与关键函数定位示意
21小时前21小时 这类链条建议按“入口请求—设备侧执行—后续持久化或横向活动”串时间线,不要只凭某个 IOC 判断是否失陷。若环境涉及 CVE-2023-46805、CVE-2024-21887 等漏洞,先对照设备版本、厂商公告和实际暴露时间,重点核查异常认证绕过请求、管理接口变更、未知账户或配置项,以及设备向内网发起的连接;若命中 CVE-2024-21893 相关风险,也要检查 SAML 请求及设备对外访问记录。 取证时先保全设备现有日志、配置、厂商支持包和可用快照,并记录采集人、时间及时区、设备序列号和固件版本。同步留存 VPN 认证、反向代理/WAF、防火墙、DNS、EDR 与身份平台日志,按设备时间偏差统一时间线。不要先清理文件、重置设备或升级后再取证;设备本地日志可能被轮转或篡改,外部集中日志和备份尤其重要。对采集副本计算哈希并保留原件: find evidence -type f -print0 | sort -z | xargs -0 sha256sum > evidence.sha256 排查时以首次异常请求时间为锚点,关联来源 IP、请求路径与状态码、认证结果、配置变更、管理员登录,以及 VPN 用户随后访问的内部主机和服务。发现设备存在可疑改动或无法解释的外连时,应按已失陷处理:隔离管理面、保留证据,并依厂商建议从可信镜像重建、轮换设备及相关账号凭据;单纯打补丁不能替代失陷后的清理与凭据处置。