En

源头之战,不断升级的攻防对抗技术 —— 软件供应链攻击防御探索

作者:【腾讯安全平台部数据安全团队】 七夜&柯南公布时间:2020-01-02阅读次数:2032评论:0

分享

作者:【腾讯安全平台部数据安全团队】 七夜&柯南

前言:

近几年软件供应链攻击(Software Supply Chain Attack)事件被越来越多的披露,引起了安全行业的关注,大部分安全公司都有专门的研究,阿里安全还专门举办过软件供应链安全大赛。因为这种攻击对象范围广、攻击方式隐蔽,危害大,给企业安全防护带来了极大的挑战。腾讯安全平台部很早就开始关注研究软件供应链攻击,最早可以追溯到2012年,腾讯自研的服务器安全系统“洋葱”就检测到某个分发节点上的phpmyadmin被植入后门(CVE-2012-5159)。2015年,TSRC团队在排查异常过程中也发现了针对苹果开发者的xCodeGhost事件,轰动一时。近期我们也发现一些python第三方包被植入木马,已经通报官方和受影响的软件源。 

近几年脚本语言社区因管控薄弱、攻击成本低成为软件供应链攻击的重灾区。本文分享一下我们应对脚本类软件供应链攻击的一些安全建设思路,欢迎交流探讨。 

一、 软件供应链攻击介绍


1、Jeilyfish vs Jellyfish
最近,PyPI社区发现一个名为Jeilyfish的恶意包,jeilyfish模仿正常包jellyfish,在原有功能上插入恶意代码,从受感染的开发人员的项目中窃取SSH和GPG密钥及其他敏感文件。注册和正常包相似的软件包名是最简单也最常用的软件供应链攻击方式,成本极低。
这就是一起典型的软件供应链攻击,由此也暴露出了脚本语言社区极易遭到投毒的现实情况。

(Jeilyfish官方源感染全球分布) 


2、软件供应链攻击环节


软件供应链主要分三个环节,每个环节都可以被攻击 。

2.1- 生产节点被攻击(开发软件) 

软件开发涉及到的软硬件开发环境、开发工具、第三方库、软件开发实施等等,并且软件开发实施的具体过程还包括需求分析、设计、实现和测试等,软件产品在这一环节中形成最终用户可用的形态。 
  • 攻击案例:xCodeGhost[附1], xshell攻击[附2] 

2.2- 交付节点被攻击(软件上线的平台、硬件) 
 
用户通过软件官网、公共仓库、在线商店、免费网络下载、购买软件安装光盘等存储介质、资源共享等方式获取到所需软件产品的过程。受攻击对象比如著名的软件下载站、Python官方镜像源、Github等。 
  • 攻击案例:中文版Putty后门事件[附3]、思科后门事件[附4] 

2.3- 使用节点被攻击(软硬件使用者) 

使用软硬件产品的整个生命周期,包括产品更新升级、维护等过程。 
  • 攻击案例:powercdn软件升级劫持攻击[5] 

根据赛门铁克2019 年《互联网安全威胁报告》,供应链攻击和离地攻击现已成为网络犯罪的主流:2018年供应链攻击增加了78%。特别在很多发布平台的安全能力较弱甚至没有的情况下,软件供应链攻击仅需要作者的一个上传、发布即可轻松完成钓鱼。

二、软件供应链攻击防御思路


1.自建内部软件源


企业在内部自建软件源,软件源限定官方来源、加密同步协议(https)。内部软件源可以控制收敛源头,在发生安全事件时可以不依赖外部快速阻断,通过审计日志也可以快速溯源止损。同时内部软件源通过多源指纹验证、蓝军演习等加强安全能力。比如腾讯的开源软件镜像站“腾讯云软件源”(https://mirrors.cloud.tencent.com)就是腾讯自建的源,我们团队对它进行了严格的安全加固,腾讯蓝军也对其进行过多次安全测试,同时还部署了后文提到的一系列软件供应链攻击检测措施,推荐大家放心使用。 

2.主机安全检测


在服务器以及办公终端部署安全系统来检测文件和程序行为。腾讯内部服务器主要是通过洋葱系统、终端通过iOA来进行安全检测,检测方案主要有静态检测和行为检测,简单介绍如下: 

2.1 静态检测 

静态检测主要是对文件进行安全扫描,用到的方法主要有: 

1. 威胁情报关联:威胁情报来源一方面是外部公开的及合作伙伴分享的情报,另一方面是常年分析腾讯/腾讯云外部攻击流量积累的恶意情报;
2. 规则匹配:在规则建设上我们主要通过以下两个方法来建设,一是根据人工安全分析/安全经验提取特征规则,另外一个方法是收集外部样本提炼特征形成规则;
3. 机器学习模型:近期也在研究机器学习模型,通过训练大量黑白样本生成恶意文件判断模型。 

2.2 行为检测 

行为检测方案通过监控服务器的异常行为来发现软件供应链攻击,包括命令执行、域名访问、网络连接等行为;安全系统实时采集服务器/终端行为数据传到后台大数据平台进行实时分析,综合使用规则匹配、白名单模型、统计分析、关联分析等多种方法发现异常行为并告警。 

2.3 案例分享 

2012年,PHPMyAdmin的某国分发节点被黑客入侵,黑客篡改了其中一个PHP文件,植入了Web后门。有一个同事正巧通过该节点下载了PHPMyAdmin,部署到测试环境的时候WebShell被服务器上的安全系统“洋葱”检测出来,经过当时数据安全团队的高手xti9er、chouqiu等同学跟进分析最终确认是一起软件供应链攻击,同时通过TSRC将情况报告给了官方,最终修复了问题。 

3.主动扫描


以上检测方案处于事中和事后,均属于被动防守,当面对低成本的脚本类供应链攻击,应急压力极大,团队增加了主动扫描方案,提前发现风险,减少攻击面。 

3.1 检测思路 

1. 下载代码静态扫描,类似主机安全检测的静态扫描,此处不再重复介绍,静态扫描的优点是:速度快,但误漏报相对较多。
2. 系统沙盒动态检测,通过沙箱进行syscall和流量监空,优点是可以准确捕捉程序行为,不受代码混淆的影响。缺点是建设、运营成本高;对于存在对抗的恶意代码,系统沙箱无法正常触发其恶意代码逻辑,脚本类恶意代码,定位成本相对较高,以npm和pypi软件源检测为例,一个软件包一般由多个脚本组成,当沙箱捕获到一个外连请求,无法确认是哪个脚本发出的。
3. 软件包信誉评估,根据各大软件交付平台的软件包基础信息进行信誉评估,包括上架时间,访问次数,代码大小,文件名、fork次数等等,建设信誉评估模型,对低信誉的包进行安全报警,优点是场景通用,速度快。
4. 应用层沙盒动态检测,针对解释型语言做应用层沙盒动态检测,应用层沙盒的优点是可以轻松定制触发场景、模拟各种用户调用,触发潜藏的恶意行为,覆盖率高;近期我们上线了Python应用沙盒,以函数劫持方式监控pypi包的网络连接,命令执行和文件读写等行为,建立精确行为链模型,而且通过回溯的方式,可以清晰地知道异常行为产生于哪一个包里哪一个脚本的具体哪一行代码。 

3.2 案例分享 

通过本检测方案,我们在国内外的各软件源中发现了信息收集、恶意关机、窃密、反弹shell、远程木马下载执行、远控等多种恶意功能的包。
下面从我们发现的恶意包中,根据触发方式的不同选择几个典型案例,来介绍一下钓鱼包的常用手法(已通知各源进行下架删除)。 

3.2.1自动触发类 

以pyscrapy为例,恶意代码存在于setup.py中,当用户在使用pip install 命令安装包时,则会自动触发恶意行为,远程下载木马执行。

恶意包代码片段截图:

 

3.2.2 被动触发类

(1) libpeshnx
libpeshnx比较典型。在setup.py中,setup函数里的entry_points参数可以用来动态发现服务和插件,常见的应用是设置entry_points中的console_scripts变量,将我们的安装包变成一个系统命令进行调用。示例如下: 




将包安装成功后,用户只需要执行funniest-joke命令,就直接调funniest.command_line包中的main函数了。这种钓鱼包相对隐蔽,用户在执行命令后才会触发恶意行为,虽然隐蔽,但也增加了钓鱼的成本,降低了成功率,一般大家安装pypi包是进行调用开发,直接当做命令来执行的情况相对少一些。
entry_points除了console_scripts,还有setuptools.installation变量,都有相似的功能。libpeshnx采用的是setuptools.installation这种方式,生成一个可执行的egg文件,只要用户执行该文件就会执行包中的恶意代码: 




(2) jeilyfish/python3-dateutil

jeilyfish钓鱼攻击不同以往的案例,非常隐蔽。使用了子母包加载方式,子包jeilyfish 提前母包一年上线,并实施了信誉欺骗、代码混淆等措施,进行检测对抗(npm官方源后台有包名相似度检测,可进行一定程度防护,pypi源审核相对宽松)。
信誉欺骗:通过填写真实的jellyfish 官方托管地址伪造 libraries 上的 SourceRank 信誉信息 。



代码混淆:在真实 jellyfish 包中,插入一段混淆的恶意代码,该代码外联下载恶意代码并执行,主要功能为窃取 SSH、 GPG 密钥和一些敏感文件 。




三、不足与思考


目前的各检测方案也存在其不足。 

应用层沙盒的检测成本较高,在使用docker集群作为隔离环境,应用的过程中,docker容器并不是想象中地那么稳定,做好异常监控,状态保存和重试机制很关键,且应用层沙盒属于动态检测,虽然准确精细,但是需要做多语言适配,还是有一定的工作量。 

静态检测虽然成本较低,但对于未知的混淆、绕过手法非常容易出现漏报。 

上面介绍的四种解决思路各有其优缺点,并不是相互替代的关系,充分发挥出各自检测方案的扬长避短,形成一个整体监控方案,也是需要在运营实战中不断总结出来的。 

四、附录

[1] xCodeGhost:https://security.tencent.com/index.php/blog/msg/96
[2] xshell攻击:https://security.tencent.com/index.php/blog/msg/120
[3] 中文版Putty后门事件:https://www.cnbeta.com/articles/tech/171116.htm
[4] 思科后门事件: https://www.guancha.cn/TMT/2014_03_31_218296.shtml
[5] powercdn软件升级劫持攻击:https://www.freebuf.com/news/140079.html



评论留言

提交评论 您输入的漏洞名称有误,请重新输入