一种安卓平台钓鱼攻击的解决方法转让专利

申请号 : CN201410653088.7

文献号 : CN104361281B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李兴华薛飞洁李鑫王涛张树超马建峰

申请人 : 西安电子科技大学

摘要 :

本发明公开了一种安卓平台钓鱼攻击的解决方法,用户根据安全敏感程度将除系统应用外的手机应用分为多类保护应用,当用户启动某应用时,由系统负责首先判断是否已开启受保护应用,并依据判断结果以及所要开启的应用所属类别来启动识别与拦截模块,确定是否允许该应用启动;如果允许启动,则对该应用进行身份识别,并根据该应用的类别设置保护标志位,系统根据该保护标志位来决定是否对其进行保护。本发明在系统框架层的AMS中添加识别与拦截模块,解决了在应用层无法干涉AMS流程而导致无法拦截钓鱼应用的问题,同时为用户提供了多级别的保护方案供其定制,有效的保证了用户在使用手机时的安全。

权利要求 :

1.一种安卓平台钓鱼攻击的解决方法,其特征在于,所述方法包括如下步骤:

步骤1,用户根据应用的安全敏感程度,将手机中除系统应用外的受保护应用分为第一类受保护应用和第二类受保护应用并存储在框架层的活动管理服务AMS内部,除此之外,余下的应用默认为第三类应用;然后根据应用的所属类别设置对应的保护标志位,用于描述应用的类别;

步骤2,在开启某应用时,由AMS内部首先根据保护标志位判断当前是否已经开启了受保护应用,并据此判断是否允许所要开启的应用启动:如果当前开启了第一类受保护应用,则只有当所要开启的应用为系统应用或第一类受保护应用时才允许启动并执行步骤3,否则禁止其启动;如果当前开启了第二类受保护应用,则只有当所要开启的应用为系统应用、第一类受保护应用或第二类受保护应用时才允许启动并执行步骤3,否则禁止其启动;如果当前没有开启受保护应用,则允许所要开启的应用启动并执行步骤3;

步骤3,对被允许启动的应用的保护标志位进行设置,以表示该应用现处于启动状态具体包括:

步骤3.1,查看被允许启动应用是否为系统应用,如果是,则设置其保护标志位SysFlag=true,否则执行步骤3.2;

步骤3.2,查看被允许启动应用是否为第一类受保护应用,如果是,设置其保护标志位并将应用包名添加至AMS内部mFirstStartProApp中,mFirstStartProApp为链表,用于存储已经启动的第一类受保护应用包名;否则执行步骤3.3;

步骤3.3,查看被允许启动应用是否为第二类受保护应用,如果是,设置其保护标志位sFlag=true,并将应用包名添加至AMS内部mSecondStartProApp中,mSecondStartProApp为链表,用于存储已经启动的第二类受保护应用包名;否则执行步骤3.4;

步骤3.4,确定所启动应用为第三类应用,并设置保护标志位dFlag=false。

2.根据权利要求1所述的一种安卓平台钓鱼攻击的解决方法,其特征在于,所述步骤1的具体过程为:

步骤1.1,用户根据应用的安全敏感程度,将手机中除系统应用外的受保护应用分为第一类受保护应用和第二类受保护应用,除此之外,余下的应用默认为第三类应用;

步骤1.2,将第一类受保护应用和第二类受保护应用分别存储于框架层活动管理服务(AMS)内部数据类型为链表的成员变量mFirstProApp、mSecondProApp之中,其分别代表第一类受保护应用以及第二类受保护应用包名;

步骤1.3,根据应用的所属类别设置对应保护标志位,其中第一类受保护应用的标志位为fFlag,第二类受保护应用的保护标志位为sFlag,第三类应用为dFlag,系统应用的保护标志位为SysFlag,所述保护标志位用于描述应用的类别。

3.根据权利要求1所述的一种安卓平台钓鱼攻击的解决方法,其特征在于,步骤2的具体过程如下:

步骤2.1,AMS内部根据第一类受保护应用的保护标志位fFlag来判断是否已经开启第一类受保护应用,若fFlag为true,表明当前已开启保护第一类受保护应用,则执行2.3,否则执行步骤2.2;

步骤2.2,AMS内部根据第二类受保护应用的保护标志位sFlag来判断是否已经开启第二类受保护应用,若sFlag为true,表明已开启保护第二类受保护应用,则执行步骤2.4,否则执行步骤3;

步骤2.3,AMS根据成员变量mFirstProApp中存储的包名来检测所要开启的应用是否属于系统应用或者第一类受保护应用,其中mFirstProApp为AMS内部数据类型为链表的成员变量,用于存储第一类受保护应用包名:如果是,则允许启动,并执行步骤3,否则,向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动;

步骤2.4,AMS根据成员变量mFirstProApp、mSecondProApp中存储的包名来检测当前开启的应用是否属于系统应用或第一、二类受保护应用,其中mSecondProApp为AMS内部数据类型为链表的成员变量,用于存储第二类受保护应用包名:如果是,则允许启动,并执行步骤3,否则向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动。

4.根据权利要求1-3任一所述的一种安卓平台钓鱼攻击的解决方法,其特征在于,所述方法还包括如下步骤4,所述步骤4在需要退出某一应用时实施:步骤4.1,AMS首先判断退出的应用是否为系统应用,如果是则重置系统保护标志位SysFlag=false,否则执行步骤4.2;

步骤4.2,AMS根据存储第一类受保护应用和第二类受保护应用包名的成员变量mFirstProApp以及mSecondProApp判断所要退出的应用是否为受保护应用,如果是,则执行步骤4.3,否则重置第三类应用保护标志位dFlag=false;

步骤4.3,AMS扫描内部变量mFocusStack中保存的Task,查看是否所要退出的应用所属的Task是否存在,若不存在则表明所要退出的应用进程已真正退出,执行步骤4.4;

步骤4.4,扫描并检测所要退出的应用所属受保护应用类别,若为第一类受保护应用,则执行步骤4.5,否则执行步骤4.6;

步骤4.5,扫描AMS内部数据结构mFirstStartProApp确认第一类受保护应用是否完全退出,如果是,重置第一类受保护应用的保护标志位fFlag=false;步骤4.6,扫描AMS内部数据结构mSecondStartProApp确认第二类受保护应用是否完全退出,如果是,重置第二类受保护应用的保护标志位sFlag=false。

说明书 :

一种安卓平台钓鱼攻击的解决方法

技术领域

[0001] 本发明涉及一种软件技术,具体涉及一种解决安卓平台钓鱼攻击的方法。

背景技术

[0002] 根据IDC(International Data Corporation)市场研究公司4月份公布的数据显示,安卓(Android)系统在全球智能手机市场中的份额高达78.1%。在国内,Android系统的占有率高达80%。随着手机应用的不断推广,其伴随而来的数据安全问题也日渐突出,手机中存储了大量人们日常生活中的数据,例如通信录,短信,应用的使用情况等。恶意应用早已瞄准移动市场,这些恶意应用的攻击会导致各种严重后果,其中隐私窃取、恶意扣费以及资费消耗三种后果所占比例高达96%,钓鱼攻击的严重性在于可以利用其窃取的隐私数据进而产生一系列后续的攻击从而导致更严重的后果。
[0003] Android平台上钓鱼攻击危害程度之高的关键因素在于目前市面上的安全软件如金山手机卫士、手机毒霸、乐安全等根本无法识别出,原因是目前Android平台上的安全软件所使用的杀毒引擎大多基于以下两点来判定一个应用是否含有恶意行为:第一,基于行为的判断(Yang Z,Yang M,Zhang Y,et al.Appintent:Analyzing sensitive data transmission in android for privacy leakage detection[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer&communications security.ACM,2013:1043-
1054),应用在运行过程中是否存在越权行为或读取隐私数据;第二,基于应用签名(或摘要)的判断(王浩宇,王仲禹,郭耀,等.基于代码克隆监测技术的Android应用重打包检测.中国科学信息科学,2014,44(1):142-157),根据应用文件来判定是否为恶意应用。钓鱼攻击对这两种方式有先天的免疫功能,对于第一点,判断应用运行时是否存在读取隐私数据,或通过云杀毒方式利用后台服务器来对特殊文件进行检测,常用方式为静态、动态分析(Yan M,Mehrdad S S.Investigation of Static and Dynamic Android Antivirus Strategies[J].IEEE International Conference on Information Technology.2013:
398-403、杨智,殷丽华,段洣毅,等.基于广义污点传播模型的操作系统访问控制.软件学报,2012,23(6):1602-1619),转化为数据流分析。钓鱼应用一般实现并无破坏系统等恶意行为,也无例如读取手机通信录,联系人等隐私数据的行为,因而可以完全跳过安全软件的行为监控;对于第二点,检测仅仅通过对比应用签名或文件摘要来判断,这种方式完全基于安全软件所依赖的病毒数据库,对已知的恶意应用可以识别,但对新出现或者未知的恶意应用则完全无效,而且几乎所有恶意应用在这一点上都轻松做到免杀。
[0004] 钓鱼攻击方式由来已久,早在PC时代针对电子商务以及银行的各种钓鱼网站就层出不穷,不法分子或伪造URL地址及页面内容或在真实网站服务器程序上利用漏洞植入危险HTML代码以此欺骗客户账号以及密码等信息。
[0005] 在Android系统上,由于多任务单界面的移动系统设计原则,非常容易遭受钓鱼攻击(组件劫持),而且依据移动应用的设计理念,打开应用首先直接进入应用主界面,之后根据网络环境变化或者其他条件再触发登录,注册操作,这也是钓鱼攻击利用的一个重要原因,其最根本因素是,用户无法判断当前手机画面上显示的界面是否为钓鱼应用。
[0006] 钓鱼攻击的一般过程如下(以微博为例):
[0007] 第一步,启动后台服务,其功能是实时获取用户手机中当前正在运行的APP是否为微博;第二步,当用户打开微博应用时,启动事先制作好的微博登录界面,诱导用户重新登录;第三步,将用户输入的信息通过网络或者短信形式发送至攻击者。
[0008] 钓鱼应用一般由两部分组成:
[0009] 第一部分是制作Serv ice系统服务,利用Android 系统 API ActivityManager.getRunningTasks实时监控当前正在运行的应用;
[0010] 第二部分是制作钓鱼界面,由于Android应用通过Java编写,其界面布局以XML文件形式存储,因而比较容易通过反编译等方式制作出高仿界面,在系统切换Activity的间隙中,启动此钓鱼界面,然后可以将所窃取的微博登录账号与密码通过网络或者短信等方式发送给攻击者。
[0011] 钓鱼攻击的核心在于与正常应用抢占开启时机,由于Android手机多任务单界面设计理念,在任务切换时会有时间间隙,利用这个间隙启动钓鱼应用,使得用户难以通过屏幕区分当前运行的应用是否为钓鱼应用。
[0012] 一般来说实现钓鱼攻击检测有两种方式,分别在应用层上识别拦截(Yang Zhi,Yin Lihua,Duan Miyi,et al.Appintent:Analyzing sensitive data transmission in android for privacy leakage detection[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer&communications security.ACM,2013:1043-1054)和在系统层(框架层)上识别拦截。应用层实现识别拦截的方式与钓鱼攻击实现步骤第一步类似,通过系统后台服务实时监控当前正在运行的应用名称,并通过悬浮窗口或通知方式显示给用户,但是在应用层上实现识别拦截有三个不足:第一,实时监控部分,后台服务实时监测需要定时获取当前正在运行的应用信息,监测间隔时间设置若过长,则可能失去监测效果,若过短,则会严重影响系统性能;第二,拦截功能,在应用层上无法做到钓鱼应用的拦截,因为所有应用的启动是由框架层的活动管理服务(Activity Manager Service,AMS)负责,应用层无权限干涉AMS的流程;第三,用户体验,通过悬浮窗口实时显示,会严重影响用户体验度,而通过Toast方式提示则很容易被用户所忽略。
[0013] 在Android系统中,所有Activity的启动,退出都由AMS来统一负责管理。AMS中对Activity的管理是通过“Stack”这种数据结构来管理的。其使用的主要数据结构变量由大到小分别为:mStacks:管理Stack的单位,存储所有的Stack;Stack:管理Task的单位,在Android4.4中使用了mHomeStack与mFocusStack两个变量,分别用来存储与Launcher(Home)相关的Task与非Launcher相关的Task;Task:管理Activity的最小单位,存储的内容是同一组任务中相关的所有Activity。钓鱼应用实现中,通常都会利用系统API实时获取mFocusStack中正在运行的Task,从而获得顶端Activity的相关数据,而其自身也会存储于mFocusStack中,因此判断钓鱼应用Activity需要从mFocusStack中遍历查询,判断其是否退出也需要从mFocusStack中做轮询判断。
[0014] Android系统中AMS启动Activity流程如图1所示,无论是通过点击Launcher中的图标,还是通过startActivity函数启动(钓鱼应用启动是通过此方式),最后都会调用Activity类中的startActivity函数来启动,并最终都会由AMS执行startActivity函数来完成。在原生系统中,启动一个Activity只需要做权限判断,调用者身份判断等基本验证,之后就会启动任何符合要求的Activity,这是钓鱼应用可顺利启动的重要原因。

发明内容

[0015] 针对现有技术的不足,本发明旨在提供一种安卓平台钓鱼攻击的解决方法,通过对钓鱼应用原理的分析,基于Android4.4原生系统,在框架层的活动管理服务AMS中添加钓鱼识别与拦截模块,在框架层上识别并拦截钓鱼攻击。本发明选择在框架层实现,原因有四点:第一,根据对钓鱼原理的分析,其实现第一步所利用的API属于系统开放API,因此只能在第二步启动钓鱼界面这一步骤中实施拦截;第二,应用的启动是通过框架层中的AMS管理,而在应用层无法实现AMS流程的修改;第三,在框架层可以实现高效的识别与拦截钓鱼攻击;第四,在框架层做出拦截后,不再需要通过各种提示方式提醒用户,用户体验非常好。
[0016] 为了实现上述目的,本发明采用如下技术方案:
[0017] 一种安卓平台钓鱼攻击的解决方法包括如下步骤:
[0018] 步骤1,用户根据应用的安全敏感程度,将手机中除系统应用外的受保护应用分为第一类受保护应用和第二类受保护应用并存储在框架层的活动管理服务AMS内部;除此之外,余下的应用默认为第三类应用;然后根据应用的所属类别设置对应的保护标志位,用于描述应用的类别;
[0019] 步骤2,在开启某应用时,由AMS内部首先根据受保护应用的保护标志位判断当前是否已经开启了受保护应用,并据此判断是否允许所要开启的应用启动:如果当前开启了第一类受保护应用,则只有当所要开启的应用为系统应用或第一类受保护应用时才允许启动,并执行步骤3,否则禁止其启动;如果当前开启了第二类受保护应用,则只有当所要开启的应用为系统应用、第一类受保护应用或第二类受保护应用时才允许其启动,并执行步骤3,否则禁止其启动;如果当前没有开启受保护应用,则允许所要开启的应用启动并执行步骤3;
[0020] 步骤3,对被允许启动的应用的保护标志位进行设置,以表示该应用现处于启动状态。
[0021] 需要说明的是,所述步骤1的具体过程为:
[0022] 步骤1.1,用户根据应用的安全敏感程度,将手机中除系统应用外的受保护应用分为第一类受保护应用、第二类受保护应用,除此之外,余下的应用默认为第三类应用;
[0023] 步骤1.2,将第一类受保护应用和第二类受保护应用分别存储于AMS内部数据类型为链表的成员变量mFirstProApp,mSecondProApp之中,其分别代表第一类受保护应用以及第二类受保护应用包名;
[0024] 步骤1.3,根据应用的所属类别设置对应保护标志位,其中第一类受保护应用的标志位为fFlag,第二类受保护应用的保护标志位为sFlag,系统应用的保护标志位为SysFlag,第三类应用为dFlag,所述保护标志位用于描述应用的类别。
[0025] 需要说明的是,步骤2的具体过程如下:
[0026] 步骤2.1,AMS内部根据第一类受保护应用的保护标志位fFlag来判断是否已经开启第一类受保护应用,若fFlag为true,表明当前已开启保护第一类受保护应用,则执行2.3,否则执行步骤2.2;
[0027] 步骤2.2,AMS内部根据第二类受保护应用的保护标志位sFlag来判断是否已经开启第二类受保护应用,若sFlag为true,表明已开启保护第二类受保护应用,则执行步骤2.4,否则执行步骤3;
[0028] 步骤2.3,AMS根据成员变量mFirstProApp中存储的包名来检测所要开启的应用是否属于系统应用或者第一类受保护应用,其中mFirstProApp为AMS内部数据类型为链表的成员变量,用于存储第一类受保护应用包名:如果是,则允许启动,并执行步骤3,否则,向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动;
[0029] 步骤2.4,AMS根据成员变量mFirstProApp、mSecondProApp中存储的包名来检测当前开启的应用是否属于系统应用或第一、二类受保护应用,其中mSecondProApp为AMS内部数据类型为链表的成员变量,用于存储第二类受保护应用包名:如果是,则允许启动,并执行步骤3,否则向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动。
[0030] 需要说明的是,步骤3的具体过程如下:
[0031] 步骤3.1,查看被允许启动应用是否为系统应用,如果是,则设置其保护标志位SysFlag=true;否则执行步骤3.2;
[0032] 步骤3.2,查看被允许启动应用是否为第一类受保护应用,如果是,设置其保护标志位 并将应用包名添加至AMS内部mFirstStartProApp中,mFirstStartProApp为链表,用于存储已经启动的第一类受保护应用包名;否则执行步骤
3.3;
[0033] 步骤3.3,查看被允许启动应用是否为第二类受保护应用,如果是,设置其保护标志位sFlag=true,并将应用包名添加至AMS内部mSecondStartProApp中,mSecondStartProApp为链表,用于存储已经启动的第二类受保护应用包名;否则执行步骤3.4;
[0034] 步骤3.4,确定所启动应用为第三类应用,并设置保护标志位dFlag=false。
[0035] 需要进一步说明的是,所述方法还包括如下步骤4,所述步骤4在需要退出某一应用时实施:
[0036] 步骤4.1,AMS首先判断退出的应用是否为系统应用,如果是则重置系统保护标志位SysFlag=false,否则执行步骤4.2;
[0037] 步骤4.2,AMS根据存储第一类受保护应用和第二类受保护应用包名的成员变量mFirstProApp以及mSecondProApp判断所要退出的应用是否为受保护应用,如果是,则执行步骤4.3,否则重置第三类应用保护标志位dFlag=false;
[0038] 步骤4.3,AMS扫描内部变量mFocusStack中保存的Task,查看是否所要退出的应用所属的Task是否存在,若不存在则表明所要退出的应用进程已真正退出,执行步骤4.4;
[0039] 步骤4.4,扫描并检测所要退出的应用所属受保护应用类别,若为第一类受保护应用,则执行步骤4.5,否则执行步骤4.6;
[0040] 步骤4.5,扫描AMS内部数据结构mFirstStartProApp确认第一类受保护应用是否完全退出,如果是,重置第一类受保护应用的保护标志位fFlag=false;
[0041] 步骤4.6,扫描AMS内部数据结构mSecondStartProApp确认第二类受保护应用是否完全退出,如果是,重置第二类受保护应用的保护标志位sFlag=false。
[0042] 需要说明的是,步骤2和步骤3的目的就在于,在受保护应用(包括第一类受保护应用以及第二类受保护应用)处于启动或运行状态时,对其后开启的应用都实现识别和拦截,防止有恶意应用在需要保护的应用运行期间弹出,生成高仿界面而造成使用者信息泄露的情况。因为在启动每一个应用之前,都会检测当前是否已有第一类受保护应用或第二类受保护应用开启,然后根据检测结果以及要启动应用的类别来决定是否允许该应用启动,最后对被允许启动的应用进行保护标志位的设置,以表示该应用处于启动或运行状态。该保护标志位的设置也是系统在下一个应用启动时,是否进行识别和拦截的依据。
[0043] 本发明的有益效果在于:
[0044] 1、在框架层的活动管理服务AMS中添加识别与拦截模块,在需要保护的应用启动时阻止任何非系统应用以及非保护应用的启动,解决了在因应用层无法干涉AMS流程而导致无法拦截钓鱼应用的问题,这样,当用户在使用应用时不会有恶意应用弹出,不必担心会突然弹出类似于该应用的界面而造成信息泄露;
[0045] 2、用户可根据自身的不同需求设置不同应用的保护等级,从而实现多种级别的保护方案,有效的保证了用户在使用手机时的安全。

附图说明

[0046] 图1为Android系统中AMS启动Activity流程示意图;
[0047] 图2为本发明中启动应用时的实施流程示意图;
[0048] 图3为本发明中退出应用时的实施流程示意图。

具体实施方式

[0049] 以下将结合附图对本发明作进一步的描述,需要说明的是,本实施例以本技术方案为前提,给出了详细的实施步骤和具体的操作方法,但本发明的保护范围并不限于本实施例。
[0050] 在安卓平台中,所有应用的启动是由框架层的活动管理服务AMS负责,应用层无权限干涉AMS的流程。一种安卓平台钓鱼攻击的解决方法,就是在AMS中设置识别与拦截模块。具体包括如下过程:
[0051] 用户根据应用的安全敏感程度,将手机中除系统应用外的应用分为三类:第一类受保护应用、第二类受保护应用以及第三类应用,并将前两类分别存储于AMS内部数据类型为链表的成员变量mFirstProApp,mSecondProApp之中,其分别代表第一类受保护应用以及第二类受保护应用包名,同时根据应用的所属类别设置对应保护标志位,其中第一类受保护应用的标志位为fFlag,第二类受保护应用的保护标志位为sFlag,系统应用的保护标志位为SysFlag,第三类应用为dFlag,所述保护标志位用于描述应用的类别。
[0052] 在实现中,考虑到不同类应用的安全敏感级别,例如对于支付宝、银行客户端等支付类应用重要性相比微信,微博等社交类应用要高,因此通常建议第一类保护应用为支付类应用(例如支付宝,银行客户端等,设置等级为1),第二类保护应用为社交类应用(例如微信,微博等,设置等级为2)。
[0053] 用户启动某应用时,由AMS开启识别与拦截模块;
[0054] 图2描述了在框架层的AMS设置了识别与拦截模块后,对于四类不同级别应用(系统应用、第一类受保护应用、第二类受保护应用以及第三类应用)启动时的流程,具体包括如下过程:
[0055] 1)AMS内部根据第一类受保护应用的保护标志位fFlag来判断是否已经开启第一类受保护应用,若fFlag为true,表明当前已开启保护第一类受保护应用,则执行步骤3),否则执行步骤2);
[0056] 2)AMS内部根据第二类受保护应用的保护标志位sFlag来判断是否已经开启第二类受保护应用,若sFlag为true,表明已开启保护第二类受保护应用,则执行步骤4),否则执行步骤5);
[0057] 3)AMS根据成员变量mFirstProApp中存储的包名来检测所要开启的应用是否属于系统应用或者第一类受保护应用,其中mFirstProApp为AMS内部数据类型为链表的成员变量,用于存储第一类受保护应用,代表第一类受保护应用的包名:如果是,则允许启动,并执行步骤5),否则,向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动;
[0058] 4)AMS根据成员变量mFirstProApp、mSecondProApp中存储的包名来检测当前开启的应用是否属于系统应用或第一、二类受保护应用,其中mSecondProApp为AMS内部数据类型为链表的成员变量,用于存储第二类受保护应用,代表第二类受保护应用的包名:如果是,则允许启动,并执行步骤5),否则向Instrumentation抛出异常,并由Instrumentation将此异常抛给所要开启的应用,禁止其启动。
[0059] 5)查看被允许启动应用是否为系统应用,如果是,则设置其保护标志位SysFlag=true;否则执行步骤6);
[0060] 6)查看被允许启动应用是否为第一类保护应用,如果是,设置其保护标志位并将应用包名添加至AMS内部mFirstStartProApp中,mFirstStartProApp为链表,用于存储已经启动的第一类受保护应用包名;否则执行步骤7);
[0061] 7)查看被允许启动应用是否为第二类保护应用,如果是,设置其保护标志位sFlag=true,并将应用包名添加至AMS内部mSecondStartProApp中,mSecondStartProApp为链表,用于存储已经启动的第二类受保护应用包名;否则执行步骤8);
[0062] 8)确定所启动应用为第三类应用,并设置保护标志位dFlag=false。
[0063] 而对于之后所启动的任一应用,均对其需要执行上述8个步骤,以防止在需要保护的应用运行时,钓鱼应用被允许启动并弹出高仿界面,导致用户的信息泄露。
[0064] 如图3所示,当用户退出应用时,则需要重置其保护标志位,AMS根据当前保护标志位来判断是否需要开启监控。具体步骤如下所示:
[0065] (1)AMS首先判断退出的应用是否为系统应用,如果是则重置系统保护标志位SysFlag=false,否则执行步骤(2);
[0066] (2)AMS根据存储第一类受保护应用和第二类受保护应用包名的成员变量mFirstProApp以及mSecondProApp判断所要退出的应用是否为受保护应用,如果是,则执行步骤(3),否则重置第三类应用保护标志位dFlag=false;
[0067] (3)AMS扫描内部变量mFocusStack中保存的Task,查看是否所要退出的应用所属的Task是否存在,若不存在则表明所要退出的应用进程已真正退出,执行步骤(4);
[0068] (4)扫描并检测所要退出的应用所属受保护应用类别,若为第一类受保护应用,则执行步骤(5),否则执行步骤(6);
[0069] (5),扫描AMS内部数据结构mFirstStartProApp确认第一类受保护应用是否完全退出,如果是,重置第一类受保护应用的保护标志位fFlag=false;
[0070] (6),扫描AMS内部数据结构mSecondStartProApp确认第二类受保护应用是否完全退出,如果是,重置第二类受保护应用的保护标志位sFlag=false。
[0071] 可行性测试分析:
[0072] 根据钓鱼攻击的原理,编写针对支付宝与微博的钓鱼应用,分别在不同机型系统上做钓鱼攻击测试。测试结果如表1所示:
[0073] 表1
[0074]
[0075] 从表1中可以看出,Android平台上大多数安全软件几乎无法监测到钓鱼攻击的存在。在根据本发明的改进AMS的系统中,由于添加了相应的识别与拦截模块,因而不会出现钓鱼界面。
[0076] 准确性测试分析:
[0077] 在改进AMS的系统上,作进一步准确性测试,测试环境为:小米1S、系统为带有改进AMS的Android4.4系统。设置第一类受保护应用:支付宝、交通银行客户端、中国银行手机客户端;第二类受保护应用为:微博、微信、qq、飞信。测试状态如表2所示:
[0078] 表2
[0079]
[0080] 当启动第一类受保护应用时,除系统应用与第一类受保护应用外,其他应用不允许启动,所启动应用退出,保护结束;对于第二类受保护应用,保护程度相对降低,当第二类受保护应用启动或者前台运行时,不允许系统应用、第一类受保护应用或第二类受保护应用以外的应用启动,当其退出或者后台运行时保护结束。
[0081] 对于本领域的技术人员来说,可以根据以上的技术方案和构思,给出各种相应的改变和变形,而所有的这些改变和变形都应该包括在本发明权利要求的保护范围之内。