首页> 中国专利> 软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法

软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法

摘要

软件动作模型化装置(100)具备:堆栈信息记录部(120);终端信息记录部(150);使用终端信息记录部(150)记录的终端信息,作为堆栈差分信息生成将从堆栈信息的调用堆栈上位开始到检测到终端信息为止的信息相互联结后的信息的堆栈差分信息生成部(130);以及根据堆栈差分信息,生成该软件的动作模型的模型生成部(140)。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-31

    未缴年费专利权终止 IPC(主分类):G06F11/28 授权公告日:20130417 终止日期:20160412 申请日:20070412

    专利权的终止

  • 2013-08-07

    专利权的转移 IPC(主分类):G06F11/28 变更前: 变更后: 登记生效日:20130718 申请日:20070412

    专利申请权、专利权的转移

  • 2013-04-17

    授权

    授权

  • 2009-07-08

    实质审查的生效

    实质审查的生效

  • 2009-05-13

    公开

    公开

说明书

技术领域

本发明涉及软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。

背景技术

PC或工作站、服务器、路由器、移动电话、PDA等全部的计算机被暴露于来自外部或内部的攻击。代表性的攻击是以在计算机上执行的软件的脆弱性为踏板的攻击。攻击者向计算机送入利用了软件的脆弱性的具有恶意的代码,争夺运行中的进程的控制,利用该进程的权限来进行非法操作。

为了检测利用脆弱性的攻击,特别是为了检测未知的攻击,具有将软件的正常的动作模型化,在软件执行过程中判定有无与模型的背离的异常检测系统。系统调用是进程向内核委托系统上重要的处理时进行的命令,攻击者使用进程委托的系统调用,使系统进行任意的行动。因此,在监视软件的动作时,验证系统调用的正当性(例如,参照特开2004-126854号公报,H.Feng等,“Anomaly Detection Using Call Stack Information”,The proc.of IEEESymposium on Security and Privacy 2003,pp.62.、阿部等,“静的解析に基づく侵入知システムの最適化”,情報理学会論文誌:コンピユ—テイングシステム,vol.45,No.SIG3(ACS5),pp.11-202。)。

在特开2004-126854号公报中记载的攻击对策装置中,具备:系统调用表,其将系统调用发行源的函数存在于存储器的代码区域中的情况设为正常,输入从软件(任务)发行的系统调用请求,输出向正当性检查功能的转移地址;正当性检查功能部,其在发行系统调用请求时根据由OS存储在特定的存储区域中的系统调用调用源的返回地址,判定系统调用请求的正当性并输出判定结果,而在判定为非法的系统调用请求时,撤销该系统调用;攻击对策功能部,其输入正当性检查功能部的非法系统调用请求判定结果并采取对策;以及输入正当性检查功能部的正当系统调用请求判定结果后被调用的、执行命令的系统调用。

在“Anomaly Detection Using Call Stack Information”中记载的攻击检测系统中,为了验证系统调用的正当性,利用调用栈的状况(调用栈中累积的返回地址的列)。在该系统中,首先事先执行软件,根据得到的结果学习模型。在程序执行过程中,取得产生系统调用时的调用栈的状况,生成与产生系统调用时的程序计数器一同记录的Virtual Stack List,此外,检测当前的Virtual StackList和前一个Virtual Stack List的差分信息,即从比较对象的调用栈的状况的栈最下位开始按顺序进行比较验证,在检测出不同的返回地址之后生成以后的返回地址的列(Virtual Path)。根据生成的Virtual Stack List和Virtual Path分别生成散列表,将该表作为软件的模型使用。在验证软件的动作时,在软件执行的过程中,生成Virtual Stack List和Virtual Path,进行与作为模型的散列表的匹配,如果一致则允许系统调用请求,如果不一致则判定为异常。

在“静的解析に基づく侵入知システムの最適化”中记载的攻击检测系统中,为了验证系统调用的正当性,利用调用栈的状况(栈中累积的返回地址的列)。在该系统中,通过解析监视对象软件的二进制编码来生成函数定义和函数定义的自动机。对每个函数生成该自动机,用于监视软件的控制流程。节点被定义为(1)函数的入口、(2)函数的出口、(3)函数的调用中的某一个。在监视对象软件的执行过程中,该系统在每次发行系统调用时停止该软件,调查该时刻的调用栈的状况。并且,从返回地址列制作已调用的函数的列表(称为栈回溯)。然后,当把i设为自然数时,比较第i-1栈回溯和第i栈回溯,验证从前者到后者的控制流程是否存在于模型(自动机)中。

在以linux为首的OS中,通常经由Wrapper函数发行系统调用。因为Wrapper函数存在于编码区域中,所以系统调用发行源的函数始终存在于编码区域中。此外,在攻击为主流的Return-to-libc攻击时,攻击者向libc返回发行任意的系统调用。考虑以上的状况,在由于系统调用发行源的函数的地址位于编码区域中而视为正当的特开2004-126854号公报中记载的攻击对策装置中,存在无法检测的攻击。此外,在“Anomaly Detection Using Call StackInformation”、“静的解析に基づく侵入知システムの最適化”中记载的攻击检测系统,因为使用在调用栈中累积的返回地址的列来进行验证,所以相比在特开2004-126854号公报中记载的攻击对策装置进行更加详细的模型化。因此,与特开2004-126854号公报相比,减少了攻击漏检的情况。

发明内容

特开2004-126854号公报、“Anomaly Detection Using Call StackInformation”都是以在程序执行过程中验证软件的动作为前提的,但在移动电话等处理能力低的计算机中,为了搭载用于验证动作的系统,通过有限的资源实现处理的高速化,并且抑制使用存储量是重要的。

特别是在“Anomaly Detection Using Call Stack Information”中,为了提高精度,在模型中包含有调用栈的状况,需要在验证时在发行系统调用的定时每次取得调用栈的状况。为了取得调用栈的状况,需要利用栈指针(SP)、基址指针(BP)在调用栈内进行搜索,按顺序取得识别栈帧的栈帧信息(位置、返回地址、Canary等),但因为将调用栈在存储器上展开,所以低速的存储器访问频度地启动,时间开销高。

此外,特别是在“静的解析に基づく侵入知システムの最適化”中,为了提高精度,监视调用栈的状况,但需要对栈回溯中列出的每个函数读入模型,进行控制流程的验证。为了使监视速度成为高速,考虑通过LRU算法对读入的模型进行高速缓存,但因为在所装入的设备中限制了存储量,结果,在存储器中放置了可能不被使用的模型,这就压迫了使用存储量,可能会使监视对象软件的处理显著地恶化。

因此,本发明是鉴于上述问题而提出的,其目的在于提供一种正确地检测攻击,削减软件监视动作中的时间以及空间开销的软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。

本发明的第1特征为:提供一种软件动作模型化装置,其具备:(a)栈信息记录部,其在软件的执行环境中,在软件执行过程中,可以得知在调用栈中累积的顺序地取得对发生了特定事件的时刻的在调用栈中累积的栈帧进行识别的栈帧信息,并且按照特定事件的发生顺序进行记录;(b)终端信息记录部,其将i设为自然数,从调用栈的底部开始按照顺序比较由栈信息记录部记录的第i-1栈信息和第i栈信息,将调用栈的位置和栈帧信息一致的部分作为一致部分,并且在检测到不同的栈帧信息后将以后的部分作为不一致部分,记录作为形成一致部分和不一致部分的边界的栈帧信息的终端信息;(c)第1栈差分信息生成部,其使用终端信息记录部记录的终端信息,作为栈差分信息生成将从栈信息的栈上位开始到检测出终端信息为止的信息相互联结后的信息;以及(d)模型生成部,其根据栈差分信息,生成该软件的动作模型。

根据第1特征的软件动作模型化装置,可以对每个软件记录用于把在监视时中断调用栈的搜索的位置设定为本来的终端信息的位置(有时是其附近)的终端信息。此外,在进行监视时,即使在使用终端信息中断调用栈的搜索的情况下,也可以生成可以利用的模型。因此,根据第1特征的软件动作模型化装置,可以正确地检测攻击,削减软件动作监视中的时间以及空间开销。

此外,在第一特征的软件动作模型化装置中,终端信息记录部将特定事件的识别符和终端信息的同现频率高的终端信息与特定事件的识别符一同进行记录,栈差分信息生成部从终端信息记录部记录的终端信息中,使用特定的事件的识别符取得用于生成栈差分信息的终端信息。

根据该软件动作模型化装置,通过记录与特定事件(系统调用等)的同现关系强的终端信息,在进行监视时,可以对每个特定的事件使用特殊化的终端信息。

此外,在第一特征的软件动作模型化装置中,终端信息记录部可以将按照栈信息记录部记录的栈信息的时间序列,在任意的期间,从调用栈的底部看存在于固定位置的栈帧信息作为终端信息进行记录。

根据该软件动作模型化装置,可以一直较小地保持记录的终端信息与本来的终端信息的差(在调用栈内的位置的不同),来减少记录的终端信息的数量。

并且,终端信息记录部可以掌握从调用栈的底部看栈帧信息位于固定位置的期间的长度,把期间长的栈帧信息作为终端信息进行记录。

此外,在第一特征的软件动作模型化装置中,还具备:模型取得部,其取得由模型生成部生成的、成为监视对象的软件的动作模型;终端信息取得部,其取得由终端信息记录部记录的终端信息;栈信息取得部,其在检索调用栈时,在检索到由终端信息取得部传送的终端信息的时刻,中断从调用栈取得栈帧信息,按照特定事件的发生顺序进行记录;第2栈差分信息生成部,其将把栈信息取得部取得的第i-1栈信息和第i栈信息相互联结后的信息作为栈差分信息来生成;以及动作监视部,其判定栈差分信息生成部生成的栈差分信息与模型取得部取得的动作模型的背离。

根据该软件动作模型化装置,除了在同一终端上实现模型化、以及实现监视之外,还可以实现利用了终端信息的效率高的调用栈的搜索。

此外,在第一特征的软件动作模型化装置中,栈帧信息可以是返回地址。

根据该软件动作模型化装置,无需修正调用栈,就可以取得识别栈帧的信息。

本发明的第2特征是一种软件动作监视装置,其具备:(a)模型取得部,其在将表示了与通过监视对象软件发行的特定事件期期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型设为函数模型时,对监视对象软件发行的每个特定的事件取得所述函数模型;(b)终端信息取得部,其在软件的执行环境中,取得适合于监视对象软件的终端信息;(c)栈信息取得部,其在该软件的执行过程中,可以得知在调用栈中累积的顺序地取得对发生了特定事件的时刻的在调用栈中累积的栈帧进行识别的栈帧信息,并且在搜索调用栈时,在检测到由终端信息取得部传送的终端信息的时刻,中断从调用栈取得栈帧信息,按照特定事件的发生顺序进行记录;(d)栈差分信息生成部,其将把栈信息取得部取得的第i-1栈信息和第i栈信息相互联结后的信息作为栈差分信息来生成;(e)动作监视部,其判定栈差分信息生成部生成的栈差分信息和模型取得部取得的动作模型的背离。

根据第2特征的软件动作监视装置,可以使用在学习时得到的终端信息来中断调用栈的搜索,可以减轻监视的开销。特别是终端信息取得部,其根据特定事件的识别符,取得将事先取得的特定事件的识别符和终端信息的同现频率高的终端信息与特定事件的识别符一同进行记录的信息,由此在调用栈搜索的中断确认中,可以使用与特定事件的同现关系强的终端信息,所以可以进行适合于特定事件的中断。

此外,第2特征的软件动作监视装置还具备模型废弃部,该模型废弃部废弃由模型取得部记录的函数模型,模型取得部取得事先根据监视对象软件的代码对每个函数生成的、表示函数相互的调用关系的函数模型,动作监视部判定由堆栈差分信息生成部生成的堆栈差分信息和模型取得部取得的函数模型的背离,堆栈信息取得部在从调用堆栈中取得堆栈帧信息时,在检测到与终端信息一致的堆栈帧信息的情况下,中断堆栈帧信息的取得,此时,模型废弃部废弃模型取得部为了监视以前的堆栈差分信息而记录的函数模型。

根据该软件动作监视装置,可以从存储器中删除在存储器中残存的不需要的函数模型,可以抑制使用存储量。

函数模型废弃有可能废弃下次的系统调用时的堆栈差分信息的验证时所需要的函数模型。因此,终端信息取得部通过根据事先取得的堆栈信息的时间序列,在某个期间,取得作为终端信息记录了从调用堆栈的底部看存在于固定位置的堆栈帧信息的信息,由此在进行验证时,可以只废弃某个期间不利用的函数模型,所以可以降低伴随基于终端信息的函数模型废弃而产生的风险。

此外,在第二特征的软件动作监视装置中,终端信息取得部也可以通过根据栈信息记录部的栈信息的时间序列,在任意期间,取得作为终端信息记录了从调用堆栈的底部看存在于固定位置的堆栈帧信息的信息。

根据该软件动作监视装置,将终端信息的确认结果保存在高速缓冲存储器中,可以实现高效化。

而且,终端信息记录部可以取得作为终端信息记录了堆栈帧信息从调用堆栈的底部看存在于固定位置的期间长的堆栈帧信息的信息。

此外,在第二特征的软件动作监视装置中,模型废弃部可以掌握系统当前的使用存储量,对是否进行基于终端信息的函数模型的废弃进行切换。

根据存储器的空闲状况,不废弃函数模型而按照LRU算法等进行缓存有可能可以减轻时间开销。根据该软件动作监视装置,模型废弃部掌握当前的使用存储量,对是否进行基于终端信息的函数模型的废弃进行切换,由此可以只在需要的情况下废弃模型函数,因此可以降低风险。

此外,第2特征的软件动作监视装置还具备存储函数模型的模型存储部,模型取得部对取得的函数模型附加识别符然后记录在模型存储部中,模型废弃部也可以向模型存储部传送通过识别符指定要废弃的函数模型的废弃命令。

根据该软件动作监视装置,可以确定要废弃的函数模型。

本发明的第3特征为:是一种软件动作模型化方法,其包含以下的步骤:(a)在软件的执行环境中,在软件执行过程中,可以得知在调用堆栈中累积的顺序地取得对发生了特定事件的时刻的在调用堆栈中累积的堆栈帧进行识别的堆栈帧信息,并且按照特定事件的发生顺序进行记录;(b)将i设为自然数,从调用堆栈的底部开始按照顺序比较由堆栈信息记录部记录的第i-1堆栈信息和第i堆栈信息,将调用堆栈的位置和堆栈帧信息一致的部分作为一致部分,在检测到不同的堆栈帧信息后将以后的部分作为不一致部分,记录作为形成一致部分和不一致部分的边界的堆栈帧信息的终端信息;(c)使用终端信息记录部记录的终端信息,将把从堆栈信息的堆栈上位开始到检测出终端信息为止的信息相互联结后的信息作为堆栈差分信息来生成;以及(d)根据堆栈差分信息,生成该软件的动作模型。

此外,本发明的第4特征是一种软件动作监视方法,其包含以下的步骤:(a)取得表示了监视对象软件发行的特定事件与对每个特定的事件在特定的事件期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型;(b)在软件的执行环境中,取得适合于监视对象软件的终端信息;(c)在该软件的执行过程中,可以得知在调用堆栈中累积的顺序地取得对发生了特定事件的时刻的在调用堆栈中累积的堆栈帧进行识别的堆栈帧信息,并且在搜索调用堆栈时,在检测到由终端信息取得部传送的终端信息的时刻,中断从调用堆栈取得堆栈帧信息,按照特定事件的发生顺序进行记录;(d)将把堆栈信息取得部取得的第i-1堆栈信息和第i堆栈信息相互联结后的信息作为堆栈差分信息来生成;(e)判定堆栈差分信息生成部生成的堆栈差分信息和模型取得部取得的动作模型的背离。

附图说明

图1是第一实施方式的软件动作模型化装置的结构方框图。

图2是第一实施方式的堆栈信息、堆栈差分信息以及终端信息的例子。

图3是第一实施方式的堆栈信息以及终端信息的例子。

图4是第一实施方式的堆栈信息以及终端信息的例子。

图5是表示第一实施方式的软件动作模型化方法的流程图。

图6是详细表示图5的S12的流程图。

图7是第一实施方式的终端信息记录部使用的列表的例子。

图8是详细表示图5的S13的流程图。

图9是第一实施方式的软件动作监视装置的结构方框图。

图10是利用第一实施方式的终端信息中断堆栈信息取得的例子。

图11是利用第一实施方式的终端信息中断堆栈信息取得的例子。

图12是表示第一实施方式的软件动作监视方法的流程图。

图13是详细表示图12的步骤S22的流程图。

图14是第二实施方式的软件动作模型化装置以及软件动作监视装置的结构方框图。

图15是第三实施方式的软件动作监视装置的结构方框图。

图16是第三实施方式的函数模型的例子。

图17是第三实施方式的函数模型的例子。

图18是第三实施方式的函数模型和废弃命令的例子。

图19是利用第三实施方式的函数模型的动作监视的例子。

图20是第三实施方式的堆栈信息以及终端信息的例子。

图21是使用第三实施方式的终端信息中断堆栈信息取得的例子。

图22是第三实施方式的函数模型的废弃例子。

图23是第三实施方式的废弃策略的例子。

图24是表示第三实施方式的软件监视方法的流程图。

图25是表示第三实施方式的软件监视方法的流程图。

具体实施方式

然后,参照附图说明本发明的实施方式。在以下附图的记载中,对于相同或者类似的部分附加相同或者类似的符号。但是,应该注意到附图为示意图。

(第一实施方式)

(软件动作模型化装置)

如图1所示,第一实施方式的软件动作模型化装置100使用监视对象进程10、监视对象进程使用的存储空间20、以及任意使用阈值30,生成并输出表示监视对象进程10的正常动作的模型信息50、终端信息40。在此,所谓“监视对象进程10”是指应该监视软件动作的软件的执行形式。该监视对象进程10的监视指示可以通过用户从外部给予,也可以通过软件发送者对软件附加的元信息来给予。

软件动作模型化装置100具备系统调用信息取得部110、堆栈信息记录部120、堆栈差分信息生成部130、模型生成部140、终端信息记录部150。

系统调用信息取得部110检测监视对象进程10发行的系统调用,从该时刻到堆栈信息记录部120记录堆栈信息为止,使监视对象进程为等待状态。并且,从系统调用15取得包含系统调用号码等的系统调用信息115。系统调用信息取得部110可以通过调试工具来实现,但例如通过Linux中安装的ptrace可以容易地实现。

此外,在第一实施方式的软件动作模型化装置100中,作为特定的事件设为监视对象进程10发行的系统调用,但本发明并不局限于此。所谓系统调用以外的特定事件,例如可以举出jmp命令等。例如使用linux中安装的ptrace,通过进行单步执行,可以取得指令,所以软件动作模型化装置可以检测jmp命令。

堆栈信息记录部120从监视对象进程使用的存储空间20取得系统调用信息取得部110检测到系统调用时刻的调用堆栈的状况25。在此,所谓“调用堆栈的状况”是指堆栈帧的累积状态。根据调用堆栈的状况取得识别堆栈帧的信息。在此,“识别堆栈帧的信息”例如可以举出返回地址或Canary等。Canary是用于防止涉及缓冲区溢出脆弱性的堆栈溢出攻击(stack smashing attack)的、在每个堆栈帧中插入的值的意思。Canary在与生成了堆栈帧的时刻比较表示不同的值时,可以检测为堆栈帧由于堆栈溢出攻击而被破坏了。该Canary当可以推定攻击者时不构成意思,所以很多时候使用随机数,但在该Canary中还可以包含可以识别堆栈帧的信息。通过如此设置Canary,如果取得Canary,则可以识别堆栈帧。

在第一实施方式中,详细说明使用返回地址识别堆栈帧。即,从调用堆栈的状况中仅提取返回地址,作为堆栈信息进行输出。提取的方式多种多样,在x86或ARM等调用堆栈中,因为返回地址存在于堆栈帧的最上位(底部的相反),所以例如使用在寄存器中保存的堆栈指针和基址指针,通过取得紧接基址指针下方的值来实现。堆栈信息通过堆栈信息记录部120在发行了系统调用的时刻,按照时间序列顺序进行记录。

终端信息记录部150从底部开始按照顺序比较由堆栈信息记录部120记录的第i-1堆栈信息和第i堆栈信息,将调用堆栈的位置和返回地址一致的部分作为一致部分,将在检测到不同的返回地址之后以后的部分作为不一致部分,作成一致部分和不一致部分的边界。将位于该不一致部分的端部的返回地址称为“终端信息”。

图2表示堆栈信息、一致部分、不一致部分、堆栈差分信息、终端信息的例子。如图2(A)所示,当把第i-1堆栈信息和第i堆栈信息进行比较时,一致部分如图2(B)所示,不一致部分如图2(C)所示。分割一致部分和不一致部分的返回地址为“x”,所以如图2(E)所示,终端信息成为x。此外,所谓在模型化中使用的堆栈差分信息如图2(D)所示,是联结不一致部分的信息。在生成堆栈差分信息时,进行从堆栈信息中删除一致部分,提取不一致部分的处理。此时,堆栈信息需要从底部开始进行验证,但在调用堆栈的搜索中,因为堆栈指针存在于堆栈上位(与底部相反),所以从堆栈上位开始向底部进行搜索。因此,可以说需要取得在调用堆栈中累积的全部返回地址。但是,因为该终端信息存在于“应该删除的信息”和“应该提取的信息”的边界上,所以事先列出该终端信息,在调用堆栈的搜索时使用,由此不需要取得全部的返回地址即可中断。

终端信息记录部150从堆栈信息记录部120记录的堆栈信息125A中,任意使用阈值30记录终端信息40。终端信息因为在记录的堆栈信息中存在较多,所以虽然可以列出全部的终端信息,但也可以在搜索调用堆栈时提取有用的信息。例如,可以举出以下情况:堆栈信息因为在系统调用时生成,所以掌握系统调用识别符和终端信息的同现关系,记录同现频率高的终端信息。图3(A)是堆栈信息记录部120记录的堆栈信息的例子。调查系统调用识别符和终端信息的同现频率,对每个系统调用提取同现频率高的终端信息。图3(B)是如此提取的终端信息的例子。

在第一实施方式中,详细说明以下的例子:提取在具有任意阈值以上的长度的期间,从调用堆栈的底部看存在于固定位置的终端信息。综合了以main函数为代表的程序(或者模块)的函数等存在于调用堆栈的固定位置的期间长,位于该位置下位的返回地址很多时候为第i堆栈信息和第i-1堆栈信息并且一致。因此,长时间存在于固定位置的返回地址是本来的终端信息的可能性高。所以,终端信息可以不是存在于一致部分和不一致部分的边界的返回地址,作为终端信息可以提取在调用堆栈的固定位置存在期间长的返回地址。

图4(A)是堆栈信息记录部120记录的堆栈信息的例子。在堆栈信息中,main、X、a是长时间存在于固定位置的返回地址。如上所述,作为终端信息提取在固定位置连续存在的返回地址。在此,给予阈值,作为终端信息可以提取具有阈值以上长度的返回地址。在图4(B)中,在阈值为3时,作为终端信息提取main和X。

软件动作模型化装置100输出由终端信息记录部150得到的终端信息40,并且使用终端信息155生成堆栈差分信息。

堆栈差分信息生成部130将堆栈信息、终端信息40、系统调用信息115作为输入,生成堆栈差分信息135。在堆栈差分信息生成部130中,从第i-1堆栈信息和第i堆栈信息中提取不一致部分,连接所取得的不一致的部分来生成堆栈差分信息。

模型生成部140根据堆栈差分信息135生成监视对象进程10的动作模型。例如,像非专利文献1那样,导出取得堆栈差分信息135的散列值的、系统调用识别符和堆栈差分信息的相关规则。

(软件动作模型化方法)

然后,参照图5对第一实施方式的软件动作模型化方法进行说明。

首先,系统调用信息取得部110检测监视对象进程10发行的系统调用15,从该时刻开始到堆栈信息记录部120记录堆栈信息为止,使监视对象进程10为等待状态。并且,从系统调用15中取得包含系统调用号码等的系统调用信息115(步骤S10)。

然后,堆栈信息记录部120从监视对象进程使用的存储空间20取得在系统调用信息取得部110检测到系统调用的时刻的调用堆栈的状况25(步骤S11)。

然后,终端信息记录部150从堆栈信息记录部120记录的堆栈125A中,任意地利用阈值30来记录终端信息40(步骤S12)。此外,将在后面对于终端信息存储部150的动作例子进行详细说明。

然后,堆栈差分信息生成部130将堆栈信息125、终端信息40、系统调用信息115作为输入,生成堆栈差分信息135(步骤S13)。此外,将在后面对堆栈差分信息生成部130的动作例子进行说明。

然后,模型生成部140根据堆栈差分信息135生成监视对象进程10的动作模型(步骤S14)。

然后,参照图6对部分S12的动作例子进行详细说明。

首先,终端信息记录部150使用对各个终端信息存在于固定位置的期间的长度(以下称为“连续数”)进行计数的ListA,以及用于保存具有连续数的终端信息的ListB。图7(A)、(B)分别是ListA、ListB的例子。ListA由以下构成:终端信息、从调用堆栈底部开始数的位置、连续数、在检查了堆栈信息之后用于判定是否对该终端信息增加计数的flag。ListB由终端信息和连续数构成。

如图6那样,终端信息记录部150首先对ListA和ListB进行初始化,即,使其成为几乎没有项目的状态(步骤S100)。然后,读入堆栈信息(步骤S110)。然后,从读入的堆栈信息中,从调用堆栈底部开始按顺序读入返回地址(步骤S120)。在该读入中,因为之后进行与上次取得的堆栈信息的比较,所以通过上次取得的堆栈信息,读入在与本次读入的返回地址的位置相同的位置存在的返回地址。

然后,在读入的返回地址之间进行比较,验证是否为不一致(步骤S130)。在不一致时,把在上次的循环中读入的返回地址作为终端信息,并更新ListA(步骤S140)。在List的更新中,验证在ListA中是否存在终端信息,如果不存在则在ListA中追加该终端信息、位置、连续数=0、flag=0。

在步骤S130中,在一致时,或者在步骤S140后,验证在ListA中是否存在返回地址或者终端信息并且相同位置的终端信息(步骤S150)。如果存在,则使该终端信息的连续数+1(步骤S160),并且使flag为1(步骤S170)。

直到堆栈信息结束为止继续进行从该步骤S120到S170。然后,按顺序读入ListA的项目(步骤S180)。验证读入的项目的flag是否为1(步骤S190)。在不是1时,因为连续停止所以该终端信息的连续数已确定。根据已确定的连续数和终端信息,更新ListB(步骤S220)。此外,清除该终端信息的连续数(步骤S230)。在步骤S190中为1时,或者在步骤S230之后,使flag为0(步骤S200)。

直到ListA结束位置继续进行该步骤S180至S200。并且,直到堆栈信息读入结束为止,继续进行步骤S110到步骤S200。

根据连续数重新排列如此得到的ListB(步骤S210)。然后,依次读入ListB的项目(步骤S240)。比较阈值和连续数(步骤S250),在连续数大于阈值时,记录终端信息(步骤S260)。直到ListB结束为止,继续该步骤S240到S260。

此外,将如此得到的终端信息与划分一致部分、不一致部分的终端信息的位置的差作为误差信息,例如可以与终端信息一同记录在外部记录中。

然后,参照图8详细说明步骤S13中的不一致部分提取步骤的动作例子。

首先,堆栈差分信息生成部130取得终端信息(步骤S300)。然后,根据堆栈信息取得返回地址(步骤S310)。然后,验证终端信息和返回地址是否一致(步骤S320),在一致时,结束不一致部分提取步骤。在不一致时,直到终端信息结束为止继续步骤S320。在终端信息结束时,判断为在步骤S310中取得的返回地址是不一致部分的项目,并进行记录(步骤S330)。在堆栈信息结束之前继续步骤S310~S330。

堆栈差分信息生成部130将如此取得的第i不一致部分和上次取得的第i-1不一致部分结合。关于结合的方法在例子中表示。图3(D)表示的堆栈差分信息在结合图3(C)的不一致部分时,使从系统调用第i堆栈信息得到的不一致部分的顺序相反地结合。这是仿照非专利文献1那样进行的,但也可以不使顺序相反。原因在于,在通过堆栈差分信息上的返回地址和系统调用识别符的相关规则生成模型的情况下,顺序没有意义。堆栈差分信息与系统调用识别符一起被输出,并传送给模型生成部140。

此外,在通过终端信息记录部150记录了误差信息时,在图7的步骤S320中为一致的情况下,可以不立即结束,而通过追加取得误差信息量的返回地址并进行检查。如此,与本来的终端信息的背离的距离变短,所以可以生成精度高的模型。

(软件动作监视装置)

然后,使用图9对第一实施方式的、进行监视对象进程10的动作正常异常判定的软件动作监视装置进行说明。

如图9所示,第一实施方式的软件动作监视装置500利用监视对象进程利用的存储空间20、终端信息40、模型信息50、软件识别符70,来输出判定结果。

软件动作监视装置500具备系统调用信息取得部510、堆栈信息取得部520、终端信息取得部550、堆栈差分信息生成部530、动作监视部540以及模型取得部560。

软件动作监视装置500当装载软件时,根据软件识别符7和模型信息50,使取得适合对监视对象进程10进行监视的模型565的模型取得部560启动。

系统调用信息取得部510检测监视对象进程10发行的系统调用15,从该时刻开始直到堆栈信息取得部520结束取得堆栈信息为止,使监视对象进程10为等待状态。并且,从系统调用15取得系统调用信息。通过利用在Linux中安装的Ptrace,可以容易地实现系统调用信息取得部510。

终端信息取得部550,根据软件识别符70和终端信息40取得适合于监视对象进程的终端信息555,并传送给堆栈信息取得部520。在对每个系统调用识别符记录了终端信息时,还对终端信息取得部550输入系统调用信息515A,对由监视对象进程10发行的每个系统调用选择终端信息。

堆栈信息取得部520,从监视对象进程利用的存储空间20取得调用堆栈的状况25,并且利用终端信息555生成堆栈信息525。堆栈信息取得部520从调用堆栈的状况中取得识别堆栈帧的信息。

在第一实施方式中,详细说明使用多个返回地址识别堆栈帧。即,堆栈信息取得部520从调用堆栈的状况25取得返回地址。并且,堆栈信息取得部520利用终端信息555中断取得识别堆栈帧的信息(在第一实施方式中为返回地址)。

图10表示利用终端信息中断堆栈信息取得的例子。图10(A)是终端信息取得部550取得的终端信息的例子。此外,图10(B)是某个时刻的调用堆栈的状况的例子。考虑发行系统调用,产生从图10(B)上面所示的调用堆栈的状况迁移到图10(B)下面表示的调用堆栈的状况的情况。此外,在调用堆栈的状况中不仅有返回地址,还存在被转交给函数的自变量,但为了说明方便,仅表示了返回地址。从图10(B)上部表示的调用堆栈的状况,从堆栈上位开始按照顺序取得返回地址。当一边取得一边与终端信息进行比较时,检测与终端信息一致的x。在该时刻,中断返回地址的取得,作为堆栈信息输出记录的返回地址(图中s、r、p、q)。从图10(B)下部表示的调用堆栈的状况也同样地检测到与终端信息一致的x的时刻,中断返回地址的取得,作为堆栈信息输出所记录的返回地址(图中的h、g、f)。如此得到的堆栈信息由下一个步骤的堆栈差分信息生成部530结合,从而成为堆栈差分信息(图10(B)右侧)。

此外,图11表示利用终端信息中断堆栈信息的取得的其他的例子。图11(A)是终端信息取得部550取得的终端信息的例子。与图10不同,与系统调用识别符成为配对。堆栈信息取得部520使用系统调用信息取得部510取得的系统调用号码,按照系统调用来切换终端信息。图11(B)是某时刻的调用堆栈的状况的例子。考虑发行系统调用,产生从图11(B)上面所示的调用堆栈的状况迁移到图11(B)下面表示的调用堆栈的状况的情况。此外,在调用堆栈的状况中不仅有返回地址,还存在被转交给函数的自变量,但为了说明方便,仅表示了返回地址。从图11(B)上部的调用堆栈的状况,是发行系统调用号码4得到的信息,所以终端信息成为x。从调用堆栈的上位开始按顺序取得返回地址,并与终端信息进行比较,在检测到与终端信息x一致的返回地址时,中断返回地址的取得,作为堆栈信息输出所记录的返回地址(图中的s、r、p、q)。同样地,在为图11(B)下部的调用堆栈的状况时,因为是发行系统调用号码6得到的信息,所以main成为终端信息。从调用堆栈的上位开始按顺序取得返回地址,并与终端信息进行比较,在检测到与终端信息main一致的返回地址时,中断返回地址的取得,作为堆栈信息输出所记录的返回地址(图中的h、g、f、x、y)。如此得到的堆栈信息由下一个步骤的堆栈差分信息生成部530结合,从而成为堆栈差分信息(图11(B)右侧)。

堆栈差分信息生成部530,将堆栈信息525和系统调用信息515B作为输入,输出堆栈差分信息335。在堆栈差分信息生成部530中,从第i-1堆栈信息和第i堆栈信息中提取不一致部分,联结所取得的不一致部分来生成堆栈差分信息。

模型取得部560,在将表示了与通过监视对象进程10发行的特定事件期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型设为函数模型时,对监视对象进程10发行的每个系统调用取得函数模型。

动作监视部540判定堆栈差分信息生成部520生成的堆栈差分信息535和模型取得部560取得的动作模型530的背离,并作为判定结果进行输出。

(软件动作监视方法)

然后,参照图12对第一实施方式的软件动作监视方法进行说明。

首先,系统调用信息取得部510检测监视对象进程10发行的系统调用15,在从该时刻开始到堆栈信息取得部520结束堆栈信息的取得为止,使监视对象进程10为等待状态。而且,从系统调用15取得系统调用信息(步骤S20)。

然后,终端信息取得部550根据软件识别符70和终端信息40取得适合于监视对象进程的终端信息555,并将其传送给堆栈信息取得部520(步骤S21)。

然后,堆栈信息取得部530从监视对象进程使用的存储空间20取得调用堆栈的状况25。并且,使用终端信息555,取得堆栈信息525(步骤S22)。此外,将在后面对堆栈差分信息取得部520的动作例子进行详细地说明。

然后,堆栈差分信息生成部530将堆栈信息525和系统调用信息515B作为输入,生成堆栈差分信息335(步骤S23)。

另一方面,当装载了软件时,模型取得部560根据软件识别符70和模型信息50取得适合于对监视对象进程10进行监视的模型565(步骤S24)。

然后,动作监视部540判定堆栈差分信息生成部520生成的堆栈差分信息535和模型取得部560取得的动作模型530的背离,并作为判定结果60进行输出(步骤S25)。

然后,参照图13对步骤S22的动作例子进行详细说明。

首先,堆栈信息取得部520从终端信息取得部550取得终端信息(步骤S500)。然后,根据调用堆栈的状况25,按顺序取得堆栈帧(步骤S510),并取得该堆栈帧的返回地址(步骤S520)。

然后,堆栈信息取得部520按顺序读入终端信息,比较在步骤S520中取得的返回地址和终端信息(步骤S530)。直到终端信息结束为止,或者到确认返回地址和终端信息一致为止,继续进行步骤S530。在直到终端信息结束没有确认出一致时,将返回地址作为堆栈信息进行记录(步骤S540),直到堆栈帧结束为止,重复步骤S510至步骤S540。

当在步骤S5300中确认了一致时,跳出循环结束堆栈信息取得处理。此外,在对终端信息附加了误差信息时,在步骤S530中确认了一致之后,可以追加以下的步骤:亦即,直到误差信息表示的量为止取得返回地址。

(作用以及效果)

第一实施方式的软件动作模型化装置提取已记录的终端信息,根据终端信息,从堆栈信息生成软件的动作模型。

因此,根据第一实施方式的软件动作模型化装置,可以对每个软件记录用于把在监视时中断调用堆栈的搜索的位置设定为本来的终端信息的位置(有时是其附近)的终端信息。此外,在进行监视时,即使在使用终端信息中断调用堆栈的搜索的情况下,也可以生成可以利用的模型。

特别是通过记录与特定事件(系统调用等)的同现关系强的终端信息,在进行监视时,可以使用对每个特定的事件特化的终端信息。

此外,特别是作为终端信息记录按照堆栈信息记录部记录的堆栈信息的时间序列,在某个期间内从调用堆栈的底部看存在于固定位置的堆栈帧信息,由此,可以在较小地保持记录的终端信息与本来的终端信息的差(在调用堆栈内的位置的不同)的状况下,减少记录的终端信息的数量。

此外,堆栈帧信息的特征在于其是返回地址,由此无需修正调用堆栈就可以取得识别堆栈帧的信息。

此外,第一实施方式的软件监视装置在检索调用堆栈时,以检测到与终端信息相匹配的返回地址为契机,中断调用堆栈的搜索,通过直到该时刻取得的堆栈信息进行动作验证。

因此,根据第一实施方式的软件监视装置,在软件执行过程中监视监视对象软件的动作时,可以使用在学习时得到的终端信息来中断调用堆栈的搜索,可以减轻监视的开销。

特别是终端信息取得部,其根据特定事件的识别符,取得将事先取得的特定事件的识别符和终端信息的同现频率高的终端信息与特定事件的识别符一同进行了记录的信息,由此在调用堆栈搜索的中断确认中,可以使用与特定事件的同现关系强的终端信息,可以进行适合于特定事件的中断。

此外,特别是终端信息取得部取得作为终端信息记录了按照事先取得的堆栈信息的时间序列,在某个期间从调用堆栈的底部看存在于固定位置的堆栈帧信息的信息,由此,例如可以将终端信息的确认结果保存在缓冲存储器中来实现高效化。

(第二实施方式)

(软件动作模型化以及软件动作监视装置)

图14是表示第二实施方式的软件动作模型化以及软件动作监视装置1000的结构例子的方框图。

软件动作模型化以及软件动作监视装置1000是,在模型信息DB50中存储表示监视对象进程10的动作的模型信息1055,并且在终端信息DB30中存储终端信息1085的装置。并且,软件动作监视装置1000是,分别从模型信息DB50、终端信息DB30取得适合对监视对象进程10的动作进行监视的模型信息55、终端信息35,进行监视对象进程10的动作的验证、输出验证结果60的装置。

软件动作模型化以及软件动作监视装置1000具备:系统调用信息取得部1010、堆栈信息记录部1020、堆栈信息取得部1030、堆栈差分信息生成部1040、模型生成部1050、模型取得部1060、动作监视部1070、终端信息记录部1080、和终端信息取得部1090。

在对监视对象进程10的动作进行模型化时,软件动作监视装置1000启动系统调用信息取得部1010、堆栈信息记录部1020、堆栈差分信息生成部1040、模型生成部1050、终端信息记录部1080。各个构成要素可以与第一实施方式中记载的软件动作模型化装置100中的系统调用信息取得部110、堆栈信息记录部120、堆栈差分信息生成部130、模型生成部140、终端信息记录部150相同。详细情况请参照第一实施方式。

在对监视对象进程10的动作进行监视时,软件动作监视装置1000启动系统调用取得部1010、堆栈信息取得部1030、堆栈差分信息生成部1040、模型取得部1060、动作监视部1070、终端信息取得部1090。各个构成要素可以与第一实施方式中记载的软件动作监视装置500中的系统调用信息取得部510、堆栈信息取得部520、堆栈差分信息生成部530、模型取得部560、动作监视部540、终端信息取得部550相同。详细的情况请参照第一实施方式。

(作用以及效果)

通过第二实施方式的软件动作模型化以及软件动作监视装置,除了实现同一终端上的模型化和监视之外,还可以实现利用终端信息的高效的调用堆栈的搜索。

(第三实施方式)

图15是表示第三实施方式的软件动作监视装置5100的构成例子的方框图。

软件动作监视装置5100是,与在某个期间存储函数模型的模型存储部5180、存储了终端信息的终端信息DB30、以及存储了函数模型的函数模型DB50连接,进行监视对象进程10的动作的正常/异常判定的装置,并利用监视对象进程使用的存储空间20、软件识别符60、终端信息35、函数模型55输出判定后的结果40。此外,将函数模型5175记录在模型存储部5180中,取得在模型存储部5180中记录的函数模型5185,输出废弃命令5155从模型存储部5180中删除在模型存储部5180中记录的函数模型。

软件动作监视装置5100,具备系统调用发行检测部5110、堆栈信息取得部5120、堆栈差分信息生成部5130、动作监视部5140、模型废弃部5150、终端信息取得部5160、以及模型取得部5170。

系统调用发行检测部5110检测监视对象进程10发行了系统调用15,直到动作的验证完成为止使监视对象进程10停止,将检测信息5115传送给堆栈信息取得部5120。检测信息5115因为可以用作使堆栈信息取得部5120启动的触发器,所以例如可以作为具有对堆栈信息取得部5120的动作进行管理的标志,建立该标志的位。系统调用发行检测部5110例如可以通过使用作为Linux上的调试工具的pteace来容易地实现。

堆栈信息取得部5120当接收到检测信息5115时,从监视对象进程使用的存储空间20取得调用堆栈的状况25,并且利用终端信息5165,来生成堆栈信息5125A。将生成的堆栈信息5125A传送给堆栈差分信息生成部5130。堆栈信息取得部5120从调用堆栈的状况25中搜索堆栈帧,按顺序取得识别堆栈帧的堆栈帧信息。所谓堆栈帧信息,例如可以举出返回地址或Canary等。

在第三实施方式中详细说明使用返回地址识别堆栈帧。即,堆栈信息取得部5120从调用堆栈的状况25中按顺序提取在个帧中存在的返回地址。提取的方式多种多样,在x86或ARM等的调用堆栈中,因为返回地址存在于堆栈帧的最上位(底部的相反),所以例如使用在寄存器中保存的堆栈指针和基址指针,通过取得紧接基址指针下方的值来实现。堆栈信息通过堆栈信息记录部5120在发行了系统调用的时刻,按照时间序列顺序进行记录。此外,堆栈信息取得部5120的特征为:根据终端信息5156(以后说明)中断取得返回地址,将终端到达信息5125B传送给模型废弃部5150。

堆栈差分信息生成部5130将堆栈信息5125作为输入,生成堆栈差分信息,即pop信息5135A、push信息5135B。在堆栈差分信息生成部5130中,从系统调用第i-1堆栈信息和系统调用第i堆栈信息中提取不一致部分,将得到的不一致部分作为pop信息、push信息进行输出。

终端信息取得部5160从调用堆栈的底部开始按顺序比较在终端信息DB30中记录的第i-1堆栈信息和第i堆栈信息,将调用堆栈的位置和返回地址一致的部分作为一致部分,将检测到不同的返回地址之后以后的部分作为不一致部分,取得作为一致部分和不一致部分的边界的终端信息。图2表示堆栈信息、一致部分、不一致部分、堆栈差分信息、终端信息的例子。当比较在图2(A)中表示的堆栈信息时,一致部分为图2(B),不一致部分为图2(C)。因为划分一致部分和不一致部分的返回地址为“x”,所以如图2(E)那样,终端信息成为x。此外,关于在验证中使用的堆栈差分信息,如图2(D)那样,在系统调用第i的不一致部分中,当把对系统调用第i-1堆栈信息中存在的信息附加了终端信息后的信息设为pop信息,而把对系统调用第i堆栈信息中存在的信息附加了终端信息后的信息设为push信息时,是对pop信息、push信息统称的信息。在生成堆栈差分信息时,进行从堆栈信息中除去一致部分,提取不一致部分的处理。此时,堆栈信息需要从底部开始进行验证,但在调用堆栈的搜索中,因为堆栈指针存在于堆栈上位(与底部相反),所以从堆栈上位向底部进行搜索。因此,可以说需要取得在调用堆栈中累积的全部返回地址。但是,因为该终端信息存在于“应该删除的信息”和“应该提取的信息”的边界上,所以事先列出该终端信息,在调用堆栈的搜索时使用,由此不需要取得全部的返回地址即可中断。

图16是函数模型的例子。第三实施方式的函数模型是根据源代码,提取函数调用的关系来生成的自动机。该自动机是,函数模型是针对每个函数而存在的,节点是(1)函数的入口(Entry)、(2)函数的出口(Exit)、以及(3)函数名称这三个种类中的某一种,将向节点的进线定义为函数调用,此外将从节点的出线定义为函数返回的自动机。图16(A)是源代码的例子,图16(B)是对源代码进行分析后作成的函数模型的例子。

此外,因为函数模型只要能进行push、pop的验证即可,所以函数模型的表现也可以不是自动机。例如,在针对自动机的各节点,将某个节点作为开始,将某个节点作为目的点时,可以通过表来表现对是否存在从开始点到目的点的路径进行分析后的结果。图17是根据图16(A)表示的源代码生成的、用表的形式表现的函数模型的例子。“○”表示存在路径,“×”表示不存在路径。

模型取得部5170从函数模型DB50中取得适合于监视对象进程10的动作验证的函数模型,然后记录在模型记录部5180中。将在后面进行叙述,动作监视部5140因为要求适合于对pop信息、push信息的每个帧进行检查的函数模型,所以在模型存储部5180中没有所需要的函数模型时,从函数模型DB50取得函数模型。此外,模型存储部5180如果容量很多则可以使用LRU算法等进行管理,由此可以进行高效的动作监视。但是,在移动电话等装载设备中,成为模型存储部的存储器的容量有限,所以通过较少的容量进行模型管理是重要的。此外,在模型存储部5180中进行记录时,可以对函数模型附加识别符。将在后面进行叙述,在模型存储部5180中存储的函数模型有可能被模型废弃部5150废弃。此时,为了可以确定废弃对象的函数模型,可以对函数模型附加识别符。图18(A)是附加了识别符的函数模型的例子。在该例子中,对作为函数模型的自动机附加了函数名“foo”。

动作监视部5140将堆栈差分信息生成部5130生成的pop信息5135A、push信息5135B、在模型存储部中存储的函数模型5185作为输入,来判定有无pop信息、push信息与函数模型的背离。

图19是动作监视部5140的动作的例子。当输入了成为验证对象的pop信息、push信息(图19(A))时,动作监视部5140验证是否在函数模型上存在有pop信息、push信息表示的、可以实现调用堆栈的状况的控制流程。例如,关于pop信息(图19(A)的(1))的“q”,验证是否可以从r返回结束q。图19(B)是q的函数模型。在此,验证是否存在从节点r到Exit的路径。如图19(B)所示,因为在q的函数模型中存在r→Exit的路径,所以设q的验证结果为正常。如果没有r→Exit的路径,则设验证结果为异常。如此,从s到x按顺序进行验证。在pop的动作正常时,验证push的动作。该验证例如关于push信息(图19(A)的(2))的“f”,验证是否可以向f进入并到达g。图19(C)是f的函数模型。在此,验证是否存在从节点Entry到下一帧的g的路径。如图19(c)所示,在f的函数模型中存在Entry→g的路径,所以设f的验证结果为正常。如果不存在Entry→g的路径,则设验证结果为异常。如此,从push信息的x到h按顺序进行验证。仅在所有的验证中判定为正常时,动作监视部140作为结果40输出正常。

如此,在动作监视部5149中,在pop信息、push信息的各帧中,读入需要的函数模型,验证路径。图19(D)是验证了push信息“h”时的模型存储部5180的状况。其中,假设模型存储部5180的管理是按照LRU算法。在该时刻,在模型存储部5180中除了在本次的验证中使用的函数模型以外,还保存有以前的验证中使用的函数模型。

终端信息取得部5160根据软件识别符60和终端信息35取得适合于对监视对象进程10的终端信息5165,并将其传送给堆栈信息取得部5120。终端信息的概念在前面已经进行了叙述,是区分一致部分和不一致部分的返回地址,并且已经叙述了通过事先执行监视对象软件得到的终端信息的列表(将生成该列表称为“事先学习”)作为中断调用堆栈的搜索的信息是有用的。并且,与终端信息相比存在于底部方向的帧是一致部分,是基于动作监视的验证不会涉及到的帧。利用这种情况,在堆栈取得部搜索调用堆栈时检测到终端信息的情况下,以此为契机,删除在模型存储部5180中存在的、在以前的验证中利用过的函数模型,由此可以增加模型存储的剩余容量。特别是,软件动作监视装置5100利用的终端信息,在事先学习时,当考虑到该终端信息是在具有通过用户给予等方式设定的阈值以上的长度的期间,从调用堆栈的底部看存在于固定位置上的终端信息的情况时,其效果会更加显著。综合了以main函数为代表的程序(或者模块)的函数等,很多时候存在于调用堆栈的固定位置的期间长,并且位于比该位置更下位的返回地址为第i堆栈信息和第i-1堆栈信息一致。因此,长时间存在于固定位置的返回地址是本来的终端信息的可能性高。所以,终端信息可以不是存在于一致部分和不一致部分的边界的返回地址,可以将在调用堆栈的固定位置存在期间长的返回地址作为终端信息来提取。

图20是通过事先学习得到的堆栈信息的时间序列的例子。

在堆栈信息中,main、X、a是长时间存在于固定位置的返回地址。这样,有时作为终端信息使用,将连续存在固定位置的返回地址作为终端信息来提取。如此得到的终端信息,并未必一定存在于区分一致部分和不一致部分的位置,但在与终端信息相比位于更底部方向的帧中包含较多的一致部分。即,与终端信息相比位于更底部方向的帧不是验证对象的可能性非常高。并且,因为该终端信息是在一定期间内存在于同一调用堆栈位置的返回地址,所以在某个一定期间内从验证对象中排除与终端信息相比位于更底部方向的帧。当考虑了以上情况时,即使从模型存储中除去与终端信息相比位于更底部方向的帧的函数模型,也不会成为大的问题。

图21表示利用终端信息中断堆栈信息取得,输出终端到达信息的例子。图21(A)是终端信息取得部5160取得的终端信息的例子。此外,图21(B)是在某个时刻的调用堆栈的状况。考虑发行系统调用,产生从图21(B)上面所示的调用堆栈的状况迁移到图21(B)下面表示的调用堆栈的状况的情况。此外,在调用堆栈的状况中不仅有返回地址,还存在被赋予给函数的自变量,但为了说明方便,仅表示了返回地址。从图21(B)上部表示的调用堆栈的状况,从堆栈上位开始按照顺序取得返回地址。当一边取得一边与终端信息进行比较时,检测与终端信息一致的x。在该时刻,中断返回地址的取得,将所记录的返回地址包含x作为堆栈信息进行输出,并且输出终端到达信息(图中s、r、q、p、x)。在从图21(B)下部表示的调用堆栈的状况也同样地检测到与终端信息一致的x的时刻,中断返回地址的取得,将所记录的返回地址包含x作为堆栈信息进行输出,并且输出终端到达信息(图中的h、g、f、x)。如此得到的堆栈信息通过下一步骤的堆栈差分信息生成部5130,成为堆栈差分信息(pop信息、push信息)(图21(B)右侧)。

模型废弃部5160当作为输入收到终端到达信息5125B时,输出对模型存储部5180中存储的函数模型进行删除的命令(废弃命令5155),删除在模型存储部5180中存储的函数模型。删除对象的函数模型可以是模型存储部5180中存储的函数模型的全部,例如,可以像通过临时变更LRU算法的阈值等被判定为使用频度较少的函数模型那样,来选择。决定该删除对象的函数模型可以预先在设计阶段进行设定。也可以通过使用策略文件等从外部输入。此外,取得当前的存储器使用量200,根据存储器使用量可以切换是否输出废弃命令。此外,在对函数模型附加了识别符时,通过在废弃命令5155中包含废弃对象的函数模型的识别符,可以确定废弃对象。图18(B)是废弃命令5155的例子。表示了在废弃命令中传送废弃对象的函数模型识别符为“foo”、“foo2”的例子(图18(B)下方),以及传达表示全部为废弃对象的含义的“all”的例子(图18(B)上方)。“foo”、“foo2”可以取散列值。此时,“all”可以取与函数模型识别符不发生冲突的值。

图22是由模型废弃部进行的函数模型废弃的例子。在此,将删除对象设为在模型存储部中存储的全部模型。图22(A)是来自堆栈信息取得部的输出的例子。图18(A)的(1)、(2)分别为第i-1堆栈信息、第i堆栈信息。设这些堆栈信息是通过检测终端信息“x”,得到了调用堆栈的搜索已中断的结果的信息。即,收到终端达到信息,终端达到标志的状态成为ON(图18(A)的(3))。在该状态下的模型废弃部的处理根据终端到达标志,把在以前的验证中使用的函数模型“y”、“main”(图22(B)左侧)从模型存储中废弃(图22(B)中部)。以后,通过由动作监视部请求函数模型,由模型取得部在模型存储中存储在验证中需要的函数模型“s”到“h”(图22(B)右侧)。

图23是模型废弃部使用的废弃策略的例子。废弃策略是由软件识别符、废弃对象的列构成的表,对每个软件指定废弃对象。即,由软件识别符“10”表示的软件将废弃对象设为在模型存储中存储的全部函数模型,软件识别符70、30临时变更LRU算法的阈值,将使用频度低的函数模型作为对象。阈值,可以根据通过事先动作所得到的软件的函数调用的频度分布来决定。在分布中没有辨认出局部性时,将废弃对象设为全部。

(软件动作监视方法)

然后,使用图24以及图25对第三实施方式的软件动作监视方法进行说明。

首先,堆栈信息取得部5120从终端信息取得部5160取得终端信息(步骤S5500)。根据调用堆栈的状况25按顺序取得堆栈帧(步骤S5510),并取得该堆栈帧的返回地址(步骤S5520)。

然后,堆栈信息取得部5120按顺序读入终端信息,在步骤S5520中将取得的返回地址与终端信息进行比较(步骤S5530)。直到终端信息结束为止,或者直到确认了返回地址与终端信息的一致为止,继续进行步骤S5530。若在直到终端信息结束还没有确认出一致时,将返回地址作为堆栈信息进行记录(步骤S5540),直到堆栈帧结束为止,重复步骤S5510至步骤S5540。当在步骤S5530中确认了一致时,跳出循环,输出表示检测到终端信息的终端到达信息(步骤S5550),并结束堆栈信息取得。终端到达信息传达在搜索调用堆栈时检测到终端信息的旨意,可以用作使模型废弃部5150启动的触发器,所以例如可以作为具有对模型废弃部5150的动作启动进行管理的标志,建立该标志的位。

然后,参照图25对模型废弃部5160的动作例子进行说明。

首先,模型废弃部5160取得在收到终端到达信息5160时用于理解作为删除对象的函数模型的废弃策略(步骤S5100)。然后,进行监视对象进程已结束的验证、和已收到终端到达信息的验证(分别为步骤S5120、S5130),在无论哪个事项都没有检测到时,重复S5110到S5130。

在步骤S5120中检测到事项时,结束模型废弃处理。此外,在步骤S5130中检测到事项时,取得当前的进程存储器使用量(步骤S5140),验证存储器使用量是否超过了某个阈值(步骤S5150)。在存储器使用量没有超过阈值时,返回步骤S5110,在超过了阈值时,按照废弃策略删除模型函数存储部内的函数模型(步骤S5160),返回步骤S5110。

在第三实施方式中,为了决定删除对象函数模型使用了策略,但在预先已决定了时不需要策略。此时,可以删除步骤S5100。此外,在第三实施方式中,根据存储器使用量来判定是否删除,但在不根据存储器使用量时,也可以删除步骤S5140至步骤S5150。

(作用以及效果)

当考虑非专利文献1的方法时,由终端信息以后出现的堆栈帧信息表示的函数从验证对象中删除。即,在存储器上可以不存在在该一致部分中存在的函数的函数模型。因此,第三实施方式的软件动作监视装置在搜索调用堆栈时,以检测到与终端信息匹配的返回地址为契机,中断调用堆栈的搜索,并且废弃在缓冲存储器中记录的函数模型。

因此,根据第三实施方式的软件动作监视装置,在软件执行过程中监视监视对象软件的动作时,可以从存储器中排除不需要的函数模型,因此可以在抑制时间开销的状况下削减整个监视装置的空间开销。此外,可以从存储器中排除在存储器中剩余的不需要的函数模型,可以抑制使用存储量。

函数模型废弃有可能废弃在产生下次系统调用时,在验证堆栈差分信息时所需要的函数模型。因此,终端信息取得部通过取得作为终端信息记录了根据事先取得的堆栈信息的时间序列,在任意的期间从调用堆栈的底部看存在于固定位置的堆栈帧信息的信息,由此在进行验证时,可以只废弃在某个期间不使用的函数模型,所以可以降低与基于终端信息的函数模型的废弃相伴的风险。

此外,根据存储器的空闲状况,不废弃函数模型而按照LRU算法等进行高速缓存可以减轻时间开销。因此,模型废弃部掌握当前的使用存储量,对是否进行基于终端信息的函数模型的废弃进行切换,由此可以只在需要的情况下废弃模型函数,因此可以降低风险。

此外,特别是,堆栈帧信息的特征在于其是返回地址,由此无需修正调用堆栈可以取得识别堆栈帧的信息。

此外,与在某个期间存储函数模型的模型存储(存储器、缓冲存储器等)连接,模型取得部对取得的函数模型附加识别符来存储在模型存储中,模型废弃部的特征为对模型存储部传送通过识别符指定要废弃的函数模型的废弃命令,由此可以确定要废弃的函数模型。

根据本发明,可提供正确地检测攻击,削减软件监视动作中的时间以及空间开销的软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号