Android设备攻击技术解析
立即解锁
发布时间: 2025-08-31 01:49:33 阅读量: 12 订阅数: 36 AIGC 


密码学与网络安全前沿
# Android 设备攻击技术解析
## 1. 攻击启动阶段
### 1.1 浏览器启动
在攻击的下一步,攻击者会使用受其控制的网站启动目标浏览器,目的是欺骗用户授予攻击者网站必要的权限。
在 Android 系统中,应用之间的通信是通过意图(intent)实现的。此时,攻击者已知特定浏览器的包名,因此会明确地使用目标 URL 启动选定的移动浏览器应用,而非启动隐式意图。
当攻击者应用发送带有目标 URL 的意图时,系统会根据浏览器的意图过滤器搜索能够处理该意图的浏览器。`ResolveInfo.activityInfo.packageName` 返回包名,`ResolveInfo.activityInfo.name` 根据设备的当前配置返回用于处理该意图的浏览器的启动活动。
在 Android 设备上打开目标网站有两种方式:
- 通常,当用户点击链接或应用启动带有网站请求的意图时,Android 操作系统会调用默认的移动浏览器打开目标网站。
- 应用也可以通过请求操作系统在 WebView 中加载网站,将目标网站内容嵌入到其屏幕中。
由于攻击旨在访问敏感数据,避免请求任何权限以不引起怀疑至关重要。在第一种方式中,Android 应用通常需要 `android.permission.INTERNET` 权限才能访问互联网服务,但 Android API 提供了几种无需此权限即可请求目标网站并窃取捕获数据的方法,例如通过意图请求网站的 URI,攻击者应用可以绕过此权限。
若要将网页内容纳入移动应用的 WebView 中,原始应用必须拥有适当的权限以进行授权访问。然而,如果应用委托移动浏览器来获取此类访问权限,实际上是将获取权限的责任委托给了浏览器,浏览器则充当代理,保护攻击者应用。
由于 Android 操作系统缺乏限制,URL 活动可以被启动,这使得任何网站(即使是攻击者控制的恶意网站)都可以由浏览器代表攻击者应用启动。
### 1.2 数据收集与权限挑战
在这次代理攻击中,攻击者利用受其控制的目标网站。该网站允许攻击者嵌入 JavaScript(JS)代码来收集位置、麦克风、摄像头以及与设备相关(如操作系统、设备内存和电池电量)的数据。JS 中的 `window.navigator` 对象提供了有关用户设备和环境的信息。例如,要收集位置信息,可以将 `window.navigator` 对象与地理定位 API 结合使用,该 API 允许网站访问用户的位置;要收集麦克风和摄像头信息,`MediaDevices` API 可以提供对用户麦克风和摄像头的访问。在这两种情况下,都需要用户授予适当的权限。
此时,攻击者面临两个挑战:
- **权限问题**:一些设备信息(如设备型号、时区)无需权限任何应用都可以获取,但更敏感的数据受到保护。在设置步骤中,攻击者应用可以查看设备移动浏览器应用上已授予的权限,这大大简化了攻击,并允许调用已被授予保护目标数据权限的浏览器。例如,访问手机摄像头依赖于 Android 操作系统规定的运行时权限,这意味着浏览器首次尝试访问摄像头时,用户会被提示授予此权限。为提供额外的保护,当网站请求访问摄像头时,浏览器会要求额外确认。如果浏览器已获得权限,任何尝试访问摄像头的网站都会触发提示,要求用户进一步同意。因此,如果攻击者应用能够操纵用户在其网站上给予此确认,攻击者的网站就可以在无需进一步提示用户的情况下访问摄像头。不过,也有可能所有浏览器都尚未获得必要的权限,这就要求攻击者先获取权限,然后在不引起用户怀疑的情况下提示用户批准访问摄像头。
- **浏览器可见性问题**:带有目标网站的浏览器会显示在前台,因此其活动和后续的用户提示对用户是可见的。
### 1.3 使用覆盖层解决挑战
攻击者使用覆盖层来解决这两个挑战。此前有多项研究探讨了使用覆盖层进行 Android UI 欺骗的技术,这些技术包括绘制吐司消息到执行点击劫持式攻击。本研究开发的攻击者应用使用了这些攻击的变体来隐藏浏览器的活动并悄悄获取权限。
攻击将覆盖层与吐司窗口相结合,吐司窗口是一种在屏幕上显示有限时间的小文本消息弹出窗口。即使在无关应用控制主屏幕时,吐司消息也可以在不获得明确权限的情况下绘制在顶级视图窗口之上。
在代理攻击中,调用吐司覆盖层有两个目的:
- **隐藏浏览器行为**:通过在主机视图(移动浏览器屏幕)顶部添加覆盖层,攻击者应用可以完全遮挡目标网页的内容以及移动浏览器已启动的事实。吐司窗口通常用于快速消息,如通知,因此通常显示 3.5 秒或 2 秒。攻击者会持续调用吐司以在所需时间段内提供覆盖层。为创建吐司覆盖层,使用了 `Handler` 类和 `Looper` 对象,它们负责为应用线程创建消息队列(在此次攻击中是自定义吐司)。攻击者应用使用 `Handler.postDelayed()` 方法,在并行线程中同时启动自定义吐司覆盖(`OuterHandler`)和启动目标浏览器(`InnerHandler`),这样主用户界面(UI)不会被阻塞。这种非阻塞机制允许吐司的长时间运行操作在设备屏幕上显示,而不会阻塞主线程,保持攻击者应用的覆盖界面响应灵敏,避免出现应用无响应(ANR)错误。吐司覆盖在攻击者应用的主线程完成扫描目标浏览器上已授予的权限(如摄像头权限)后立即启动,屏幕被自定义吐司覆盖接管,然后启动目标浏览器。这个顺序隐藏了底层过渡,并呈现出用户期望的工作流程。
- **欺骗用户**:吐司覆盖视图还旨在欺骗用户并引发必要的屏幕点击。吐司覆盖呈现出看起来
0
0
复制全文
相关推荐









