从病毒到“基础软件污染”,Linux 真的安全吗?( 四 )


后台服务类基础应用软件:业务/数据驱动型威胁新目标
除了系统基础程序外,一些第三方开源基础应用软件,更是存在非常多种供应链来源、频繁的版本更迭,在一般用户业务中起主要业务应用角色的程序包,直接处理业务逻辑、用户数据,是关键敏感程序 。这些应用的安全性更直接关乎业务而非主机的安全性 。
Linux云主机搭载的最主流应用为Apache httpd和Nginx 。如2013年曾经由ESET和Sucuri披露的Linux/Cdorked.A反连后门,即是插入了恶意代码编译的httpd daemon程序,其后门实现与原始代码功能逻辑结合,在http请求头的复杂处理分支中埋下新增的控制命令处理,用于条件触发植入的反弹shell模块等后门功能,并增加请求重定向以实现隐藏 。这个后门因为不通过此前广泛传播的配置文件修改、新增后门扩展模块的方式实现,且没有其它文件落盘、消除日志,所以一旦完成了植入,或者通过安装过程污染,则仅能通过对httpd程序文件的特征检测才能发现 。这类家族同时还覆盖了Nginx、Lighttpd,可见在服务应用软件二进制层面的后门隐藏,是早已开始的一个对抗战场 。
? “未知”:从数据窥见威胁
由于先天的开源生态,相较于Windows软件大多以二进制形式发布,Linux有大量程序为源码形式为用户自行拉取、定制、编译使用,或从其它渠道下载预编译二进制版本 。由此引入了大量的版本碎片化现象,主要体现在三方面:

  • 由编译过程引入的特异性差异 。不同的编译环境与配置,不止会在编译后二进制中留下指纹,也包括了build-id这样的先天差异;更重要的是跨编译器和版本情况下,代码生成策略不同带来的一般差异 。
  • 由代码定制引入的奇异版本 。出于业务和功能需求,在开源代码上引入增量代码,会产生一个“小众”版本 。对于独立审计的第三方而言,判断出增量代码是首要难点,而判断增量代码是否“善良”则是更大挑战 。
  • 由多样的软件供应链路引入的碎片化 。Linux应用往往具有依赖繁复的特性,为此对一些通用场景,存在大量第三方提供预编译的软件打包,如仅仅pure-ftpd程序,就被包含在lanmp、phpstudy、EZHTTP、wdlinux等多种web服务器应用打包方案中提供,从而引入额外的碎片化,其中包括下载途径等部分供应链也并不可信,甚至存在历史问题 。
而即便在考虑了以上所有白色、灰色的版本碎片化之外,通过数据分析,阿里云安全运营中心也可观察到了部分程序在全量主机上,出现了高度可疑的严重碎片化现状和趋势 。其中有代表性数据如下:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
在这份数据中,抽样采集了Linux主要程序的碎片化分布 。上图选取了碎片化较多和较正常的部分daemon类程序数据;作为对照,如auditd、atd等代码简单且近几年无代码变更的系统daemon程序,日活md5版本数约在100上下,而其余版本数量居于前列的daemon则表现出偏离正常版本数的趋势 。而下图则统计了各类常见应用的碎片化,除了curl、rpm、chmod等已知病毒做污染的常见目标程序外,Nginx、httpd的碎片化趋势显然超出了正常区间;部分基础软件月均新增版本超过5000,构成了碎片化潜在威胁中的重点关注目标 。
根据前文披露的sshd后门检测阶段结果可知,常见程序的低安装量的版本往往直接预示着高度可疑,而从整体来看,这种低安装量、存在周期性迭代替换的“奇异”版本的大量存在和增长,即是当前面临的基础软件威胁表征 。同时,版本碎片化增长数量又呈现出与攻击事件时间热度相关的趋势,也佐证了基础软件污染已成为在野入侵事件组成成分 。
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
对抗方案:从单机审计到数据判别
? 样本分析审计的难点
针对已知类型、攻击思路和可疑代码目标位置的恶意程序,如果需要在单机上进行审计,排查是否中招,将面临以下困难: