前言

国外研究人员披露了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. tensorflow运行出现错误 : ImportError: Could not find 'cudart64_90.dll'.

    安装 tensorflow-gpu 版本后,需要安装相应的 CUDA 和 cuDNN 注意版本问题:tensorflow-gpu 1.7以及之后的版本要安装 CUDA 8.0 以上的版本,tf 1.7 ...

  2. 某PCBA企业应用易普优APS实现高级计划排程案例

    一.项目介绍 1.生产计划现状 某PCBA企业(以下简称A企业)的产品生产是典型的多品种.小批量.多变化的生产模式.其中产品种类有1000多种,主流的200多种,每个月数百个生产订单,分解到工序以后的 ...

  3. jquery on方法(事件委托)

    jquery绑定事件处理函数的方法有好几个,比如:bind(),on(),delegate(),live(). 其中delegate和live都是用on实现的,效果也类似,live好像在1.7版本中已 ...

  4. Xpath,XQuery,DTD

    一.Xpath XPath 是一门在 XML 文档中查找信息的语言;XPath 是 XSLT 中的主要元素.XPath是W3C标准.1.七种类型节点:元素.属性.文本.命名空间.处理指令.注释.文档节 ...

  5. vue操作本地存储

    const ls = window.localStorage const ss = window.sessionStorage export const LStorage= { getItem(key ...

  6. 洛谷P3639 [APIO2013] 道路费用 [生成树的特殊算法]

    题目传送门 道路费用 格式难调,题面就不放了. 分析: 这是一道要细(yan)心(jing)的生成树的好(gui)题. 首先我们看到$k$的范围非常小,那么我们就可以直接$2^k$枚举每一条加边是否选 ...

  7. mySQL 的 2个分类

    1.将如下表中的每门成绩都大于80分的人名? 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 select * from ...

  8. GPFS 安装测试

    简介 GPFS(General Parallel File System ,GPFS) 是 IBM 公司第一个共享文件系统,起源于 IBM SP 系统上使用的虚拟共享磁盘技术( VSD ).作为这项技 ...

  9. 解释Crypto模块怎么就这么"皮"?No module named "Crypto"

    https://www.cnblogs.com/fawaikuangtu123/p/9761943.html python版本:python3.6,系统:win7 1.pip install cryp ...

  10. Django错误大汇总

    1.安装django报错解决方案 找到第一条报错信息: File "c:\users\chenwei\envs\testvir2\lib\site-packages\pip\basecomm ...