CN105718796B - 一种安卓用户隐私数据访问的系统调用级监控方法 - Google Patents
一种安卓用户隐私数据访问的系统调用级监控方法 Download PDFInfo
- Publication number
- CN105718796B CN105718796B CN201610041457.6A CN201610041457A CN105718796B CN 105718796 B CN105718796 B CN 105718796B CN 201610041457 A CN201610041457 A CN 201610041457A CN 105718796 B CN105718796 B CN 105718796B
- Authority
- CN
- China
- Prior art keywords
- affairs
- privacy
- thread
- monitoring
- service
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Abstract
一种安卓用户隐私数据访问的系统调用级监控方法,包括以下步骤:步骤一:标记隐私系统服务;步骤二:隐私服务访问请求处理;步骤三:处理监控事务;步骤四:处理隐私访问返回结果;本发明通过识别隐私数据访问,并发起监控由第三方线程对提供服务的线程进行系统调用级监控;第三方服务通过扩展原系统ServiceManager服务,运用ptrace()系统调用获取被监控线程的系统调用信息;同时在整个监控过程中通过原系统中的属性系统实现被监控线程循环等待监控线程的启动,以及服务线程完成使监控线程停止监控的目的。本发明实现了系统调用级的隐私数据访问监控,能够在更深层次上以更细的粒度对隐私数据进行访问审计和保护策略实施。
Description
技术领域
本发明涉及智能移动终端用户隐私数据保护领域,具体涉及一种基于binder驱动的安卓用户隐私数据访问的系统调用级监控方法。
背景技术
作为当下最流行的开源移动设备操作平台,安卓系统中保存的用户隐私数据从数量和重要程度上都不断增加。随着基于安卓平台应用的盛行,第三方移动应用访问系统服务的行为逐渐常态化,但在自身功能不需要的情况下获取其他隐私权限的行为,很容易导致用户隐私数据的泄露,进而对用户的生活甚至财产造成不必要的损失。
第三方应用程序访问隐私数据时,安卓通过binder进程间通信机制远程调用系统服务来实现访问。应用程序首先查询系统服务,获取该系统服务对应的句柄值;获取该句柄值后,通过远程服务调用接口封装调用信息,并通过相关库函数将访问信息传递给binder驱动;binder驱动根据句柄值查询对应系统服务并发起事务,唤醒执行线程;执行线程获取访问事务,提供服务,返回访问结果。
目前,针对第三方应用隐私数据访问的监控机制主要分为两大类:静态的检测管理以及动态的分析控制。前者主要是在安装手机应用时,对其申请的隐私访问权限进行静态的分析并做相应处理,即对待安装的应用程序进行恶意检测,包括基于特征码和基于行为的检测方法。后者主要是针对已经安装的应用程序,在其运行过程中对其访问隐私数据的行为进行动态控制,主要包括扩展标记追踪、行为分析、接口模拟、应用级的强制访问控制、远程复制分析和标签化的追踪,以及基于自定义应用权限的隐私数据访问动态管理策略。作为最新的动态分析控制机制,基于自定义应用权限的隐私数据访问动态管理策略的主要思想是,对已安装应用进行权限标记,当该应用访问隐私数据时,通过查询标记的权限策略执行相应的处理流程。对比上述两种类型的监控机制,静态机制分析时间长,精度不高,但是操作简单。动态机制对应用程序进行细粒度的访问控制,但实现相对复杂,而且会降低应用程序的执行效率和系统的稳定性,以此为原理实现的安全软件也有被应用程序“绕过”监控或者发生代理攻击等风险。之所以会有这些问题,其中一个主要原因是安全软件进行动态访问管理时分析的是安卓框架层API接口级别的控制,粒度不够精细,对系统内部深入程度不够,而且无法防范服务程序被劫持的安全攻击,对于事后审计和分析而言粒度也比较粗。
发明内容
本发明的目的在于针对上述现有技术中的问题,提供一种安卓用户隐私数据访问的系统调用级监控方法,该方法能够深入系统内部,获取应用程序访问隐私数据过程中发生的系统调用级信息,不仅有利于排查安全泄露原因,而且对于执行更精细的安全策略也有重要意义。
为了实现上述目的,本发明采用的技术方案包括以下步骤:
步骤一:标记隐私系统服务;
(1.1)在系统服务注册时,通过待注册服务名称判断待注册服务的类型,如果是隐私服务,则执行步骤(1.2);如果是普通服务,则执行步骤(1.3);
(1.2)调用隐私服务注册命令注册服务,执行步骤(1.4);
(1.3)调用原系统服务注册命令注册服务;
(1.4)在binder驱动中收到注册服务请求时,创建binder实体对象对应的描述结构体变量node,并在其原描述结构中增加隐私标识need_trace成员,初始化need_trace成员的值为0,并判断此时调用命令是否为隐私服务注册命令,是则执行步骤(1.5);不是则执行步骤(1.6);
(1.5)恢复注册命令为普通注册命令,修改node结构中的need_trace标识为1;
(1.6)正常执行注册请求;
步骤二:隐私服务访问请求处理;
(2.1)服务请求线程执行到binder驱动中时,判断请求是否涉及隐私服务,涉及则执行步骤(2.2);不涉及则执行步骤(2.3);
(2.2)生成访问事务结构体,并将其成员变量need_trace标识置为1;
(2.3)正常处理访问请求,发送事务T1;
(2.4)提供服务的线程执行到binder驱动中时,判断事务T1的成员need_trace的值,如果是1,则执行步骤(2.5);如果是-1,则执行步骤(2.6);否则执行步骤(2.7);
(2.5)新建binder_transaction类型的事务T2;
(2.6)执行处理监控事务;
(2.7)执行隐私服务访问的线程获取监控事务T1返回到用户空间后,获取T1的BR_TRANSACTION请求命令及数据binder_transaction_data,判断binder_transaction_data中的成员sender_uid的值是否为负数,是则执行步骤(2.8);不是则执行步骤(2.9);
(2.8)同步等待监控线程的启动;
(2.9)处理服务访问事务后续流程;
步骤三:处理监控事务;
(3.1)监控线程获取监控事务后,解析该监控事务的请求数据;
(3.2)根据请求数据中的sender_pid成员变量得到待监控目标线程号;
(3.3)按照如下步骤监控目标线程:
(3.3a)根据获取的线程号,通过ptrace()调用PTRACE_ATTACH命令劫持目标线程;
(3.3b)根据获取的线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(3.3c)设置以该字符串为名称参数的全局属性变量,设置其值为“true”;
(3.3d)通过wait()等待劫持的目标线程信号;
(3.3e)获取信号后,通过ptrace()调用PTRACE_PEEKTEXT命令获取当前系统寄存器的值,并返回系统调用号和系统调用的返回值;
(3.3f)获取(3.3b)中定义的全局属性变量,并判断其值,如果是“false”则执行步骤(3.3h);
(3.3g)通过ptrace()调用PTRACE_SYSCALL命令监控目标线程,跳转到步骤(3.3d);
(3.3h)通过ptrace()调用PTRACE_DETACH命令释放监控;
(3.3i)返回上层调用并返回监控服务结果1,1代表隐私监控任务执行成功;
(3.4)完成监控任务后,根据监控结果处理返回值;如果结果返回为1则执行步骤(3.5);非1则执行步骤(3.6);
(3.5)释放监控任务缓冲区;
(3.6)执行正常返回处理过程;
步骤四:处理隐私访问返回结果;
(4.1)提供服务的线程完成隐私访问后,在binder驱动中获取处理事务,通过返回事务成员need_trace的值判断该任务是否为隐私访问事务,如是则执行步骤(4.2),否则执行步骤(4.4);
(4.2)处理隐私访问返回事务;
(4.3)提供服务的线程获取确认返回事务返回到用户空间后,处理BR_FINISHED事务;
(4.4)完成系统缺省流程,整个隐私访问完成。
所述的步骤(2.5)新建binder_transaction类型事务T2的步骤为:
(2.5a)查找提供监控任务的服务进程;
(2.5b)新建监控事务T2,并将T2的目标进程初始化为步骤(2.5a)查找到的服务进程;
(2.5c)初始化事务T2的code成员为当前执行线程号;
(2.5d)通过memmove()拷贝T1中隐私访问的数据到T2;
(2.5e)设置事务T2成员need_trace为-1;
(2.5f)设置事务T2成员need_reply为0;
(2.5e)设置事务T2成员sender_pid的值为原数值的负数;
(2.5g)按原流程初始化T2的其他成员;
(2.5h)添加事务T2并唤醒目标进程线程池中的一个空闲线程。
所述的步骤(2.6)执行处理监控事务的步骤为:
(2.6a)创建初始化事务描述结构tr并初始化其成员code为监控模块中监控服务代码;
(2.6b)初始化事务描述结构tr成员sender_pid为事务T2成员code的值;
(2.6c)初始化tr的其他成员;
(2.6d)通过kfree()释放监控事务T2。
所述的步骤(2.8)同步等待监控线程启动的步骤为:
(2.8a)获取当前执行的线程号;
(2.8b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(2.8c)以生成的字符串为名称参数获取其全局属性变量;
(2.8d)判断该全局属性变量值是否为“true”,是则执行步骤(2.9);不是则执行步骤(2.8c)。
所述的步骤(3.5)释放监控任务缓冲区的步骤为:
(3.5a)新建缓冲区描述类型的变量kdata;
(3.5b)初始化kdata成员cmd_free为BC_FREE_BUFFER;
(3.5c)初始化待释放缓冲区,并写入释放任务。
所述的步骤(4.2)处理隐私访问返回事务的步骤为:
(4.2a)初始化驱动的返回命令为BR_FINISHED;
(4.2b)删除隐私访问事务;
(4.2c)释放事务描述信息,释放引用。
所述的步骤(4.3)处理BR_FINISHED事务的步骤为:
(4.3a)获取当前执行的线程号;
(4.3b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(4.3c)以生成的字符串为名称参数获取全局属性变量;
(4.3d)设置该全局属性变量的值为“false”。
与现有技术相比,本发明具有如下的有益效果:
1、本发明基于binder通信技术,在安卓操作系统内核中识别出隐私数据访问请求,并发起监控事务,通过监控服务捕获系统调用信息,最终实现安卓系统隐私数据访问的系统调用级监控方法。该方法在系统服务注册阶段判断服务类型并修改binder驱动中相关描述信息;在服务访问阶段对请求信息进行过滤,并标记事务;在事务执行阶段,发起监控事务,由监控模块执行监控,通过同步技术使得监控线程先于被监控线程执行;服务线程提供隐私访问服务,监控线程通过ptrace()系统调用实现系统调用信息捕获,最终完成隐私访问的系统调用级监控。本发明能够对应用程序访问隐私数据进行监控,并获取隐私数据访问过程中发生的所有系统调用信息。与现有技术相比,本发明能够实现系统调用级的隐私数据访问监控,能够在更深层次上以更细的粒度对隐私数据进行访问审计和保护策略实施。
2、本发明实现服务的系统级标记、过滤以及监控,对隐私数据访问事务过滤的效率较高;通过ptrace()底层结构实现监控,对被监控线程性能影响较低;它具有性能高效的特点,基于Emmagee的性能测试结果表明,本发明所带来的性能损失小于8%。
3、本发明提供了对安卓系统隐私数据的系统调用级监控保护,它实际上对隐私数据访问的整个调用流程进行控制,所以不仅能够捕获系统调用过程中发生的系统调用信息,而且可以在内核级别实现安全控制策略的实施,为隐私数据的保护提供了强有力的保障。
附图说明
图1本发明的总体流程图;
图2本发明隐私服务访问请求处理的流程图;
图3本发明隐私事务处理的流程图;
图4本发明监控事务处理的流程图。
具体实施方式
下面结合附图对本发明做进一步的详细说明。
参见图1,本发明基于binder驱动实现隐私数据访问的识别、监控任务发起和系统调用监控两部分。在本发明的执行过程中需要对注册的系统服务进行隐私相关的标记,隐私数据的识别部分主要包括访问线程中判断访问请求是否涉及隐私服务,以及在执行线程中发起监控事务,对于识别部分和监控部分还需要进行同步,使得监控线程先于被监控线程执行隐私访问运行以及执行线程完成服务后停止监控线程的执行。
操作系统为了用户态进程与底层硬件设备进行交互,提供了操作系统的系统服务,并提供了一组接口实现访问,即系统调用接口。如此分层的设计不仅方便编程而且提高了系统的安全性,更重要的是满足接口规范的程序具有可移植性,方便不同平台的兼容。安卓提供了bionic系统库,基于该库可以方便应用调用Linux内核功能。在安卓系统中有300多个系统调用,用于实现应用程序与底层硬件设备的访问。
如图1所示,标记隐私系统服务的步骤如下:
步骤1.1,在系统服务注册时,通过待注册服务名称判断待注册服务的类型,如果是隐私服务,则执行步骤1.2;如果是普通服务,则执行步骤1.3;
本发明主要针对第三方应用程序访问隐私数据的行为进行监控,针对访问不同的隐私数据,需要通过不同的系统服务实现访问,即通过binder机制实现RPC调用;而安卓系统中系统服务由Java代码实现,通过将自己注册到ServiceManager中方便其他模块的访问,在注册阶段通过建立提供服务的对象并通过名称进行注册。此时,通过该注册名称进行策略判断,识别其是否涉及隐私数据的访问。例如,地理位置访问服务注册名称为“location”字符串。
步骤1.2,通过向addService()注册接口传递隐私服务注册命令ADD_SERVICE_TRANSACTION_PLUS注册服务,执行步骤1.4;
本发明是基于原系统的服务机制,而原系统中并没有对待注册的服务进行识别的功能,即没有隐私服务注册命令,只有普通注册命令,因此需要修改注册命令相关定义,扩展了隐私服务注册命令参数ADD_SERVICE_TRANSACTION_PLUS,此处定义的枚举量值为5。
步骤1.3,调用原系统服务注册命令ADD_SERVICE_TRANSACTION注册服务;
步骤1.4,在binder驱动中收到注册服务请求时,创建binder实体对象对应的描述结构体变量node,并在其原描述结构中增加隐私标识need_trace成员,初始化其need_trace成员为0,并判断此时调用命令是否为隐私服务注册命令,是则执行步骤1.5;不是则执行步骤1.6;
本发明对相关服务的描述通过binder_node结构体实现,而原系统中不对服务类型区分,即没有描述隐私特性的成员,所以需要修改该结构体的定义,添加int类型的need_trace成员。
步骤1.5,恢复注册命令为普通注册命令,修改node结构中的need_trace标记位为1;
步骤1.6,正常执行注册请求;
如图2所示,按以下步骤进行隐私服务访问请求处理:
步骤2.1,服务请求线程执行到binder驱动中时,判断请求是否涉及隐私服务,如果涉及则执行步骤2.2;不涉及则执行步骤2.3;
本发明中对隐私访问的判断策略是请求服务方的UID(User ID)大于10000、目标方UID为1000并且请求的服务描述变量中的need_trace值为1,因为安卓系统中默认第三方应用的UID大于10000,而且系统服务的UID默认为1000。原系统中对访问事务的描述体binder_transaction中并没有监控的表示,所以修改该结构体,添加int型成员need_trace,表示该事务是否需要监控;因为需要对执行服务线程和监控线程进行同步,所以需要将sender_pid置为负值,用于其执行时同步判断监控线程的启动。因为在服务线程处理该事务时,通过判断事务中的sender_pid值是否为负值进行同步等待。
步骤2.2,生成访问事务结构体,并将其成员变量need_trace标识置为1;
步骤2.3,正常处理访问请求,发送事务T1;
访问线程发送完请求事务后,唤醒目标服务进程的空闲线程执行访问事务,此时这两个线程并发执行,访问线程等待返回结果,空闲执行线程处理访问事务。
步骤2.4,提供服务的线程执行到binder驱动中时,判断事务T1的成员need_trace的值,如果是1,则执行步骤2.5;如果是-1,则执行步骤2.6;否则,则执行步骤2.7;
步骤2.5,参照图3,执行以下步骤新建binder_transaction类型的事务T2:
(2.5a)查找提供监控任务的服务进程;
本发明中,通过binder_transaction结构体中need_trace描述事务的隐私属性,服务线程根据该值获取访问请求,向提供监控服务的进行发送监控事务;本发明对监控功能的实现是基于对ServiceManager系统服务进行扩展实现的,ServiceManager提供系统服务的注册、查询等功能,本发明对其扩展添加了监控功能。而binder驱动对ServiceManager以0号服务进行描述,通过全局变量binder_context_mgr_node进行引用。
(2.5b)新建监控事务T2,将T2目标进程初始化为上一步即步骤(2.5a)查找到的服务进程;
(2.5c)初始化事务T2的code成员为当前执行线程号;
(2.5d)通过memmove()拷贝T1中隐私访问的数据到T2;
(2.5e)设置事务T2成员need_trace为-1;
(2.5f)设置事务T2成员need_reply为0;
(2.5g)设置事务T2成员sender_pid的值为原数值的负数;
(2.5h)按原流程初始化T2的其他成员;
(2.5i)添加事务T2并唤醒目标进程线程池中的一个空闲线程;
步骤2.6,执行以下步骤处理监控事务:
(2.6a)创建初始化事务描述结构tr并初始化其成员code值为5;
本发明中提供监控功能的模块是基于ServiceManager系统服务实现的,通过扩展其监控功能实现监控目标线程功能,该监控服务远程调用代码参数为SVC_MGR_PTACE_SERVICE,即值为5的宏定义,因此此处code代码5就是扩展的服务代码。
(2.6b)初始化事务描述结构tr成员sender_pid为事务T2成员code的值;
(2.6c)按原流程初始化tr的其他成员;
(2.6d)通过kfree()释放监控事务T2;
步骤2.7,执行隐私服务访问的线程获取监控事务T1返回到用户空间后,获取T1的BR_TRANSACTION请求命令及其相应数据binder_transaction_data,判断binder_transaction_data中的成员sender_uid是否为负,是则执行步骤2.8;不是则执行步骤2.9;
监控事务中通过code成员传递待监控的线程号,通过设置need_trace为-1表示该事务为特殊的监控事务,并且需要将need_reply设置为0表示该事务不需要返回结果。监控线程执行监控任务时通过sender_pid传递线程号,并将服务请求号改为5,因为通过功能扩展的ServiceManager的监控服务的执行代码为5。
步骤2.8,执行以下步骤同步等待监控线程的启动:
(2.8a)获取当前执行的线程号;
(2.8b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(2.8c)以生成的字符串为名称参数获取其全局属性变量,此处通过全局属性系统的property_get()接口函数实现访问;
(2.8d)判断该全局属性变量值是否为“true”,是则执行步骤2.9;不是则执行步骤(2.8c);
步骤2.9,正常处理服务访问事务后续流程;
安卓属性系统是基于共享内存的全局属性系统,其格式为字符串对,本发明基于线程号实现全局属性的建立以及共享,从而实现跨进程间线程的变量共享,进一步实现其同步功能。
如图4所示,按以下步骤处理监控事务:
步骤3.1,监控线程获取监控事务后,解析该监控事务的请求数据;
步骤3.2,根据请求数据中的sender_pid成员变量得到待监控目标线程号,由隐私服务访问请求处理步骤中步骤2.7可知,此处sender_pid即用于传递待监控目标线程号;
步骤3.3,监控目标线程的步骤如下:
(3.3a)根据获取的线程号,通过ptrace()调用PTRACE_ATTACH命令劫持目标线程(即获取的线程号);
(3.3b)根据(获取的)线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(3.3c)设置以该字符串为名称参数的全局属性变量,设置其值为“true”;
(3.3d)通过wait()等待子进程(即劫持的目标线程)信号;
(3.3e)获取信号时,通过PTRACE_PEEKTEXT命令调用ptrace()获取系统寄存器中的值,并返回系统调用号和返回值。根据ARM Linux系统调用机制可知,系统调用号是通过arm_v7寄存器传递给内核的,同时通过arm_v0返回调用结果值;
(3.3f)获取(3.3b)中定义的全局属性变量,并判断其值,如果是“false”则执行步骤(3.3h);
(3.3g)通过ptrace()调用PTRACE_SYSCALL命令监控目标线程,跳转到步骤(3.3d);
(3.3h)通过ptrace()调用PTRACE_DETACH命令释放监控;
(3.3i)返回上层调用并返回监控服务结果1(1代表隐私监控任务执行成功);
步骤3.4,完成监控任务后,根据监控结果处理返回值;如果结果返回为1则执行步骤3.5;如果不是1则执行步骤3.6;
步骤3.5,释放监控任务缓冲区步骤:
(3.5a)新建缓冲区描述类型kdata,此处kdata用于描述待释放的缓冲区,其主要成员有cmd_free(表示释放命令)和buffer指针(表示待释放缓冲区的地址)等;
(3.5b)初始化kdata成员cmd_free为BC_FREE_BUFFER;
(3.5c)初始化待释放缓冲区,并写入释放任务;
步骤3.6,执行正常返回处理过程;
对于ServiceManager的修改,是通过对其功能进行扩展,生成枚举值为5的监控服务;因为执行ptrace()系统调用的进程运行权限要高于被监控线程,所以修改ServiceManager的运行权限为root。
如图1所示,处理隐私访问返回结果步骤为:
步骤①,提供服务的线程完成隐私访问后,在binder驱动中获取本次处理的事务,通过返回事务成员need_trace的值判断该任务是否为隐私访问事务,如果是则自己的事务等待队列发送一个包含隐私事务确认类型为BINDER_WORK_TRANSACTION_COMPLETE_PLUS的返回事务执行步骤②,否则执行步骤④;
步骤②,隐私访问返回事务处理步骤:
(②a)初始化驱动的返回命令为BR_FINISHED;
(②b)删除隐私访问事务;
(②c)释放事务描述信息,释放引用;
步骤③,提供服务的线程获取确认返回事务返回到用户空间后,处理BR_FINISHED类型事务,执行以下步骤:
(③a)获取当前执行的线程号;
(③b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(③c)以生成的字符串为名称参数获取全局属性变量;
(③d)设置该全局属性变量值为“false”,表示隐私数据访问完成,让监控逻辑循环停止;
步骤④,完成系统缺省后续流程,整个隐私访问完成。
本发明的核心思想是:识别隐私数据访问,并发起监控由第三方线程对提供服务的线程进行系统调用级监控;第三方服务通过扩展原系统ServiceManager服务,运用ptrace()系统调用获取被监控线程的系统调用信息;同时在整个监控过程中通过原系统中的属性系统实现被监控线程循环等待监控线程的启动以及服务线程完成使监控线程停止监控的目的。
本发明的功能和性能效果能够通过以下实验进一步说明:
1)实验条件
将本发明实现到安卓4.1.1系统源代码和goldfish2.6.9内核源代码中。安卓系统是由美国Google公司主导研发的一个开源项目,它的设计目标是提供对主流的移动设备进行支持,具有软件栈架构明确、模块化设计、可扩展性强、基于成熟Linux内核等特性,目前已经被主流移动设备商支持,尤其在智能手机领域占领头地位。软件环境使用Ubuntu12.04交叉编译安卓4.1.1系统源代码和goldfish2.6.9内核源代码;硬件使用该源代码自带的基于QEMU的emulator模拟器,其CPU为ARM_v7。
2)实验内容
选用Emmagee测试工具和LogCat日志查看工具对Android 4.1.1原系统和goldfish2.6.9纯净版内核,以及应用了本发明的安卓4.1.1系统和goldfish2.6.9内核运行相同测试应用和操作,进行功能和性能测试,以得出本发明的功能特性以及所带来的性能损失。
测试的任务包括:(1)运行访问地理位置服务的第三方应用测试监控机制功能特性;(2)运行定制的应用进行性能测试,该应用实现一次最近更新的地理位置内容的访问,进而完成启动,通过测试其启动时间,即一次服务访问时间实现性能测试。
通过LogCat查看运行中获取的隐私访问中的系统调用信息,并通过Emmagee运行定制应用5次,对其地理位置访问时间进行记录,最后取平均值。
3)结果分析
通过应用的运行以及LogCat输出的日志,表明本发明实现了监控的基本要求,即对应用访问隐私数据过程中发生的系统调用信息进行了捕获;通过性能测试中的数据可知,本发明具有性能高效的优点,基于Emmagee的性能测试结果表明,它所带来的性能损失小于8%。
Claims (6)
1.一种安卓用户隐私数据访问的系统调用级监控方法,其特征在于,包括以下步骤:
步骤一:标记隐私系统服务;
(1.1)在系统服务注册时,通过待注册服务名称判断待注册服务的类型,如果是隐私服务,则执行步骤(1.2);如果是普通服务,则执行步骤(1.3);
(1.2)调用隐私服务注册命令注册服务,执行步骤(1.4);
(1.3)调用原系统服务注册命令注册服务;
(1.4)在binder驱动中收到注册服务请求时,创建binder实体对象对应的描述结构体变量node,并在其原描述结构中增加隐私标识need_trace成员,初始化need_trace成员的值为0,并判断此时调用命令是否为隐私服务注册命令,是则执行步骤(1.5);不是则执行步骤(1.6);
(1.5)恢复注册命令为普通注册命令,修改node结构中的need_trace标识为1;
(1.6)正常执行注册请求;
步骤二:隐私服务访问请求处理;
(2.1)服务请求线程执行到binder驱动中时,判断请求是否涉及隐私服务,涉及则执行步骤(2.2);不涉及则执行步骤(2.3);
(2.2)生成访问事务结构体,并将其成员变量need_trace标识置为1;
(2.3)正常处理访问请求,发送事务T1;
(2.4)提供服务的线程执行到binder驱动中时,判断事务T1的成员need_trace的值,如果是1,则执行步骤(2.5);如果是-1,则执行步骤(2.6);否则执行步骤(2.7);
(2.5)新建binder_transaction类型的事务T2;步骤为:
(2.5a)查找提供监控任务的服务进程;
(2.5b)新建监控事务T2,并将T2的目标进程初始化为步骤(2.5a)查找到的服务进程;
(2.5c)初始化事务T2的code成员为当前执行线程号;
(2.5d)通过memmove()拷贝T1中隐私访问的数据到T2;
(2.5e)设置事务T2成员need_trace为-1;
(2.5f)设置事务T2成员need_reply为0;
(2.5e)设置事务T2成员sender_pid的值为原数值的负数;
(2.5g)按原流程初始化T2的其他成员;
(2.5h)添加事务T2并唤醒目标进程线程池中的一个空闲线程;
(2.6)执行处理监控事务;
(2.7)执行隐私服务访问的线程获取监控事务T1返回到用户空间后,获取T1的BR_TRANSACTION请求命令及数据binder_transaction_data,判断binder_transaction_data中的成员sender_uid的值是否为负数,是则执行步骤(2.8);不是则执行步骤(2.9);
(2.8)同步等待监控线程的启动;
(2.9)处理服务访问事务后续流程;
步骤三:处理监控事务;
(3.1)监控线程获取监控事务后,解析该监控事务的请求数据;
(3.2)根据请求数据中的sender_pid成员变量得到待监控目标线程号;
(3.3)按照如下步骤监控目标线程:
(3.3a)根据获取的线程号,通过ptrace()调用PTRACE_ATTACH命令劫持目标线程;
(3.3b)根据获取的线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(3.3c)设置以该字符串为名称参数的全局属性变量,设置其值为“true”;
(3.3d)通过wait()等待劫持的目标线程信号;
(3.3e)获取信号后,通过ptrace()调用PTRACE_PEEKTEXT命令获取当前系统寄存器的值,并返回系统调用号和系统调用的返回值;
(3.3f)获取(3.3b)中定义的全局属性变量,并判断其值,如果是“false”则执行步骤(3.3h);
(3.3g)通过ptrace()调用PTRACE_SYSCALL命令监控目标线程,跳转到步骤(3.3d);
(3.3h)通过ptrace()调用PTRACE_DETACH命令释放监控;
(3.3i)返回上层调用并返回监控服务结果1,1代表隐私监控任务执行成功;
(3.4)完成监控任务后,根据监控结果处理返回值;如果结果返回为1则执行步骤(3.5);非1则执行步骤(3.6);
(3.5)释放监控任务缓冲区;
(3.6)执行正常返回处理过程;
步骤四:处理隐私访问返回结果;
(4.1)提供服务的线程完成隐私访问后,在binder驱动中获取处理事务,通过返回事务成员need_trace的值判断该任务是否为隐私访问事务,如是则执行步骤(4.2),否则执行步骤(4.4);
(4.2)处理隐私访问返回事务;
(4.3)提供服务的线程获取确认返回事务返回到用户空间后,处理BR_FINISHED事务;
(4.4)完成系统缺省流程,整个隐私访问完成。
2.根据权利要求1所述的安卓用户隐私数据访问的系统调用级监控方法,其特征在于,所述的步骤(2.6)执行处理监控事务的步骤为:
(2.6a)创建初始化事务描述结构tr并初始化其成员code为监控模块中监控服务代码;
(2.6b)初始化事务描述结构tr成员sender_pid为事务T2成员code的值;
(2.6c)初始化tr的其他成员;
(2.6d)通过kfree()释放监控事务T2。
3.根据权利要求1所述的安卓用户隐私数据访问的系统调用级监控方法,其特征在于,所述的步骤(2.8)同步等待监控线程启动的步骤为:
(2.8a)获取当前执行的线程号;
(2.8b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(2.8c)以生成的字符串为名称参数获取其全局属性变量;
(2.8d)判断该全局属性变量值是否为“true”,是则执行步骤(2.9);不是则执行步骤(2.8c)。
4.根据权利要求1所述的安卓用户隐私数据访问的系统调用级监控方法,其特征在于,所述的步骤(3.5)释放监控任务缓冲区的步骤为:
(3.5a)新建缓冲区描述类型的变量kdata;
(3.5b)初始化kdata成员cmd_free为BC_FREE_BUFFER;
(3.5c)初始化待释放缓冲区,并写入释放任务。
5.根据权利要求1所述的安卓用户隐私数据访问的系统调用级监控方法,其特征在于,所述的步骤(4.2)处理隐私访问返回事务的步骤为:
(4.2a)初始化驱动的返回命令为BR_FINISHED;
(4.2b)删除隐私访问事务;
(4.2c)释放事务描述信息,释放引用。
6.根据权利要求1所述的安卓用户隐私数据访问的系统调用级监控方法,其特征在于,所述的步骤(4.3)处理BR_FINISHED事务的步骤为:
(4.3a)获取当前执行的线程号;
(4.3b)根据线程号生成“‘debug.t’+线程号+‘.started’”类型的字符串;
(4.3c)以生成的字符串为名称参数获取全局属性变量;
(4.3d)设置该全局属性变量的值为“false”。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610041457.6A CN105718796B (zh) | 2016-01-21 | 2016-01-21 | 一种安卓用户隐私数据访问的系统调用级监控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610041457.6A CN105718796B (zh) | 2016-01-21 | 2016-01-21 | 一种安卓用户隐私数据访问的系统调用级监控方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105718796A CN105718796A (zh) | 2016-06-29 |
CN105718796B true CN105718796B (zh) | 2018-08-03 |
Family
ID=56154768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610041457.6A Active CN105718796B (zh) | 2016-01-21 | 2016-01-21 | 一种安卓用户隐私数据访问的系统调用级监控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105718796B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109165509B (zh) * | 2018-08-31 | 2023-03-10 | 武汉轻工大学 | 软件实时可信度量的方法、设备、系统及存储介质 |
CN109635589B (zh) * | 2018-12-25 | 2022-06-14 | 成都卫士通信息产业股份有限公司 | So文件调用的方法及装置 |
CN110365642B (zh) * | 2019-05-31 | 2022-06-03 | 平安科技(深圳)有限公司 | 监控信息操作的方法、装置、计算机设备及存储介质 |
CN112068970B (zh) * | 2020-08-10 | 2024-04-19 | 珠海全志科技股份有限公司 | 基于异构多核处理器的rpc实现方法及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158914A (zh) * | 2006-10-06 | 2008-04-09 | 国际商业机器公司 | 在用户空间中进行系统调用截取的方法和系统 |
CN103927485A (zh) * | 2014-04-24 | 2014-07-16 | 东南大学 | 基于动态监控的Android应用程序风险评估方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140245386A1 (en) * | 2012-07-10 | 2014-08-28 | Barak ROSENBERG | System and method for access control management |
-
2016
- 2016-01-21 CN CN201610041457.6A patent/CN105718796B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101158914A (zh) * | 2006-10-06 | 2008-04-09 | 国际商业机器公司 | 在用户空间中进行系统调用截取的方法和系统 |
CN103927485A (zh) * | 2014-04-24 | 2014-07-16 | 东南大学 | 基于动态监控的Android应用程序风险评估方法 |
Non-Patent Citations (2)
Title |
---|
SysTracker:一种采用系统调用监测安卓应用资源使用的方法;许铝才;《计算机应用与软件》;20141031;第31卷(第10期);第244-250 * |
一种动态监控恶意APK应用的移动操作系统;王怀军 等;《西北大学学报(自然科学版)》;20140630;第44卷(第3期);第373-378页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105718796A (zh) | 2016-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7996905B2 (en) | Method and apparatus for the automatic determination of potentially worm-like behavior of a program | |
CN101553769B (zh) | 用于跟踪并监控计算机应用的系统和方法 | |
CN104766012B (zh) | 基于动态污点追踪的数据安全动态检测方法及系统 | |
KR101669630B1 (ko) | 특정된 트랜젝션 콘텍스트에서의 소프트웨어의 조건부의 동적 인스트루먼테이션 | |
CN105718796B (zh) | 一种安卓用户隐私数据访问的系统调用级监控方法 | |
US9836343B2 (en) | Framework for user-mode crash reporting | |
CN103699480B (zh) | 一种基于java的web动态安全漏洞检测方法 | |
US8578339B2 (en) | Automatically adding bytecode to a software application to determine database access information | |
Sadeghi et al. | Analysis of android inter-app security vulnerabilities using covert | |
CN106055385B (zh) | 监控虚拟机进程的系统和方法、过滤page fault异常的方法 | |
US6226693B1 (en) | Method and system for logical event management | |
US20070006165A1 (en) | Lightweight highly available infrastructure to trace program execution | |
CN110290212A (zh) | 服务调用记录方法、装置、计算机设备和存储介质 | |
CN107832207A (zh) | 接口性能测试方法、装置、存储介质和计算机设备 | |
CN101458754B (zh) | 一种监控应用程序行为的方法及装置 | |
CN102253885A (zh) | 用户界面分析管理 | |
CN109388538A (zh) | 一种基于内核的文件操作行为监控方法及装置 | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN110489310B (zh) | 一种记录用户操作的方法、装置、存储介质及计算机设备 | |
US20200201984A1 (en) | Communicating trace information between security zones | |
US7680935B2 (en) | Entity domains | |
CN108073499A (zh) | 应用程序的测试方法及装置 | |
US7877640B2 (en) | Method and system for providing enhanced exception messages for exceptions thrown by virtual machines | |
CN115576649A (zh) | 一种基于行为监控的容器运行时安全检测方法 | |
CN116893945A (zh) | 一种运维云平台业务预警方法、系统及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |