aTrust 客户端在 macOS 27 (Tahoe) 上 无法获取真实 MAC 地址的技术反馈

新手983608 10

{{ttag.title}}
一、问题概述

aTrust 客户端(版本 2.5.10.32)在 macOS 27.0 (Tahoe) 系统上无法正常获取 Wi-Fi 网卡的真实 MAC 地址,导致设备识别失败、终端绑定功能不可用。该问题为 macOS 系统级变更引起,需要深信服侧进行适配。

二、环境信息

项目

详情

aTrust 版本

2.5.10.32

macOS 版本

27.0 (Tahoe)

Build 号

26A428

硬件架构

arm64 (Apple Silicon)

设备型号

MacBook Pro

问题组件

libaTrustEnvChecker.dylib

三、问题现象

1. aTrust 客户端无法正确采集设备 MAC 地址,日志中 mac_mark 字段为空数组 []。

2. 服务端收到的 MAC 地址为 02:00:00:00:00:00(系统掩码值),设备指纹异常。

3. 终端绑定功能提示"如需绑定此终端,请填写申请理由",无法正常完成注册。

四、根因分析4.1 macOS 27 内核级 MAC 地址掩码机制

macOS 27 (Tahoe) 引入了内核级别的 MAC 地址隐私保护机制。所有通过 sysctl(NET_RT_IFLIST) 获取的网络接口链路层地址均被替换为掩码值 02:00:00:00:00:00。该掩码对所有用户态进程生效,不受进程权限影响。

验证方式:

通过 C 程序调用 sysctl(NET_RT_IFLIST) 遍历所有网络接口,确认所有接口的 MAC 地址均返回 02:00:00:00:00:00。

4.2 aTrust MAC 地址读取路径

经逆向分析 libaTrustEnvChecker.dylib,aTrust 的环境检查模块 (NetworkCardInfoProvider::getNetworkCardMacAddress())通过以下路径获取 MAC 地址:

1. 调用 sysctl(NET_RT_IFLIST) 枚举网络接口及其链路层地址;

2. 通过 filterMacAddr() 函数过滤虚拟网卡(检查 MAC 地址的 U/L 位,bit 1 = 1 判定为本地管理地址/虚拟地址);

3. 由于 02:00:00:00:00:00 的 U/L 位为 1(本地管理地址),被 filterMacAddr 判定为虚拟网卡并过滤;

4. 最终 netcard 数组为空,mac_mark 为空。

关键日志证据:

// aTrustAgent_plugins_aTrustCore_h_e.3.log

filterMacAddr: will report virtual netcard

netcard array is empty

Get netcard failed! Reason: network card info list empty

// aTrustTray.20260915.log

服务端响应: "macAddress":"\n02:00:00:00:00:00\n"

4.3 CoreWLAN.framework 不受影响

经验证,macOS 27 的 MAC 地址掩码仅影响 sysctl 系统调用路径。通过 CoreWLAN.framework 的 CWWiFiClient → CWInterface → hardwareAddress API 仍可正常读取 Wi-Fi 接口的真实 MAC 地址。

读取方式

返回值

是否可用

sysctl(NET_RT_IFLIST)

02:00:00:00:00:00

不可用(掩码值)

SCNetworkInterfaceGetHardwareAddressString()

02:00:00:00:00:00

不可用(掩码值)

CoreWLAN: CWInterface.hardwareAddress

10:9f:41:b8:88:e5

可用(真实 MAC)

4.4 DYLD_INSERT_LIBRARIES 注入方案不可行

macOS 27 对 dyld shared cache 中的系统函数实施了严格保护,DYLD_INSERT_LIBRARIES 环境变量无法拦截 sysctl、getifaddrs、SCNetworkInterfaceGetHardwareAddressString 等系统函数的调用。即使 aTrustAgent 具有 allow-dyld-environment-variables 和 disable-library-validation 权限,注入的动态库中的 hook 函数也不会被调用。因此无法通过用户侧注入方式修复此问题。

五、修复建议方案一(推荐):在 aTrustEnvChecker 中增加 CoreWLAN 读取路径

libaTrustEnvChecker.dylib 的 MAC 地址采集逻辑中,增加对 CoreWLAN.framework 的调用作为备选方案。当 sysctl 返回的 MAC 为掩码值时,回退到 CoreWLAN 获取真实 MAC:

#import <CoreWLAN/CoreWLAN.h>
// sysctl 返回的 MAC 为掩码值时,回退到 CoreWLAN 获取真实 MAC
CWWiFiClient *wifiClient = [CWWiFiClient sharedWiFiClient];
CWInterface *wifiInterface = [wifiClient interface];
NSString *hardwareAddress = [wifiInterface hardwareAddress];
// hardwareAddress 即为真实 Wi-Fi MAC 地址

建议在 filterMacAddr 判定所有网卡均为虚拟网卡时,自动回退到 CoreWLAN 路径获取 Wi-Fi MAC。

方案二(临时):服务端放宽 MAC 地址校验

aTrust 服务端策略中,针对 macOS 27 客户端临时放宽 MAC 地址绑定校验,允许使用其他设备指纹(如磁盘序列号、硬件 UUID 等)进行设备识别,待客户端版本修复后再恢复完整校验。

方案三(临时):建议用户降级 macOS

建议受影响用户暂时保持 macOS 26 (Sequoia) 或更低版本,直到 aTrust 发布适配 macOS 27 的新版本。

六、补充说明

1. 该问题仅影响 macOS 27 (Tahoe) 及以上版本,macOS 26 及更早版本不受影响。

2. SCNetworkInterfaceGetHardwareAddressString() 同样受掩码机制影响,返回值为掩码地址,不可作为替代方案。

3. aTrustAgent 为 x86_64 架构,在 Apple Silicon 上通过 Rosetta 2 翻译运行,建议后续提供原生 arm64 版本以获得更好的系统兼容性。

4. 日志中还发现路径创建失败的错误:create database directory failed: /usr/local/Cellar/.aTrust; Reason: error: 2, msg: No such file or directory,建议一并排查。

解决该疑问,预计可以帮助到 18073 人!

回帖即可获得
2S豆
,被楼主采纳即奖励20S豆+10分钟内回帖奖励10S豆 [已过期] ,了解更多S豆奖励信息

完善手机号和公司名称,让服务更省心更便捷!立即完善

等我来答:

换一批

发表新帖
热门标签
全部标签>
2026年技术争霸赛
知识大闯关
深小服案例集
信服课堂视频
功能体验
深小服
每日一问
标准化排查
GIF动图学习
安装部署配置
新版本体验
课后茶话社
畅聊深小服
纪元平台
S豆商城资讯
2025年技术争霸赛
技术笔记
每周精选
产品连连看
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
排障笔记本
产品预警公告
玩转零信任
技术争霸赛
「智能机器人」
追光者计划
2023技术争霸赛专题
卧龙计划
华北区拉练
天逸直播
以战代练
秒懂零信任
技术晨报
平台使用
技术盲盒
山东区技术晨报
文档捉虫
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
西北区每日一问
高手请过招
升级&主动服务
高频问题集锦
社区新周刊
【 社区to talk】
POC测试案例
全能先锋系列
安全效果
云化安全能力
专家说
热门活动
产品动态
行业实践
产品解析
关键解决方案
声音值千金
工具体验官
产品知识周周练
产品体验官
有一说一
VMware替换
王者破雾峡谷
案例实践挑战
大规模VMware迁移替代
破雾实践案例

本版版主

4
9
0

发帖

粉丝

关注

702
20
35

发帖

粉丝

关注

本版达人