头图

在大多数管理员眼里,文件“属性→详细信息”里的备注、主题、作者,只是办公文档的礼貌自我介绍,连杀软都懒得点开。可就是这块连用户都忽视的“扩展属性”(Extended Attributes),正被攻击者当成免费广告牌:短短几行隐藏字段,就能塞下二段式下载器、C2 回连地址,甚至一整段 Powershell 加载脚本——全程不落磁盘、不触杀软、不留日志。

为什么偏爱“备注栏”

扩展属性随文件走,却不在文件内容里;流式扫描器只看主数据 fork,对 ADS(备用数据流)或 xattr 视而不见。于是攻击者把恶意代码拆成 128 字节一行的“作者名”写进去,像便利贴一样贴满文件,再由一段看似无害的宏逐行读取拼接,现场组装成内存马。整个过程磁盘 I/O 只有一次合法读取,EDR 连触发点都找不到。

暗语的三种写法

  1. 分段便利贴:把 base64 后的 payload 拆成“标题”“备注”“最后一次保存者”等字段,宏用 BuiltinDocumentProperties 依次拉取,解码后 Invoke-Expression。杀软扫主文档无毒,属性栏却拼出一条远程 shell。
  2. 备用数据流套娃:在 .txt 上再开 file.txt:hidden.ps1,属性页依旧显示“只读文本”;rundll32 一句 stream.exe 就能把它拉回内存执行,属性栏清清白白。
  3. 图片里藏坐标:把 PNG 的“关键字”字段写成 https://cdn.foo/a.jpg|key=123,表面上看是摄影师备注,实则第一段下载器读到后,用竖线分割出 URL+密钥,再把第二段 shellcode 拉回来。图像文件天然白名单,属性改完连哈希都不变。

与“时间+权限”三连击

时间戳先回拨到相机出厂日,权限再设只读,扩展属性里塞满“温柔”的版权信息——文档、图片、日志文件瞬间化身“三好学生”。防守方按时间排序看不到新增,按权限筛筛不到可执行,按内容检测又碰不到扩展属性,三重盲区叠加,文件就像穿了光学迷彩。

对取证链的慢性投毒

扩展属性可以随文件一起被打包进 ZIP、随邮件一起被发出,却不会被常规沙箱记录;调查人员解压后只看内容无毒就放行,真正的 C2 指令早已通过“备注栏”溜进内网。事后想复盘,却发现属性栏可以被 Office 一键清除,溯源证据原地蒸发,形成“断链”现场。

把“备注栏”也关进笼子

  1. 属性级哈希:计算文件哈希时连同所有 xattr/ADS 一起算,任何“备注”变动都会改变指纹,杜绝“内容不变属性变”的灰色地带。
  2. 出站邮件刷白:网关自动剥离所有扩展属性与流,重写“作者、标题”为统一值,让“暗语”在边界就掉线。
  3. 内存行为兜底:不管文档多干净,只要 Office 进程外连 Powershell、WMI、cmd,一律先拦后审,把“属性→内存马”的拼图打断。
  4. 发布前硬化:用 Virbox Protector 对可执行文件做“壳+虚拟化+完整性绑定”,攻击者若想再把下载器藏进属性,就得先破解壳,动静大、成本高,多数直接放弃。

Virbox Protector 的“硬化”组合拳:

  • 壳层校验:启动时先校验自身所有区段及扩展属性,发现多出一行“作者”都直接自杀;
  • 代码虚拟化:把解密逻辑放进私有 VM,攻击者就算读出属性里的 URL,也无法在本地复现解密流程;
  • 许可链验证:运行时必须在线拉取令牌,文件与令牌双因子对齐,即便属性栏暗语完整,也无法拿到下一步 shellcode。

结语

扩展属性本是为方便用户而设的“便签”,却成了攻击者免费租用的“广告牌”。当“备注栏”都能开口说话,安全方案就必须把“属性”也纳入零信任版图:要么在出网关前撕掉便签,要么在编译期就把文件封进保险柜。只有把防线前移到“属性”这一厘米,才能让暗语永远失去听众。


深盾安全
1 声望0 粉丝

深耕软件安全领域30载