工作来源
USENIX Security 2022
工作背景
全球 37%+ 的网站、63%+ CMS 网站都运行在 WordPress 上。但过去研究过 Google Play 应用商店中的恶意程序、Chrome Web Store 中的恶意扩展程序等位置的安全状况,却没有人评估 CMS 插件的安全状况,尽管插件市场每年的交易额会超过十亿美元。
利益相关方中,网站所有者并不一定了解安全、托管服务提供商看不到插件却要保证平台上没有恶意软件、插件市场不能对出售的插件进行安全评估。CMS 的运营者通常看插件市场上插件的流行度、评论和评级来确定需要什么插件,通常不会判断插件的恶意性。CMS 的大多数恶意插件甚至都不会采用规避或混淆技术,毫不掩饰自己的恶意行为。
恶意插件一般有四个来源:非法的插件市场、合法的插件市场、注入的插件、受感染的插件。分析七个最受欢迎的插件市场(三个未付费(WordPress 插件、WordPress 主题和 Github)和四个付费(ThemeForest、CodeCanyon、WPMU DEV 和 Easy Digital Downloads))的数据。
测量了 2020 年 7 月插件的下载量和价格信息:
通常都是免费的插件,付费插件通过插件市场(如ThemeForest、CodeCanyon、Easy Digital Downloads (EDD))出售,单个插件售价从 2 美元到上千美元不等。有些插件可以先试后买,这也催生了盗版插件的泛滥,并且插件市场的监督和安全意识也薄弱。
工作设计
YODA 是旨在检测恶意插件并追踪其来源的自动化框架,整体逻辑如下所示:
插件检测
CMS 并不强制要求插件按照规范开发,很多插件都不遵循编码规范也可以不放置在特定的插件目录中。
YODA 通过 ① 元数据分析识别插件根文件 ② 代码分析识别插件关联文件
元数据分析
通过正则表达式匹配文件注释识别插件根文件(包含特殊格式的块注释,其中包含插件元数据),如果删除元数据信息 WordPress 就不会加载该插件。如下所示:
代码分析
通过解析目录中文件的抽象语法树(AST),利用对程序模块进行排名的常用方法(插件头、调用次数、API 调用册数)识别插件文件与非插件文件。可靠性判断分数阈值设置为95%。
插件的状态有添加('A')、修改('M')、未更改('NC')或删除('D'),有效插件状态分别为“A”、“D”或“NC”。
恶意行为检测
调查了很多恶意插件,确定了 14 种不同的恶意行为,例如 WebShell、挖矿、黑帽 SEO 等,如下所示:
YODA 通过使用所有插件代码文件的语法特征(例如,文件元数据、敏感 API)和上下文感知语义特征(例如,具有已解析文件依赖关系的 AST)来检测恶意行为。
语法分析的 API 如下所示:
语义模型如下所示:
工作准备
CodeGuard 收集了超过 40 万个 WordPress 网站(来自其活跃用户)的相关数据,时间跨度从 2012 年 7 月到 2020 年 7 月。数据集保持匿名,且用户不使用 CodeGuard 的服务后相关数据会被立即删除。
YODA 是开源的,评估在两个场景下进行:
-
小规模评估使用的工作站运行 Ubuntu 16.04,具有 32GB 内存和 8 x 3.60GHz Intel Core i7 CPU
-
大规模评估使用 8 个虚拟 CPU 和 64 GB RAM 的 Amazon Web Services (EC2) r5.2xlarge 实例在网站备份上运行 YODA。这些实例由 AWS Batch 作业调度引擎监督,以在数百个备份上并行部署 YODA
工作评估
使用了 2018 年 4 月至 2021 年 2 月期间收集的 120 个不同的 WordPress 网站。其中 60 个受到基于模式的 AV 分类的网络攻击的危害,其余 60 个是随机选择的无偏见网站。
插件检测
网站所有者经常会自定义修改插件,检测到的每个插件是否是:(1) 完全匹配 (EM),(2) 与定制匹配的真阳性 (C),(3) 假阳性 (FP),即,YODA 标记了一个不存在的插件,或 (4) 假阴性 (FN),即 YODA 错过了将一组文件标记为插件。100% 匹配上为 EM、90% 匹配上为 C、匹配不到 90% 为 FP。
一共发现了 3168 个插件,YODA 正确检测到了 3129 个插件,准确率为 98.7%。其余 39 个插件中只有 11 个是被错误识别为插件的普通文件,28 个使用自定义 API 替换 WordPress 提供的 API,定制化使其低于 90% 的阈值。超过一半的插件都更新到了最新版本,但仍有三分之一的插件已经过时了。
恶意行为检测
手工验证了 3132 个插件并标记了恶意行为,YODA 检测出 89 个插件是恶意的,而人工标记了 84 个插件是恶意的,有五个插件属于误报。误报的原因例如 VirusTotal 将 URL 误报为恶意。
数据集中有 60 个存在漏洞的网站,其中 58 个网站包含恶意插件。
在 410122 个 WordPress 网站的完整数据集上部署 YODA,这些网站有 1 到 68 个插件不等,平均有 49 个插件。
恶意行为演化
在 24931 个网站中发现了恶意插件,与 WebShell 和代码混淆有关的插件都超过了一万个。
IR>3 意味着同一网站内的多个插件包含相同的恶意行为,是由于恶意插件感染了良性插件导致的。
恶意插件的数量在 2020 年 3 月达到顶峰。回顾过往,2016 年首次发现垃圾邮件注入、2017 年首次发现恶意广告、2019 年首次发现单点登录后门。
来自合法插件市场的恶意插件甚至都没有使用代码混淆,攻击者都知道使用者在安装前也不会检查安全性。
注入的恶意插件中,超过80%包含假冒插件、WebShell 或代码混淆。
一共有超过 4 万个插件在部署后被感染,其中超过一半使用了 Input Gating 阻止其他攻击者,其余大部分都是 WebShell、代码混淆和 Downloader。
合法插件市场中,有些恶意插件下载量非常大,甚至接近 100 万。77% 的盗版插件都有在付费插件市场上出售,64% 的受感染插件都集中在七个插件市场中。
由于 WP Plugins 和 WP Themes 的插件被广泛使用,它们也经常被感染。来自 WP Themes 和 WP Plugins 的 34.2% 和 23.8% 的插件成为插件感染的受害者。
尽管为付费市场的插件支付了溢价,但其中很大一部分仍然被感染了,即 WPMU DEV 的 8.2%、CodeCanyon 的 19.3%、ThemeForest 的 18.4% 和 EDD 的 23.3%。网站所有者在这些插件上总共花费了 83.4 万美元,却发现仍然产生了损失。这包含了从合法和盗版市场安装恶意插件所产生的恶意软件清理的额外隐含成本。
盗版插件如此流行让人惊讶,每 6223 个网站就有一个盗版插件,这些盗版插件通常通过 SEO 优化的排名很高。
97% 的盗版插件都与恶意行为有关,且 theme123.net、thelot.net 这种市场的所有盗版插件都是恶意的。
清理
平均只有 10.8% 的网站会尝试清理恶意插件,其中来自合法市场的恶意插件有 24.1% 会被清理,而盗版插件只有 6.7% 会被清理。
在尝试清理恶意插件的 2697 个网站中,12.5% 的网站会被重新感染。在测量评估时,有 94% 的网站仍处于感染中。
持久性
被发现的天数中位数在 189-209 天,这意味着有超过 50% 的插件会潜入持续超过 6 个月。
超过 60% 的网站所有者不启用自动更新并使用过时的插件版本。如果这些网站所有者碰巧从合法市场安装了恶意版本的插件,它会持续数月或数年。
有 25% 的盗版插件会持续超过 232 天,比盗版插件更持久的是注入插件,超过 75% 的注入插件至少活跃 177 天,有超过 25% 的注入插件可以活跃至少 525 天。
案例一:恶意网址
2019 年发现的恶意广告攻击行动相关的域名中,大部分是在 2018 年创建的,但攻击行动在 2021 年达到顶峰。
案例二:垃圾邮件
2016 年开始,攻击者开始利用 WordPress 插件分发垃圾邮件。攻击者不仅注入垃圾邮件,还收集失陷网站的访问者信息。
工作思考
分析使用的静态检测存在局限,应用动态分析的话可以进一步提高覆盖率。不过实际效果其实已经不错了,更应该关注的是如何开发一个能帮助使用 CMS 的用户来扫描恶意插件。如何清理可能是另一个问题,起码我们要能够检测。
CMS 的恶意插件已经变成“房间中的大象”了,其实大家都知道恶意插件非常多而且影响也很大,但是一直都没有人对整体的恶意插件情况进行一个普查。这次大规模测量的结果实际上还是触目惊心的,恶意插件的使用和防范还是要受到重视的。
原文始发于微信公众号(威胁棱镜):WordPress 生态中恶意插件的大规模研究
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论