WO2017187999A1 - プログラム分析システム、プログラム分析方法、及び、記録媒体 - Google Patents

プログラム分析システム、プログラム分析方法、及び、記録媒体 Download PDF

Info

Publication number
WO2017187999A1
WO2017187999A1 PCT/JP2017/015088 JP2017015088W WO2017187999A1 WO 2017187999 A1 WO2017187999 A1 WO 2017187999A1 JP 2017015088 W JP2017015088 W JP 2017015088W WO 2017187999 A1 WO2017187999 A1 WO 2017187999A1
Authority
WO
WIPO (PCT)
Prior art keywords
code
factor
execution
program
analysis system
Prior art date
Application number
PCT/JP2017/015088
Other languages
English (en)
French (fr)
Inventor
将 川北
Original Assignee
日本電気株式会社
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 日本電気株式会社 filed Critical 日本電気株式会社
Priority to US16/092,803 priority Critical patent/US10891379B2/en
Priority to JP2018514258A priority patent/JP6750674B2/ja
Publication of WO2017187999A1 publication Critical patent/WO2017187999A1/ja
Priority to US17/004,348 priority patent/US11494492B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1408Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Definitions

  • This disclosure relates to a program analysis system that can detect an unauthorized program from the result of analyzing a computer program.
  • malware malware, etc.
  • important facilities infrastructure, etc.
  • Patent Document 1 a set of an attack URL (Universal Resource Locator) where an attack code is arranged and an entrance URL connected to the attack URL is stored as a set of malicious URLs, and the entrance included in the set of malicious URLs
  • An attack URL Universal Resource Locator
  • An entrance URL connected to the attack URL is stored as a set of malicious URLs, and the entrance included in the set of malicious URLs
  • Patent Document 2 by extracting other feature information different from feature information related to a known attack (for example, URL path information) from communication data, and specifying other communication data including the other feature information.
  • a technique for expecting to detect communication data related to an unknown attack is disclosed.
  • attack information IP (Internet Protocol) address related to malware activity, URL, etc.
  • IP Internet Protocol
  • URL Internet Protocol
  • a technique for extracting an area (IP address, URL, etc.) that is highly likely to exist is disclosed.
  • Patent Document 4 discloses a technique related to a malware analysis system that generates a signature of the malware by analyzing a malware sample collected using a virtual machine environment.
  • Patent Document 5 discloses a technique relating to a method for determining whether or not the executable code is malicious code (for example, malware) by emulating the executable code.
  • malicious code for example, malware
  • Patent Document 6 discloses a technology related to a system for creating a test specification using a reverse engineering tool from a specification created based on a source program or a control flow diagram.
  • Patent Document 7 a character string read from input data and a pre-registered character string are classified using segmented characters, and these character strings are classified based on the degree of matching of the segmented character strings. Techniques for matching are disclosed.
  • Japanese Patent No. 5756642 Japanese Patent No. 5655191 Japanese Patent No. 5650617 Special table 2014-519113 gazette JP-T-2006-512667 JP 2001-084136 A Japanese Patent Application Laid-Open No. 2014-026421
  • the technique disclosed in Patent Document 1 is a technique for blocking access to a URL where an attack code such as malware exists, and can analyze whether or not a certain code is an attack code. is not.
  • the technique disclosed in Patent Document 2 is a technique for detecting malware by analyzing communication data related to communication executed by malware, and is not a technique capable of analyzing malware itself.
  • the technique disclosed in Patent Document 3 is a technique for extracting attack information such as IP addresses and URLs related to malware activities, and is not a technique for analyzing malware itself.
  • the technique disclosed in Patent Document 4 is a technique for analyzing the behavior of malware using a VM (Virtual Machine) environment. When the malware that has detected the analysis in the VM environment changes its behavior, the malware may not be analyzed appropriately.
  • VM Virtual Machine
  • Patent Document 5 is a technique for emulating an execution code after predefining a state in which a malicious process is executed. For this reason, there is a possibility that it cannot sufficiently cope with an unknown attack whose activity content cannot be predicted. Note that the techniques disclosed in Patent Document 6 and Patent Document 7 are not related to malware analysis.
  • the technology according to the present disclosure has been conceived in view of the above circumstances. That is, the technology according to the present disclosure has one of its main purposes to provide a program analysis system and the like that can appropriately analyze the contents of a program to be inspected.
  • the program analysis system that is one aspect of the technology according to the present disclosure that can achieve the above-described object is configured as follows. That is, the analysis system includes a factor code holding unit that holds a known factor code, which is data expressed by converting a known executable code into a mathematical model, and success status information that indicates a successful attack by a malicious program.
  • An analysis target abstract code which is data obtained by converting the execution target code to be tested into the above mathematical model, is generated, and stored in the factor code storage unit in the analysis target abstract code. Whether the process of determining whether or not the known factor code is included and the state when the execution of the execution code to be inspected is included in the success status information held in the success status holding unit.
  • a factor search unit that determines whether or not the execution code to be examined is a malicious program by executing at least the process of determining whether or not.
  • a program analysis method that is an aspect of the technology according to the present disclosure generates an analysis target abstract code that is data represented by converting an execution code to be examined into a mathematical model, and the analysis target abstract code includes a known The process of determining whether or not the known factor code, which is data expressed by converting the execution code of the above into the mathematical model, is included, and the state when the execution of the execution code to be inspected is determined by the malicious program Determining whether or not the execution code to be inspected is a malicious program by executing at least a process for determining whether or not it is included in success state information indicating a successful attack state. .
  • the object can also be achieved by a program analysis system having the above configuration, a computer program that implements the program analysis method by a computer, a computer-readable recording medium in which the computer program is stored, and the like.
  • FIG. 1A is a block diagram illustrating a functional configuration of a program analysis system according to the first embodiment of the present disclosure.
  • FIG. 1B is a block diagram illustrating a functional configuration of a modified example of the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 2 is a flowchart illustrating an example of the operation of the factor extraction unit included in the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 3 is a flowchart illustrating an example of the operation of the success state providing unit included in the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 4 is a flowchart illustrating an example of the operation of the factor search unit included in the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 1A is a block diagram illustrating a functional configuration of a program analysis system according to the first embodiment of the present disclosure.
  • FIG. 1B is a block diagram illustrating a functional configuration of a modified example of the program analysis system according to the first embodiment of the present
  • FIG. 5 is a flowchart illustrating an example of the operation of the determination result providing unit included in the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 6 is a flowchart illustrating an example of the operation of the executable file adjustment unit included in the program analysis system according to the first embodiment of the present disclosure.
  • FIG. 7 is an explanatory diagram schematically showing conversion of an instruction sequence into a mapping using a specific example.
  • FIG. 8 is an explanatory diagram schematically showing a method for expressing a constant term in an input vector.
  • FIG. 9 is an explanatory diagram illustrating a specific example of an instruction sequence that can be converted into a linear function.
  • FIG. 10A is an explanatory diagram illustrating a specific example of converting a specific instruction (“mov” instruction) into a mapping.
  • FIG. 10B is an explanatory diagram illustrating a specific example of converting a specific instruction (“lea” instruction) into a mapping.
  • FIG. 10C is an explanatory diagram illustrating a specific example of converting a specific instruction (“push” instruction) into a mapping.
  • FIG. 10D is an explanatory diagram illustrating a specific example of converting a specific instruction (“pop” instruction) into a mapping.
  • FIG. 11 is an explanatory diagram illustrating a specific example in which an instruction including a “Mod R / M” byte is converted into a mapping using a virtual register.
  • FIG. 12 is an explanatory diagram illustrating a specific example of an instruction sequence that can be converted into a non-linear instruction.
  • FIG. 10B is an explanatory diagram illustrating a specific example of converting a specific instruction (“lea” instruction) into a mapping.
  • FIG. 10C is an explanatory diagram illustrating a specific example of converting a specific instruction (“push” instruction) into a
  • FIG. 13 is an explanatory diagram illustrating a specific example of converting a specific instruction (“movzx” instruction, “movsx” instruction) into a nonlinear function.
  • FIG. 14 is an explanatory diagram schematically showing a method of integrating mappings converted from a plurality of instruction sequences by products.
  • FIG. 15 is a flowchart illustrating mapping integration processing by product.
  • FIG. 16 is an explanatory diagram schematically showing calculation processing of a product of continuous linear functions.
  • FIG. 17 is a flowchart illustrating a calculation process of a product of continuous linear functions.
  • FIG. 18 is an explanatory diagram illustrating the integration of mappings (linear functions) converted from successive instruction sequences.
  • FIG. 19 is an explanatory diagram illustrating the integration of mappings (linear functions) converted from successive instruction sequences.
  • FIG. 20 is an explanatory diagram illustrating an example of priorities regarding elements (variables) of the input vector and the output vector.
  • FIG. 21 is an explanatory diagram illustrating normalization of a constant term related to an input vector.
  • FIG. 22 is an explanatory diagram of a specific example of conversion information for associating an instruction sequence with an abstract code.
  • FIG. 23 is an explanatory diagram illustrating a specific example of the factor database according to the first embodiment of the present disclosure.
  • FIG. 24 is an explanatory diagram illustrating a specific example of the success state database according to the first embodiment of the present disclosure.
  • FIG. 25A is an explanatory diagram of a specific example of an execution code to be examined.
  • FIG. 25B is an explanatory diagram illustrating a specific example in which the execution code to be examined illustrated in FIG. 25A is converted into a mathematical model.
  • FIG. 26A is an explanatory diagram illustrating a specific example of the abstract code converted from the execution code illustrated in FIG. 25A.
  • FIG. 26B is an explanatory diagram illustrating a specific example of the factor code decomposed from the abstract code illustrated in FIG. 26A.
  • FIG. 27 is an explanatory diagram of a specific example of a known executable code.
  • FIG. 28A is an explanatory diagram illustrating a specific example of the abstract code converted from the execution code illustrated in FIG.
  • FIG. 28B is an explanatory diagram illustrating a specific example of the factor code decomposed from the abstract code illustrated in FIG. 28A.
  • FIG. 28A is an explanatory diagram illustrating a specific example of the abstract code converted from the execution code illustrated in FIG.
  • FIG. 28B is an explanatory diagram illustrating a specific example of the factor code decom
  • FIG. 29 is an explanatory diagram of a specific example of an execution code obtained by shortening the execution code illustrated in FIG. 25A. It is a block diagram which illustrates functional composition of a program analysis system concerning a 2nd embodiment of this indication. It is a block diagram which illustrates the modification of the program analysis system concerning a 2nd embodiment of this indication.
  • FIG. 32 is a diagram illustrating a configuration of a hardware device capable of realizing the components of the analysis system in each embodiment of the present invention.
  • the malicious program includes a malicious program that executes an attack that uses an unknown vulnerability and a malicious program that executes an attack that uses a known vulnerability.
  • the behavior and structure of malicious programs that use unknown vulnerabilities are often unknown. Even malicious programs that use known vulnerabilities may not have known behavior or structure.
  • a security test for example, a penetration test using an unauthorized program
  • a malicious program using a known vulnerability may be detected by a general security countermeasure method (for example, anti-virus software or an intrusion prevention system).
  • a general security countermeasure method for example, anti-virus software or an intrusion prevention system.
  • a malicious program that uses an unknown vulnerability may be found by, for example, analyzing a program that uses a known vulnerability and searching for other programs that include the constituent elements (or combinations thereof).
  • processing by a malicious program that can be continuously (long-term) active is not easy to distinguish from normal (legitimate) processing executed in the system, and the code size of the malicious program itself is small (the code length is short). )
  • the program analysis system described using the following embodiments analyzes codes such as known vulnerabilities (programs having vulnerabilities), malicious programs, and programs related to normal processing executed by the system, Get the component (may be described as factor code).
  • a program analysis system may be configured, for example, to search for a malicious program using a vulnerability using the analyzed factor codes (including combinations thereof).
  • search processing may include determination processing regarding whether or not a certain program (executable code) is a malicious program.
  • the program analysis system processes a certain malicious program by using the above factor code so as to obtain a test malicious program (for example, a malicious program that can be continuously activated (not easily detected)). May be configured.
  • the program analysis system is configured to reduce the size of the malicious code included in the malicious program by replacing (or combining) at least a part of the malicious program with another factor code. May be.
  • the program analysis system replaces the factor code that constitutes the malicious program to be inspected by taking into account the characteristic that the malicious program that carries out the sustainable activity has a smaller code size than other malicious programs. Reduce size.
  • the program analysis system can generate an executable code that can be applied to an inspection (test) that assumes a case where a malicious program having a relatively small code size has entered. That is, the program analysis system can perform a penetration test using a malicious program having a relatively small code size.
  • the configuration of the program analysis system described in the following embodiments is an exemplification, and the technical scope of the present invention is not limited thereto.
  • the division (for example, division by a functional unit) of the component which comprises the program analysis system in each following embodiment is an example which can implement
  • the implementation of the program analysis system is not limited to the following examples, and various configurations are assumed. That is, the components constituting the program analysis system in each of the following embodiments may be further divided. Further, one or more components constituting the program analysis system in each of the following embodiments may be integrated.
  • the program analysis system described below may be configured using a single device (physical or virtual device), and may be realized using a plurality of separated devices (physical or virtual devices). Also good.
  • the devices may be communicably connected by a wired network, a wireless network, or a communication network (communication line) appropriately combining them.
  • a communication network may be a physical communication network or a virtual communication network.
  • FIG. 1A is a block diagram illustrating a functional configuration of the program analysis system 100 according to this embodiment.
  • the malicious program is malware.
  • the malicious program targeted by the present disclosure may include programs other than malware.
  • the program analysis system 100 includes a vulnerability database 101, a malware database 102, and a system database 103.
  • the program analysis system 100 includes a factor extraction unit 104 and a factor database 105.
  • the program analysis system 100 includes a success state registration unit 106 and a success state database 107.
  • the program analysis system 100 includes a factor search unit 108 and a determination result providing unit 109.
  • the program analysis system 100 may be communicably connected to the output device 110.
  • Vulnerability database 101 can hold (store) a sample of an attack code that is an execution code that executes an attack using the vulnerability.
  • the sample of the attack code may be represented by, for example, one or more instruction sequences in which processing for attacking known vulnerabilities is implemented.
  • the attack code sample may be an executable file containing the attack code.
  • the vulnerability database 101 may hold a sample of an execution code related to a program having a known vulnerability.
  • the vulnerability database 101 may be described as a vulnerability data holding unit (vulnerability data holding means).
  • the malware database 102 can hold known malware specimens.
  • the malware specimen may be, for example, at least a part of the malware execution code or the malware execution code itself.
  • Known malware specimens may be collected in any suitable manner, including well-known methods.
  • the configuration capable of realizing the malware database 102 is not particularly limited.
  • the malware database 102 may be described as an unauthorized program data holding unit (an unauthorized program data holding unit).
  • the system database 103 can hold specimens related to an operating system (OS) and applications used in a normally operating system.
  • the sample held in the system database 103 may be, for example, a library or execution file that constitutes an OS, or a library or execution file that constitutes an application.
  • the system database 103 may be described as a system data holding unit (system data holding unit).
  • the factor extraction unit 104 can execute a process of extracting a factor code (described later) from the samples acquired from the vulnerability database 101, the malware database 102, and the system database 103.
  • the factor extraction unit 104 (factor extraction means) registers the extracted factor code in the factor database 105.
  • the factor extraction unit 104 may associate the execution code of the sample from which the factor code is extracted with the factor code and register them in the factor database 105.
  • the factor extraction unit 104 associates, for example, a factor code with information that can specify a database (the vulnerability database 101, the malware database 102, and the system database 103) that holds the sample code from which the factor code is extracted. Thus, it may be registered in the factor database 105. Specific processing of the factor extraction unit 104 will be described later.
  • the factor database 105 can hold the factor code extracted by the factor extracting unit 104.
  • the factor database 105 may be described as a factor code holding unit (factor code holding means).
  • the factor code held in the factor database 105 may be described as a known factor code.
  • the success state registration unit 106 represents, for example, a state in which an attack on an attack target (an information processing apparatus such as a computer or an information processing system including the information processing apparatus) has succeeded (hereinafter may be referred to as “success state”).
  • a function of registering data in the success state database 107 can be provided.
  • the user of the program analysis system 100 uses the success state registration unit 106 to indicate the state (value) of a variable indicating a situation in which an attack related to the attack target is successful (for example, a situation in which the control of the computer has been taken away by the attack program).
  • the state of the variable may represent the state of a register or a specific memory area, for example.
  • the state of the variable may represent the state of various files, a registry, or the like, for example.
  • the success status database 107 can hold data representing the success status registered by the success status registration unit 106.
  • the success state database 107 may be described as a success state holding unit (success state holding means).
  • the factor search unit 108 converts the execution file 111 (described later) into an abstract code (described later).
  • the factor search unit 108 can execute processing for confirming whether or not the factor code (known factor code) held in the factor database 105 is included in the converted abstract code.
  • the factor search part 108 can perform the process which determines whether unauthorized files, such as malware, are contained in an execution file based on the result of the said process.
  • the abstract code converted from the execution file 111 may be referred to as “analysis target abstract code”.
  • the execution file 111 is a file on which an inspection is performed as to whether or not an illegal program such as malware is included.
  • the execution file 111 is not registered in any of the vulnerability database 101, the malware database 102, and the system database 103, and is input to the program analysis system 100.
  • the execution file 111 is not limited to an executable file, and may be a library file or the like.
  • the determination result providing unit 109 can execute processing for generating information (result information) indicating the presence or absence of vulnerability according to the determination result in the factor search unit 108. Such result information may be represented by characters (text) or a chart.
  • the determination result providing unit 109 can provide result information to the output device 110.
  • the output device 110 can output the result information provided from the determination result providing unit 109.
  • the method by which the output device 110 outputs the result information is not particularly limited and can be selected as appropriate.
  • the output device 110 may display the result information using various display devices, may output the result information to a file, or may transmit the result information to another device.
  • the configuration capable of realizing the above databases is not particularly limited.
  • Each of the above databases may be realized using, for example, various database software, or may be realized using a file in a file system.
  • the program analysis system 100 may include an executable file adjustment unit 112 as illustrated in FIG. 1B as a modification.
  • the execution file adjustment unit 112 (execution file adjustment means) can execute processing for confirming whether or not the size of the execution file 111 can be reduced (shortened).
  • the execution file adjustment unit 112 can execute a process for generating an output file 113 that is smaller in size than the execution file 111 and that can execute the same process as the execution file 111. Specific processing of the executable file adjustment unit 112 will be described later.
  • the output file 113 is an execution file that is smaller in size than the execution file 111 and can execute the same processing as the execution file 111.
  • the output file 113 may be an execution file in which a part of the execution file 111 is replaced with another code.
  • a malicious program such as malware includes a sequence of instructions for executing a malicious process.
  • a program that may be attacked by malware or the like may include an instruction sequence corresponding to a vulnerable executable code.
  • the program analysis system 100 converts (abstracts) the instruction sequence included in the execution code into a mapping that is a mathematical model, and expresses the processing by the series of instruction sequences as a composition of the mapping. Thereby, the program analysis system 100 analyzes the execution code using a mathematical model obtained by converting a certain execution code (for example, determination as to whether or not the code is an attack code, determination as to whether or not the code is vulnerable, Determination of similarity, determination of possibility of code replacement, etc.).
  • the state of the system for example, a computer
  • the mathematical model of a regular execution code is “A”
  • the attack code is expressed as “B”. It is assumed that the system state “S n ” includes the states of registers, memories, storage media, and the like included in the system.
  • the state transition of the system when the regular execution code is executed is represented by the following expression, for example.
  • “S n ” is considered to be an input related to the mathematical model “A”
  • “S n + 1 ” is considered to be an output related to the mathematical model “A”.
  • the state transition of the system when the attack code is executed can be expressed by the following equation, for example.
  • the mathematical model “B” representing the attack code is a combination of the mathematical model “A” representing the normal execution code and the difference “C diff ”.
  • the mathematical model “A” so as to reduce the difference "C diff”
  • the difference “C diff ” is considered to be a characteristic peculiar to the attack code
  • the execution code converted into the mathematical model corresponding to the difference “C diff ” may be an attack code. It is done.
  • the program analysis system 100 (in particular, the factor extraction unit 104, the factor search unit 108, and the execution file adjustment unit 112) is a mathematical model for the instruction sequence included in the execution code. Convert to a composite of mappings (functions that represent mappings).
  • the program analysis system 100 arranges an output vector (described later) on the left side of a function representing a mapping converted from a certain instruction sequence, and an input vector (described later) at the end of the right side.
  • the input vector is treated as an argument to the function representing the mapping.
  • the instruction sequences included in the execution code 701 are converted into mappings “f 1 ” to “f 5 ”, respectively.
  • the program analysis system 100 can convert an instruction included in an execution code into a mapping that handles the state of a register, a memory (memory area), and the like as an argument and a return value. In this case, the number of mappings may be one or more for one command.
  • the program analysis system 100 holds, for example, conversion information (702 in FIG. 7) that associates a certain instruction sequence with a map to which the instruction sequence is converted, and converts the instruction sequence into a map using the conversion information. May be.
  • conversion information may be, for example, dictionary data that associates an instruction sequence with a mapping.
  • V in illustrated in FIG. 7 is an input vector related to the mapping converted from the instruction sequence.
  • V out is an output vector related to the mapping converted from the instruction sequence.
  • variable vectors each represented by a variable vector including one or more elements of “real register”, “virtual register”, and “memory reference”.
  • elements of a variable vector that is, elements of an input vector and an output vector
  • variables may be simply referred to as “variables”.
  • the real register represents, for example, a register mounted on an arithmetic device (CPU: Central Processing Unit) that constitutes an information processing apparatus in which malware or the like is executed.
  • a register name may be associated with the real register.
  • the real register may be a general purpose register (GPR: General Purpose Register).
  • GPR General Purpose Register
  • a specific example of a variable vector including a real register may be expressed as the following expression, for example.
  • the virtual register is a virtual register introduced for the convenience of calculation in the program analysis system 100. Such a virtual register may not be mounted on an actual CPU. A register name representing the virtual register may be associated with the virtual register.
  • the memory reference is an element representing the content stored in a memory (for example, a main memory) constituting an information processing apparatus in which malware or the like is executed.
  • the element of the memory reference represents the contents of the address (memory area address) pointed to by the element.
  • a memory reference has an element and an address width.
  • the element of the memory reference may be expressed in a form surrounded by square brackets “[” and “]”, for example, as in the following formula.
  • the number of bits representing the address width (for example, “ref8”, “ref16”, “ref32”, etc.) may be associated with the memory reference element.
  • a portion surrounded by square brackets (“brackets”) “[”, “]” represents an address of the memory to be referred to.
  • a part surrounded by square brackets (brackets) “[”, “]” may be referred to as an “address part”.
  • a constant term may be included in the elements of the variable vector.
  • the constant term is an element that represents a real constant.
  • the constant term may be represented using a vector representation of a homogeneous coordinate system used in the field of three-dimensional graphics, for example, as illustrated in FIG.
  • the constant term may appear only in the input vector.
  • a value other than “1” may be set in the constant term in the process of integrating mapping by product operation (described later).
  • All elements (variables) included in the variable vector may be associated with a subscript indicating the number of times the element has been changed.
  • an “n” th (“n” is a natural number) mapping is assumed.
  • “n ⁇ 1” is associated with the subscript of the element of the input vector changed by the “n” -th mapping
  • the element of the output vector changed by the “n” -th mapping The subscript may be associated with “n”.
  • the subscript of the element (address part) in square brackets for example, “ 2 ” in “vreg 2”
  • the subscript of the memory reference itself for example, “[Vreg 2 ] ref16,1 ” ”1”
  • the program analysis system 100 converts an instruction sequence included in the execution code into one of a linear function, a nonlinear function, and an external function.
  • the linear function holds the transformation matrix.
  • a product of the transformation matrix and the input vector is treated as an output vector.
  • a linear function may be represented by a single transformation matrix. That is, when an input vector for an instruction can be converted to an output vector using a conversion matrix, the instruction is converted into a linear function. A specific example of the transformation matrix will be described later.
  • the non-linear function holds an identifier indicating the type of the function and information indicating processing (function entity) by the function.
  • the nonlinear function represents, for example, a mapping that is difficult to represent by a simple transformation matrix.
  • the nonlinear function may not include a transformation matrix.
  • Information representing processing by a function may be expressed by a lambda expression. In this case, if an input vector is given as an argument to the lambda expression, an output vector is obtained. A specific example of the nonlinear function will be described later.
  • the external function holds an identifier indicating the type of function.
  • the external function represents a function that operates outside the environment (system) in which the execution code is executed, such as a system call.
  • the external function may be, for example, a system call or a library function defined outside the execution code to be analyzed.
  • the program analysis system 100 holds conversion information (for example, dictionary data configured using a table, a map, or the like) that associates an instruction sequence included in an execution code with a mapping (a function that represents a mapping described later). May be.
  • conversion information may include, for example, one or more combinations of a certain instruction sequence and a mapping (the above functions) to which the instruction sequence is converted.
  • the combination included in the conversion information may be, for example, a combination of one command (for example, “mov” command) and a mapping (for example, a conversion matrix representing a linear mapping) to which the command is converted.
  • the combination included in the conversion information may be a combination of an instruction sequence including a plurality of instructions and a map to which the instruction sequence is converted.
  • the program analysis system 100 may be provided with the appropriate conversion information according to the architecture of the computer on which the execution code to be analyzed is executed. Without being limited to the above, the program analysis system 100 may be implemented in a state in which a correspondence relationship between a certain instruction sequence and a mapping into which the instruction sequence is converted is incorporated in advance.
  • the program analysis system 100 can convert, for example, the instructions illustrated in FIG. 9 among the instructions included in the execution code into a linear function.
  • the instruction converted into the linear function is not limited to the instruction illustrated in FIG. 9, and may be set as appropriate in the program analysis system 100.
  • a combination of the command illustrated in FIG. 9 and a linear function to which the command is converted may be set in the conversion information.
  • a specific example will be described.
  • FIG. 10A conversion of the instruction sequence “mov eax ecx” into a mathematical model will be described (FIG. 10A).
  • the real register “ecx” is substituted (transferred) into the real register “eax”.
  • the real register “ecx” of the input vector is assigned (transferred) to the real register “eax” of the output vector.
  • Other elements included in the output vector are not changed from the input vector.
  • the instruction sequence “mov eax ecx” can be converted into a mapping using a linear function including a single transformation matrix “T mov (eax, ecx)” illustrated in FIG. 10A. is there.
  • FIG. 10B conversion of the instruction sequence “lea eax [ecx]” into a mathematical model will be described (FIG. 10B).
  • the address of the memory reference “[ecx]” is assigned (transferred) to the real register “eax”.
  • the address of the input vector memory reference “[ecx]” is assigned (transferred) to the real register “eax” of the output vector.
  • Other elements included in the output vector are not changed from the input vector.
  • the instruction sequence “lea eax [ecx]” can be converted into a mapping using a linear function including a single transformation matrix “T lea (eax, [ecx])”. .
  • the element of the conversion matrix in which the product operation is performed on the element of the input vector that is assigned (transferred) to the element of the output vector is A non-zero (“0”) element is set.
  • Other elements of the transformation matrix may be set to zero (“0”) elements.
  • FIG. 10C conversion of an instruction sequence “push C” (“C” is a constant) into a mathematical model
  • the stack pointer (“esp”) is decremented (for example, 4 bytes are subtracted), and “C” is stored at the top of the stack. That is, the constant C is stored at the address (the top of the stack pointed to by the stack pointer) referred to by the memory reference “[esp]” of the output vector.
  • the stack pointer “esp” of the output vector is decremented from the stack pointer of the input vector. Other elements included in the output vector are not changed from the input vector.
  • the instruction sequence “push C” can be converted into a mapping using a linear function including a single conversion matrix “T push (C)”.
  • FIG. 10D conversion of the instruction sequence “pop eax” into a mathematical model will be described (FIG. 10D).
  • the content of the address pointed to by the stack pointer “[esp]” of the input vector is stored in the real register “eax” of the output vector.
  • the stack pointer “esp” of the output vector is incremented (for example, 4 bytes are added).
  • the instruction sequence “pop eax” can be converted into a mapping using a linear function including a single conversion matrix “T pop (eax)”.
  • FIG. 11 The specific example shown in FIG. 11 is an example in which the instruction sequence “mov word ptr [eax * 2 + ebx + 4], 1000” is converted into a mathematical model.
  • a portion including “Mod R / M” address calculation
  • a virtual register (“vreg 1 ”) ((A) in FIG. 11). That is, the result of the address calculation represented by “[eax * 2 + ebx + 4]” is stored in the virtual register (“vreg 1 ”).
  • “T 1 ” in FIG. 11 is a conversion matrix related to the address calculation.
  • the memory reference indicated by the virtual register introduced as described above is expressed as a mathematical model ((B) of FIG. 11).
  • the immediate value “1000” is stored in the memory area referred to by the virtual register.
  • “T 2 ” in FIG. 11 is a transformation matrix representing substitution (transfer) of an immediate value for a memory area referred to by a virtual register.
  • the mathematical model (“T”) converted by the instruction including “Mod R / M” illustrated in FIG. 11 is expressed as a product of two conversion matrices (“T 1 ” and “T 2 ”). ((C) of FIG. 11).
  • a combination of the instruction (and an instruction sequence including the instruction) and a linear function to which the instruction is converted may be set in advance in the conversion information.
  • the program analysis system 100 can convert, for example, the instruction illustrated in FIG. 9 (and an instruction sequence including the instruction) into a linear function.
  • the program analysis system 100 can convert, for example, the instructions illustrated in FIG. 12 into a nonlinear function among the instructions included in the execution code.
  • a combination of the command illustrated in FIG. 12 and a linear function to which the command is converted may be set in the conversion information.
  • the instruction converted into the nonlinear function is not limited to the instruction illustrated in FIG. 12, and may be set as appropriate in the program analysis system 100.
  • the instruction sequence “movsx eax, byte ptr [bl]” (load (transfer) instruction with sign extension) is also converted into a non-linear function that accepts an input variable and a bit width as arguments (see FIG. 13 (B) part).
  • the nonlinear function “Fmovsx” in FIG. 13B may be implemented as shown in the following equation, for example, where the input variable is “x” and the bit width is “b”.
  • “F bt (x, b)” is a non-linear function representing the “bt” instruction.
  • a combination of the instruction (and an instruction sequence including the instruction) and a nonlinear function to which the instruction is converted may be set in advance in the conversion information.
  • the program analysis system 100 can convert, for example, the instruction illustrated in FIG. 12 (and an instruction sequence including the instruction) into a nonlinear function.
  • mapping integration processing by the program analysis system 100 will be described.
  • the program analysis system 100 uses a mathematical model that uses the mappings “T 1 ” to “T 10 ” for each command sequence. Convert to
  • the program analysis system 100 integrates mapping by product calculation processing. As a result, the number of mappings used to represent the instruction sequence is reduced.
  • the program analysis system 100 can express the instruction sequence by combining the mappings, for example, by combining the minimum mappings.
  • mapping integration processing by product calculation will be described with reference to a flowchart illustrated in FIG. 15. The following processing may be executed by the factor extraction unit 104, the factor search unit 108, the execution file adjustment unit 112, etc. included in the program analysis system 100.
  • the program analysis system 100 calculates a product of continuous linear functions (step S1501).
  • the program analysis system 100 calculates the product of the continuous nonlinear function and another function (step S1502). If there is another function that can calculate the product (YES in step S1503), program analysis system 100 returns to step S1501 and continues the process. If there is no other function that can calculate the product, the program analysis system 100 normalizes the input / output vector (step S1504).
  • step S1501 the processing in step S1501 will be described with reference to FIGS.
  • the program analysis system 100 calculates a product of them.
  • the program analysis system 100 integrates the two maps into one map “T”.
  • the variable vector “v 1 ” is an output vector of the linear function “T 1 ” and an input vector of the linear function “T 2 ”. Therefore, the program analysis system 100 sets the variable vector “v 1 ” so that the types and positions of elements included in the output vector of the linear function “T 1 ” and the input vector of the linear function “T 2 ” are aligned. Adjust “”. Further, the dimensions of the linear functions “T 1 ” and “T 2 ” and the variable vectors “v 0 ” and “v 2 ” are expanded in accordance with the variable vector “v 1 ”. Specifically, the rows and columns of the linear functions (“T 1 ”, “T 2 ”) are expanded so as to match the types and positions of the variables (elements) included in the variable vector “v 1 ”. Similarly, the rows of the variable vectors “v 0 ” and “v 2 ” are expanded.
  • the processing by the program analysis system 100 may be referred to as matrix expansion processing (step S1701).
  • the program analysis system 100 attaches (associates) a subscript to each element (variable) of the input vector and the output vector.
  • “n” is attached as a subscript to an element included in the output vector of the mathematical model converted from the instruction sequence of “n” (“n” is a natural number) line.
  • An element included in the input vector of the mathematical model converted from the instruction sequence of the “n” (“n” is a natural number) row is attached with “n ⁇ 1” as a subscript.
  • the address part of the memory reference the part enclosed in square brackets “[”, “]”
  • the address part of the input vector and the address part of the output part are the same. May be.
  • the above processing may be described as variable subscript attachment processing.
  • the program analysis system 100 may associate data representing a subscript as additional data with data representing each element of the input vector and the output vector.
  • an appropriate method such as a method using a table, a structure, or a pointer may be selected.
  • the program analysis system 100 converts a set of elements (variables) and subscripts included in an output vector of a mathematical model converted from a certain instruction into an output vector of a mathematical model converted from an instruction subsequent to the instruction. May be included.
  • the element “a i ” (variable “a” and its subscript “i”) are added to the output vector “v i ” of the mathematical model converted from the “i” (“i” is a natural number) instruction.
  • the program analysis system 100 may include the element (variable) “a i ” in the output vector of the mathematical model converted from the “i + 1” th and subsequent instructions.
  • the above processing may be referred to as “variable propagation processing”.
  • the output vector of the first row (“pop edx”) of the instruction sequence 1801 includes elements “edx” and “esp”, and the second row ( The input vector of “add ecx edx”) includes elements “ecx” and “edx”.
  • the program analysis system 100 adjusts the variable vector “v 1 ” to include the elements “ecx”, “edx”, and “esp”.
  • the program analysis system 100 includes rows and columns of mathematical models (transformation matrices) “T 1 ” and “T 2 ” converted from each instruction sequence in accordance with the types and positions of elements included in the variable vector “v 1 ”. And extend.
  • the program analysis system 100 attaches subscripts to the input vectors and output vectors of the mathematical models (transformation matrices) “T 1 ” and “T 2 ”.
  • the program analysis system 100 calculates the product of the mathematical model (conversion matrix) “T 1 ” and “T 2 ” converted from each instruction sequence (step S1702).
  • conversion matrix conversion matrix
  • the program analysis system 100 executes a dimension reduction process that is a process of reducing the dimension of the transformation matrix integrated in step S1702 (step S1703).
  • Such dimension reduction processing may include processing for reducing the columns of the transformation matrix “T”, for example, by reducing the dimension of the input vector “v 0 ”.
  • the dimension reduction process may include a process of reducing the row of the transformation matrix “T” by reducing the dimension of the output vector “v 2 ”.
  • the program analysis system 100 may reduce, for example, variables attached with different subscripts among elements (variables) included in the output vector. Specifically, the program analysis system 100 may execute the following processes. When the variable included in the output vector is a real register or a memory reference and the same variable having different subscripts does not exist, the program analysis system 100 may determine that the combination of the variable and the subscript is in the final state. In this case, the program analysis system 100 may end the process related to the variable. If the combination of a certain variable and its subscript included in the output vector is not in the final state and has no relation to another variable (for example, memory reference), the program analysis system 100 determines that variable and subscript. Delete the pair.
  • the program analysis system 100 executes the following variable normalization process and state normalization process (step S1704).
  • the variable normalization process is a process of extracting a variable that is determined to be a constant and moving to a constant term.
  • the program analysis system 100 reduces the types of variables that appear in the variable vector based on the priority order of the variables (for example, FIG. 20).
  • the state normalization process is a process in which all memory references included in the output vector are represented by variables in the final state. Note that the program analysis system 100 may repeat the processing of steps S1703 to S1704 until the output vector does not change.
  • the program analysis system 100 converts each instruction sequence included in the execution code (1901 in FIG. 19) into a mathematical model (1902 in FIG. 19).
  • the program analysis system 100 executes the matrix expansion process (step S1701) and the product calculation process (step S1702) described above, and obtains an integrated transformation matrix, its input vector, and output vector (1903 in FIG. 19). .
  • variable “eax 3 ” included in the output vector depends on “eax 1 ”.
  • the variable “eax 1 ” included in the output vector depends on the constant “1000”. Therefore, the variable “eax 3 ” is represented by a constant. Since it is determined that the variable “eax 1 ” of the input vector is a constant (“1000”), the dimension of the input vector is reduced by normalizing the variable of the input vector. Thereby, the column of the transformation matrix is reduced (1904 in FIG. 19).
  • step S1502 in FIG. 15 a product operation including a nonlinear function
  • the program analysis system 100 may execute the product operation of the linear functions described above after converting the nonlinear function “T 2 ” into a linear function.
  • the program analysis system 100 applies the linear function “T 1 ” to the input vector and applies the nonlinear function “T 2 ” to the result. Good.
  • T 1 is a linear function converted from a data substitution (transfer) instruction (eg, “mov ebx C” (C is a constant)), and “T 2 ” is a multiplication instruction (eg, “mul ebx”).
  • a data substitution (transfer) instruction eg, “mov ebx C” (C is a constant)
  • T 2 is a multiplication instruction (eg, “mul ebx”).
  • mul ebx a nonlinear function converted from “)”.
  • the “mul” instruction is executed, the value stored in the register “eax” and the operand given to the “mul” instruction are multiplied, and the upper part of the multiplication result is stored in the register “edx”. It is assumed that the part is stored in the register “eax”.
  • Such an instruction sequence is represented by the following pseudo code, for example.
  • the input vector of the nonlinear function converted from the “mul” instruction includes “ebx” and “eax” (that is, the set of input vector variables includes “ebx” and “eax”). . Therefore, a set of constants included in the output vector of the linear function (in this case, “ebx”) and a set of variables included in the input vector of the nonlinear function (in this case, “eax”, “ebx”) are: “Ebx” is included.
  • the mathematical models “T 1 ” and “T 2 ” are both nonlinear functions. In this case, from the definition of backfire, when one map is the other (biased) reverse map, these maps can be converted to identity maps.
  • T 1 is a non-linear function converted from a multiplication instruction (eg, “mul ebx”)
  • T 2 is a non-linear function converted from a division instruction (eg, “div ebx”).
  • Such an instruction sequence is represented by the following pseudo code, for example.
  • the map “T” obtained by synthesizing these further reverses the result of mapping the input vector. Since it corresponds to processing, it is considered to be an identity map.
  • the program analysis system 100 may treat the identity map as a map corresponding to the “nop” instruction, and may not execute the process related to the map.
  • the program analysis system 100 applies the nonlinear function “T 1 ” to the input vector, and applies the nonlinear function “T” to the result. 2 "may apply.
  • the program analysis system 100 rearranges the order of the rows of the input vectors based on the priority order of the elements (variables) included in the input vectors.
  • the program analysis system 100 rearranges (sorts) the order of the rows of the output vector based on the priority order of the elements (variables) included in the output vector.
  • the priority order of variables may be determined in advance as illustrated in FIG. 20, for example.
  • the priority order shown in FIG. 20 is one specific example, and the priority order of variables may be determined as appropriate.
  • program analysis system 100 adjusts the input vector so that the constant term of the input vector becomes “1” as illustrated in FIG.
  • the program analysis system 100 can convert the instruction sequence of the execution code into a mathematical model.
  • the mathematical model converted from the execution code corresponds to the abstract code.
  • the program analysis system 100 can convert an execution code composed of a plurality of lines into one or more abstract codes by executing a mapping composition process.
  • FIG. 2 is a flowchart showing a specific example of the operation of the factor extraction unit 104.
  • the process illustrated in FIG. 2 may be executed at a predetermined timing (for example, every predetermined time), for example.
  • the factor extraction unit 104 reads a sample (execution code of the sample) from each of the vulnerability database 101, the malware database 102, and the system database 103 (step S201).
  • the factor extraction unit 104 converts an execution code (for example, a machine language code) included in the sample into an abstract code (step S202).
  • the factor extraction unit 104 may analyze the execution code included in the execution code of the specimen using a static analysis method such as disassembly.
  • the factor extraction unit 104 holds, for example, the above-described conversion information (for example, a conversion table or a conversion map) that associates an execution code analysis result (for example, assembler code) with an abstract code, and stores the conversion information. It may be used to convert executable code to abstract code.
  • the abstract code is composed of an input vector and an output vector represented by abstracted variable names, and a function representing a mapping between them.
  • the abstract code converted by the factor extraction unit 104 from the samples included in each of the databases may be referred to as “known abstract code”.
  • the factor extraction unit 104 may convert, for example, the execution code into data (intermediate data) expressed using a specific intermediate format, and further convert the converted data into an abstract code.
  • the factor extraction unit 104 may convert the execution code into intermediate data in the SSA format (static single assignment form).
  • the conversion information includes a combination of an instruction sequence included in the execution code, intermediate data converted from the instruction sequence, certain intermediate data, and a mathematical model converted from the intermediate data. May be included.
  • the factor extracting unit 104 may execute the mapping integration process described above on the mathematical model converted from the execution code.
  • the factor extraction unit 104 decomposes the abstract code into indivisible (disjoint) factor codes (step S203).
  • the factor code is data expressed by converting the execution code into a mathematical model. When a certain factor code and another factor code do not have a dependency that includes a variable of a certain output vector in common, those factor codes are disjoint factor codes.
  • the factor code is, for example, a mathematical model that represents an operation on one or two variables.
  • the abstract code can be represented by a set of factor codes, for example.
  • the factor extracting unit 104 decomposes the abstract code into the factor code by decomposing the matrix representing the abstract code by using some method.
  • the factor extraction unit 104 uses, for example, a result of decomposing a matrix representing an abstract code using a known matrix decomposition method (for example, LU decomposition, singular value decomposition (SVD), principal value decomposition), or the like.
  • the abstract code may be decomposed into factor codes.
  • the method for decomposing the matrix representing the abstract code is not limited to the above. For example, when each row in the operation result of the product of a matrix representing an abstract code and some vector is relatively prime, each of those rows may be treated as a factor code.
  • the factor extracting unit 104 registers the factor codes, their arrangement order, and the addresses on the virtual memory in the factor database 105 (step S204).
  • the factor extraction unit 104 may register not only the factor code but also an abstract code in the factor database 105.
  • FIG. 3 is a flowchart showing a specific example of the operation of the successful state registration unit 106.
  • the success state registration unit 106 may start processing in response to a request from the user of the program analysis system 100, for example.
  • the success state registration unit 106 receives information representing a state (success state) in which the attack on the system or device (computer, infrastructure, etc.) to be protected has been successful (step S301).
  • a state in which an attack on a certain system is successful corresponds to, for example, a state in which control on the system has been taken away by an attacker.
  • the information indicating the state of successful attack may be information indicating the state of a specific variable, memory area, file, or the like, for example.
  • the success state registration unit may receive information (data) representing a mathematical model expression indicating a state in which the attack is successful from the user.
  • the success state registration unit 106 may provide an interface or the like for creating a mathematical model representing a successful attack state for the user.
  • the success state registration unit 106 registers information indicating the state of successful attack provided by the user in the success state database 107 (step S302).
  • FIG. 4 is a flowchart showing a specific example of the operation of the factor search unit 108.
  • the factor search unit 108 may start processing in response to a request from a user of the program analysis system 100, for example.
  • the factor search unit 108 converts an execution code (for example, a machine language code) of the execution file 111 to be examined into an abstract code (step S401).
  • the execution file 111 may be, for example, an unknown execution file that is not registered in any of the vulnerability database 101, the malware database 102, and the system database 103.
  • the factor search unit 108 holds conversion information (for example, a conversion table or a conversion map) that associates an instruction included in an execution code with an abstract code (mathematical model). May be used to convert the execution code into abstract code.
  • conversion information for example, a certain instruction sequence included in the execution code and a mathematical model (linear function, nonlinear function, external function, etc.) converted from the instruction sequence may be set in association with each other.
  • the factor search unit 108 checks whether or not the abstract code converted from the execution code of the execution file 111 to be inspected in step S401 includes the factor code (known factor code) registered in the factor database 105 (step S401). Step S402). For example, the factor search unit 108 may decompose the abstract code converted in step S401 into a factor code (may be described as “analysis target factor code”). The factor search unit 108 may search the factor database 105 and confirm whether or not a factor code (known factor code) corresponding to the decomposed factor code (analysis target factor code) is registered in the factor database 105. . At this time, the factor search unit 108 searches for the factor codes extracted from the specimens registered in the vulnerability database 101 and the malware database 102 among the factor codes (known factor codes) registered in the factor database 105. Good.
  • the factor search unit 108 determines that the abstract code has a commutative factor code. Check if it is included.
  • the factor code having commutability is a factor code that can obtain an execution result equivalent to that before rearrangement when the position and execution order of the factor codes included in the abstract code are rearranged. For example, when the output vector of the abstract code does not change even when one or more factor codes included in the abstract code are rearranged, the factor search unit 108 is a factor code having commutability. May be determined.
  • the factor search unit 108 rearranges the factor codes partially in the abstract code. Then, the factor search unit 108 checks whether or not the factor codes registered in the factor database 105 are included in the abstract code after the factor codes are rearranged (step S403).
  • the factor search unit 108 determines that there is no vulnerability related to the execution file 111. (Step S406), the process may be terminated.
  • step S404 When the factor codes registered in the factor database 105 are included in the abstract codes rearranged in step S403 (YES in step S404), the factor search unit 108 executes processing from step S405. Also, in the case of YES in step S402, the factor search unit 108 executes processing from step S405.
  • step S405 the factor search unit 108 determines whether or not the final operation state, which is the final operation state of the execution file 111, is included in the information representing the success state registered in the success state database 107 (step S405).
  • the final operation state is, for example, the state when the execution of the execution file 111 is completed, and the state of the output vector after the mapping in the abstract code converted from the execution file 111 is executed (more specifically, the output Element included in the vector) may be represented.
  • the factor search unit 108 determines that there is a vulnerability related to the execution file 111 (Ste S407). In this case, the factor searching unit 108 may determine that the execution file 111 includes an attack code. If NO in step S405, the factor search unit 108 determines that there is no vulnerability related to the execution file 111 (step S406). In this case, the factor search unit 108 may determine that the attack code is not included in the execution file 111. The factor search unit 108 may provide the determination result to the determination result providing unit 109.
  • FIG. 5 is a flowchart showing an example of the operation of the determination result providing unit 109.
  • the determination result providing unit 109 confirms whether or not there is a vulnerability related to the execution file 111 from the determination result in the factor search unit 108, and generates information (data) representing the determination result (step S501).
  • the determination result providing unit 109 may generate data representing such information using characters or charts.
  • the determination result providing unit 109 provides the generated data to the output device 110 (step S502).
  • FIG. 6 is a flowchart showing a specific example of the operation of the execution file adjustment unit 112.
  • the execution file adjustment unit 112 converts the execution code of the execution file 111 into an abstract code (step S601).
  • the execution file 111 may be, for example, a malware sample provided by the user.
  • the execution file adjustment unit 112 may convert the execution code of the execution file 111 into an abstract code by the same processing as the factor extraction unit 104 and the factor search unit 108. Further, the executable file adjustment unit 112 may decompose the abstract code into factor codes.
  • the execution file adjustment unit 112 compares the abstract code converted from the execution file 111 with the factor code registered in the factor database 105, and partially uses the factor code registered in the factor database 105 to obtain the original abstract. Check if the length of the code can be shortened (that is, the code size can be reduced). At this time, the execution file adjustment unit 112 confirms whether the abstract code can be adjusted so as not to affect the final output vector even if, for example, the abstract code converted from the execution file 111 is partially replaced. Good.
  • the executable file adjustment unit 112 replaces at least a part of the original abstract code with the factor code registered in the factor database 105 (step S602). Specifically, for example, the execution file adjustment unit 112 replaces at least a part of the abstract code converted from the execution file 111 with a factor code extracted from the specimen registered in the system database 103. Thereby, it is possible to replace a part of the execution code included in the execution file 111 by using an instruction included in a normal (regular) execution code in a certain system.
  • step S602 the execution file adjustment unit 112 may repeat the above processing for the set of factor codes held in the factor database 105 until the length of the abstract code is minimized.
  • the execution file adjustment unit 112 may convert the abstract code replaced in step S602 into an execution code and output the output file 113 (step S603).
  • the execution file adjustment unit 112 may generate an execution code by referring to the conversion information and performing inverse conversion of the abstract code into an instruction sequence.
  • the execution file adjustment unit 112 may generate the execution file 111 by executing processes such as assembling and linking the execution code, for example.
  • a user of the program analysis system 100 registers a specimen in the vulnerability database 101, the malware database 102, and the system database 103 through maintenance work or the like.
  • the program analysis system 100 holds data as exemplified in FIG. 22 as conversion information (dictionary data) that associates an instruction sequence with an abstract code.
  • the factor extraction unit 104, the factor search unit 108, and the execution file adjustment unit 112 can convert various execution codes into abstract codes using such conversion information, for example.
  • the factor extraction unit 104 analyzes the specimen registered in each of the databases and registers the factor code in the factor database 105.
  • information representing a successful state as illustrated in FIG. 23 is registered in the factor database 105, for example.
  • appropriate numerical values may be set for “m” and “n”.
  • the factor code illustrated in FIG. 23 may be, for example, a mathematical model converted from an execution code represented as “(mov DWORD PTR [esp + n], m)”.
  • the user of the program analysis system 100 uses the success status registration unit 106 to register information indicating the status of successful attacks on the system in the success status database 107.
  • information indicating a success state as illustrated in FIG. 24 is registered in the success state database 107, for example.
  • the execution file 111 represented by the execution code 2501 illustrated in FIG. 25A is inspected.
  • the user sets the executable file 111 to The program analysis system 100 is provided.
  • the factor search unit 108 converts the provided execution file 111 into an abstract code.
  • the factor search unit 108 converts 12 lines of instructions included in the execution code illustrated in FIG. 25A into a map using the conversion information illustrated in FIG. As a result of the conversion, for example, each line of the execution code illustrated in FIG. 25A can be converted into a mathematical model illustrated in FIG. 25B.
  • the factor search unit 108 executes mapping integration processing by product operation for each mathematical model illustrated in FIG. 25B.
  • the execution code illustrated in FIG. 25A can be converted into the abstract code 2601 illustrated in FIG. 26A.
  • the factor search unit 108 can obtain the factor code 2602 illustrated in FIG. 26B by decomposing the abstract code illustrated in FIG. 26A into a factor code.
  • the factor search unit 108 searches the factor database 105 and confirms whether or not a factor code corresponding to the decomposed factor code is registered in the factor database 105.
  • the factor search unit 108 compares the final operation state of the execution code 2501 (that is, the variable in the final state among the output vectors of the abstract code 2601) and information indicating the success state registered in the success state database 107. .
  • the factor search unit 108 provides the determination result to the determination result providing unit 109.
  • the determination result providing unit 109 generates information (data) representing the determination result and provides it to the output device 110.
  • the user of the program analysis system 100 confirms the inspection result regarding the execution file 111 via the output (for example, screen display) of the output device 110.
  • the user provides the execution file 111 (execution code 2501) to the execution file adjustment unit 112, for example, for the purpose of performing a penetration test.
  • execution code 2701 illustrated in FIG. 27 is registered in the system database 103 as a known execution code.
  • the execution code 2701 may be a normal (regular) process in a certain system, for example.
  • the execution code 2701 can be converted into an abstract code 2801, and a factor code 2802 (FIG. 28B) obtained by decomposing the abstract code 2801 is registered in the factor database 105.
  • a factor code 2802 FIG. 28B
  • the execution file adjustment unit 112 analyzes the execution file 111 (execution code 2501) in the same manner as the factor search unit 108, and obtains an abstract code 2601 and a factor code 2602.
  • the execution file adjustment unit 112 compares the factor code 2602 with the factor code 2802 registered in the factor database 105.
  • the terms “eax” and “[esp-8]” in the factor code are common. That is, if the influence of the terms “[esp-12]” and “edx” in the factor code 2802 can be eliminated, at least a part of the execution code 2501 can be replaced using the execution code 2701.
  • the executable file adjustment unit 112 shortens the code length of the executable code 2501 by replacing a part of the executable code 2501 with a call of the executable code 2701.
  • the execution file adjustment unit 112 converts the execution code 2501 into the shortened execution code 2901 illustrated in FIG. 29 using the temporary save memory areas “X” and “Y”.
  • the values of “[esp-12]” and “edx” are temporarily compared using the temporary save memory areas “X” and “Y”.
  • the processing implemented in the execution code 2701 is executed.
  • the values of “[esp-12]” and “edx” saved in the temporary save memory areas “X” and “Y” are restored.
  • the execution code 2901 has a shorter code length than the original execution code 2501. That is, the execution file adjustment unit 112 can shorten the code length of the execution code 2501.
  • the execution file adjustment unit 112 may output the output file 113 including the execution code 2901.
  • the user can perform a penetration test on the system to be inspected using the output file 113, for example.
  • the execution code 2901 included in the output file 113 has a code size shorter than that of the execution code 2501. Also, most of the processing in the execution code 2901 is executed by the execution code 2701 (normal processing in the system). In other words, the output file 113 is characterized in that it is not easy to distinguish from normal (legitimate) processing executed in the system, and the code size is small. It is considered that the user can execute a more advanced test by using the output file 113.
  • the program analysis system 100 configured as described above can determine whether or not a certain execution code is an attack code, and can detect an unknown attack code.
  • the reason is as follows.
  • the program analysis system 100 compares a mathematical model (factor code) converted from an execution code to be examined with a mathematical model (factor code) model converted from a sample such as a known vulnerability, malware, or system.
  • the program analysis system 100 can confirm whether the execution code to be inspected includes a factor corresponding to the attack code.
  • the program analysis system 100 compares the final operation state of the execution code to be inspected with the success state in which the attack on a certain system is successful. Thereby, the program analysis system 100 can determine whether or not any attack is successful by executing the execution code to be inspected.
  • the program analysis system 100 inspects the execution code from the viewpoint of whether the execution code includes an attack factor and whether the execution code is in a (known) attack success state. To do. Thereby, the program analysis system 100 can detect the execution code that attacks the vulnerability, for example, regardless of whether the vulnerability is unknown or known. From the above, according to the program analysis system 100, for example, it is expected to suppress a zero-day attack by detecting an execution code using an unknown vulnerability.
  • the program analysis system 100 it is expected to improve the ability to detect an activity caused by a malicious program that can be continuously activated.
  • the reason is as follows. That is, the program analysis system 100 considers the characteristic that the malicious program that carries out the sustainable activity has a relatively small code size, and replaces the factor code that constitutes the malicious program to be inspected, thereby reducing the code size. Reduce. As a result, the program analysis system 100 can generate an executable code that can be applied to an inspection (test) that assumes a case where a malicious program having a relatively small code size has entered. That is, the program analysis system 100 can perform a penetration test using a malicious program having a relatively small code size.
  • FIG. 30 is a block diagram illustrating a functional configuration of the program analysis system 3000 according to this embodiment.
  • the program analysis system 3000 according to this embodiment includes a factor code holding unit 3001 (factor code holding unit), a successful state holding unit 3002 (success state holding unit), and a factor search unit 3003 (factor). Search means).
  • the factor code holding unit 3001 holds a known factor code, which is data obtained by converting a known execution code into a mathematical model.
  • the factor code holding unit 3001 can be realized using a file in a database or a file system, for example.
  • the factor code holding unit 3001 may be configured in the same manner as the factor database 105 in the first embodiment.
  • the factor code holding unit 3001 contains, for example, a sample of an attack code that attacks a known vulnerability, a sample of a known malware, and a normal (regular) executable code in the system, as in the first embodiment.
  • a known factor code extracted from a specimen or the like may be registered.
  • the success state holding unit 3002 holds success state information indicating a state where the attack by the unauthorized program is successful.
  • the success state holding unit 3002 can be realized using a file in a database or a file system, for example.
  • the success state holding unit 3002 may be configured similarly to the success state database 107 in the first embodiment.
  • the factor search unit 3003 generates an analysis target abstract code, which is data expressed by converting the execution code to be examined into a mathematical model.
  • the factor search unit 3003 executes processing for determining whether or not the generated analysis target abstract code includes a known factor code held in the factor code holding unit 3001.
  • the factor search unit 3003 executes a process of determining whether or not the state when the execution of the execution code to be examined is included in the success state information held in the success state holding unit 3002.
  • the factor search unit 3003 determines whether or not the execution code to be examined is a malicious program according to the result of this processing.
  • the factor search unit 3003 includes, for example, a state where the analysis target abstract code includes the known factor code held in the factor code holding unit 3001 and the execution state of the execution code to be examined is a success state holding unit. If it is included in the success status information held in 3002, it may be determined that the execution code to be inspected is a malicious program.
  • the mathematical model may be a model that represents an instruction included in a certain execution code by using one or more mappings and input vectors and output vectors related to the mapping.
  • Such a mathematical model may be represented by any one of a linear function, a nonlinear function, and an external function, as in the first embodiment.
  • the factor search unit 3003 converts one or more instruction sequences included in the execution code to be examined into a map, and integrates the converted one or more maps by product operation to generate an analysis target abstract code. Good.
  • the factor search unit 3003 uses, for example, conversion information associating an instruction included in the execution code to be examined with a mapping representing the instruction, and maps one or more instruction sequences included in the execution code to be examined into a mapping. It may be converted.
  • the factor search unit 3003 may be configured to realize the same function as the factor search unit 108 in the first embodiment, for example.
  • program analysis system 3000 may further include an execution file adjustment unit 3004 as a modification (FIG. 31).
  • the execution file adjustment unit 3004 can, for example, convert the execution code to be inspected into the analysis target abstract code using the conversion information, and further decompose the analysis target abstract code into the analysis target factor code.
  • the execution file adjustment unit 3004 replaces, for example, at least a part of the analysis target factor code included in the analysis target abstract code with the known factor code held in the factor code holding unit 3001, thereby It may be determined whether the size can be reduced.
  • the execution file adjustment unit 3004 stores at least a part of the analysis target factor code included in the analysis target abstract code. It may be replaced with a factor code.
  • the program analysis system 3000 By configuring the program analysis system 3000 according to the present disclosure as described above, for example, an attack caused by an unknown malicious program can be suppressed. The reason is that the program analysis system 3000 (particularly the factor search unit 3003) compares the analysis target factor code obtained from the execution code to be tested with the known factor code included in the malicious program, thereby This is because it is possible to determine whether or not the execution code includes an attack factor.
  • the program analysis system according to the present disclosure is capable of determining whether the state after executing the execution code to be inspected is in a state where the attack is successful (successful state).
  • the program analysis system 3000 by configuring the program analysis system 3000 according to the present disclosure in this way, for example, the ability to detect an activity caused by a malicious program that can be continuously activated can be improved.
  • the reason is as follows. A malicious program that carries out sustained activities is considered to have a characteristic that its code size is smaller than other malicious programs. Therefore, the program analysis system 3000 (particularly the execution file adjustment unit 3004) reduces the size of the execution code to be tested by replacing the analysis target code constituting the execution code to be checked. Accordingly, the program analysis system 3000 can generate an output file that can be applied to a test (test) that assumes a case where a malicious program having a relatively small code size has entered. That is, the program analysis system 3000 can perform a penetration test using a malicious program having a relatively small code size.
  • the technology according to the present disclosure has been described as an example in which the technology according to the present disclosure is applied to the program analysis system (100, 3000).
  • the program analysis method according to the present disclosure can be performed by operating the program analysis system (100, 3000).
  • the method for executing the program analysis method according to the present disclosure is not limited to the above, and another device (for example, an information processing device such as a computer) capable of executing the same operation or processing as the program analysis system (100, 3000) is used. It is also possible to implement the program analysis method according to the present disclosure.
  • the technology according to the present disclosure can be applied to uses such as a malware analysis device or a program capable of realizing the malware analysis device using a computer. Further, the technology according to the present disclosure can be applied to uses such as classification of malware and generation of malware of a subtype, for example.
  • program analysis system the program analysis systems (100, 3000) described in the above embodiments are collectively referred to as “program analysis system”.
  • each component of the program analysis system may be simply referred to as “a component of the program analysis system”.
  • each component shown in each of the above drawings is a hardware in which a part or all of the components are integrated (an integrated circuit or a storage device in which processing logic is mounted). It may be realized using.
  • the components of the program analysis system may be realized by, for example, a circuit configuration that can provide each function.
  • a circuit configuration includes, for example, an integrated circuit such as SoC (System on a Chip), a chip set realized using the integrated circuit, and the like.
  • the data held by the components of the program analysis system is, for example, a RAM (Random Access Memory) area integrated as SoC, a flash memory area, or a storage device (semiconductor storage device, etc.) connected to the SoC. May be stored.
  • a well-known communication bus or the like may be employed as a communication line that connects each component of the program analysis system. Further, the communication line connecting each component may be connected between each component by peer-to-peer.
  • the above-described program analysis system may be configured by a general-purpose hardware device 3200 illustrated in FIG. 32 and various software programs (computer programs) executed by the hardware device 3200.
  • the program analysis system may be configured by a combination of one or more appropriate number of general-purpose hardware devices 3200 and a software program.
  • the arithmetic device 3201 may read various software programs stored in a nonvolatile storage device 3203, which will be described later, into the memory 3202, and execute processing according to the software programs.
  • the functions of the components of the program analysis system in each of the above embodiments may be realized using a software program executed by the arithmetic device 3201.
  • the computing device 3201 may be, for example, a multi-core CPU having a plurality of CPU cores.
  • the arithmetic device 3201 may be a multi-thread CPU in which one CPU core can execute a plurality of threads.
  • the hardware device 3200 may include a plurality of arithmetic devices 3201.
  • the memory 3202 is a memory device such as a RAM that can be referred to from the arithmetic device 3201, and stores software programs, various data, and the like. Note that the memory 3202 may be a volatile memory.
  • the non-volatile storage device 3203 is a non-volatile storage device (storage device) such as a magnetic disk drive or a semiconductor storage device using a flash memory.
  • the nonvolatile storage device 3203 can store various software programs, data, and the like. For example, a program capable of realizing each component of the program analysis system may be stored in the nonvolatile storage device 3203.
  • the drive device 3204 is, for example, a device that processes reading and writing of data with respect to a recording medium 3205 described later.
  • the recording medium 3205 is an arbitrary recording medium capable of recording data, such as an optical disk, a magneto-optical disk, and a semiconductor flash memory.
  • a program capable of realizing each component of the program analysis system may be recorded in the recording medium 3205.
  • the network interface 3206 is a device that controls transmission and reception of communication data with the communication network.
  • the network interface 3206 may include, for example, one or more communication ports, and may transmit / receive communication data to / from the communication network via the communication ports.
  • the network interface 3206 may include a plurality of communication ports.
  • the program analysis system which has been described using the above-described embodiments as an example, or the components thereof, for example, can implement the functions described in the above-described embodiments with respect to the hardware device 3200 illustrated in FIG. It may be realized by supplying a software program.
  • the technology related to the present disclosure may be realized by causing the arithmetic device 3201 to execute a software program supplied to the hardware device 3200.
  • a software program supplied to the hardware device 3200 an operating system running on the hardware device 3200, middleware such as database management software, network software, and virtual environment infrastructure may execute a part of each process.
  • each unit shown in each of the above drawings can be realized as a software module, which is a function (processing) unit of a software program executed by the hardware described above.
  • the division of each software module shown in these drawings is a configuration for convenience of explanation, and various configurations can be assumed for implementation.
  • these software modules may be stored in the nonvolatile storage device 3203. . These software modules may be read into the memory 3202 when the arithmetic device 3201 executes each process.
  • these software modules may be configured to transmit various data to each other by an appropriate method such as shared memory or inter-process communication. With such a configuration, these software modules are connected so as to communicate with each other.
  • the software program may be recorded on the recording medium 3205.
  • the software program may be stored in the non-volatile storage device 3203 through the drive device 3204 as appropriate at the shipping stage or operation stage of the program analysis system.
  • the method of supplying the various software programs to the hardware device 3200 is performed by using an appropriate jig (tool) at the manufacturing stage before shipment or the maintenance stage after shipment. You may employ
  • a method for supplying various software programs a general procedure may be adopted at present, such as a method of downloading from the outside via a communication line such as the Internet.
  • the technology relating to the present disclosure can be considered to be configured by a code constituting the software program or a computer-readable recording medium on which the code is recorded.
  • the recording medium is not limited to a medium independent of the hardware device 3200, but includes a recording medium in which a software program transmitted via a LAN (Local Area Network) or the Internet is downloaded and stored or temporarily stored.
  • the components of the program analysis system described above are configured by a virtualized environment in which the hardware device 3200 illustrated in FIG. 32 is virtualized and various software programs (computer programs) executed in the virtualized environment. May be.
  • the components of the hardware device 3200 illustrated in FIG. 32 are provided as virtual devices in the virtual environment.
  • the technology related to the present disclosure can be realized with the same configuration as when the hardware device 3200 illustrated in FIG. 32 is configured as a physical device.
  • Factor code holding means for holding a known factor code, which is data expressed by converting a known executable code into a mathematical model; Success status holding means for holding success status information indicating the status of successful attack by a malicious program,
  • An analysis object abstract code which is data expressed by converting the execution code to be examined into the mathematical model, is generated, and the analysis object abstract code includes the known factor code held in the factor code holding unit.
  • a process for determining whether or not a state when the execution of the execution code to be inspected is included in the success state information held in the success state holding unit,
  • a factor search means for determining whether or not the execution code to be inspected is a malicious program by executing at least a program analysis system.
  • the analysis target abstract code includes the known factor code held in the factor code holding means, and the state when the execution of the execution code to be examined is completed is the success state.
  • the analysis target abstract code is further decomposed into analysis factor codes that are disjoint factor codes, If the execution result equivalent to the analysis target abstract code before the rearrangement is obtained by rearranging at least a part of the analyzed factor code, the at least part of the analysis factor code is rearranged. Further executing a process of determining whether or not the known factor code is included in the analyzed abstract code after the replacement, The analysis target abstract code after rearranging at least a part of the analysis target factor code includes the known factor code, and the state when the execution of the execution target code is completed is the success state.
  • the program analysis system according to supplementary note 2, wherein the execution target code to be inspected is determined to be a malicious program when included in the success status information held in the holding means.
  • the mathematical model is a model that represents an instruction included in a certain execution code by using one or more mappings, and an input vector and an output vector related to the mapping
  • the factor search means converts one or more instruction sequences included in the execution code to be examined into the mapping, and integrates the converted one or more mappings by product operation to obtain the analysis target abstract code.
  • the program analysis system according to any one of supplementary notes 1 to 3 to be generated.
  • the elements of the input vector and the output vector in the mathematical model are information indicating the contents of a register mounted on an arithmetic unit that constitutes an information processing apparatus on which the execution code to be checked is executed, and execution of the check target.
  • the factor search means determines whether or not the element of the output vector representing the state when the execution of the execution code to be examined is completed is included in the success state information held in the success state holding means
  • the program analysis system according to appendix 4.
  • the factor search means uses the conversion information that associates the instruction included in the execution code with the mapping that is the mathematical model representing the instruction, and uses one or more instruction sequences included in the execution code to be examined as described above. 6.
  • the program analysis system according to appendix 4 or appendix 5, which converts to a map.
  • Vulnerability data holding means for holding a sample of an executable code that executes an attack using the vulnerability
  • Malware program data holding means for holding known malware samples
  • a factor extracting means for generating a known abstract code that is and providing the known factor code decomposed from the known abstract code to the factor code holding means
  • the factor search means includes, in the analysis target abstract code, the known factor code acquired from the specimen held in the vulnerability data holding means, and the specimen acquired from the specimen held in the malicious program data holding section.
  • the inspection is performed
  • (Appendix 8) System data holding means for holding a sample of executable code executed in a normally operating system;
  • the known abstract code generated by converting the execution code of the specimen held in the system data holding means into the mathematical model using the conversion information and generating the known abstract code and decomposing the known abstract code Factor extraction means for providing a factor code to the factor code holding means;
  • the execution target code is converted into the analysis target abstract code using the conversion information, By replacing at least a part of the analysis target abstract code with the known factor code acquired from the execution code of the specimen held in the system data holding unit, the code size is larger than that of the original execution code of the test target.
  • the factor search means calculates a plurality of the instruction sequences included in the execution code by calculating a product of the conversion matrices included in each of the mappings converted from the plurality of instruction sequences included in the execution code.
  • the program analysis system according to any one of appendix 4 to appendix 8, which integrates the mapping converted from.
  • Appendix 13 Storage means for storing a known system, means for extracting the factor from the execution code of the known system, and execution of the known system by replacing the extracted factor with a subset of the other factor

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Stored Programmes (AREA)

Abstract

検査対象のプログラムの内容を適切に分析可能なプログラム分析システムを提供する。プログラム分析システムは、既知の実行コードを数理モデルに変換して表したデータである、既知因子コードを保持する因子コード保持部と、不正プログラムによる攻撃が成功した状態を表す成功状態情報を保持する成功状態保持部と、検査対象の実行コードを上記数理モデルに変換して表したデータである、分析対象抽象コードを生成し、上記分析対象抽象コードに、上記因子コード保持部に保持された上記既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持部に保持された上記成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する因子探索部と、を備える。

Description

プログラム分析システム、プログラム分析方法、及び、記録媒体
 本開示は、コンピュータ・プログラムを分析した結果から、不正なプログラムを検出可能なプログラム分析システム等に関する。
 昨今、組織内のコンピュータや重要施設(インフラ等)に不正な指令を与える不正プログラム(マルウェア等)に起因する、セキュリティの脅威が発生している。係る脅威を低減するセキュリティ対策の一つとして、確実性が高い方法を用いてマルウェアを検出することが考えられる。
 セキュリティ対策に関連して、例えば、以下のような技術が知られている。
 特許文献1には、攻撃コードが配置されている攻撃URL(Universal Resource Locator)と、攻撃URLに接続される入り口URLとの組を悪性URLの組として記憶し、悪性URLの組に含まれる入り口URLへのアクセスを監視する監視装置に関する技術が開示されている。
 特許文献2には、通信データから、既知の攻撃に関する特徴情報(例えばURLのパス情報)とは異なる他の特徴情報を抽出し、当該他の特徴情報を含む他の通信データを特定することにより、未知の攻撃に関する通信データを検知することを期待する技術が開示されている。
 特許文献3には、複数の囮システムを用いて収集した攻撃情報(マルウェア活動に関するIP(Internet Protocol)アドレス、URL等)をクラスタリングし、異なる種別の囮システムで収集した攻撃情報が複数重複して存在する可能性が高い領域(IPアドレス、URL等)を抽出する技術が開示されている。
 特許文献4には、仮想マシン環境を用いて採取したマルウェアのサンプルを解析することで、当該マルウェアのシグネチャを生成するマルウェア解析システムに関する技術が開示されている。
 特許文献5には、実行可能コードをエミュレートすることにより、当該実行可能コードが悪意のあるコード(例えばマルウェア等)であるか否かを判定する方法に関する技術が開示されている。
 また、セキュリティ対策以外の分野において、以下のような技術が知られている。
 特許文献6には、ソースプログラムを元に作成された仕様書又は制御フロー図から、リバースエンジニアリングツールを用いて、テスト仕様書を作成するシステムに関する技術が開示されている。
 特許文献7には、入力データから読み込んだ文字列と、予め登録された文字列とをそれぞれ区分文字を用いて区分し、区分したそれぞれの文字列の一致度に基づいて、これらの文字列を照合する技術が開示されている。
特許第5752642号公報 特許第5655191号公報 特許第5650617号公報 特表2014-519113号公報 特表2006-512667号公報 特開2001-084136号公報 特開2014-026421号公報
 マルウェアの内容を分析して、その攻撃を抑止することは、一般的には容易ではない。例えば、新種のマルウェアや、未知の脆弱性等を利用する攻撃(ゼロデイ攻撃)を実行するマルウェア等、既知ではないマルウェアの分析が必要となる場合がある。
 これに対して、上記特許文献1に開示された技術は、マルウェア等の攻撃コードが存在するURLへのアクセスを遮断する技術であり、あるコードが攻撃コードであるか否かを分析可能な技術ではない。上記特許文献2に開示された技術は、マルウェアにより実行された通信に関する通信データを解析することでマルウェアを検知する技術であり、マルウェア自体を分析可能な技術ではない。上記特許文献3に開示された技術は、マルウェアの活動に関連するIPアドレス、URL等の攻撃情報を抽出する技術であり、マルウェア自体を解析する技術ではない。上記特許文献4に開示された技術は、VM(Virtual Machine:仮想マシン)環境を用いてマルウェアの挙動を解析する技術である。VM環境における解析を検知したマルウェアが挙動を変更した場合、当該マルウェアを適切に解析できない可能性がある。特許文献5に開示された技術は、悪意のある処理が実行された状態を予め定義してから実行コードをエミュレートする技術である。このため、活動内容が予測できない未知の攻撃に十分対応できない可能性がある。なお、特許文献6、特許文献7に開示された技術は、いずれもマルウェアの解析に関連する技術ではない。
 本開示に係る技術は、上記のような事情を鑑みて着想されたものである。即ち、本開示に係る技術は、検査対象のプログラムの内容を適切に分析可能なプログラム分析システム等を提供することを、主たる目的の一つとする。
 上記目的を達成可能な、本開示に係る技術の一つの態様であるプログラム分析システムは、以下のように構成される。即ち、係る分析システムは、既知の実行コードを数理モデルに変換して表したデータである、既知因子コードを保持する因子コード保持部と、不正プログラムによる攻撃が成功した状態を表す成功状態情報を保持する成功状態保持部と、検査対象の実行コードを上記数理モデルに変換して表したデータである、分析対象抽象コードを生成し、上記分析対象抽象コードに、上記因子コード保持部に保持された上記既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持部に保持された上記成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する因子探索部と、を備える。
 また、本開示に係る技術の一態様であるプログラム分析方法は、検査対象の実行コードを数理モデルに変換して表したデータである分析対象抽象コードを生成し、上記分析対象抽象コードに、既知の実行コードを上記数理モデルに変換して表したデータである既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、不正プログラムによる攻撃が成功した状態を表す成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する、ことを含む。
 また、同目的は、上記構成を有するプログラム分析システム、プログラム分析方法をコンピュータによって実現するコンピュータ・プログラム、及び、そのコンピュータ・プログラムが格納されているコンピュータ読み取り可能な記録媒体等によっても達成される。
 本開示に係る技術によれば、検査対象のプログラムの内容を適切に分析することが可能である。
図1Aは、本開示の第1の実施形態に係るプログラム分析システムの機能的な構成を例示するブロック図である。 図1Bは、本開示の第1の実施形態に係るプログラム分析システムの変形例の機能的な構成を例示するブロック図である。 図2は、本開示の第1の実施形態に係るプログラム分析システムに含まれる因子抽出部の動作の一例を示すフローチャートである。 図3は、本開示の第1の実施形態に係るプログラム分析システムに含まれる成功状態提供部の動作の一例を示すフローチャートである。 図4は、本開示の第1の実施形態に係るプログラム分析システムに含まれる因子探索部の動作の一例を示すフローチャートである。 図5は、本開示の第1の実施形態に係るプログラム分析システムに含まれる判定結果提供部の動作の一例を示すフローチャートである。 図6は、本開示の第1の実施形態に係るプログラム分析システムに含まれる実行ファイル調整部の動作の一例を示すフローチャートである。 図7は、命令列の写像への変換を、具体例を用いて模式的に示す説明図である。 図8は、入力ベクトルにおける定数項の表現方法を模式的に示す説明図である。 図9は、線形関数に変換可能な命令列の具体例を示す説明図である。 図10Aは、特定の命令(”mov”命令)を、写像に変換する具体例を示す説明図である。 図10Bは、特定の命令(”lea”命令)を、写像に変換する具体例を示す説明図である。 図10Cは、特定の命令(”push”命令)を、写像に変換する具体例を示す説明図である。 図10Dは、特定の命令(”pop”命令)を、写像に変換する具体例を示す説明図である。 図11は、仮想レジスタを用いて、”Mod R/M”バイトを含む命令を写像に変換する具体例を示す説明図である。 図12は、非線形命令に変換可能な命令列の具体例を示す説明図である。 図13は、特定の命令(”movzx”命令、”movsx”命令)を、非線形関数に変換する具体例を示す説明図である。 図14は、複数の命令列から変換された写像を、積により統合する方法を模式的に示す説明図である。 図15は、積による写像の統合処理を例示するフローチャートである。 図16は、連続する線形関数の積の計算処理を模式的に示す説明図である。 図17は、連続する線形関数の積の計算処理を例示するフローチャートである。 図18は、連続する命令列から変換された写像(線形関数)の統合を例示する説明図である。 図19は、連続する命令列から変換された写像(線形関数)の統合を例示する説明図である。 図20は、入力ベクトル及び出力ベクトルの要素(変数)に関する優先度の一例を示す説明図である。 図21は、入力ベクトルに関する定数項の正規化を例示する説明図である。 図22は、命令列と抽象コードとを関連付ける変換情報の具体例を示す説明図である。 図23は、本開示の第1の実施形態における因子データベースの具体例を示す説明図である。 図24は、本開示の第1の実施形態における成功状態データベースの具体例を示す説明図である。 図25Aは、検査対象の実行コードの具体例を示す説明図である。 図25Bは、図25Aに示す検査対象の実行コードを数理モデルに変換した具体例を示す説明図である。 図26Aは、図25Aに例示する実行コードから変換された抽象コードの具体例を示す説明図である。 図26Bは、図26Aに例示する抽象コードから分解された因子コードの具体例を示す説明図である。 図27は、既知の実行コードの具体例を示す説明図である。 図28Aは、図27に例示する実行コードから変換された抽象コードの具体例を示す説明図である。 図28Bは、図28Aに例示する抽象コードから分解された因子コードの具体例を示す説明図である。 図29は、図25Aに例示する実行コードを短縮した実行コードの具体例を示す説明図である。 本開示の第2の実施形態に係るプログラム分析システムの機能的な構成を例示するブロック図である。 本開示の第2の実施形態に係るプログラム分析システムの変形例を例示するブロック図である。 図32は、本発明の各実施形態における分析システムの構成要素を実現可能なハードウェア装置の構成を例示する図面である。
 本発明の実施形態に関する説明に先立って、本発明に関する技術的な検討事項等についてより詳細に説明する。
 上記したように、不正プログラムに起因したセキュリティの脅威(例えば、未知の脆弱性によるゼロデイ攻撃や、当該攻撃によって仕込まれたマルウェアによる持続的活動等を含むサイバー攻撃)が問題となっている。不正プログラムには、未知の脆弱性を利用した攻撃を実行する不正プログラム、既知の脆弱性を利用した攻撃を実行する不正プログラムが含まれる。一般的に、未知の脆弱性を利用する不正プログラムの挙動や構造は、知られていない場合が多い。既知の脆弱性を利用する不正プログラムであっても、その挙動や構造が知られていない場合がある。
 サイバー攻撃等のセキュリティの脅威を低減する観点からは、未知の脆弱性を利用する不正プログラムや、長期間活動可能な不正プログラムを発見し、当該不正プログラムに関する知見を蓄積することが有益である。
 情報システムのセキュリティ強度を改善する観点からは、当該情報システムに対してセキュリティに関するテスト(例えば、不正プログラムを用いたペネトレーションテスト)を実行することが考えられる。例えば、周知の脆弱性を利用する不正プログラムは、一般的なセキュリティ対策方法(例えばアンチウィルスソフトウェアや、侵入防止システム等)により検出される可能性ある。システムが高度(強力)な攻撃に耐え得ることを確認する場合、周知の脆弱性を利用する不正プログラムだけではなく、例えば、発見されにくい不正プログラムを用いて、当該システムをテストすることが有益である。
 未知の脆弱性を利用する不正プログラムは、例えば、既知の脆弱性を利用するプログラムを分析し、その構成要素(あるいはその組み合わせ)を含む他のプログラムを探索することで、発見できる場合がある。また、持続的に(長期間)活動可能な不正プログラムによる処理は、システムにおいて実行される通常の(正当な)処理と区別が容易ではなく、不正プログラム自体のコードサイズが小さい(コード長が短い)場合がある。係る特性を考慮して、既知の不正プログラム及びシステムが実行する通常処理を分析し、その構成要素(あるいはその組み合わせ)を用いることで、持続的に活動可能な(発見されにくい)不正プログラムを取得可能であると考えられる。
 以下の各実施形態を用いて説明するプログラム分析システムは、例えば、既知の脆弱性(脆弱性を有するプログラム)、不正プログラム、及び、システムが実行する通常処理に関するプログラム等のコードを分析して、その構成要素(因子コードと記載する場合がある)を取得する。係るプログラム分析システムは、例えば、分析した因子コード(その組み合わせを含む)を用いて、脆弱性を利用する不正プログラムを探索するよう構成されてよい。係る探索処理には、あるプログラム(実行コード)が、不正プログラムであるか否かに関する判定処理が含まれてよい。また、係るプログラム分析システムは、ある不正プログラムを、上記因子コードを用いて加工することで、テスト用の不正プログラム(例えば、持続的に活動可能な(発見されにくい)不正プログラム)を取得するよう構成されてよい。具体的には、プログラム分析システムは、ある不正プログラムの少なくとも一部を他の因子コードに置換(あるいは組み合わせ)することにより、当該不正プログラムに含まれる、不正なコードのサイズを削減するよう構成されてもよい。
 本開示に係るプログラム分析システムを上記のように構成することで、例えば、未知の不正プログラムに起因した攻撃を抑止し得る。その理由は、本開示に係るプログラム分析システムは、上記分析により取得した因子コードと、未知の不正プログラムに含まれる因子コードとを比較することで、未知の不正プログラムに攻撃の因子が含まれるか否かを判定可能だからである。また、本開示に係るプログラム分析システムは、ある不正プログラムを実行した後の状態が、攻撃が成功した状態(成功状態)にあるか否かを判定可能だからである。
 また、本開示に係るプログラム分析システムをこのように構成することで、例えば、持続的に活動可能な不正プログラムによる活動を検知する能力が改善され得る。その理由は、以下の通りである。プログラム分析システムは、持続的活動を実施する不正プログラムは、他の不正プログラムと比べてコードサイズが小さいという特性を考慮して、検査対象の不正プログラムを構成する因子コードを置き換えることで、コードのサイズを削減する。これにより、係るプログラム分析システムは、コードサイズが比較的小さい不正プログラムが侵入した場合を想定した検査(テスト)に適用可能な実行コードを生成可能である。即ち、係るプログラム分析システムにより、コードサイズが比較的小さい不正プログラムを用いたペネトレーションテストを実施することができる。
 本開示に係るプログラム分析システムを上記のように構成することで、検査対象のプログラムの内容を適切に分析することが可能であり、その結果を用いて、不正プログラムによる攻撃を抑制し得る。
 以下、各実施形態を用いて、本開示に係るプログラム分析システムについて詳細に説明する。以下の各実施形態に記載されているプログラム分析システムの構成は例示であり、本発明の技術範囲はそれらには限定されない。以下の各実施形態におけるプログラム分析システムを構成する構成要素の区分け(例えば、機能的な単位による分割)は、プログラム分析システムを実現可能な一例である。当該プログラム分析システムの実装に際しては、以下の例示に限定されず、様々な構成が想定される。即ち、以下の各実施形態におけるプログラム分析システムを構成する構成要素は、更に分割されてもよい。また、以下の各実施形態におけるプログラム分析システムを構成する1以上の構成要素が、統合されてもよい。
 以下において説明するプログラム分析システムは、単体の装置(物理的あるいは仮想的な装置)を用いて構成されてもよく、複数の離間した装置(物理的あるいは仮想的な装置)を用いて実現されてもよい。プログラム分析システムが複数の装置により構成される場合、各装置の間は有線、無線、又はそれらを適切に組み合わせた通信ネットワーク(通信回線)により通信可能に接続されてもよい。係る通信ネットワークは、物理的な通信ネットワークであってもよく、仮想的な通信ネットワークであってもよい。以下において説明するプログラム分析システム、あるいは、その構成要素を実現可能なハードウェア構成については、後述する。
 <第1の実施形態>
 [構成]
 本開示に係る技術を実現可能な第1の実施形態について図面を参照して説明する。図1Aは、本実施形態におけるプログラム分析システム100の機能的な構成を例示するブロック図である。本実施形態においては、不正プログラムがマルウェアであることを想定する。なお、本開示が対象とする不正プログラムには、マルウェア以外のプログラムが含まれてよい。
 図1Aに例示するように、本実施形態におけるプログラム分析システム100は、脆弱性データベース101、マルウェアデータベース102、及び、システムデータベース103を有する。また、プログラム分析システム100は、因子抽出部104及び因子データベース105を有する。また、プログラム分析システム100は、成功状態登録部106及び成功状態データベース107を有する。また、プログラム分析システム100は、因子探索部108及び判定結果提供部109を有する。プログラム分析システム100は、出力装置110と通信可能に接続されていてもよい。
 脆弱性データベース101は、脆弱性を利用した攻撃を実行する実行コードである攻撃コードの検体を保持(ストア:store)可能である。攻撃コードの検体は、例えば、既知の脆弱性を攻撃する処理が実装された1以上の命令列により表されてもよい。攻撃コードの検体は、当該攻撃コードを含む実行ファイルであってもよい。脆弱性データベース101は、上記以外に、既知の脆弱性を有するプログラムに関する実行コードの検体を保持してもよい。以下、脆弱性データベース101を、脆弱性データ保持部(脆弱性データ保持手段)と記載する場合がある。
 マルウェアデータベース102は、既知のマルウェアの検体を保持可能である。マルウェアの検体は、例えば、マルウェアの実行コードの少なくとも一部であってもよく、マルウェアの実行コードそのものであってもよい。既知のマルウェアの検体は、周知の方法を含む適切な方法で収集されてよい。マルウェアデータベース102を実現可能な構成は、特に限定されない。以下、マルウェアデータベース102を、不正プログラムデータ保持部(不正プログラムデータ保持手段)と記載する場合がある。
 システムデータベース103は、正常に稼働しているシステムにおいて用いられているオペレーティングシステム(OS:Operating System)やアプリケーションに関する検体を保持可能である。システムデータベース103に保持される検体は、例えば、OSを構成するライブラリや実行ファイル、あるいは、アプリケーションを構成するライブラリや実行ファイルであってもよい。以下、システムデータベース103を、システムデータ保持部(システムデータ保持手段)と記載する場合がある。
 上記各データベースには、予め十分な量の検体が保持されることを想定する。
 因子抽出部104は、脆弱性データベース101、マルウェアデータベース102、及び、システムデータベース103から取得した検体から、因子コード(後述)を抽出する処理を実行可能である。因子抽出部104(因子抽出手段)は、抽出した因子コードを因子データベース105に登録する。因子抽出部104は、因子コードを抽出した検体の実行コードと、因子コードとを関連付けて、因子データベース105に登録してもよい。また、因子抽出部104は、例えば、因子コードと、当該因子コードが抽出された検体コードを保持するデータベース(脆弱性データベース101、マルウェアデータベース102及びシステムデータベース103)を特定可能な情報と、を関連付けて、因子データベース105に登録してもよい。因子抽出部104の具体的な処理については、後述する。
 因子データベース105は、因子抽出部104に抽出された因子コードを保持可能である。以下、因子データベース105を、因子コード保持部(因子コード保持手段)と記載する場合がある。また、因子データベース105が保持する因子コードを、既知因子コードと記載する場合がある。
 成功状態登録部106は、例えば、攻撃対象(コンピュータ等の情報処理装置、又は情報処理装置を含む情報処理システム)に対する攻撃が成功した状態(以下「成功状態」と記載する場合がある)を表すデータを、成功状態データベース107に登録する機能を提供可能である。例えば、プログラム分析システム100のユーザは、成功状態登録部106を用いて、攻撃対象に関する攻撃が成功した状況(例えば、コンピュータの制御が攻撃プログラムに奪われた状況)を表す変数の状態(値)を、プログラム分析システム100(特には成功状態データベース107)に登録可能である。係る変数の状態は、例えば、レジスタや特定のメモリ領域の状態を表してもよい。また、係る変数の状態は、例えば、各種ファイルや、レジストリ等の状態を表してもよい。
 成功状態データベース107は、成功状態登録部106により登録された成功状態を表すデータを保持可能である。以下、成功状態データベース107を、成功状態保持部(成功状態保持手段)と記載する場合がある。
 因子探索部108は、実行ファイル111(後述)を抽象コード(後述)に変換する。また、因子探索部108は、因子データベース105に保持された因子コード(既知因子コード)が、変換された抽象コードに含まれるか否かを確認する処理を実行可能である。また、因子探索部108は、当該処理の結果に基づいて、実行ファイルにマルウェア等の不正ファイルが含まれるか否かを判定する処理を実行可能である。以下、実行ファイル111から変換された抽象コードを、「分析対象抽象コード」と記載する場合がある。
 実行ファイル111は、マルウェア等の不正プログラムを含むか否かの検査が実行されるファイルである。実行ファイル111は、脆弱性データベース101、マルウェアデータベース102及びシステムデータベース103のいずれにも登録されておらず、プログラム分析システム100に入力される。実行ファイル111は、実行可能形式のファイルに限らず、ライブラリファイル等であってもよい。
 判定結果提供部109は、因子探索部108における判定結果に応じて、脆弱性の有無を表す情報(結果情報)を生成する処理を実行可能である。係る結果情報は文字(テキスト)により表されてもよく、図表により表されてもよい。判定結果提供部109は、結果情報を出力装置110に提供可能である。
 出力装置110は、判定結果提供部109から提供された結果情報を出力可能である。出力装置110が結果情報を出力する方法は、特に限定されず、適宜選択可能である。出力装置110は、例えば、各種表示デバイスを用いて結果情報を表示してもよく、結果情報をファイルに出力してもよく、結果情報を他の装置に送信してもよい。
 上記各データベース(脆弱性データベース101、マルウェアデータベース102、システムデータベース103、因子データベース105、及び成功状態データベース107)を実現可能な構成は、特に限定されない。上記各データベースは、例えば、各種データベースソフトウェアを用いて実現されてもよく、ファイルシステムにおけるファイルを用いて実現されてもよい。
 プログラム分析システム100は、変形例として、図1Bに例示するように、実行ファイル調整部112を含んでもよい。実行ファイル調整部112(実行ファイル調整手段)は、実行ファイル111のサイズを低減(短縮)可能か否かを確認する処理を実行可能である。実行ファイル調整部112は、実行ファイル111よりもサイズが小さく、実行ファイル111と同様の処理を実行可能である出力ファイル113を生成する処理を実行可能である。実行ファイル調整部112の具体的な処理については後述する。
 出力ファイル113は、実行ファイル111よりもサイズが小さく、実行ファイル111と同様の処理を実行可能な実行ファイルである。出力ファイル113は、例えば、実行ファイル111の一部が他のコードを用いて置き換えられた実行ファイルであってもよい。
 [数理モデル]
 以下、本実施形態及びその変形例におけるプログラム分析システム100によって実行される、実行コードの数理モデルへの変換について説明する。以下において説明する数理モデル表現を表すデータが、上記説明した抽象コードに相当する。以下、説明の便宜上、実行コードがIntel(登録商標)社のx86アーキテクチャ(32bit)において実行可能な命令列により表されることを想定する。なお、本実施形態はこれには限定されず、他のアーキテクチャについても適用可能である。
 マルウェア等の不正プログラムは、悪意のある(malicious)処理を実行する命令列を含む。また、マルウェア等により攻撃される可能性があるプログラムには、脆弱な実行コードに該当する命令列が含まれる場合がある。
 ある処理を実現可能な命令列の組み合わせは複数存在し得ることから、命令列の複雑な組み合わせを分析することは必ずしも容易であるとは限らない。そこで、プログラム分析システム100は、実行コードに含まれる命令列を数理モデルである写像に変換(抽象化)し、一連の命令列による処理を、写像の合成として表現する。これにより、プログラム分析システム100は、ある実行コードを変換した数理モデルを用いて、当該実行コードを分析(例えば、攻撃コードか否かの判定、脆弱性を有するコードか否かの判定、コードの類似性の判定、コードの置換可能性の判定、等)することが可能である。
 例えば、”n”個目(”n”は自然数)の命令を実行した際の、システム(例えばコンピュータ)の状態を”S”、ある正規の実行コードの数理モデルを”A”、攻撃コードの数理モデルを”B”と表す。システムの状態”S”は、システムに含まれるレジスタ、メモリ、記憶媒体等の状態を含むと想定する。
 正規の実行コードを実行した場合のシステムの状態遷移は、例えば、下式により表される。下式において、”S”は数理モデル”A”に関する入力、”Sn+1”は数理モデル”A”に関する出力であると考えられる。
Figure JPOXMLDOC01-appb-I000001
 攻撃コードを実行した場合のシステムの状態遷移は、例えば、下式により表され得る。
Figure JPOXMLDOC01-appb-I000002
 上式において”B=Cdiff×A”なる関係が満たされる場合、攻撃コードを表す数理モデル”B”は、正規の実行コードを表す数理モデル”A”と、差分”Cdiff”との組み合わせを用いて表され得る。例えば、差分”Cdiff”を小さくするような数理モデル”A”を選択することにより、攻撃コードに特有の特徴(差分”Cdiff”)を低減可能であると考えられる。また、差分”Cdiff”は、攻撃コード特有の特徴であると考えられることから、差分”Cdiff”に相当する数理モデルに変換される実行コードは、攻撃コードである可能性があると考えられる。
 上記のような基礎概念に基づいて、プログラム分析システム100(特には、因子抽出部104、因子探索部108、及び実行ファイル調整部112)は、実行コードに含まれる命令列を、数理モデルである写像(写像を表す関数)の合成に変換する。プログラム分析システム100は、ある命令列から変換した写像を表す関数の左辺に出力ベクトル(後述)を配置し、右辺の末尾には入力ベクトル(後述)を配置する。入力ベクトルは、写像を表す関数に対する引数として扱われる。
 図7に例示する具体例を用いて説明すると、実行コード701に含まれる命令列は、それぞれ写像”f”乃至”f”に変換される。プログラム分析システム100は、実行コードに含まれる命令を、レジスタ及びメモリ(メモリ領域)等の状態を、引数及び戻り値として扱う写像に変換可能である。この場合、1つの命令に対して写像の個数は1以上であってよい。プログラム分析システム100は、例えば、ある命令列と、当該命令列が変換される写像とを関連付ける変換情報(図7の702)を保持し、当該変換情報を用いて、命令列を写像に変換してもよい。係る変換情報は、例えば、命令列と写像とを関連付ける辞書データであってもよい。
 図7に例示する”vin”は、命令列から変換された写像に関する入力ベクトルである。”vout”は、命令列から変換された写像に関する出力ベクトルである。
 以下、上記説明した写像に関する入力ベクトル及び出力ベクトルについて説明する。入力ベクトル及び出力ベクトルは、それぞれ、「実レジスタ」、「仮想レジスタ」、及び、「メモリ参照」のいずれか1以上の要素を含む変数ベクトルを用いて表される。以下、変数ベクトルの要素(即ち、入力ベクトル及び出力ベクトルの要素)を、単に「変数」と記載する場合がある。
 実レジスタは、例えば、マルウェア等が実行される情報処理装置を構成する演算装置(CPU:Central Processing Unit)に実装されたレジスタを表す。実レジスタには、レジスタ名が関連付けられていてよい。具体例として、Intel(登録商標)社のx86アーキテクチャにおいては、上記実レジスタは、汎用レジスタ(GPR:General Purpose Register)であってもよい。実レジスタを含む変数ベクトルの具体例は、例えば、下式のように表されてもよい。
Figure JPOXMLDOC01-appb-I000003
 仮想レジスタは、プログラム分析システム100における計算の都合から導入される仮想的なレジスタである。係る仮想レジスタは、実際のCPUには実装されていなくともよい。仮想レジスタには、当該仮想レジスタを表すレジスタ名が関連付けられていてもよい。
 メモリ参照は、マルウェア等が実行される情報処理装置を構成するメモリ(例えば主メモリ等)に記憶された内容を表す要素である。具体的には、メモリ参照の要素は、当該要素が指すアドレス(メモリ領域のアドレス)の内容を表す。メモリ参照は、要素とアドレス幅を有する。メモリ参照の要素は、例えば、下式のように、角括弧(ブラケット)”[”と、”]”とにより囲まれた形式で表記されてもよい。また、メモリ参照の要素には、アドレス幅を表すビット数(例えば”ref8”、”ref16”、”ref32”等)が関連付けられてもよい。メモリ参照のうち、角括弧(ブラケット)”[”、”]”により囲まれた部分は、参照するメモリのアドレスを表す。以下、メモリ参照のうち、角括弧(ブラケット)”[”、”]”により囲まれた部分を、”アドレス部分”と記載する場合がある。
Figure JPOXMLDOC01-appb-I000004
 情報処理装置が扱うメモリ領域は広大であることから、変数ベクトルの要素に全てのメモリ領域の状態を含めると、計算量が増大する可能性がある。このため、メモリ領域のうち、入出力に直接的に関与する領域が、変数ベクトルの要素に含まれてもよい。
 変数ベクトルの要素には、定数項が含まれてもよい。定数項は、実数定数を表す要素である。プログラム分析システム100においては、定数項は、例えば、図8に例示するように、3次元グラフィックスなどの分野において用いられる同次座標系のベクトル表現を用いて表されてもよい。定数項は、入力ベクトルにのみ現れてもよい。定数を引数として扱う非線形関数の実装を容易にすべく、積演算により写像を統合する過程(後述)では、定数項に”1”以外の値が設定されてもよい。
 変数ベクトルに含まれる全ての要素(変数)には、当該要素が変更された回数を表す添え字が関連付けられてもよい。具体例として、”n”番目(”n”は自然数)の写像を想定する。下式のように、”n”番目の写像により変更される入力ベクトルの要素の添え字には”n-1”が関連付けられ、当該”n”番目の写像により変更された出力ベクトルの要素の添え字は”n”が関連付けられてもよい。
Figure JPOXMLDOC01-appb-I000005
 上記説明したメモリ参照においては、例えば、下式のように、角括弧内の要素(アドレス部分)の添え字(例えば、”vreg”における”2”)と、メモリ参照自体の添え字(例えば、”[vregref16,1”における”1”)とが異なっていてもよい。
Figure JPOXMLDOC01-appb-I000006
 以下、実行コードの写像への変換について説明する。プログラム分析システム100は、実行コードに含まれる命令列を、線形関数、非線形関数及び外部関数のいずれかに変換する。
 線形関数は、変換行列を保持する。当該変換行列と入力ベクトルとの積が、出力ベクトルとして扱われる。線形関数は、単一の変換行列により表されてもよい。即ち、ある命令に対する入力ベクトルが、変換行列を用いて出力ベクトルに変換可能である場合、当該命令は線形関数に変換される。変換行列の具体例については後述する。
 非線形関数は、当該関数の種類を表す識別子と、当該関数による処理(関数の実体)を表す情報とを保持する。非線形関数は、例えば、単純な変換行列により表すことが困難な写像を表す。非線形関数は、変換行列を含まなくともよい。関数による処理を表す情報は、ラムダ式により表現されてもよい。この場合、ラムダ式に対する引数として入力ベクトルを与えると、出力ベクトルが得られる。非線形関数の具体例については後述する。
 外部関数は、関数の種類を表す識別子を保持する。外部関数は、例えば、システムコール等、実行コードが実行される環境(システム)の外で作用する関数を表す。外部関数は、具体的には、例えば、分析対象である実行コードの外部で定義されたシステムコールや、ライブラリ関数であってもよい。
 プログラム分析システム100は、実行コードに含まれる命令列と、写像(後述する写像を表す関数)とを関連付ける変換情報(例えば、テーブルや、マップ等を用いて構成された辞書データ)等を保持してもよい。係る変換情報には、例えば、ある命令列と、当該命令列が変換される写像(上記各関数)との組み合わせが、1以上含まれていて良い。変換情報に含まれる組み合わせは、例えば、一つの命令(例えば”mov”命令等)と、当該命令が変換される写像(例えば、線形写像を表す変換行列等)との組み合わせであってもよい。変換情報に含まれる組み合わせは、複数の命令からなる命令列と、当該命令列が変換される写像との組み合わせであってもよい。プログラム分析システム100には、分析する実行コードが実行されるコンピュータのアーキテクチャ等に応じて、適切な上記変換情報が与えられていてもよい。上記に限定されず、プログラム分析システム100は、予め、ある命令列と、当該命令列が変換される写像との対応関係が組み込まれた状態で実装されてもよい。
 プログラム分析システム100は、実行コードに含まれる命令の内、例えば、図9に例示する命令を、線形関数に変換可能である。線形関数に変換される命令は、図9に例示する命令に限定されず、プログラム分析システム100に適宜設定されていてもよい。図9に例示する命令と、当該命令が変換される線形関数との組み合わせが、上記変換情報に設定されていてもよい。以下、具体例を用いて説明する。
 一つの具体例として、命令列”mov eax ecx”の、数理モデルへの変換について説明する(図10A)。この場合、実レジスタ”eax”に実レジスタ”ecx”が代入(転送)される。即ち、出力ベクトルの実レジスタ”eax”には、入力ベクトルの実レジスタ”ecx”が代入(転送)される。出力ベクトルに含まれる他の要素は、入力ベクトルから変更されない。この場合、図10Aに例示するように、命令列”mov eax ecx”は、図10Aに例示する単一の変換行列”Tmov(eax、ecx)”含む線形関数を用いた写像に変換可能である。
 他の具体例として、命令列”lea eax [ecx]”の、数理モデルへの変換について説明する(図10B)。この場合、実レジスタ”eax”に、メモリ参照”[ecx]”のアドレスが代入(転送)される。即ち、出力ベクトルの実レジスタ”eax”には、入力ベクトルのメモリ参照”[ecx]”のアドレスが代入(転送)される。出力ベクトルに含まれる他の要素は、入力ベクトルから変更されない。この場合、図10Bに例示するように、命令列”lea eax [ecx]”は、単一の変換行列”Tlea(eax、[ecx])”含む線形関数を用いた写像に変換可能である。
 上記のように、代入(転送)命令から変換された変換行列においては、出力ベクトルの要素に代入(転送)される入力ベクトルの要素に対して積の演算が実行される変換行列の要素には非ゼロ(”0”)要素が設定される。変換行列の他の要素はゼロ(”0”)要素に設定されてよい。
 他の具体例として、命令列”push C”(”C”は定数)の、数理モデルへの変換について説明する(図10C)。この場合、スタックポインタ(”esp”)はデクリメント(例えば4バイト分減算)され、スタックのトップに”C”が格納される。即ち、出力ベクトルのメモリ参照”[esp]”が参照するアドレス(スタックポインタが指すスタックの先頭)には、定数Cが格納される。また、出力ベクトルのスタックポインタ”esp”は、入力ベクトルのスタックポインタからデクリメントされる。出力ベクトルに含まれる他の要素は、入力ベクトルから変更されない。この場合、図10Cに例示するように、命令列”push C”は、単一の変換行列”Tpush(C)”含む線形関数を用いた写像に変換可能である。
 他の具体例として、命令列”pop eax”の、数理モデルへの変換について説明する(図10D)。この場合、出力ベクトルの実レジスタ”eax”に、入力ベクトルのスタックポインタ”[esp]”が指すアドレスの内容が格納される。また、出力ベクトルのスタックポインタ”esp”はインクリメント(例えば4バイト分加算)される。この場合、図10Dに例示するように、命令列”pop eax”は、単一の変換行列”Tpop(eax)”含む線形関数を用いた写像に変換可能である。
 以下、x86アーキテクチャにおける”Mod R/M”バイトを含む命令を数理モデルに変換する方法について、図11に示す具体例を用いて説明する。表記を簡略化する観点から、図11に示す具体例においては、入力ベクトル、出力ベクトル、及び変換行列の各要素の内、命令の実行に関係しない要素については省略されている。
”Mod R/M”バイトは、オペコードの直後に配置され、オペコードで使用するレジスタと、アドレッシングモードとを指定するバイトである。
 図11に示す具体例は、命令列”mov dword ptr [eax*2+ebx+4], 1000”を数理モデルに変換する例である。まず、”Mod R/M”を含む部分(アドレス演算)が、仮想レジスタ(”vreg”)を用いて表現される(図11の(A))。即ち、”[eax*2+ebx+4]”により表されるアドレス計算の結果が、仮想レジスタ(”vreg”)に格納される。図11における”T”は、係るアドレス計算に関する変換行列である。上記のように導入された仮想レジスタが指し示すメモリ参照が、数理モデルとして表される(図11の(B))。即ち、仮想レジスタにより参照されるメモリ領域に、即値”1000”が格納される。図11における”T”は、仮想レジスタにより参照されるメモリ領域に対する即値の代入(転送)を表す変換行列である。以上より、図11に例示した”Mod R/M”を含む命令が変換さる数理モデル(”T”)は、2つの変換行列(”T”及び”T”)の積として表される(図11の(C))。
 上記説明した具体例以外の命令についても、例えば、当該命令(及び当該命令を含む命令列)と、当該命令が変換される線形関数との組み合わせが、上記変換情報に予め設定されてもよい。これにより、プログラム分析システム100は、例えば、図9に例示した命令(及び当該命令を含む命令列)を線形関数に変換することが可能である。
 本実施形態におけるプログラム分析システム100は、実行コードに含まれる命令の内、例えば、図12に例示する命令を非線形関数に変換可能である。図12に例示する命令と、当該命令が変換される線形関数との組み合わせが、上記変換情報に設定されていてもよい。非線形関数に変換される命令は、図12に例示する命令に限定されず、プログラム分析システム100に適宜設定されていてもよい。
 一つの具体例として、命令列”movzx eax、 bx”(ゼロ拡張を伴うロード(転送)命令)の、数理モデルへの変換(図13の(A)部分)について説明する。この場合、係る命令は、入力変数とビット幅とを引数として受け付ける非線形関数に変換される。図13の(A)における非線形関数”Fmovzx”は、例えば、入力変数を”x”、ビット幅を”b”とすると、下式のように実装されてもよい。なお、下式において”&”は、論理積演算をあらわす。変数”x”と、”(2-1)”との論理積を計算することで、”x”をゼロ拡張した値が得られる。
Figure JPOXMLDOC01-appb-I000007
 また、命令列”movsx eax、 byte ptr [bl]”(符号拡張を伴うロード(転送)命令)も、上記と同様に、入力変数とビット幅とを引数として受け付ける非線形関数に変換される(図13の(B)部分)。図13の(B)における非線形関数”Fmovsx”は、例えば、入力変数を”x”、ビット幅を”b”とすると、下式のように実装されてもよい。下式において、”Fbt(x、b)”は、”bt”命令を表す非線形関数である。変数”x”の符号を確認した結果に基づいて、符号拡張処理を実行することにより、”x”を符号拡張した値が得られる。
Figure JPOXMLDOC01-appb-I000008
 上記説明した具体例以外の命令についても、例えば、当該命令(及び当該命令を含む命令列)と、当該命令が変換される非線形関数との組み合わせが、上記変換情報に予め設定されてもよい。これにより、プログラム分析システム100は、例えば、図12に例示した命令(及び当該命令を含む命令列)を非線形関数に変換することが可能である。
 以下、プログラム分析システム100による写像の統合処理について説明する。
 プログラム分析システム100は、例えば、図14に示すように複数の命令列が存在する場合(1行乃至10行)、各命令列を、写像”T”乃至”T10”を用いた数理モデルに変換する。
 プログラム分析システム100(特には、因子抽出部104、因子探索部108、実行ファイル調整部112等)は、積の演算処理により写像を統合する。これにより、命令列の表現に用いられる写像の数が低減される。プログラム分析システム100は、係る写像の統合により、例えば、最小限の写像の合成で、命令列を表現することができる。以下、積演算による写像の統合処理について、図15に例示するフローチャートを参照して説明する。以下の処理は、プログラム分析システム100に含まれる、因子抽出部104、因子探索部108、実行ファイル調整部112等により実行されてよい。
 具体的には、プログラム分析システム100は、連続する線形関数の積を演算する(ステップS1501)。プログラム分析システム100は、連続する非線形関数と他の関数との積を演算する(ステップS1502)。プログラム分析システム100は、他に積を演算可能な関数が存在する場合(ステップS1503においてYES)、ステップS1501に戻って処理を続行する。プログラム分析システム100は、他に積を演算可能な関数が存在しない場合、入出力ベクトルを正規化する(ステップS1504)。
 以下、ステップS1501の処理について、図16乃至図19を参照して説明する。図16に模式的に示すように、二つの線形関数(”T”、”T”)が連続している場合、プログラム分析システム100は、これらを積を演算する。これにより、プログラム分析システム100は、二つの写像を、一つの写像”T”に統合する。
 変数ベクトル”v”は、線形関数”T”の出力ベクトルであり、線形関数”T”の入力ベクトルである。そこで、プログラム分析システム100は、線形関数”T”の出力ベクトルと、線形関数”T”の入力ベクトルと、についてそれぞれに含まれる要素の種類及び位置を揃えるように、変数ベクトル”v”を調整する。また、線形関数”T”及び”T”、並びに、変数ベクトル”v”及び”v”の次元を、変数ベクトル”v”に合わせて拡張する。具体的には、変数ベクトル”v”に含まれる変数(要素)の種類と位置とに合わせるように、線形関数(”T”、”T”)の行と列とを拡張する。同様に、変数ベクトル”v”及び”v”の行を拡張する。以下、プログラム分析システム100による上記処理を、行列拡大処理と記載する場合がある(ステップS1701)。
 プログラム分析システム100は、入力ベクトル及び出力ベクトルの各要素(変数)に、添え字を添付(関連付け)する。実行コードの内、”n”(”n”は自然数)行目の命令列から変換された数理モデルの出力ベクトルに含まれる要素には、添え字として”n”が添付される。”n”(”n”は自然数)行目の命令列から変換された数理モデルの入力ベクトルに含まれる要素には、添え字として”n-1”が添付される。なお、メモリ参照のアドレス部分(角括弧”[”、”]”に囲まれた部分)については、入力ベクトルのアドレス部分と、出力部分のアドレス部分とが(添え字も含めて)同じであってもよい。上記処理を、変数添え字添付処理と記載する場合がある。変数添え字添付処理において、プログラム分析システム100は、例えば、入力ベクトル及び出力ベクトルの各要素を表すデータに対して、添え字を表すデータを付加データとして関連付けてもよい。あるデータに対して付加データを関連付ける具体的な方法は、例えば、テーブル、構造体、ポインタを用いる方法等、適切な方法を選択してよい。
 プログラム分析システム100は、ある命令から変換された数理モデルの出力ベクトルに含まれた要素(変数)とその添え字との組を、当該命令より後の命令から変換された数理モデルの出力ベクトルに含めてよい。例えば、”i”(”i”は自然数)番目の命令から変換された数理モデルの出力ベクトル”v”に、要素”a”(変数”a”と、その添え字”i”との組)が含まれる場合、プログラム分析システム100は、”i+1”番目以降の命令から変換された数理モデルの出力ベクトルに、要素(変数)”a”を含めてよい。以下、上記処理を「変数伝搬処理」と記載する場合がある。
 図18に示す具体例を用いて説明すると、命令列1801の1行目(”pop edx”)の出力ベクトルは、要素”edx”と、”esp”を含み、命令列1801の2行目(”add ecx edx”)の入力ベクトルは、要素”ecx”と、”edx”とを含む。これより、プログラム分析システム100は、要素”ecx”、”edx”及び”esp”を含むよう、変数ベクトル”v”を調整する。プログラム分析システム100は、変数ベクトル”v”に含まれる要素の種類と位置に合わせて、各命令列から変換された数理モデル(変換行列)”T”及び”T”の行と列とを拡張する。プログラム分析システム100は、数理モデル(変換行列)”T”及び”T”の入力ベクトル及び出力ベクトルに対して添え字を添付する。
 プログラム分析システム100は、各命令列から変換された数理モデル(変換行列)”T”と”T”との積を演算する(ステップS1702)。図18に示す具体例では、係る積演算処理により、”T”と”T”とが統合され、2つの命令列が、一つの変換行列”T”により表される。
 プログラム分析システム100は、ステップS1702に統合された変換行列の次元を削減する処理である、次元削減処理を実行する(ステップS1703)。係る次元削減処理には、例えば入力ベクトル”v”の次元を削減することで、変換行列”T”の列を削減する処理が含まれてもよい。また、係る次元削減処理には、出力ベクトル”v”の次元を削減することで、変換行列”T”の行を削減する処理が含まれてもよい。
 プログラム分析システム100は、例えば、出力ベクトルに含まれる要素(変数)のうち、異なる添え字が添付された変数を削減してよい。具体的には、プログラム分析システム100は、以下の各処理を実行してよい。プログラム分析システム100は、出力ベクトルに含まれる変数が実レジスタ又はメモリ参照であり、異なる添字を持つ同じ変数が存在しない場合、その変数と添字との組は最終状態であると判定してよい。この場合、プログラム分析システム100は、係る変数に関する処理を終了してよい。プログラム分析システム100は、出力ベクトルに含まれる、ある変数とその添え字との組が最終状態ではなく、他の変数(例えばメモリ参照等)との関連を有しない場合、その変数と添え字との組を削除する。
 プログラム分析システム100は、以下の変数の正規化処理と、状態の正規化処理とを実行する(ステップS1704)。変数の正規化処理は、定数であることが確定している変数を抽出し、定数項に移動する処理である。プログラム分析システム100は、変数の優先順位(例えば図20)に基づいて、変数ベクトルに出現する変数の種類を低減する。状態の正規化処理は、出力ベクトルに含まれる全てのメモリ参照を、最終状態の変数により表す処理である。なお、プログラム分析システム100は、ステップS1703乃至S1704の処理を、出力ベクトルが変化しなくなるまで繰り返してもよい。
 図19に示す具体例を用いて説明する。図19に示す具体例において、プログラム分析システム100は、実行コード(図19の1901)に含まれる各命令列を数理モデル(図19の1902)に変換する。プログラム分析システム100は、上記説明した行列拡大処理(ステップS1701)及び積演算処理(ステップS1702)を実行し、統合された変換行列と、その入力ベクトル、出力ベクトルとを得る(図19の1903)。
 出力ベクトルに含まれる変数”eax”は、”eax”に依存している。また、出力ベクトルに含まれる変数”eax”は、定数”1000”に依存している。よって、変数”eax”は、定数により表される。入力ベクトルの変数である”eax”は、定数(”1000”)であることが確定していることから、入力ベクトルの変数を正規化することで、入力ベクトルの次元が縮小される。これにより、変換行列の列が縮小される(図19の1904)。
 入力ベクトルの変数である”eax”は、定数(”1004”)により表されることから、出力ベクトルの正規化と、状態の正規化と実行することで、変換行列の行が縮小される(図19の1905)。
 以下、非線形関数を含む積演算(図15のステップS1502)について説明する。
 一例として、合成された写像を表す数理モデル”T=T×T”において、数理モデル”T”が非線形関数であり、数理モデル”T”が線形関数である場合を想定する。線形関数”T”の出力ベクトルに含まれる定数の集合と、非線形関数”T”の入力ベクトルに含まれる変数の集合との論理積が空でない場合、非線形関数”T”は、他の線形関数に変換できる可能性がある。この場合、プログラム分析システム100は、非線形関数”T”を線形関数に変換してから、上記した線形関数同士の積演算を実行してよい。非線形関数”T”を線形関数に変換できない場合、プログラム分析システム100は、入力ベクトルに対して線形関数”T”を適用し、その結果に対して非線形関数”T”を適用してよい。
 具体例として、”T”がデータ代入(転送)命令(例えば、”mov ebx C”(Cは定数))から変換された線形関数であり、”T”が乗算命令(例えば”mul ebx”)から変換された非線形関数である場合を想定する。この場合、合成写像”T”は、”T=mulmov”(記号””は、合成写像を表す)と表される。なお、”mul”命令を実行すると、レジスタ”eax”に格納された値と、”mul”命令に与えられたオペランドと乗算が行われ、その乗算結果の上位部分はレジスタ”edx”に、下位部分はレジスタ”eax”に格納されることを想定する。このような命令列は、例えば以下のような疑似コードにより表される。
Figure JPOXMLDOC01-appb-I000009
 例えば、”ebx=1”が成立する場合(例えば”mov ebx n(n:定数)”等の命令が実行された場合等)、”mul ebx”命令を実行しても、”eax”の値は変わらない。また、”ebx=0”の場合、”mul ebx”命令を実行すると、”eax”には”0”が格納される。いずれの場合においても、”edx”には”0”が格納される。これは、例えば、以下のような疑似コードにより表される。
Figure JPOXMLDOC01-appb-I000010
 上記の場合、”mov”命令から変換された線形関数の出力ベクトルに定数(この場合は”ebx=0”、”ebx=1”)が含まれる。即ち、この場合の定数の集合は”ebx”である。また、”mul”命令から変換された非線形関数の入力ベクトルには”ebx”、”eax”が含まれる(即ち、入力ベクトルの変数の集合には、”ebx”、”eax”が含まれる)。よって、線形関数の出力ベクトルに含まれる定数の集合(この場合は”ebx”)と、非線形関数の入力ベクトルに含まれる変数の集合(この場合は”eax”、”ebx”)とには、”ebx”が含まれる。この場合、”mul”命令から変換された非線形関数は、線形関数に変換可能である。なお、”ebx=0”または、”ebx=1”が成立しない場合、”mul”命令から変換された非線形関数は、線形関数には変換されない。
 別の例として、合成された写像を表す数理モデル”T=T×T”において、数理モデル”T”、”T”がともに非線形関数である場合を想定する。この場合、逆射の定義から、一方の写像が他方の(偏)逆写像であるとき、これらの写像は恒等写像に変換され得る。
 具体例として、”T”が乗算命令(例えば、”mul ebx”)から変換された非線形関数であり、”T”が除算命令(例えば”div ebx”)から変換された非線形関数である場合を想定する。この場合、合成写像”T”は、”T=divmul”(記号””は、合成写像を表す)と表される。このような命令列は、例えば、以下のような疑似コードにより表される。
Figure JPOXMLDOC01-appb-I000011
 ここで、ebxが”0”(ゼロ)ではない場合、”eax”の値は変わらない。なぜなら、同じ値(”ebx”)を乗算した後に除算しているからである。また、”edx”には”0”が設定される。これは、例えば、以下のような疑似コードにより表される。
Figure JPOXMLDOC01-appb-I000012
 以上より、数理モデル”T”、”T”のうち、一方の写像が他方の逆写像であるとき、これらを合成した写像”T”は、入力ベクトルを写像した結果を更に逆写像する処理に相当することから、恒等写像であると考えられる。上記具体例では、”div”命令が”mul”命令の逆写像であることから、”T=divmul”なる写像を恒等写像として扱うことが可能な場合がある。
プログラム分析システム100は、例えば、恒等写像を”nop”命令に相当する写像として扱い、当該写像に関する処理を実行せずともよい。プログラム分析システム100は、数理モデル”T”、”T”を恒等写像として扱えない場合、入力ベクトルに対して非線形関数”T”を適用し、その結果に対して非線形関数”T”を適用してよい。
 以下、入出力ベクトルの正規化(図15のステップS1504)について説明する。プログラム分析システム100は、入力ベクトルに含まれる要素(変数)の優先順位に基づいて、入力ベクトルの行の順序を並び替え(ソート)する。プログラム分析システム100は、出力ベクトルに含まれる要素(変数)の優先順位に基づいて、出力ベクトルの行の順序を並び替え(ソート)する。変数の優先順位は、例えば、図20に例示するように、予め定められていてもよい。なお、図20に示す優先順位は、一つの具体例であり、変数の優先順位は適宜定められてよい。
 また、プログラム分析システム100は、例えば、図21に例示するように、入力ベクトルの定数項が”1”となるように、当該入力ベクトルを調整する。
 上記した処理により、プログラム分析システム100は、実行コードの命令列を、数理モデルに変換することができる。上記したように、実行コードから変換された数理モデルは抽象コードに相当する。プログラム分析システム100は、写像の合成処理を実行することにより、複数行からなる実行コードを、1以上の抽象コードに変換することができる。
 [動作]
 以下、図2、図3、図4及び図5の各図に例示するフローチャートを参照して、本実施形態におけるプログラム分析システム100の動作について説明する。
 図2は、因子抽出部104の動作の具体例を表すフローチャートである。図2に例示する処理は、例えば、所定のタイミング(例えば、所定時間ごと)で実行されてもよい。
 因子抽出部104は、脆弱性データベース101、マルウェアデータベース102、及び、システムデータベース103のそれぞれから検体(検体の実行コード)を読み込む(ステップS201)。
 因子抽出部104は、検体に含まれる実行コード(例えば、機械語コード)を、抽象コードに変換する(ステップS202)。この際、因子抽出部104は、例えば、検体の実行コードに含まれる実行コードを、逆アセンブルなどの静的解析手法を用いて解析してもよい。因子抽出部104は、例えば、実行コードの解析結果(例えば、アセンブラコード)と、抽象コードとを関連付ける、上記説明した変換情報(例えば、変換テーブルや変換マップ等)を保持し、当該変換情報を用いて、実行コードを抽象コードに変換してもよい。抽象コードは、上記したように、抽象化された変数名により表される入力ベクトル及び出力ベクトルと、それらの間の写像を表す関数と、から構成される。以下、因子抽出部104が、上記各データベースに含まれる検体から変換した抽象コードを、「既知抽象コード」と記載する場合がある。
 因子抽出部104は、例えば、実行コードを、特定の中間形式を用いて表されるデータ(中間データ)に変換し、当該変換されたデータを、更に抽象コードに変換してもよい。因子抽出部104は、例えば、実行コードを、SSA形式(static single assignment form)の中間データに変換してもよい。この場合、上記変換情報には、実行コードに含まれる命令列と、当該命令列から変換される中間データとの組み合わせと、ある中間データと、当該中間データから変換される数理モデルとの組み合わせとが含まれてもよい。
 因子抽出部104は、実行コードから変換した数理モデルに対して、上記説明した写像の統合処理を実行してもよい。
 因子抽出部104は、抽象コードを不可分な(互いに素な)因子コードに分解する(ステップS203)。因子コードは、実行コードを数理モデルに変換して表したデータである。ある因子コードと、他の因子コードとに、ある出力ベクトルの変数が共通して含まれるような依存関係が存在しない場合、それらの因子コードは、互いに素な因子コードである。因子コードは、例えば、1つ乃至2つの変数に対する演算を表す数理モデルである。抽象コードは、例えば、因子コードの集合によって表現され得る。
 因子抽出部104は、何らかの手法を用いて、抽象コードを表す行列を分解することで、抽象コードを、因子コードに分解する。因子抽出部104は、例えば、周知の行列分解手法(例えば、LU分解、特異値分解(SVD:singular value decomposition)、主成分分解)等を用いて抽象コードを表す行列を分解した結果を用いて、抽象コードを因子コードに分解してもよい。抽象コードを表す行列を分解する方法は上記に限定されない。例えば、抽象コードを表す行列と、何らかのベクトルとの積の演算結果における各行が互いに素である場合、それらの各行を因子コードとして扱ってもよい。
 因子抽出部104は、因子コードとその並び順、及び、仮想メモリ上のアドレスを因子データベース105に登録する(ステップS204)。因子抽出部104は、因子コードだけではなく、抽象コードを因子データベース105に登録してもよい。
 図3は、成功状態登録部106の動作の具体例を示すフローチャートである。成功状態登録部106は、例えば、プログラム分析システム100の利用者からの要求に応じて処理を開始してよい。
 成功状態登録部106は、保護対象であるシステムや装置(コンピュータ、インフラなど)に関する攻撃が成功した状態(成功状態)を表す情報を、プログラム分析システム100の利用者から受け付ける(ステップS301)。あるシステムに関する攻撃が成功した状態は、例えば、当該システムに関する制御が攻撃者に奪われた状態に相当する。攻撃が成功した状態を表す情報は、例えば、特定の変数、メモリ領域、ファイル等の状態を表す情報であってもよい。成功状態登録部は、例えば、攻撃が成功した状態を表す数理モデル表現を表す情報(データ)を、利用者から受け付けてもよい。成功状態登録部106は、例えば、利用者に対して、攻撃が成功した状態を表す数理モデルを作成するためのインタフェース等を提供してもよい。
 成功状態登録部106は、利用者から提供された、攻撃が成功した状態を表す情報を、成功状態データベース107に登録する(ステップS302)。
 図4は、因子探索部108の動作の具体例を示すフローチャートである。因子探索部108は、例えば、プログラム分析システム100の利用者からの要求に応じて処理を開始してよい。
 因子探索部108は、検査対象である実行ファイル111の実行コード(例えば、機械語コード)を抽象コードに変換する(ステップS401)。実行ファイル111は、例えば、脆弱性データベース101、マルウェアデータベース102、及び、システムデータベース103のいずれにも登録されていない、未知の実行ファイルであってよい。
 因子探索部108は、上記因子抽出部104と同様、実行コードに含まれる命令と、抽象コード(数理モデル)とを関連付ける変換情報(例えば、変換テーブルや変換マップ等)を保持し、当該変換情報を用いて、実行コードを抽象コードに変換してもよい。例えば、係る変換情報には、実行コードに含まれるある命令列と、当該命令列から変換される数理モデル(線形関数、非線形関数、外部関数等)とが関連付けて設定されていてもよい。
 因子探索部108は、ステップS401において検査対象である実行ファイル111の実行コードから変換した抽象コードに、因子データベース105に登録された因子コード(既知因子コード)が含まれるか否かを確認する(ステップS402)。因子探索部108は、例えば、ステップS401において変換した抽象コードを因子コード(「分析対象因子コード」と記載する場合がある)に分解してもよい。因子探索部108は、因子データベース105を検索し、分解した因子コード(分析対象因子コード)に相当する因子コード(既知因子コード)が因子データベース105に登録されているか否かを確認してもよい。この際、因子探索部108は、因子データベース105に登録された因子コード(既知因子コード)のうち、脆弱性データベース101及びマルウェアデータベース102に登録された検体から抽出された因子コードを検索してもよい。
 実行ファイル111から変換した抽象コードに、因子データベース105に登録された因子コードが含まれなかった場合(ステップS402においてNO)、因子探索部108は、係る抽象コードに可換性を有する因子コードが含まれるか確認する。可換性を有する因子コードとは、抽象コードに含まれる因子コードのうち、その位置や実行順序を並べ替えた場合に、並べ替える前と同等の実行結果が得られる因子コードである。因子探索部108は、例えば、抽象コードに含まれる1以上の因子コードを並べ替えても抽象コードの出力ベクトルが変わらない場合、当該1以上の因子コードを、可換性を有する因子コードであると判定してもよい。
 実行ファイル111から変換した抽象コードに、可換性を有する因子コードが含まれる場合、因子探索部108は、当該抽象コードにおいて部分的に因子コードを並べ替える。そして、因子探索部108は、因子コードを並べ替えた後の抽象コードに、因子データベース105に登録された因子コードが含まれるか否かを確認する(ステップS403)。
 因子データベース105に登録された因子コードが、ステップS403において並べ替えられた抽象コードに含まれない場合(ステップS404においてNO)、因子探索部108は、実行ファイル111に関する脆弱性が存在しないと判定し(ステップS406)、処理を終了してよい。
 因子データベース105に登録された因子コードが、ステップS403において並べ替えられた抽象コードに含まれる場合(ステップS404においてYES)、因子探索部108は、ステップS405から処理を実行する。また、ステップS402においてYESの場合も、因子探索部108は、ステップS405から処理を実行する。
 ステップS405において、因子探索部108は、実行ファイル111の最終的な動作状態である最終動作状態が、成功状態データベース107に登録された成功状態を表す情報に含まれるか否かを判定する(ステップS405)。最終動作状態は、例えば、実行ファイル111の実行が終了した際の状態として、実行ファイル111から変換された抽象コードにおける写像が実行された後の出力ベクトルの状態(より具体的には、当該出力ベクトルに含まれる要素)を表してもよい。
 最終動作状態が成功状態と合致する(又は、最終動作状態に成功状態が含まれる)場合(ステップS405においてYES)、因子探索部108は、実行ファイル111に関する脆弱性が存在する、と判定する(ステップS407)。この場合、因子探索部108は、実行ファイル111に攻撃コードが含まれると判定してよい。ステップS405におおいてNOの場合、因子探索部108は、実行ファイル111に関する脆弱性が存在しない判定する(ステップS406)。この場合、因子探索部108は、実行ファイル111に攻撃コードが含まれないと判定してよい。因子探索部108は、上記判定結果を、判定結果提供部109に提供してよい。
 図5は、判定結果提供部109の動作の一例を表すフローチャートである。判定結果提供部109は、因子探索部108における判定結果から、実行ファイル111に関する脆弱性の有無を確認し、当該判定結果を表す情報(データ)を生成する(ステップS501)。判定結果提供部109は、係る情報を文字乃至図表を用いて表現するデータを生成してもよい。
 判定結果提供部109は、生成したデータを、出力装置110に提供する(ステップS502)。
 以下、プログラム分析システム100が、変形例として、実行ファイル調整部112を含む場合の処理について説明する。
 図6は、実行ファイル調整部112の動作の具体例を表すフローチャートである。
 実行ファイル調整部112は、実行ファイル111の実行コードを抽象コードに変換する(ステップS601)。実行ファイル111は、例えば、利用者から提供されるマルウェアの検体であってもよい。実行ファイル調整部112は、上記因子抽出部104、因子探索部108と同様の処理により、実行ファイル111の実行コードを抽象コードに変換してもよい。また、実行ファイル調整部112は、抽象コードを、因子コードに分解してもよい。
 実行ファイル調整部112は、実行ファイル111から変換した抽象コードと、因子データベース105に登録された因子コードとを比較し、因子データベース105に登録された因子コードを部分的に用いて、元の抽象コードの長さを短縮(即ち、コードサイズを低減)可能か確認する。この際、実行ファイル調整部112は、例えば、実行ファイル111から変換した抽象コードを部分的に置き換えても、最終的な出力ベクトルに影響しないよう、抽象コードを調整可能であるか確認してもよい。
 実行ファイル調整部112は、元の抽象コードのコード長を短縮可能な場合、元の抽象コードの少なくとも一部を、因子データベース105に登録された因子コードに置き換える(ステップS602)。具体的には、実行ファイル調整部112は、例えば、実行ファイル111から変換した抽象コードの少なくとも一部を、システムデータベース103に登録された検体から抽出された因子コードに置き換える。これにより、あるシステムにおける通常の(正規の)実行コードに含まれる命令を用いて、実行ファイル111に含まれる実行コードの一部を置き換えることが可能である。
 ステップS602において、実行ファイル調整部112は、因子データベース105に保持している因子コードの集合に対して、抽象コードの長さが最小になるまで上記処理を繰り返してよい。
 実行ファイル調整部112は、ステップS602において置換された抽象コードを、実行コードに変換し、出力ファイル113を出力してもよい(ステップS603)。実行ファイル調整部112は、例えば、上記変換情報を参照して、抽象コードを、命令列に逆変換することで実行コードを生成してもよい。実行ファイル調整部112は、例えば、実行コードに対してアセンブル、リンク等の処理を実行することで実行ファイル111を生成してもよい。
 [具体例]
 以下、具体例を用いて、上記のように構成されたプログラム分析システム100について説明する。本具体例の構成は、図1A及び図1Bに例示する構成と同様である。
 例えば、プログラム分析システム100の利用者は、メンテナンス作業等を通じて、脆弱性データベース101、マルウェアデータベース102、及び、システムデータベース103に、検体を登録する。
 また、本具体例においては、プログラム分析システム100は、命令列と抽象コードとを関連付ける変換情報(辞書データ)として、例えば、図22に例示するようなデータを保持することを想定する。因子抽出部104、因子探索部108、及び、実行ファイル調整部112は、例えば、係る変換情報を用いて、各種実行コードを、抽象コードに変換することができる。因子抽出部104は、上記各データベースに登録された検体を解析し、因子データベース105に因子コードを登録する。本具体例においては、因子データベース105に、例えば、図23に例示するような成功状態を表す情報が登録されていることを想定する。図23に例示された因子コードにおいて、”m”、”n”には適切な数値が設定されてよい。図23に例示された因子コードは、例えば、”(mov DWORD PTR[esp+n],m)”と表される実行コードから変換された数理モデルであってもよい。
 プログラム分析システム100の利用者は、成功状態登録部106を用いて、システムに対する攻撃が成功した状態を表す情報を成功状態データベース107に登録する。本具体例においては、成功状態データベース107に、例えば、図24に例示するような成功状態を表す情報が登録されていることを想定する。
 本具体例においては、図25Aに例示するような実行コード2501により表される実行ファイル111を検査することを想定する。例えば、保護対象であるシステムにおいて発見された未知の実行ファイル(実行ファイル111)が、脆弱性を利用する不正プログラム(マルウェア等)であるか否か検査する場合、利用者は、実行ファイル111をプログラム分析システム100に提供する。因子探索部108は、提供された実行ファイル111を抽象コードに変換する。例えば、因子探索部108は、図25Aに例示する実行コードに含まれる12行の命令を、図22に例示する変換情報等を用いて写像に変換する。係る変換の結果、例えば、図25Aに例示する実行コードの各行は、図25Bに例示する数理モデルに変換可能である。因子探索部108は、例えば、図25Bに例示する各数理モデルについて、積演算による写像の統合処理を実行する。係る処理により、図25Aに例示する実行コードは、図26Aに例示する抽象コード2601に変換可能である。因子探索部108は、例えば、図26Aに例示する抽象コードを因子コードに分解することで、図26Bに例示する因子コード2602を得ることができる。
 因子探索部108は、因子データベース105を検索し、分解した因子コードに相当する因子コードが因子データベース105に登録されているか否かを確認する。本具体例においては、因子コード2602の因子コード”([esp+392])=(1)×([[esp+4]+4])”に相当する因子コードが、因子データベース105に登録されている。
 因子探索部108は実行コード2501の最終動作状態(即ち、抽象コード2601の出力ベクトルのうち、最終状態にある変数)と、成功状態データベース107に登録された、成功状態を表す情報とを比較する。本具体例においては、抽象コード2601の出力ベクトルのうち、”([esp+392])”について、”([esp+392])=(1)×([[esp+4]+4])”が成立する。そして、成功状態を表すデータとして、”([esp+n])=(1)×(m)”が成功状態データベース107に登録されている(図24)。以上より、因子探索部108は、実行コード2501について、マルウェアであると判定する。
 因子探索部108は、上記判定結果を判定結果提供部109に提供する。判定結果提供部109は、上記判定結果を表す情報(データ)を生成し、出力装置110に提供する。プログラム分析システム100のユーザは、出力装置110の出力(例えば、画面表示等)を介して、実行ファイル111に関する検査結果を確認する。
 以下、プログラム分析システム100の変形例として、利用者が、例えばペネトレーションテストを実施する目的で、実行ファイル111(実行コード2501)を実行ファイル調整部112に提供する場合を想定する。以下においては、システムデータベース103に、図27に例示する実行コード2701が、既知の実行コードとして登録されていることを想定する。係る実行コード2701は、例えば、あるシステムにおける通常の(正規の)の処理であってよい。また、実行コード2701は、図28Aに例示するように、抽象コード2801に変換可能であること、及び、当該抽象コード2801を分解した因子コード2802(図28B)が、因子データベース105に登録されていることを想定する。
 実行ファイル調整部112は、因子探索部108と同様に、実行ファイル111(実行コード2501)を解析し、抽象コード2601と、因子コード2602とを得る。
 実行ファイル調整部112は、因子コード2602と、因子データベース105に登録された因子コード2802とを比較する。この場合、因子コードのうち、”eax”、”[esp-8]”の項は共通している。即ち、因子コード2802のうち、”[esp-12]”、及び”edx”の項による影響を排除できれば、実行コード2701を用いて、実行コード2501の少なくとも一部を置換可能である。これより、実行ファイル調整部112は、実行コード2501の一部を、実行コード2701の呼出しに置換することで、実行コード2501のコード長を短縮する。
 具体的には、実行ファイル調整部112は、一時退避メモリ領域”X”、”Y”を用いて、実行コード2501を、図29に例示する短縮された実行コード2901に変換する。実行コード2901においては、一時退避メモリ領域”X”、”Y”を用いて、”[esp-12]”、及び”edx”の値を一時的に対比する。そして、実行コード2701を呼び出す(”call”)することで、実行コード2701に実装された処理を実行する。そののち、一時退避メモリ領域”X”、”Y”に退避した”[esp-12]”、及び”edx”の値を元に戻す。これにより、実行コード2701の実行に伴う、”[esp-12]”、及び”edx”への影響を排除可能である。また、実行コード2901は、元の実行コード2501に比べてコード長が短縮されている。即ち、実行ファイル調整部112は、実行コード2501のコード長を短縮可能である。実行ファイル調整部112は、実行コード2901を含む出力ファイル113を出力してよい。
 利用者が、例えば、出力ファイル113を用いて、検査対象のシステムに対するペネトレーションテストを実施可能である。出力ファイル113に含まれる実行コード2901は、実行コード2501よりもコードサイズが短い。また、実行コード2901における処理の大部分は、実行コード2701(システムにおける通常の処理)により実行される。即ち、出力ファイル113は、システムにおいて実行される通常の(正当な)処理との区別が容易ではなく、コードサイズが小さいという特徴を有する。係る出力ファイル113を用いることで、利用者は、より高度なテストを実行することが可能であると考えられる。
 上記のように構成されたプログラム分析システム100は、ある実行コードが攻撃コードであるか否かを判定可能であり、未知の攻撃コードを検出することが可能である。その理由は、以下の通りである。プログラム分析システム100は、検査される実行コードから変換された数理モデル(因子コード)と、既知の脆弱性、マルウェア及びシステム等の検体から変換された数理(因子コード)モデルとを比較する。これにより、プログラム分析システム100は、検査される実行コードに、攻撃コードに相当する因子が含まれるか確認可能である。また、プログラム分析システム100は、検査される実行コードの最終動作状態と、あるシステムに関する攻撃が成功した状態である成功状態とを比較する。これにより、プログラム分析システム100は、検査される実行コードを実行することにより、なんらかの攻撃が成功するか否かを判定可能である。即ち、プログラム分析システム100は、実行コードに攻撃の因子が含まれるか否かと、当該実行コードが実行された状態が(既知の)攻撃成功状態にあるか否かという観点から、実行コードを検査する。これにより、プログラム分析システム100は、例えば、脆弱性が未知であるか既知であるかによらず、係る脆弱性を攻撃する実行コードを検出することが可能である。以上より、プログラム分析システム100によれば、例えば、未知の脆弱性を利用する実行コードを検出することにより、ゼロデイ攻撃を抑止することが期待される。
 また、プログラム分析システム100の変形例においては、例えば、持続的に活動可能な不正プログラムによる活動を検知する能力を改善することが期待される。その理由は、以下の通りである。即ち、プログラム分析システム100は、持続的活動を実施する不正プログラムは、比較的コードサイズが小さいという特性を考慮して、検査対象の不正プログラムを構成する因子コードを置き換えることで、コードのサイズを削減する。これにより、プログラム分析システム100は、コードサイズが比較的小さい不正プログラムが侵入した場合を想定した検査(テスト)に適用可能な実行コードを生成可能である。即ち、プログラム分析システム100は、コードサイズが比較的小さい不正プログラムを用いたペネトレーションテストを実施することができる。
 プログラム分析システム100を上記のように構成することで、検査対象のプログラムの内容を適切に分析することが可能であり、その結果を用いて、不正プログラムによる攻撃を抑制し得る。
 <第2の実施形態>
 以下、本開示に係る技術の基本的な実施形態である、第2の実施形態について説明する。
 図30は、本実施形態におけるプログラム分析システム3000の機能的な構成を例示するブロック図である。図30に例示するように、本実施形態におけるプログラム分析システム3000は、因子コード保持部3001(因子コード保持手段)と、成功状態保持部3002(成功状態保持手段)と、因子探索部3003(因子探索手段)と、を備える。
 因子コード保持部3001は、既知の実行コードを数理モデルに変換して表したデータである、既知因子コードを保持する。因子コード保持部3001は、例えば、データベースあるいはファイルシステムにおけるファイルを用いて実現可能である。因子コード保持部3001は、上記第1の実施形態における、因子データベース105と同様に構成されてもよい。
 因子コード保持部3001には、例えば、上記第1の実施形態と同様、既知の脆弱性を攻撃する攻撃コードの検体、既知のマルウェアの検体、及び、システムにおける通常の(正規の)実行コードの検体等から抽出された既知因子コードが登録されてもよい。
 成功状態保持部3002は、不正プログラムによる攻撃が成功した状態を表す成功状態情報を保持する。成功状態保持部3002は、例えば、データベースあるいはファイルシステムにおけるファイルを用いて実現可能である。成功状態保持部3002は、上記第1の実施形態における、成功状態データベース107と同様に構成されてもよい。
 因子探索部3003は、検査対象の実行コードを数理モデルに変換して表したデータである、分析対象抽象コードを生成する。因子探索部3003は、生成した分析対象抽象コードに、因子コード保持部3001に保持された既知因子コードが含まれるか否かを判定する処理を実行する。また、因子探索部3003は、検査対象の実行コードの実行が終了した際の状態が、成功状態保持部3002に保持された成功状態情報に含まれるか否かを判定する処理を実行する。因子探索部3003は、これの処理の結果に応じて、検査対象の実行コードが不正プログラムであるか否かを判定する。
 因子探索部3003は、例えば、分析対象抽象コードに、因子コード保持部3001に保持された既知因子コードが含まれるとともに、検査対象の実行コードの実行が終了した際の状態が、成功状態保持部3002に保持された成功状態情報に含まれる場合、検査対象の実行コードが不正プログラムであると判定してもよい。
 上記数理モデルは、上記第1の実施形態と同様、ある実行コードに含まれる命令を、1以上の写像と、写像に関する入力ベクトル及び出力ベクトルとを用いて表すモデルであってもよい。係る数理モデルは、上記第1の実施形態と同様、線形関数、非線形関数、外部関数のいずれかにより表されてもよい。
 因子探索部3003は、検査対象の実行コードに含まれる1以上の命令列を写像に変換し、変換された1以上の写像を積演算により統合することで、分析対象抽象コードを生成してもよい。
 因子探索部3003は、例えば、検査対象の実行コードに含まれる命令と、当該命令を表す写像とを関連付ける変換情報を用いて、検査対象の実行コードに含まれる1以上の命令列を、写像に変換してもよい。
 因子探索部3003は、例えば、上記第1の実施形態における因子探索部108と同様の機能を実現するよう構成されてもよい。
 また、本実施形態におけるプログラム分析システム3000は、変形例として、実行ファイル調整部3004を更に備えてもよい(図31)。
 実行ファイル調整部3004は、例えば、検査対象の実行コードを、変換情報を用いて分析対象抽象コードに変換するとともに、その分析対象抽象コードを更に分析対象因子コードに分解することができる。
 実行ファイル調整部3004は、例えば、分析対象抽象コードに含まれる分析対象因子コードの少なくとも一部を、因子コード保持部3001に保持された既知因子コードに置換することで、検査対象の実行コードのサイズを低減可能か判定してよい。実行ファイル調整部3004は、検査対象の実行コードのサイズを低減可能である場合には、分析対象抽象コードに含まれる分析対象因子コードの少なくとも一部を、因子コード保持部3001に保持された既知因子コードに置換してよい。
 本開示に係るプログラム分析システム3000を上記のように構成することで、例えば、未知の不正プログラムに起因した攻撃を抑止し得る。その理由は、プログラム分析システム3000(特には因子探索部3003)は、検査対象の実行コードをから取得した分析対象因子コードと、不正プログラムに含まれる既知因子コードとを比較することで、検査対象の実行コードに攻撃の因子が含まれるか否かを判定可能だからである。また、本開示に係るプログラム分析システムは、ある検査対象の実行コードを実行した後の状態が、攻撃が成功した状態(成功状態)にあるか否かを判定可能だからである。
 また、本開示に係るプログラム分析システム3000をこのように構成することで、例えば、持続的に活動可能な不正プログラムによる活動を検知する能力が改善され得る。その理由は、以下の通りである。持続的活動を実施する不正プログラムは、他の不正プログラムと比べてコードサイズが小さいという特性があると考えられる。そこでプログラム分析システム3000(特には実行ファイル調整部3004)は、検査対象の実行コードを構成する分析対象因子コードを置き換えることで、検査対象の実行コードのサイズを低減する。これにより、係るプログラム分析システム3000は、コードサイズが比較的小さい不正プログラムが侵入した場合を想定した検査(テスト)に適用可能な出力ファイルを生成可能である。即ち、係るプログラム分析システム3000により、コードサイズが比較的小さい不正プログラムを用いたペネトレーションテストを実施することができる。
 本開示に係るプログラム分析システム3000を上記のように構成することで、検査対象のプログラムの内容を適切に分析することが可能であり、その結果を用いて、不正プログラムによる攻撃を抑制し得る。
 上記各実施形態においては、本開示に係る技術をプログラム分析システム(100、3000)に適用した例として説明した。上記各実施形態では、例えば、プログラム分析システム(100、3000)を動作させることによって、本開示に係るプログラム分析方法を実施することができる。本開示に係るプログラム分析方法を実施する方法は上記に限定されず、プログラム分析システム(100、3000)と同様の動作あるいは処理を実行可能な他の装置(例えば、コンピュータ等の情報処理装置)を用いて、本開示に係るプログラム分析方法を実施することも可能である。
 本開示に係る技術は、例えば、マルウェア分析装置、又は、コンピュータを用いてマルウェア分析装置を実現可能なプログラム等の用途に適用可能である。また、本開示に係る技術は、例えば、マルウェアの分類及び亜種のマルウェアの生成といった用途に適用可能である。
 <ハードウェア及びソフトウェア・プログラム(コンピュータ・プログラム)の構成>
 以下、上記説明した各実施形態を実現可能なハードウェア構成について説明する。
 以下の説明においては、上記各実施形態において説明したプログラム分析システム(100、3000)をまとめて、単に「プログラム分析システム」と記載する。また、これらプログラム分析システムの各構成要素を、単に「プログラム分析システムの構成要素」と記載する場合がある。
 上記各実施形態において説明したプログラム分析システムは、1つ又は複数の専用のハードウェア装置により構成されてもよい。その場合、上記各図(図1A、図1B、図30、図31)に示した各構成要素は、その一部又は全部を統合したハードウェア(処理ロジックを実装した集積回路あるいは記憶デバイス等)を用いて実現されてもよい。
 プログラム分析システムが専用のハードウェアにより実現される場合、係るプログラム分析システムの構成要素は、例えば、それぞれの機能を提供可能な回路構成(circuitry)により実現されてもよい。係る回路構成は、例えば、SoC(System on a Chip)等の集積回路や、当該集積回路を用いて実現されたチップセット等を含む。この場合、プログラム分析システムの構成要素が保持するデータは、例えば、SoCとして統合されたRAM(Random Access Memory)領域やフラッシュメモリ領域、あるいは、当該SoCに接続された記憶デバイス(半導体記憶装置等)に記憶されてもよい。また、この場合、プログラム分析システムの各構成要素を接続する通信回線としては、周知の通信バス等を採用してもよい。また、各構成要素を接続する通信回線は、それぞれの構成要素間をピアツーピアで接続してもよい。
 また、上述したプログラム分析システムは、図32に例示するような汎用のハードウェア装置3200と、係るハードウェア装置3200によって実行される各種ソフトウェア・プログラム(コンピュータ・プログラム)とによって構成されてもよい。この場合、プログラム分析システムは、1台以上の適切な数の汎用のハードウェア装置3200と、ソフトウェア・プログラムとの組み合わせにより構成されてもよい。
 図32における演算装置3201は、汎用のCPU(中央処理装置:Central Processing Unit)やマイクロプロセッサ等の演算処理装置である。演算装置3201は、例えば後述する不揮発性記憶装置3203に記憶された各種ソフトウェア・プログラムをメモリ3202に読み出し、係るソフトウェア・プログラムに従って処理を実行してもよい。例えば、上記各実施形態におけるプログラム分析システムの構成要素の機能は、演算装置3201により実行されるソフトウェア・プログラムを用いて実現されてもよい。
 演算装置3201は、例えば、複数のCPUコアを備えたマルチコアCPUであってもよい。また演算装置3201は、1つのCPUコアが複数のスレッドを実行可能な、マルチスレッドCPUであってもよい。ハードウェア装置3200は、複数の演算装置3201を備えてもよい。
 メモリ3202は、演算装置3201から参照可能な、RAM等のメモリデバイスであり、ソフトウェア・プログラムや各種データ等を記憶する。なお、メモリ3202は、揮発性のメモリであってもよい。
 不揮発性記憶装置3203は、例えば磁気ディスクドライブや、フラッシュメモリによる半導体記憶装置等の、不揮発性の記憶装置(ストレージデバイス)である。不揮発性記憶装置3203は、各種ソフトウェア・プログラムやデータ等を記憶可能である。例えば、プログラム分析システムの各構成要素を実現可能なプログラムは、不揮発性記憶装置3203に記憶されてもよい。
 ドライブ装置3204は、例えば、後述する記録媒体3205に対するデータの読み込みや書き込みを処理する装置である。
 記録媒体3205は、例えば光ディスク、光磁気ディスク、半導体フラッシュメモリ等、データを記録可能な任意の記録媒体である。例えば、プログラム分析システムの各構成要素を実現可能なプログラムは、記録媒体3205に記録されていてもよい。
 ネットワークインタフェース3206は、通信ネットワークとの間の通信データの送受信を制御する装置である。ネットワークインタフェース3206は、例えば、1以上の通信ポートを備え、係る通信ポートを介して、通信ネットワークとの間で通信データを送受信してもよい。ネットワークインタフェース3206は、複数の通信ポートを備えてもよい。
 図32に例示するハードウェア装置3200の構成要素は、例えば、適切な通信方法(通信バス等)を用いて、通信可能に接続されていてもよい。
 上述した各実施形態を例に説明した本開示におけるプログラム分析システム、あるいはその構成要素は、例えば、図32に例示するハードウェア装置3200に対して、上記各実施形態において説明した機能を実現可能なソフトウェア・プログラムを供給することにより、実現されてもよい。
 より具体的には、例えば、係るハードウェア装置3200に対して供給したソフトウェア・プログラムを、演算装置3201が実行することによって、本開示に関する技術が実現されてもよい。この場合、係るハードウェア装置3200で稼働しているオペレーティングシステムや、データベース管理ソフト、ネットワークソフト、仮想環境基盤等のミドルウェアなどが各処理の一部を実行してもよい。
 上述した各実施形態において、上記各図に示した各部は、上述したハードウェアにより実行されるソフトウェア・プログラムの機能(処理)単位である、ソフトウェアモジュールとして実現することができる。ただし、これらの図面に示した各ソフトウェアモジュールの区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
 図1A、図1B、図30及び図31の各図に例示したプログラム分析システムの各構成要素をソフトウェアモジュールとして実現する場合、例えば、これらのソフトウェアモジュールが不揮発性記憶装置3203に記憶されてもよい。そして、演算装置3201がそれぞれの処理を実行する際に、これらのソフトウェアモジュールをメモリ3202に読み出してもよい。
 また、これらのソフトウェアモジュールは、共有メモリやプロセス間通信等の適宜の方法により、相互に各種データを伝達できるように構成されてもよい。このような構成により、これらのソフトウェアモジュールは、相互に通信可能に接続される。
 更に、上記ソフトウェア・プログラムは記録媒体3205に記録されてもよい。この場合、上記ソフトウェア・プログラムは、プログラム分析システムの出荷段階、あるいは運用段階等において、適宜ドライブ装置3204を通じて不揮発性記憶装置3203に格納されるよう構成されてもよい。
 なお、上記の場合において、上記ハードウェア装置3200への各種ソフトウェア・プログラムの供給方法は、出荷前の製造段階、あるいは出荷後のメンテナンス段階等において、適当な治具(ツール)を利用して当該装置内にインストールする方法を採用してもよい。また、各種ソフトウェア・プログラムの供給方法は、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用してもよい。
 そして、このような場合において、本開示に関する技術は、係るソフトウェア・プログラムを構成するコード、あるいは係るコードが記録されたところの、コンピュータ読み取り可能な記録媒体によって構成されると捉えることができる。この場合、係る記録媒体は、ハードウェア装置3200と独立した媒体に限らず、LAN(Local Area Network)やインターネットなどにより伝送されたソフトウェア・プログラムをダウンロードして記憶又は一時記憶した記録媒体を含む。
 また、上述したプログラム分析システムの構成要素は、図32に例示するハードウェア装置3200を仮想化した仮想化環境と、当該仮想化環境において実行される各種ソフトウェア・プログラム(コンピュータ・プログラム)とによって構成されてもよい。この場合、図32に例示するハードウェア装置3200の構成要素は、当該仮想化環境における仮想デバイスとして提供される。なお、この場合も、図32に例示するハードウェア装置3200を物理的な装置として構成した場合と同様の構成にて、本開示に関する技術を実現可能である。
 以上、本開示に関する技術を、上述した模範的な実施形態に適用した例として説明した。しかしながら、本開示の技術的範囲は、上述した各実施形態に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本開示の技術的範囲に含まれ得る。上述した各実施形態を組み合わせた実施形態も本開示の技術的範囲に含まれる。更に、上述した各実施形態と、上述した各実施形態に変更又は改良を加えた新たな実施形態とを組み合わせた実施形態も、本開示の技術的範囲に含まれ得る。そしてこのことは、請求の範囲に記載した事項から明らかである。
 なお、上述した実施形態及びその変形例の一部又は全部は、以下の付記のようにも記載されうる。しかしながら、上述した実施形態及びその変形例により例示的に説明した本開示に係る技術は、以下には限られない。
 (付記1)
 既知の実行コードを数理モデルに変換して表したデータである、既知因子コードを保持する因子コード保持手段と、
 不正プログラムによる攻撃が成功した状態を表す成功状態情報を保持する成功状態保持手段と、
 検査対象の実行コードを上記数理モデルに変換して表したデータである、分析対象抽象コードを生成し、上記分析対象抽象コードに、上記因子コード保持手段に保持された上記既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持手段に保持された上記成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する因子探索手段と、を備える
プログラム分析システム。
 (付記2)
 上記因子探索手段は、上記分析対象抽象コードに、上記因子コード保持手段に保持された上記既知因子コードが含まれるとともに、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持手段に保持された上記成功状態情報に含まれる場合、上記検査対象の実行コードが不正プログラムであると判定する
付記1に記載のプログラム分析システム。
 (付記3)
 上記因子探索手段は、上記因子コード保持手段に保持された上記既知因子コードが、上記分析対象抽象コードに含まれないと判定した場合には、
  上記分析対象抽象コードを、互いに素な因子コードである分析対象因子コードに更に分解し、
  分解された上記分析対象因子コードの少なくとも一部を並べ替えることで、並べ替える前の上記分析対象抽象コードと同等の実行結果が得られる場合には、上記分析対象因子コードの少なくとも一部を並べ替えた後の上記分析対象抽象コードに、上記既知因子コードが含まれるか否かを判定する処理を更に実行し、
 上記分析対象因子コードの少なくとも一部を並べ替えた後の上記分析対象抽象コードに、上記既知因子コードが含まれるとともに、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持手段に保持された上記成功状態情報に含まれる場合、上記検査対象の実行コードが不正プログラムであると判定する
付記2に記載のプログラム分析システム。
 (付記4)
 上記数理モデルは、ある実行コードに含まれる命令を、1以上の写像と、上記写像に関する入力ベクトル及び出力ベクトルとを用いて表すモデルであり、
 上記因子探索手段は、上記検査対象の実行コードに含まれる1以上の命令列を上記写像に変換し、変換された1以上の上記写像を積演算により統合することで、上記分析対象抽象コードを生成する
付記1乃至付記3のいずれかに記載のプログラム分析システム。
 (付記5)
 上記数理モデルにおける上記入力ベクトル及び上記出力ベクトルの要素は、上記検査対象の実行コードが実行される情報処理装置を構成する演算装置に実装されたレジスタの内容を表す情報と、上記検査対象の実行コードが実行される上記情報処理装置を構成するメモリの特定のアドレスの内容を表す情報と、を少なくとも含む、上記検査対象の実行コードが実行される上記情報処理装置の状態を表す情報であり、
 上記因子探索手段は、上記検査対象の実行コードの実行が終了した際の状態を表す上記出力ベクトルの要素が、上記成功状態保持手段に保持された上記成功状態情報に含まれるか否かを判定する
付記4に記載のプログラム分析システム。
 (付記6)
 上記因子探索手段は、実行コードに含まれる命令と、当該命令を表す上記数理モデルである上記写像とを関連付ける変換情報を用いて、上記検査対象の実行コードに含まれる1以上の命令列を上記写像に変換する
付記4又は付記5に記載のプログラム分析システム。
 (付記7)
 脆弱性を利用した攻撃を実行する実行コードの検体を保持する脆弱性データ保持手段と、
 既知の不正プログラムの検体を保持する不正プログラムデータ保持手段と、
 上記脆弱性データ保持手段に保持された検体と、不正プログラムデータ保持部に保持された検体と、の少なくともいずれかの実行コードを、上記変換情報を用いて上記数理モデルに変換して表したデータである既知抽象コードを生成し、上記既知抽象コードから分解された上記既知因子コードを上記因子コード保持手段に提供する因子抽出手段と、を更に備え、
 上記因子探索手段は、上記分析対象抽象コードに、上記脆弱性データ保持手段に保持された検体から取得された上記既知因子コードと、上記不正プログラムデータ保持部に保持された検体から取得された上記既知因子コードと、の少なくとも何れかが含まれるとともに、上記検査対象の実行コードの実行が終了した際の状態が、上記成功状態保持手段に保持された上記成功状態情報に含まれる場合、上記検査対象の実行コードが不正プログラムであると判定する
付記6に記載のプログラム分析システム。
 (付記8)
 正常に稼働しているシステムにおいて実行される実行コードの検体を保持するシステムデータ保持手段と、
 上記システムデータ保持手段に保持された検体の実行コードを、上記変換情報を用いて上記数理モデルに変換して表したデータである既知抽象コードを生成し、上記既知抽象コードから分解された上記既知因子コードを上記因子コード保持手段に提供する因子抽出手段と、
  上記検査対象の実行コードを、上記変換情報を用いて上記分析対象抽象コードに変換するとともに、
  上記分析対象抽象コードの少なくとも一部を、上記システムデータ保持手段に保持された検体の実行コードから取得した上記既知因子コードに置換することで、元の上記検査対象の実行コードよりもコードサイズが低減された実行コードを生成する実行ファイル調整手段と、を更に備える
付記6に記載のプログラム分析システム。
 (付記9)
 上記写像が、単一の変換行列を有する線形関数により表される場合、
 上記因子探索手段は、上記実行コードに含まれる複数の上記命令列から変換されたそれぞれの上記写像に含まれる上記変換行列の積を演算することにより、上記実行コードに含まれる複数の上記命令列から変換された上記写像を統合する
付記4乃至付記8のいずれかに記載のプログラム分析システム。
 (付記10)
 検査対象の実行コードを数理モデルに変換して表したデータである分析対象抽象コードを生成し、
 上記分析対象抽象コードに、既知の実行コードを上記数理モデルに変換して表したデータである既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、不正プログラムによる攻撃が成功した状態を表す成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する
プログラム分析方法。
 (付記11)
 検査対象の実行コードを数理モデルに変換して表したデータである分析対象抽象コードを生成する処理と、
 上記分析対象抽象コードに、既知の実行コードを上記数理モデルに変換して表したデータである既知因子コードが含まれるか否かを判定する処理と、上記検査対象の実行コードの実行が終了した際の状態が、不正プログラムによる攻撃が成功した状態を表す成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、上記検査対象の実行コードが不正プログラムであるか否かを判定する処理と、をコンピュータに実行させる
コンピュータ・プログラム。
 (付記12)
 攻撃の成功状態を入力する入力手段と、上記成功状態を記憶する手段と、既知の脆弱性の実行コードを記憶する記憶手段と、上記既知の脆弱性の実行コードから、実行コードの少なくとも一部を表すことが可能なデータである因子を抽出する手段と、既知のマルウェアの実行コードを記憶する記憶手段と、上記既知のマルウェアの実行コードに含まれる上記因子を抽出する手段と、上記因子を記憶する記憶手段と、任意の実行コードから上記因子を探索する探索手段と、1以上の上記因子が他の上記因子の部分集合によって同等の動作を保ちつつ表現され得るかを判定する判定手段と、上記因子を他の上記因子の部分集合によって置換した場合の最終的な動作状態が上記成功状態に存在するかを判定する判定手段と、上記判定の結果を表示する表示手段と、を備えるマルウェア対策システム。
 (付記13)
 既知のシステムを記憶する記憶手段と、上記既知のシステムの実行コードから上記因子を抽出する手段と、抽出した上記因子を他の上記因子の部分集合へ置換することにより、上記既知のシステムの実行コードを最小化する手段と、上記最小化された実行コードを出力する手段と、を更に備える、付記12に記載のマルウェア対策システム。
 この出願は、2016年4月26日に出願された日本出願特願2016-088278を基礎とする優先権を主張し、その開示の全てをここに取り込む。
 100  プログラム分析システム
 101  脆弱性データベース
 102  マルウェアデータベース
 103  システムデータベース
 104  因子抽出部
 105  因子データベース
 106  成功状態登録部
 107  成功状態データベース
 108  因子探索部
 109  判定結果提供部
 110  出力装置
 111  実行ファイル
 112  実行ファイル調整部
 113  出力ファイル
 3000  プログラム分析システム
 3001  因子コード保持部
 3002  成功状態保持部
 3003  因子探索部
 3004  実行ファイル調整部
 3201 演算装置
 3202 メモリ
 3203 不揮発性記憶装置
 3204 ドライブ装置
 3205 記録媒体
 3206 ネットワークインタフェース

Claims (13)

  1.  既知の実行コードを数理モデルに変換して表したデータである、既知因子コードを保持する因子コード保持手段と、
     不正プログラムによる攻撃が成功した状態を表す成功状態情報を保持する成功状態保持手段と、
     検査対象の実行コードを前記数理モデルに変換して表したデータである、分析対象抽象コードを生成し、前記分析対象抽象コードに、前記因子コード保持手段に保持された前記既知因子コードが含まれるか否かを判定する処理と、前記検査対象の実行コードの実行が終了した際の状態が、前記成功状態保持手段に保持された前記成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、前記検査対象の実行コードが不正プログラムであるか否かを判定する因子探索手段と、を備える
    プログラム分析システム。
  2.  前記因子探索手段は、前記分析対象抽象コードに、前記因子コード保持手段に保持された前記既知因子コードが含まれるとともに、前記検査対象の実行コードの実行が終了した際の状態が、前記成功状態保持手段に保持された前記成功状態情報に含まれる場合、前記検査対象の実行コードが不正プログラムであると判定する
    請求項1に記載のプログラム分析システム。
  3.  前記因子探索手段は、前記因子コード保持手段に保持された前記既知因子コードが、前記分析対象抽象コードに含まれないと判定した場合には、
      前記分析対象抽象コードを、互いに素な因子コードである分析対象因子コードに更に分解し、
      分解された前記分析対象因子コードの少なくとも一部を並べ替えることで、並べ替える前の前記分析対象抽象コードと同等の実行結果が得られる場合には、前記分析対象因子コードの少なくとも一部を並べ替えた後の前記分析対象抽象コードに、前記既知因子コードが含まれるか否かを判定する処理を更に実行し、
     前記分析対象因子コードの少なくとも一部を並べ替えた後の前記分析対象抽象コードに、前記既知因子コードが含まれるとともに、前記検査対象の実行コードの実行が終了した際の状態が、前記成功状態保持手段に保持された前記成功状態情報に含まれる場合、前記検査対象の実行コードが不正プログラムであると判定する
    請求項2に記載のプログラム分析システム。
  4.  前記数理モデルは、ある実行コードに含まれる命令を、1以上の写像と、前記写像に関する入力ベクトル及び出力ベクトルとを用いて表すモデルであり、
     前記因子探索手段は、前記検査対象の実行コードに含まれる1以上の命令列を前記写像に変換し、変換された1以上の前記写像の積を演算することにより、前記写像を統合することで、前記分析対象抽象コードを生成する
    請求項1乃至請求項3のいずれかに記載のプログラム分析システム。
  5.  前記数理モデルにおける前記入力ベクトル及び前記出力ベクトルの要素は、前記検査対象の実行コードが実行される情報処理装置を構成する演算装置に実装されたレジスタの内容を表す情報と、前記検査対象の実行コードが実行される前記情報処理装置を構成するメモリの特定のアドレスの内容を表す情報と、を少なくとも含む、前記検査対象の実行コードが実行される前記情報処理装置の状態を表す情報であり、
     前記因子探索手段は、前記検査対象の実行コードの実行が終了した際の状態を表す前記出力ベクトルの要素が、前記成功状態保持手段に保持された前記成功状態情報に含まれるか否かを判定する
    請求項4に記載のプログラム分析システム。
  6.  前記因子探索手段は、実行コードに含まれる命令と、当該命令を表す前記数理モデルである前記写像とを関連付ける変換情報を用いて、前記検査対象の実行コードに含まれる1以上の命令列を前記写像に変換する
    請求項4又は請求項5に記載のプログラム分析システム。
  7.  脆弱性を利用した攻撃を実行する実行コードの検体を保持する脆弱性データ保持手段と、
     既知の不正プログラムの検体を保持する不正プログラムデータ保持手段と、
     前記脆弱性データ保持手段に保持された検体と、不正プログラムデータ保持部に保持された検体と、の少なくともいずれかの実行コードを、前記変換情報を用いて前記数理モデルに変換して表したデータである既知抽象コードを生成し、前記既知抽象コードから分解された前記既知因子コードを前記因子コード保持手段に提供する因子抽出手段と、を更に備え、
     前記因子探索手段は、前記分析対象抽象コードに、前記脆弱性データ保持手段に保持された検体から取得された前記既知因子コードと、前記不正プログラムデータ保持部に保持された検体から取得された前記既知因子コードと、の少なくとも何れかが含まれるとともに、前記検査対象の実行コードの実行が終了した際の状態が、前記成功状態保持手段に保持された前記成功状態情報に含まれる場合、前記検査対象の実行コードが不正プログラムであると判定する
    請求項6に記載のプログラム分析システム。
  8.  正常に稼働しているシステムにおいて実行される実行コードの検体を保持するシステムデータ保持手段と、
     前記システムデータ保持手段に保持された検体の実行コードを、前記変換情報を用いて前記数理モデルに変換して表したデータである既知抽象コードを生成し、前記既知抽象コードから分解された前記既知因子コードを前記因子コード保持手段に提供する因子抽出手段と、
      前記検査対象の実行コードを、前記変換情報を用いて前記分析対象抽象コードに変換するとともに、
      前記分析対象抽象コードの少なくとも一部を、前記システムデータ保持手段に保持された検体の実行コードから取得した前記既知因子コードに置換することで、元の前記検査対象の実行コードよりもコードサイズが低減された実行コードを生成する実行ファイル調整手段と、を更に備える
    請求項6に記載のプログラム分析システム。
  9.  前記写像が、単一の変換行列を有する線形関数により表される場合、
     前記因子探索手段は、前記実行コードに含まれる複数の前記命令列から変換されたそれぞれの前記写像に含まれる前記変換行列の積を演算することにより、前記実行コードに含まれる複数の前記命令列から変換された前記写像を統合する
    請求項4乃至請求項8のいずれかに記載のプログラム分析システム。
  10.  検査対象の実行コードを数理モデルに変換して表したデータである分析対象抽象コードを生成し、
     前記分析対象抽象コードに、既知の実行コードを前記数理モデルに変換して表したデータである既知因子コードが含まれるか否かを判定する処理と、前記検査対象の実行コードの実行が終了した際の状態が、不正プログラムによる攻撃が成功した状態を表す成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、前記検査対象の実行コードが不正プログラムであるか否かを判定する
    プログラム分析方法。
  11.  検査対象の実行コードを数理モデルに変換して表したデータである分析対象抽象コードを生成する処理と、
     前記分析対象抽象コードに、既知の実行コードを前記数理モデルに変換して表したデータである既知因子コードが含まれるか否かを判定する処理と、前記検査対象の実行コードの実行が終了した際の状態が、不正プログラムによる攻撃が成功した状態を表す成功状態情報に含まれるか否かを判定する処理と、を少なくとも実行することにより、前記検査対象の実行コードが不正プログラムであるか否かを判定する処理と、をコンピュータに実行させる
    コンピュータ・プログラムが記憶された記録媒体。
  12.  攻撃の成功状態を入力する入力手段と、前記成功状態を記憶する手段と、既知の脆弱性の実行コードを記憶する記憶手段と、前記既知の脆弱性の実行コードから、実行コードの少なくとも一部を表すことが可能なデータである因子を抽出する手段と、既知のマルウェアの実行コードを記憶する記憶手段と、前記既知のマルウェアの実行コードに含まれる前記因子を抽出する手段と、前記因子を記憶する記憶手段と、任意の実行コードから前記因子を探索する探索手段と、1以上の前記因子が他の前記因子の部分集合によって同等の動作を保ちつつ表現され得るかを判定する判定手段と、前記因子を他の前記因子の部分集合によって置換した場合の最終的な動作状態が前記成功状態に存在するかを判定する判定手段と、前記判定の結果を表示する表示手段と、を備えるマルウェア対策システム。
  13.  既知のシステムを記憶する記憶手段と、前記既知のシステムの実行コードから前記因子を抽出する手段と、抽出した前記因子を他の前記因子の部分集合へ置換することにより、前記既知のシステムの実行コードを最小化する手段と、前記最小化された実行コードを出力する手段と、を更に備える、請求項12に記載のマルウェア対策システム。
PCT/JP2017/015088 2016-04-26 2017-04-13 プログラム分析システム、プログラム分析方法、及び、記録媒体 WO2017187999A1 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US16/092,803 US10891379B2 (en) 2016-04-26 2017-04-13 Program analysis system, program analysis method and storage medium
JP2018514258A JP6750674B2 (ja) 2016-04-26 2017-04-13 プログラム分析システム、プログラム分析方法、及び、コンピュータ・プログラム
US17/004,348 US11494492B2 (en) 2016-04-26 2020-08-27 Program analysis system, program analysis method and storage medium

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2016088278 2016-04-26
JP2016-088278 2016-04-26

Related Child Applications (2)

Application Number Title Priority Date Filing Date
US16/092,803 A-371-Of-International US10891379B2 (en) 2016-04-26 2017-04-13 Program analysis system, program analysis method and storage medium
US17/004,348 Continuation US11494492B2 (en) 2016-04-26 2020-08-27 Program analysis system, program analysis method and storage medium

Publications (1)

Publication Number Publication Date
WO2017187999A1 true WO2017187999A1 (ja) 2017-11-02

Family

ID=60161665

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2017/015088 WO2017187999A1 (ja) 2016-04-26 2017-04-13 プログラム分析システム、プログラム分析方法、及び、記録媒体

Country Status (3)

Country Link
US (2) US10891379B2 (ja)
JP (1) JP6750674B2 (ja)
WO (1) WO2017187999A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017187999A1 (ja) * 2016-04-26 2017-11-02 日本電気株式会社 プログラム分析システム、プログラム分析方法、及び、記録媒体
WO2021180169A1 (en) * 2020-03-11 2021-09-16 Beijing Bytedance Network Technology Co., Ltd. Conformance window parameters for video coding

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012027710A (ja) * 2010-07-23 2012-02-09 Nippon Telegr & Teleph Corp <Ntt> ソフトウェア検出方法及び装置及びプログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001064136A (ja) 1999-08-26 2001-03-13 Kao Corp 口腔用組成物
JP2001084136A (ja) 1999-09-10 2001-03-30 Toshiba Corp テスト仕様書作成システムおよびテスト仕様書作成方法
GB2387681A (en) * 2002-04-18 2003-10-22 Isis Innovation Intrusion detection system with inductive logic means for suggesting new general rules
US7409717B1 (en) * 2002-05-23 2008-08-05 Symantec Corporation Metamorphic computer virus detection
US7013483B2 (en) 2003-01-03 2006-03-14 Aladdin Knowledge Systems Ltd. Method for emulating an executable code in order to detect maliciousness
EP2011099A4 (en) * 2006-04-06 2013-08-21 Juniper Networks Inc SYSTEM AND METHOD FOR DETECTING MALICIELS FOR LIMIT ACCESS MOBILE PLATFORMS
US8245295B2 (en) * 2007-07-10 2012-08-14 Samsung Electronics Co., Ltd. Apparatus and method for detection of malicious program using program behavior
JP5083760B2 (ja) * 2007-08-03 2012-11-28 独立行政法人情報通信研究機構 マルウェアの類似性検査方法及び装置
US9087195B2 (en) * 2009-07-10 2015-07-21 Kaspersky Lab Zao Systems and methods for detecting obfuscated malware
US9047441B2 (en) 2011-05-24 2015-06-02 Palo Alto Networks, Inc. Malware analysis system
JP5655191B2 (ja) 2011-06-28 2015-01-21 日本電信電話株式会社 特徴情報抽出装置、特徴情報抽出方法および特徴情報抽出プログラム
JP5650617B2 (ja) 2011-10-11 2015-01-07 日本電信電話株式会社 攻撃情報管理システム、攻撃情報管理装置、攻撃情報管理方法及びプログラム
JP5752642B2 (ja) 2012-06-13 2015-07-22 日本電信電話株式会社 監視装置および監視方法
JP5876784B2 (ja) 2012-07-26 2016-03-02 富士通フロンテック株式会社 照合装置、照合方法および照合プログラム
US10713358B2 (en) * 2013-03-15 2020-07-14 Fireeye, Inc. System and method to extract and utilize disassembly features to classify software intent
KR20160099160A (ko) * 2015-02-11 2016-08-22 한국전자통신연구원 명령어 집합의 행위 패턴을 엔-그램 방식으로 모델링하는 방법, 그 방법으로 동작하는 컴퓨팅 장치, 및 그 방법을 컴퓨팅 장치에서 실행하도록 구성되는 기록 매체에 저장된 프로그램
US10255434B2 (en) * 2015-09-17 2019-04-09 Qualcomm Incorporated Detecting software attacks on processes in computing devices
WO2017187999A1 (ja) * 2016-04-26 2017-11-02 日本電気株式会社 プログラム分析システム、プログラム分析方法、及び、記録媒体

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012027710A (ja) * 2010-07-23 2012-02-09 Nippon Telegr & Teleph Corp <Ntt> ソフトウェア検出方法及び装置及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
RYUICHI KOIKE: "The Unknown Viruses Detection Method Using Bayes Learning Algorithm", TRANSACTIONS OF INFORMATION PROCESSING SOCIETY OF JAPAN, vol. 46, no. 8, 15 August 2005 (2005-08-15), pages 1984 - 1988 *

Also Published As

Publication number Publication date
US11494492B2 (en) 2022-11-08
US10891379B2 (en) 2021-01-12
JP6750674B2 (ja) 2020-09-02
US20190130108A1 (en) 2019-05-02
US20200394301A1 (en) 2020-12-17
JPWO2017187999A1 (ja) 2019-02-28

Similar Documents

Publication Publication Date Title
US9715593B2 (en) Software vulnerabilities detection system and methods
US9824214B2 (en) High performance software vulnerabilities detection system and methods
EP2561453B1 (en) A dual dfa decomposition for large scale regular expression matching
US7376970B2 (en) System and method for proactive computer virus protection
US20050028002A1 (en) Method and apparatus to detect malicious software
CN109983464B (zh) 检测恶意脚本
US10599852B2 (en) High performance software vulnerabilities detection system and methods
CN109997143A (zh) 敏感数据的安全共享
US11159547B2 (en) Malware clustering approaches based on cognitive computing techniques
WO2022180702A1 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
CN113961919B (zh) 恶意软件检测方法和装置
WO2018131199A1 (ja) 結合装置、結合方法および結合プログラム
US11494492B2 (en) Program analysis system, program analysis method and storage medium
CN113312618A (zh) 程序漏洞检测方法、装置、电子设备及介质
Cabrera-Arteaga et al. WebAssembly diversification for malware evasion
CN108228312A (zh) 通过解释器执行代码的系统和方法
US11907365B2 (en) Information processing device and information processing program
Lee et al. DOVE: A data-oblivious virtual environment
US11748476B2 (en) Conversion device and conversion program
Wrench et al. Detecting derivative malware samples using deobfuscation-assisted similarity analysis
Soewito et al. Hybrid pattern matching for trusted intrusion detection
CN104615935A (zh) 一种面向Xen虚拟化平台的隐藏方法
Hai et al. Multi-threaded on-the-fly model generation of malware with hash compaction
Yin et al. Discovering Malicious Signatures in Software from Structural Interactions
KR20240019738A (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 2018514258

Country of ref document: JP

NENP Non-entry into the national phase

Ref country code: DE

121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 17789286

Country of ref document: EP

Kind code of ref document: A1

122 Ep: pct application non-entry in european phase

Ref document number: 17789286

Country of ref document: EP

Kind code of ref document: A1