CN1975750B - 软件动作模型化装置和方法以及软件动作监视装置和方法 - Google Patents
软件动作模型化装置和方法以及软件动作监视装置和方法 Download PDFInfo
- Publication number
- CN1975750B CN1975750B CN2006101627824A CN200610162782A CN1975750B CN 1975750 B CN1975750 B CN 1975750B CN 2006101627824 A CN2006101627824 A CN 2006101627824A CN 200610162782 A CN200610162782 A CN 200610162782A CN 1975750 B CN1975750 B CN 1975750B
- Authority
- CN
- China
- Prior art keywords
- function call
- order
- information
- unit
- software
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/28—Error detection; Error correction; Monitoring by checking the correct order of processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/552—Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Testing And Monitoring For Control Systems (AREA)
Abstract
提供减低误检测,同时实现利用有限的资源的处理的高速化、使用存储器容量的抑制的软件动作模型化装置。软件动作模型化装置(100)具备:函数调用顺序取得单元(104),其在软件的执行中,对每一特定的事件,取得或估计在特定的事件之间执行的函数调用的发行顺序;模型生成单元(103),其统计地掌握由函数调用顺序取得单元取得或估计的函数调用的发行顺序和特定的事件之间的共生关系,将所掌握的共生关系作为该软件的动作模型进行记录。
Description
技术领域
本发明涉及软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。
背景技术
PC或工作站、服务器、路由器、移动电话、PDA等所有的计算机受到来自外部或内部的攻击。具有代表性的攻击是以在计算机上执行的软件的脆弱性作为跳板的攻击。攻击者向计算机发送利用了软件的脆弱性的有恶意的代码,夺取执行中的进程的控制,利用该进程的权限进行不正当操作。
为了检测利用了脆弱性的攻击,尤其是为了检测未知的攻击,具有这样一种异常检测***:对程序的正常的动作进行模型化,判定在程序执行中有无背离模型。***调用,是进程向内核委托***上重要的处理时进行的命令,攻击者利用进程委托的***调用,使***进行任意的行动。因此,在监视程序的动作时要验证***调用的正当性。
作为在程序执行中验证***调用的正当性的方法,例如公开了如下攻击对策装置(例如,参照专利文献1。):它具有:***调用表,其将***调用发行源的函数存在于存储器的代码区域这一情况作为正常,输入从程序(任务)发行的***调用请求,输出向正当性检查功能的跳转地址;正当性检查功能单元,其根据发行***调用请求时由OS存储在特定的存储器区域的***调用调出源的返回函数地址,判定***调用请求的正当性并输出判定结果,同时,在判定为不正当的***调用请求时,不受理该***调用请求;攻击对策功能单元,其输入正当性检查功能单元的不正当***调用请求判定结果,并采取对策;***调用,其输入并调出正当性检查功能单元的正当***调用请求判定结果,并执行命令。
另外,为了验证***调用的正当性,公开了利用调用堆栈(在堆栈中堆满的返回地址的列)的攻击检测***(例如,参照非专利文献1。)。在该***中,首先,事先执行程序,从得到的结果学习模型。在程序执行中取得发生***调用时的调用堆栈的状况,生成与发生***调用时的程序计数器一起记录的虚拟堆栈列表,另外,生成当前的虚拟堆栈列表和前一个虚拟堆栈列表的差分信息、即从比较对象的调用堆栈的状况的堆栈最下位开始依次进行比较验证并检测出不同的返回地址后生成其后的返回地址的列(虚拟路径)。根据生成的虚拟堆栈列表和虚拟路径生成Hash表,将该表作为程序的模型来利用。在验证程序时,在程序执行中生成虚拟堆栈列表和虚拟路径,进行与作为模型的Hash表的匹配,若吻合,则允许***调用请求,若不吻合,则判定为异常。
【专利文献1】特开2004-126854号公报
【非专利文献1】H.Feng“Anomaly Detection Using Call StackInformation”,The proc.of IEEE Symposium on Security and Privacy 2003,pp.62.
发明内容
在以Linux为首的OS中,***调用通常经由Wrapper函数发行。由于Wrapper函数存在于代码区域,因此***调用发行源的函数始终存在于代码区域。另外,作为攻击在为主流的的Return-to-libc攻击的情况下,攻击者,使向libc的Return发行任意的***调用,考虑到以上的状况,在根据***调用发行源的函数的地址存在于代码区域就认为是正当的专利文献1中记载的攻击对策装置中,存在无法检测的攻击。由于非专利文献1中记载的攻击检测***,利用在调用堆栈中堆满的返回地址来进行验证,可以说是进行了比专利文献1中记载的攻击对策装置更详细的模型化。因此,可以说是非专利文献1中记载的攻击检测***,比专利文献1中记载的攻击对策装置,更减少漏看攻击的可能性。
然而,由于非专利文献1中记载的攻击检测***,在验证时进行基于Hash的匹配,因此进行模型化时,若不充分进行学习,则在验证时发生了未学习的动作时,例如即使是正常也不得不判定为异常(误检测),误检测就变大了。
另外,为了在移动电话等处理能力较低的计算机中搭载验证动作的***,利用有限的资源的处理的高速化、使用存储器容量的抑制是非常重要的。
因此,本发明的目的在于,鉴于上述问题,提供减少误检测的同时,实现利用有限的资源的处理的高速化、使用存储器容量的抑制的软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。
为了达到上述目的,本发明的第一特征是,一种软件动作模型化装置,其具有:(a)函数调用顺序取得单元,其在软件的执行中,对每一特定的事件,取得或估计在特定的事件之间执行的函数调用的发行顺序;(b)模型生成单元,其统计地掌握由函数调用顺序取得单元取得或者估计的函数调用的发行顺序和特定的事件之间的共生关系,将掌握的共生关系作为该软件的动作模型来记录。
另外,第一特征中的软件动作模型化装置的函数调用顺序取得单元除了函数调用的发行顺序,还可以取得或估计函数返回的发行顺序。
另外,第一特征中的软件动作模型化装置的函数调用顺序取得单元,还可以具备堆栈信息取得单元,其按照已知在堆栈中堆满的顺序那样地取得在发生了特定的事件的时刻的、堆满在进程堆栈中的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为函数调用的发行顺序。
另外,第一特征中的软件动作模型化装置的函数调用顺序取得单元,还可以具备堆栈差分信息生成单元,其将i设为自然数,作为函数调用的发行顺序来生成由堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息之间的差分信息。
另外,第一特征中的软件动作模型化装置的模型生成单元,也可以使用堆栈信息或者差分信息的一部分来统计地掌握共生关系。
另外,第一特征中的软件动作模型化装置的模型生成单元,也可以根据所掌握的共生关系生成相关规则。
另外,第一特征中的软件动作模型化装置的模型生成单元,也可以生成构筑成了将按照函数调用的发行顺序登录的函数调用标识符中、频度高的设置在根节点的附近,且将特定的事件的标识符作为叶节点的树结构的树结构信息,将树结构信息和按照函数调用的发行顺序登录的函数调用标识符的频度信息一起记录,由此生成相关规则。
另外,在第一特征中的软件动作模型化装置中,所谓的特定的事件也可以是***调用。
本发明的第二特征是,一种软件动作模型化方法,其包括如下步骤:(a)在软件的执行中,对每一特定的事件,取得或估计在特定的事件之间执行的函数调用的发行顺序的步骤;(b)统计地掌握由函数调用顺序取得单元取得或者估计的函数调用的发行顺序和特定的事件之间的共生关系,将掌握的共生关系作为该软件的动作模型来记录的步骤。
本发明的第三特征是软件动作监视装置,其具备:(a)动作模型取得单元,其统计地掌握监视对象的软件发行的特定的事件、和对每一特定的事件在特定的事件之间执行的函数调用的发行顺序之间的共生关系,取得表示所掌握的共生关系的动作模型;(b)函数调用顺序取得单元,其在软件的执行中,取得或估计软件所执行的函数调用的发行顺序;(c)动作监视单元,其判定函数调用顺序取得单元取得的函数调用的发行顺序和特定的事件之间的共生关系与动作模型的背离。
另外,第三特征中的软件动作监视装置的函数调用顺序取得单元,还可以具备堆栈信息取得单元,其按照已知在堆栈中堆满的顺序那样地取得在发生了特定的事件的时刻的、在进程堆栈中堆满的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为函数调用的顺序。
另外,第三特征中的软件动作监视装置的函数调用顺序取得单元,还可以具备堆栈差分信息生成单元,其将i设为自然数,作为函数调用的发行顺序来生成由堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息之间的差分信息。
另外,第三特征中的软件动作监视装置的动作模型取得单元所取得的动作模型,也可以表示监视对象的软件所发行的特定的事件和函数调用顺序之间的相关规则。
另外,第三特征中的软件动作监视装置的动作模型取得单元所取得的模型,也可以是如下模型:即,是记载了构筑成了将按照函数调用的发行顺序登录的函数调用标识符中、频度高的设置在根节点的附近,且将特定的事件的标识符作为叶节点的树结构的树结构信息和按照函数调用的发行顺序登录的函数调用标识符的频度顺序信息的模型,函数调用顺序取得单元,按照频度顺序信息重新排列所取得的函数调用顺序,动作监视单元,可以检索重新排列过的函数调用顺序是否存在于数结构信息中。
另外,第三特征中的软件动作监视装置的动作监视单元,也可以在监视监视对象的软件发行的特定的事件和函数调用的发行顺序之间的共生函数和动作模型所表示的相关规则之间的背离时,对将相关规则所表示的信赖度作为参数的标记进行计测,检测标记超过了预先规定的阈值的情况。
另外,第三特征中的软件动作监视装置中,所谓特定的事件也可以是***调用。
另外,第三特征中的软件动作监视装置,还可以具备模型生成单元,其统计地掌握由函数调用顺序取得单元取得或者估计的函数调用的发行顺序和特定的事件之间的共生关系,将掌握的共生关系作为该软件的动作模型来记录。
本发明的第四特征是一种软件动作监视方法,其包括如下步骤:(a)统计地掌握监视对象的软件发行的特定的事件、和对每一特定的事件在特定的事件之间执行的函数调用的发行顺序之间的共生关系,取得表示所掌握的共生关系的动作模型;(b)在软件的执行中,取得或估计软件所执行的函数调用的发行顺序;(c)判定函数调用顺序取得单元取得的函数调用的发行顺序和特定的事件之间的共生关系与动作模型的背离。
根据本发明,可以提供在减少误检测的同时实现利用有限的资源的处理的高速化、使用存储器容量的抑制的软件动作模型化装置、软件动作监视装置、软件动作模型化方法以及软件动作监视方法。
附图说明
图1是第一实施方式的软件动作模型化装置的结构框图。
图2是说明第一实施方式的堆栈信息的概念图。
图3是表示第一实施方式的堆栈信息取得单元的动作的流程图。
图4是第一实施方式的堆栈信息的一例。
图5是说明第一实施方式的堆栈差分信息的概念图。
图6是表示第一实施方式的堆栈差分信息生成单元的动作的流程图。
图7是第一实施方式的堆栈差分信息的一例。
图8是第一实施方式的相关规则的列表的一例(其1)。
图9是第一以及第二实施方式的F-List以及FP-Tree结构的一例。
图10是第一实施方式的相关规则的列表的一例(其2)。
图11是表示第一实施方式的模型生成单元的动作的流程图。
图12是第二实施方式的软件动作监视装置的结构框图。
图13是表示第二实施方式的软件动作监视装置的动作的流程图。
图14是表示第二实施方式的堆栈信息取得单元的动作的流程图。
图15是表示第二实施方式的堆栈差分信息生成单元的动作的流程图。
图16是表示第二实施方式的动作监视单元的动作的流程图(其1)。
图17是表示第二实施方式的动作监视单元的动作的流程图(其2)。
图18是第二实施方式的相关规则的树结构的一例。
图19是第二实施方式的堆栈信息以及堆栈差分信息的一例。
图20是说明以第二实施方式的FP-Tree结构构筑的模型内的搜索方法的图(其1)。
图21是说明以第二实施方式的FP-Tree结构构筑的模型内的搜索方法的图(其2)。
图22是第三实施方式的软件动作监视装置的结构框图。
符号说明
100软件动作模型化装置
101堆栈信息取得单元
102堆栈差分信息生成单元
103模型生成单元
104函数调用顺序取得单元
200软件
201***调用
202堆栈信息
203堆栈差分信息
204动作模型
205***调用号码
206相关信息
300模型记录装置
304动作模型
400软件动作监视装置
401堆栈信息取得单元
402堆栈差分信息生成单元
403动作监视单元
404函数调用顺序取得单元
405动作模型取得单元
501***调用号码
502堆栈信息
503堆栈差分信息
504函数调用顺序
600动作模型
1000软件动作监视装置
1010函数调用顺序取得单元
1020堆栈信息取得单元
1030堆栈差分信息生成单元
1040模型生成单元
1050动作监视单元
1060动作模型取得单元
具体实施方式
下面,参照附图对本发明的实施方式进行说明。在以下的附图的记载中,对于相同或类似的部分标记相同或类似的符号。其中,值得注意的是附图是示意性的图。
<第一实施方式>
(软件动作模型化装置以及软件动作模型化方法)
如图1所示,第一实施方式中的软件动作模型化装置100,具备:函数调用顺序取得单元104,其掌握在发生软件的特定的事件(例如,***调用)时,在特定的事件之间进行的、软件执行的函数调用的发行顺序以及任意的函数返回的发行顺序(以下称为“函数调用顺序”);模型生成单元103,其将函数调用顺序和特定的事件的共生关系作为统计量表示的内容作为软件的动作模型来生成。另外,软件动作模型化装置100将软件200的动作模型化,在模型记录装置300记录该动作模型304。
函数调用顺序取得单元104,具备堆栈信息取得单元101和堆栈差分信息生成单元102。此外,图1所示的函数调用顺序取得单元104的结构是一例,也可以不具备堆栈信息取得单元101。在不具备堆栈信息取得单元101时,使程序单步执行,并挂起函数调用和任意的函数返回就可以。在第一实施方式中,通过采用这样的结构,采用不使程序单步执行、而在发生特定的事件时使其停止的高效率的函数调用顺序的掌握方法。
另外,在具备堆栈信息取得单元101时,可以具备堆栈差分信息生成单元102,也可以不具备。在不具备堆栈差分信息生成单元102时,软件动作模型化装置100,就成为掌握使用了进程堆栈的信息的函数调用的顺序的装置。通过具备堆栈差分信息生成单元102,可以掌握不仅是函数调用,还包括函数返回的函数调用顺序,可以将更详细的动作包含在模型内,因此在第一实施方式中采用该结构。
堆栈信息取得单元101,在发生软件的特定的事件(例如,***调用201)时,取得特定的事件的标识符(例如,***调用号码205)和进程堆栈信息202,将特定的事件的标识符(例如,***调用号码205)和进程堆栈信息202作为软件200的动作模型记录在模型记录装置300中。另外,堆栈信息取得单元101,将特定的事件的标识符(例如,***调用号码205)和堆栈信息202传送给堆栈差分信息生成单元102。此外,特定的事件的标识符、堆栈信息作为动作模型记录、不作为动作模型记录都可以。
这里,***调用201是堆栈信息取得单元101取得的特定的事件的例子,除了***调用以外,还可以举出jmp或branch命令、处理器例外时等等。***调用是用于进行***上重要的处理的命令,因此是重要的监视点。在第一实施方式中,将所有的***调用作为特定的事件。此外,也可以将监视的***调用符合软件的特性地进行选择。例如,在实施execve(启动进程)的软件的情况下,在被攻击者抓住软件的脆弱性时,存在巧妙地发行execve,并开始/bin/sh的可能性。因此,可以作为监视execve的***调用来进行选择。另外,write是写入文件中的***调用,但是恶意的攻击者巧妙地发行write,用于文件的篡改。因此,也可以作为监视write的***调用来进行选择。由于在有限的计算资源中监视,因此只选择execve或write这样的非常重要的监视点来进行监视可以说是非常有效。
所谓堆栈信息202是,在发生***调用时的、在进程调用堆栈中以函数调用堆满的返回地址的集合,是堆栈中堆满的顺序已知的信息。通过使用调试工具(Linux的ptrace等),可以使软件在每次发生***调用时停止,并且可以看到在该时刻的寄存器的值。例如,若看到存储堆栈指针或栈基的指针的寄存器的值,则可以取得各个值所指示的地址。由于在栈基的指针之后的地址中堆满返回地址,因此通过拾取该值可以取得进程堆栈信息202。
图2是取得堆栈信息和***调用的堆栈信息取得单元101的概念图。此外,在图2所示的堆栈例子中,设为向堆栈的下位方向堆满。若将i设为自然数,则在从状态i-1转移到状态i时,发行***调用Ci。取得在该时刻的堆栈信息Si,在Si的最下位追加发行***调用时的程序计时器值Pi。堆栈信息取得单元101,例如以上述的机制取得识别***调用Ci的标识符和堆栈信息Si。
图3是表示堆栈信息取得单元101的动作例的流程图。
堆栈信息取得单元101,通过监视对象软件的结束判定(步骤S100),若软件还没有结束,则挂起软件发行的***调用(步骤S101)。为了挂起可以使用ptrace等。挂起***调用时,读取堆栈信息(步骤S102),生成堆栈信息(步骤S103),记录堆栈信息(步骤S104)。
在步骤S100中,在判定为软件结束时,终止堆栈信息取得单元101的动作。图4表示在这里取得的堆栈信息的例子。在图4的左侧的列中,***调用号码按照发行顺序被记录。在图4的右侧的列中,记录了对应于***调用号码的堆栈信息。即,首先发行***调用第122,在该时刻的在堆栈堆满的返回地址,是从堆栈的下位开始0x80000001、0x80000123、0x80000345的顺序(即,从0x80000345开始进行处理)。接着,发行***调用第4,在该时刻的堆满在堆栈的返回地址,是从堆栈的下位开始0x80000001、0x80000456、0x80000567的顺序。接着,发行***调用第4,在该时刻的堆满在堆栈的返回地址,是从堆栈的下位开始0x80000001、0x80000321、0x80000654的顺序。同样,每次发行***调用时,记录堆栈信息。
堆栈差分信息生成单元102,取得堆栈信息202,将堆栈差分信息203作为软件200的动作模型记录在模型记录单元300中。另外,堆栈差分信息生成单元102,将***调用号码205、堆栈信息202传送给模型生成单元103。此外,堆栈差分信息作为动作模型记录、不作为动作模型记录都可以。
这里,所谓堆栈差分信息203是,表示当前接受到的堆栈信息202和之前接受到的堆栈信息202之间的差分差分的信息。图5是表示堆栈差分信息203的概念的图。堆栈差分信息生成单元102,将i设为自然数,使用堆栈信息Si-1和堆栈信息Si(分别和图2所示的堆栈信息相同),并对它们进行差分比较。即,从堆栈的最上位开始依次进行比较,在到达不同值的位置(在本例中为从最上位开始第3个)时,将其以下作为差分信息来提取。堆栈差分信息Di,是将从堆栈信息Si-1的最下位开始到“2”为止,按照该顺序排列的,堆栈信息Si是将从“3”开始到最下位为止,按照该顺序排列的。从堆栈信息Si-1的最下位开始到“2”为止的信息,在从状态i-1直到状态i之前是返回的函数的排列,另外,从堆栈信息Si的“3”开始到最下位为止的信息,在从状态i-1直到状态i之前是调用的函数的排列。即,堆栈差分信息Di可以说是对在发行***调用Ci之前发生的返回和调用的顺序进行估计的信息。在软件动作监视中,只将***调用的发生追加到模型中的,可以说是存在伪装攻击(Mimicry Attack)的脆弱性,为了解决该问题,有多个将函数调用或返回追加到模型的提案。函数调用或返回与***调用相比,若由OS执行,则是与其他指令(mov或jmp等)相同级别的命令,因此为了正确地取得函数调用或返回,只能分步执行软件。但是,分步执行会成为向软件执行速度的非常大的开销,在移动电话或计算能力低的计算机中不是实用的方法。另一方面,堆栈差分信息是发生***调用时可取得的信息,因此只要在发生***调用时停止那样地执行软件就可以。这与分步执行相比,可以大大削减向执行速度的开销。
图6是表示堆栈差分信息生成单元102的动作例的流程图。堆栈差分信息生成单元102通过堆栈信息结束判定(步骤S200),若还没有结束,则依次读取堆栈信息(步骤S201),将过去的堆栈信息和当前的堆栈信息的差分进行比较(步骤S202),生成堆栈差分信息(步骤S203),并记录堆栈差分信息(步骤S204)。
在步骤S200中判定为结束时,结束堆栈差分信息生成单元102的动作。图7是在堆栈差分信息生成单元102中输入了图4所示的堆栈信息时,由堆栈差分信息生成单元102生成的堆栈差分信息和***调用号码的例子。读入图4所示的第一行和第二行(图6的步骤S201),比较差分(图6的步骤S202)。在进行比较时,从堆栈的下位开始依次(即在图4中为从左开始)进行比较。则可以知道第一行第三列的0x80000345和第二行第三列的0x80000456、相同行的第四列的0x80000567不同。在生成堆栈差分信息(图6的步骤S203)时,过去的堆栈信息是,将从堆栈的上位开始(即在图4中为从右开始)到没有变化的行为止按照该顺序重新排列来提取(图4的第一行的情况下,只有0x80000345),并进行记录(图6的步骤S204)。当前的堆栈信息是,将从堆栈的下位开始第一个发生变化的位置到堆栈的最上位为止,按照该顺序提取(在图4的第二行的情况下为0x80000456、0x80000567),并进行记录。进行该记录时,将当前的***调用号码(图4的第二行的情况下为4)一起进行记录。结果,生成如图7的第二行所示的堆栈差分信息。以下同样,由图4的第二行、第三行生成如到图7的第三行所示的堆栈差分信息。
模型生成单元103接受堆栈差分信息203,将相关信息206作为软件200的动作模型204来记录在模型记录装置300中。
此处,所谓相关信息206是,表示***调用号码205和堆栈差分信息203的共生关系的信息,例如,可以举出N-gram或相关规则等等。在利用N-gram来掌握共生关系时,可以通过利用例如在「“A New Method of N-gram Statisticsfor Large Number of n and Automatic Extraction of Words and Phrases fromLarge Text Data of Japanese”、长尾真著、In proceedings the 15th InternationalConference on Computational Linguistics(1994)pp611-615」中记载的算法来实现。
在第一实施方式中,作为相关信息206,是对作为生成相关规则的情况进行说明。所谓相关规则是,从事物集合求出发生了某项目集合A时的项目B的出现概率P(即,带条件概率),作为整个事物集合中的规则。这里,将项目集合A称为前例,将项目B称为结果,将出现概率P称为信赖度。在本实施方式中,生成从堆栈差分信息203提取前例,将***调用号码205作为结果的相关规则。
如上所述,图7是堆栈差分信息203的例子。左侧的列为***调用号码,右侧的列为对应于***调用号码的堆栈差分信息。若着眼于***调用号码都是4的第二行和第三行,0x80000567作为堆栈差分信息哪一行都存在,因此在将0x80000567作为前例,将4作为结果时,信赖度为100%。此时,如图8所示,作为相关规则的列表,记载0x80000567→4100%。同样,0x80000567和0x80000456的组合作为堆栈差分信息哪一侧都存在,因此在将0x80000567、0x80000456的组合作为前例,将4作为结果时,信赖度为100%,因此记载0x80000567、0x80000456→4100%。前例是堆栈差分信息上的返回地址的组合,为了对所有的组合数导出信赖度,需要进行非常多的处理,但是可以通过使用Apriori或FPGrowth等相关规则导出算法高效率地得到相关规则。
FP-Growth为了实现计算高速化,利用这样的FP-Tree算法:最初读入数据库,将在后面的计算中所需要的项目集合的支持度保存在主存储中。
FP-Tree算法的细节,例如记载在「“Mining frequent patterns withoutcandidate generation”、Han著、In proceedings of STGMOD InternationalConference on Management of Data,pp-12,ACM,2000」中。这里对概念进行说明。FP-tree是只由频出项目构成的树结构数据。为了从数据库构筑FP-Tree,首先提取频出项目。扫描一次数据库,生成通过指示度的值将所提取的频出项目按频度顺序降低那样地重新排列的列表(将该列表设为F-list)。然后,生成具有空标号的树的根(将该树设为T)。
利用这样得到的频出项目和根节点,进行用于构筑FP-tree结构的第二次扫描。具体地说,按照以下顺序构筑FP-tree结构。
事先将当前节点作为根节点。
对于各事务,
(1)提取频出项目,按照F-list重新排列项目(称为项目列表)。利用该项目列表使T成长。
(2)从项目列表依次提取项目,若T上的“当前节点”具有与取出的项目相同的子,则将该子的计数增加1,将当前节点移动到该子。若不是,则重新生成具有计数1的子,将当前节点移动到该子。
(3)反复上述(2)的操作,直到项目列表的最后要素为止。若最后的要素结束了,则变更对象的事务,进行在所有的事务中直到结束处理的(1)的操作。
(4)在所有的事务中结束处理时,对于具有相同名字的节点赋予链路。而且,对于各频出项目ai,生成指示开始的ai的首部表。
利用进行以上的操作来构筑的FP-Tree,挖掘频出模式图。图9表示FP-Tree的构筑的例子。
此处,模型生成单元103,构筑追加了将***调用标识符作为值具有的叶节点的FP-Tree,将该FP-Tree作为程序的动作模型来生成。由于在各节点记载了项目的频度,因此支持度、信赖度的计算也可以容易地进行。生成的模型,和程序的标识符/F-list一起记录。
通过如此构成模型,可以汇集相同的前例,可以生成高效率的模型。
以上方法,采用FP-Tree算法生成了树结构,但是由于只要在根侧设置高频度的项目就可以,因此也可以使用其它算法。
此外,在上述的方法例中,在导出相关规则时,作为前例使用了堆栈差分信息上的所有的返回地址,但是考虑软件执行环境等,也可以不全使用。例如,在处理能力较低的处理器上进行模型化时,通过只提取发行***调用之前的N个,可以减低模型的生成成本。另外,还可以考虑按照***调用的种类改变N的值的情况。另外,例如,考虑Linux Kerne12.4以上的情况时,堆栈差分信息上的返回地址中、最后的返回地址,是基于用来进行***调用的Wrapper函数的返回地址,与***调用的共生关系非常强。若以包含该返回地址的状态生成相关规则,则存在得到非常偏的模型的危险性,即存在作为模型只取得了Wrapper函数和***调用的关系的危险性。因此,在生成相关规则时,考虑将最后的返回地址排除。另外,还考虑提取返回地址进入到某地址空间(例如,程序库被加载的空间)内的情况。
另外,上述的相关规则是利用Apriori或FPGrowth等导出,但是若利用该算法,则不考虑函数调用顺序的顺序信息,但是也可以将函数调用顺序的顺序包含在前例。例如,若着眼于图7所示的堆栈差分信息的第二行和第三行,从左开始第二个0x80000456表示相同的值,***调用都是4。因此,可以生成第二=0x80000456→4100%的规则(参照图10)。这样,通过考虑顺序,可以作为模型来纳入更详细的信息。
在第一实施方式中,将图8所示的相关规则作为软件的动作模型记录在模型记录装置300中。
图11是表示模型生成单元103的动作例的流程图。在第一实施方式中,生成相关规则。模型生成单元103取得堆栈差分信息,通过堆栈差分信息的结束判定(步骤S300),若还没有结束,则依次读入堆栈差分信息(步骤S301)。若在步骤S300中判定为结束,则由此生成相关规则(步骤S302),并进行记录(步骤S303)。在步骤S302中,将各堆栈差分信息和相关的***调用号码的组看成一个事务,从堆栈差分信息提取前例,如图8所示,生成将***调用号码作为结果的相关规则。
(作用及效果)
根据第一实施方式中的软件动作模型化装置以及软件动作模型化方法,可以在软件的执行中,对每一特定的事件,取得或估计在特定的事件之间执行的函数调用顺序,统计地掌握取得或估计的函数调用顺序和特定的事件的共生关系,将掌握的共生关系作为该软件的动作模型记录。
通过这样构成软件动作模型化装置、或者采用软件动作模型化方法,可以进行详细级别的监视,且可将对未学习动作进行统计的判定用的统计量作为动作模型输出。
尤其,相关规则可以将共生关系以较小的数据量表示,因此在轻量的软件动作监视***中可生成有效的模型。对于移动电话等存储装置的容量受限制的终端是有效的。由于逻辑地构成程序,因此函数调用的顺序(或者上下文)是对于程序动作的模型化非常重要的要素。但是,相关规则一般不考虑顺序。因此,本发明的特征在于,模型生成单元在掌握共生关系时还考虑到函数调用的顺序来掌握。通过这样的结构,与不考虑顺序的相关规则相比,可以进行更详细的模型化。
***调用命令或Trap命令,是将***上重要的处理委托给内核时执行的命令,是程序的动作监视上重要的事件。在相关规则中,通过生成将前例作为函数调用顺序、将特定的事件(Trap命令、***调用)作为结果的相关规则,可以输出捕获应进行动作监视的每一事件的特性的模型。
另外,第一实施方式中的软件动作模型化装置的函数调用顺序取得单元还可以具备堆栈信息取得单元,其按已知在堆栈中堆满的顺序那样地取得在发生了特定事件的时刻的、堆满在进程堆栈中的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为函数调用的发行顺序。
通常,若想完全挂起函数调用且掌握顺序,则需要使程序单步执行,但是通过这样的结构,只要在发生特定的事件时使程序停止就可以。例如,在特定的事件为***调用或Trap命令的情况下,若使用调试工具(Linux的ptrace等),则可以在发生该特定的事件时停止程序的动作,掌握该时刻的寄存器的值。由于在寄存器中存储堆栈指针或栈基指针的值,因此通过利用该值可以边理解边取得堆满返回地址的顺序。该返回地址的顺序,表示直到发生特定的事件之前进程发行的函数调用的顺序,通过使用该信息可以对特定的事件之间的函数调用顺序进行估计。在这里所说的估计是掌握函数调用顺序的一部分的意思。在特定的事件之间调用称为A的函数,进行到返回时,在发生特定的事件时的进程堆栈中称为A的函数不作为信息加入。因此就掌握一部分。
另外,第一实施方式中的软件动作模型化装置的函数调用顺序取得单元具备堆栈差分信息生成单元,其将i设为自然数,作为函数调用的发行顺序来生成由堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息的差分信息。
通过这样的结构,可以估计不仅是函数调用,甚至还包含函数返回的函数调用顺序。通过包含函数返回,可以进行详细的模型化。
另外,第一特征中的软件动作模型化装置的模型生成单元,可以使用堆栈信息或差分信息的一部分来统计地掌握共生关系。
通过这样使用一部分,可以减低模型的生成成本。
另外,第一特征中的软件动作模型化装置的模型生成单元,也可以根据所掌握的共生关系生成相关规则。
通过这样生成相关规则,可以实现利用有限的资源的处理的高速化、使用存储器容量的抑制。
另外,除了共生关系,通过将堆栈信息、堆栈差分信息一起作为软件的动作模型进行记录,可以追加在非专利文献1中记载的攻击检测***中利用的动作模型。
另外,第一特征中的软件动作模型化装置的模型生成单元,可以生成构筑了将按照函数调用的发行顺序登录的函数调用标识符、频度高的函数调用标识符设置在根节点附近,将特定的事件的标识符作为叶节点的树结构的树结构信息,将树结构信息和按照函数调用的发行顺序登录的函数调用标识符的频度顺序信息一起记录。因此,可以汇集相同前例,因此可以使模型尺寸较小。
<第二实施方式>
(软件动作监视装置以及软件动作监视方法)
如图12所示,第二实施方式中的软件动作监视装置400,与记录了软件动作模型的模型记录装置300相连,监视软件200的动作,输出监视结果504。软件动作监视装置400具备:函数调用顺序取得单元404,其掌握在发生软件的特定的事件(例如,***调用)时,在特定的事件之间进行的、软件执行的函数调用顺序;动作模型取得单元405,其从模型记录装置300取得对应于软件200的动作模型600;动作监视单元403,其接受由动作模型取得单元405取得的动作模型、***调用号码501以及函数调用顺序504,判定是否背离***调用号码501与函数调用顺序504的动作模型600,输出监视结果504。
函数调用顺序取得单元404,具备:堆栈信息取得单元401,其在每次软件200发行***调用等时取得***调用号码501和在该时刻的堆栈信息502,并生成堆栈信息502;堆栈差分信息生成单元402,其接受***调用号码501和堆栈信息502,将过去和当前的堆栈信息的差分进行比较,生成记录了该差分的堆栈差分信息503。此外,图12所示的函数调用顺序取得单元404的结构是一个例子,也可以不具备堆栈信息取得单元401。在不具备堆栈信息取得单元401时,使程序单步执行,并挂起函数调用和任意的函数返回就可以。在第二实施方式中,通过采用这样的结构,采用不使程序单步执行、在发生特定的事件时使其停止的高效率的函数调用顺序的掌握方法。另外,在具备堆栈信息取得单元401时,可以不具备堆栈差分信息生成单元402。在不具备堆栈差分信息生成单元402时,软件动作监视装置400成为掌握使用了进程堆栈的信息的函数调用的顺序的装置。通过在构成中包含堆栈差分信息生成单元402,还可以掌握不仅是函数调用,还包括函数返回的函数调用顺序,可以监视更详细的动作,因此在第二实施方式中采用该结构。另外,设动作模型600是表示***调用号码和函数调用顺序的共生关系得相关信息206(例如,N-gram或相关规则)。在该动作模型600中可以包含任意的堆栈信息和堆栈差分信息。通过包含堆栈信息、堆栈差分信息,如非专利文献1的方法,可以进行基于匹配的监视。由于相关信息206是统计信息,因此若假设是通过学习得到该相关信息的,则对于学习完的动作,存在判定为异常的可能性。如非专利文献1的方法那样,通过进行匹配,可以完全地排除对于学习完的动作的异常判定。另一方面,相关信息206用于估计未学习动作的判定。
图13是表示软件动作监视装置400的动作例的流程图。软件动作监视装置通过软件的结束判定(步骤S400),若软件还没有结束,则取得堆栈信息(步骤S401),生成堆栈差分信息(步骤S402),进行动作监视(步骤S403)。判定监视结果(步骤S404),在判定为错误时,进行对应错误的处理(步骤S405),返回到步骤S400。在步骤S404中判定为不是错误时,返回到步骤S400。这里,所谓错误处理,例如可以举出结束软件的动作或采取信息转储等等,但是在第二实施方式中,在标准输出仅仅输出错误的种类,结束软件的动作。
图14是表示堆栈信息取得单元401的动作例的流程图。堆栈信息取得单元401,挂起监视对象的软件发行的软件调用(步骤S500),读入在该时刻的堆栈信息(步骤S501),生成堆栈信息,并进行记录(步骤S502)。所谓堆栈信息是,发生***调用时的、在进城堆栈中堆满的返回地址的集合,是按照在堆栈中堆满的顺序排列的信息。在Linux中有称为ptrace的调式工具,而通过利用该工具,可以使软件在每次发生***调用时停止,并且可以看到该时刻的寄存器的值。例如,若看到存储堆栈指针或栈基的指针的寄存器的值,则可以取得各个值所指示的地址。由于在栈基的指针之后的地址中堆满返回地址,因此通过拾取该值可以取得堆栈信息。
图15是表示堆栈差分信息生成单元102的动作例的流程图。堆栈差分信息生成单元102依次读入堆栈信息(步骤S600),将过去的堆栈信息和当前的堆栈信息的差分进行比较(步骤S601),并生成堆栈差分信息(步骤S602)。图7是在向堆栈差分信息生成单元402输入了图4所示的堆栈信息的情况下,由堆栈差分信息生成单元402生成的堆栈差分信息和***调用号码的例子。图4中,读入第一行和第二行(步骤S600),并且比较差分(步骤S601)。在进行比较时从堆栈的下位依次(即,在图4中为从左开始)进行比较。可知第一行第三列的0x80000345和第二行第三列的0x80000456、相同行的第四列的0x80000567不同。在生成堆栈差分信息(步骤S602)时,过去的堆栈信息,从堆栈的上位开始(即在图4中为从右开始)到没有变化的行为止按照该顺序重新排列来提取(图4的第一行的情况下,只有0x80000345),并进行记录。当前的堆栈信息,从堆栈的下位开始第一个发生变化的位置到堆栈的最上位为止按照该顺序提取(在图4的第二行的情况下为0x80000456、0x80000567),并进行记录。进行该记录时,将当前的***调用号码(图4的第二行的情况下为4)一起进行记录。结果,生成如图7的第二行所示的堆栈差分信息。以下,同样由图4的第二行、第三行,生成如图7的第三行所示的堆栈差分信息。
动作模型取得单元405,统计地掌握监视对象的软件发行的特定的事件、和对每一特定的事件在特定的事件之间执行的函数调用顺序之间的共生关系,取得表示所掌握的共生关系的动作模型。
图16是表示动作监视单元403的动作例的流程图。动作监视单元403从模型记录读入适合于监视对象的软件的动作模型(步骤S701)。在第二实施方式中,作为动作模型,采用从堆栈差分信息提取前例、将***调用号码作为结果的相关规则。接着,利用得到的动作模型,验证堆栈差分信息生成单元402所生成的堆栈差分信息中是否存在与相关规则中的前例匹配的信息(步骤S702)。例如,通过对于堆栈差分信息上的返回地址的所有组合进行与相关规则的前例的匹配,可以实现步骤S702。若不匹配,则将ER3(堆栈差分错误)作为监视结果输出。若匹配,则利用匹配的相关规则执行下一个步骤。接着,验证监视对象软件发行的***调用是否与已确认和前例的匹配的相关规则的结果匹配(步骤S703)。在匹配时,结束动作监视单元的处理。这是因为将前例和结果匹配的情况判定为正常。在步骤S703中,在判定为不匹配时,将已确认与前例的匹配的相关规则中所记载的信赖度加在AnomalyScore上(步骤S704)。关于信赖度的加法运算,可以加上已确认与前例的匹配的相关规则中记载的所有信赖度、或者可以加上匹配的返回地址数最多的相关规则中记载的信赖度、或者利用「“The Zero-Frequency Problem:Estimating the Probabilities of novel Events in Adaptive Text Compression”,IanH.Witton著,IEEE Transactions on Information theory,vol.37,No.4,JULY 1991」中记载的Zero Frequency加上发生新事件的概率的倒数。Zero Frequency根据学习时得到的相关信息,估计发生新事件的概率,使用学习时与前例匹配的事务数n和其前例时发生的结果的种类数r,novel event发生概率能够用r/n近似。如果设该概率包含在动作模型中,则若通过步骤S702、步骤S703的判定,前例与结果不匹配时,在步骤S704中,将novel event发生概率的倒数n/r作为Anomaly Score进行加法运算。最后,判定该Anomaly Score是否超过所给出的阈值(步骤S705)。在超过阈值时,将ER4(相关规则错误)作为监视结果输出。在没有超过阈值时,结束动作监视单元的处理。
图17是表示动作监视单元403的其他动作例的流程图。动作监视单元403是利用了非专利文献1的方法的监视单元,可以将学习完的动作不判定为异常那样地进行判定,同时可以统计地估计未学习动作的判定。
设在步骤S701中读入的动作模型中,假定包含***调用号码和堆栈信息和堆栈差分信息和相关信息。首先,验证监视对象的软件发行的***调用是否存在于动作模型中(步骤S703)。由于***调用即使在OS中也是用号码识别,因此利用其机制来进行验证就可以。若不存在,则将ER1(***调用错误)作为监视结果输出。若存在,则验证在发行了用号码识别的***调用的堆栈信息中,是否存在与监视对象的软件发行的***调用的时刻的堆栈信息(堆栈信息取得单元401取得的信息)相同的信息(步骤S707)。若不存在,则将ER2(堆栈错误)作为监视结果输出。若存在,则验证根据在监视对象软件发行的***调用的时刻取得的堆栈信息生成的堆栈差分信息(堆栈差分信息生成单元生成的堆栈差分信息)是否存在于动作模型内(步骤S708)。若存在,则判断为软件的动作正常,结束动作监视单元的处理。若不存在,则进行步骤S702~步骤S705的处理。
此外,在以图9所示的FP-Tree结构构筑模型,且存在F-List时,也可以如下所述地构成动作监视装置。这里,假设相关规则的树结构具有如图8所示的表现。
堆栈信息取得单元401在取得堆满在堆栈的返回地址时(图14的步骤S501),按照F-List对各返回地址赋予等级(rank)信息(参照图19上部)。
堆栈差分信息生成单元402在生成堆栈差分信息后,按照对返回地址赋予等级信息,将堆栈差分信息上的返回地址以上升的顺序重新排列(参照图19下部)。
动作监视单元403利用这样得到的堆栈差分信息,搜索以FP-Tree结构构筑的模型内(图16的步骤S702)。FP-Tree结构是频度高的项目位于根的附近那样地构筑的树,因此通过将堆栈差分信息按照F-List重新排列,可以进行宽度优先搜索(参照图20以及图21)。另外,由于采用了树结构,可以高效率地搜索前例(堆栈差分信息内的返回地址的组合)与共生关系强的***调用。另外,由于在模型的叶附近设置频度低的项目,因此即使在中途省略幅度优先搜索,对精度的影响也低。另外,由于频度高的项目被设置在根的附近,因此会提高超高速缓冲存储器效率。
(作用及效果)
根据第二实施方式中的软件监视装置以及软件监视方法,可以统计地掌握监视对象的软件发行的特定的事件和对每一特定的事件、在特定的事件之间执行的函数调用顺序之间的共生关系,取得表示所掌握的共生关系的动作模型,在软件的执行中,取得或估计软件执行的函数调用的发行顺序,判定函数调用顺序取得单元所取得的函数调用的发行顺序和特定的事件之间的共生关系与动作模型的背离。通过这样的结构,可以统计地验证软件的动作,因此可以进行在非专利文献1中记载的攻击检测***中无法进行的未学习动作的验证,可以减低误检测率。
另外,第二实施方式中的软件动作监视装置的函数调用顺序取得单元,具备堆栈信息取得单元,其按已知在堆栈堆满的顺序那样地取得在发生了特定的事件的时刻的、在进程堆栈中堆满的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为函数调用顺序。
通过这样的结构,可以使程序在发生特定的事件的时刻停止并进行验证。无需使程序单步执行,因此验证速度上升。
另外,第二实施方式中的软件动作监视装置的函数调用顺序取得单元,具备堆栈差分信息生成单元,其将i设为自然数,作为函数调用的发行顺序来生成由堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息之间的差分信息。
通过这样的结构,在发生了特定的事件的时刻使程序停止的方法的前提下,不仅是函数调用的顺序,也可以将函数返回的顺序一起进行动作验证。
另外,第二实施方式中的软件动作监视装置的动作模型取得单元所取得的动作模型,也可以表示监视对象软件发行的特定的事件和函数调用顺序之间的相关规则。
由于相关规则可以将共生关系以较小的数据量表示,因此可以利用对轻量的软件动作监视***有效的模型。对于移动电话等存储装置的容量受限制的终端有效。由于逻辑地构成程序,因此函数调用的顺序(或者上下文)对于程序动作的模型化是非常重要的要素。但是,一般来说相关规则不考虑顺序。因此,模型生成单元,在掌握共生关系时,还可以考虑函数调用的顺序(例如,在进程堆栈中堆满返回地址的顺序)后来掌握。通过这样的结构,可以用比不考虑顺序的相关规则更详细的模型进行监视。
另外,第二实施方式中的软件动作监视装置的动作模型取得单元取得的模型,是记载了下述信息的模型:即构筑了将按照函数调用的发行顺序登录的函数调用标识符中、频度高的设置在根节点附近,且将特定的事件的标识符作为叶节点的树结构的树结构信息;和按照函数调用的发行顺序登录的函数调用标识符的频度顺序信息。函数调用顺序取得单元将所取得的函数调用顺序按照频度顺序信息重新排列,动作监视单元搜索重新排列过的函数调用顺序是否存在于树结构信息中。
因此,可以高效率地搜索前例和共生关系强的结果(***调用等)。另外,越接近模型的叶,越是频度低的项目,因此即使在中途省略搜索,对精度的影响也低。另外,由于频度高的项目位于根附近,因此超高速缓冲存储器效率提高。
另外,第二实施方式中的软件动作监视装置的动作监视单元,在监视监视对象软件发行的特定的事件和函数调用顺序的共生关系与动作模型表示的相关规则的背离时,也可以对将相关规则表示的信赖度作为参数的标记进行计测,检测标记超过预先规定的阈值的情况。
在这里,所谓信赖度是,发生了前例时的结果发生的概率,即条件概率。若利用信赖度,例如,尽管发生了与相关规则中记载的前例一致的动作,也可以求出与记载在相同规则中的结果不一致的概率。将该不一致的概率,可以看作是异常动作发生的概率,因此作为检测异常动作的标记将有效地工作。通过这样的结构,可以将未学习动作的异常性用数值来表示,因此通过进行阈值设定,可以提供具有适合利用场景的检测精度的攻击检测***。
<第三实施方式>
(软件动作监视装置以及软件动作监视方法)
如图22所示,第三实施方式中的软件动作监视装置1000,除了第二实施方式中的软件动作监视装置400以外,还具有模型生成单元1040。
模型生成单元1040,作为软件动作模型204来生成将函数调用顺序和特定的事件的共生关系表示为统计量的模型。
关于函数调用顺序取得单元1010、动作监视单元1050、动作模型取得单元1060,对于与第二实施方式相同的功能,在此省略说明。
软件动作监视装置1000,学习软件200的动作,可以将该动作分成生成模型的模型化状态和利用模型监视软件的动作的监视状态。在模型化状态时,使函数调用顺序取得单元1010和模型生成单元1040动作,在监视状态时,使函数调用顺序取得单元1010和动作监视单元1050动作。另外,函数调用顺序取得单元1010也有模型化状态和监视状态。
函数调用顺序取得单元1010,具备:堆栈信息取得单元1020,其在每次软件200发行***调用等时,取得特定的事件的标识符(***调用的情况下为***调用号码501)和该时刻的堆栈信息502,并生成堆栈信息502;堆栈差分信息生成单元1020,其接受***调用号码501和堆栈信息502,将过去与当前的堆栈信息的差分进行比较,生成记录了该差分的堆栈差分信息503。另外,函数调用顺序取得单元1010的结构是一个例子,也可以不具备堆栈信息取得单元1020。在不具备函数调用顺序取得单元1010时,使程序单步执行,并挂起函数调用和任意的函数返回就可以。在第三实施方式中,通过采用这样的结构,采用不使程序单步执行、而在发生特定的事件时使其停止的高效率的掌握函数调用顺序的方法。此外,在具备堆栈信息取得单元1020时,也可以不具备堆栈差分信息生成单元1020。在不具备堆栈差分信息生成单元1020时,软件动作监视装置成为掌握使用了进程堆栈的信息的函数调用的顺序的装置。通过将堆栈差分信息生成单元1020包含在结构中,可以掌握不仅包括函数调用、还包括函数返回的函数调用顺序,可以监视更详细的动作,因此在第三实施方式中决定采用该结构。
在这里,***调用201是堆栈信息取得单元1020所取得的特定的事件的例子,除了***调用以外,还可以举出jmp或branch命令、处理器例外时等。***调用是用来进行***上重要的处理的命令,因此是重要的监视点。在本实施方式中,将***调用作为特定的事件。
模型化状态时的堆栈信息取得单元的动作例,与图3中说明的动作相同。另外,模型化状态时的堆栈差分信息生成单元的动作例,与图6中说明的动作相同。另外,监视状态时的软件动作监视装置的动作例,与图13中说明的动作相同。另外,监视状态时的堆栈信息取得单元的动作例,与图14中说明的动作相同。另外,监视状态时的堆栈差分信息生成单元的动作例,与图15中说明的动作相同。
模型生成单元1040,只在模型化状态时执行,接受堆栈差分信息503,将相关信息206作为软件200的动作模型204记录在模型记录装置300。
设动作模型204是表示***调用号码和函数调用顺序的共生关系的相关信息206(例如,N-gram或相关规则)。该动作模型204中可以任意包含堆栈信息、堆栈差分信息。通过包含堆栈信息、堆栈差分信息,如非专利文献1的方法那样,可以进行基于匹配的监视。由于相关信息206是统计信息,因此如果做成该相关信息是通过学习得到的信息,则对于学习完的动作存在判断为异常的可能性。如非专利文献1的方法那样,通过进行匹配,可以完全地排除对学习完的动作的异常判断。另一方面,相关信息206用于估计未学习动作的判断。
模型生成单元的动作例与图11中说明的动作相同。
动作监视单元1050只在监视状态时执行,接受特定的事件和函数调用顺序,进一步从模型记录装置300接受对应于软件200的动作模型204,判定是否存在特定的事件和函数调用顺序间的共生关系与动作模型204的背离,并输出监视结果504。
动作监视单元的动作例与图16以及图17中说明的动作相同。
(作用及效果)
另外,第三实施方式中的软件动作监视装置,还具备模型生成单元,其统计地掌握由函数调用顺序取得单元取得或估计的函数调用的发行顺序和特定的事件的共生关系,将所掌握的共生关系作为该软件的动作模型记录。
通常,程序的动作因动作环境而不同。例如,是Linux或Windows(注册商标)等OS环境的不同、IA-32或ARM等CPU的不同。因此,通过如第三实施方式的软件动作监视装置那样地构成装置,可以在相同动作环境下进行模型化和监视。
Claims (15)
1.一种软件动作模型化装置,其特征在于,
具备下述单元:
函数调用顺序取得单元,其在软件的执行中,对每一特定的事件,取得或估计至少包含在特定的事件之间执行的函数调用的发行顺序的函数调用顺序;和
模型生成单元,其统计地掌握由所述函数调用顺序取得单元取得或估计的所述函数调用顺序和所述特定的事件之间的共生关系,将所掌握的共生关系作为该软件的动作模型记录;
所述模型生成单元根据所掌握的共生关系生成相关规则时,生成构筑成了树结构的树结构信息,该树结构将按照所述函数调用顺序登录的函数调用标识符中的、频度高的函数调用标识符设置在根节点附近,且将特定的事件的标识符作为叶节点;通过一起记录所述树结构信息和按照所述函数调用顺序登录的函数调用标识符的频度顺序信息,来生成相关规则。
2.根据权利要求1所述的软件动作模型化装置,其特征在于,
所述函数调用顺序,除了所述函数调用的发行顺序之外,还包含函数返回的发行顺序。
3.根据权利要求1所述的软件动作模型化装置,其特征在于,
所述函数调用顺序取得单元具备堆栈信息取得单元,该堆栈信息取得单元按已知在堆栈中堆满的顺序那样地取得在发生了特定的事件的时刻的、在进程堆栈中堆满的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为所述函数调用顺序。
4.根据权利要求3所述的软件动作模型化装置,其特征在于,
所述函数调用顺序取得单元具备堆栈差分信息生成单元,该堆栈差分信息生成单元将i设为自然数,作为所述函数调用顺序,来生成由所述堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息之间的差分信息。
5.根据权利要求4所述的软件动作模型化装置,其特征在于,
所述模型生成单元,利用所述差分信息的一部分统计地掌握共生关系。
6.根据权利要求3所述的软件动作模型化装置,其特征在于,
所述模型生成单元,利用所述记录的信息的一部分统计地掌握共生关系。
7.根据权利要求1所述的软件动作模型化装置,其特征在于,
所述特定的事件是***调用。
8.一种软件动作模型化方法,其特征在于,
包括下述步骤:
在软件的执行中,对每一特定的事件,取得或估计至少包含在特定的事件之间执行的函数调用的发行顺序的函数调用顺序的步骤;和
统计地掌握由所述取得或者估计步骤取得或者估计的所述函数调用的发行顺序的函数调用顺序和所述特定的事件之间的共生关系,将掌握的共生关系作为该软件的动作模型来记录;
所述进行记录的步骤中,根据所掌握的共生关系生成相关规则时,生成构筑成了树结构的树结构信息,该树结构将按照所述函数调用顺序登录的函数调用标识符中的、频度高的函数调用标识符设置在根节点附近,且将特定的事件的标识符作为叶节点;通过一起记录所述树结构信息和按照所述函数调用顺序登录的函数调用标识符的频度顺序信息,来生成相关规则。
9.一种软件动作监视装置,其特征在于,
具备下述单元:
动作模型取得单元,其统计地掌握监视对象的软件发行的特定的事件、和对每一特定的事件至少包含在特定的事件之间执行的函数调用的发行顺序的函数调用顺序之间的共生关系,取得表示所掌握的共生关系的动作模型;
函数调用顺序取得单元,其在软件的执行中,取得或估计软件所执行的函数调用顺序;和
动作监视单元,其判定所述共生关系与所述动作模型的背离,所述共生关系是所述函数调用顺序取得单元取得的所述函数调用顺序和所述特定的事件之间的共生关系;
生成构筑成了树结构的树结构信息,该树结构将按照所述函数调用顺序登录的函数调用标识符中的、频度高的函数调用标识符设置在根节点附近,且将特定的事件的标识符作为叶节点;通过一起记录所述树结构信息和按照所述函数调用顺序登录的函数调用标识符的频度顺序信息,来生成根据共生关系生成的相关规则。
10.根据权利要求9所述的软件动作监视装置,其特征在于,
所述函数调用顺序取得单元具备堆栈信息取得单元,该堆栈信息取得单元按已知在堆栈中堆满的顺序那样地取得在发生了特定的事件的时刻的、在进程堆栈中堆满的返回地址,并按照特定的事件的发生顺序进行记录,将记录的信息作为所述函数调用顺序。
11.根据权利要求10所述的软件动作监视装置,其特征在于,
所述函数调用顺序取得单元具备堆栈差分信息生成单元,该堆栈差分信息生成单元将i设为自然数,作为所述函数调用顺序来生成由所述堆栈信息取得单元取得的第i-1个堆栈信息和第i个堆栈信息之间的差分信息。
12.根据权利要求9所述的软件动作监视装置,其特征在于,
所述动作监视单元,在监视对象软件发行的特定的事件和函数调用顺序之间的共生关系与所述动作模型所表示的相关规则的背离时,
对将相关规则所表示的信赖度作为参数的标记进行计测;
检测所述标记超过预先规定的阈值的情况。
13.根据权利要求9所述的软件动作监视装置,其特征在于,
所述特定的事件是***调用。
14.根据权利要求9所述的软件动作监视装置,其特征在于,
还具备模型生成单元,其统计地掌握由函数调用顺序取得单元取得或者估计的所述函数调用顺序和特定的事件之间的共生关系,将掌握的共生关系作为该软件的动作模型来记录。
15.一种软件动作监视方法,其特征在于,
包括下述步骤:
统计地掌握监视对象的软件发行的特定的事件、和对每一特定的事件至少包含在特定的事件之间执行的函数调用的发行顺序的函数调用顺序之间的共生关系,取得表示所掌握的共生关系的动作模型的步骤;
在软件的执行中,取得或估计软件所执行的函数调用顺序的步骤;和
判定取得的所述函数调用顺序和所述特定的事件之间的共生关系与所述动作模型的背离的步骤;
生成构筑成了树结构的树结构信息,该树结构将按照所述函数调用顺序登录的函数调用标识符中的、频度高的函数调用标识符设置在根节点附近,且将特定的事件的标识符作为叶节点;通过一起记录所述树结构信息和按照所述函数调用顺序登录的函数调用标识符的频度顺序信息,来生成根据共生关系生成的相关规则。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005-342717 | 2005-11-28 | ||
JP2005342717 | 2005-11-28 | ||
JP2005342717A JP4732874B2 (ja) | 2005-11-28 | 2005-11-28 | ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1975750A CN1975750A (zh) | 2007-06-06 |
CN1975750B true CN1975750B (zh) | 2010-06-16 |
Family
ID=38093510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101627824A Expired - Fee Related CN1975750B (zh) | 2005-11-28 | 2006-11-28 | 软件动作模型化装置和方法以及软件动作监视装置和方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US8015551B2 (zh) |
EP (1) | EP1811381B1 (zh) |
JP (1) | JP4732874B2 (zh) |
CN (1) | CN1975750B (zh) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5081480B2 (ja) * | 2007-03-28 | 2012-11-28 | 株式会社エヌ・ティ・ティ・ドコモ | ソフトウェア挙動モデル化装置、ソフトウェア挙動モデル化方法、ソフトウェア挙動検証装置及びソフトウェア挙動検証方法 |
US8613084B2 (en) * | 2007-09-18 | 2013-12-17 | Mcafee, Inc. | System, method, and computer program product for detecting at least potentially unwanted activity based on execution profile monitoring |
US8464207B2 (en) * | 2007-10-12 | 2013-06-11 | Novell Intellectual Property Holdings, Inc. | System and method for tracking software changes |
US9483645B2 (en) * | 2008-03-05 | 2016-11-01 | Mcafee, Inc. | System, method, and computer program product for identifying unwanted data based on an assembled execution profile of code |
US9256514B2 (en) * | 2009-02-19 | 2016-02-09 | Nvidia Corporation | Debugging and perfomance analysis of applications |
US8484625B2 (en) * | 2009-04-01 | 2013-07-09 | Motorola Mobility Llc | Method and apparatus to vet an executable program using a model |
JP4572259B1 (ja) | 2009-04-27 | 2010-11-04 | 株式会社フォティーンフォティ技術研究所 | 情報機器、プログラム及び不正なプログラムコードの実行防止方法 |
US8302210B2 (en) * | 2009-08-24 | 2012-10-30 | Apple Inc. | System and method for call path enforcement |
US10177934B1 (en) | 2009-09-04 | 2019-01-08 | Amazon Technologies, Inc. | Firmware updates inaccessible to guests |
US9565207B1 (en) | 2009-09-04 | 2017-02-07 | Amazon Technologies, Inc. | Firmware updates from an external channel |
US8214653B1 (en) | 2009-09-04 | 2012-07-03 | Amazon Technologies, Inc. | Secured firmware updates |
US8887144B1 (en) | 2009-09-04 | 2014-11-11 | Amazon Technologies, Inc. | Firmware updates during limited time period |
US8601170B1 (en) | 2009-09-08 | 2013-12-03 | Amazon Technologies, Inc. | Managing firmware update attempts |
US8971538B1 (en) | 2009-09-08 | 2015-03-03 | Amazon Technologies, Inc. | Firmware validation from an external channel |
US8300641B1 (en) | 2009-09-09 | 2012-10-30 | Amazon Technologies, Inc. | Leveraging physical network interface functionality for packet processing |
US8959611B1 (en) | 2009-09-09 | 2015-02-17 | Amazon Technologies, Inc. | Secure packet management for bare metal access |
US8381264B1 (en) | 2009-09-10 | 2013-02-19 | Amazon Technologies, Inc. | Managing hardware reboot and reset in shared environments |
US9189363B2 (en) * | 2010-10-07 | 2015-11-17 | Mcafee, Inc. | System, method, and computer program product for monitoring an execution flow of a function |
TWI419003B (zh) * | 2010-11-12 | 2013-12-11 | Univ Nat Chiao Tung | 自動化分析與分類惡意程式之方法及系統 |
JP5708260B2 (ja) * | 2011-05-30 | 2015-04-30 | 富士通株式会社 | プログラム・モデル検査におけるdbシーケンス・バックトラック制御プログラム、方法、及び装置 |
US8707434B2 (en) | 2011-08-17 | 2014-04-22 | Mcafee, Inc. | System and method for indirect interface monitoring and plumb-lining |
US9027124B2 (en) * | 2011-09-06 | 2015-05-05 | Broadcom Corporation | System for monitoring an operation of a device |
CN103679035B (zh) * | 2012-09-24 | 2016-12-28 | 腾讯科技(深圳)有限公司 | 安全性检测方法与装置 |
US9721120B2 (en) | 2013-05-14 | 2017-08-01 | Apple Inc. | Preventing unauthorized calls to a protected function |
US9477575B2 (en) | 2013-06-12 | 2016-10-25 | Nvidia Corporation | Method and system for implementing a multi-threaded API stream replay |
US9680842B2 (en) * | 2013-08-09 | 2017-06-13 | Verisign, Inc. | Detecting co-occurrence patterns in DNS |
US9876804B2 (en) | 2013-10-20 | 2018-01-23 | Cyber-Ark Software Ltd. | Method and system for detecting unauthorized access to and use of network resources |
US9712548B2 (en) | 2013-10-27 | 2017-07-18 | Cyber-Ark Software Ltd. | Privileged analytics system |
US9497206B2 (en) * | 2014-04-16 | 2016-11-15 | Cyber-Ark Software Ltd. | Anomaly detection in groups of network addresses |
US9602528B2 (en) * | 2014-05-15 | 2017-03-21 | Nec Corporation | Discovering and constraining idle processes |
CN104063661A (zh) * | 2014-06-09 | 2014-09-24 | 来安县新元机电设备设计有限公司 | 一种计算机软件安全防护方法 |
US9565203B2 (en) * | 2014-11-13 | 2017-02-07 | Cyber-Ark Software Ltd. | Systems and methods for detection of anomalous network behavior |
KR20160099160A (ko) * | 2015-02-11 | 2016-08-22 | 한국전자통신연구원 | 명령어 집합의 행위 패턴을 엔-그램 방식으로 모델링하는 방법, 그 방법으로 동작하는 컴퓨팅 장치, 및 그 방법을 컴퓨팅 장치에서 실행하도록 구성되는 기록 매체에 저장된 프로그램 |
US10223536B2 (en) * | 2016-12-29 | 2019-03-05 | Paypal, Inc. | Device monitoring policy |
JP7023807B2 (ja) * | 2018-07-04 | 2022-02-22 | 株式会社東芝 | 管理システム、情報処理装置、設定管理方法、およびプログラム |
CN109446721B (zh) * | 2018-11-16 | 2023-01-24 | 厦门大学 | 基于标识符软件线程执行顺序排列的机床工艺交互算法 |
US11080395B1 (en) | 2018-11-30 | 2021-08-03 | Capsule8, Inc. | Interactive shell event detection |
CN113053493B (zh) * | 2019-12-27 | 2024-05-14 | 无锡祥生医疗科技股份有限公司 | 数据处理平台 |
KR102552728B1 (ko) * | 2021-05-12 | 2023-07-07 | 성균관대학교산학협력단 | 파일 단편화를 고려한 시스템 콜 순서 기반의 i/o 스케줄링 방법 및 이를 수행하는 시스템 |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4525780A (en) * | 1981-05-22 | 1985-06-25 | Data General Corporation | Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information |
JPH0529328A (ja) * | 1991-07-24 | 1993-02-05 | Mitsubishi Electric Corp | 半導体装置及びその製造方法 |
US5603031A (en) * | 1993-07-08 | 1997-02-11 | General Magic, Inc. | System and method for distributed computation based upon the movement, execution, and interaction of processes in a network |
US5628016A (en) * | 1994-06-15 | 1997-05-06 | Borland International, Inc. | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
US5764985A (en) * | 1994-12-13 | 1998-06-09 | Microsoft Corp | Notification mechanism for coordinating software extensions |
US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
JP2850808B2 (ja) * | 1995-10-31 | 1999-01-27 | 日本電気株式会社 | データ処理装置およびデータ処理方法 |
EP0976034B1 (en) * | 1996-01-24 | 2005-10-19 | Sun Microsystems, Inc. | Method and apparatus for stack caching |
US5958004A (en) * | 1997-10-28 | 1999-09-28 | Microsoft Corporation | Disabling and enabling transaction committal in transactional application components |
US5978587A (en) * | 1997-11-13 | 1999-11-02 | Unisys Corp. | Method for propagating source code locations into objects in a compiler |
US5978586A (en) * | 1997-11-26 | 1999-11-02 | Unisys Corp. | Method for tracking changes in source locations in a compiler |
US6230312B1 (en) * | 1998-10-02 | 2001-05-08 | Microsoft Corporation | Automatic detection of per-unit location constraints |
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
JP3513038B2 (ja) * | 1998-12-10 | 2004-03-31 | 富士通株式会社 | 命令フェッチ制御装置 |
US7162741B2 (en) | 2001-07-30 | 2007-01-09 | The Trustees Of Columbia University In The City Of New York | System and methods for intrusion detection with dynamic window sizes |
JP2004126854A (ja) | 2002-10-01 | 2004-04-22 | Mitsubishi Electric Corp | 攻撃対策装置 |
JPWO2004075060A1 (ja) * | 2003-02-21 | 2006-06-01 | 田部井 光 | コンピュータウィルス判断方法 |
JP4547861B2 (ja) | 2003-03-20 | 2010-09-22 | 日本電気株式会社 | 不正アクセス防止システム、不正アクセス防止方法、および不正アクセス防止プログラム |
US7533371B1 (en) * | 2003-09-22 | 2009-05-12 | Microsoft Corporation | User interface for facilitating performance analysis for processing |
US7526757B2 (en) * | 2004-01-14 | 2009-04-28 | International Business Machines Corporation | Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program |
US7496908B2 (en) * | 2004-01-14 | 2009-02-24 | International Business Machines Corporation | Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information |
US7990888B2 (en) * | 2005-03-04 | 2011-08-02 | Cisco Technology, Inc. | System and methods for network reachability detection |
US8694621B2 (en) * | 2005-08-19 | 2014-04-08 | Riverbed Technology, Inc. | Capture, analysis, and visualization of concurrent system and network behavior of an application |
US20080148241A1 (en) * | 2006-10-11 | 2008-06-19 | Scott Thomas Jones | Method and apparatus for profiling heap objects |
-
2005
- 2005-11-28 JP JP2005342717A patent/JP4732874B2/ja not_active Expired - Fee Related
-
2006
- 2006-11-27 US US11/563,449 patent/US8015551B2/en not_active Expired - Fee Related
- 2006-11-27 EP EP06024518.0A patent/EP1811381B1/en not_active Expired - Fee Related
- 2006-11-28 CN CN2006101627824A patent/CN1975750B/zh not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
H.Feng et al..Anomaly Detection Using Call Stack Information.The proc.of IEEE Symposium on Security and Privacy 2003,pp.62.2003,1-14. * |
H.Fengetal..AnomalyDetectionUsingCallStackInformation.Theproc.ofIEEESymposiumonSecurityandPrivacy2003 pp.62.2003 |
Also Published As
Publication number | Publication date |
---|---|
US20070204257A1 (en) | 2007-08-30 |
US8015551B2 (en) | 2011-09-06 |
EP1811381B1 (en) | 2017-08-16 |
EP1811381A2 (en) | 2007-07-25 |
EP1811381A3 (en) | 2010-07-14 |
JP4732874B2 (ja) | 2011-07-27 |
JP2007148818A (ja) | 2007-06-14 |
CN1975750A (zh) | 2007-06-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1975750B (zh) | 软件动作模型化装置和方法以及软件动作监视装置和方法 | |
Hemmati et al. | Achieving scalable model-based testing through test case diversity | |
JP5090661B2 (ja) | ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法 | |
CN101652755B (zh) | 软件行为模型化装置、软件行为模型化方法、软件行为验证装置以及软件行为验证方法 | |
CN111027615B (zh) | 基于机器学习的中间件故障预警方法和*** | |
CN114095273A (zh) | 基于深度学习的互联网漏洞挖掘方法及大数据挖掘*** | |
Chen et al. | Invariants based failure diagnosis in distributed computing systems | |
CN112866292B (zh) | 一种面向多样本组合攻击的攻击行为预测方法和装置 | |
CN101187872A (zh) | 基于行为的程序种类判断方法、装置和程序控制方法、装置 | |
Li et al. | Aga: An accelerated greedy additional algorithm for test case prioritization | |
CN116661954B (zh) | 虚拟机异常预测方法、装置、通信设备及存储介质 | |
JP2006268775A (ja) | ソフトウェア動作モデル化装置及びソフトウェア動作監視装置 | |
CN109255238B (zh) | 终端威胁检测与响应方法及引擎 | |
Murtaza et al. | On the comparison of user space and kernel space traces in identification of software anomalies | |
CN114915446A (zh) | 一种融合先验知识的智能网络安全检测方法 | |
Lee et al. | An investigation of essential topics on software fault-proneness prediction | |
Shilpika et al. | Toward an in-depth analysis of multifidelity high performance computing systems | |
Wei et al. | Improving node connectivity by optimized dual tree-based effective node consolidation | |
He et al. | STEAM: observability-preserving trace sampling | |
CN111327569B (zh) | Web后门检测方法和***、存储计算装置 | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
Bai et al. | Container Anomaly Detection System Based on Improved-iForest and eBPF | |
CN117171013A (zh) | 基于元启发式算法的智能合约测试用例生成方法及装置 | |
Valente | Data quality and dependability of IOT Platform for buildings energy assessment | |
Ye et al. | Dynamic Subgraph Matching via Cost-Model-based Vertex Dominance Embeddings (Technical Report) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100616 Termination date: 20181128 |
|
CF01 | Termination of patent right due to non-payment of annual fee |