CN201480028447.8
2014.03.27
CN105210077A
2015.12.30
实审
审中
实质审查的生效IPC(主分类):G06F 21/56申请日:20140327|||公开
G06F21/56
日本电信电话株式会社
川古谷裕平; 岩村诚; 针生刚男
日本东京都
2013.05.16 JP 2013-104481
北京三友知识产权代理有限公司 11127
李辉;黄纶伟
监视恶意软件(程序)的举动,针对基于程序的库函数的每次调用,生成日志,该日志将表示所调用的库函数的识别信息、向库函数的输入数据和来自库函数的输出数据以及用于唯一确定输出数据的污点标签对应起来。并且,参照对来自信息处理装置的输出数据设定的污点标签和日志,追踪在库函数间输入输出的数据的依存关系,确定生成了来自信息处理装置的输出数据的库函数。
1. 一种信息处理装置,其确定为了生成输出数据而调用的库函数,其特征在于,所述信息处理装置具备:库函数执行监视部,其在生成作为监视对象的程序的分析日志时,捕捉所述监视对象的程序所调用的库函数,针对所述库函数的每次调用,对来自所述库函数的输出数据设定用于唯一识别所述库函数的调用的标记;日志存储部,其存储包含来自所述库函数的输出数据的所述分析日志;以及日志搜索部,其将对所述日志存储部中存储的分析日志设定的标记作为键,来确定为了生成来自该信息处理装置的输出数据而调用的库函数。2. 根据权利要求1所述的信息处理装置,其特征在于,所述监视对象的程序的输入数据被设定有用于唯一识别所述输入数据的标记,所述信息处理装置还具备污点信息传播部,该污点信息传播部使对所述输入数据设定的标记传播给所述程序的执行结果数据,所述库函数执行监视部还在来自所述库函数的输出数据被设定有所述标记的情况下,当生成所述监视对象的程序的分析日志时,将对来自所述库函数的输出数据设定的标记作为来自所述库函数的输出数据的标记进行传播,在来自所述库函数的输出数据没有被设定所述标记的情况下,当生成所述监视对象的程序的分析日志时,对来自所述库函数的输出数据设定用于唯一识别所述库函数的调用的标记。3. 根据权利要求1或2所述的信息处理装置,其特征在于,所述信息处理装置还具备估计部,该估计部根据所述确定的库函数的特性来估计所述监视对象的程序的输入数据。4. 根据权利要求1或2所述的信息处理装置,其特征在于,所述日志搜索部将对所述日志存储部中存储的分析日志设定的标记中的预先决定的变量的标记作为键,来确定为了生成来自该信息处理装置的输出数据而调用的库函数。5. 一种信息处理方法,其特征在于,计算机执行以下的步骤:库函数执行监视步骤,在生成监视对象的程序的分析日志时,捕捉所述监视对象的程序所调用的库函数,针对所述库函数的每次调用,对来自所述库函数的输出数据设定用于唯一识别所述库函数的调用的标记;以及日志搜索步骤,将对包含来自所述库函数的输出数据的所述分析日志设定的标记作为键,来确定为了生成来自该信息处理装置的输出数据而调用的库函数。
信息处理装置以及信息处理方法 技术领域 本发明涉及信息处理装置以及信息处理方法。 背景技术 为了分析恶意软件等分析对象的执行文件的举动,而在分析环境中使该执行文件实际进行动作,并利用取得其举动日志的动态分析。在动态分析中具有监视恶意软件向外部发送的数据包的网络举动分析型的动态分析(参照专利文献1)。 在这些网络举动分析型的动态分析中,可取得恶意软件进行的通信目标(communicationdestination)、端口编号、协议、有效负载(payload)的信息等。根据情况,有时还在有效负载部分中观测用于理解恶意软件的举动的重要信息。例如,当在有效负载部分中一直记载有设备名、用户信息或机密文件内容的信息等时,可判断为该恶意软件具有向外部发送感染终端的机密信息的举动。 但是,近年来的恶意软件大多对通信数据实施了加密、压缩等混淆化。在这样的情况下,由于根据通过网络举动分析型的动态分析能够观测的数据包的有效负载部分无法知晓所发送的数据的内容,因此无法理解恶意软件的举动。 在这样的情况下,存在对恶意软件的执行文件进行静态分析并确定所发送的数据的内容的方法。该方法是通过分析者以手动的方式隐藏恶意软件的执行文件并解读命令来掌握恶意软件的举动的方法。但是,对恶意软件静态分析的成本非常高,不适合分析大量的执行文件。 现有技术文献 专利文献 专利文献1:日本专利第4755658号公报 发明内容 发明所要解决的课题 如上所述,在恶意软件的动态分析中,当恶意软件对数据进行混淆并输出至分析环境设备的外部时,即使看到所输出的数据也无法确定该数据本来的意思。另一方面,只要分析者以手动的方式进行静态分析,理论上就能够掌握被混淆化的数据的内容,但是对于静态分析,不仅分析者需要特别的技能,而且分析中需要相当的时间等而成为高成本的作业。 因此,本发明是为了解决上述问题而作出的,其课题是即使在由于恶意软件等的程序数据被混淆话而向外部输出时,也通过动态分析来确定该数据的源信息。 解决问题的手段 为了解决上述课题,本发明的信息处理装置是确定为了生成输出数据而调用的库函数的信息处理装置,其具备:库函数执行监视部,其在作为生成监视对象的程序的分析日志时,捕捉上述监视对象的程序所调用的库函数,针对上述库函数的每次调用,对来自上述库函数的输出数据设定用于唯一识别上述库函数的调用的标记;日志存储部,其存储包含来自上述库函数的输出数据的分析日志;以及日志搜索部,其将对上述日志存储部中存储的分析日志设定的标记作为键,来确定为了生成来自该信息处理装置的输出数据而调用的库函数。 发明效果 根据本发明,即使在由于恶意软件等的程序数据被混淆化而向外部输出时,也能够利用动态分析来确定该数据的源信息。 附图说明 图1是示出信息处理装置的整体结构的图。 图2是示出信息处理装置的处理的概要的图。 图3是示出虚拟机的功能结构的图。 图4是示出在影子存储器中存储的信息的例子的图。 图5是示出在影子盘中存储的信息的例子的图。 图6A是示出在各个库函数之间传播污点标签时的日志的例子的图。 图6B是示出针对每个库函数来设定新的污点标签时的日志的例子的图。 图7是示出虚拟机积蓄与向库函数的输入以及输出相关的日志的顺序的流程图。 图8是示出主机OS的日志搜索部确定生成了混淆化数据的库函数的顺序的流程 图。 图9是示出执行监视程序的计算机的图。 具体实施方式 [第1实施方式] [整体结构] 以下,说明用于实施本发明的方式(实施方式)。图1是示出信息处理装置的整体结构的图。如图1所示,信息处理装置具有硬件1、主机OS2、虚拟机软件3、虚拟机10。 硬件1是构成信息处理装置的电子电路或周边设备,例如是存储器、CPU(CentralProcessingUnit:中央处理器)等。主机OS2是作为使虚拟机进行动作的基础的OS,采用硬件1来执行。虚拟机软件3是采用硬件1来提供虚拟机的软件,这里,使虚拟机10进行动作。例如,虚拟机软件3将虚拟盘、虚拟物理存储器、虚拟CPU等分配给客户OS,使虚拟机进行动作。 虚拟机10例如是仿真型的虚拟机,是采用由虚拟机软件3提供的虚拟盘、虚拟物理存储器、虚拟CPU等使客户OS进行动作来执行各种处理的虚拟的信息处理装置。 采用图2来说明该信息处理装置的处理概要。图2是示出信息处理装置的处理概要的图。信息处理装置在虚拟机10内监视作为举动的分析对象的程序(恶意软件)。并且,信息处理装置监视程序的举动,生成由该程序调用的与库函数的输入以及输出相关的日志并将其输出。 库函数是每当执行程序时调用的函数,例如是API(ApplicationProgrammingInterface:应用程序接口)、系统调用、局部函数(localfunction)等。该库函数包含在客户OS内。另外,在以下的说明中,以库函数是Win32API的情况为例进行说明,但不仅限于此。 另外,由信息处理装置生成的日志例如是表示库函数(例如,库函数A、B、C、…、N)、输入至该库函数的输入数据、从该库函数输出的输出数据等的信息。这里,信息处理装置在日志生成时对从库函数输出的输出数据设定用于唯一地识别该库函数的调用的污点标签(tainttag,标记)。 另一方面,信息处理装置使作为举动的分析对象的程序进行动作,并进行污点分析。即,信息处理装置在通过使作为举动的分析对象的程序进行动作而将设定有污点标签的数据作为操作数(operand)传递给由虚拟CPU执行的命令的情况下,将污点标签传播给该命令的执行结果数据。由此,信息处理装置对于输入至由程序调用的库函数的输入数据也设定由信息处理装置设定的污点标签。 在这样的分析环境下,信息处理装置使预定期间作为举动的分析对象的程序进行动作,进行与库函数的输入以及输出相关的日志的生成以及输出,并积蓄日志。 然后,在信息处理装置输出了某些已被混淆的数据(混淆化数据)时,通过参照在该数据中设定的污点标签和上述日志所包含的污点标签,来查找在库函数间利用的数据的依存关系,并确定生成了混淆化数据的库函数(例如,库函数A)。只要能够这样地确定库函数,信息处理装置的用户就能够根据该库函数的特性等,每当生成混淆化数据时,确定哪个种类的信息成为源信息。 此外,所谓本实施方式中的数据的输出,例如还包含从使分析对象的程序进行动作的设备(虚拟机10)经由网络向外部输出的情况或者通过向硬盘、半导体存储器、DVD、CD-ROM等记录介质的写入来向外部输出的情况。 [虚拟机的结构] 接着,说明图1所示的虚拟机的结构。此外,关于硬件1、主机OS2、虚拟机软件3具有与一般性结构相同的结构,所以省略详细的说明。此外,在以下的说明中,将监视对象的程序预先存储在虚拟盘11a内,并成为设置有污点标签的程序。 图3是示出虚拟机的功能结构的图。如图3所示,虚拟机10具有虚拟物理存储器10a、影子存储器10b、虚拟盘11a、影子盘11b、虚拟CPU12、虚拟硬件控制器18。 虚拟物理存储器10a是通过将信息处理装置具有的物理存储器中的预定区域分配为以虚拟机10进行动作的客户OS所使用的存储器来实现的虚拟的存储器。例如,虚拟物理存储器10a存储由虚拟CPU12从虚拟盘11a读出的程序或数据。 影子存储器10b是保持针对虚拟物理存储器10a上的值设定的污点标签的值的数据结构体。 这里,说明影子存储器10b的一例。图4是示出影子存储器中存储的信息的例子的图。如图4所示,影子存储器10b将“虚拟物理存储器的地址”和“污点标签”对 应起来进行存储。“虚拟物理存储器的地址”是示出虚拟物理存储器10a上的存储位置的位置信息,“污点标签”是针对各库函数执行的结果输出的数据设定的识别符。 图4的情况表示针对虚拟物理存储器10a的地址“0000~0200”中存储的监视对象的程序代码赋予了污点标签“11”。另外还表示针对虚拟物理存储器10a的地址“0310~0350”所存储的监视对象的数据赋予了污点标签“05”。此外,图4所示的数值等仅为例示,并非对值等进行限定。 虚拟盘11a是通过将信息处理装置具有的物理盘中的预定区域分配为由虚拟机10进行动作的客户OS所使用的区域来实现的虚拟的盘。例如,虚拟盘11a存储虚拟CPU12为执行对象的程序或成为程序的处理对象的数据等。该虚拟盘11a在预定区域内具备存储有与上述库函数的输入以及输出有关的日志的日志存储部110。 影子盘11b是保持针对虚拟盘11a上的值设定的污点标签的值的数据结构体。 这里,说明影子盘11b的一例。图5是示出在影子盘中存储的信息的例子的图。如图5所示,影子盘11b将“虚拟盘的地址”和“污点标签”对应起来进行存储。“虚拟盘的地址”是表示虚拟盘11a上的存储位置的位置信息,“污点标签”是识别成为监视对象的情况的识别符。另外这里,在“污点标签”的2比特信息是“1”时,表示监视对象的数据是程序代码的情况。 图3的虚拟CPU12是通过将信息处理装置具有的物理CPU中的预定处理能力分配为由虚拟机10进行动作的客户OS所使用的CPU来实现的虚拟的CPU。该虚拟CPU12具备保持该虚拟CPU12所保持的污点标签的影子寄存器。该虚拟CPU12具有程序执行部13、判定部14、库函数执行监视部15以及污点分析部17,由它们来执行各种处理。 程序执行部13执行虚拟盘11a中存储的程序。例如,程序执行部13从虚拟盘11a中读出执行对象的程序后在虚拟物理存储器10a内展开并执行。 判定部14判定所执行的程序是否是监视对象。判定所执行的程序是否是监视对象的方法可采用公知的各种方法。例如,可以预先指定监视对象的程序名等,通过在虚拟物理存储器10a中展开的程序与预先指定的程序是否一致,来判定是否为监视对象。另外,也可以在程序内进行扫描,在包含指定为监视对象的命令时,判定为监视对象。 虚拟硬件控制器18控制虚拟盘11a与虚拟物理存储器10a之间、影子盘11b与 影子存储器10b之间的数据收发。例如,虚拟硬件控制器18在虚拟物理存储器10a内存储程序执行部13从虚拟盘11a读出的程序。另外,虚拟硬件控制器18在虚拟盘11a中存储由程序等从虚拟物理存储器10a读出的数据。这样的虚拟硬件控制器18具有执行污点标签的传播的污点信息传播部18a。 污点分析部17在将设定有污点标签的数据传递至由虚拟CPU12(具体地说是程序执行部13)执行的命令时,根据污点标签的传播规则使污点标签传播至命令的执行结果。所谓设定有污点标签的数据被传递至由程序执行部13执行的命令,具体地说就是由命令的操作数(operand)传递的值保持污点标签的情况。 污点信息传播部18a伴随着虚拟盘11a与虚拟物理存储器10a之间的数据的读写,在影子盘11b与影子存储器10b之间传播污点标签。例如,虚拟硬件控制器18当在虚拟盘11a中存储由监视对象的程序从虚拟物理存储器10a读出的数据时,伴随着地,在影子盘11b上存储影子存储器10b上的该读出的数据的污点标签。 此外,作为传播污点标签时的规则,当在虚拟CPU12中执行机械语言命令时、在伴随1个以上的操作数的算术运算命令、逻辑运算命令、数据移动命令、数据复制命令的执行时,对操作数之一传递具有污点标签的值的情况下,在保存该命令执行结果的位置设定污点标签。该规则根据实施而不同,但在命令执行的结果依赖于所读入的值时,由使污点标签传播这样的基本规则构成,关于虚拟CPU12的命令中的以任何形式处理数据的命令,设为进行伴随污点标签传播的动作的命令。 库函数执行监视部15捕捉监视对象的程序所调用的库函数的执行,生成与输入至该库函数的输入以及输出相关的日志(以下,适当省略为“日志”)并将其输出。另外,库函数执行监视部15每当生成日志时对来自库函数的输出数据设定用于唯一识别该库函数的调用的污点标签。此外,在根据分析对象的程序的命令调用库函数时与库函数被调用之后返回至程序的命令时,进行两次对该库函数执行的捕捉。 这里,为了捕捉由监视对象的程序执行的库函数的执行,需要考虑以下点: (1)如何判断监视对象的程序。 (2)如何捕捉执行库函数这样的情况。 (3)怎样捕捉从库函数返回至监视对象的恶意软件的代码的情况。 关于(1),考虑采用了进程ID(processID)、线程ID(threadID)、存储器地址的范围等的方法等。关于(2),考虑直接改写二进制来配置钩子(hook)或断点的方法 或者利用硬件断点的方法。另外,还考虑了如下这样的方法等:利用二进制转换,比较所读入的命令的虚拟地址与预先掌握的应配置有库函数的地址是否一致,由此来捕捉库函数命令的执行。 关于(3),在利用(2)捕捉库函数的执行时,可通过观察在堆栈中存储的返回地址(returnaddress)、在特定的寄存器中存储的返回地址而掌握要返回的地址。另外,还可以找到已调用库函数的命令并设定返回该命令的下一命令的地址。在能够掌握要返回的地址的情况下,针对该地址,利用与上述的方法相同的方法进行用于钩子、断点或地址比较的登记,由此捕捉到已执行该返回的地址的命令的情况。 库函数执行监视部15在根据监视对象的程序来捕捉库函数的执行时,根据该库函数的变量信息(argumentinformation),掌握输入库函数的变量,取得作为变量输入库函数的数据和对该数据设定的污点标签,并将对应它们的信息作为日志(程序的分析日志)输出。 此外,例如,根据记载有该库函数的原型声明(prototypedeclaration)的信息来取得库函数的变量信息。例如,从库函数的源代码、由SDK(软件开发包,SoftwareDevelopmentKit)提供的头文件(headerfile)、库函数的文件等中取得。 另外,库函数执行监视部15在库函数被调用之后捕捉到向程序的返回时,进行以下的处理。首先,库函数执行监视部15根据所调用的库函数的变量信息,区分从库函数输出的变量,针对从库函数输出的数据,设定污点标签。并且,库函数执行监视部15将对应关联了输出的数据与对该数据设定的污点标签的信息作为日志进行输出。 [日志的例子] 这里,采用图6A以及图6B来说明库函数执行监视部15输出的日志的例子。图6A是例示在各库函数之间传播污点标签时的日志的图。图6B是例示针对每个库函数设定新的污点标签时的日志的图。此外,在图6A以及图6B中,日志按照时间序列的顺序排列,并随着往下而成为新的日志。 如图6A以及图6B所示,日志显示以下的内容:表示是与被调用的库函数的输入时有关的日志([prev])还是与输出时有关的日志([post])的信息;该库函数的函数名;表示该库函数的变量是输入(IN)还是输出(OUT)的信息;该变量的数据;以及对该数据设定的污点标签的值。此外,虽然在图6A以及图6B中省略了图示,但各个日志保 持表示按照哪样的顺序被调用的时间序列信息。 此外,在该日志中,作为该库函数调用的附随信息,可包含库函数名、含有该库函数的模块名、PID、TID、调用源地址、返回地址、时间信息、命令指针所指的地址(EIP)等。 日志搜索部16在确定生成了混淆化数据的库函数时参照该日志。关于日志搜索部16采用图6A以及图6B所例示的日志来确定生成了混淆化数据的库函数的顺序的例子将在后面记述。 此外,如图3所示,主机OS2除了虚拟机10之外,还具备日志搜索部16以及日志存储部110。这样,主机OS2将日志搜索部16以及日志存储部110保持在虚拟机10之外是为了防止日志或日志的搜索处理从在虚拟机10内动作的监视对象的程序中被找到。日志搜索部16参照来自虚拟机10的输出数据(混淆化数据)中设定的污点标签和日志存储部110中积蓄的日志,追踪在库函数之间输入输出的数据的依存关系,确定生成了来自虚拟机10的输出数据的库函数。该日志搜索部16的详细情况将在后面叙述。 日志存储部110存储由库函数执行监视部15输出的日志(参照图6A以及图6B)。此外,利用表示被调用的库函数的函数名、日志的时间序列信息、各库函数以怎样的顺序被调用的信息等,来进行日志存储部110中的在库函数调用时输出的日志与从库函数返回时输出的日志之间的对应。另外,这里的对应也可以采用调用了库函数的地址与返回的库函数的地址之间的关系性、PID或TID等。 [虚拟机的处理顺序] [日志的积蓄顺序] 接着,采用图7来说明虚拟机10的处理顺序。首先,说明虚拟机10积蓄与向库函数的输入以及输出有关的日志的顺序。图7是示出虚拟机积蓄与向库函数的输入以及输出有关的日志的顺序的流程图。 虚拟机10的程序执行部13将执行对象的程序从虚拟盘11a加载到虚拟物理存储器10a内(S11)。 然后,判定部14判定所加载的程序是否是监视对象的程序(S12)。此外,判定部14在判定为所加载的程序不是监视对象的程序的情况下(S12的“否”),结束处理。 另一方面,判定部14在判定为所加载的程序是监视对象的程序时(S12的“是”), 库函数执行监视部15根据该程序来判定是否存在库函数的调用(S13)。 而且,在库函数执行监视部15根据该程序判定为存在库函数的调用时(S13的“是”),取得被调用的库函数、在该库函数中作为变量输入的数据和对该数据设定的污点标签,并将对应它们的信息作为日志向日志存储部110输出(S14)。另一方面,在库函数执行监视部15判定为没有库函数的调用时(S13的“否”),返回至S13。 在S14之后,当库函数执行监视部15判定为从所调用的库函数返回至该程序时(S15的“是”),对从该库函数输出的数据设定污点标签(S16)。即,库函数执行监视部15根据被调用的库函数的变量信息,区分从该库函数输出的变量,并针对从库函数输出的数据设定污点标签。 在S16之后,库函数执行监视部15取得被调用的库函数、从该库函数输出的数据和对该数据设定的污点标签,并将对应它们的信息作为日志向日志存储部110进行输出(S17)。 然后,库函数执行监视部15当判定为程序执行部13执行程序已结束时(S18的“是”),结束处理。另一方面,只要程序还没有结束(S18的“否”),就返回至S13。 这样,虚拟机10利用监视对象的程序来捕捉库函数的调用,并积蓄与向该库函数的数据输入以及从该库函数的数据输出有关的日志。 [库函数的确定顺序] 接着,采用图8来说明主机OS2的日志搜索部16搜索在日志存储部110中积蓄的日志并确定所生成混淆化数据的库函数的顺序。图8是示出主机OS的日志搜索部确定生成了混淆化数据的库函数的顺序的流程图。 首先,日志搜索部16参照日志存储部110中积蓄的日志,对于输出至虚拟机10的外部的数据(混淆化数据),找到向外部输出该数据的库函数(S21)。例如,日志搜索部16根据设定了输出的混淆化数据的污点标签,按照时间序列反向地追踪日志存储部110中积蓄的日志,找到输出了该数据的库函数。 在S21之后,日志搜索部16参照日志存储部110中积蓄的日志,当存在被传递(输入)至在S21中找到的库函数的数据(S22的“是”)且被传递的数据设定有污点标签(S23的“是”)时,取得该数据的污点标签(S24)。 在S24之后,日志搜索部16搜索在日志存储部110中积蓄的日志,并确定生成了在S24中取得的设定有污点标签的数据的库函数(S25)。例如,日志搜索部16从日 志存储部110所积蓄的日志内的、与在S21中找到的库函数相比时间序列靠前的库函数的日志中,确定生成了在S24中取得的设定有污点标签的数据的库函数。然后,日志搜索部16针对在S25中确定的库函数执行S22以后的处理。 另一方面,日志搜索部16参照日志存储部110中积蓄的日志,当不存在传递(输入)给在S21中找到到库函数的数据时(S22的“否”)或被传递的数据没有设定污点标签时(S23的“否”),进入至S26。然后,日志搜索部16将该库函数确定为生成了混淆化数据的函数(S26)。 这样,信息处理装置确定生成了混淆化数据的库函数。然后,只要能够确定库函数,信息处理装置的用户就可以根据该库函数的特性来估计混淆化数据的源信息的数据。 例如,在能够确定为生成了混淆化数据的库函数是读取某文件的内容的库函数的情况下,可以根据该文件的文件名、文件路径、所有者信息、与该文件相关的属性信息等,来估计在该库函数中读取的数据(源信息)是哪种的数据。除此之外,例如当能够确定为库函数是读取注册表的内容的函数的情况下,可通过确定该注册表的注册码或子码的信息、生成或登记了该注册表的文件或注册码的进程,来估计源信息的种类。通过这样地估计源信息的种类,信息处理装置的用户容易地估计出哪种信息由于恶意软件而向外部泄漏。 另外,根据这样的信息处理装置,在确定生成了混淆化数据的库函数时,由于基于通过程序的动态分析获得的日志来进行确定,所以不需要静态分析这样的成本。即,信息处理装置的用户不用花费较大的成本,就能够估计输出到外部的混淆化数据的源信息是哪种的数据。此外,可利用信息处理装置具备的估计部来进行上述源信息的数据的估计。 此外,信息处理装置在向外部输出混淆化数据时,可取得与该输出目的地(通信目的地)有关的信息。例如,当估计为混淆化数据是与系统内的机密信息有关的信息时,在信息处理装置中,将该数据的发送目的地作为信息泄漏数据的发送目的地附加标记并进行监视。 [确定库函数的例子] 这里,说明日志搜索部16采用日志存储部110中积蓄的日志来确定生成了混淆化数据的库函数的顺序的例子。这里,以采用图6A所示的日志的情况为例进行说明。 例如,当日志搜索部16将图6A所示的日志中的send(…,变量2:IN:’yamada’:tag=0x1,…)作为起点来搜索生成了tag=0x1的库函数时,找到[post]GetComputerName。由此,日志搜索部16可确定为生成了由send发送的数据的库函数是GetComputerName,虚拟机10的用户可推测为由send发送的数据是计算机名。 另一方面,在日志搜索部16如图6B所示的采用污点标签的值依据每个库函数而不同的日志来确定库函数时,如以下这样进行。 例如,日志搜索部16当将图6B所示的日志中的send(…,变量2:IN:’yamada’:tag=0x2,…)作为起点来搜索生成了tag=0x2的库函数时,找到[post]memcpy。接着,日志搜索部16在找到[post]memcpy输入时的日志的情况下,是[prev]memcpy,变量1:OUT,变量2:IN:’yamada’:tag=0x1,因此当搜索生成了tag=0x1的库函数时,找到[post]GetComputerName。由此,日志搜索部16确定为生成了由send发送的数据的库函数是GetComputerName。 此外,日志搜索部16所确定的库函数可以是处理了混淆化数据的源信息的库函数(例如,图6A以及图6B中的GetComputerName),或者可以是在输出该混淆化数据之前被调用的全部库函数(例如,图6A以及图6B中的GetComputerName、memcpy、send)。另外,日志搜索部16也可以将表示在输出该混淆化数据之前调用的库函数彼此间的依存关系的信息(例如,send←memcpy←GetComputerName)或在各库函数中采用的数据等一并输出。这样,虚拟机10的用户能够容易地估计出混淆化数据的源信息是怎样的数据。 [第2实施方式] 另外,在上述实施方式中,在程序中从库函数返回时该库函数输出的数据没有被设定污点标签的情况下,库函数执行监视部15可对该数据设定污点标签。并且,库函数执行监视部15可将来自该库函数的输出数据和污点标签作为日志输出至日志存储部110。 也就是说,库函数执行监视部15在来自被调用的库函数的输出数据设定有污点标签的情况下,每当日志生成时,将对来自该库函数的输出数据设定的标记输出给日志。另一方面,库函数执行监视部15在来自库函数的输出数据没有设定污点标签的情况下,每当日志生成时,设定用于唯一识别该库函数的调用的标记,并输出给日志。 这样,例如,在库函数是进行加密或混淆化的处理的函数的情况下,即使在通过这样的库函数的处理对输入至该库函数的数据设定的污点标签消失了时,也能够继续将污点标签传播至要进行处理的库函数的输入数据。由此,日志搜索部16可通过追踪日志的污点标签,来确定生成了混淆化数据的源信息的库函数。 [其它实施方式] 另外,虽然说明了库函数执行监视部15在从库函数向分析对象的程序返回时捕捉其执行并对来自该库函数的输出数据设定污点标签的情况,但不仅限于此。例如,库函数执行监视部15也可以监视向虚拟物理存储器10a写入库函数内的命令的动作,在每次发生写入时设定污点标签。即,库函数执行监视部15可以在从库函数返回时统一地对来自库函数的输出数据设定污点标签,也可以每当在库函数内发生了对虚拟物理存储器10a的写入时设定污点标签。 此外,虚拟机10可利用BinaryInstrumentation并利用仅使特定的进程虚拟化的进程型虚拟机,或者也可以利用不是作为应用程序进行动作的虚拟机监视器而是如Xen或KVM(Kernel-basedVirtualMachine:基于内核的虚拟机)那样在相同的层上安装主机OS和虚拟机监视器这样的虚拟化。另外,为了虚拟化安装,可利用Intel(登记商标)-VT(VirtualizationTechnology:虚拟化技术)这样的硬件(硬件)支持。 另外,日志搜索部16在图8的S25中的日志搜索中,也可以基于库函数的声明或原型信息,来预先决定采用哪个变量的污点标签进行搜索。这样,日志搜索部16例如即使在将多个变量作为输入值(输入数据)提供给库函数的情况下,也能够有效地进行日志的搜索,另外,能够提高确定库函数时的确定精度。此外,该搜索对象的变量,可以针对每个库函数进行指定,也可以根据库函数的输出变量来指定追踪哪个输入变量。 另外,还可以手动地进行在本实施方式所说明的各个处理中的作为自动进行的处理来说明的处理的全部或一部分。此外,关于由各个装置进行的各处理功能,其全部或任意的一部分可通过CPU以及利用该CPU分析执行的程序来实现,或者可作为基于布线逻辑的硬件来实现。 [程序] 并且,也可以生成使用计算机可执行的语言描述了信息处理装置执行的处理的监视程序。在该情况下,通过由计算机执行监视程序,可以得到与上述实施方式相同的 效果。并且,也可以将该监视程序记录在计算机可读取的记录介质内,使计算机读入并执行该记录介质内记录的监视程序来实现与上述实施方式相同的处理。以下,对执行实现与图1等所示的信息处理装置相同的功能的监视程序的计算机的一例进行说明。 图9是示出执行监视程序的计算机的图。如图9所示,计算机1000例如具有存储器1010、CPU1020、硬盘驱动接口1030、盘驱动接口1040、串行端口接口1050、视频适配器1060和网络接口1070。这些各个部通过总线1080连接。 存储器1010包含ROM(ReadOnlyMemory:只读存储器)1011以及RAM1012。ROM1011例如存储BIOS(BasicInputOutputSystem:基本输入输出系统)等的引导程序。硬盘驱动接口1030与硬盘驱动器1090连接。盘驱动接口1040与盘驱动器1100连接。在盘驱动器1100内例如插入磁盘或光盘等可拆装的存储介质。在串行端口接口1050上例如连接有鼠标1110以及键盘1120。视频适配器1060连接有例如显示器1130。 这里,如图9所示,硬盘驱动器1090存储有例如OS1091、应用程序1092、程序模块1093以及程序数据1094。上述实施方式所说明的监视对象的程序例如存储在硬盘驱动器1090或存储器1010中。 另外,监视程序例如作为描述有由计算机1000执行的指令的程序模块被存储在例如硬盘驱动器1090内。具体地说,描述有由程序执行部13、判定部14、库函数执行监视部15以及日志搜索部16执行的指令的程序模块被存储在硬盘驱动器1090中。 另外,将用于监视程序的信息处理的数据作为程序数据被存储在例如硬盘驱动器1090内。并且,CPU1020根据需要在RAM1012中读出硬盘驱动器1090所存储的程序模块或程序数据,执行上述的各个顺序。 此外,监视程序所涉及的程序模块或程序数据不仅限于存储在硬盘驱动器1090中的情况,也可以例如被存储在能够拆装的存储介质内,经由盘驱动器1100等由CPU1020读出。或者,监视程序所涉及的程序模块或程序数据也可以被存储在经由LAN(LocalAreaNetwork,局域网)或WAN(WideAreaNetwork,广域网)等的网络连接的其它计算机内,经由网络接口1070由CPU1020读出。 标号说明 1硬件 3虚拟机软件 10虚拟机 10a虚拟物理存储器 10b影子存储器 11a虚拟盘 11b影子盘 12虚拟CPU 13程序执行部 14判定部 15库函数执行监视部 16日志搜索部 18虚拟硬件控制器 18a污点信息传播部 110日志存储部
《信息处理装置以及信息处理方法.pdf》由会员分享,可在线阅读,更多相关《信息处理装置以及信息处理方法.pdf(19页珍藏版)》请在专利查询网上搜索。
监视恶意软件(程序)的举动,针对基于程序的库函数的每次调用,生成日志,该日志将表示所调用的库函数的识别信息、向库函数的输入数据和来自库函数的输出数据以及用于唯一确定输出数据的污点标签对应起来。并且,参照对来自信息处理装置的输出数据设定的污点标签和日志,追踪在库函数间输入输出的数据的依存关系,确定生成了来自信息处理装置的输出数据的库函数。 。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1