CN116738425A - 应用程序的界面劫持攻击检测方法、装置及可读介质 - Google Patents

应用程序的界面劫持攻击检测方法、装置及可读介质 Download PDF

Info

Publication number
CN116738425A
CN116738425A CN202310706769.4A CN202310706769A CN116738425A CN 116738425 A CN116738425 A CN 116738425A CN 202310706769 A CN202310706769 A CN 202310706769A CN 116738425 A CN116738425 A CN 116738425A
Authority
CN
China
Prior art keywords
application program
hook function
operating system
interface
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310706769.4A
Other languages
English (en)
Inventor
韩建伟
黄勇
陆刚
朱志博
康操
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Avatr Technology Chongqing Co Ltd
Original Assignee
Avatr Technology Chongqing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Avatr Technology Chongqing Co Ltd filed Critical Avatr Technology Chongqing Co Ltd
Priority to CN202310706769.4A priority Critical patent/CN116738425A/zh
Publication of CN116738425A publication Critical patent/CN116738425A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例涉及安全检测技术领域,公开了一种应用程序的界面劫持攻击检测方法、装置、计算机设备及可读介质,该方法包括:检测所述操作系统中是否注入钩子函数的调用程序;根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过,本申请综合运用钩子函数的检测来进行防hook处理,防止攻击者篡改获取的设备的信息,结合设备信息和系统信息的唯一性,避免了界面劫持攻击检测被绕过的情况,提高了界面劫持攻击检测的准确率。

Description

应用程序的界面劫持攻击检测方法、装置及可读介质
技术领域
本申请涉及安全检测领域,具体涉及一种应用程序的界面劫持攻击检测方法、装置及可读介质。
背景技术
在操作系统中,例如安卓系统,恶意软件通过劫持目标应用的Activity界面(多为登录和支付界面),通过界面弹出、覆盖等手段伪造钓鱼页面,诱导用户输入敏感信息,达到窃取用户隐私(支付、登录密码、卡号等信息)的目的,或者利用伪造页面进行钓鱼欺诈。为应对界面劫持的攻击,需要判断当前应用是否被界面劫持,但是目前的界面劫持检测容易被绕过,界面劫持检测形同虚设,因此存在诸多不足。
发明内容
为了解决现有技术中目前的界面劫持检测容易被绕过,界面劫持检测形同虚设的问题,本申请实施例提供一种应用程序的界面劫持攻击检测方法、装置及可读介质,能够防止界面劫持检测被绕过。
一方面,本申请实施例提供一种应用程序的界面劫持攻击检测方法,所述应用程序运行在一终端设备上,所述终端设备搭载有一操作系统,包括:
检测所述操作系统中是否注入钩子函数的调用程序;
根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
另一方面,本申请实施例提供一种应用程序的界面劫持攻击检测装置,包括:
钩子函数检测模块,检测所述操作系统中是否注入钩子函数的调用程序;
顶层窗口包名获取模块,根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
界面劫持攻击检测模块,根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
在可选的实施例中,所述钩子函数检测模块包括:
异常抛出单元,在所述应用程序的执行过程中,抛出一预设异常;
钩子函数检测单元,根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序。
在可选的实施例中,所述钩子函数检测模块包括:
文件查找单元,从应用程序对应文件夹内的地址映射文件中查找是否存在钩子函数框架字符串,和/或,从应用程序自身加载的库中查找是否存在XposedBridge.jar文件;
确定单元,若存在,则确定所述操作系统中注入钩子函数的调用程序;或者包括:
异常抛出单元,在所述应用程序的执行过程中,抛出一预设异常;
检查单元,在抛出所述预设异常后,检查应用程序的堆栈信息中是否有钩子函数的框架包;
确定单元,若有,则确定所述操作系统中注入钩子函数的调用程序。
在可选的实施例中,所述钩子函数检测单元包括:
标志位设置单元,在所述抛出语句被所述应用程序执行过程中,将所述预设异常抛出,并在抛出异常的位置设置标志位为错误;
标志位检查单元。在所述应用程序执行结束之前,若检查到所述标志位为正确,确定注入钩子函数。
在可选的实施例中,所述系统信息包括系统类型和系统版本号;若所述系统类型为预设系统类型,所述顶层窗口包名获取模块包括:
进程列表获取单元,若系统版本号为预设的第一版本号,获取当前操作系统运行中的进程列表;
遍历单元,遍历所述进程列表,获取唯一标识符与当前顶层窗口所在进程相同的进程;
包名获取单元,获取该进程的包名,并作为当前终端设备的显示界面上的顶层窗口包名;或者,
所述顶层窗口包名获取模块包括:
根节点获取单元,若系统版本号为预设的第二版本号,获取当前活动窗口的根节点;
包名获取单元,获取该根节点所属的应用程序包名,并作为当前终端设备的显示界面上的顶层窗口包名;或者,
在可选的实施例中,所述顶层窗口包名获取模块包括:
任务列表获取单元,若系统版本号为预设的第三版本号,获取当前操作系统运行中的任务列表;
遍历单元,遍历所述任务列表,查找得到任务中顶层窗口所在的任务;
包名获取单元,获取该任务所属的应用程序的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
在可选的实施例中,应用程序的界面劫持攻击检测装置还包括:
修改所述应用程序的加载库列表中可执行文件的头部信息。
在可选的实施例中,所述界面劫持攻击检测模块包括:
白名单确定单元,根据所述设备信息确定包名白名单;
比对单元,比对当前运行的所述应用程序的程序包名与所述顶层窗口包名;
检测单元,若不一致,比对所述白名单和所述顶层窗口包名,若所述顶层窗口包名属于包名白名单中的一个,则运行当前应用程序,且确定所述应用程序的界面劫持攻击检测未被绕过。
又一方面,本申请实施例提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述的方法。
又一方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的方法的步骤。
有益效果
本申请提供一种应用程序的界面劫持攻击检测方法、装置、计算机设备及可读介质,本申请通过耦合通过获取顶层窗口包名、当前运行的应用程序和设备信息等,检测应用程序的界面劫持攻击是否被绕过,综合运用钩子函数的检测来进行防hook处理,防止攻击者篡改获取的设备的信息,结合设备信息和系统信息的唯一性,避免了界面劫持攻击检测被绕过的情况,提高了界面劫持攻击检测的准确率。
附图说明
图1为本申请实施例提供的应用程序的界面劫持攻击检测方法的流程示意图;
图2为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之一;
图3为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之二;
图4为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之三;
图5为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之四;
图6为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之五;
图7为本申请实施例提供的应用程序的界面劫持攻击检测方法的子步骤的流程示意图之六;
图8为本申请实施例提供的应用程序的界面劫持攻击检测方法的的场景实施例的流程细节示意图;
图9为本申请实施例提供的应用程序的界面劫持攻击检测装置的模块示意图;
图10为本申请实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请的具体技术方案做进一步详细描述。以下实施例用于说明本申请,但不用来限制本申请的范围。
在例如Android等操作系统中,恶意软件通过劫持目标应用的Activity界面(多为登录和支付界面),通过界面弹出、覆盖等手段伪造钓鱼页面,诱导用户输入敏感信息,达到窃取用户隐私(支付、登录密码、卡号等信息)的目的,或者利用伪造页面进行钓鱼欺诈。为应对界面劫持的攻击,本申请的发明人发现可以通过检测顶层窗口对应的包名,从而判断当前应用是否被界面劫持,但同时,发明人发现此方法误报很多,用户在使用时只要窗口发生切换就会产生报警,这就导致用户体验不佳,如果设置当检测到的顶层窗口的包名与白名单匹配时,不进行告警,但此时由于白名单存在的本身就会有被绕过的风险,如果被绕过则本防护机制则形同虚设,白白增加了研发成本。
基于此,本申请的发明人首先本申请通过耦合通过获取顶层窗口包名、当前运行的应用程序和设备信息等,检测应用程序的界面劫持攻击是否被绕过,综合运用钩子函数的检测来进行防hook处理,防止攻击者篡改获取的设备的信息,结合设备信息和系统信息的唯一性,避免了界面劫持攻击检测被绕过的情况,提高了界面劫持攻击检测的准确率。
参照图1,为本申请实施例提供的一种应用程序的界面劫持攻击检测方法的流程示例图。如图1所示,该应用程序的界面劫持攻击检测方法包括:
S1:检测所述操作系统中是否注入钩子函数的调用程序;
S2:根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
S3:根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
需要说明的是,本申请实施例中,步骤S1和步骤S2不限定先后顺序,具体的,在一些实施例中,步骤S1可以先于步骤S2执行,在另一些实施例中,步骤S2可以先于步骤S1执行,本申请对此不做限制。
本申请实施例中,以安卓系统为例,系统信息和设备信息可以通过android.os.Build类的静态字段来获取,举例来说,本申请可以利用android.os.Build.MODEL方法获取系统版本,还可以利用获取android.os.Build.BRAND的方法去获取设备厂商的信息。
示例性的,在上述示例中的安卓系统中,android.os.Build.MODEL是一个Android系统API提供的方法,用于获取当前设备的型号信息,当SDK加载时,可以调用这个方法来获取当前设备的型号,从而根据设备型号过滤掉其他可能被用来伪造的包名。具体地,android.os.Build类提供了许多静态常量和静态方法,用于获取当前设备的各种信息,如设备型号、品牌、制造商、固件版本等,其中,MODEL是Build类的一个静态常量,表示当前设备的型号。
调用android.os.Build.MODEL方法可以返回一个字符串,代表当前设备的型号信息。在本申请的场景中,可以使用android.os.Build.MODEL方法获取当前设备的型号信息,以便根据设备型号过滤掉其他可能被用来伪造的包名。
此外,Build.BRAND表示设备的品牌信息,返回一个字符串。利用该方法可以获取设备的厂商信息。
在本申请的场景中,使用了该方法获取手机的厂商信息,可以防止恶意攻击者通过伪造设备信息绕过防护,通过获取设备的厂商信息,可以过滤掉其他移动设备厂商可能被用来伪造的包名,从而减少防护被绕过的风险。
具体的,本方法会获取当前设备的品牌信息,并根据不同的品牌信息过滤掉可能被用来伪造的包名。同时,还会与预先设定的白名单进行匹配,以确保当前的应用包名是被允许的。如果应用包名不在白名单内,则防护代码会通过toast弹窗进行告警,防止应用被恶意攻击者绕过防护。
总之,利用android.os.Build.BRAND方法获取设备的厂商信息,结合白名单进行防绕过,可以提高防护的有效性和可靠性,保护应用的安全。
本实施例中,以安卓系统为例,所有的应用程序都运行在Activity的基础上,每个Activity都会有一个窗口,顶层窗口指的是当前显示在屏幕上的窗口。
本申请实施例中,钩子函数(Hook Function)是一种在软件运行时能够被注入或者绑定到特定事件或函数的一段可执行代码,用于截获、拦截、修改、过滤、增强或者替换原始事件或函数的处理方式。
该实施例中,通过耦合通过获取顶层窗口包名、当前运行的应用程序和设备信息等,检测应用程序的界面劫持攻击是否被绕过,综合运用钩子函数的检测来进行防hook处理,防止攻击者篡改获取的设备的信息,结合设备信息和系统信息的唯一性,避免了界面劫持攻击检测被绕过的情况,提高了界面劫持攻击检测的准确率。
下面对本申请的图1示出的实施例进行详细说明。
本申请的操作系统可以是目前常用的操作系统,例如windows系统、安卓系统、mac系统或者linux系统等,本申请对此不做限制。
可以理解,本申请的操作系统可以根据版本的不同拥有不同版本号,例如windows7以及windows 8等,当然版本号一般为多个数字和字母的组合,也即本申请的系统信息可以为当前操作系统的版本号。
针对本申请的终端设备,其安装了上述实施例中的操作系统,并且终端设备因厂家不同而设备信息不同,具体的,设备信息可以包括生产厂家名称以及设备硬件型号等信息。
在步骤S1中,针对Windows操作系统,可以使用工具如Process Explorer或Process Hacker等,查看当前运行的进程和线程,判断是否存在恶意的DLL注入。针对Linux操作系统,可以使用命令如ps或lsof等,查看当前运行的进程和打开的文件,判断是否存在异常的共享库被加载。针对macOS操作系统,可以使用命令如ps或lsof等,查看当前运行的进程和打开的文件,判断是否存在恶意的dylib注入,本申请对此不做限制。
本申请进一步采用抛出异常的方式来进行钩子函数的检测,图2示出了本申请实施例中检测所述操作系统中是否注入钩子函数的调用程序的详细步骤示意图,如图2所示,本步骤中,检测所述操作系统中是否注入钩子函数的调用程序具体包括:
S11a:在所述应用程序的执行过程中,抛出一预设异常;
S12a:根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序。
具体的,可以通过配置一个程序,在程序中实现一个预设异常,用于抛出给被注入进程的钩子函数捕获。当被注入进程中存在钩子函数时,预设异常会被钩子函数捕获并处理。在程序中实现一个特征检测函数,用于检测操作系统的内存和文件系统中是否存在钩子函数注入的特征,该特征可能包括被注入进程的特定内存段、注入代码的特殊标识符或其他可疑特征。
在优选的实施例中,可以在程序中设置一个监控器,监视系统中所有进程的活动。当检测到新的进程创建时,监控器将检查进程的内存是否包含已知的钩子函数注入特征。当程序启动时,通过调用特征检测函数来扫描操作系统中的所有进程和文件,并记录任何可疑的钩子函数注入特征。如果检测到任何可疑特征,则程序将抛出预设异常。
进一步的,还可以在程序中实现一个通知函数,用于在检测到可疑行为时向管理员发送通知。通知可以通过电子邮件、文本消息或其他适当的方式进行发送。
可选地,可以通过设置程序的安全级别或规则,来防止或限制系统中的钩子函数注入。
本申请实施例通过抛出异常和特征检测的方式,抛出异常和特征检测可以准确地检测到钩子函数的存在,即使钩子函数已经进行了深度隐藏也能够有效地检测到,可以提高检测的准确性,同时相较于其他的检测方式,抛出异常和特征检测的实现相对简单,不需要使用过多的技术和代码实现,也可以降低代码复杂度,提高代码可维护性,进一步的,抛出异常和特征检测的方式适用于大多数操作系统和编程语言,例如Windows、Linux、macOS等系统,以及C、C++、Java等编程语言,适用范围广,可以保证对多种终端设备和应用程序的检测。
在另一个实施例中,本申请的步骤S1,即所述检测所述操作系统中是否注入钩子函数的调用程序,包括:
S11b:从应用程序对应文件夹内的地址映射文件中查找是否存在钩子函数框架字符串,和/或,从应用程序自身加载的库中查找是否存在XposedBridge.jar文件;
S12b:若存在,则确定所述操作系统中注入钩子函数的调用程序。
具体的,通过从maps文件里扫描字符串“LIBFRIDA”及App自身加载的库中是否存在XposedBridge.jar等来进行检测,从而提供了检测钩子函数的方法,具体的,防hook处理中,map文件扫描字符串直接退出APP,检测到jar包后先调用其全局开关,调用关闭失败则退出。
在其他实施例中,本申请的步骤S1还可以包括:
S11c:在所述应用程序的执行过程中,抛出一预设异常;
S12c:在抛出所述预设异常后,检查应用程序的堆栈信息中是否有钩子函数的框架包;
S13c:若有,则确定所述操作系统中注入钩子函数的调用程序。
具体的,本实施例通过主动抛出异常的方式,检查堆栈信息中是否有HOOK框架包,然后调用其全局开关来关闭HOOK框架的方式进行反制。
图3示出了本申请实施例中根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序的具体步骤,如图3所示,包括:
S121:在所述抛出语句被所述应用程序执行过程中,将所述预设异常抛出,并在抛出异常的位置设置标志位为错误;
S122:在所述应用程序执行结束之前,若检查到所述标志位为正确,确定注入钩子函数。
具体的,本申请的步骤在实施时,会在执行过程中抛出一个HookDetectionException异常,如果被注入进程中存在钩子函数,那么钩子函数就会捕获并处理该异常。在detect_hook函数中,如果异常被捕获,则会将标志位hook_detected设置为True。在程序的最后,通过检查标志位的值来判断异常是否被钩子函数捕获,从而判断是否存在钩子函数的注入。
图4示出了本申请实施例中根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名的具体步骤,如图4所示,具体包括:
S211:若系统版本号为预设的第一版本号,获取当前操作系统运行中的进程列表;
S212:遍历所述进程列表,获取唯一标识符与当前顶层窗口所在进程相同的进程;
S213:获取该进程的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
具体的,在Android系统中,S211步骤中的应用程序信息可以通过ActivityManager的getRunningAppProcesses()方法获取。而S212步骤中的前台应用程序可以通过ActivityManager的getRunningTasks()方法获取,进而获得应用程序的包名。
在优选实施例中,本申请的方法步骤还包括:修改所述应用程序的加载库列表中可执行文件的头部信息。
具体的,由于应用程序在开发的时候会将主要的代码放在SO库当中,因为SO是二进制,不需要解释执行,在功能实现上比java层要快,因此攻击者可以采用inline hook(替换指令去修改运行时内存)的方式,本申请借助于并发现了inline hook的缺陷,即会去验证ELF头部信息,所以通过修改maps文件(每个App在系统中都有对应的加载库列表,这些加载库列表在)里面的ELF文件头,使其找不到linker地址从而崩溃,从而保障防护机制本身的安全。
图5示出了本申请另一个实施例中根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名的具体步骤,包括:
S221:若系统版本号为预设的第二版本号,获取当前活动窗口的根节点;
S222:获取该根节点所属的应用程序包名,并作为当前终端设备的显示界面上的顶层窗口包名。
以安卓系统进行举例,获取当前活动窗口的根节点可以用到安卓系统的AccessibilityService服务,AccessibilityService服务是一个可以获取系统UI界面信息的服务,可以用来辅助用户操作、提供无障碍服务等功能。在程序中,首先创建一个AccessibilityService对象,并在onServiceConnected()方法中进行初始化。然后,在onAccessibilityEvent()方法中获取当前窗口的根节点。
具体的,在AndroidManifest.xml文件中注册AccessibilityService服务。在AndroidManifest.xml文件中,注册AccessibilityService服务,之后创建一个MyAccessibilityService类,并实现onAccessibilityEvent()方法和onServiceConnected()方法,其中,onAccessibilityEvent()方法会在窗口状态改变时被调用,在其中获取当前窗口的根节点,并将其保存到一个成员变量中;onServiceConnected()方法在服务连接时被调用,在其中对服务进行初始化,指定需要监听的事件类型等。
之后,在程序的主Activity中,启动AccessibilityService服务,之后程序中,可以通过相关代码获取当前窗口的根节点,并获取其所属的应用程序包名。
图6示出了本申请又一个实施例中根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名的具体步骤,包括:
S231:若系统版本号为预设的第三版本号,获取当前操作系统运行中的任务列表;
S232:遍历所述任务列表,查找得到任务中顶层窗口所在的任务;
S233:获取该任务所属的应用程序的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
本实施例中,以安卓系统进行举例,通过ActivityManager类的getRunningTasks方法可以获取当前运行的任务列表,该方法需要传入一个整型参数,表示需要获取的任务数量。此处为了获取当前运行的任务列表,可将参数设置为1。遍历任务列表,可以通过遍历得到当前顶层窗口所在的任务,每个任务都有一个栈(Task Stack),其中包含该任务中所有的Activity,最上面的Activity就是当前顶层窗口所在的Activity,获取当前顶层窗口所在的Activity,可以通过Activity类的getComponentName方法获得,该方法返回一个ComponentName对象。通过ComponentName对象可以获取当前Activity所在的应用程序的包名。通过PackageManager类的getPackageInfo方法可以获取应用程序的信息,包括包名、版本号等信息,最终可以得到当前终端设备的显示界面上的顶层窗口包名。
当然需要理解的是,本申请可以根据第一版本信息、第二版本信息以及第三版本信息来采用不同的顶层包名获取方式,其中第一版本信息、第二版本信息以及第三版本信息可以根据不同操作系统以及版本号来适应性定义,本申请对此不做限制和赘述。
此外,本申请除了上述三种获取顶层包名的方式之外,还可以使用android.os.Build类获取设备信息和操作系统信息,然后通过getPackageName()方法获取顶层窗口的包名,具体的,本实施例包括如下几个步骤:
获取终端设备的设备信息和操作系统信息:可以使用系统API或第三方库获取设备信息和操作系统信息,例如Android平台上可以使用android.os.Build类获取设备信息和操作系统信息。
获取当前显示界面上的顶层窗口:可以使用系统API或第三方库获取当前显示界面上的顶层窗口,例如Android平台上可以使用android.app.ActivityManager类获取当前显示界面上的顶层窗口。
获取顶层窗口的包名:顶层窗口是一个窗口对象,包含了当前应用程序的信息。可以使用窗口对象的属性或方法获取顶层窗口的包名,例如Android平台上可以使用getPackageName()方法获取顶层窗口的包名。
返回顶层窗口的包名:将获取到的顶层窗口的包名返回给调用者。
示例性的,使用subprocess模块调用系统命令来获取设备信息和操作系统信息,使用adb shell dumpsys window windows命令获取当前显示界面上的顶层窗口,然后解析顶层窗口的信息来获取顶层窗口的包名。最后,将设备信息、操作系统信息和顶层窗口的包名一起返回给调用者。
本实施例中,使用subprocess模块调用系统命令和工具,可以大大减少代码的编写难度,降低开发者对于底层细节的依赖,使用系统命令和工具获取设备信息和顶层窗口包名,能够适配多种操作系统版本和设备型号,具有较好的兼容性,同时将设备信息、操作系统信息和顶层窗口的包名一起返回给调用者,能够提供更全面的设备状态信息,从而为后续的检测和防护提供更充分的数据支持,同时也方便开发者进行不同场景下的应用开发和测试。
图7示出了本申请实施例中所述根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过的步骤流程示意图,具体的,包括:
S31:根据所述设备信息确定包名白名单;
S32:比对当前运行的所述应用程序的程序包名与所述顶层窗口包名;
S33:若不一致,比对所述白名单和所述顶层窗口包名,若所述顶层窗口包名属于包名白名单中的一个,则运行当前应用程序,且确定所述应用程序的界面劫持攻击检测未被绕过。
具体的,根据所述设备信息确定包名白名单,包括:操作系统版本、设备制造商、设备型号等信息。获取当前运行的所述应用程序的程序包名和顶层窗口包名,比对当前运行的所述应用程序的程序包名与所述顶层窗口包名是否一致,若不一致,则继续比对所述白名单和所述顶层窗口包名,判断所述顶层窗口包名是否属于包名白名单中的一个,若所述顶层窗口包名属于包名白名单中的一个,则认为当前运行的所述应用程序没有被界面劫持攻击绕过,若所述顶层窗口包名不属于包名白名单中的一个,则可能存在界面劫持攻击被绕过的情况,需要进行进一步检测。
下面结合图8,以安卓系统为例对本申请的场景进行详细说明,具体的,APP启动并加载的SDK(Software Development Kit封装好的软件工具包),SDK内的代码首先去检测是否被HOOK,如果有则说明可能有攻击者在企图破解的防护代码,则APP退出或尝试去关闭HOOK框架,当第一道的防HOOK机制本身被绕过,攻击者进行inline hook时,由于hook框架自身校验elf文件的bug,使得框架崩溃,从而保障防护机制本身的安全性。然后去获取系统的版本,根据版本的不同使用对应的方法获取顶层窗口的应用,如果检测到顶层窗口非当前正在运行的APP,则获取手机型号,根据手机型号过滤掉其他移动设备厂商可能被用来伪造的包名,再去匹配白名单进行判断,如果匹配则正常运行,反之如果为非白名单内的包名,则通过toast弹窗(APP常见的弹出信息提示的方式)进行告警。
可以看出,本申请在程序运行之初首先做防hook检测,检测有三种:1、检测map文件是否有特征字符串,有则APP退出;2、通过抛出异常捕获钩子函数,检测到jar包,先尝试调用框架开关,调用失败退出;3、为了防止攻击者通过更底层的inline hook的方式,直接替换指令地址,通过修改文件头的方式使攻击者在inline hook的时候APP直接崩溃退出。之后如果第一步没有触发,则说明当前设备运行环境正常,则获取设备信息、系统版本,通过判断设备信息匹配对于的白名单,获取版本号匹配对应的获取顶层窗口的方法,最后根据上述白名单判断是否告警。
基于上述现状,本发明主要解决界面劫持防护机制被白名单绕过的问题,从未提高Android应用程序抵御界面劫持攻击的能力,增强应用安全性。
对应于上文实施例所述界面劫持攻击检测方法,本申请实施例提供一种应用程序的界面劫持攻击检测许可装置,为了便于说明,仅示出了与本申请实施例相关的部分。
图9示出了本申请实施例提供的一种应用程序的界面劫持攻击检测装置,包括:
钩子函数检测模块1,检测所述操作系统中是否注入钩子函数的调用程序;
顶层窗口包名获取模块2,根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
界面劫持攻击检测模块3,根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
通过上述三个模块的搭配使用,在进行应用程序的界面劫持攻击检测时,本申请通过耦合通过获取顶层窗口包名、当前运行的应用程序和设备信息等,检测应用程序的界面劫持攻击是否被绕过,综合运用钩子函数的检测来进行防hook处理,防止攻击者篡改获取的设备的信息,结合设备信息和系统信息的唯一性,避免了界面劫持攻击检测被绕过的情况,提高了界面劫持攻击检测的准确率。
基于相同的发明构思,在可选的实施例中,所述钩子函数检测模块包括:
异常抛出单元,在所述应用程序的执行过程中,抛出一预设异常;
钩子函数检测单元,根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序。
基于相同的发明构思,在可选的实施例中,所述钩子函数检测单元包括:
标志位设置单元,在所述抛出语句被所述应用程序执行过程中,将所述预设异常抛出,并在抛出异常的位置设置标志位为错误;
标志位检查单元。在所述应用程序执行结束之前,若检查到所述标志位为正确,确定注入钩子函数。
基于相同的发明构思,在可选的实施例中,所述顶层窗口包名获取模块包括:
进程列表获取单元,若系统版本号为预设的第一版本号,获取当前操作系统运行中的进程列表;
遍历单元,遍历所述进程列表,获取唯一标识符与当前顶层窗口所在进程相同的进程;
包名获取单元,获取该进程的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
基于相同的发明构思,在可选的实施例中,所述顶层窗口包名获取模块包括:
根节点获取单元,若系统版本号为预设的第二版本号,获取当前活动窗口的根节点;
包名获取单元,获取该根节点所属的应用程序包名,并作为当前终端设备的显示界面上的顶层窗口包名。
基于相同的发明构思,在可选的实施例中,所述顶层窗口包名获取模块包括:
任务列表获取单元,若系统版本号为预设的第三版本号,获取当前操作系统运行中的任务列表;
遍历单元,遍历所述任务列表,查找得到任务中顶层窗口所在的任务;
包名获取单元,获取该任务所属的应用程序的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
基于相同的发明构思,在可选的实施例中,所述界面劫持攻击检测模块包括:
白名单确定单元,根据所述设备信息确定包名白名单;
比对单元,比对当前运行的所述应用程序的程序包名与所述顶层窗口包名;
检测单元,若不一致,比对所述白名单和所述顶层窗口包名,若所述顶层窗口包名属于包名白名单中的一个,则运行当前应用程序,且确定所述应用程序的界面劫持攻击检测未被绕过。
图10为本申请实施例提供的一种应用程序的界面劫持攻击检测终端设备的结构示意图。该终端设备400包括:至少一个处理器401(图10中仅示出一个)处理器、存储器402以及存储在所述存储器402中并可在所述至少一个处理器401上运行的计算机程序403,所述处理器401执行所述计算机程序403时实现上述应用程序的界面劫持攻击检测方法实施例中的步骤。
所述终端设备400可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该终端设备可包括,但不仅限于,处理器401、存储器402。本领域技术人员可以理解,图10仅仅是终端设备400的举例,并不构成对终端设备400的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器401可以是中央处理单元(Central Processing Unit,CPU),该处理器401还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器402在一些实施例中可以是所述终端设备400的内部存储单元,例如终端设备400的硬盘或内存。所述存储器402在另一些实施例中也可以是所述终端设备400的外部存储设备,例如所述终端设备400上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器402还可以既包括所述终端设备400的内部存储单元也包括外部存储设备。所述存储器402用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器402还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载额定部分,可以参见其他实施例的相关描述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时可实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述各个方法实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

Claims (10)

1.一种应用程序的界面劫持攻击检测方法,所述应用程序运行在一终端设备上,所述终端设备搭载有一操作系统,其特征在于,包括:
检测所述操作系统中是否注入钩子函数的调用程序;
根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
2.根据权利要求1所述界面劫持攻击检测方法,其特征在于,所述检测所述操作系统中是否注入钩子函数的调用程序,包括:
在所述应用程序的执行过程中,抛出一预设异常;
根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序。
3.根据权利要求2所述界面劫持攻击检测方法,其特征在于,所述根据所述异常的处理情况,确定所述操作系统中是否注入钩子函数的调用程序,包括:
在抛出语句被所述应用程序执行过程中,将所述预设异常抛出,并在抛出异常的位置设置标志位为错误;
在所述应用程序执行结束之前,若检查到所述标志位为正确,确定注入钩子函数。
4.根据权利要求1所述界面劫持攻击检测方法,其特征在于,所述检测所述操作系统中是否注入钩子函数的调用程序,包括:
从所述应用程序对应文件夹内的地址映射文件中查找是否存在钩子函数框架字符串,和/或,从应用程序自身加载的库中查找是否存在预设格式的文件;若存在,则确定所述操作系统中注入钩子函数的调用程序;或者包括:
在所述应用程序的执行过程中,抛出一预设异常;在抛出所述预设异常后,检查所述应用程序的堆栈信息中是否有钩子函数的框架包;若有,则确定所述操作系统中注入钩子函数的调用程序。
5.根据权利要求1所述界面劫持攻击检测方法,其特征在于,所述系统信息包括系统类型和系统版本号;若所述系统类型为预设系统类型,所述根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名,包括:
若系统版本号为预设的第一版本号,获取当前操作系统运行中的进程列表;遍历所述进程列表,获取唯一标识符与当前顶层窗口所在进程相同的进程;获取该进程的包名,并作为当前终端设备的显示界面上的顶层窗口包名;
或者包括:
若系统版本号为预设的第二版本号,获取当前活动窗口的根节点;获取该根节点所属的应用程序包名,并作为当前终端设备的显示界面上的顶层窗口包名;
或者包括:
若系统版本号为预设的第三版本号,获取当前操作系统运行中的任务列表;遍历所述任务列表,查找得到任务中顶层窗口所在的任务;获取该任务所属的应用程序的包名,并作为当前终端设备的显示界面上的顶层窗口包名。
6.根据权利要求1所述界面劫持攻击检测方法,其特征在于,所述根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过,包括:
根据所述设备信息确定包名白名单;
比对当前运行的所述应用程序的程序包名与所述顶层窗口包名;
若不一致,比对所述白名单和所述顶层窗口包名,若所述顶层窗口包名属于包名白名单中的一个,则运行当前应用程序,且确定所述应用程序的界面劫持攻击检测未被绕过。
7.根据权利要求1所述界面劫持攻击检测方法,其特征在于,还包括:
修改所述应用程序的加载库列表中可执行文件的头部信息。
8.一种应用程序的界面劫持攻击检测装置,其特征在于,包括:
钩子函数检测模块,检测操作系统中是否注入钩子函数的调用程序;
顶层窗口包名获取模块,根据所述操作系统的系统信息,获取当前终端设备的显示界面上的顶层窗口包名;
界面劫持攻击检测模块,根据钩子函数的检测结果、获取的顶层窗口包名、当前运行的所述应用程序以及所述设备信息,确定所述应用程序的界面劫持攻击检测是否被绕过。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7任一项所述的方法的步骤。
CN202310706769.4A 2023-06-14 2023-06-14 应用程序的界面劫持攻击检测方法、装置及可读介质 Pending CN116738425A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310706769.4A CN116738425A (zh) 2023-06-14 2023-06-14 应用程序的界面劫持攻击检测方法、装置及可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310706769.4A CN116738425A (zh) 2023-06-14 2023-06-14 应用程序的界面劫持攻击检测方法、装置及可读介质

Publications (1)

Publication Number Publication Date
CN116738425A true CN116738425A (zh) 2023-09-12

Family

ID=87910992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310706769.4A Pending CN116738425A (zh) 2023-06-14 2023-06-14 应用程序的界面劫持攻击检测方法、装置及可读介质

Country Status (1)

Country Link
CN (1) CN116738425A (zh)

Similar Documents

Publication Publication Date Title
US11687653B2 (en) Methods and apparatus for identifying and removing malicious applications
US7665139B1 (en) Method and apparatus to detect and prevent malicious changes to tokens
US10839077B2 (en) Detecting malicious software
US20140013429A1 (en) Method for processing an operating application program and device for the same
EP3029593A1 (en) System and method of limiting the operation of trusted applications in the presence of suspicious programs
US10733296B2 (en) Software security
CN104268475B (zh) 一种运行应用程序的系统
CN104517054A (zh) 一种检测恶意apk的方法、装置、客户端和服务器
EP2876572A1 (en) Firmware-level security agent supporting operating system-level security in computer system
CN108959917A (zh) 一种电子邮件检测的方法、装置、设备及可读存储介质
US9785775B1 (en) Malware management
CN111259392B (zh) 一种基于内核模块的恶意软件拦截方法及装置
CN116738425A (zh) 应用程序的界面劫持攻击检测方法、装置及可读介质
CN116956272A (zh) 权限调用监控方法、装置及电子设备
CN115758353A (zh) 应用程序保护方法、装置、设备及存储介质
CN116204876A (zh) 异常检测方法、设备以及存储介质
CN114417349A (zh) 攻击结果判定方法、装置、电子设备及存储介质
US11886585B1 (en) System and method for identifying and mitigating cyberattacks through malicious position-independent code execution
CN113836529A (zh) 进程检测方法、装置、存储介质以及计算机设备
CN112632534A (zh) 一种恶意行为检测方法及装置
Kraunelis et al. A framework for detecting and countering android UI attacks via inspection of IPC traffic
CN110826061A (zh) 移动终端的运行环境检测方法及装置
CN112257067B (zh) 一种基于arm云游戏木马病毒服务器检测装置
CN114398192A (zh) 一种检测绕过Windows控制流防护CFG的方法及装置
CN118643493A (zh) 一种风险行为检测方法、程序产品、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination