一种移动应用程序透明通信保护方法与装置与流程

文档序号:20680992发布日期:2020-05-08 18:23阅读:241来源:国知局
一种移动应用程序透明通信保护方法与装置与流程

本发明涉及移动应用程序通信领域,尤其涉及一种移动应用程序透明通信保护方法与装置。



背景技术:

随着移动互联网的迅速发展,移动智能终端的使用越来越普及,尤其是谷歌公司开源的android系统更是占据了移动智能设备的绝大市场份额,各种移动应用程序层出不穷,这些移动应用程序在给人们的生活带来各种便利的同时,也由于其网络通信行为的复杂性、不确定性,给移动互联网安全、稳定运行带来了严峻的挑战。例如,某些移动应用程序在运行过程中可能会与多个不同的服务器进行通信,恶意攻击者通过监听嗅探网络传输数据获取用户传输数据,甚至个别移动应用程序会与潜在的恶意服务器进行隐匿通信从而泄露个人隐私数据和其他重要信息。因此,有必要对移动应用程序运行过程中的网络流量数据进行保护,以便更好保护用户隐私。

目前由于tls/ssl普及还不够,同时限于应用程序开发者技术能力和成本,目前很多移动应用程序仍使用明文传输数据,存在攻击者分析通信内容获取关键信息的风险,使得用户隐私数据存在极大的安全风险。虽然目前也有一些方案,如采用专门的https协议,修改系统底层固件或重新封装通信函数,在开发时需引入新的sdk,使用专门的通信接口,极大的增加更加了开发者的负担,同时也影响了应用程序兼容性。当前并没有针对移动应用程序透明通信保护的成熟方案。



技术实现要素:

为克服上述现有技术的不足,本发明提供一种移动应用程序透明通信保护方法与装置,不需要引入专门的sdk,开发者移动应用无需修改,不改变用户使用行为,即可使得移动应用程序的网络连接得到安全检查,发送的数据经过透明加密处理,防止他人通过分析网络数据,获取用户和应用的敏感数据,极大提高安全性和使用便捷性。

实现移动应用程序透明通信保护方法与装置,同时还可以提供一种透明内网代理的功能,解决由于内网服务器限制,需要某些移动应用在使用中使用某些固定的暴露在外网的服务器来访问内网数据的应用场景。

为了实现上述目的,本发明提供的技术方案是:

本发明实施例提出一种移动应用程序透明通信保护方法,该方法包括以下步骤:

s1:在android系统中安装移动应用程序客户端,所述移动应用程序客户端用于监控所述android系统上所有应用的进程;

s2:当被保护应用启动时,所述移动应用程序客户端注入所述被保护应用的内存空间,并替换所述被保护应用的网络连接函数为所述移动应用程序客户端中定义的拦截函数;

s3:当所述被保护应用发起网络请求时,由所述拦截函数获取源链接网络请求的ip地址和端口,并将其对应更改为通信转发节点服务器的ip地址和端口,然后执行网络协议中密钥协商、传输数据加密,并按照所述网络协议填入所述源链接网络请求的ip地址和端口以及所述传输数据形成网络数据包进行发送;

s4:获取所述拦截函数的执行结果,并返回所述被保护应用的内存空间继续执行;

s5:所述通信转发节点服务器根据所述网络协议从所述网络数据包中获取所述源链接网络请求ip地址和端口,对所述源链接网络请求ip地址和端口执行安全检测并根据负载均衡策略转发至网络请求服务器;

s6:所述网络请求服务器获取所示网络数据包,按照所述网络协议解析获取所述源链接网络请求的ip地址和端口、所述传输数据,并作出应答消息;

s7:所述应答消息通过会话密钥加密后,经所述通信转发节点服务器返回所述被保护应用程序,被所述拦截函数拦截,通过解密并获取所述应答消息后返回给上层函数。

根据本发明的一些实施例,所述步骤s1,包括:

通过所述移动应用程序客户端获取所述android系统中安装的应用列表,根据应用场景需求选择被保护应用集合;

通过所述移动应用程序客户端选择网络协议的参数,并配置服务器证书以及相关加密、解密参数。

在本发明的一些实施例中,所述步骤s2,包括:

s21:获取所述android系统安装的应用的当前进程列表,判断所述被保护应用是否在运行;

s22:若存在所述被保护应用在运行,获取所述被保护应用的目标进程pid,使用系统函数ptrace拦截所述目标进程,并将拦截函数所在的动态链接库注入所述被保护应用的内存空间;

s23:利用所述ptrace执行注入的所述动态链接库中的入口函数,保存所述被保护应用的当前执行状态,获取所述被保护应用的网络连接函数connect,sendto,recvfrom及注入的拦截函数x_connect,x_sendto,x_recvfrom所在内存地址,并替换相应网络连接函数实现调用劫持;

s24:所述被保护应用发起网络连接时,调用所述拦截函数,并在其执行完毕后跳转回所述系统函数继续执行。

在本发明的一些实施例中,所述步骤s3,包括:

密钥协商,所述被保护应用发起网络请求时,所述拦截函数x_connect随机生成通信会话密钥k,利用配置的服务器证书公钥进行加密,得到会话密钥密文e(k),按照以下格式编排所述网络数据包:会话密钥密文e(k)前增加2字节编码固定为a6ef作为网络数据包头部,经所述通信转发节点服务器发送至所述网络请求服务器,所述通信转发节点服务器解密获取会话密钥,完成密钥协商。

数据加密,所述被保护应用发送所述网络请求时,所述拦截函数使用分组密码算法及通信会话密钥k对所述网络数据包中的传输数据加密得到传输数据密文ek(m),并计算所述传输数据的哈希散列值h(m)。

数据解密,所述被保护应用接收所述网请求时,所述拦截函数使用分组密码及通信会话密钥k对所述传输数据解密得到传输数据明文m;

传输格式,所述拦截函数将按照以下传输格式编排所发送的网络数据包:在所述传输数据密文ek(m)前增加42字节编码作为网络数据包头部,其中,前2个字节固定为a6ee,第3到18字节存放源链接ip地址包括ipv4或ipv6协议地址,第19到22字节存放源链接端口信息,第23到42字节存放传输数据哈希散列值h(m)。

在本发明的一些实施例中,所述步骤s5,包括:

安全检测,所述网络请求服务器根据获取的上述网络请求,对连接的ip地址进行安全性检测,确认该ip不在威胁黑名单中,对于不安全的请求连接则返回错误信息码。

负载均衡,所述通信转发节点服务器根据获取网络连接信息,以及目前服务器连接状态,根据预先定义好的负载均衡策略,选择网络请求服务器,并转发该请求。

本发明实施例还提出一种移动应用程序透明通信保护装置,该装置包括:

移动应用程序客户端,用于管理、配置被保护应用集合,执行注入拦截函数、网络连接相关操作函数,执行网络协议操作。

通信转发节点服务器,用于对网络连接进行安全检测,并依据负载均衡策略进行网络请求的转发。

网络请求服务器,用于执行网络协议操作、解密数据、拼装源链接请求并代理访问、以及加密应答消息并返回。

根据本发明的一些实施例,所述移动应用程序客户端包括管理配置模块、注入拦截模块、网络协议模块、加解密模块;所述移动应用程序客户端启动后通过所述管理配置模块进行所述被保护应用的选择、网络协议选择及相关加解密配置;

所述移动应用程序客户端在所述被保护应用启动时,通过注入拦截模块,将拦截代码注入所述被保护程序所加载的动态链接库所在内存空间中,并查找网络连接函数所在地址进行替换,在所述被保护应用进行网络连接时,通过所述拦截代码将网络连接重定向为所述通信转发节点服务器,并将源连接及通信数据按所述网络协议模块定义格式进行填充;

在所述移动应用程序客户端进行通信数据传输时,通过网络协议模块进行加解密密钥协商,然后调用加解密模块进行填充的通信数据加密,并发送至通信转发节点服务器。

在本发明的一些实施例中,所述,所述通信转发节点服务器包括安全检测模块、负载均衡模块;

所述通信转发节点服务器接受移动终端发送的通信数据,并从中获取源访问链接信息,包括ip地址、端口信息等,进行安全性检测、鉴权、完整性校验。对于通过所述安全检测的链接进一步转发给负载均衡模块,否则,拦截该请求。

所述通信转发节点服务器对于并发的大量链接通过负载均衡模块,按照请求类型选择传输性能最佳的网络请求服务器,并转发接受的通信数据。

在本发明的一些实施例中,所述网络请求服务器包括代理请求模块、加解密模块;

所述网络请求服务器通过加解密模块解密通信数据还原传输数据,并按照网络协议格式获取源访问服务器ip地址、端口信息。

所述网络请求服务器代理请求模块获取传输数据及源访问ip地址、端口信息,解密数据拼装为正常访问请求,并代理应答该请求。同时,加密请求应答数据并返回。

本发明实施例还提出一种android移动终端设备或计算机可读存储介质,

所述android移动终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的一个或者多个可执行程序,所述处理器执行所述可执行程序时实现如上所述的移动应用程序透明通信保护方法的步骤。

与现有技术相比,本发明的有益效果是:

本方法通过注入拦截的方法透明的接管被保护应用的网络连接,使得上层应用行为无需更改,开发者也不需要引入其他额外开销,便可实现网络应用传输数据是经过加密处理的,实现网络连接的安全检测,可有效的防止网络通信内容被监听嗅探,保护敏感数据不受非法侵害窃取,使移动应用程序通信更加安全高效。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例的移动应用程序透明通信保护方法的流程图;

图2为本发明实施例中注入替换被保护应用函数的拦截方法工作流程图;

图3为本发明实施例中实现拦截函数所在的动态链接库注入动作的流程图;

图4为本发明实施例中替换相应网络连接函数实现调用劫持的流程图;

图5为本发明实施例中密钥协商的编码格式图;

图6为本发明实施例中数据包传输格式图;

图7为本发明实施例中移动应用程序透明通信保护方法与装置的结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本说明公开的范围完整地传达给本领域的技术人员。

现结合附图和具体实施方式对本发明进一步说明。

在本发明的第一实施例中,提供一种移动应用程序透明通信保护方法,参见图1所示,包括以下步骤:

步骤s1:在android系统安装移动应用程序客户端,监控所有程序进程执行状态;

本发明实施例中:在移动终端中安装移动通信保护客户端,监控所有程序进程执行状态;该移动应用程序是指通信流量待保护的智能移动终端上已安装的所有应用程序,该执行状态为移动终端中运行的所有系统程序进程或用户程序进程状态。具体方式,采用移动应用程序客户端,获取智能移动终端系统中已安装的应用程序列表,系统版本号。根据用户配置的待保护应用程序列表,定时检测系统中应用程序状态,获取的状态包括应用程序是否在运行,若应用程序在运行,则进一步获取待保护应用程序uid号,应用程序进程身份标识pid号,应用程序包名等。

步骤s2:被保护应用启动时,客户端注入被保护应用内存空间,替换被保护应用网络连接函数为客户端中定义的拦截函数。

由于多数智能终端操作系统,如ios、android、wp等对应用程序使用进程沙箱隔离独立的进程空间,使运行环境之间互不干涉,因此对于拦截修改已执行程序的流程,需要通过跨进程操作在其进程空间中运行自定义代码。对于该跨进程操作,在android系统中通常是通过hook的方式,利用ptrace函数附加目标进程,向其进程空间中注入动态执行库so文件,执行其中的自定义流程,从而达到跨进程空间的注入拦截目的。

本发明实施例中,移动通信保护客户端监测到被保护应用程序启动,该被保护应用程序所在列表由用户预先在移动通信保护客户端选定。客户端通过进程追踪函数将网络连接相关动态执行库注入被保护应用所在内存空间,执行自定义代码,替换被保护应用网络连接函数为客户端中定义的拦截函数。

步骤s3:在被保护应用发起网络请求时,由拦截函数获取源链接网络请求ip地址和端口等网络信息,并更改网络连接地址为通信转发节点服务器的ip地址和端口,然后执行网络协议中密钥协商、传输数据加密,并按照网络协议填入源链接请求ip地址、端口、传输数据等网络信息。

本发明实施例中,该拦截函数为自定义的网络连接、传输相关函数,为保证宿主进程正常运行,其函数参数与所替换原函数相同。由于操作系统中在不同的框架应用层封装有为应用链接使用的各式各类网络连接相关api函数,可以逐层逐一进行拦截,或根据操作系统调用关系向底层追溯所封装的基本函数进行拦截。

拦截函数在被保护应用发起网络请求时,获取源链接网络请求ip地址和端口等网络信息,并更改网络连接地址为通信转发节点服务器的ip地址和端口,然后执行网络协议中密钥协商、传输数据加密,并按照网络协议填入源链接请求ip地址、端口、传输数据等网络信息。该通信转发节点服务器的ip地址,既可以是ipv4地址也可以是ipv6地址;为提高效率,密钥协商过程利用公钥密码原理协商会话密钥,传输数据加密则采用分组密码算法和协商的会话密钥进行加解密;该网络协议则是在tcp/ip协议框架下,自定义的具体网络网络协议。

步骤s4:获取拦截函数执行结果,并返回被保护应用内存空间继续执行。

本发明实施例中:该拦截函数按照步骤s3进行操作后,获取网络信息发送或网络信息接收的状态结果。该执行结果可以通过java反射调用反馈给应用层,也可以通过跨进程通知的方式反馈给移动通信保护客户端,同时为保证宿主系统正常运行,还需将执行结果按照所替换函数格式填写并返回给上层调用函数。进一步地,从拦截函数内存空间跳转到被保护应用程序内存空间执行后续的操作流程。

步骤s5:通信转发节点服务器根据网络协议从传输的网络数据包中获取源链接网络请求ip地址和端口,完成安全检测并根据负载均衡策略转发至网络请求服务器。

本发明实施例中,该通信转发节点服务器识别并验证传输的网络数据包是否符合网络网络协议定义,如不符合规定则将该数据包丢弃,如符合,则按照定义解析获取源链接ip地址和端口信息,进行安全性检查和负载分发。该通信转发节点服务器应部署在网络边界,并作为堡垒机进行相应的系统安全加固,具备记录实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。

步骤s6:网络请求服务器获取传输网络数据,按照网络协议格式解析获取源链接ip地址、端口、传输数据等网络信息,拼装为正常网络访问并代理该请求应答。

本发明实施例中,该网络请求服务器获取通信转发节点服务器所传输的网络数据,按照步骤s3所定义的网络协议格式获取源链接ip地址、端口信息,该ip地址可以是ipv6地址也可以是ipv4地址。进一步按照定义的网络协议格式获取传输数据密文,利用已协商的会话密钥及分组密码算法进行解密获取传输数据明文,并根据设置验证传输明文的完整性。网络请求服务器使用源链接ip地址、端口信息、传输数据拼装为正常网络访问,获取请求应答。

步骤s7:应答消息通过会话密钥加密后,经通信转发节点服务器返回android被保护应用程序,同样被拦截函数所劫持,通过解密并获取应答消息,返回给上层函数。

本发明实施例中,该应答消息明文同样经过会话加密后经信转发节点服务器返回android被保护应用程序,该传输信道既可以是阻塞式又可是非阻塞式的。经拦截函数解密获取应答消息后传输至上层应用,该解密操作得到的明文信息应存在于内存之中。一般地,该访问过程应记录在访问日志中,供后续分析使用。

进一步,针对上述方法中另一实施例,本发明s1步骤中在android系统安装移动应用程序客户端还应具备配置管理功能,包括:

通过所述移动应用程序客户端获取android设备中安装的应用程序列表,根据应用场景需求选择被保护应用集合。由于各手机生产商根据具体生产要求定制改造不同的系统功能导致android系统种类碎片化严重,不同的系统版本也会存在系统权限或系统api不同的状况存在,使得获取系统应用程序列表方式复杂多变。在本实施实例中,获取已安装应用程序列表方法包括以下步骤,首先,利用android系统提供的packagemanager服务管理类查询已安装的应用集合,进一步地可以获得已安装的应用程序基本信息,包括程序名、包名、入口类名等;其次,通过调用系统adb命令获取应用列表集合;再次,作为辅助手段建立常用应用程序列表,通过queryintentactivities查询是否存在符合指定intent的activity,从而判断是否安装了列表中应用;最终,将经以上方法获取的应用列表集合求并集得到应用程序列表。在此基础上根据应用场景需求,选择被保护应用集合。

通过所述移动应用程序客户端选择网络协议参数,配置服务器证书,配置相关加解密参数。本发明实施例中,该网络协议参数是可以由用户设置,也可在协商过程中从服务端获取默认传输参数。该服务器证书可以由使用者导入的软证书也可以是安装时封装好的软证书,或者使用otg方式接入的硬件key,本发明并不限制证书的接入方式,一般情况下证书默认设定为符合x.509格式标准证书,证书为1024位rsa公钥的asn.1编码的十六进制描述,共占据140bytes存储空间。在本发明中,该加解密算法、参数设定会话传输时的所采用的加解密算法,一般采用aes256cbc模式。

需要说明的是,本实施例给出的应用程序列表获取方法只是本发明列举的优选实施方式,本发明并不唯一限定该方式。

进一步地,针对上述方法中另一实施例,本发明s2步骤中,注入替换被保护应用函数的拦截方法工作流程,如图2所示,包括:

步骤s21:获取当前android设备应用进程列表,确定被保护应用程序是否在运行。本发明实施例中,可根据系统版本选择不同的系统函数获取当前运行的系统进程列表,在android5.0版本以下通过getrunningtasks方法进行列表获取,在android5.0-6.0版本通过androidprocesses.getrunningappprocesses(),在android7.0版本以上可以在root后通过调用ps命令获取当前系统运行的系统进程列表。进一步地,通过与已配置的被保护应用程序列表进行对比,判断是否存在正在运行的被保护程序。

步骤s22:获取被保护应用目标进程pid,使用系统函数ptrace挂载目标进程,并将拦截函数所在的动态链接库注入被保护应用内存空间。在本发明实施例中,通过ndk调用ps命令查看被保护应用的目标进程pid,并遍历’/proc/$pid/status’获取被保护进程的相关信息,然后通过如下步骤实现拦截函数所在的动态链接库注入动作,如图3所示:

(1)附加到远程进程:通过调用输入参数为ptarce_attach和pid的ptrace函数,实现对远程进程的附加,此时远程进程的执行会被终端,父进程可以通过调用waitpid来判断子进程是否已进入暂停状态。

(2)寄存器数据暂存:在通过ptrace改变远程进程执行流程前,需要先通过调用输入参数为ptrace_getregs、pid和寄存器指针的ptrace函数,实现读取远程宿主进程的所有寄存器值,并通过memcpy进行原寄存器数据保存。在detach时则可向远程进程写入保存的原寄存器值用于恢复远程进程原有的执行流程。

(3)远程内存分配:为实现注入模块的加载,还需要调用mmap函数在远程进程地址空间内分配内存。首先是获取远程mmap函数地址。由于mmap函数在’/system/lib/libc.so’模块中,通过读取’/proc/pid/maps’可以获取到系统模块在本地进程和远程进程的加载基地址,而要获取远程进程内存空间中mmap等函数的虚拟地址,可通过计算本地进程中mmap等函数相对于模块的地址偏移,然后使用此地址偏移加上远程进程对应模块的基地址,该地址即使远程进程内存空间中对应函数的虚拟地址;其次构造mmap参数,填入要申请的地址空间等信息;再次通过调用参数为ptrace_peektext、ptrace_poketext的ptrace函数将远程函数调用的参数压栈,修改进程的pc寄存器为需要执行的函数地址(此处需要区分arm架构下的arm和thumb两种指令),之后调用request参数为ptrace_cont的ptrace函数进程继续运行以此远程执行mmap函数;最后通过得到分配的内存空间的初始地址,通过调用参数为ptrace_poketext的ptrace函数将拦截注入模块写入该附加进程的内存中。

步骤s23:利用ptrace执行注入动态链接库中入口函数,保存系统目前执行状态,获取被保护应用网络连接函数connect,sendto,recvfrom及注入的拦截函数x_connect,x_sendto,x_recvfrom所在内存地址,并替换相应网络连接函数实现调用劫持。在本发明实施例中,通过以下步骤实现,如图4所示:

(1)远程加载拦截注入模块:首先获取到远程dlopen函数的地址,采用类似步骤s22中方式,在"/system/bin/linker"模块中获取dlopen函数地址;然后构造dlopen函数参数,包括在步骤s22中通过远程内存分配得到注入拦截模块内存地址,以及显式调用动态库的参数rtld_now|rtld_global;最后通过ptrace函数远程调用dlopen函数。

(2)远程执行动态库入口函数:首先获取远程dlsym函数的地址,该函数与dlopen函数在同一模块中;然后构造dlsym函数参数,包括上一步骤中获取的拦截模块的地址,及入口函数命名地址;再次,远程调用dlsym函数来跳转到拦截模块入口函数。

(3)网络函数拦截劫持:在入口函数执行时,获取被保护应用网络连接函数connect,sendto,recvfrom所在系统libc库中的地址及注入的拦截函数x_connect,x_sendto,x_recvfrom所在内存地址进行记录,将connect,sendto,recvfrom相应的内存地址进行替换。

(4)关闭远程调用:首先通过远程调用dlclose函数关闭远程调用;然后通过ptrace函数恢复寄存器环境并detach进程。

s24:被保护应用发起网络连接时,调用拦截函数,并在其执行完毕后跳转回原系统函数继续执行。本发明具体实施例中,由于拦截函数对网络函数的劫持,所有被保护应用发起的网络函数调用,包括javaframework的网络函数api及ndk的c库网络函数,其本质都需访问系统libc库中的网络函数,进一步的,由于地址被篡改故而实际调用的是拦截模块所定义的网络操作api。在本发明实施例中,发起网络连接时调用x_connect函数,发送网络数据包时调用x_sendto函数,接受网络数据包时调用x_recvfrom函数,为保证系统的健壮性,其返回值的取值类型应与原函数相同。

需要说明的是,本实施例给出的上述过滤移动应用程序网络流量的方法只是本发明列举的两个优选实施方式,本发明并不唯一限定该方式,本领域技术人员容易想到的任何网络流量hook拦截方式均在本发明的保护思想范围内。

针对上述方法中另一实施例,所述s3步骤中,拦截函数执行的网络协议包括:

(1)密钥协商。被保护应用发起网络连接时,所述拦截函数x_connect随机生成通信会话密钥k,利用配置的服务器证书公钥进行加密,得到会话密钥密文e(k),按照以下格式编排发送数据包内容:会话密钥密文e(k)前增加2字节编码固定为a6ef作为通信数据包头部。经通信中转服务器发送至网络请求服务器,服务器解密获取会话密钥,完成密钥协商。

在本发明的具体实施例中,密钥协商阶段包括以下步骤:

①当被保护应用发起网络连接请求时,被上述步骤s2中所注入的拦截模块所捕捉进入x_connect函数,由包括但不限于openssl等密钥随机生成方法,得到不低于256bits的通信会话密钥k,相关密钥存储在设备内存中。

②利用配置的服务器证书公钥进行加密,加密算法包括rsa等公钥密码算法,得到会话密钥的密文e(k)并按照如图5所示的编码格式编排发送数据包内容:前2字节编码固定为a6ef作为通信数据包头部,数据包主体则为会话密钥密文e(k)。

③调用原connect函数连接通信中转服务器,并通过原sendto函数发送密钥协商数据包至网络请求服务器,由服务器根据私钥调用rsa等公钥算法,完成解密获取会话密钥,完成密钥协商过程。

(2)数据加密。被保护应用发送网络数据时,所述拦截函数使用分组密码算法及通信会话密钥k对传输数据加密得到传输数据密文ek(m),并计算传输数据哈希散列值h(m)。

在本发明的具体实施例中,数据加密阶段包括以下步骤:

①当被保护应用发起网络数据包请求时,被上述步骤s2中所注入的拦截模块所捕捉进入x_sendto函数,利用上述密钥协商过程中得到的通信会话密钥k,由包括但不限于aes、des、sm1等分组密码算法对传输数据加密得到传输数据密文ek(m),其算法可以由openssl等库具体实现。

②利用包括但不限于sha-1、sm3等消息散列算法,计算传输数据包的哈希散列值h(m),并与上述数据加密步骤①中的传输密文ek(m)按照所定义的传输格式进行拼装。进一步地调用原sendto函数发送该报文数据至网络请求服务器。

(3)数据解密。被保护应用接受网络数据时,所述拦截函数使用分组密码及通信会话密钥k对传输数据解密得到传输数据明文m。

在本发明的具体实施例中,数据解密阶段包括以下步骤:

①当被保护应用接收网络数据包请求时,被上述步骤s2中所注入的拦截模块所捕获进入x_recvfrom函数。首先,调用原recvfrom函数收取传输数据包。其次,利用对应的传输格式剥离得到传输数据包密文ek(m)和数据包明文的消息散列值h(m)。

②对于传输数据包密文,利用上述密钥协商过程中得到的通信会话密钥k,由相应的分组密码算法对传输数据进行解密得到明文m’,并对m’利用包括但不限于sha-1、sm3等消息散列算法,计算传输数据包的哈希散列值h(m’)。

③判断消息散列值是否相同,若相同,则将解密得到的密文返回上层应用。

(4)传输格式。所述拦截函数将按照以下传输格式编排所发送的数据包内容:在传输数据密文ek(m)前增加42字节编码作为通信数据包头部,如图6所示,其中,前2个字节固定为a6ee,第3到18字节存放源链接ip地址包括ipv4或ipv6协议地址,第19到22字节存放源链接端口信息,第23到42字节存放传输数据哈希散列值h(m)。

针对上述方法中另一实施例,本发明s5步骤中通信转发节点服务器进行安全检测和负载均衡包括以下具体步骤:

(1)对链接请求的ip地址进行安全检测。

①根据安全规则建立安全威胁地址信息库,也可以根据专家经验或其他漏洞库进行安全威胁地址信息库构建。

②网络请求服务器根据步骤s3中的传输格式对接收到的数据包第3到18字节存放的源链接ip进行解析,获取源链接ip地址。

③对连接的ip地址进行安全性检测,确认该ip不在威胁黑名单中。对于不安全的请求连接则返回错误信息码。

(2)对网络连接进行负载均衡。

①通信转发节点服务器建立负载均衡策略,默认采用轮询的分发策略,并根据需要调整负载均衡策略。其均衡策略具体实施例如以下:

轮询策略:将请求顺序循环地发到每个网络请求服务器。当其中某个服务器发生故障,就将其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

比率策略:给每个网络请求服务器分配一个加权值为比例,根椐这个比例,把请求分配到每个服务器。当其中某个服务器发生故障,将其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

优先权策略:所有网络请求服务器分组,给每个组定义优先权,将网络请求分配给优先级最高的服务器组(在同一组内,采用预先设定的轮询或比率算法,分配网络请求);当最高优先级中所有服务器或者指定数量的服务器出现故障,将请求发送给次优先级的服务器组。

哈希策略:将网络请求的源地址ip,端口进行哈希运算,根据运算的结果按照模余顺序转发给相应网络请求服务器进行处理,当其中某个服务器发生故障,就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

最少连接策略:网络请求服务器记记录当前每台网络请求服务器或者服务端口上的连接数,新的连接将传递给连接数最少的服务器。当其中某个服务器发生故障,将其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

最快响应时间策略:新的连接传递给那些响应最快的网络请求服务器。当其中某个服务器发生故障,将其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

②通信转发节点服务器根据获取的网络连接信息,以及目前服务器连接状态,根据预先定义好的负载均衡策略,选择网络请求服务器,并转发该请求。

在本发明的具体实施例中,提供了一种移动应用程序透明通信保护装置,如图7所示,该装置包括:

(1)移动应用程序客户端。

本发明具体实施例中,移动应用程序客户端用于管理配置被保护的应用程序列表,执行注入拦截应用程序网络连接相关操作函数,执行所述网络协议操作。

(2)通信转发节点服务器

本发明具体实施例中,通信转发节点服务器用于对网络连接进行安全检测,并依据所述负载均衡策略进行网络请求转发。

(3)网络请求服务器

本发明具体实施例中,网络请求服务器用于执行所述网络协议操作,解密数据拼装源链接请求并代理访问,同时加密请求应答数据并返回。

针对上述方法中另一实施例,本发明中移动应用程序客户端还包括管理配置模块、注入拦截模块、网络协议模块、加解密模块,用于:

(1)管理配置模块

本发明具体实施例中,所述移动应用程序客户端启动后通过管理配置模块进行被保护应用的选择、网络协议选择及相关加解密配置;

(2)注入拦截模块

本发明具体实施例中,所述移动应用程序客户端在被保护应用启动时,通过注入拦截模块,将拦截代码注入被保护程序所加载的动态链接库所在内存空间中,并查找网络连接函数所在地址进行替换。

(3)网络协议模块

本发明具体实施例中,在被保护应用进行网络连接时,通过拦截代码将网络连接重定向为通信转发节点服务器,并将源连接及通信数据按所述网络协议模块定义格式进行填充。

(4)加解密模块

本发明具体实施例中,在所述移动应用程序客户端进行通信数据传输时,通过网络协议模块进行加解密密钥协商,然后调用加解密模块进行填充的通信数据加密,并发送至通信转发节点服务器。

针对上述方法中另一实施例,本发明中所述的通信转发节点服务器包括安全检测模块、负载均衡模块,用于:

(1)安全检测模块

本发明具体实施例中,所述通信转发节点服务器安全检测模块接受移动终端发送的通信数据,并从中获取源访问链接信息,包括ip地址、端口信息等,进行安全性检测、鉴权、完整性校验。对于通过上述安全检测的链接进一步转发给负载均衡模块,否则,拦截该请求。

(2)负载均衡模块

本发明具体实施例中,所述通信转发节点服务器对于并发的大量链接通过负载均衡模块,按照请求类型选择传输性能最佳的网络请求服务器,并转发接受的通信数据。

针对上述方法中另一实施例,本发明中所述的网络请求服务器包括代理请求模块、加解密模块,用于:

(1)代理请求模块

本发明具体实施例中,所述网络请求服务器通过加解密模块解密通信数据还原传输数据,并按照网络协议格式获取源访问服务器ip地址、端口信息。

(2)加解密模块

本发明具体实施例中,所述网络请求服务器代理请求模块获取传输数据及源访问ip地址、端口信息,解密数据拼装为正常访问请求,并代理应答该请求。同时,加密请求应答数据并返回。

在本发明的另一实施例中,本发明提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如本发明所述的移动应用程序透明通信保护方法和步骤。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机、计算机、服务器、空调器或者网络设备等)执行本发明各个实施例所述的方法。

上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

本发明实施例提出一种应用程序透明通信保护方法,需要解释说明的是,这里所提到的“透明通信”可以理解为,本发明实施例所提出的通信保护方法无需对上层应用修改即可实现应用通信传输数据的安全加密。

所述应用程序透明通信保护方法,包括:

拦截被保护应用程序的网络请求;

需要说明的是,这里所提到的“被保护应用程序”为在通信过程中、其传输数据(包括发送的请求数据和接收到的响应数据中的至少一个)需要进行加密保护的应用程序。被保护应用程序可以为用户终端上的所有应用程序,也可以是用户设置或者出厂自动设置的部分应用程序。

在该步骤中,客户端检测到被保护应用程序执行网络请求时,可以将网络请求拦截下来,以切断客户端与网络连接目标地址之间的直接通信,即结束目标流程。

对所述网络请求中携带的请求数据进行加密,并将网络请求中携带的网络连接目标地址替换为通信转发节点服务器的中转地址,以使加密的请求数据发送至通信转发节点服务器、通信转发节点服务器对所述加密的请求数据进行解密后发送至网络连接目标地址。

可以理解的是,网络请求中携带网络连接源地址(如发送端的ip地址)、网络连接目标地址(即接收端的ip地址)、以及要从网络连接源地址发送至网络连接目标地址的请求数据。客户端可以将拦截的网络请求中的网络连接目标地址替换为通信转发节点服务器的中转地址,并对请求数据进行加密,从而使通信转发节点服务器可以接收到加密后的请求数据,可以保障被保护应用程序的请求数据从网络请求发出的时间点至通信转发节点服务器解密前的时间点之间的时间段,请求数据不被恶意监听嗅探,保护敏感数据不受非法侵害窃取。

采用本发明实施例,通过拦截的方法,被保护应用程序要发送的请求数据加密后发送至通信转发节点服务器,通信转发节点服务器可以对请求数据进行解密后发送至目标地址,从而可以保证请求数据发送的安全性和可靠性。而且,整个保护方法不涉及上层应用行为的改变,从而可以避免应用程序开发者的额外开销。

在上述实施例的基础上,进一步提出各变型实施例,在此需要说明的是,为了使描述简要,在各变型实施例中仅描述与上述实施例的不同之处。

根据本发明的一些实施例,拦截被保护应用程序的网络请求,包括:

监控被保护应用程序的运行状态;

例如,根据用户配置的被保护应用程序列表,定时检测被保护应用程序运行状态,运行状态包括是否在运行,若在运行,则进一步获取被保护应用程序uid号、进程身份标识pid号以及程序包名等。

当被保护应用被启动时,将网络连接相关动态执行库注入被保护应用的存储空间,并将被保护应用中的网络连接函数替换为拦截函数;

当被保护应用发送网络请求时,执行拦截函数以及网络连接相关动态执行库中的第一代码,以拦截被保护应用程序的网络请求。

在本发明的一些实施例中,对网络请求中携带的请求数据进行加密,并将网络请求中携带的网络连接目标地址替换为通信转发节点服务器的中转地址,包括:

当被保护应用发送网络请求时,执行拦截函数以及网络连接相关动态执行库中的第二代码,以对网络请求中携带的请求数据进行加密,执行拦截函数以及网络连接相关动态执行库中的第三代码,以将网络请求中携带的网络连接目标地址替换为通信转发节点服务器的中转地址。

由于多数用户终端操作系统,如ios、android、wp等对应用程序使用进程沙箱隔离独立的进程空间,使运行环境之间互不干涉,因此对于拦截修改已执行程序的流程,需要通过跨进程操作在其进程空间中运行自定义代码。对于该跨进程操作,在android系统中通常是通过hook的方式,利用ptrace函数附加目标进程,向其进程空间中注入动态执行库so文件,执行其中的自定义流程,从而达到跨进程空间的注入拦截目的。

本发明实施例中,客户端监测到被保护应用程序启动,客户端通过进程追踪函数将网络连接相关动态执行库注入被保护应用的存储空间,执行网络连接相关动态执行库中自定义代码,替换被保护应用网络连接函数为客户端中定义的拦截函数。

在本发明的一些实施例中,所述方法,还包括:

在对网络请求中携带的请求数据进行加密之前,与通信转发节点服务器进行密钥协商。

被保护应用发起网络连接请求时,拦截函数随机生成通信会话密钥k,利用配置的服务器证书公钥进行加密,得到会话密钥密文e(k)并发送给通信转发节点服务器,通信转发节点服务器解密获取会话密钥,完成密钥协商。

根据本发明的一些实施例,所述方法,还包括:

接收通信转发节点服务器发送的加密的响应数据;

对加密的响应数据进行解密,并发送至被保护应用程序。

本发明实施例还提出一种应用程序透明通信保护装置,包括:

拦截模块,用于拦截被保护应用程序的网络请求;

需要说明的是,这里所提到的“被保护应用程序”为在通信过程中、其传输数据(包括发送的请求数据和接收到的响应数据中的至少一个)需要进行加密保护的应用程序。被保护应用程序可以为用户终端上的所有应用程序,也可以是用户设置或者出厂自动设置的部分应用程序。

客户端检测到被保护应用程序执行网络请求时,可以将网络请求拦截下来,以切断客户端与网络连接目标地址之间的直接通信,即结束目标流程。

替换模块,用于对所述网络请求中携带的请求数据进行加密,并将所述网络请求中携带的网络连接目标地址替换为通信转发节点服务器的中转地址,以使加密的请求数据发送至通信转发节点服务器、所述通信转发节点服务器对所述加密的请求数据解密后发送至所述网络连接目标地址。

可以理解的是,网络请求中携带网络连接源地址(如发送端的ip地址)、网络连接目标地址(即接收端的ip地址)、以及要从网络连接源地址发送至网络连接目标地址的请求数据。客户端可以将拦截的网络请求中的网络连接目标地址替换为通信转发节点服务器的中转地址,并对请求数据进行加密,从而使通信转发节点服务器可以接收到加密后的请求数据,可以保障被保护应用程序的请求数据从网络请求发出的时间点至通信转发节点服务器解密前的时间点之间的时间段,请求数据不被恶意监听嗅探,保护敏感数据不受非法侵害窃取。

采用本发明实施例,通过拦截的方法,被保护应用程序要发送的请求数据加密后发送至通信转发节点服务器,通信转发节点服务器可以对请求数据进行解密后发送至目标地址,从而可以保证请求数据发送的安全性和可靠性。而且,整个保护方法不涉及上层应用行为的改变,从而可以避免应用程序开发者的额外开销。

在上述实施例的基础上,进一步提出各变型实施例,在此需要说明的是,为了使描述简要,在各变型实施例中仅描述与上述实施例的不同之处。

根据本发明的一些实施例,拦截模块,用于:

监控被保护应用程序的运行状态;

例如,根据用户配置的被保护应用程序列表,定时检测被保护应用程序运行状态,运行状态包括是否在运行,若在运行,则进一步获取被保护应用程序uid号、进程身份标识pid号以及程序包名等。

当被保护应用被启动时,将网络连接相关动态执行库注入被保护应用的存储空间,并将被保护应用中的网络连接函数替换为拦截函数;

当被保护应用发送网络请求时,执行拦截函数以及网络连接相关动态执行库中的第一代码,以拦截被保护应用程序的网络请求。

在本发明的一些实施例中,替换模块,用于:

当被保护应用发送网络请求时,执行拦截函数以及网络连接相关动态执行库中的第二代码,以对网络请求中携带的请求数据进行加密,执行拦截函数以及网络连接相关动态执行库中的第三代码,以将网络请求中携带的网络连接目标地址替换为通信转发节点服务器的中转地址。

由于多数用户终端操作系统,如ios、android、wp等对应用程序使用进程沙箱隔离独立的进程空间,使运行环境之间互不干涉,因此对于拦截修改已执行程序的流程,需要通过跨进程操作在其进程空间中运行自定义代码。对于该跨进程操作,在android系统中通常是通过hook的方式,利用ptrace函数附加目标进程,向其进程空间中注入动态执行库so文件,执行其中的自定义流程,从而达到跨进程空间的注入拦截目的。

本发明实施例中,客户端监测到被保护应用程序启动,客户端通过进程追踪函数将网络连接相关动态执行库注入被保护应用的存储空间,执行网络连接相关动态执行库中自定义代码,替换被保护应用网络连接函数为客户端中定义的拦截函数。

在本发明的一些实施例中,所述装置,还包括:

密钥协商模块,用于在对网络请求中携带的请求数据进行加密之前,与通信转发节点服务器进行密钥协商。

被保护应用发起网络连接请求时,拦截函数随机生成通信会话密钥k,利用配置的服务器证书公钥进行加密,得到会话密钥密文e(k)并发送给通信转发节点服务器,通信转发节点服务器解密获取会话密钥,完成密钥协商。

根据本发明的一些实施例,所述装置,还包括:

第一加密模块,用于接收通信转发节点服务器发送的加密的响应数据;

第一解密模块,用于对加密的响应数据进行解密,并发送至被保护应用程序。

本发明实施例又提出一种应用程序透明通信保护方法,包括:

接收客户端发送的加密的请求数据;

对加密的请求数据进行解密,并将解密后的请求数据发送至网络连接目标地址。

采用本发明实施例,客户端发送的请求数据加密后发送至通信转发节点服务器,通信转发节点服务器可以对请求数据进行解密后发送至目标地址,从而可以保证请求数据发送的安全性和可靠性。而且,整个保护方法不涉及上层应用行为的改变,从而可以避免应用程序开发者的额外开销。

进一步的,所述方法,还包括:

接收网络连接目标地址发送的响应数据;

对响应数据进行加密,并将加密的响应数据发送至客户端。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1