著录项信息
专利名称 | 一种实现安全防护的方法 |
申请号 | CN201210126865.3 | 申请日期 | 2012-04-26 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2013-10-30 | 公开/公告号 | CN103379481A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04W12/00 | IPC分类号 | H;0;4;W;1;2;/;0;0;;;H;0;4;L;2;9;/;0;6;;;H;0;4;M;1;/;7;2;5查看分类表>
|
申请人 | 腾讯科技(深圳)有限公司 | 申请人地址 | 广东省深圳市福田区振兴路赛格科技园2栋东403室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 腾讯科技(深圳)有限公司,腾讯云计算(北京)有限责任公司 | 当前权利人 | 腾讯科技(深圳)有限公司,腾讯云计算(北京)有限责任公司 |
发明人 | 梁家辉 |
代理机构 | 北京三高永信知识产权代理有限责任公司 | 代理人 | 罗振安 |
摘要
本发明公开了一种实现安全防护的方法及一种防火墙,属于计算机领域。所述方法包括:防火墙将包含有第一函数的代码模块注入到目标进程中,所述第一函数用于修改非法应用对应的安全包信息;所述防火墙触发所述第一函数执行修改非法应用对应的安全包信息的操作,使所述非法应用因自身对应的安全包信息被修改而执行失败。本发明通过将具有修改安全包信息功能的代码模块注入到目标进程中,对非法应用对应的安全包信息进行修改,使非法应用因自身对应的安全包信息被修改而执行失败,使得终端在不具有iptable/netfilter模块的情况下也可以实现防火墙功能,并且不存在兼容性问题,不受固件版本的限制。
1.一种实现安全防护的方法,其特征在于,用于基于Linux开发的操作系统中,所述方法包括:
防火墙将包含有第一函数的代码模块注入到目标进程中,所述第一函数用于修改非法应用对应的安全包信息;
所述防火墙触发所述第一函数执行修改所述非法应用对应的安全包信息的操作,使所述非法应用因自身对应的安全包信息被修改而执行失败;
其中,所述触发所述第一函数执行修改非法应用对应的安全包信息的操作,具体包括:
寻找所述目标进程当前所调用的第二动态链接库的基地址及所述第二动态链接库的重定向表;
在所述重定向表中,获取需要重定向的第三函数的地址;
获取所述第一函数的地址A5;
将所述重定向表中所述第三函数的地址重定向为A5;
通过调用所述第三函数触发所述第一函数根据用户传递的参数修改非法应用对应的安全包信息的操作;
其中,所述第一函数为对所述第三函数的重写,所述第三函数包含在所述第二动态链接库中。
2.根据权利要求1所述的方法,其特征在于,所述目标进程为包管理服务PackageManagerService的宿主进程,所述安全包信息为所述PackageManagerService的成员变量。
3.根据权利要求1所述的方法,其特征在于,所述防火墙将包含有第一函数的代码模块注入到目标进程中,具体包括:
所述防火墙获取自身进程的第二函数地址A1和所述自身进程的第一动态链接库的基地址A2;
通过查看预设路径的文件获取所述目标进程的第一动态链接库的基地址A3;
计算得到所述目标进程的第二函数地址A4=A3-A2+A1;
将所述目标进程的寄存器地址修改为A4,并使所述第二函数所调用的动态链接库的地址指向所述第一函数的所属的代码模块的地址;
其中,所述第一动态链接库为所述防火墙自身进程和所述目标进程共同调用的动态链接库,所述第二函数位于所述第一动态链接库中,所述寄存器用于记录所述目标进程当前运行的函数的地址。
4.根据权利要求1所述的方法,其特征在于,所述第一函数根据用户传递的参数修改非法应用对应的安全包信息之前,所述方法还包括:
所述防火墙向操作系统注册得到本地服务,所述本地服务用于等待并接收用户传递的参数。
一种实现安全防护的方法\n技术领域\n[0001] 本发明涉及计算机领域,特别涉及一种实现安全防护的方法及一种防火墙。\n背景技术\n[0002] 随着手机的功能增多,已经越来越被人们应用于网络中。但是,随着手机功能的增大,其网络安全性也开始受到威胁,因此,在手机中安装防火墙已经成为一种趋势。\n[0003] 在近期的Android(安卓)手机系统中,主要是通过系统内核中的iptable/netfilter模块实现防火墙功能。但是,在早期版本的Android固件中并不存在iptable/netfilter模块,因此,很多厂商采用了在编译手机的ROM(Read-Only Memory,只读内存)时,将iptable/netfilter模块添加进去的方式,以使得手机在此基础之上实现防火墙功能。\n[0004] 在实现本发明的过程中,发明人发现现有技术至少存在以下问题:\n[0005] 现有技术仍不能保证所有手机均具有iptable/netfilter模块,在没有iptable/netfilter模块的手机上仍不能实现防火墙功能,而且,现有的处理方式很容易产生兼容性问题。\n发明内容\n[0006] 为了解决现有技术中存在的问题,本发明实施例提供了一种实现安全防护的方法及一种防火墙。所述技术方案如下:\n[0007] 一种实现安全防护的方法,用于基于Linux开发的操作系统中,所述方法包括:\n[0008] 防火墙将包含有第一函数的代码模块注入到目标进程中,所述第一函数用于修改非法应用对应的安全包信息;\n[0009] 所述防火墙触发所述第一函数执行修改非法应用对应的安全包信息的操作,使所述非法应用因自身对应的安全包信息被修改而执行失败;\n[0010] 其中,所述触发所述第一函数执行修改非法应用对应的安全包信息的操作,具体包括:\n[0011] 寻找所述目标进程当前所调用的第二动态链接库的基地址及所述第二动态链接库的重定向表;\n[0012] 在所述重定向表中,获取需要重定向的第三函数的地址;\n[0013] 获取所述第一函数的地址A5;\n[0014] 将所述重定向表中所述第三函数的地址重定向为A5;\n[0015] 通过调用所述第三函数触发所述第一函数根据用户传递的参数修改非法应用对应的安全包信息的操作;\n[0016] 其中,所述第一函数为对所述第三函数的重写,所述第三函数包含在所述第二动态链接库中。\n[0017] 进一步地,所述目标进程为包管理服务PackageManagerService的宿主进程,所述安全包信息为所述PackageManagerService的成员变量。\n[0018] 进一步地,所述防火墙将包含有第一函数的代码模块注入到目标进程中,具体包括:\n[0019] 所述防火墙获取自身进程的第二函数地址A1和所述自身进程的第一动态链接库的基地址A2;\n[0020] 通过查看预设路径的文件获取所述目标进程的第一动态链接库的基地址A3;\n[0021] 计算得到所述目标进程的第二函数地址A4=A3-A2+A1;\n[0022] 将所述目标进程的寄存器地址修改为A4,并使所述第二函数所调用的动态链接库的地址指向所述第一函数的所属的代码模块的地址;\n[0023] 其中,所述第一动态链接库为所述防火墙自身进程和所述目标进程共同调用的动态链接库,所述第二函数位于所述第一动态链接库中,所述寄存器用于记录所述目标进程当前运行的函数的地址。\n[0024] 进一步地,所述第一函数根据用户传递的参数修改非法应用对应的安全包信息之前,所述方法还包括:\n[0025] 所述防火墙向操作系统注册得到本地服务,所述本地服务用于等待并接收用户传递的参数。\n[0026] 本发明实施例提供的技术方案带来的有益效果是:通过将具有修改安全包信息功能的代码模块注入到目标进程中,对非法应用对应的安全包信息进行修改,使非法应用因自身对应的安全包信息被修改而执行失败,使得终端在不具有iptable/netfilter模块的情况下也可以实现防火墙功能,并且不存在兼容性问题,不受固件版本的限制。\n附图说明\n[0027] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。\n[0028] 图1是本发明实施例1中提供的一种实现安全防护的方法的流程示意图;\n[0029] 图2是本发明实施例2中提供的一种实现安全防护的方法的流程示意图;\n[0030] 图3是本发明实施例3中提供的一种防火墙的结构示意图;\n[0031] 图4是本发明实施例3中提供的一种防火墙中的注入模块的结构示意图;\n[0032] 图5是本发明实施例3中提供的一种防火墙中的触发模块的结构示意图;\n[0033] 图6是本发明实施例3中提供的一种防火墙的第二种结构示意图。\n具体实施方式\n[0034] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。\n[0035] 实施例1\n[0036] 如图1所示,本发明实施例提供了一种实现安全防护的方法,其中,该方法可通过软件进行实现,并将该软件安装入终端中,上述方法具体包括如下步骤:\n[0037] 101、将包含有第一函数的代码模块注入到目标进程中;\n[0038] 其中,第一函数用于修改非法应用对应的安全包信息。\n[0039] 102、触发第一函数执行修改非法应用对应的安全包信息的操作,使非法应用因自身对应的安全包信息被修改而执行失败。\n[0040] 本实施例提供了一种实现安全防护的方法,使得在不具有iptable/netfilter模块的情况下也可以实现防火墙功能,并且不存在兼容性问题,不受固件版本的限制。\n[0041] 实施例2\n[0042] 本实施例提供了一种实现安全防护的方法,是在实施例1的基础之上进行的改进。\n[0043] 需要说明的是,在本实施例中,下述方法可通过软件实现,例如防火墙软件,并将防火墙软件安装于移动终端中,且本发明所提供的方法适用于基于Linux开发的系统中。\n[0044] 在本实施例中,以Android系统的手机为例进行说明。其中,Android系统是基于Linux开发的移动操作系统,但是其具备了比Linux粒度更细的权限安全机制。对于Android中的 可执行程序(包括合法应用和非法应用),程序的开发者需要预先在项目的配置文件里为自身申请权限。例如,读写系统联系人、联网请求的权限。当应用编译时,编译器会把权限信息、配置文件、资源文件和Dex文件会被打包在一起,形成Android上可执行文件——APK包。\n[0045] 在Android上,每当安装一个应用,都要经过以下两个步骤:\n[0046] A.缓存该应用的安装包的信息,即记录在APK包中的信息,操作系统会统一把安装包的信息记录在路径为/data/system/下的packages.list和packages.xml两个文件里。\n[0047] B.后台的PackageManagerService(包管理服务)服务,会从packages.list和packages.xml中加载信息到内存中。\n[0048] 由于,在Android上的每启动一个应用,都经由ActivityManagerService——PackageManagerService——Zygote三个关键环节,因此,从PackageManagerSerivce传递给Zygote的参数(uid、gid和gids),也即安全包信息,决定了应用在启动后所具备的权限,本实施例提供了一种方法,通过修改PackageManagerService中的安全包信息,以使得非法的应用在运行时出错,以结束非法应用,达到防火墙的效果。\n[0049] 本实施例所提供的方法,具体通过安装于移动终端中的防火墙进行实现,该防火墙可包括四个代码模块:注入模块、控制模块、通信模块和启动模块,其中,注入模块用于将控制模块对应的代码注入到PackageManagerService的宿主进程system_server中,控制模块用于修改PackageManagerService中的成员变量,启动模块用于触发控制模块的启动、通信模块用于接收用户传递的参数,并将用户传递的参数发送给控制模块,以便于控制模块对PackageManagerService中的成员变量进行修改。\n[0050] 如图2所示,一种实现安全防护的方法,具体包括如下步骤:\n[0051] 201、将包含有第一函数的控制模块注入到目标进程中;\n[0052] 其中,第一函数中具有预定的逻辑,即包括有修改安全包信息的功能的代码,其从属于控制模块,第一函数通过对目标进程所执行的函数进行重写并加入具有修改安全包信息的功能的代码实现,目标进程具体的为PackageManagerService的宿主进程system_server。\n[0053] 进一步地,将控制模块注入到目标进程中,需要通过目标进程与防火墙自身进程共同调用的第二函数及第一动态链接库的地址计算得到第一动态链接库的基地址,以便将第一动态链接库的地址指向控制模块的地址,使得目标进程在执行任务时,可执行控制模块中的第一函数。\n[0054] 在本实施例中,由于需要使目标进程一定能够执行到被注入的控制模块,因此需要使用防火墙自身进程和目标进程均需调用的动态链接库,在本实施例中以lico.so作为第一动态 链接库,dlopen函数作为第二函数为例进行说明,dlopen函数为lico.so中的函数。\n[0055] 具体包括如下过程:\n[0056] 201-1、防火墙获取自身进程的dlopen函数的地址addr_my_dlopen以及libc.so的基地址addr_my_base;\n[0057] 其中,dlopen函数用于打开动态链接库,其中包含有欲打开的动态链接库的地址。\n[0058] 201-2、通过查看路径/proc/pid/maps,获取目标进程的libc.so的基地址addr_other_base;\n[0059] 201-3、计算得到目标进程的dlopen函数的基地址addr_other_dlopen;\n[0060] 其中,addr_other_dlopen=addr_other_base-add_my_base+addr_my_dlopen。\n[0061] 201-4、将目标进程的寄存器地址修改为addr_other_dlopen,并使目标进程的dlopen函数的地址指向控制模块的地址。\n[0062] 其中,步骤201-4的操作通过ptrace函数实现,ptrace函数为linux提供的具有修改寄存器地址、函数地址等功能的函数,寄存器用于存储目标进程当前运行的函数的地址。\n[0063] 202、寻找目标进程当前调用的第二动态链接库的基地址及第二动态链接库的重定向表;\n[0064] 203、在重定向表中,获取需要重定向的第三函数的地址;\n[0065] 其中,为了使对目标进程进行注入后,使得目标进程执行第一函数后,又不丧失原功能,第一函数应为对第三函数的重写,第三函数为目标进程需要调用的第二动态链接库中的函数。\n[0066] 204、获取第一函数的地址,并将重定向表中的第三函数的地址重定向为第一函数的地址;\n[0067] 205、执行第三函数,以触发第一函数中预定的逻辑;\n[0068] 其中,由于第三函数的在重定向表中的地址被修改,因此,当目标进程执行第三函数时,实际转到第一函数的地址,触发了第一函数中的代码所规定的逻辑。\n[0069] 需要说明的是,步骤202-205的操作可通过ptrace函数进行实现。\n[0070] 206、通过通讯模块获取用户传递的参数;\n[0071] 具体地,用户可通过防火墙的软件界面对手机中的应用进行控制,软件界面接到用户的控制命令后,将对应的参数传递给通讯模块,通讯模块再将参数传递给控制模块,其中,上述参数即为用户传递的参数。\n[0072] 通讯模块获取用户传递的参数,具体包括:\n[0073] 防火墙向操作系统注册得到本地服务(例如命名为Local Service),并使Local Service的宿主进程Firewall_Service处于等待软件界面连接的状态,以接收用户传递的参数,例如on/off、app_name等。\n[0074] 其中,通讯模块获取Firewall_Service发送的用户传递的参数,通过Android系统的IPC(Inter-Process Communication,进程间通信)——binder通讯实现。\n[0075] 207、根据用户传递的参数修改非法应用对应的安全包信息,使非法应用因自身对应的安全包信息被修改导致执行失败;\n[0076] 需要说明的是,当非法应用的安全包信息(例如gid)被修改后,非法应用在执行时,不具有合法的gid,则不能正常运行。\n[0077] 本实施例提供了一种实现安全防护的方法,使得在不具有iptable/netfilter模块的情况下也可以实现防火墙功能,并且不存在兼容性问题,不受固件版本的限制。\n[0078] 实施例3\n[0079] 如图3所示,本实施例提供了一种防火墙,该防火墙包括:\n[0080] 注入模块301,用于将含有第一函数的代码模块注入到目标进程中,该第一函数用于修改非法应用对应的安全包信息;\n[0081] 触发模块302,用于触发第一函数执行修改非法应用对应的安全包信息的操作,使非法应用因自身对应的安全包信息被修改而执行失败。\n[0082] 进一步地,目标进程为包管理服务PackageManagerService的宿主进程,安全包信息为PackageManagerService的成员变量。\n[0083] 进一步地,如图4所示,注入模块301,具体包括:\n[0084] 第一地址获取单元3011,用于获取防火墙自身进程的第二函数地址A1和第一动态链接库的基地址A2;\n[0085] 第二地址获取单元3012,用于通过查看预设路径的文件获取目标进程的第一动态链接库的基地址A3;\n[0086] 地址计算单元3013,用于计算得到目标进程的第二函数地址A4=A3-A2+A1;\n[0087] 地址修改单元3014,用于将目标进程的寄存器地址修改为A4,并使第二函数所调用的动态链接库的地址指向第一函数的所属的代码模块的地址;\n[0088] 其中,第一动态链接库为防火墙自身进程和目标进程共同调用的动态链接库,第二函数位于第一动态链接库中,寄存器用于记录目标进程当前运行的函数的地址。\n[0089] 进一步地,如图5所示,触发模块302,具体包括:\n[0090] 获取单元3021,用于寻找目标进程当前所调用的第二动态链接库的基地址及第二动态链 接库的重定向表;\n[0091] 第三地址获取单元3022,用于在重定向表中,获取需要重定向的第三函数的地址;\n[0092] 第四地址获取单元3023,用于获取第一函数的地址A5;\n[0093] 重定向单元3024,用于将重定向表中第三函数的地址重定向为A5;\n[0094] 触发单元3025,用于通过调用第三函数触发第一函数根据用户传递的参数修改非法应用对应的安全包信息的操作;\n[0095] 其中,第一函数为对第三函数的重写,第三函数包含在第二动态链接库中。\n[0096] 进一步地,如图6所述,上述防火墙还包括:\n[0097] 通讯模块303,用于在触发模块302触发第一函数根据用户传递的参数修改非法应用对应的安全包信息之前,向操作系统注册得到本地服务,本地服务用语用于等待并接收用户传递的参数。\n[0098] 本实施例提供了一种防火墙,使得在不具有iptable/netfilter模块的情况下也可以实现防火墙功能,并且不存在兼容性问题,不受固件版本的限制。\n[0099] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。\n[0100] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
法律信息
- 2020-09-22
专利权的转移
登记生效日: 2020.09.03
专利权人由腾讯科技(深圳)有限公司变更为腾讯科技(深圳)有限公司
地址由518000 广东省深圳市福田区赛格科技园2栋东403室变更为518000 广东省深圳市福田区振兴路赛格科技园2栋东403室
专利权人变更为腾讯云计算(北京)有限责任公司
- 2015-05-06
- 2013-11-27
实质审查的生效
IPC(主分类): H04W 12/00
专利申请号: 201210126865.3
申请日: 2012.04.26
- 2013-10-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-06-09
|
2008-10-10
| | |
2
| |
2007-06-20
|
2006-07-21
| | |
3
| |
2011-03-09
|
2010-11-10
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |