谷歌BugSWAT | 无恒实验室针对安卓应用的供应链攻击研究

一、背景

近日,BugSWAT 2023在东京顺利落幕,字节跳动无恒实验室研究员受邀参加主题演讲。

BugSWAT 2023由Google主办,伴随着今年的Hackeler8 CTF决赛开展。会议邀请了全球的安全专家,共同探讨安全洞见和分享前沿技术。受邀研究者均来自Android、Chrome等项目的顶级漏洞研究专家。

来自无恒实验室的安全研究员胡天易带来的议题是《针对安卓应用的供应链攻击 》,通过拿到域名的所有权进而影响Android供应链安全。攻击者可以通过基于针对maven源的同名组件污染安卓供应链,从而达到攻击的效果。同时他还分享了一个Google未能正确修复安卓系统漏洞的案例,该问题使得多个高危系统漏洞在未修复的情况下被公开披露。

二、Android应用程序的依赖管理

在Android应用开发中,主流的依赖管理系统由Gradle和Maven组成。单个Maven组件由group、artifact、version唯一标识,即GAV,例如com.google.android.gms:play-services-ads:22.4.0。实际项目中,开发人员可以引用任意Maven源,但他们通常使用几个主要的公开源,如Google和Maven Central。另一方面,在较大的组织中,总会存在一些私有Maven源用于托管自研组件。有时组织内部也会存在Maven源代理组(proxy group),方便开发人员通过一次引用使用多个源。

在项目中引用多个Maven源的时候,除非特别声明,否则Gradle会按照源声明的顺序去查找特定的库

三、攻击思路

由于Gradle默认按照引用顺序查找特定组件,我们可以通过同名组件的形式实现供应链攻击,例如对以下声明:

rust 复制代码
repositories {
    mavenCentral()
    maven {
        url 'https://some-self-hosted-maven.com'
    }
}

implementation 'com.somedomain.dev:lib:1.0.0'

开发者原本的预期是从私有源下载com.somedomain.dev:lib:1.0.0,然而Maven Central在私有源之前被引用,假如攻击者在Central源上传同名组件,实际构建时Gradle会选择Central而非私有源,如下图所示:

要实现这一效果,攻击者需要

  1. 注册somedomain.com这一域名,原因是Maven Central以域名所有权进行鉴权。即somedomain.com域名的所有者可以上传任意group前缀为com.somedomain的组件到Central源;
  2. 上传恶意组件到Central的同一坐标,即com.somedomain.dev:lib:1.0.0;
  3. 等待项目重新构建,完成恶意代码嵌入。

通过这一思路,我们实际上将Android组件的供应链安全性和特定域名的所有权关联在了一起。值得注意的是,部分项目可能受到过期域名的影响,使得原本安全的源重新存在风险。例如,由于mule.org这一域名已经过期并可以购买,以下引用方式就可能受到攻击:

rust 复制代码
repositories {
    mavenCentral()
    maven {
        url 'https://repository.mulesoft.org/releases/'
    }
}

implementation 'org.mule.xxx:artifact:version'

其中org.mule.xxx:artifact:version应当从mulesoft Maven源下载,然而mule.org已经过期,任何人都可以购买并在Maven Central上传同名组件,进而造成供应链攻击。

四、如何避免

安全人员应当检查:

  1. 组织内部是否存在私有Maven源或Maven源代理组
  2. 在内部的安卓项目(包括应用和组件)及代理组中,是否使用正确顺序引用Maven源,即内部私有源优先;
  3. 必要的时候使用include或exclude规则来显式指定从哪个源下载组件;
  4. 组织是否存在Android组件命名规则,保证所有组件的group均为组织所有的域名,例如所有组件group都以com.google.作为前缀。

五、关于无恒实验室

无恒实验室(security.bytedance.com/security-la... Hat等顶会会议和期刊。

未来,无恒实验室将继续深耕移动安全和隐私安全,与业界共享研究成果,协助企业避免安全风险;亦希望与业内同行共同合作,为网络安全行业的发展做出贡献。

相关推荐
DevSecOps选型指南7 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
ABB自动化7 小时前
for AC500 PLCs 3ADR025003M9903的安全说明
服务器·安全·机器人
恰薯条的屑海鸥7 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十六期-SSRF模块)
数据库·学习·安全·web安全·渗透测试·网络安全学习
阿部多瑞 ABU8 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试
androidwork10 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·java·kotlin·androidx
每次的天空10 小时前
Android第十三次面试总结基础
android·面试·职场和发展
moongoblin10 小时前
行业赋能篇-2-能源行业安全运维升级
运维·安全·协作
Fortinet_CHINA10 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
网络·安全
wu_android10 小时前
Android 相对布局管理器(RelativeLayout)
android
这儿有一堆花12 小时前
安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
linux·服务器·安全