CVE-2024-3094是在XZ Utils中发现的,史上最危险、最复杂(但“功亏一篑”)的软件供应链攻击之一。曝出该漏洞的XZ Utils是一套广泛应用于主流Linux发行版的压缩工具和库,但Binarly推出的后门程序扫描工具的检测范围不限于XZ Utils。
去年底,微软工程师Andres Freud在调查DebianSid(滚动发行版)SSH登录异常(缓慢)时,发现最新版本的XZ Utils软件包存在后门程序。该后门由代号为“匿名贡献者”的人士引入到XZ5.6.0版本中,并延续到5.6.1版本。不过,由于采用“激进更新”方式的Linux发行版和版本较少,因此大多数使用早期安全库版本的發行版并未受到影响。
XZ后门发现后,大量部门和企业立即启动了检测和修复工作。美国网络安全与基础设施安全局(CISA)建议降级到XZUtils5.4.6稳定版,并持续追踪和报告相关恶意活动。
Binarly指出,迄今为止的XZ后门威胁缓解工作主要依靠简单的检测方法,例如字节字符串匹配、文件哈希黑名单和YARA规则,这些方法不仅会带来大量误报警报,还无法检测其他项目中类似的后门程序。
为了解决这个问题,Binarly开发了一款针对特定库和携带相同后门的任何文件的专用扫描器。
Binarly表示:“如此复杂且专业设计的综合性植入框架并非一次性操作就可以完成的。它可能已经被部署在其他地方,或部分用于其他操作。这就是我们开始专注于这种复杂后门的更通用检测方法的原因。”
XZ后门通过修改IFUNC调用来拦截或挂钩执行,从而插入恶意代码。Binarly的检测方法采用静态分析二进制文件的方式,识别GNU间接函数(IFUNC)转换过程中的篡改行为。
具体来说,扫描器会检查在植入恶意IFUNC解析器过程中标记为可疑的转换。GCC编译器的IFUNC属性允许开发人员创建同一函数的多个版本,然后根据处理器类型等各种标准在运行时进行选择。
Binarly解释道:“XZ后门利用GCC编译器用于运行时解析间接函数调用的GNU间接函数(ifunc)属性,作为其在执行过程中获取初始控制的核心技术之一。植入的后门代码最初会拦截或挂钩执行。它修改ifunc调用,替换原本应该简单调用“cpuid”的“is_arch_extension_supported”检查,转而调用由有效载荷对象文件(例如liblzma_la-crc64-fast.o)导出的“_get_cpuid”,并调用植入下图所示代码中的恶意_get_cpuid()。”
å¾ç
Binarly的扫描器通过检测除XZ Utils项目之外的各种供应链组件来提高检测率,并且检测结果的可信度也大大提高。
Binarly的首席安全研究员兼首席执行官Alex Matrosov表示:“这种检测基于行为分析,可以自动检测任何类似的后门程序变种。即使经过重新编译或代码更改,我们也能检测到它。”
该后门扫描器现已上线,网址为xz.fail,用户可免费上传二进制文件进行无限次的检测。