Android静态安全检查(五):Activity劫持

什么是Activity劫持

一般情况下分为两种

第一种是,手机里面安装了恶意程序,恶意程序会注册一个Receiver,响应android.intent.action.BOOT_COMPLETED事件,这个Service会启动一个定时器,不停的循环查询当前运行的进程。一旦当前的进程正是我们要劫持的,并运行在前台,立马使用FLAG_ACTIVITY_NEW_TASK启动自己的恶意应用界面处于栈顶,用户看到的就是恶意应用的界面,获取用户输入的隐私信息,并发送到服务器。这篇文章有详细介绍《Android之Activity界面劫持反劫持

第二种是,Android中启动一个Activity常用的方法是startActivity。startActivity的参数时Intent,这个Intent有两种设置方式

  • 通过设置action,系统找到接收该action的Activity,然后启动
  • 明确指定要启动的Activity所在的包和Activity的对应的类名。

当一个应用程序通过action来启动某个Activity时,另一个恶意应用可以创建一个同样的action来接收Activity。在Android应用中,如果存在多个Activity接收同一个action,那么就会提供一个选择列表让用户进行选择。一旦用户选错了,就进入了恶意程序的界面,当用户输入隐私信息,有可能被恶意程序将数据发送给服务器,导致用户信息泄露。

检测方法

针对上面说的两种Activity劫持情况,

第一种情况由于是第三方应用的恶意行为,对于被劫持的应用没有检测方法,只能防范。

第二种情况比较好检测,扫描所有的startActivity和startActivityForResult方法,查看其中的Intent参数,判断该Inteny是否满足以下情况:

  • Intent在new时指定了class
  • Intent使用setClass方法指定class
  • Intent使用setComponent方法指定了package和class

如果该Intent不满足上面任何一种情况,则这个startActivity可能被外部应用劫持

修复方案

第一种情况不好防范,唯一能做的就是当应用程序从前台到后台,弹窗提示一下用户。

第二种情况,当创建Intent的时候,显示的指定要启动的Activity的包名和类名,不使用action方式启动。

猜你喜欢

转载自blog.csdn.net/u010889616/article/details/80957887
今日推荐