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

auth_passwordsys_auth_passwdsshpam_auth_passwdauth_krb5_password虽然已有公开信息的原始sshd后门仅针对密码校验的auth_passwd函数,但在对活跃样本梳理后发现,在野恶意版本的恶意代码植入位置选择,已经涉及到了以上多种校验方法的几乎所有关联函数 。以下仅针对密码校验相关后门的花式实现做典型实例说明 。
? 典型sshd后门实现示例
后门连环:userauth_passwd、auth_password、sys_auth_passwd植入点案例
这是三个具有调用关系的函数 。userauth_password为外层接口,用于判断当前请求是否为密码更改,因此会提取用户请求中的密码明文,为特权登录密码植入留下机会 。该函数的原始代码与后门伪代码如下:

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

文章插图
而下一级会调用到auth_password函数,这里会无差别提取请求中的明文密码,并由配置判断分派,是否由系统KRB5(Kerberos)、PAM(Pluggable Authentication Module)还是原始账密方式执行校验 。这里的后门实现一般同时包含了特权密码植入和合法账密窃取落盘:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
而再下一级到sys_auth_passwd中,在正常的密码加盐哈希校验之前,同样也有后门实现直接进行明文密码比对,如下:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
对抗分析:多种后门的免杀实现
针对上述后门实现,人工判断做后门判断以及特征提取匹配也是相对简单的 。在避免使用加壳等全局代码混淆方式(这样一来更容易通过文件可疑点圈定样本)的前提下,现已发现多种朴素的免杀实现 。
首先是静态字符串的混淆,通过逐字节赋值避免引入字符串常量数据,规避特征串匹配:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
其次,针对人工分析中,需要根据函数代码逻辑与交叉引用指纹定位敏感函数的情况,对简单的auth_password做大范围代码改动和插入使其“面目全非”,规避人工审计:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
再次,根据ESET等外部披露的后门均将窃取的合法账号密码以固定格式化字符串记录到本地的特征,转为采用在代码中直接命令外传账密的方法,规避基于格式化字符串作为特征的静态扫描检测:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
稍微复杂一点的实现
Linux上的恶意程序广泛采用rootkit对恶意代码和行为进行隐藏;而sshd虽然采用无独立程序文件、无新增网络行为方式,但为了规避检测审计和后续入侵行为,下面的后门实例采用完全不同的实现:将窃取账密的功能有独立程序实现并内嵌在sshd母体中释放,同时为了隐藏该模块,额外释放安装一个内核态通用rootkit 。同时为了保证这些负载释放过程隐蔽可执行,将植入过程实现在了server_accept_loop消息循环中:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
当然,以上仅分析了sshd常规的后门花式实现,但植入少量代码可以实现的后门行为空间本身非常大 。现已发现同样有零散案例,后门不仅限于窃取系统账密凭证数据,如下例子实现了对其它应用敏感信息的检索外泄:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
? sshd后门攻击特征和发展趋势
2020年阿里云云安全中心开展对Linux基础软件的专项治理,其中以sshd后门为切入点,对主流后门做了分析和检测支持 。截至2020.07.10,上半年已检测的数据如下:
从病毒到“基础软件污染”,Linux 真的安全吗?

文章插图
从数据中,可以解读到如下信息: