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

文档序号:6454516阅读:281来源:国知局
专利名称:软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法
技术领域
本发明涉及软件动作模型化装置、软件动作监视装置、软件动作模型化方 法以及软件动作监视方法。
背景技术
PC或工作站、服务器、路由器、移动电话、PDA等全部的计算机被暴露 于来自外部或内部的攻击。代表性的攻击是以在计算机上执行的软件的脆弱性 为踏板的攻击。攻击者向计算机送入利用了软件的脆弱性的具有恶意的代码, 争夺运行中的进程的控制,利用该进程的权限来进行非法操作。
为了检测利用脆弱性的攻击,特别是为了检测未知的攻击,具有将软件的 正常的动作模型化,在软件执行过程中判定有无与模型的背离的异常检测系 统。系统调用是进程向内核委托系统上重要的处理时进行的命令,攻击者使用 进程委托的系统调用,使系统进行任意的行动。因此,在监视软件的动作时, 验证系统调用的正当性(例如,参照特开2004-126854号公报,H.Feng等, "Anomaly Detection Using Call Stack Information" , The proc.of IEEE Symposium on Security and Privacy 2003, pp.62.、阿部等,"静的解析仁基O,〈 侵入検知少只歹厶O最適化",情報処理学会論文誌匕°-一亍4 乂夕'、> ^^厶,vol.45, No. SIG3 (ACS5), pp.11—202。)。
在特开2004-126854号公报中记载的攻击对策装置中,具备系统调用表, 其将系统调用发行源的函数存在于存储器的代码区域中的情况设为正常,输入 从软件(任务)发行的系统调用请求,输出向正当性检查功能的转移地址;正 当性检查功能部,其在发行系统调用请求时根据由OS存储在特定的存储区域 中的系统调用调用源的返回地址,判定系统调用请求的正当性并输出判定结 果,而在判定为非法的系统调用请求时,撤销该系统调用;攻击对策功能部, 其输入正当性^r查功能部的非法系统调用请求判定结果并采取对策;以及输入正当性检查功能部的正当系统调用请求判定结果后被调用的、执行命令的系统 调用。
在"Anomaly Detection Using Call Stack Information"中记载的攻击才企测系 统中,为了验证系统调用的正当性,利用调用栈的状况(调用栈中累积的返回 地址的列)。在该系统中,首先事先执行软件,根据得到的结果学习模型。在 程序执行过程中,取得产生系统调用时的调用栈的状况,生成与产生系统调用 时的程序计数器一同记录的Virtual Stack List,此外,冲全测当前的Virtual Stack List和前一个Virtual Stack List的差分信息,即从比较对象的调用栈的状况的 栈最下位开始按顺序进行比较验证,在检测出不同的返回地址之后生成以后的 返回地址的列(Virtual Path )。才艮据生成的Virtual Stack List和Virtual Path分 别生成散列表,将该表作为软件的模型使用。在验证软件的动作时,在软件执 行的过程中,生成Virtual Stack List和Virtual Path,进行与作为模型的散列表 的匹配,如果一致则允许系统调用请求,如果不一致则判定为异常。
在"静的解析仁基O'〈侵入検知i> X亍厶O最適化"中记载的攻击检测系 统中,为了验证系统调用的正当性,利用调用栈的状况(栈中累积的返回地址 的列)。在该系统中,通过解析监^L对象软件的二进制编码来生成函数定义和 函数定义的自动机。对每个函数生成该自动机,用于监视软件的控制流程。节 点被定义为(1)函数的入口、 (2)函数的出口、 (3)函数的调用中的某一个。 在监视对象软件的执行过程中,该系统在每次发行系统调用时停止该软件,调 查该时刻的调用栈的状况。并且,从返回地址列制作已调用的函数的列表(称 为栈回溯)。然后,当把i设为自然数时,比较第i-l栈回溯和第i栈回溯,验 证从前者到后者的控制流程是否存在于模型(自动机)中。
在以linux为首的OS中,通常经由Wrapper函数发行系统调用。因为 Wrapper函数存在于编码区域中,所以系统调用发行源的函数始终存在于编码 区域中。此外,在攻击为主流的Retum-to-libc攻击时,攻击者向libc返回发 行任意的系统调用。考虑以上的状况,在由于系统调用发行源的函数的地址位 于编码区域中而视为正当的特开2004-126854号公报中记载的攻击对策装置 中,存在无法检测的攻击。此外,在"Anomaly Detection Using Call Stack Information"、"静的解析仁基O, <侵入検知少乂 r厶O最適化"中记载的攻击检测系统,因为使用在调用栈中累积的返回地址的列来进行验证,所以相比在
特开2004-126854号公报中记载的攻击对策装置进行更加详细的模型化。因此,
与特开2004-126854号^H艮相比,减少了攻击漏4全的情况。

发明内容
特开2004-126854号乂>|艮、"Anomaly Detection Using Call Stack Information"都是以在程序执行过程中验证软件的动作为前提的,但在移动电 话等处理能力低的计算机中,为了搭载用于验证动作的系统,通过有限的资源 实现处理的高速化,并且抑制使用存储量是重要的。
特另'J是在"Anomaly Detection Using Call Stack Information"中,为了提高 精度,在模型中包含有调用栈的状况,需要在验证时在发行系统调用的定时每 次取得调用栈的状况。为了取得调用栈的状况,需要利用栈指针(SP)、基址 指针(BP)在调用栈内进行搜索,按顺序取得识别栈帧的栈帧信息(位置、 返回地址、Canary等),但因为将调用栈在存储器上展开,所以低速的存储器 访问频度地启动,时间开销高。
此外,特别是在"静的解析仁基O、侵入検知〉7亍厶0最適化"中,为 了提高精度,监视调用栈的状况,但需要对栈回溯中列出的每个函数读入模型, 进行控制流程的验证。为了使监视速度成为高速,考虑通过LRU算法对读入 的模型进行高速緩存,但因为在所装入的设备中限制了存储量,结果,在存储 器中放置了可能不被使用的模型,这就压迫了使用存储量,可能会使监视对象 软件的处理显著地恶化。
因此,本发明是鉴于上述问题而提出的,其目的在于提供一种正确地检测 攻击,削减软件监视动作中的时间以及空间开销的软件动作模型化装置、软件 动作监纟见装置、软件动作模型化方法以及软件动作监视方法。
本发明的第l特征为提供一种软件动作模型化装置,其具备(a)栈信 息记录部,其在软件的执行环境中,在软件执行过程中,可以得知在调用栈中 累积的顺序地取得对发生了特定事件的时刻的在调用栈中累积的栈帧进行识 别的栈帧信息,并且按照特定事件的发生顺序进行记录;(b )终端信息记录部, 其将i设为自然数,从调用栈的底部开始按照顺序比较由栈信息记录部记录的 第i-1栈信息和第i栈信息,将调用栈的位置和栈帧信息一致的部分作为一致
8部分,并且在检测到不同的栈帧信息后将以后的部分作为不一致部分,记录作
为形成一致部分和不一致部分的边界的栈帧信息的终端信息;(c)第l栈差分 信息生成部,其使用终端信息记录部记录的终端信息,作为栈差分信息生成将 从栈信息的栈上位开始到检测出终端信息为止的信息相互联结后的信息;以及 (d)模型生成部,其根据栈差分信息,生成该软件的动作模型。
根据第1特征的软件动作模型化装置,可以对每个软件记录用于把在监视 时中断调用栈的搜索的位置设定为本来的终端信息的位置(有时是其附近)的 终端信息。此外,在进行监视时,即使在使用终端信息中断调用栈的搜索的情 况下,也可以生成可以利用的模型。因此,根据第l特征的软件动作模型化装 置,可以正确地检测攻击,削减软件动作监视中的时间以及空间开销。
此外,在第一特征的软件动作模型化装置中,终端信息记录部将特定事件 的识别符和终端信息的同现频率高的终端信息与特定事件的识别符一同进行 记录,栈差分信息生成部从终端信息记录部记录的终端信息中,使用特定的事 件的识别符取得用于生成栈差分信息的终端信息。
根据该软件动作^t型化装置,通过记录与特定事件(系统调用等)的同现 关系强的终端信息,在进行监视时,可以对每个特定的事件使用特殊化的终端 信息。
此外,在第一特征的软件动作模型化装置中,终端信息记录部可以将按照 栈信息记录部记录的栈信息的时间序列,在任意的期间,从调用栈的底部看存 在于固定位置的栈帧信息作为终端信息进行记录。
根据该软件动作模型化装置,可以一直较小地保持记录的终端信息与本来 的终端信息的差(在调用栈内的位置的不同),来减少记录的终端信息的数量。
并且,终端信息记录部可以掌握从调用栈的底部看栈帧信息位于固定位置 的期间的长度,把期间长的栈帧信息作为终端信息进行记录。
此外,在第一特征的软件动作模型化装置中,还具备模型取得部,其取 得由模型生成部生成的、成为监视对象的软件的动作模型;终端信息取得部, 其取得由终端信息记录部记录的终端信息;栈信息取得部,其在检索调用栈时, 在检索到由终端信息取得部传送的终端信息的时刻,中断从调用栈取得栈帧信 息,按照特定事件的发生顺序进行记录;第2栈差分信息生成部,其将把栈信息取得部取得的第i-l栈信息和第i栈信息相互联结后的信息作为栈差分信息
来生成;以及动作监视部,其判定栈差分信息生成部生成的栈差分信息与模型
取得部取得的动作模型的背离。
根据该软件动作模型化装置,除了在同一终端上实现模型化、以及实现监
视之外,还可以实现利用了终端信息的效率高的调用栈的搜索。
此外,在第一特征的软件动作模型化装置中,栈帧信息可以是返回地址。 根据该软件动作模型化装置,无需修正调用栈,就可以取得识别栈帧的信

本发明的第2特征是一种软件动作监视装置,其具备(a)模型取得部, 其在将表示了与通过监视对象软件发行的特定事件期期间执行的函数调用以 及任意的函数返回的发行顺序的同现关系的动作模型设为函数模型时,对监视 对象软件发行的每个特定的事件取得所述函数模型;(b)终端信息取得部,其 在软件的执行环境中,取得适合于监视对象软件的终端信息;(c)栈信息取得 部,其在该软件的执行过程中,可以得知在调用栈中累积的顺序地取得对发生 了特定事件的时刻的在调用栈中累积的栈帧进行识别的栈帧信息,并且在搜索 调用栈时,在检测到由终端信息取得部传送的终端信息的时刻,中断从调用栈 取得栈帧信息,按照特定事件的发生顺序进行记录;(d)栈差分信息生成部, 其将把栈信息取得部取得的第i-l栈信息和第i栈信息相互联结后的信息作为
栈差分信息来生成;(e)动作监视部,其判定栈差分信息生成部生成的栈差分 信息和模型取得部取得的动作模型的背离。
根据第2特征的软件动作监视装置,可以使用在学习时得到的终端信息来 中断调用栈的搜索,可以减轻监视的开销。特别是终端信息取得部,其根据特 定事件的识别符,取得将事先取得的特定事件的识别符和终端信息的同现频率 高的终端信息与特定事件的识别符一同进行记录的信息,由此在调用栈搜索的 中断确认中,可以使用与特定事件的同现关系强的终端信息,所以可以进行适 合于特定事件的中断。
此外,第2特征的软件动作监视装置还具备模型废弃部,该模型废弃部废 弃由模型取得部记录的函数模型,模型取得部取得事先根据监视对象软件的代 码对每个函数生成的、表示函数相互的调用关系的函数模型,动作监视部判定由堆栈差分信息生成部生成的堆栈差分信息和模型取得部取得的函数模型的 背离,堆栈信息取得部在从调用堆栈中取得堆栈帧信息时,在检测到与终端信 息一致的堆栈帧信息的情况下,中断堆栈帧信息的取得,此时,模型废弃部废 弃模型取得部为了监视以前的堆栈差分信息而记录的函数模型。
根据该软件动作监视装置,可以从存储器中删除在存储器中残存的不需要 的函数模型,可以抑制使用存储量。
函数模型废弃有可能废弃下次的系统调用时的堆栈差分信息的验证时所 需要的函数模型。因此,终端信息取得部通过才艮据事先取得的堆栈信息的时间 序列,在某个期间,取得作为终端信息记录了从调用堆栈的底部看存在于固定 位置的堆栈帧信息的信息,由此在进行验证时,可以只废弃某个期间不利用的 函数模型,所以可以降低伴随基于终端信息的函数模型废弃而产生的风险。
此外,在第二特征的软件动作监视装置中,终端信息取得部也可以通过才艮 据栈信息记录部的栈信息的时间序列,在任意期间,取得作为终端信息记录了 从调用堆栈的底部看存在于固定位置的堆栈帧信息的信息。
冲艮据该软件动作监视装置,将终端信息的确认结果保存在高速緩沖存储器 中,可以实现高效化。
而且,终端信息记录部可以取得作为终端信息记录了堆栈帧信息从调用堆 栈的底部看存在于固定位置的期间长的堆栈帧信息的信息。
此外,在第二特征的软件动作监视装置中,模型废弃部可以掌握系统当前 的使用存储量,对是否进行基于终端信息的函数模型的废弃进行切换。
根据存储器的空闲状况,不废弃函数模型而按照LRU算法等进行緩存有
可能可以减轻时间开销。根据该软件动作监视装置,模型废弃部掌握当前的使 用存储量,对是否进行基于终端信息的函数模型的废弃进行切换,由此可以只 在需要的情况下废弃模型函数,因此可以降低风险。
此外,第2特征的软件动作监视装置还具备存储函数模型的模型存储部, 模型取得部对取得的函数模型附加识别符然后记录在模型存储部中,模型废弃 部也可以向模型存储部传送通过识别符指定要废弃的函数模型的废弃命令。 根据该软件动作监视装置,可以确定要废弃的函数模型。 本发明的第3特征为是一种软件动作模型化方法,其包含以下的步骤(a)在软件的执行环境中,在软件执行过程中,可以得知在调用堆栈中累积 的顺序地取得对发生了特定事件的时刻的在调用堆栈中累积的堆栈帧进行识 别的堆栈帧信息,并且按照特定事件的发生顺序进行记录;(b)将i设为自然 数,从调用堆栈的底部开始按照顺序比较由堆栈信息记录部记录的第i-l堆栈 信息和第i堆栈信息,将调用堆栈的位置和堆栈帧信息一致的部分作为一致部 分,在检测到不同的堆栈帧信息后将以后的部分作为不一致部分,记录作为形 成一致部分和不一致部分的边界的堆栈帧信息的终端信息;(c)使用终端信息 记录部记录的终端信息,将把从堆栈信息的堆栈上位开始到检测出终端信息为 止的信息相互联结后的信息作为堆栈差分信息来生成;以及(d)根据堆栈差
分信息,生成该软件的动作模型。
此外,本发明的第4特征是一种软件动作监视方法,其包含以下的步骤
(a)取得表示了监视对象软件发行的特定事件与对每个特定的事件在特定的 事件期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作 模型;(b)在软件的执行环境中,取得适合于监视对象软件的终端信息;(c) 在该软件的执行过程中,可以得知在调用堆栈中累积的顺序地取得对发生了特 定事件的时刻的在调用堆栈中累积的堆栈帧进行识别的堆栈帧信息,并且在搜 索调用堆栈时,在检测到由终端信息取得部传送的终端信息的时刻,中断从调 用堆栈取得堆栈帧信息,按照特定事件的发生顺序进行记录;(d)将把堆栈信 息取得部取得的第i-l堆栈信息和第i堆栈信息相互联结后的信息作为堆栈差 分信息来生成;(e )判定堆栈差分信息生成部生成的堆栈差分信息和模型取得 部取得的动作模型的背离。


图1是第一实施方式的软件动作模型化装置的结构方框图。
图2是第一实施方式的堆栈信息、堆栈差分信息以及终端信息的例子。
图3是第一实施方式的堆栈信息以及终端信息的例子。
图4是第一实施方式的堆栈信息以及终端信息的例子。
图5是表示第 一 实施方式的软件动作模型化方法的流程图。
图6是详细表示图5的S12的流程图。
图7是第一实施方式的终端信息记录部使用的列表的例子。图8是详细表示图5的S13的流程图。
图9是第一实施方式的软件动作监视装置的结构方框图。
图IO是利用第一实施方式的终端信息中断堆栈信息取得的例子。
图11是利用第一实施方式的终端信息中断堆栈信息取得的例子。
图12是表示第 一 实施方式的软件动作监视方法的流程图。
图13是详细表示图12的步骤S22的流程图。
图14是第二实施方式的软件动作模型化装置以及软件动作监视装置的结 构方框图。
图15是第三实施方式的软件动作监^L装置的结构方框图。 图16是第三实施方式的函数模型的例子。 图17是第三实施方式的函数模型的例子。 图18是第三实施方式的函数模型和废弃命令的例子。 图19是利用第三实施方式的函数模型的动作监视的例子。 图20是第三实施方式的堆栈信息以及终端信息的例子。 图21是使用第三实施方式的终端信息中断堆栈信息取得的例子。 图22是第三实施方式的函数模型的废弃例子。 图23是第三实施方式的废弃策略的例子。 图24是表示第三实施方式的软件监视方法的流程图。 图25是表示第三实施方式的软件监视方法的流程图。
具体实施例方式
然后,参照

本发明的实施方式。在以下附图的记载中,对于相同 或者类似的部分附加相同或者类似的符号。但是,应该注意到附图为示意图。 (第一实施方式) (软件动作模型化装置)
如图1所示,第一实施方式的软件动作模型化装置IOO使用监视对象进程 10、监视对象进程使用的存储空间20、以及任意使用阈值30,生成并输出表 示监视对象进程10的正常动作的模型信息50、终端信息40。在此,所谓"监 视对象进程10"是指应该监视软件动作的软件的执行形式。该监视对象进程 10的监视指示可以通过用户从外部给予,也可以通过软件发送者对软件附加的元信息来给予。
软件动作模型化装置100具备系统调用信息取得部110、堆栈信息记录部 120、堆栈差分信息生成部130、模型生成部140、终端信息记录部150。
系统调用信息取得部110检测监视对象进程IO发行的系统调用,从该时 刻到堆栈信息记录部120记录堆栈信息为止,使监^L对象进程为等待状态。并 且,从系统调用15取得包含系统调用号码等的系统调用信息115。系统调用 信息取得部110可以通过调试工具来实现,但例如通过Linux中安装的ptrace 可以容易地实现。
此外,在第一实施方式的软件动作模型化装置100中,作为特定的事件设 为监视对象进程10发行的系统调用,但本发明并不局限于此。所谓系统调用 以外的特定事件,例如可以举出jmp命令等。例如使用linux中安装的ptrace, 通过进行单步执行,可以取得指令,所以软件动作模型化装置可以检测jmp 命令。
堆栈信息记录部120从监视对象进程使用的存储空间20取得系统调用信 息取得部110检测到系统调用时刻的调用堆栈的状况25。在此,所谓"调用 堆栈的状况"是指堆栈帧的累积状态。根据调用堆栈的状况取得识别堆栈帧的 信息。在此,"识别堆栈帧的信息,,例如可以举出返回地址或Canary等。Canary
在每个堆栈帧中插入的值的意思。Canary在与生成了堆栈帧的时刻比较表示 不同的值时,可以检测为堆栈帧由于堆栈溢出攻击而被破坏了。该Canary当 可以推定攻击者时不构成意思,所以很多时候使用随机数,但在该Canary中 还可以包含可以识別堆栈帧的信息。通过如此设置Canary,如果取得Canary, 则可以识别堆栈帧。
在第一实施方式中,详细说明使用返回地址识别堆栈帧。即,从调用堆栈 的状况中仅提取返回地址,作为堆栈信息进行输出。提取的方式多种多样,在 x86或ARM等调用堆栈中,因为返回地址存在于堆栈帧的最上位(底部的相 反),所以例如使用在寄存器中保存的堆栈指针和基址指针,通过取得紧接基 址指针下方的值来实现。堆栈信息通过堆栈信息记录部120在发行了系统调用 的时刻,按照时间序列顺序进行记录。
14终端信息记录部150从底部开始按照顺序比较由堆栈信息记录部120记录 的第i-l堆栈信息和第i堆栈信息,将调用堆栈的位置和返回地址一致的部分 作为一致部分,将在检测到不同的返回地址之后以后的部分作为不一致部分, 作成一致部分和不一致部分的边界。将位于该不一致部分的端部的返回地址称 为"终端信息"。
图2表示堆栈信息、 一致部分、不一致部分、堆栈差分信息、终端信息的 例子。如图2(A)所示,当把第i-l堆栈信息和第i堆栈信息进行比较时,一 致部分如图2(B)所示,不一致部分如图2(C)所示。分割一致部分和不一 致部分的返回地址为"x",所以如图2(E)所示,终端信息成为x。此外, 所谓在模型化中使用的堆栈差分信息如图2(D)所示,是联结不一致部分的 信息。在生成堆栈差分信息时,进行从堆栈信息中删除一致部分,提取不一致 部分的处理。此时,堆栈信息需要从底部开始进行验证,但在调用堆栈的搜索 中,因为堆栈指针存在于堆栈上位(与底部相反),所以从堆栈上位开始向底 部进行搜索。因此,可以说需要取得在调用堆栈中累积的全部返回地址。但是, 因为该终端信息存在于"应该删除的信息"和"应该提取的信息"的边界上, 所以事先列出该终端信息,在调用堆栈的搜索时使用,由此不需要取得全部的 返回地址即可中断。
终端信息记录部150从堆栈信息记录部120记录的堆栈信息125A中,任 意使用阈值30记录终端信息40。终端信息因为在记录的堆栈信息中存在较多, 所以虽然可以列出全部的终端信息,但也可以在搜索调用堆栈时提取有用的信 息。例如,可以举出以下情况堆栈信息因为在系统调用时生成,所以掌握系 统调用识别符和终端信息的同现关系,记录同现频率高的终端信息。图3(A) 是堆栈信息记录部120记录的堆栈信息的例子。调查系统调用识别符和终端信 息的同现频率,对每个系统调用提取同现频率高的终端信息。图3 (B)是如 此提取的终端信息的例子。
在第一实施方式中,详细说明以下的例子提取在具有任意阈值以上的长 度的期间,从调用堆栈的底部看存在于固定位置的终端信息。综合了以main 函数为代表的程序(或者模块)的函数等存在于调用堆栈的固定位置的期间长, 位于该位置下位的返回地址很多时候为第i堆栈信息和第i-l堆栈信息并且一致。因此,长时间存在于固定位置的返回地址是本来的终端信息的可能性高。 所以,终端信息可以不是存在于一致部分和不一致部分的边界的返回地址,作 为终端信息可以提取在调用堆栈的固定位置存在期间长的返回地址。
图4 (A)是堆栈信息记录部120记录的堆栈信息的例子。在堆栈信息中, main、 X、 a是长时间存在于固定位置的返回地址。如上所述,作为终端信息 提取在固定位置连续存在的返回地址。在此,给予阈值,作为终端信息可以提 取具有阈值以上长度的返回地址。在图4 (B)中,在阔值为3时,作为终端 信息提取main和X。
软件动作模型化装置IOO输出由终端信息记录部150得到的终端信息40, 并且使用终端信息155生成堆栈差分信息。
堆栈差分信息生成部130将堆栈信息、终端信息40、系统调用信息115 作为输入,生成堆栈差分信息135。在堆栈差分信息生成部130中,从第i-l 堆栈信息和第i堆栈信息中提取不一致部分,连接所取得的不一致的部分来生 成堆栈差分信息。
模型生成部140根据堆栈差分信息135生成监视对象进程10的动作模型。 例如,像非专利文献l那样,导出取得堆栈差分信息135的散列值的、系统调 用识别符和堆栈差分信息的相关规则。 (软件动作模型化方法)
然后,参照图5对第一实施方式的软件动作模型化方法进行说明。 首先,系统调用信息取得部UO检测监视对象进程IO发行的系统调用15,
从该时刻开始到堆栈信息记录部120记录堆栈信息为止,使监视对象进程10
为等待状态。并且,从系统调用15中取得包含系统调用号码等的系统调用信
息115 (步骤SIO)。
然后,堆栈信息记录部120从监视对象进程使用的存储空间20取得在系
统调用信息取得部110检测到系统调用的时刻的调用堆栈的状况25 (步骤
Sll)。
然后,终端信息记录部150从堆栈信息记录部120记录的堆栈125A中, 任意地利用阈值30来记录终端信息40(步骤S12)。此外,将在后面对于终端 信息存储部150的动作例子进行详细说明。然后,堆栈差分信息生成部130将堆栈信息125、终端信息40、系统调用 信息115作为输入,生成堆栈差分信息135 (步骤S13)。此外,将在后面对堆 栈差分信息生成部130的动作例子进行说明。
然后,模型生成部140根据堆栈差分信息135生成监视对象进程10的动 作模型(步骤S14)。
然后,参照图6对部分S12的动作例子进行详细it明。
首先,终端信息记录部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 )。 在不是l时,因为连续停止所以该终端信息的连续^:已确定。才艮据已确定的连 续数和终端信息,更新ListB (步骤S220 )。此外,清除该终端信息的连续数(步骤S230)。在步骤S190中为1时,或者在步骤S230之后,使flag为O(步 骤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-l 不一致部分结合。关于结合的方法在例子中表示。图3 (D)表示的堆栈差分 信息在结合图3 (C)的不一致部分时,使从系统调用第i堆栈信息得到的不 一致部分的顺序相反地结合。这是仿照非专利文献l那样进行的,但也可以不 使顺序相反。原因在于,在通过堆栈差分信息上的返回地址和系统调用识别符 的相关规则生成模型的情况下,顺序没有意义。堆栈差分信息与系统调用识别 符一起被输出,并传送给模型生成部140。
此外,在通过终端信息记录部150记录了误差信息时,在图7的步骤S320 中为一致的情况下,可以不立即结束,而通过追加取得误差信息量的返回地址 并进行检查。如此,与本来的终端信息的背离的距离变短,所以可以生成精度 高的模型。
(软件动作监视装置)
然后,使用图9对第一实施方式的、进行监视对象进程10的动作正常异常判定的软件动作监视装置进行说明。
如图9所示,第一实施方式的软件动作监视装置500利用监^L对象进程利 用的存储空间20、终端信息40、模型信息50、软件识别符70,来输出判定结 果。
软件动作监视装置500具备系统调用信息取得部510、堆栈信息取得部 520、终端信息取得部550、堆栈差分信息生成部530、动作监视部540以及模 型取得部560。
软件动作监视装置500当装载软件时,根据软件识别符7和;f莫型信息50, 使取得适合对监视对象进程10进行监视的模型565的模型取得部560启动。
系统调用信息取得部510检测监视对象进程IO发行的系统调用15,从该 时刻开始直到堆栈信息取得部520结束取得堆栈信息为止,使监视对象进程 IO为等待状态。并且,从系统调用15取得系统调用信息。通过利用在Linux 中安装的Ptrace,可以容易地实现系统调用信息取得部510。
终端信息取得部550,根据软件识别符70和终端信息40取得适合于监视 对象进程的终端信息555,并传送给堆栈信息取得部520。在对每个系统调用 识别符记录了终端信息时,还对终端信息取得部550输入系统调用信息515A, 对由监视对象进程10发行的每个系统调用选择终端信息。
堆栈信息取得部520,从监视对象进程利用的存储空间20取得调用堆栈 的状况25,并且利用终端信息555生成堆栈信息525。堆栈信息取得部520 从调用堆栈的状况中取得识别堆栈帧的信息。
在第一实施方式中,详细说明使用多个返回地址识别堆栈帧。即,堆栈信 息取得部520从调用堆栈的状况25取得返回地址。并且,堆栈信息取得部520 利用终端信息555中断取得识别堆栈帧的信息(在第一实施方式中为返回地 址)。
图IO表示利用终端信息中断堆栈信息取得的例子。图10 (A)是终端信 息取得部550取得的终端信息的例子。此外,图10 (B)是某个时刻的调用堆 栈的状况的例子。考虑发行系统调用,产生从图10 (B)上面所示的调用堆栈 的状况迁移到图10 (B)下面表示的调用堆栈的状况的情况。此外,在调用堆 栈的状况中不仅有返回地址,还存在被转交给函数的自变量,但为了说明方便,
19仅表示了返回地址。从图10 (B)上部表示的调用堆栈的状况,从堆栈上位开 始按照顺序取得返回地址。当一边取得一边与终端信息进行比较时,检测与终 端信息一致的x。在该时刻,中断返回地址的取得,作为堆栈信息输出记录的 返回地址(图中s、 r、 p、 q)。从图10 (B)下部表示的调用堆栈的状况也同 样地检测到与终端信息一致的x的时刻,中断返回地址的取得,作为堆栈信息 输出所记录的返回地址(图中的h、 g、 f)。如此得到的堆栈信息由下一个步骤 的堆栈差分信息生成部530结合,从而成为堆栈差分信息(图IO(B)右侧)。 此外,图ll表示利用终端信息中断堆栈信息的取得的其他的例子。图11
(A)是终端信息取得部550取得的终端信息的例子。与图IO不同,与系统 调用识别符成为配对。堆栈信息取得部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-l堆栈信 息和第i堆栈信息中提取不一致部分,联结所取得的不一致部分来生成堆栈差
分信息。
模型取得部560,在将表示了与通过监视对象进程IO发行的特定事件期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型设 为函数模型时,对监视对象进程IO发行的每个系统调用取得函数模型。
动作监视部540判定堆栈差分信息生成部520生成的堆栈差分信息535 和模型取得部560取得的动作模型530的背离,并作为判定结果进行输出。 (软件动作监视方法)
然后,参照图12对第一实施方式的软件动作监视方法进行说明。
首先,系统调用信息取得部510检测监视对象进程IO发行的系统调用15, 在从该时刻开始到堆栈信息取得部520结束堆栈信息的取得为止,使监视对象 进程10为等待状态。而且,从系统调用15取得系统调用信息(步骤S20)。
然后,终端信息取得部550根据软件识别符70和终端信息40取得适合于 监视对象进程的终端信息555,并将其传送给堆栈信息取得部520(步骤S21 )。
然后,堆栈信息取得部530从监视对象进程使用的存储空间20取得调用 堆栈的状况25。并且,使用终端信息555i取得堆栈信息525 (步骤S22)。此 外,将在后面对堆栈差分信息取得部520的动作例子进行详细地说明。
然后,堆栈差分信息生成部530将堆栈信息525和系统调用信息515B作 为输入,生成堆栈差分信息335 (步骤S23)。
另一方面,当装载了软件时,模型取得部560根据软件识别符70和模型 信息50取得适合于对监视对象进程10进行监视的模型565 (步骤S24 )。
然后,动作监^L部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的动作进行模型化时,软件动作监^L装置1000启动 系统调用信息取得部1010、堆栈信息记录部1020、堆栈差分信息生成部1040、 模型生成部1050、终端信息记录部1080。各个构成要素可以与第一实施方式 中记载的软件动作模型化装置100中的系统调用信息取得部110、堆栈信息记 录部120、堆栈差分信息生成部130、模型生成部140、终端信息记录部150 相同。详细情况请参照第一实施方式。
在对监视对象进程10的动作进行监视时,软件动作监视装置1000启动系 统调用取得部IOIO、堆栈信息取得部1030、堆栈差分信息生成部1040、模型 取得部1060、动作监视部1070、终端信息取得部1090。各个构成要素可以与 第一实施方式中记载的软件动作监视装置500中的系统调用信息取得部510、 堆栈信息取得部520、堆栈差分信息生成部530、模型取得部560、动作监视
23部540、终端信息取得部550相同。详细的情况请参照第一实施方式。 (作用以及效果)
通过第二实施方式的软件动作模型化以及软件动作监视装置,除了实现同 一终端上的;f莫型化和监视之外,还可以实现利用终端信息的高效的调用堆栈的 搜索。
(第三实施方式)
图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检测监视对象进程IO发行了系统调用15,直 到动作的验证完成为止使监视对象进程IO停止,将检测信息5115传送给堆栈 信息取得部5120。检测信息5115因为可以用作使堆栈信息取得部5120启动 的触发器,所以例如可以作为具有对堆栈信息取得部5120的动作进行管理的 标志,建立该标志的位。系统调用发行才企测部5110例如可以通过4吏用作为 Linux上的调试工具的pteace来容易地实现。
堆栈信息取得部5120当接收到检测信息5115时,从监视对象进程使用的 存储空间20取得调用堆栈的状况25,并且利用终端信息5165,来生成堆栈信 息5125A。将生成的堆栈信息5125A传送给堆栈差分信息生成部5130。堆栈 信息取得部5120从调用堆栈的状况25中搜索堆栈帧,按顺序取得识别堆栈帧 的堆栈帧信息。所谓堆栈帧信息,例如可以举出返回地址或Canary等。在第三实施方式中详细说明使用返回地址识别堆栈帧。即,堆栈信息取得
方式多种多样,在x86或ARM等的调用堆栈中,因为返回地址存在于堆栈帧 的最上位(底部的相反),所以例如使用在寄存器中保存的堆栈指针和基址指 针,通过取得紧接基址指针下方的值来实现。堆栈信息通过堆栈信息记录部 5120在发行了系统调用的时刻,按照时间序列顺序进行记录。此外,堆栈信 息取得部5120的特征为根据终端信息5156 (以后说明)中断取得返回地址, 将终端到达信息5125B传送给模型废弃部5150。
堆栈差分信息生成部5130将堆栈信息5125作为输入,生成堆栈差分信息, 即p叩信息5135A、 push信息5135B。在堆栈差分信息生成部5130中,从系 统调用第i-l堆栈信息和系统调用第i堆栈信息中提取不一致部分,将得到的 不一致部分作为p叩信息、push信息进行输出。
终端信息取得部5160从调用堆栈的底部开始按顺序比较在终端信息 DB30中记录的第i-l堆栈信息和第i堆栈信息,将调用堆栈的位置和返回地址 一致的部分作为一致部分,将检测到不同的返回地址之后以后的部分作为不一 致部分,取得作为一致部分和不一致部分的边界的终端信息。图2表示堆栈信 息、 一致部分、不一致部分、堆栈差分信息、终端信息的例子。当比较在图2 (A)中表示的堆栈信息时, 一致部分为图2(B),不一致部分为图2 (C)。 因为划分一致部分和不一致部分的返回地址为"x",所以如图2(E)那样, 终端信息成为x。此外,关于在验证中使用的堆栈差分信息,如图2 (D)那 样,在系统调用第i的不一致部分中,当把对系统调用第i-l堆栈信息中存在 的信息附加了终端信息后的信息设为pop信息,而4巴对系统调用第i堆栈信息 中存在的信息附加了终端信息后的信息设为push信息时,是对pop信息、push 信息统称的信息。在生成堆栈差分信息时,进行从堆栈信息中除去一致部分, 提取不一致部分的处理。此时,堆栈信息需要从底部开始进行验证,但在调用 堆栈的搜索中,因为堆栈指针存在于堆栈上位(与底部相反),所以从堆栈上 位向底部进行搜索。因此,可以说需要取得在调用堆栈中累积的全部返回地址。 但是,因为该终端信息存在于"应该删除的信息"和"应该提取的信息"的边 界上,所以事先列出该终端信息,在调用堆栈的搜索时使用,由此不需要取得全部的返回地址即可中断。
图16是函数模型的例子。第三实施方式的函数模型是根据源代码,提取 函数调用的关系来生成的自动机。该自动机是,函数模型是针对每个函数而存
在的,节点是(1)函数的入口 ( Entry )、 (2)函数的出口 (Exit)、以及(3) 函数名称这三个种类中的某一种,将向节点的进线定义为函数调用,此外将从 节点的出线定义为函数返回的自动机。图16(A)是源代码的例子,图16(B) 是对源代码进行分析后作成的函数模型的例子。
此外,因为函数模型只要能进行push、 pop的验证即可,所以函数模型的 表现也可以不是自动机。例如,在针对自动机的各节点,将某个节点作为开始, 将某个节点作为目的点时,可以通过表来表现对是否存在从开始点到目的点的 路径进行分析后的结果。图17是根据图16 (A)表示的源代码生成的、用表 的形式表现的函数模型的例子。"O"表示存在路径,"x"表示不存在路径。
模型取得部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)的(l))的"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-l堆栈信息一 致。因此,长时间存在于固定位置的返回地址是本来的终端信息的可能性高。 所以,终端信息可以不是存在于一致部分和不一致部分的边界的返回地址,可 以将在调用堆栈的固定位置存在期间长的返回地址作为终端信息来提取。 图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-l堆栈信息、第i堆栈信息。设 这些堆栈信息是通过^f全测终端信息"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中确认了一致时,跳出循环,输出表示^f企测到终端信息的终端到达 信息(步骤S5550 ),并结束堆栈信息取得。终端到达信息传达在搜索调用堆 栈时^r测到终端信息的旨意,可以用作使^t型废弃部5150启动的触发器,所 以例如可以作为具有对模型废弃部5150的动作启动进行管理的标志,建立该 标志的位。
然后,参照图25对模型废弃部5160的动作例子进行说明。
首先,模型废弃部5160取得在收到终端到达信息5160时用于理解作为删 除对象的函数模型的废弃策略(步骤S5100)。然后,进行监一见对象进程已结 束的验证、和已收到终端到达信息的验证(分别为步骤S5120、 S5130),在无 论哪个事项都没有检测到时,重复S5110到S5130。
在步骤S5120中检测到事项时,结束模型废弃处理。此外,在步骤S5130 中检测到事项时,取得当前的进程存储器使用量(步骤S5140),验证存储器 使用量是否超过了某个阈值(步骤S5150)。在存储器使用量没有超过阈值时, 返回步骤S5110,在超过了阈值时,按照废弃策略删除模型函数存储部内的函 数模型(步骤S5160),返回步骤S5110。
在第三实施方式中,为了决定删除对象函数模型使用了策略,但在预先已 决定了时不需要策略。此时,可以删除步骤S5100。此外,在第三实施方式中, 根据存储器使用量来判定是否删除,但在不根据存储器使用量时,也可以删除 步骤S5140至步骤S5150。 (作用以及效果)
30当考虑非专利文献1的方法时,由终端信息以后出现的堆栈帧信息表示的 函数从-睑证对象中删除。即,在存储器上可以不存在在该一致部分中存在的函 数的函数模型。因此,第三实施方式的软件动作监视装置在搜索调用堆栈时, 以检测到与终端信息匹配的返回地址为契机,中断调用堆栈的搜索,并且废弃 在緩冲存储器中记录的函数模型。
因此,根据第三实施方式的软件动作监视装置,在软件执行过程中监视监 视对象软件的动作时,可以从存储器中排除不需要的函数模型,因此可以在抑 制时间开销的状况下削减整个监视装置的空间开销。此外,可以从存储器中排 除在存储器中剩余的不需要的函数模型,可以抑制使用存储量。
函数模型废弃有可能废弃在产生下次系统调用时,在验证堆栈差分信息时 所需要的函数才莫型。因此,终端信息取得部通过取得作为终端信息记录了根据 事先取得的堆栈信息的时间序列,在任意的期间从调用堆栈的底部看存在于固 定位置的堆栈帧信息的信息,由此在进行验证时,可以只废弃在某个期间不使 用的函数模型,所以可以降低与基于终端信息的函数模型的废弃相伴的风险。
此外,根据存储器的空闲状况,不废弃函数模型而按照LRU算法等进行
高速緩存可以减轻时间开销。因此,模型废弃部掌握当前的使用存储量,对是 否进行基于终端信息的函数模型的废弃进行切换,由此可以只在需要的情况下 废弃模型函数,因此可以降低风险。
此外,特别是,堆栈帧信息的特征在于其是返回地址,由此无需修正调用 堆栈可以取得识别堆栈帧的信息。
此外,与在某个期间存储函数模型的模型存储(存储器、緩沖存储器等) 连接,模型取得部对取得的函数模型附加识别符来存储在模型存储中,模型废 弃部的特征为对模型存储部传送通过识別符指定要废弃的函数模型的废弃命 令,由此可以确定要废弃的函数模型。
根据本发明,可提供正确地检测攻击,削减软件监视动作中的时间以及空 间开销的软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及 软件动作监视方法。
权利要求
1. 一种软件动作模型化装置,其特征在于,具备堆栈信息记录部,其在软件的执行环境中,在软件执行过程中,可得知在调用堆栈中累积的顺序地取得对发生了特定事件的时刻的调用堆栈中累积的堆栈帧进行识别的堆栈帧信息,并且按照特定事件的发生顺序进行记录;终端信息记录部,其将i设为自然数,从调用堆栈的底部开始按照顺序比较由所述堆栈信息记录部记录的第i-1堆栈信息和第i堆栈信息,将调用堆栈的位置和堆栈帧信息一致的部分作为一致部分,将检测到不同的堆栈帧信息后以后的部分作为不一致部分,记录作为形成一致部分和不一致部分的边界的堆栈帧信息的终端信息;第1堆栈差分信息生成部,其使用所述终端信息记录部记录的终端信息,将从堆栈信息的堆栈上位开始到检测出终端信息为止的信息相互联结的信息生成为堆栈差分信息;以及模型生成部,其根据堆栈差分信息,生成该软件的动作模型。
2. 根据权利要求1所述的软件动作模型化装置,其特征在于, 所述终端信息记录部将所述特定事件的识别符和终端信息的同现频率高的终端信息与所述特定事件的识别符一同进行记录,所述堆栈差分信息生成部,从所述终端信息记录部记录的终端信息中,使 用特定事件的识别符取得用于生成堆栈差分信息的终端信息。
3. 权利要求要求1或2所述的软件动作模型化装置,其特征在于, 所述终端信息记录部将根据所述堆栈信息记录部记录的堆栈信息的时间序列,在任意的期间内从调用堆栈的底部看存在于固定位置的堆栈帧信息作为 终端信息进行记录。
4. 权利要求要求3所述的软件动作模型化装置,其特征在于, 所述终端信息记录部可以掌握从调用堆栈的底部看堆栈帧信息位于固定位置的期间的长度,将所述期间长的堆栈帧信息作为终端信息进行记录。
5. 权利要求要求1~4的任意一项所述的软件动作模型化装置,其特征在于,还具备模型取得部,其取得由所述模型生成部生成的、成为监视对象的软件的动 作模型;终端信息取得部,其取得由所述终端信息记录部记录的终端信息; 堆栈信息取得部,其在检索调用堆栈时,在检索到由所述终端信息取得部传送的终端信息的时刻,中断从调用堆栈取得堆栈帧信息,按照特定事件的发生顺序进行记录;第2堆栈差分信息生成部,将把所述堆栈信息取得部取得的第i-l堆栈信 息和第i堆栈信息相互联结后的信息生成为堆栈差分信息;以及动作监^l部,其判定所述堆栈差分信息生成部生成的所述堆栈差分信息和 所述模型取得部取得的所述动作模型的背离。
6. 权利要求要求1~5的任意一项所述的软件动作模型化装置,其特征在于,所述堆栈帧信息是返回地址。
7. —种软件动作监视装置,其特征在于, 具备模型取得部,在将表示了与通过监视对象软件发行的特定事件期期间执行 的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型设为函数 模型时,对监视对象软件发行的每个特定的事件取得所述函数模型;终端信息取得部,其在软件的执行环境中,取得适合于所述监视对象软件 的终端信息;堆栈信息取得部,其在该软件的执行过程中,可以得知在调用堆栈中累积 的顺序地取得对发生了特定事件的时刻的调用堆栈中累积的堆栈帧进行识别 的堆栈帧信息,并且在搜索调用堆栈时,在检测到由所述终端信息取得部传送 的终端信息的时刻,中断从调用堆栈取得堆栈帧信息,按照特定事件的发生顺 序进行记录;堆栈差分信息生成部,将把所述堆栈信息取得部取得的第i-l堆栈信息和 第i堆栈信息相互联结后的信息生成为堆栈差分信息;以及动作监^L部,其判定所述堆栈差分信息生成部生成的所述堆栈差分信息和 所述模型取得部取得的所述动作模型的背离。
8. 根据权利要求7所述的软件动作监视装置,其特征在于, 还具备废弃由所述模型取得部记录的函数模型的模型废弃部, 所述模型取得部取得事先根据监视对象软件的代码对每个函数生成的、表示函数相互的调用关系的函数模型,所述动作监视部判定由所述堆栈差分信息生成部生成的堆栈差分信息和 所述模型取得部取得的所述函数模型的背离,所述堆栈信息取得部在从调用堆栈中取得堆栈帧信息时,在检测到与终端 信息一致的堆栈帧信息的情况下,中断堆栈帧信息的取得,此时,所述4莫型废 弃部废弃所述模型取得部为了以前的堆栈差分信息的监视而记录的函数模型。
9. 根据权利要求7或8所述的软件动作监视装置,其特征在于, 所述终端信息取J寻部,取得将根据所述堆栈信息记录部记录的堆栈信息的时间序列,在任意的期间从调用堆栈的底部看存在于固定位置的堆栈帧信息作 为终端信息记录了的信息。
10. 根据权利要求9所述的软件动作监视装置,其特征在于, 所述终端信息记录部,取得将从调用堆栈的底部看堆栈帧信息存在于固定位置的期间长的堆栈帧信息作为终端信息记录了的信息。
11. 根据权利要求7 10的任意一项所述的软件动作监视装置,其特征在于,所述模型废弃部掌握系统当前的使用存储量,对是否进行基于终端信息的 函数模型的废弃进行切换。
12. 根据权利要求7~11的任意一项所述的软件动作监视装置,其特征在于,还具备存储函数模型的模型存储部,所述模型取得部对取得的函数模型附加识别符后记录在所述模型存储中, 所述模型废弃部向所述模型存储部传送通过所述识别符指定要废弃的函 数模型的废弃命令。
13. —种软件动作模型化方法,其特征在于,包含以下的步骤在软件的执行环境中,在软件执行过程中,可以得知在调用堆栈中累积的 顺序地取得对发生了特定事件的时刻的调用堆栈中累积的堆栈帧进行识别的 堆栈帧信息,并且按照特定事件的发生顺序进行记录;将i设为自然数,从调用堆栈的底部开始按照顺序比较由所述堆栈信息记 录部记录的第i-l堆栈信息和第i堆栈信息,将调用堆栈的位置和堆栈帧信息 一致的部分作为一致部分,将在检测到不同的堆栈帧信息后以后的部分作为不一致部分,记录作为形成一致部分和不一致部分的边界的堆栈帧信息的终端信台 ,&,使用所述终端信息记录部记录的终端信息,将把从所述堆栈信息的堆栈上 位开始到检测出终端信息为止的信息相互联结后的信息生成为堆栈差分信息; 以及根据堆栈差分信息,生成该软件的动作模型。
14. 一种软件动作监^L方法,其特征在于, 包含以下的步骤取得表示了监视对象软件发行的特定事件与对每个特定的事件在特定的 事件期间执行的函数调用以及任意的函数返回的发行顺序的同现关系的动作模型;在软件的执行环境中,取得适合于所述监视对象软件的终端信息;在该软件的执行过程中,可以得知在调用堆栈中累积的顺序地取得对发生 了特定事件的时刻的调用堆栈中累积的堆栈帧进行识别的堆栈帧信息,并且在 搜索调用堆栈时,在检测到由所述终端信息取得部传送的终端信息的时刻,中 断从调用堆栈取得堆栈帧信息,按照特定事件的发生顺序进行记录;将把所述堆栈信息取得部取得的第i-l堆栈信息和第i堆栈信息相互联结 后的信息生成为堆栈差分信息;判定所述堆栈差分信息生成部生成的所述堆栈差分信息和所述模型取得 部取得的所述动作模型的背离。
全文摘要
软件动作模型化装置(100)具备堆栈信息记录部(120);终端信息记录部(150);使用终端信息记录部(150)记录的终端信息,作为堆栈差分信息生成将从堆栈信息的调用堆栈上位开始到检测到终端信息为止的信息相互联结后的信息的堆栈差分信息生成部(130);以及根据堆栈差分信息,生成该软件的动作模型的模型生成部(140)。
文档编号G06F11/30GK101432754SQ20078001327
公开日2009年5月13日 申请日期2007年4月12日 优先权日2006年4月12日
发明者中山雄大, 加藤和彦, 竹下敦, 金野晃, 铃木胜博, 阿部洋丈 申请人:株式会社Ntt都科摩;国立大学法人筑波大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1