前言

国外研究人员披露了Android漏洞(CVE-2018-9489)的信息。Android系统的内部广播机制会暴露敏感的用户和设备信息,手机上安装的应用可在用户不知情或未经许可的情况下访问获取这些信息。

Android系统的内部广播机制泄露的数据包括:Wi-Fi网络名称、Wi-Fi网络BSSID,本地IP地址、DNS服务器信息和设备的MAC地址等详细信息。部分信息(如Mac地址)在Android 6版本以上无法通过这个漏洞获取,但是剩下的依然可以通过监听广播来绕过权限检查和其他防范措施。

背景

Android是谷歌开发的用于手机和平板电脑的开源操作系统,保守估计全球有超过20亿台设备运行Android。Android上的应用程序通常与系统隔离,但是通过几种机制仍然可以实现应用程序的进程与操作系统间的交互。

比如说这次问题的源头。Android提供了“ Intent ”作为进程间的通信方式之一,该机制允许应用程序或系统发送可由其他应用程序收听的消息。尽管开发人员可以选择关闭或限制这个机制,但是在实践过程中工程师往往疏于部署限制机制或屏蔽敏感数据。这就导致了上文中的Android漏洞,手机上的恶意软件可以监听并捕获其他应用程序广播的消息。

安卓系统提供的最常见的安全机制是权限控制,旨在保护用户的隐私信息不受侵害。应用程序必须通过应用程序清单(“ AndroidManifest.xml ”)中的特殊“ uses-permission ”标记明确请求访问某些信息或功能。根据许可的类型(如“正常”、“危险”等),系统可以在应用安装期间向用户显示授权信息,或者在运行期间再次提示。某些权限只能由系统应用程序使用,并且不向第三方开发人员开放。

Google Play和运行时的应用程序权限截图:

漏洞详情

Android系统通过“ Intent ”机制广播有关Wi-Fi连接和Wi-Fi网络接口的信息:

WifiManager的NETWORK_STATE_CHANGED_ACTION

WifiP2pManager的WIFI_P2P_THIS_DEVICE_CHANGED_ACTION

这些信息包括设备的MAC地址、Wi-Fi接入点的BSSID、网络名称以及本地IP、网关IP和DNS服务器地址等信息。此信息可供用户设备上运行的所有应用程序使用。

虽然应用程序也可以通过WifiManager访问此信息,但这样的话需要应用程序清单中的“ ACCESS_WIFI_STATE ”权限。通过Wi-Fi进行地理定位通常需要“ ACCESS_FINE_LOCATION ”或“ ACCESS_COARSE_LOCATION ”权限。此外,在Android版本6.0及更高版本中,设备的实际MAC地址不再通过API提供,并始终返回地址“02:00:00:00:00:00”。然而,监听系统广播的应用程序不需要这些权限,因此允许在不知道用户的情况下捕获该信息,并且甚至在Android 6或更高版本上捕获真实MAC地址。

尝试在Android 7.0中获取MAC地址的应用截图:

研究人员使用多款硬件和不同Android版本进行了测试,结果显示所有测试设备和Android版本都可以复现这个问题,尽管某些设备未在“ NETWORK_STATE_CHANGED_ACTION ”Intent中显示实际MAC地址,但它们仍在“ WIFI_P2P_THIS_DEVICE_CHANGED_ACTION ”Intent内。同时由于MAC地址是固定且与硬件绑定,所以哪怕设备的MAC地址是随机化的,也可以用它来识别和跟踪任何Android设备。而针对网络名称和BSSID信息,可通过查询BSSID数据库(如WiGLE或SkyHook)来定位用户。恶意软件可以使用这些网络信息来进一步试探和攻击本地Wi-Fi网络。研究人员表示所有版本的Android系统均会受到影响,包括各种分支,如亚马逊的Kindle FireOS。谷歌在Android P/9中修复了这个问题,但不会为旧版本的系统提供更新,建议用户升级到Android最新版本。

问题复现

通过应用程序

对于Android设备用户,可以按如下方式复制这些问题:

1. 安装Vilius Kraujutis开发的“Internal Broadcasts Monitor”应用。

2.  打开应用,然后点击“Start”开始监控广播信息。

3.  观察系统广播信息,特别是“android.net.wifi.STATE_CHANGE”和“android.net.wifi.p2p.THIS_DEVICE_CHANGED”这两条。

示例:

通过代码

使用代码复现,需要创建一个广播接收器并注册以接收这些信息:

android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION

android.net.wifi.WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION

示例代码如下所示:

public class MainActivity extends Activity {

@Override

public void onCreate(Bundle state) {

IntentFilter filter = new IntentFilter();

filter.addAction(

android.net.wifi.WifiManager.NETWORK_STATE_CHANGED_ACTION);

filter.addAction(

android.net.wifi.WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

registerReceiver(receiver, filter);

}

BroadcastReceiver receiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

Log.d(intent.toString());

….

}

};

后续

因为这是一个重大的API变更,谷歌仅在Android P/9中修复了这个问题,旧版的Android系统不会得到更新,建议用户升级到Android P/9或更高版本。

Android系统广播机制存在漏洞,恶意软件可绕过安全机制跟踪用户的更多相关文章

  1. Android系统广播处理机制

    Android系统中的广播是广泛用于应用程序之间通信的一种手段,它类似于事件处理机制,不同的地方就是广播的处理是系统级别的事件处理过程(一般事件处理是控件级别的).在此过程中仍然是离不开Intent对 ...

  2. Struts2漏洞利用原理及OGNL机制

    Struts2漏洞利用原理及OGNL机制研究   概述 在MVC开发框架中,数据会在MVC各个模块中进行流转.而这种流转,也就会面临一些困境,就是由于数据在不同MVC层次中表现出不同的形式和状态而造成 ...

  3. Android证书验证存漏洞 开发者身份信息可被篡改(转)

    原帖地址:http://bbs.pediy.com/showthread.php?p=1335278#post1335278 近期在国内网易,雷锋网等网站爆出谷歌市场上的索尼官方的备份与恢复应用&qu ...

  4. android签名分析及漏洞修复

    本篇我们来看看android的签名机制.发布出来的apk都是有META-INF文件夹,里面包含如下三个文件: 下面来一一解释这三个文件的作用(打包apk时签名过程):SignApk.main() 1. ...

  5. android 进程/线程管理(四)续----消息机制的思考(自定义消息机制)

    继续分析handler 和looper 先看看handler的 public void dispatchMessage(Message msg) { if (msg.callback != null) ...

  6. android ioctl fuzz,android 本地提权漏洞 android root

    目前正在研究android 三方设备驱动 fuzzer , 也就是下图所说的 ioctl fuzzing, 下图是由keen team nforest 大神发布: 欢迎正在研究此方面的人联系我共同交流 ...

  7. wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...

  8. android 系统广播

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00012731 String ADD_SHORTCUT_ ...

  9. ZT Android 4.2 BT系统之蓝牙关闭过程全跟踪

    Android 4.2 BT系统之蓝牙关闭过程全跟踪 分类: android 2013-08-03 00:34 2252人阅读 评论(10) 收藏 举报 代码位置:       frameworks/ ...

随机推荐

  1. Could not apply the stored configuration for monitors

    在用户目录下$user.home/.config/monitors.xml,要解决上面的问题,最简单的办法就是删除这个monitors.xml文件,重启一下电脑

  2. 14:Spark Streaming源码解读之State管理之updateStateByKey和mapWithState解密

    首先简单解释一下)) //要使用updateStateByKey方法,必须设置Checkpoint. ssc.checkpoint("/checkpoint/") val sock ...

  3. vscode debugger for chrome 调试webpack的配置问题

    module.exports = { entry: './app.ts', output: { filename: 'bundle.js', publicPath: '/assets', devtoo ...

  4. 湖南大学ACM程序设计新生杯大赛(同步赛)H - Yuanyuan Long and His Ballons

    题目描述 Yuanyuan Long is a dragon like this picture?                                     I don’t know, ...

  5. 使用Jedis

    前言 借助Jedis可以在Java上操作Redis. Jedis 到https://mvnrepository.com/去找jar包下载即可. 如果是maven项目: <!-- https:// ...

  6. 备份Kylin的Metadata

    元数据是Kylin中最重要的数据之一,备份元数据时运维工作中一个至关重要的环节.只有这样,在由于误操作导致整个Kylin服务或某个Cube异常时,才能将Kylin快速从备份中恢复出来. Kylin组织 ...

  7. 第9天-BOM和DOM

    什么是DOM 文档对象模型(Document Object Model),DOM作用:可以去修改网页内容.样式.结构. 每个浏览器都会把html文档解析成dom树,就可以用相关方法和属性操作网页元素 ...

  8. aop相关术语

    AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面的编程.并不是全部的AOP框架都是一样的.他们连接点模型的功能可能有强弱之分,有些可以字段,方法,构 ...

  9. Code forces363D Renting Bikes

    Renting Bikes Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Subm ...

  10. UVALive 6907 Body Building

    题目链接:https://vjudge.net/problem/UVALive-6907 题意: 给出一张图,判断这张图中有多少个哑铃,哑铃判断的条件是,对于一个连通图:如果找到一条边连接这两个点的个 ...