Linux函数劫持方法及装置与流程

文档序号:11323615阅读:291来源:国知局
本发明涉及信息安全
技术领域
:,特别是涉及一种linux函数劫持方法及装置。
背景技术
::在linux系统中,如何保证应用程序所操作的文件及网络访问的安全性,从而对linux系统的整体安全性进行保障,是信息安全
技术领域
:的重要课题。目前,linux下常用的操作控制的方法,一般通过对文件和网络的操作权限进行管理,为文件的操作进行安全保护。传统的针对linux系统下的文件操作的方法,基本上利用inotify应用来控制文件操作,无法控制其进行文件操作,更无法针对应用程序对linux系统文件操作进行控制。而的针对linux系统下的网络访问控制的方法,基本上基于对iptables的二次开发和包装,针对所有使用linux系统的程序统一控制网络访问,无法针对应用程序对linux系统网络访问进行控制。技术实现要素:基于此,有必要针对linux系统无法针对应用程序进行文件操作和网络访问控制的问题,提供一种linux函数劫持方法,包括:接收应用程序的运行命令,并获取应用程序的标识;加载预设的劫持函数库和动态库;运行所述应用程序并识别所述应用程序中的操作函数;根据所述操作函数和所述应用程序的标识查找所述劫持函数库,所述劫持函数库包括所述操作函数、所述应用程序的标识和劫持函数之间的对应关系,若查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则运行所述劫持函数,并根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数。在其中一个实施例中,所述方法还包括:若未查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则调用所述动态库中的操作函数。在其中一个实施例中,所述预设的劫持函数库的绝对路径保存在后台入口文件中。在其中一个实施例中,所述根据所述劫持函数的运行结果判断是否调用动态库中的操作函数之后还包括:判断是否对所述操作函数进行监控。在其中一个实施例中,所述根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数,包括:获取所述操作函数中的操作信息;根据所述操作信息,调用外部服务程序,并根据所述外部服务程序的运行结果判断是否调用动态库中的操作函数。本发明所提供的linux函数劫持方法,能够在linux系统中通过获取应用程序的标识,针对不同的应用程序对操作函数进行劫持,劫持针对所述应用程序的操作函数,并根据劫持函数的运行结果判断是否允许所述应用程序的操作函数的运行,提高对不同应用程序的操作函数的控制的灵活性。在其中一个实施例中,本发明所提供的linux函数劫持方法,能够通过外部服务程序对需要进行控制的应用程序和操作函数进行定义及维护,提供了灵活方便的针对linux系统操作函数的控制。本发明还提供一种linux函数劫持装置,包括:应用程序接收模块,用于接收应用程序的运行命令,并获取应用程序的标识;函数加载模块,用于加载预设的劫持函数库和动态库;函数识别模块,用于运行所述应用程序并识别所述应用程序中的操作函数;操作控制模块,用于根据所述操作函数和所述应用程序的标识查找所述劫持函数库,所述劫持函数库包括所述操作函数、所述应用程序的标识和劫持函数之间的对应关系,若查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则运行所述劫持函数,并根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数。在其中一个实施例中,操作控制模块,还用于若未查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则调用所述动态库中的操作函数。在其中一个实施例中,所述预设的劫持函数库的绝对路径保存在后台入口文件中。在其中一个实施例中,还包括:操作监控模块,用于根据所述劫持函数的运行结果判断调用动态库中的操作函数时,判断是否对所述操作函数进行监控。在其中一个实施例中,所述操作控制模块包括:操作信息获取单元,用于获取所述操作函数中的操作信息;操作控制单元,用于根据所述操作信息,调用外部服务程序,并根据所述外部服务程序的运行结果判断是否调用动态库中的操作函数。本发明所提供的linux函数劫持装置,能够在linux系统中通过获取应用程序的标识,针对不同的应用程序对操作函数进行劫持,劫持针对所述应用程序的操作函数,并根据劫持函数的运行结果判断是否允许所述应用程序的操作函数的运行,提高对不同应用程序的操作函数的控制的灵活性。在其中一个实施例中,本发明所提供的linux函数劫持装置,能够通过外部服务程序对需要进行控制的应用程序和操作函数进行定义及维护,提供了灵活方便的针对linux系统操作函数的控制。附图说明图1为一个实施例中的linux函数劫持方法的示意图;图2为一个实施例中的linux函数劫持方法中劫持库的位置示意图;图3为另一个实施例中的linux函数劫持方法的流程图;图4为又一个实施例中的linux函数劫持方法的流程图;图5为一个实施例中的linux函数劫持装置的结构图;图6为另一个实施例中的linux函数劫持装置的结构图;图7为又一个实施例中的linux函数劫持装置的结构图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。图1为一个实施例中的linux函数劫持方法的示意图,如图1所示的linux函数劫持方法包括:步骤s100,接收应用程序的运行命令,并获取应用程序的标识。具体的,所述应用程序的标识是指用于区分不同应用程序的记号,或区分不同应用程序的特征的标记,包括应用程序的程序类别、名称、版本号中的任意一种。步骤s200,加载预设的劫持函数库和动态库。具体的,所述预设的劫持函数库,所述劫持函数库为在操作函数运行之前,将其劫持后,进行预设的逻辑处理后,并根据所述预设的逻辑处理决定是否调用原操作函数。所述被劫持的操作函数包括open系列函数,close函数,create系列函数,read函数,write函数,socket操作系列函数(socket,listen,bind,connect,send,receive等),kill函数等。系统首先加载所述劫持函数库,再加载动态库,即常用的c库。如图2所示,本实施例所提供的劫持库,加载后在linux系统中位置。在用户应用层之下,劫持库位于动态库更加靠近用户应用层的位置,以表示劫持库中的劫持函数优先被调用,如劫持库中没有相应的劫持函数,则调用动态库中的函数。图2中,劫持库和动态库都连接到linux底层的内核部分。不再赘述。步骤s300,运行所述应用程序并识别所述应用程序中的操作函数。具体的,运行所述应用程序后,对程序中的操作函数进行识别,当识别到操作函数时,即进行后续步骤s400。所述操作函数,包括文件操作函数和网络访问函数。步骤s400,根据所述操作函数和所述应用程序的标识查找所述劫持函数库,所述劫持函数库包括所述操作函数、所述应用程序的标识和劫持函数之间的对应关系,若查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则运行所述劫持函数,并根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数。具体的,所述劫持函数库包括所述操作函数、所述应用程序的标识和劫持函数之间的对应关系,所述劫持函数包括禁止运行所述操作函数。例如,当设定某个应用程序a的操作函数open为需要被禁止运行时,所述应用程序a的操作函数open在所述劫持函数库中,对应结果为禁止运行所述应用程序a的操作函数open。根据所述操作函数和所述标识查找所述劫持函数库时,当所述操作函数和所述标识在所述劫持函数库中存在与劫持函数之间的对应关系时,所述应用程序的操作函数需要被劫持,并根据劫持函数的运行结果判断是否调用所述动态库中的操作函数。可以理解的是,基于劫持函数库,可以将应用程序和操作函数进行任意组合后,对不同应用程序的各种操作函数进行管理,禁止特定的应用程序的特定的操作函数的运行。本实施例所提供的linux函数劫持方法,能够在linux系统中通过获取应用程序的标识,针对不同的应用程序对操作函数进行劫持,劫持针对所述应用程序的操作函数,并根据劫持函数的运行结果判断是否允许所述应用程序的操作函数的运行,提高对不同应用程序的操作函数的控制的灵活性。在其中一个实施例中,当所述操作函数和所述标识在所述劫持函数库中,不存在与劫持函数之间的对应关系时,即,在所述劫持函数库中查找不到时,运行所述动态库中的操作函数。在其中一个实施例中,所述的劫持函数库,绝对路径保存在后台入口文件中,即,保存在/etc/ld.so.preload文件中。本实施例所提供的linux函数劫持方法,将所述的劫持函数库保存在后台入口文件中,可以保证所述劫持函数库先于动态库添加,进一步提高针对不同应用程序的操作函数管理的效率。图3为另一个实施例中的linux函数劫持方法的流程图,如图3所示的linux函数劫持方法,包括:步骤s410,根据所述操作函数和所述标识查找所述劫持函数库,判断是否查找到,若是,接步骤s420,若否,跳至步骤s430。具体的,若劫持库中不存在所述操作函数和所述标识,相当于所述应用程序的所述操作函数不需要被劫持,直接调用所述动态库中的操作函数即可。步骤s420,根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数,若是,跳至步骤s450,若否,跳至步骤s440。具体的,如所述操作函数的劫持库的运行结果为禁止运行所述操作函数,则不再调用动态库中的操作函数。步骤s430,调用所述动态库中的操作函数。步骤s440,输出所述劫持函数的运行结果。具体的,输出所述劫持函数的运行结果,包括输出禁止运行所述操作函数等提示信息。步骤s450,判断是否对所述操作函数进行监控,若是,接步骤s460,如否,跳至步骤s430。具体的,当劫持函数的运行结果为调用动态库中的操作函数时,进一步的判断是否需要对所述操作函数进行监控,所述监控包括记录操作日志等。步骤s460,调用所述动态库中的操作函数,并对所述操作函数进行监控。本实施例所提供的linux函数劫持方法,能够在linux系统中利用劫持函数库针对不同应用程序的操作函数进行管理,并进一步对需要调用动态库的被劫持的操作函数进行监控,提高linux系统对应用程序的操作函数管理的灵活度。在其中一个实施例中,所述操作函数,包括文件操作函数和网络访问函数。本实施例所提供的linux函数劫持方法,能够在linux系统中利用劫持函数库针对不同应用程序的文件操作函数和网络访问函数进行管理,并进一步对需要调用动态库的被劫持的文件操作函数和网络访问函数进行监控,提高linux系统中不同应用程序的文件操作函数和网络访问函数的管理的灵活度。图4为又一个实施例中的linux函数劫持方法的流程图,如图4所示的linux函数劫持方法,包括:步骤s410,获取所述操作函数中的操作信息。具体的,如所述操作函数为文件操作函数,则获取所述文件操作函数中的文件信息,包括文件名、文件类型、文件保存地址等。如所述操作函数为网络访问函数,则获取所述网络访问函数中的网络信息,包括网络源ip地址,网络目的ip地址,网络端口等信息。步骤s420’,根据所述操作信息,调用外部服务程序,并根据所述外部服务程序的运行结果判断是否调用动态库中的操作函数。具体的,所述外部服务程序,包括针对文件操作函数的外部服务程序和针对网络访问函数的外部服务程序。其中,所述网络访问函数的外部服务程序包括预设的控制网络库。所述预设的控制网络库,可以为白名单性质的控制网络库,也可以为黑名单性质的控制网络库,可根据实际需要选用即可。通过所述的控制网络库,可以实现针对特定的应用程序和特定的访问网络的不同组合情况,分别进行控制,如针对应用程序a进行网络访问时,控制其访问网络1和网络2,但不控制其访问网络3和网络4。进一步的,所述网络访问函数的外部服务程序还包括预设的监控网络库,用于对所述网络访问函数所访问的网络进行监控。所述文件操作函数的外部服务程序包括预设的控制文件库,所述预设的控制文件库,可以为白名单性质的控制文件库,也可以为黑名单性质的控制文件库,可根据实际需要选用即可。通过所述的控制文件库,可以实现针对特定的应用程序和特定的文件操作的不同组合情况,分别进行控制,如针对应用程序a进行文件操作时,控制其操作文件1和文件2,但不控制其操作文件3和文件4。进一步的,所述文件操作函数的外部服务程序还包括预设的监控文件库,用于对所述文件操作函数所操作的文件进行监控。本实施例所提供的linux函数劫持方法,能够在linux系统中利用劫持函数库,调用外部服务程序,针对不同应用程序的文件操作函数和网络访问函数进行控制,并进一步对需要调用动态库的被劫持的文件操作函数和网络访问函数进行监控,所述外部服务程序为黑白名单性质管理或监控程序,能够提高linux系统中不同应用程序的文件操作函数和网络访问函数的管理的灵活度。图5为一个实施例中的linux函数劫持装置的结构图,如图5所示的linux函数劫持装置包括:应用程序接收模块100,用于接收应用程序的运行命令,并获取应用程序的标识。函数加载模块200,用于加载预设的劫持函数库和动态库。函数识别模块300,用于运行所述应用程序并识别所述应用程序中的操作函数。操作控制模块400,用于根据所述操作函数和所述标识查找所述劫持函数库,若查找到,根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数;若否,调用所述动态库中的操作函数。本实施例所提供的linux函数劫持装置,能够在linux系统中通过获取应用程序的标识,针对不同的应用程序对操作函数进行劫持,劫持针对所述应用程序的操作函数,并根据劫持函数的运行结果判断是否允许所述应用程序的操作函数的运行,提高对不同应用程序的操作函数的控制的灵活性。图6为另一个实施例中的linux函数劫持装置的结构图,如图6所示的linux函数劫持装置包括:应用程序接收模块100,用于接收应用程序的运行命令,并获取应用程序的标识。函数加载模块200,用于加载预设的劫持函数库和动态库;用于加载预设的劫持函数库,且所述预设的劫持函数库的绝对路径保存在后台入口文件中。函数识别模块300,用于运行所述应用程序并识别所述应用程序中的操作函数。操作控制模块400,用于根据所述操作函数和所述应用程序的标识查找所述劫持函数库,所述劫持函数库包括所述操作函数、所述应用程序的标识和劫持函数之间的对应关系,若查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则根据所述劫持函数的运行结果判断是否调用所述动态库中的操作函数;还用于若未查找到与所述操作函数和所述应用程序的标识对应的劫持函数,则调用所述动态库中的操作函数。操作监控模块500,用于根据所述劫持函数的运行结果判断调用动态库中的操作函数时,判断是否对所述操作函数进行监控。本实施例所提供的linux函数劫持装置,能够在linux系统中利用劫持函数库针对不同应用程序的操作函数进行管理,并进一步对需要调用动态库的被劫持的操作函数进行监控,提高linux系统对应用程序的操作函数管理的灵活度。图7为又一个实施例中的linux函数劫持装置的结构图,如图7所示的linux函数劫持装置包括:操作信息获取单元410,用于获取所述操作函数中的操作信息;用于获取所述操作函数中的操作信息,且所述操作函数,包括文件操作函数和网络访问函数。操作控制单元420,用于根据所述操作信息,调用外部服务程序,并根据所述外部服务程序的运行结果判断是否调用动态库中的操作函数。本实施例所提供的linux函数劫持装置,能够在linux系统中利用劫持函数库,调用外部服务程序,针对不同应用程序的文件操作函数和网络访问函数进行控制,并进一步对需要调用动态库的被劫持的文件操作函数和网络访问函数进行监控,所述外部服务程序为黑白名单性质管理或监控程序,能够提高linux系统中不同应用程序的文件操作函数和网络访问函数的管理的灵活度。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1