概要

安卓操作系统的系统广播会暴露WiFi信号强度信息(RSSI)。设别上的所有应用都可以在没有额外权限的情况下获取WiFi信号强度信息。恶意应用可以用这些信息进行室内定位以定位和追踪用户。同样地,底层Android API也可以获取这些信息。

该漏洞CVE编号为CVE-2018-9489,影响所有的安卓版本。Google目前还没有完全修复该漏洞,但在Android 9 / P中已经不会在泄露用户隐私信息了。


背景

安卓应用会被操作系统进行隔离,进程之间以及操作系统与进程之间的交互是通过其他机制完成的。Intents就是这样的机制之一,使用intent进行广播允许应用或操作系统发送系统范围内的消息,这也是其他应用程序在监听的。该功能存在是为了限制读取消息的用户,但应用开发者一般都会忽视这些限制导致敏感数据泄露。因此,运行在同一设备上的恶意安卓应用程序就可以监听和获取其他应用广播的消息。

安卓系统中的另一个安全机制是权限permission,这也是为了保护用户隐私而设置的。应用必须通过AndroidManifest.xml中的uses-permission tag来明确请求对特定信息或特征的权限。根据权限的类型,操作系统在安装过程中会展示给用户,或运行时弹窗。一些权限只能由系统应用使用,不能被普通开发者使用。
Google Play中的应用权限请求和运行时弹窗截图:

pic4


漏洞细节

安卓操作系统会广播WiFi强度值(RSSI),访问这些信息并不需要权限。RSSI值代表的是设备接受到的信号的相对轻度,但并不与真实的物理信号强度(actual physical signal strength)相关联。这是通过两个独立的intents实现的,Android 9之前是android.net.wifi.STATE_CHANGE,其他安卓设备是android.net.wifi.RSSI_CHANGED。

当应用通过WifiManager访问信息时,正常就在应用manifest中请求ACCESS_WIFI_STATE权限。因为WiFi RTT特征是Android 9中新引入的,也是用于位置定位的,需要ACCESS_FINE_LOCATION权限。但监听系统广播时,在不需要通知用户,不需要其他权限的情况下就可以获取信息。

这里有两个单独的安全问题:

普通用户复现的步骤

对安卓设备用户,可以通过下面的步骤复现该问题:

  1. 安装Vilius Kraujutis开发的Internal Broadcasts Monitor程序;

  2. 打开应用,点击start来监控广播;

  3. 观察系统广播,尤其是android.net.wifi.STATE_CHANGE(Android 9及之前版本)和android.net.wifi.RSSI_CHANGED(所有版本)。

截图如下:

screen1


开发者通过代码复现

要代码复现,首先要创建一个Broadcast receiver,并注册为接收action android.net.wifi.STATE_CHANGE(Android v8.1及更低版本)和android.net.wifi.RSSI_CHANGED。
示例代码如下:

public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle state) {    IntentFilter filter = new IntentFilter();
            filter.addAction(android.net.wifi.STATE_CHANGE);
            filter.addAction(android.net.wifi.RSSI_CHANGED);    
            registerReceiver(receiver, filter);}BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {    Log.d(intent.toString());    ….}};


测试

研究人员在以下设备上进行了测试:

  • Pixel 2,运行系统Android 8.1.0,补丁版本2018年 6月

  • Nexus 6P,运行系统Android 8.1.0,补丁版本2018年 6月

  • Moto G4,运行系统Android 7.1.0,补丁版本2018年 4月

  • Kindle Fire HD (8 gen) ,运行系统Fire OS 5.6.10(基于Android 5.1.1),补丁版本2018年4


运行最新固件的ASUS RT-N56U 路由器

测试步骤如下:

  1. 安装Broadcast Monitor app;

  2. 将手机设置为飞行模式;

  3. 进入房间;

  4. 关掉飞行模式,以触发RSSI广播;

  5. 从以下广播中获取RSSI值:
    android.net.wifi.RSSI_CHANGE – newRssi value
    android.net.wifi.STATE_CHANGE – networkInfo / RSSI

  6. 重复步骤3-4。

测试结果如下:

image.png

更多请参见:https://wwws.nightwatchcybersecurity.com/2018/11/11/cve-2018-9581/


源链接

Hacking more

...