前言

国外研究人员披露了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. 小甲鱼Python笔记(下)

    二十八 二十九  文件 打开文件 open(文件名[,模式][,缓冲]) 注意open是个函数不是方法 模式: 缓冲: 大于1的数字代表缓冲区的大小(单位是字节),-1(或者是任何负数)代表使用默认缓 ...

  2. 【原创】Scrapyd 的 .net 客户端

    最近项目需要部署Scrapy爬虫,采用最简单的Scrapyd服务进行部署,基于.net core 进行了客户端的封装. 1)Scrapyd API文档:http://scrapyd.readthedo ...

  3. 113. 路径总和 II

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...

  4. LCA:倍增与tarjan

    学了好久(一两个星期)都没彻底搞懂的lca,今天总算理解了.就来和大家分享下我自己的心得 首先,如果你还不懂什么是lca,出门左转自行百度 首先讲倍增 倍增的思想很简单,首先进行预处理,用一个深搜将每 ...

  5. Django实现单用户登录

    最近由于要毕业了写论文做毕设,然后还在实习发现已经好久都没有写博客了.今天由于工作需求,需要用Django实现单用户登录.大概意思就是跟QQ一样的效果,每个账号只能一个地方登录使用,限制账号的登录次数 ...

  6. Mat矩阵(图像容器)创建及CV_8UC1、CV_8UC2等参数详解

    CV_<bit_depth>(S|U|F)C<number_of_channels> 1--bit_depth---比特数---代表8bite,16bites,32bites, ...

  7. HDU 6060 RXD and dividing(dfs 思维)

    RXD and dividing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

  8. JavaScript with JSONPath

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JavaScript JSO ...

  9. FastReport.Net使用:[9]多栏报表(多列报表)

    方法一:使用页的列属性(Page Columns) 1.绘制报表标题 2.设置页的列数量为3,其他默认不变.报表设计界面便如下呈现. 3.报表拷贝前面[分组]报表的内容. 4.就这么简单,一张多栏报表 ...

  10. 【51Nod 1190】最小公倍数之和 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1190 \[ \begin{aligned} &\sum_{i=a ...