WO2010134325A1 - 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置 - Google Patents

動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置 Download PDF

Info

Publication number
WO2010134325A1
WO2010134325A1 PCT/JP2010/003346 JP2010003346W WO2010134325A1 WO 2010134325 A1 WO2010134325 A1 WO 2010134325A1 JP 2010003346 W JP2010003346 W JP 2010003346W WO 2010134325 A1 WO2010134325 A1 WO 2010134325A1
Authority
WO
WIPO (PCT)
Prior art keywords
signature
function
data flow
tag
dynamic data
Prior art date
Application number
PCT/JP2010/003346
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 US13/321,753 priority Critical patent/US20120066698A1/en
Priority to JP2011514329A priority patent/JP5459313B2/ja
Publication of WO2010134325A1 publication Critical patent/WO2010134325A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing

Definitions

  • the present invention relates to a dynamic data flow tracking device, a dynamic data flow tracking method, and a dynamic data flow tracking program, and more particularly, to a dynamic data flow tracking device, a dynamic data flow tracking method, and a dynamic using information related to a library specification. Data flow tracking program.
  • the method of embedding code for performance measurement, bug discovery, etc. by partially rewriting the execution code of the program at the time of execution is called binary instrumentation.
  • binary instrumentation By using the binary instrumentation technique, the user can analyze at run time how data is exchanged within the process. This data analysis method is called dynamic data flow analysis.
  • Input data refers to data read from a file, data received via a network, and the like, and a tag is information indicating the route through which the data is input.
  • tags are information indicating the route through which the data is input.
  • the program execution code is divided into units called basic blocks (Basic Block), and instrumentation is performed on the basic blocks.
  • Instrumentation is a function that reads an execution code of a program, changes the execution code by applying a predetermined process, and executes the changed execution code.
  • Non-patent document 1 is given as an example of disclosure of the instrumentation function.
  • Non-Patent Document 2 discloses a technique in which dynamic data flow analysis is applied to discovery of attacks on program vulnerabilities.
  • a type of attack such as a buffer overflow attack, that executes arbitrary code with a vulnerability of a program is executed by the following two steps. (1) The malicious code is loaded into the program from the outside mainly through the network. (2) Program control is transferred to the loaded illegal code.
  • the process uses dynamic data flow analysis to determine whether to transfer execution control to data read from an unreliable information source (for example, data reception via the Internet). And determine whether (2) has occurred. By such processing, the user can find out or prevent a buffer overflow attack.
  • Non-Patent Document 3 discloses a technique in which dynamic data flow analysis is applied to information leakage by spyware or the like. Information leakage by spyware is caused by a program sending confidential information to the outside of a network or the like against the user's intention.
  • data read from a sensitive information source such as a document file in a PC (Personal Computer) is transmitted via the Internet using dynamic data flow analysis. Information leakage is discovered by determining whether or not the output is made to an unreliable target such as.
  • dynamic data flow analysis can find information security problems.
  • the dynamic data flow analysis records the exchange of internal data one by one at the time of program execution, there is a problem that the program execution speed decreases.
  • the present invention has been made to solve such problems, and a data flow tracking method and a data flow tracking program capable of speeding up dynamic data flow analysis for a program in which a plurality of shared libraries are linked. And a data flow tracking device.
  • One aspect of the dynamic data flow tracking method is to dynamically set a data flow by setting a tag for data in a process and propagating the tag according to the passing of data in the process.
  • a specification of data passing in a function included in a shared library is defined as a signature, and the signature is referred to when a function calls the function defined by the signature.
  • tag propagation in the function is omitted.
  • a dynamic data flow tracking method capable of speeding up dynamic data flow analysis for a program in which a plurality of shared libraries are linked. it can.
  • FIG. 1 is a block diagram of a dynamic data flow analysis apparatus according to a first embodiment.
  • 1 is a block diagram of a dynamic data flow analysis apparatus according to a first embodiment.
  • FIG. 3 is a conceptual diagram illustrating code embedding in a basic block according to the first embodiment.
  • FIG. 3 is an API signature diagram according to the first embodiment;
  • FIG. 3 is a diagram of an API address map according to the first embodiment.
  • FIG. 3 is a diagram of a shared library address list according to the first exemplary embodiment.
  • 3 is a flowchart showing a code embedding process in a basic block according to the first embodiment; 4 is an example of a function call code of a shared library according to the first exemplary embodiment.
  • FIG. 3 is an execution code according to the first exemplary embodiment;
  • FIG. 3 is a conceptual diagram illustrating code embedding in a basic block according to the first embodiment.
  • FIG. 3 is an API signature diagram according to the first embodiment
  • FIG. 3 is a diagram of an
  • FIG. 3 is a diagram of an execution code in which an API tracking code according to the first embodiment is embedded.
  • FIG. 3 is a block diagram of a dynamic data flow analyzing apparatus according to a second embodiment. It is a figure of the basic block concerning Embodiment 2.
  • FIG. 10 is a flowchart of basic block generation according to the second exemplary embodiment; 12 is a flowchart of full tracking code generation processing according to the second exemplary embodiment;
  • FIG. 10 is a diagram of an execution code in which a function call embedding process according to a second embodiment is performed.
  • FIG. 6 is a block diagram of a dynamic data flow analyzing apparatus according to a third embodiment.
  • 10 is a flowchart of conservative function call processing embedding processing according to the third embodiment;
  • FIG. 12 is a diagram of an execution code that has undergone conservative function call processing embedding processing according to the third embodiment;
  • 10 is a flowchart of conservative function call processing embedding processing according to the fourth embodiment;
  • Embodiment 1 Embodiments of the present invention will be described below with reference to the drawings.
  • the dynamic data flow analysis apparatus 100 according to the first exemplary embodiment of the present invention is configured to include a dynamic data flow analysis process adding unit 107 and a storage unit 108.
  • the dynamic data flow analysis apparatus according to the present embodiment sets a tag indicating the data acquisition route for data in the process, and propagates the tag according to the delivery of the data in the process. It tracks data flow dynamically.
  • the storage unit 108 stores a signature in which a specification of data passing in a function (user code) included in the shared library is defined.
  • the dynamic data flow analysis processing adding unit 107 refers to a signature when calling a function defined by a signature (hereinafter also referred to as an API (Application Program Interface) signature) from a program. At least a part of the propagation of the tag is omitted, and preferably the tag is propagated in a lump.
  • the dynamic data flow analysis process adding unit 107 adds a tag propagation process before or after the function call or to the call destination function when the function is called. In this embodiment, an example in which tags are propagated collectively will be described. However, by omitting at least a part of tag propagation, processing generated according to tag propagation processing is reduced and speeded up. can do.
  • the dynamic data flow analysis apparatus 100 illustrated in FIG. 1 can be described as the dynamic data flow analysis apparatus 100 illustrated in FIG.
  • the dynamic data flow analysis apparatus 100 can be configured as software executed by a computer that operates under program control, for example, a central processing unit (CPU: Central Processing Unit, not shown in FIG. 2).
  • the dynamic data flow analysis apparatus 100 includes an operating system 101, an instrumentation unit 102, an application program 103, a shared library analysis unit 104, a dynamic data flow analysis processing addition unit 107, and an API knowledge storage unit. 108.
  • the dynamic data flow analysis process addition unit 107 in FIG. 1 corresponds to the dynamic data flow analysis process addition unit 107 in FIG.
  • the storage unit 108 in FIG. 1 corresponds to the API knowledge storage unit 108 in FIG.
  • the operating system 101 is software that provides application software with an interface that abstracts hardware in a computer, and is a kind of basic software.
  • the instrumentation unit 102 reads the execution code of the application program 103 and divides it into basic blocks. In addition, the instrumentation unit 102 uses the dynamic data flow analysis processing adding unit 107 to make a change to add the dynamic data flow analysis processing to the basic block, and the changed basic block is changed to the instrumentation unit. The data is stored in the data cache in 102.
  • Application program 103 is an arbitrary program executed on the PC.
  • the shared library analysis unit 104 receives the execution code loaded by the instrumentation unit 102 and the shared library information linked to the execution code as inputs.
  • the shared library analysis unit 104 outputs an API address map 105 and a shared library address list 106 based on the input and information in the API knowledge storage unit 108.
  • the dynamic data flow analysis processing adding unit 107 includes a data tracking code embedding unit 1071 and an API data tracking code embedding unit 1072.
  • the dynamic data flow analysis process adding unit 107 receives a basic block from the instrumentation unit 102 as an input. Further, the dynamic data flow analysis processing adding unit 107 sets the dependency of data input / output to the basic block based on the API address map 105, the shared library address list 106, and the information in the API knowledge storage unit 108. A code for detection is generated, and the code is embedded in the basic block. Thereafter, the dynamic data flow analysis processing adding unit 107 outputs the generated basic block to the instrumentation unit 102.
  • the API knowledge storage unit 108 stores information related to the API signature.
  • the API signature indicates information related to the API of the function of the shared library called from the program.
  • This API signature is information defining which API function can cause what kind of data flow (data transfer) between an argument and a return value.
  • the API signature includes information for identifying an API function such as a module name and a function name, and information defining what kind of data flow (data transfer) is caused by calling the API function.
  • the API function is a function defined in the API signature. In this embodiment, it is assumed that all functions included in the shared library are defined in the API signature. That is, in this embodiment, all functions of the shared library are API functions.
  • the dynamic data flow analysis apparatus 100 is described as software realized by causing a CPU to execute a computer program, but may be realized as hardware.
  • the computer program executed by the CPU can be provided by being recorded on a recording medium, or can be provided by being transmitted via the Internet or other communication media.
  • the storage medium includes, for example, a flexible disk, a hard disk, a magnetic disk, a magneto-optical disk, a CD-ROM, a DVD, a ROM cartridge, a battery-backed RAM memory cartridge, a flash memory cartridge, and a nonvolatile RAM cartridge.
  • the communication medium includes a wired communication medium such as a telephone line, a wireless communication medium such as a microwave line, and the like.
  • the loader reads the execution code of the program and the execution code of the shared library to which the program is linked. Then, the loader transfers control to the execution start position of the program, and starts executing the program code itself read into the memory.
  • the instrumentation unit 102 performs the following processing.
  • the instrumentation unit 102 calls the shared library analysis unit 104 when the execution code of the program and the execution code of the shared library are read. The processing of the shared library analysis unit 104 will be described later.
  • the instrumentation unit 102 reads the execution code into the memory.
  • the instrumentation unit 102 extracts a basic block 1031 that is a group of execution codes from the execution start position of the execution code. Thereafter, the instrumentation unit 102 calls the dynamic data flow analysis processing addition unit 107 to cause the basic block 1031 to perform the process defined by the dynamic data flow analysis processing addition unit 107.
  • the dynamic data flow analysis processing adding unit 107 embeds the dynamic data flow analysis processing in the basic block 1031 and moves the generated basic block 1031 to the instrumentation unit 102.
  • the instrumentation unit 102 transfers control to the generated basic block 1031 and executes the basic block 1031.
  • the instrumentation unit 102 stores the generated basic block 1031 in the code cache 1021.
  • the control is transferred to the converted basic block 1031 stored in the code cache 1021.
  • the code embedding process which takes a long processing time is made to occur only once in principle.
  • the call destination is not transferred to the instrumentation unit 102 once. Decreasing the execution speed of the application by applying various known acceleration means such as rewriting the basic block 1031 in the code cache 1021 that is the call source so as to branch directly to the basic block 1031 in the code cache 1021 Can be suppressed.
  • the instrumentation unit 102 performs the above basic block conversion process on all the basic blocks 1031.
  • API signature stored in the API knowledge storage unit 108 will be described with reference to FIG.
  • functions called GetProcAddress and MultiByteToWideChar implemented in a DLL called kernel32.dll, which is a shared library, and information on the data flow of the function are defined.
  • the shared library analysis unit 104 is called when the instrumentation unit 102 loads a basic block of the application program 103 or a shared library (DLL) linked to the basic block of the application program 103 onto the memory.
  • the shared library analysis unit 104 enumerates API functions called by the loaded basic block and shared library, and defines the API defined in the API knowledge storage unit 108 and its start address, that is, the function name of the API function and its start. Create a correspondence table with addresses. This correspondence table is called an API address map 105.
  • the API address map 105 includes the name of an API function defined in the API knowledge storage unit 108 among API functions that are directly called from the application program 103 to be executed or indirectly through another API function.
  • the start address pair is saved (FIG. 5).
  • the shared library analysis unit 104 In addition to generating the API address map 105, the shared library analysis unit 104 also generates a shared library address list 106, which is a set of pairs of start addresses and end addresses of all loaded shared libraries (FIG. 6).
  • FIG. 7 is a flowchart showing an operation when the dynamic data flow analysis process adding unit 107 performs the code embedding process on the basic block 1031.
  • the dynamic data flow analysis processing adding unit 107 is between the start address and end address of any pair in which the start address of the basic block 1031 read by the instrumentation unit 102 is stored in the shared library address list 106. (S701). If it is included (S701: Yes), the dynamic data flow analysis process adding unit 107 recognizes that the process is in the shared library, does not perform the code embedding process in the basic block 1031, and ends the process.
  • the dynamic data flow analysis processing adding unit 107 takes out the first instruction of the basic block.
  • the extracted instruction is a data movement instruction (S702: Yes)
  • the dynamic data flow analysis process adding unit 107 embeds a code for propagating the tag from the data movement source to the movement destination (S703). Since this process is a known technique in Non-Patent Document 2 and the like, details are omitted.
  • the data movement instruction indicates copying / addition / subtraction between registers, loading from a memory to a register, storing from a register to a memory, push / pop to a stack, and the like.
  • the dynamic data flow analysis processing adding unit 107 determines whether or not the instruction is a call instruction (function call instruction) (S704). If it is a call instruction (S704: Yes), the dynamic data flow analysis process adding unit 107 performs an API data tracking code embedding process (S705).
  • the dynamic data flow analysis processing adding unit 107 stores the API function identifier and the argument value immediately before the call instruction in the thread local area (this value is saved in the stack). Embed the code that temporarily saves.
  • the dynamic data flow analysis processing adding unit 107 stores data stored in the thread local area after the call instruction (argument value and API signature information stored immediately before the call instruction). ) Embed code that implements tag propagation based on Details of the code embedded by the API data tracking code embedding process (S705) will be described with reference to FIGS. 8A, 8B, and 9. FIG.
  • FIG. 8A is an example of calling MultiByteToWideChar, which is a function of a shared library.
  • This shared library function call is executed on the x86 architecture, an execution code as shown in FIG. 8B is obtained.
  • the execution code in FIG. 9 is an example in the case where the dynamic data flow analysis process adding unit 107 embeds the API tracking code in the execution code in FIG. 8B.
  • the embedded API tracking code is described in a C language format surrounded by ⁇ .
  • the contents of the address of the call instruction are inspected immediately before the call instruction, and it is determined whether or not the address is defined in the API address map (FIG. 5).
  • the parameter of the call instruction is the indirect address [0041A2090]
  • the contents of the address “0041A2090” are inspected immediately before the call instruction, and whether or not the address is defined in the API address map (FIG. 5). Is determined (S901).
  • the address of the call instruction is defined in the API address map
  • the fact that the API function is called is recorded in the thread local area (S902).
  • the API signature (FIG. 4) corresponding to the called function the contents of the data flow appearing in the API signature are stored in the thread local area (S903).
  • the address of the call instruction is equal to the MultiByteToWideChar address “0x7C809BF8”
  • the MultiByteToWideChar is called in the thread local area (S902).
  • the third argument and the fifth argument passed to MultiByteToWideChar are stored in an array called TLS in the thread local area (S903).
  • get_tag (x) is a function that reads a tag corresponding to the address x
  • set_tag (x, t) represents a function that changes the value of the tag corresponding to the address x to t.
  • TLS [1] and TLS [2] stored in the thread local area are referred to (S906). Thereafter, tag propagation processing is performed based on the referenced data TLS [1] and TLS [2] (S907).
  • the dynamic data flow analysis process addition unit 107 embeds the API data tracking code inline before and after the call instruction.
  • the tracking process may be combined into a function and the function may be called. .
  • the overhead of function calls is added, but the code size of the entire code is reduced.
  • the determination in S901 is shown by a linear search, but is not limited to this.
  • a search unit such as a hash.
  • the dynamic data flow analysis process adding unit 107 performs the above process (S702 to S705) for all instructions included in the basic block (S706).
  • the tag propagation processing is performed immediately after the function call according to the API signature without performing the tag propagation processing one by one.
  • the tag propagation process is not performed sequentially, but the tag propagation process is not performed inside the API function by performing it all at once (performing the tag propagation in a lump).
  • the execution speed of dynamic data flow analysis can be increased.
  • the target shared library is relatively small, an API signature can be defined for all functions implemented in the shared library, and the functions implemented in the shared library This is especially effective when there is no callback to the user-written code.
  • Embodiment 2 The second embodiment of the present invention is characterized in that two types of code are embedded in a basic block and the execution code is switched during execution.
  • the configuration of the dynamic data flow analysis apparatus according to this embodiment is shown in FIG.
  • the dynamic data flow analysis process adding unit 107 includes an API internal determination process embedding unit 1073, a return process embedding unit 1074, and a function call process embedding unit. 1075, a data tracking code embedding unit 1076, and an API stack 1077.
  • the operation of the dynamic data flow analysis apparatus 100 in this configuration will be described with respect to differences from the first embodiment.
  • Embodiment 1 all functions in the shared library are defined in the API signature.
  • some functions in the shared library are API signatures.
  • only some functions defined in the API signature among the functions in the shared library are API functions.
  • the user code refers to a program other than the API function, that is, a program such as a function that is not defined in the API signature.
  • the API stack 1077 is created in the thread local area when the program is executed.
  • the API stack 1077 stores the history of the called function in the stack data format.
  • the API stack 1077 holds an identifier of an API function or an identifier representing a user code.
  • the API stack 1077 stores one identifier indicating that it is a user code in the initial state.
  • the instrumentation unit 102 embeds two types of codes in the basic block.
  • the two types of code are appropriately switched and executed.
  • the execution code is switched based on whether or not the identifier of the record stored at the top of the API stack 1077 represents a user code.
  • a basic block executed when representing a user code is called a full tracking code, and a code executed when representing an identifier of an API function is called an API tracking code.
  • FIG. 11 shows an example of a basic block generated by this embodiment and a flow of its processing.
  • “API internal determination processing” described in FIG. 11 is an instruction for examining the identifier of a record stored at the top of the API stack 1077.
  • the conditional branch instruction immediately after the “API internal determination process” represents a branch that is true when the result of the “API internal determination process” is user code.
  • the dynamic data flow analysis process adding unit 107 extracts an instruction from the basic block and determines the type of instruction.
  • the instruction type is a data movement instruction (S1301: Yes)
  • the data tracking code embedding unit 1076 executes a data tracking code embedding process (S1303).
  • the instruction type is a call instruction (S1304: Yes)
  • the function call process embedding unit 1075 executes a function call process embedding process (S1305).
  • the return process embedding unit 1074 executes a return process embedding process (S1307).
  • the data tracking code embedding process (S1303) is the same process as in the first embodiment. Details of the function call process embedding process (S1305) and the return process embedding process (S1307) will be described below.
  • the function call process embedding process is different from the API data tracking code embedding process (FIG. 7) of the first embodiment, and the following process is performed.
  • an identifier representing a user code is stored at the top of the API stack 1077, it is determined whether or not the value at the time of execution of the call destination address of the call instruction is a value defined in the API address map (FIG. 4). If defined, pushes a record consisting of an API function identifier, the next address (return address) of the call instruction, and the value of the argument immediately before the call instruction (stored in the stack) onto the API stack 1077 Embed the code to do.
  • the API stack 1077 When an identifier representing an API function is stored at the top of the API stack 1077, whether or not the value at the time of execution of the call destination address of the call instruction is included in the address area stored in the shared library address list is determined. judge. When it is not included in the address area, that is, when it is determined as a user code, the API stack 1077 has a record including an identifier indicating that it is a user code and a next address (return address) of the call instruction. Embed the code to push.
  • the function call processing embedding unit 1075 does not embed code after the call instruction.
  • tag propagation is performed based on the value of the argument stored in the record and the data flow information of the API signature specified by the identifier. I do.
  • the dynamic data flow analysis processing adding unit 107 performs the above processing (S1301 to S1307) for all the instructions included in the basic block (S1308).
  • the code shown in FIG. 14 is an example of the execution code after the function call embedding process is performed on the execution code shown in FIG. 8B.
  • an identifier representing the API function is stored at the top of the API stack 1077 (S1403), it is determined whether the call destination of the call instruction is in the shared library address space. If not included, it is regarded as a callback to the user code, and the identifier representing the user code and the address next to the call instruction are stored in the API stack 1077 (S1404).
  • a function called “is_dll” is called, and by referring to the shared library address list 106 in the “is_dll” function, it is determined whether or not the call instruction call destination is included in the shared library address space. judge. In the present embodiment, it is assumed that the shared library address list 106 holds addresses related to API functions.
  • the return process embedding process will be specifically described with reference to FIG.
  • the code shown in FIG. 15 is an example of the execution code after the return process embedding process is performed on the execution code of the call destination function.
  • the return address stored in the API stack 1077 is referenced immediately before the return instruction ret (S1504), and is it the same as the return destination of the ret instruction (stored in the stack pointer esp)? It is determined whether or not (S1501). If it is determined that they are the same, the record is popped from the API stack 1077 (S1502). Further, when the identifier stored in the record represents an API function, tag propagation processing based on the data flow information defined in the API signature of the API function is performed in the same manner as in the first embodiment. (S1503).
  • FIG. 16 is a flowchart showing the operation of generating the API tracking code. Compared to the operation of generating the full tracking code of FIG. 13, the difference is that nothing is executed in the case of a data movement instruction. That is, in the API tracking code, the data tracking code embedding process (S1303) is not performed. Therefore, in the API tracking code, tag propagation processing is not embedded at the time of a data movement command. The other processing (S1601 to S1608) is the same operation as when generating the full tracking code.
  • tag propagation processing is not performed in the API tracking code. Therefore, in this embodiment, the tag propagation process in the function defined in the API signature can be omitted, and the execution speed of the dynamic data flow analysis is increased.
  • the API stack 1077 is used to determine whether a function (API function) defined in the API signature is being called. Therefore, when only a part of the functions in the shared library is defined in the API signature, the API tracking code is executed when the defined function is executed. On the other hand, when a function that is not defined is executed, a full tracking code is executed, and a tag propagation process is performed by the code added by the data tracking code embedding process (S1303). Therefore, even if an API signature is defined only for a part of functions implemented in the shared library, it operates correctly. Since the API stack includes an identifier indicating whether or not user code is being executed, the API stack operates correctly even when the API has a callback to the user code. However, the price is lower than that of the first embodiment because the processing is more complicated than that of the first embodiment.
  • a function of a shared library that passes data to the callback function cannot be defined in the API signature. If such a function is defined, tag propagation processing is not performed within the function, and the data flow from the function to the callback is not tracked.
  • Embodiment 3 The third embodiment of the present invention has a conservative function call processing embedding unit 1078 instead of the function call processing embedding unit 1075 of the second embodiment as shown in FIG.
  • the conservative function call processing embedding unit 1078 embeds conservative function call processing.
  • FIG. 18 is a flowchart showing an operation in which the conservative function call process embedding unit 1078 embeds the conservative function call process.
  • the conservative function call process embedding process is different from that of the second embodiment in the process of S1803 in FIG. That is, it is different in that it is determined whether the tag of the argument that is the tag propagation source is a default value, that is, an initial value (clean), and the processing is changed based on the determination result.
  • Other processes S1801, S1802, S1804 to S1806) are the same as those in the second embodiment.
  • the API signature of the function is referred to, and the tag of the argument that is the tag propagation source is the default value (clean ) Is determined (S1803). If it is determined to be the default value, the API function identifier, return address, and argument are pushed onto the API stack 1077 (S1804).
  • the execution code shown in FIG. 19 is an example when the conservative function call processing embedding unit 1078 embeds the conservative function call processing in the execution code of FIG. 8B.
  • the propagation source of the tag of the function MultiByteToWideChar is defined as only arg2 (third argument). Therefore, a tag corresponding to the address (esp-2 * 4) of arg2 is acquired, and when the value is a default value (S1901, “0” in FIG. 19), a record is pushed onto the API stack 1077.
  • Embodiment 4 In the fourth embodiment of the present invention, a flag indicating whether or not data transfer by callback occurs is added to the API signature.
  • the operation of the dynamic data flow analysis apparatus 100 in this configuration will be described with reference to the flowchart of FIG. 20 for parts that are different from the third embodiment.
  • the API signature holds a flag indicating whether or not data can be transferred by callback.
  • this flag is referred to (S2007), and if the flag exists, it is considered that no data is transferred by the callback even if the tag is not clean.
  • an API function identifier, a return address, and an argument are pushed onto the API stack.
  • Other processes (S2001 to S2006) are the same as those in the third embodiment.
  • the API tracking code is executed more frequently than in the third embodiment. Therefore, the processing speed can be improved.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

 多くの共有ライブラリをリンクしたプログラムに対する動的データフロー解析を高速化できるデータフロー解析方法、データ解析プログラム、およびデータフロー解析装置を提供する。共有ライブラリに含まれる関数内のデータ受け渡しの仕様をシグネチャとして定義し、格納部(108)に格納する。プログラムからのシグネチャで定義された関数への呼び出しの際に、格納部(108)が保持するシグネチャを参照することにより、呼び出し先での関数内でのタグの伝播の少なくとも一部を省略する。

Description

動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置
 本発明は、動的データフロー追跡装置、動的データフロー追跡方法および動的データフロー追跡プログラムに関し、特にライブラリの仕様に関する情報を用いる動的データフロー追跡装置、動的データフロー追跡方法および動的データフロー追跡プログラムに関する。
 プログラムの実行コードを実行時に一部書き換え、性能測定やバグ発見等のためのコードを埋め込む手法をバイナリインスツルメンテーションと呼ぶ。バイナリインスツルメンテーション技術を用いることにより、ユーザはプロセス内部でどのようにデータがやり取りされているかを実行時に解析することが可能となる。このデータ解析手法を動的データフロー解析と呼ぶ。
 動的データフロー解析では、実行中のプログラムのプロセスにおいて、入力されたデータにある数値を付加する。この数値を「タグ」と呼ぶ。入力されたデータとは、ファイルから読み込まれたデータやネットワーク経由で受信したデータ等を指し、タグとは、当該データがどのような経路で入力されたかを示す情報である。動的データフロー解析では、プロセス内部でタグの付加されたデータがレジスタやメモリ上でコピーされるたびに、そのデータに付加されたタグも同時に伝播する(コピーする)。これにより、入力されたデータがどのような入力に由来したか否かを判定できる。
 動的データフロー解析では、プログラムの実行コードを基本ブロック(Basic Block)と呼ばれる単位に分割し、基本ブロックに対してインスツルメンテーションを行う。インスツルメンテーションとは、プログラムの実行コードを読み込み、その実行コードに対して、ある所定の処理を加えて変更し、その変更した実行コードを実行する機能である。インスツルメンテーション機能の開示例として、非特許文献1が挙げられる。
 動的データフロー解析を情報セキュリティに適応することにより、ユーザはプログラムの脆弱性に対する攻撃や、プログラム実行時の情報漏えいを発見することができる。
 非特許文献2には、動的データフロー解析をプログラムの脆弱性に対する攻撃の発見に適用した技術が開示されている。バッファオーバーフロー攻撃に代表される、プログラムの脆弱性をついて任意のコードを実行させるタイプの攻撃は、以下の2段階のステップにより実行される。
(1)主にネットワークを通じて、外部から不正コードがそのプログラム内にロードされる。
(2)プログラムの制御が、ロードされた不正コードに移る。
 非特許文献2に開示の技術では、動的データフロー解析を用いて、プロセスは信頼できない情報源(たとえば、インターネット経由のデータ受信等)から読み込んだデータに対して実行制御を移すか否かを判定し、(2)が生じたか否かを判定する。このような処理により、ユーザは、バッファオーバーフロー攻撃を発見することや、防止することができる。
 また、非特許文献3には、動的データフロー解析をスパイウェア等による情報漏えいに適用した技術が開示されている。スパイウェアによる情報漏えいは、ユーザの意図に反してプログラムが機密情報をネットワーク等の外部に送信することにより引き起こされる。非特許文献3に開示の技術では、動的データフロー解析を用いて、プロセスがPC(Personal Computer)内の文書ファイル等の機密度の高い情報元から読み込んだデータを、インターネット経由等のデータ送信等の信頼できない対象に対して出力したか否かを判定することにより、情報漏えいを発見する。
 上述のように、動的データフロー解析は、情報セキュリティ上の問題を発見することが可能である。しかし、動的データフロー解析はプログラム実行時に内部データのやり取りを逐一記録していくため、プログラム実行速度が低下するという課題がある。
 この課題に対して、いくつかのプログラム実行高速化手法が提案されている。非特許文献4に開示の技術では、基本ブロックの実行開始時に、その基本ブロック内で使用されるレジスタがクリーン(機密情報に由来しない状態)であれば、メモリからレジスタへのロードを除いて、データのトレース処理を省略したコード(Fast Pathコード)を実行する。一方、その基本ブロック内で使用されるレジスタがクリーンでない場合、データのトレース処理を埋め込んだコード(Track Pathコード)を実行する手法を提案している。
Chi-keung Luk, Robert Cohn, Robert Muth, Harish Patil, Artur Klauser, Geoff Lowney, Steven Wallace, Vijay Janapa, Reddi Kim Hazelwood, Pin: Building customized program analysis tools with dynamic instrumentation, In Programming Language Design and Implementation, Chicago, IL, June 2005. James Newsome, Dawn Song, Dynamic Taint Analysis for Automatic Detection, Analysis, and Signature Generation of Exploits on Commodity Software, NDSS 2005. Neil Vachharajani, Matthew J. Bridges, Jonathan Chang, Ram Rangan, Guilherme Ottoni, Jason A. Blome, George A. Reis, Manish Vachharajani, and David I. August, RIFLE: An Architectural Framework for User-Centric Information-Flow Security, ACM/IEEE International Symposium on Microarchitecture (MICRO'04) 2004. Feng Qin, Cheng Wang, Zhenmin Li, Ho-seop Kim, Yuanyuan Zhou, and Youfeng Wu, LIFT: A Low-Overhead Practical Information Flow Tracking System for Detecting Security Attacks, ACM/IEEE International Symposium on Microarchitecture (MICRO'06), 2006.
 しかしながら、クライアントマシンで実行されるアプリケーションでは、多くのDLL(Dynamic Link Library)等の共有ライブラリがプログラムにリンクされている。このため、動的データフロー解析では、このようなプログラムを解析する場合、プログラムにリンクされた共有ライブラリ内のデータ授受を逐一追跡する必要があり、実行速度の低下が特に問題となる。
 本発明は、このような問題点を解決するためになされたものであり、複数の共有ライブラリをリンクしたプログラムに対する動的データフロー解析を高速化することができるデータフロー追跡方法、データフロー追跡プログラム、およびデータフロー追跡装置を提供することを目的とする。
 本発明にかかる動的データフロー追跡方法の一態様は、プロセス内のデータに対してタグを設定し、前記プロセス内のデータの受け渡しに応じてタグを伝播させることにより、動的にデータフローを追跡する動的データフロー追跡方法において、共有ライブラリに含まれる関数内のデータ受け渡しの仕様をシグネチャとして定義し、プログラムからの前記シグネチャで定義された関数への呼び出しの際に、前記シグネチャを参照することにより、前記関数内でのタグの伝播の少なくとも一部を省略するものである。
 本発明により、複数の共有ライブラリをリンクしたプログラムに対する動的データフロー解析を高速化することができる動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置を提供することができる。
 上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。
実施の形態1にかかる動的データフロー解析装置のブロック図である。 実施の形態1にかかる動的データフロー解析装置のブロック図である。 実施の形態1にかかる基本ブロックへのコード埋め込みを表す概念図である。 実施の形態1にかかるAPIシグネチャの図である。 実施の形態1にかかるAPIアドレスマップの図である。 実施の形態1にかかる共有ライブラリアドレスリストの図である。 実施の形態1にかかる基本ブロックへのコード埋め込み処理を示すフローチャートである。 実施の形態1にかかる共有ライブラリの関数呼び出しコードの例である。 実施の形態1にかかる実行コードの図である。 実施の形態1にかかるAPI追跡コードの埋め込まれた実行コードの図である。 実施の形態2にかかる動的データフロー解析装置のブロック図である。 実施の形態2にかかる基本ブロックの図である。 実施の形態2にかかる基本ブロック生成のフローチャートである。 実施の形態2にかかるフル追跡コード生成処理のフローチャートである。 実施の形態2にかかる関数コール埋め込み処理が行われた実行コードの図である。 実施の形態2にかかるリターン処理埋め込み処理が行われた実行コードの図である。 実施の形態2にかかるAPI内追跡コード生成処理のフローチャートである。 実施の形態3にかかる動的データフロー解析装置のブロック図である。 実施の形態3にかかる保守的関数コール処理埋め込み処理のフローチャートである。 実施の形態3にかかる保守的関数コール処理埋め込み処理が行われた実行コードの図である。 実施の形態4にかかる保守的関数コール処理埋め込み処理のフローチャートである。
 実施の形態1
 以下、図面を参照して本発明の実施の形態について説明する。
まず、図1を参照して、本発明の実施の形態1にかかる動的データフロー解析装置の概要について説明する。本発明の実施の形態1にかかる動的データフロー解析装置100は、動的データフロー解析処理追加部107と、格納部108とを備える構成である。本実施の形態にかかる動的データフロー解析装置は、プロセス内のデータに対して、そのデータの入手経路を示すタグを設定し、プロセス内のデータの受け渡しに応じてタグを伝播させることにより、動的にデータフローを追跡するものである。
 格納部108は、共有ライブラリに含まれる関数(ユーザーコード)内のデータ受け渡しの仕様が定義されたシグネチャを格納する。動的データフロー解析処理追加部107は、プログラムからの、シグネチャ(以下、API(Application Program Interface)シグネチャともいう)で定義された関数への呼び出しの際に、シグネチャを参照することにより、関数内でのタグの伝播の少なくとも一部を省略させ、好ましくはタグを一括して伝播させる。ここで、本実施の形態にかかる動的データフロー解析処理追加部107は、関数の呼び出しの際に、タグの伝播処理を関数呼び出しの前後又は呼び出し先の関数に追加する。なお、本実施の形態においては、タグを一括して伝播する例について説明するが、タグの伝播の少なくとも一部を省略することで、タグの伝搬処理に応じて生ずる処理を低減し、高速化することができる。
 次に図2を用いて、本発明の実施の形態1にかかる動的データフロー解析装置の構成の詳細について説明する。図1に示す動的データフロー解析装置100は、具体的には、図2に示す動的データフロー解析装置100のように記載することができる。この動的データフロー解析装置100は、プログラム制御により動作するコンピュータ、例えば中央処理装置(CPU:Central Processing Unit、図2中では図示を省略する)が実行するソフトウェアとして構成することができる。この動的データフロー解析装置100は、オペレーティングシステム101と、インスツルメンテーション部102と、アプリケーションプログラム103と、共有ライブラリ解析部104と、動的データフロー解析処理追加部107と、API知識格納部108とを備える。図1における動的データフロー解析処理追加部107は、図2における動的データフロー解析処理追加部107に対応する。また、図1における格納部108は、図2におけるAPI知識格納部108に対応する。
 オペレーティングシステム101は、コンピュータにおいて、ハードウェアを抽象化したインターフェイスをアプリケーションソフトウェアに提供するソフトウェアであり、基本ソフトウェアの一種である。
 インスツルメンテーション部102は、アプリケーションプログラム103の実行コードを読み込み、基本ブロックに分割する。また、インスツルメンテーション部102は、動的データフロー解析処理追加部107を用いて、基本ブロックに動的データフロー解析処理を追加する変更を行い、変更された基本ブロックをインスツルメンテーション部102内のデータキャッシュに格納する。
 アプリケーションプログラム103は、PC上で実行される任意のプログラムである。共有ライブラリ解析部104は、インスツルメンテーション部102がロードした実行コードと、実行コードにリンクされた共有ライブラリの情報とを入力として受け付ける。共有ライブラリ解析部104は、前記入力と、API知識格納部108内の情報とを基に、APIアドレスマップ105と共有ライブラリアドレスリスト106とを出力する。
 動的データフロー解析処理追加部107は、データ追跡コード埋め込み部1071と、APIデータ追跡コード埋め込み部1072とを備える。動的データフロー解析処理追加部107は、インスツルメンテーション部102から基本ブロックを入力として受け付ける。また、動的データフロー解析処理追加部107は、APIアドレスマップ105と、共有ライブラリアドレスリスト106と、API知識格納部108内の情報とを基に、基本ブロックにデータの入出力の依存関係を検出するためのコードを生成して、基本ブロックにそのコードを埋め込む。その後、動的データフロー解析処理追加部107は、生成した基本ブロックをインスツルメンテーション部102に出力する。
 API知識格納部108は、APIシグネチャに関する情報を格納する。ここで、APIシグネチャとは、プログラムから呼び出される共有ライブラリの関数のAPIに関する情報を示す。このAPIシグネチャは、どのAPI関数が、引数と戻り値の間で、どのようなデータフロー(データの受け渡し)を起こしうるかを規定した情報である。APIシグネチャは、モジュール名や関数名のようにAPI関数を識別する情報と、そのAPI関数の呼び出しがどのようなデータフロー(データの受け渡し)を引き起こすかを定義した情報とを備える。また、API関数とは、APIシグネチャに定義された関数を示す。本実施の形態では、共有ライブラリに含まれる関数がすべてAPIシグネチャに定義されているものとする。つまり、本実施の形態では、共有ライブラリの全ての関数がAPI関数となる。
 なお、動的データフロー解析装置100は、CPUにコンピュータプログラムを実行させることにより実現するソフトウェアとして説明するが、ハードウェアとして実現してもよい。また、CPUが実行するコンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の通信媒体を介して伝送することにより提供することも可能である。また、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、CD-ROM、DVD、ROMカートリッジ、バッテリバックアップ付きRAMメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性RAMカートリッジ等が含まれる。また、通信媒体には、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等が含まれる。
 次に図3を用いて、主にインスツルメンテーション部102によって行われる、インスツルメンテーション処理の概要を説明する。
 一般にコンピュータ上でプログラムが実行されている場合、ローダはそのプログラムの実行コードと、そのプログラムがリンクしている共有ライブラリの実行コードとを読み込む。そして、ローダは、プログラムの実行開始位置に制御を移し、メモリ上に読み込まれたプログラムコードそのものの実行を開始する。
 これに対し、インスツルメンテーション部102は以下の処理を行う。インスツルメンテーション部102は、プログラムの実行コードと共有ライブラリの実行コードとが読み込まれた際に、共有ライブラリ解析部104を呼び出す。共有ライブラリ解析部104の処理は後述する。共有ライブラリ解析部104の処理の後、インスツルメンテーション部102は、実行コードをメモリ上に読み込む。インスツルメンテーション部102は、その実行コードの実行開始位置から、実行コードのあるまとまりである基本ブロック1031を取り出す。その後、インスツルメンテーション部102は、動的データフロー解析処理追加部107を呼び出し、基本ブロック1031に対して動的データフロー解析処理追加部107で定義された処理を実施させる。
 動的データフロー解析処理追加部107は、基本ブロック1031に対して動的データフロー解析処理を埋め込み、その生成した基本ブロック1031をインスツルメンテーション部102に移す。インスツルメンテーション部102は、生成された基本ブロック1031に制御を移し、その基本ブロック1031の実行を行う。また、インスツルメンテーション部102は、生成された基本ブロック1031をコードキャッシュ1021に格納する。
 以後のプログラム実行において、同じ基本ブロック1031を実行する必要が生じた場合、コードキャッシュ1021に格納された変換済みの基本ブロック1031に制御を移す。このように変換済みの基本ブロック1031をキャッシュすることによって、処理時間のかかるコード埋め込み処理は、原則として最初の1回しか生じないようにする。また、コードキャッシュ1021に格納された基本ブロック1031から、コードキャッシュ1021に格納された別の基本ブロック1031に直接分岐する場合は、一旦インスツルメンテーション部102に制御を移すことなく、呼び出し先のコードキャッシュ1021中の基本ブロック1031に直接分岐するように、呼び出し元となるコードキャッシュ1021中の基本ブロック1031を書き換えるなど、公知の様々な高速化手段を適用することによって、アプリケーションの実行速度の低下を抑えることができる。
 インスツルメンテーション部102は、上述の基本ブロック変換処理を全ての基本ブロック1031に対して行う。
 次に図4を用いて、API知識格納部108に格納されたAPIシグネチャについて説明する。図4記載のAPIシグネチャには、共有ライブラリであるkernel32.dllというDLLに実装されているGetProcAddressとMultiByteToWideCharという関数と、その関数のデータフローに関する情報とが定義されている。
 図4におけるGetProcAddressは、API関数の引数間および引数と戻り値の間でデータフローを引き起こさないため、APIシグネチャにデータフローに関する情報は定義されていない。一方、MultiByteToWideCharは、第3引数と第5引数の間でデータフローが引き起こされるので、データフローに関する情報が定義されている。このデータフローに関する情報は、MultiByteToWideCharの第5引数がNULLではなく、かつ、戻り値が0でない場合は、第3引数に渡されたバッファの内容(先頭から、戻り値の数値分の長さの領域)が、第5引数に渡されたバッファの内容(先頭から、戻り値に2をかけた数値分の長さの領域)にコピーされることを表す。
 続いて、共有ライブラリ解析部104の処理について説明する。共有ライブラリ解析部104は、インスツルメンテーション部102がアプリケーションプログラム103の基本ブロックや、それにリンクしている共有ライブラリ(DLL)をメモリ上にロードした際に呼び出される。共有ライブラリ解析部104は、ロードされた基本ブロックや共有ライブラリが呼び出しているAPI関数を列挙し、API知識格納部108に定義されているAPIとその開始アドレス、すなわちAPI関数の関数名とその開始アドレスとの対応表を作成する。この対応表をAPIアドレスマップ105と呼ぶ。
 APIアドレスマップ105は、実行対象とするアプリケーションプログラム103から直接あるいは他のAPI関数を介して間接的に呼び出されているAPI関数のうち、API知識格納部108で定義されているAPI関数の名前と開始アドレスの対が保存される(図5)。
 共有ライブラリ解析部104は、APIアドレスマップ105の生成に加え、ロードされた全ての共有ライブラリの開始アドレスと終了アドレスとの対の集合である共有ライブラリアドレスリスト106も生成する(図6)。
 次に、動的データフロー解析処理追加部107によるデータフロー解析処理追加処理について図7を用いて説明する。図7は、動的データフロー解析処理追加手段107が基本ブロック1031に対してコード埋め込み処理を行う際の動作を示すフローチャートである。
 動的データフロー解析処理追加部107は、インスツルメンテーション部102が読み込んだ基本ブロック1031の開始アドレスが共有ライブラリアドレスリスト106に格納されているいずれかの組の、開始アドレスと終了アドレスの間に含まれるか否かを判定する(S701)。含まれている場合(S701:Yes)、動的データフロー解析処理追加部107は、共有ライブラリ内での処理と認識し、当該基本ブロック1031にコード埋め込み処理を行わず、処理を終了する。
 一方、含まれない場(S701:No)合、動的データフロー解析処理追加部107は、基本ブロックの最初のインストラクションを取り出す。動的データフロー解析処理追加部107は、取り出したインストラクションがデータ移動命令である場合(S702:Yes)、データの移動元から移動先にタグを伝播するためのコードを埋め込む(S703)。この処理は、非特許文献2などで公知な手法であるため、詳細は割愛する。データ移動命令とは、レジスタ同士のコピー・加減算や、メモリからレジスタへのロード、あるいは、レジスタからメモリへのストア、スタックへのプッシュ・ポップ等を指す。
 基本ブロックから取り出したインストラクションがデータ移動命令でない場合(S702:No)、動的データフロー解析処理追加部107は、そのインストラクションがcall命令(関数呼び出し命令)か否かを判定する(S704)。call命令である場合(S704:Yes)、動的データフロー解析処理追加部107は、APIデータ追跡コードの埋め込み処理を実施する(S705)。
 APIデータ追跡コード埋め込み処理(S705)では、call命令の呼び出し先アドレスの実行時の値が、APIアドレスマップ(図5)に定義されている値か否かを判定する。定義されている場合、動的データフロー解析処理追加部107は、スレッドローカル領域に、そのAPI関数の識別子と、call命令の直前の引数の値(この値は、スタックに保存されている。) を一時保存するコードを埋め込む。また、動的データフロー解析処理追加部107は、API関数が呼び出された場合、call命令の後に、スレッドローカル領域に保存されたデータ(call命令の直前で保存した引数の値とAPIシグネチャの情報)に基づいてタグの伝播を実施するコードを埋め込む。このAPIデータ追跡コード埋め込み処理(S705)により埋め込まれたコードの詳細を図8A、図8B、図9を用いて説明する。
 図8Aは、共有ライブラリの関数であるMultiByteToWideCharの呼び出しの例である。この共有ライブラリの関数呼び出しは、x86アーキテクチャ上で実行される場合、図8Bのような実行コードとなる。図9の実行コードは、図8Bの実行コードに対して、動的データフロー解析処理追加部107がAPI追跡コードを埋め込んだ場合の例である。なお、理解の容易化のため、図9では、埋め込んだAPI追跡コードは{ } で囲んだC言語の形式で記述している。
 API追跡コードでは、call命令の直前でcall命令のアドレスの内容を検査し、APIアドレスマップ(図5)に定義されているアドレスか否かを判定する。本実施の形態では、call命令のパラメータは間接アドレス[0041A2090]であるため、call命令の直前でアドレス"0041A2090"の内容を検査し、APIアドレスマップ(図5)に定義されているアドレスか否かを判定する(S901)。
 call命令のアドレスがAPIアドレスマップに定義されていた場合、スレッドローカル領域に、API関数が呼び出されたことを記録する(S902)。また、呼び出された関数に対応するAPIシグネチャ(図4)に基づいて、APIシグネチャに現れるデータフローの内容をスレッドローカル領域に保存する(S903)。本実施の形態では、call命令のアドレスがMultiByteToWideCharのアドレス"0x7C809BF8"と等しい場合、スレッドローカル領域にMultiByteToWideCharが呼び出されたことを記録する(S902)。また、スレッドローカル領域のTLSという配列にMultiByteToWideCharに渡された第3引数と第5引数を保存する(S903)。
 call命令(S904)の後、スレッドローカル領域に保存されたデータを基に、API関数を呼び出したか否かを判定する(S905)。呼び出されていた場合、呼び出されたAPI関数のAPIシグネチャに基づいて、スレッドローカル領域に保存された引数の値とAPI関数の戻り値(x86の場合はeaxレジスタに保存されている)を参照し(S906)、タグの伝播を行う(S907)。ここで、get_tag(x)は、アドレスxに対応するタグを読む関数であり、set_tag(x,t)は、アドレスxに対応するタグの値をtに変更する関数を表す。
 本実施の形態では、スレッドローカル領域に保存されたデータがMultiByteToWideCharを呼び出したことを示す場合(S905)、スレッドローカル領域に保存されたTLS[1],TLS[2]を参照する(S906)。その後、参照したデータであるTLS[1],TLS[2]を基に、タグの伝播処理を行う(S907)。
 図9に示した例では、動的データフロー解析処理追加部107はcall命令の前後にAPIデータ追跡コードをインラインで埋め込んだが、追跡処理を関数にまとめて、当該関数を呼び出すようにしてもよい。追跡処理を関数にまとめることにより、関数呼び出しのオーバーヘッドがかかるものの、コード全体のコードサイズは小さくなる。
 また、図9に示した実行コード例は、S901における判定を線形探索で示したが、これに限られるものではない。例えば、ハッシュなどの検索部を用いて判定することにより、処理の高速化が図れる。
 動的データフロー解析処理追加部107は、上記の処理(S702~S705)を基本ブロックに含まれる全てのインストラクションについて実施する(S706)。
 上記の一連の処理により、呼び出されたAPI関数の内部では、逐一タグの伝播処理をすることなく、関数呼び出しの直後にAPIシグネチャに則って、タグ伝播処理を行う。このように、本実施の形態においては、タグの伝播処理を逐次行わずに、一気に行う(一括してタグの伝播を行う)ことにより、API関数内部では、タグの伝播処理を行わないため、動的データフロー解析の実行速度を高速化することができる。
 本実施の形態は、対象とする共有ライブラリが比較的小さく、共有ライブラリに実装されている全ての関数に対して、APIシグネチャを定義することができ、かつ、その共有ライブラリに実装されている関数からユーザ記載のコードへのコールバックが仕様上存在しない場合に特に有効である。
 実施の形態2
本発明の実施の形態2は、基本ブロックに2通りのコードの埋め込みを行い、実行時に実行コードを切り替えることを特徴とする。本実施の形態にかかる動的データフロー解析装置の構成を図10に示す。本発明の実施の形態2にかかる動的データフロー解析装置100において、動的データフロー解析処理追加部107は、API内部判定処理埋め込み部1073と、リターン処理埋め込み部1074と、関数コール処理埋め込み部1075と、データ追跡コード埋め込み部1076と、APIスタック1077とを備える。この構成における動的データフロー解析装置100の動作について、第1の実施の形態と異なる部分を説明する。
 ここで、上述の実施の形態1においては、共有ライブラリ内の関数の全てがAPIシグネチャに定義されているものとしたが、本実施の形態においては、共有ライブラリ内の関数の一部がAPIシグネチャに定義されているものとする。つまり、本実施の形態においては、共有ライブラリ内の関数のうち、APIシグネチャに定義されている一部の関数のみがAPI関数となる。また、ユーザコードとは、API関数以外のプログラム、すなわちAPIシグネチャに定義されていない関数等のプログラムを指す。
 APIスタック1077はプログラム実行時にスレッドローカル領域に作られる。APIスタック1077は、呼び出された関数の履歴をスタックのデータ形式で保存する。APIスタック1077は、API関数の識別子か、ユーザコードを表す識別子を保持する。APIスタック1077は、初期状態においてユーザコードであることを表す識別子が一つ保存されている。
 本発明の実施の形態2では、インスツルメンテーション部102は、基本ブロックに2通りのコードの埋め込みを行う。プログラム実行時には、2種類のコードを適宜切り替えて実行する。実行コードの切り替えは、APIスタック1077の先頭に保存されたレコードの識別子が、ユーザコードを表すものか否かを基に行う。ユーザコードを表す場合に実行される基本ブロックをフル追跡コード、API関数の識別子を表す場合に実行されるコードをAPI内追跡コードと呼ぶ。
 図11に、本実施の形態によって、生成される基本ブロックとその処理の流れの例とを示す。図11に記載の「API内部判定処理」は、APIスタック1077の先頭に保存されたレコードの識別子を調べる命令である。また、「API内部判定処理」直後の条件分岐命令は、「API内部判定処理」の結果がユーザコードである場合に真となる分岐を表す。
 次に、図12を用い、本実施の形態における基本ブロックの生成処理を説明する。本実施の形態での基本ブロックの生成では、最初にAPI内部判定処理を基本ブロックの先頭に埋め込む(S1201)。続いて、API内追跡コードを生成する処理を実施し(S1202)、最後にフル追跡コードを生成する処理を行う(S1203)。
 次に図13を用いて、フル追跡コードを生成する処理を説明する。動的データフロー解析処理追加部107は、実施の形態1と同様に、基本ブロックからインストラクションを取り出し、命令の種類を判定する。命令種別がデータ移動命令である場合(S1301:Yes)、データ追跡コード埋め込み部1076は、データ追跡コード埋め込み処理(S1303)を実行する。命令種別がcall命令である場合(S1304:Yes)、関数コール処理埋め込み部1075は、関数コール処理埋め込み処理(S1305)を実行する。命令種別がret命令である場合(S1306:Yes)、リターン処理埋め込み部1074は、リターン処理埋め込み処理(S1307)を実行する。データ追跡コード埋め込み処理(S1303)は、第1の実施の形態と同様の処理である。以下に、関数コール処理埋め込み処理(S1305)とリターン処理埋め込み処理(S1307)の詳細を示す。
 関数コール処理埋め込み処理は、実施の形態1のAPIデータ追跡コード埋め込み処理(図7)と異なり、以下の処理を行う。
 APIスタック1077の先頭にユーザコードを表す識別子が保存されている場合、call命令の呼び出し先アドレスの実行時の値がAPIアドレスマップ(図4)に定義されている値か否かを判定する。定義されている場合、APIスタック1077にAPI関数の識別子と、call命令の次のアドレス(戻りアドレス)と、call命令の直前の引数の値(スタックに保存されている)とから成るレコードをプッシュするコードを埋め込む。
 APIスタック1077の先頭にAPI関数を表す識別子が保存されている場合、call命令の呼び出し先アドレスの実行時の値が、共有ライブラリアドレスリストに保存されているアドレス領域内に含まれるか否かを判定する。前記アドレス領域内に含まれない場合、すなわち、ユーザコードと判定される場合に、APIスタック1077にユーザコードであることを表す識別子と、call命令の次のアドレス(戻りアドレス)とから成るレコードをプッシュするコードを埋め込む。
APIスタック1077の先頭に格納された識別子の値にかかわらず、関数コール処理埋め込み部1075は、call命令の後にコードの埋め込みを行わない。
 続いて、リターン処理埋め込み処理において追加されるコードについて説明を行う。最初に、APIスタック1077の先頭にあるレコードを検査し、レコードに保存されているアドレス(戻りアドレス)が、アプリケーションプロセスのスタックの先頭に保存されているリターン命令の戻り先と一致している場合、APIスタック1077からレコードをポップする。
 ポップしたレコードに保存されている識別子が、API関数を表す識別子である場合、レコードに保存された引数の値と、その識別子で特定されるAPIシグネチャのデータフロー情報とに基づいて、タグの伝播を行う。
 動的データフロー解析処理追加部107は、以上の処理(S1301~S1307)を、基本ブロックに含まれる全てのインストラクションに対して実施する(S1308)。
 次に、図14を用いて、より詳細な関数コール埋め込み処理の説明を行う。図14に示すコードは、図8Bに示される実行コードに対して、関数コール埋め込み処理を実施した後の実行コードの例である。
 関数コール埋め込み処理では、APIスタック1077の先頭にユーザコードを表す識別子が保存されている場合(S1401)、call命令の呼び出し先のアドレスがAPIアドレスマップ105に含まれているか否かを判定する。含まれている場合、そのAPI関数の識別子と、call命令の次のアドレスと、call命令で表される関数呼び出しの引数(スタックに保存されている)とを、APIスタック1077に保存する(S1402)。
 一方、APIスタック1077の先頭にAPI関数を表す識別子が保存されている場合(S1403)、call命令の呼び出し先が共有ライブラリのアドレス空間内か否かを判定する。含まれない場合、ユーザコードへのコールバックとみなして、ユーザコードを表す識別子と、call命令の次のアドレスとを、APIスタック1077に保存する(S1404)。図14の例では、"is_dll"という関数を呼び出し、"is_dll"関数内で共有ライブラリアドレスリスト106を参照することにより、call命令の呼び出し先が共有ライブラリのアドレス空間内に含まれるか否かを判定する。本実施の形態では、共有ライブラリアドレスリスト106は、API関数にかかるアドレスを保持するものとする。
 図15を用いて、リターン処理埋め込み処理について具体的に説明する。図15に示すコードは、呼び出し先の関数の実行コードに対して、リターン処理埋め込み処理を実施した後の実行コードの例である。
 図15の例では、リターン命令ret(S1504)の直前に、APIスタック1077に保存されている戻りアドレスを参照し、それがret命令の戻り先(スタックポインタespに保存されている)と同じか否かを判定する(S1501)。同じと判定された場合、APIスタック1077からレコードをポップする(S1502)。さらに、そのレコードに保存された識別子がAPI関数を表すものであった場合、そのAPI関数のAPIシグネチャに定義されたデータフロー情報に基づくタグの伝播処理を実施の形態1の場合と同様に行う(S1503)。
 図16は、API内追跡コードを生成する動作を表すフローチャートである。図13のフル追跡コードを生成する動作と比較すると、データ移動命令の場合に何も実行しない点が異なる。つまり、API内追跡コードでは、データ追跡コード埋め込みの処理(S1303)が行われない。従って、API内追跡コードでは、データ移動命令時にタグの伝播処理が埋め込まれない。なお、他の処理(S1601~S1608)は、フル追跡コード生成時と同じ動作となる。
 上記一連の処理により、API内追跡コード内では、逐一タグの伝播処理が行われない。よって、本実施の形態では、APIシグネチャに定義された関数内でのタグ伝播処理が省略でき、動的データフロー解析の実行速度が高速化される。
 また、本実施の形態は、APIスタック1077を用いて、APIシグネチャに定義された関数(API関数)が呼び出し中かを判定している。そのため、共有ライブラリ内の関数のうち、一部のみがAPIシグネチャに定義されている場合、定義されている関数の実行時には、API内追跡コードが実行される。一方、定義されていない関数の実行時には、フル追跡コードが実行され、データ追跡コード埋め込み処理(S1303)により追加されたコードによりタグの伝播処理が行われる。従って、共有ライブラリに実装されている一部の関数に対してのみAPIシグネチャが定義されている場合でも正しく動作する。また、APIスタックにはユーザコード実行中か否かを表す識別子が含まれるため、そのAPIがユーザコードへのコールバックを持つ場合でも、正しく動作する。しかし、その代償として、実施の形態1よりも処理が複雑なため、実施の形態1より実行速度が低下する。
 なお、本実施の形態では、コールバック関数へデータの受け渡しをする共有ライブラリの関数を、APIシグネチャに定義することはできない。もしそのような関数を定義すると、その関数内部ではタグの伝播処理が行われないため、当該関数からコールバックへのデータフローが追跡されなくなってしまう。
 実施の形態3
 本発明の実施の形態3は、図17に示すように実施の形態2の関数コール処理埋め込み部1075の変わりに、保守的関数コール処理埋め込み部1078を有する。保守的関数コール処理埋め込み部1078は、保守的関数コール処理の埋め込みを行う。次に、本実施の形態にかかる第2の実施の形態と異なる部分の動的データフロー解析装置100の動作について説明する。
 図18は、保守的関数コール処理埋め込み部1078が保守的関数コール処理を埋め込む動作を表すフローチャートである。保守的関数コール処理埋め込み処理は、図18のS1803の処理が実施の形態2と異なる。つまり、タグの伝播元となっている引数のタグが既定値、つまり初期値(クリーン)であるか否かを判定し、その判定結果に基づいて処理を変更している点が異なる。他の処理(S1801、S1802、S1804~S1806)は実施の形態2と同様の動作となる。
 本実施の形態では、call先のアドレスがAPIアドレスマップ105に存在する関数の場合であっても、その関数のAPIシグネチャを参照し、タグ伝播元となっている引数のタグが既定値(クリーン)かどうかを判定する(S1803)。既定値と判定された場合、APIスタックに当該API関数の識別子と、戻りアドレスと、引数とをAPIスタック1077にプッシュする(S1804)。
 図19が示す実行コードは、図8Bの実行コードに対して、保守的関数コール処理埋め込み部1078が保守的関数コール処理を埋め込んだ場合の例である。図4に示すAPIシグネチャにおいて、MultiByteToWideCharという関数のタグの伝播元は、arg2(3番目の引数)のみと定義されている。そのため、arg2のアドレス (esp-2*4)に対応するタグを取得し、その値が既定値である場合(S1901、図19では「0」)、APIスタック1077にレコードをプッシュしている。
 上記一連の処理により、API関数に対して、追跡すべきデータ、つまり既定値以外のタグを持つデータが渡された場合、APIスタックへのレコードのプッシュは行わない。API内部判定処理では、API関数内部での処理と判定されず、フル追跡コードが実行される。そのため、API関数内部でもタグの伝播が逐次行わる。これにより、当該API関数内でコールバックが生じ、かつそのコールバック先の関数にデータを受け渡しても、タグの伝播が実行される。ただし、本実施の形態は、前述の実施の形態2よりもAPI内追跡コードが実行される頻度が下がるため、実行速度はやや低下する。
 実施の形態4
 本発明の実施の形態4は、APIシグネチャに、コールバックによるデータの受け渡しが生じるか否かを示すフラグを追加するものである。この構成における動的データフロー解析装置100の動作について、第3の実施の形態と異なる部分を図20のフローチャートを用いて説明する。
 本実施の形態では、APIシグネチャは、コールバックによるデータの受け渡しが生じうるか否かを示すフラグを保持する。保守的関数コール処理埋め込み処理では、このフラグを参照し(S2007)、フラグが存在する場合、タグがクリーンでなくても、コールバックによるデータの受け渡しが生じないとみなす。この場合に、APIスタックにAPI関数の識別子と、戻りアドレスと、引数とをプッシュする。他の処理(S2001~S2006)は実施の形態3と同様の動作となる。
 上記の一連の処理により、実施の形態3に比べて、API内追跡コードの実行される頻度が多くなる。そのため、処理速度の向上が図れる。
 なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
 この出願は、2009年5月20日に出願された日本特許出願特願2009-122345を基礎とする優先権を主張し、その開示の全てをここに取り込む。

Claims (21)

  1.  プロセス内のデータに対してタグを設定し、前記プロセス内のデータの受け渡しに応じてタグを伝播させることにより、動的にデータフローを追跡する動的データフロー追跡方法において、
     共有ライブラリに含まれる関数内のデータ受け渡しの仕様をシグネチャとして定義し、
     プログラムからの前記シグネチャで定義された関数への呼び出しの際に、前記シグネチャを参照することにより、前記関数内でのタグの伝播の少なくとも一部を省略する動的データフロー追跡方法。
  2.  前記関数の呼び出しの際に、一括してタグを伝播する請求項1の動的データフロー追跡方法。
  3.  実行中のコードである実行コードが前記共有ライブラリに含まれるか否かを判定し、この判定結果に基づき前記タグの伝播の少なくとも一部を省略する請求項1または請求項2に記載の動的データフロー追跡方法。
  4.  メモリ上における、前記共有ライブラリのアドレス情報と前記実行コードのアドレス情報とを比較することにより、前記実行コードが前記共有ライブラリに含まれるか否かを判定する請求項3に記載の動的データフロー追跡方法。
  5.  前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、その戻りアドレスと引数の値とを履歴情報として保存し、タグの伝播の少なくとも一部を省略する第1の状態に移行し、
     前記第1の状態で前記シグネチャに定義されていない関数のアドレスへの関数が呼び出された場合、その戻りアドレスを履歴情報として保存し、タグの伝播を省略しない第2の状態に移行し、
     関数呼び出しからのリターンの際に、戻り先が最新の履歴情報に含まれる戻りアドレスと一致する場合は最新の履歴情報を取り除き、かつ前記第1の状態である場合はタグの伝播の少なくとも一部を省略する請求項1または請求項2に記載の動的データフロー追跡方法。
  6.  前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合に限り、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する請求項5に記載の動的データフロー追跡方法。
  7.  前記シグネチャに定義されている関数から前記シグネチャに定義されていない関数へのコールバックが生じ、かつ前記シグネチャに定義されている関数に渡されたデータが前記コールバックに応じて受け渡されうるか否かの情報を前記シグネチャに定義しておき、
     前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合、または前記タグが既定値でなく、かつコールバックに応じてデータ受け渡しがなされない場合に、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する請求項5に記載の動的データフロー追跡方法。
  8.  プロセス内部のデータに対してタグを設定し、プロセス内のデータの受け渡しに応じてタグを伝播させることにより、動的にデータフローを追跡する動的データフロー追跡動作をコンピュータに実行させるためのプログラムであって、
     共有ライブラリに含まれる関数内のデータ受け渡しの仕様をシグネチャとして定義し、
     プログラムからの前記シグネチャで定義された関数への呼び出しの際に、前記シグネチャを参照することにより、前記関数内でのタグの伝播の少なくとも一部を省略する動的データフロー追跡プログラム。
  9.  前記関数の呼び出しの際に、一括してタグを伝播する請求項8に記載の動的データフロー追跡プログラム。
  10.  実行中のコードである実行コードが前記共有ライブラリに含まれるか否かを判定し、この判定結果に基づき前記タグの伝播の少なくとも一部を省略する請求項8または請求項9に記載の動的データフロー追跡プログラム。
  11.  メモリ上における、前記共有ライブラリのアドレス情報と前記実行コードのアドレス情報とを比較することにより、前記実行コードが前記共有ライブラリに含まれるか否かを判定する請求項10に記載の動的データフロー追跡プログラム。
  12.  前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、その戻りアドレスと引数の値とを履歴情報として保存し、タグの伝播の少なくとも一部を省略する第1の状態に移行し、
     前記第1の状態で前記シグネチャに定義されていない関数のアドレスへの関数が呼び出された場合、その戻りアドレスを履歴情報として保存し、タグの伝播を省略しない第2の状態に移行し、
     関数呼び出しからのリターンの際に、戻り先が最新の履歴情報に含まれる戻りアドレスと一致する場合は最新の履歴情報を取り除き、かつ前記第1の状態である場合はタグの伝播の少なくとも一部を省略する請求項8または請求項9に記載の動的データフロー追跡プログラム。
  13.  前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合に限り、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する請求項12に記載の動的データフロー追跡プログラム。
  14.  前記シグネチャに定義されている関数から前記シグネチャに定義されていない関数へのコールバックが生じ、かつ前記シグネチャに定義されている関数に渡されたデータが前記コールバックに応じて受け渡されうるか否かの情報を前記シグネチャに定義しておき、
     前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合、または前記タグが既定値でなく、かつコールバックに応じてデータ受け渡しがなされない場合に、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する請求項12に記載の動的データフロー追跡プログラム。
  15.  プロセス内のデータに対してタグを設定し、前記プロセス内のデータの受け渡しに応じてタグを伝播させることにより、動的にデータフローを追跡する動的データフロー追跡装置において、
     共有ライブラリに含まれる関数内のデータ受け渡しの仕様が定義されたシグネチャを格納する格納手段と、
     プログラムからの前記シグネチャで定義された関数への呼び出しの際に、前記シグネチャを参照することにより、前記関数内でのタグの伝播の少なくとも一部を省略するタグの伝播処理を追加する動的データフロー解析処理追加手段とを備えた動的データフロー追跡装置。
  16.  前記動的データフロー解析処理追加手段は、前記関数の呼び出しの際に、一括してタグを伝播する前記タグの伝播処理を前記関数呼び出しの前後に追加する請求項15の動的データフロー追跡装置。
  17.  前記動的データフロー解析処理追加手段は、実行中のコードである実行コードが前記共有ライブラリに含まれるか否かを判定し、この判定結果に基づき前記タグの伝播の少なくとも一部を省略する請求項15または請求項16に記載の動的データフロー追跡装置。
  18.  前記動的データフロー解析処理追加手段は、メモリ上における、前記共有ライブラリのアドレス情報と前記実行コードのアドレス情報とを比較することにより、前記実行コードが前記共有ライブラリに含まれるか否かを判定する請求項17に記載の動的データフロー追跡装置。
  19.  前記動的データフロー解析処理追加手段は、
     前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、その戻りアドレスと引数の値とを履歴情報として保存し、タグの伝播の少なくとも一部を省略する第1の状態に移行し、前記第1の状態で前記シグネチャに定義されていない関数のアドレスへの関数が呼び出された場合、その戻りアドレスを履歴情報として保存し、タグの伝播を省略しない第2の状態に移行する処理を呼び出し元のプログラムに追加し、
     関数呼び出しからのリターンの際に、戻り先が最新の履歴情報に含まれる戻りアドレスと一致する場合は最新の履歴情報を取り除き、かつ前記第1の状態である場合は前記シグネチャを参照してタグの伝播の少なくとも一部を省略する処理を呼び出し先のプログラムに追加する請求項15または請求項16に記載の動的データフロー追跡装置。
  20.  前記動的データフロー解析処理追加手段は、前記シグネチャに定義されていない関数から前記シグネチャに定義されている関数が呼び出された際に、前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合に限り、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する処理を前記呼び出し元のプログラムに追加する請求項19の動的データフロー追跡装置。
  21.  前記シグネチャ情報は、前記シグネチャに定義されている関数から前記シグネチャに定義されていない関数へのコールバックが生じ、かつ前記シグネチャに定義されている関数に渡されたデータが前記コールバックに応じて受け渡されうるか否かの情報を含み、
      前記動的データフロー解析処理追加手段は、前記シグネチャに示される、タグの伝播元となっているデータのタグが既定値である場合、または前記タグが既定値でなく、かつコールバックに応じてデータ受け渡しがなされない場合に、その戻りアドレスと引数の値とを履歴情報として保存し、前記第1の状態に移行する処理を前記呼び出し元のプログラムに追加する請求項19の動的データフロー追跡装置。
PCT/JP2010/003346 2009-05-20 2010-05-18 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置 WO2010134325A1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US13/321,753 US20120066698A1 (en) 2009-05-20 2010-05-18 Dynamic data flow tracking method, dynamic data flow tracking program, and dynamic data flow tracking apparatus
JP2011514329A JP5459313B2 (ja) 2009-05-20 2010-05-18 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2009-122345 2009-05-20
JP2009122345 2009-05-20

Publications (1)

Publication Number Publication Date
WO2010134325A1 true WO2010134325A1 (ja) 2010-11-25

Family

ID=43126018

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2010/003346 WO2010134325A1 (ja) 2009-05-20 2010-05-18 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置

Country Status (3)

Country Link
US (1) US20120066698A1 (ja)
JP (1) JP5459313B2 (ja)
WO (1) WO2010134325A1 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014185165A1 (ja) * 2013-05-16 2014-11-20 日本電信電話株式会社 情報処理装置、および、情報処理方法
JP2014225160A (ja) * 2013-05-16 2014-12-04 日本電信電話株式会社 情報処理装置および情報処理方法
JP2016103299A (ja) * 2011-01-07 2016-06-02 アビニシオ テクノロジー エルエルシー フロー分析計装
WO2020252698A1 (zh) * 2019-06-19 2020-12-24 深圳开源互联网安全技术有限公司 一种数据流跟踪方法、系统、存储介质和服务器
CN116467712A (zh) * 2023-04-23 2023-07-21 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统

Families Citing this family (152)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8584239B2 (en) 2004-04-01 2013-11-12 Fireeye, Inc. Virtual machine with dynamic data flow analysis
US8171553B2 (en) 2004-04-01 2012-05-01 Fireeye, Inc. Heuristic based capture with replay to virtual machine
US8793787B2 (en) 2004-04-01 2014-07-29 Fireeye, Inc. Detecting malicious network content using virtual environment components
US8881282B1 (en) 2004-04-01 2014-11-04 Fireeye, Inc. Systems and methods for malware attack detection and identification
US8528086B1 (en) 2004-04-01 2013-09-03 Fireeye, Inc. System and method of detecting computer worms
US9106694B2 (en) 2004-04-01 2015-08-11 Fireeye, Inc. Electronic message analysis for malware detection
US8549638B2 (en) 2004-06-14 2013-10-01 Fireeye, Inc. System and method of containing computer worms
US8566946B1 (en) 2006-04-20 2013-10-22 Fireeye, Inc. Malware containment on connection
US7587537B1 (en) 2007-11-30 2009-09-08 Altera Corporation Serializer-deserializer circuits formed from input-output circuit registers
US8898788B1 (en) 2004-04-01 2014-11-25 Fireeye, Inc. Systems and methods for malware attack prevention
US8997219B2 (en) 2008-11-03 2015-03-31 Fireeye, Inc. Systems and methods for detecting malicious PDF network content
JP4572259B1 (ja) * 2009-04-27 2010-11-04 株式会社フォティーンフォティ技術研究所 情報機器、プログラム及び不正なプログラムコードの実行防止方法
US8832829B2 (en) 2009-09-30 2014-09-09 Fireeye, Inc. Network-based binary file extraction and analysis for malware detection
US8730826B2 (en) * 2010-11-17 2014-05-20 Ixia Testing fragment reassembly
US10572665B2 (en) 2012-12-28 2020-02-25 Fireeye, Inc. System and method to create a number of breakpoints in a virtual machine via virtual machine trapping events
US9176843B1 (en) 2013-02-23 2015-11-03 Fireeye, Inc. Framework for efficient security coverage of mobile software applications
US9195829B1 (en) 2013-02-23 2015-11-24 Fireeye, Inc. User interface with real-time visual playback along with synchronous textual analysis log display and event/time index for anomalous behavior detection in applications
US9009823B1 (en) 2013-02-23 2015-04-14 Fireeye, Inc. Framework for efficient security coverage of mobile software applications installed on mobile devices
US8990944B1 (en) 2013-02-23 2015-03-24 Fireeye, Inc. Systems and methods for automatically detecting backdoors
US9367681B1 (en) 2013-02-23 2016-06-14 Fireeye, Inc. Framework for efficient security coverage of mobile software applications using symbolic execution to reach regions of interest within an application
US9104867B1 (en) 2013-03-13 2015-08-11 Fireeye, Inc. Malicious content analysis using simulated user interaction without user involvement
US9355247B1 (en) 2013-03-13 2016-05-31 Fireeye, Inc. File extraction from memory dump for malicious content analysis
US9626509B1 (en) 2013-03-13 2017-04-18 Fireeye, Inc. Malicious content analysis with multi-version application support within single operating environment
US9311479B1 (en) 2013-03-14 2016-04-12 Fireeye, Inc. Correlation and consolidation of analytic data for holistic view of a malware attack
US9430646B1 (en) * 2013-03-14 2016-08-30 Fireeye, Inc. Distributed systems and methods for automatically detecting unknown bots and botnets
US10713358B2 (en) 2013-03-15 2020-07-14 Fireeye, Inc. System and method to extract and utilize disassembly features to classify software intent
WO2014145805A1 (en) 2013-03-15 2014-09-18 Mandiant, Llc System and method employing structured intelligence to verify and contain threats at endpoints
US9495180B2 (en) 2013-05-10 2016-11-15 Fireeye, Inc. Optimized resource allocation for virtual machines within a malware content detection system
US9635039B1 (en) 2013-05-13 2017-04-25 Fireeye, Inc. Classifying sets of malicious indicators for detecting command and control communications associated with malware
US10133863B2 (en) 2013-06-24 2018-11-20 Fireeye, Inc. Zero-day discovery system
US9300686B2 (en) 2013-06-28 2016-03-29 Fireeye, Inc. System and method for detecting malicious links in electronic messages
CN103440201B (zh) * 2013-09-05 2016-05-18 北京邮电大学 动态污点分析装置及其在文件格式逆向解析中的应用
US9690936B1 (en) 2013-09-30 2017-06-27 Fireeye, Inc. Multistage system and method for analyzing obfuscated content for malware
US9736179B2 (en) 2013-09-30 2017-08-15 Fireeye, Inc. System, apparatus and method for using malware analysis results to drive adaptive instrumentation of virtual machines to improve exploit detection
US9628507B2 (en) 2013-09-30 2017-04-18 Fireeye, Inc. Advanced persistent threat (APT) detection center
US9171160B2 (en) 2013-09-30 2015-10-27 Fireeye, Inc. Dynamically adaptive framework and method for classifying malware using intelligent static, emulation, and dynamic analyses
US10515214B1 (en) 2013-09-30 2019-12-24 Fireeye, Inc. System and method for classifying malware within content created during analysis of a specimen
US9294501B2 (en) 2013-09-30 2016-03-22 Fireeye, Inc. Fuzzy hash of behavioral results
US9921978B1 (en) 2013-11-08 2018-03-20 Fireeye, Inc. System and method for enhanced security of storage devices
US9756074B2 (en) 2013-12-26 2017-09-05 Fireeye, Inc. System and method for IPS and VM-based detection of suspicious objects
US9747446B1 (en) 2013-12-26 2017-08-29 Fireeye, Inc. System and method for run-time object classification
US9292686B2 (en) 2014-01-16 2016-03-22 Fireeye, Inc. Micro-virtualization architecture for threat-aware microvisor deployment in a node of a network environment
US9262635B2 (en) 2014-02-05 2016-02-16 Fireeye, Inc. Detection efficacy of virtual machine-based analysis with application specific events
US9241010B1 (en) 2014-03-20 2016-01-19 Fireeye, Inc. System and method for network behavior detection
US10242185B1 (en) 2014-03-21 2019-03-26 Fireeye, Inc. Dynamic guest image creation and rollback
US9591015B1 (en) 2014-03-28 2017-03-07 Fireeye, Inc. System and method for offloading packet processing and static analysis operations
US9223972B1 (en) 2014-03-31 2015-12-29 Fireeye, Inc. Dynamically remote tuning of a malware content detection system
US9432389B1 (en) 2014-03-31 2016-08-30 Fireeye, Inc. System, apparatus and method for detecting a malicious attack based on static analysis of a multi-flow object
US9594912B1 (en) 2014-06-06 2017-03-14 Fireeye, Inc. Return-oriented programming detection
US9438623B1 (en) 2014-06-06 2016-09-06 Fireeye, Inc. Computer exploit detection using heap spray pattern matching
US9973531B1 (en) 2014-06-06 2018-05-15 Fireeye, Inc. Shellcode detection
US10084813B2 (en) 2014-06-24 2018-09-25 Fireeye, Inc. Intrusion prevention and remedy system
US10805340B1 (en) 2014-06-26 2020-10-13 Fireeye, Inc. Infection vector and malware tracking with an interactive user display
US9398028B1 (en) 2014-06-26 2016-07-19 Fireeye, Inc. System, device and method for detecting a malicious attack based on communcations between remotely hosted virtual machines and malicious web servers
US10002252B2 (en) 2014-07-01 2018-06-19 Fireeye, Inc. Verification of trusted threat-aware microvisor
US9824214B2 (en) 2014-08-15 2017-11-21 Securisea, Inc. High performance software vulnerabilities detection system and methods
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
US10599852B2 (en) 2014-08-15 2020-03-24 Securisea, Inc. High performance software vulnerabilities detection system and methods
US9363280B1 (en) 2014-08-22 2016-06-07 Fireeye, Inc. System and method of detecting delivery of malware using cross-customer data
EP2996034B1 (en) 2014-09-11 2018-08-15 Nxp B.V. Execution flow protection in microcontrollers
US10671726B1 (en) 2014-09-22 2020-06-02 Fireeye Inc. System and method for malware analysis using thread-level event monitoring
US9773112B1 (en) 2014-09-29 2017-09-26 Fireeye, Inc. Exploit detection of malware and malware families
US10027689B1 (en) 2014-09-29 2018-07-17 Fireeye, Inc. Interactive infection visualization for improved exploit detection and signature generation for malware and malware families
US9690933B1 (en) 2014-12-22 2017-06-27 Fireeye, Inc. Framework for classifying an object as malicious with machine learning for deploying updated predictive models
US10075455B2 (en) 2014-12-26 2018-09-11 Fireeye, Inc. Zero-day rotating guest image profile
US9934376B1 (en) 2014-12-29 2018-04-03 Fireeye, Inc. Malware detection appliance architecture
US9838417B1 (en) 2014-12-30 2017-12-05 Fireeye, Inc. Intelligent context aware user interaction for malware detection
US10148693B2 (en) 2015-03-25 2018-12-04 Fireeye, Inc. Exploit detection system
US9690606B1 (en) 2015-03-25 2017-06-27 Fireeye, Inc. Selective system call monitoring
US9438613B1 (en) 2015-03-30 2016-09-06 Fireeye, Inc. Dynamic content activation for automated analysis of embedded objects
US10474813B1 (en) 2015-03-31 2019-11-12 Fireeye, Inc. Code injection technique for remediation at an endpoint of a network
US9483644B1 (en) 2015-03-31 2016-11-01 Fireeye, Inc. Methods for detecting file altering malware in VM based analysis
US10417031B2 (en) 2015-03-31 2019-09-17 Fireeye, Inc. Selective virtualization for security threat detection
US9654485B1 (en) 2015-04-13 2017-05-16 Fireeye, Inc. Analytics-based security monitoring system and method
US9594904B1 (en) 2015-04-23 2017-03-14 Fireeye, Inc. Detecting malware based on reflection
US10642753B1 (en) 2015-06-30 2020-05-05 Fireeye, Inc. System and method for protecting a software component running in virtual machine using a virtualization layer
US10726127B1 (en) 2015-06-30 2020-07-28 Fireeye, Inc. System and method for protecting a software component running in a virtual machine through virtual interrupts by the virtualization layer
US11113086B1 (en) 2015-06-30 2021-09-07 Fireeye, Inc. Virtual system and method for securing external network connectivity
US10454950B1 (en) 2015-06-30 2019-10-22 Fireeye, Inc. Centralized aggregation technique for detecting lateral movement of stealthy cyber-attacks
US10715542B1 (en) 2015-08-14 2020-07-14 Fireeye, Inc. Mobile application risk analysis
US10176321B2 (en) 2015-09-22 2019-01-08 Fireeye, Inc. Leveraging behavior-based rules for malware family classification
US10033747B1 (en) 2015-09-29 2018-07-24 Fireeye, Inc. System and method for detecting interpreter-based exploit attacks
US10210329B1 (en) 2015-09-30 2019-02-19 Fireeye, Inc. Method to detect application execution hijacking using memory protection
US10706149B1 (en) 2015-09-30 2020-07-07 Fireeye, Inc. Detecting delayed activation malware using a primary controller and plural time controllers
US10817606B1 (en) 2015-09-30 2020-10-27 Fireeye, Inc. Detecting delayed activation malware using a run-time monitoring agent and time-dilation logic
US9825976B1 (en) 2015-09-30 2017-11-21 Fireeye, Inc. Detection and classification of exploit kits
US10601865B1 (en) 2015-09-30 2020-03-24 Fireeye, Inc. Detection of credential spearphishing attacks using email analysis
US9825989B1 (en) 2015-09-30 2017-11-21 Fireeye, Inc. Cyber attack early warning system
US10284575B2 (en) 2015-11-10 2019-05-07 Fireeye, Inc. Launcher for setting analysis environment variations for malware detection
US10846117B1 (en) 2015-12-10 2020-11-24 Fireeye, Inc. Technique for establishing secure communication between host and guest processes of a virtualization architecture
US10447728B1 (en) 2015-12-10 2019-10-15 Fireeye, Inc. Technique for protecting guest processes using a layered virtualization architecture
US10108446B1 (en) 2015-12-11 2018-10-23 Fireeye, Inc. Late load technique for deploying a virtualization layer underneath a running operating system
US10050998B1 (en) 2015-12-30 2018-08-14 Fireeye, Inc. Malicious message analysis system
US10565378B1 (en) 2015-12-30 2020-02-18 Fireeye, Inc. Exploit of privilege detection framework
US10133866B1 (en) 2015-12-30 2018-11-20 Fireeye, Inc. System and method for triggering analysis of an object for malware in response to modification of that object
US10621338B1 (en) 2015-12-30 2020-04-14 Fireeye, Inc. Method to detect forgery and exploits using last branch recording registers
US11552986B1 (en) 2015-12-31 2023-01-10 Fireeye Security Holdings Us Llc Cyber-security framework for application of virtual features
US10581874B1 (en) 2015-12-31 2020-03-03 Fireeye, Inc. Malware detection system with contextual analysis
US9824216B1 (en) 2015-12-31 2017-11-21 Fireeye, Inc. Susceptible environment detection system
US10671721B1 (en) 2016-03-25 2020-06-02 Fireeye, Inc. Timeout management services
US10785255B1 (en) 2016-03-25 2020-09-22 Fireeye, Inc. Cluster configuration within a scalable malware detection system
US10476906B1 (en) 2016-03-25 2019-11-12 Fireeye, Inc. System and method for managing formation and modification of a cluster within a malware detection system
US10601863B1 (en) 2016-03-25 2020-03-24 Fireeye, Inc. System and method for managing sensor enrollment
US10893059B1 (en) 2016-03-31 2021-01-12 Fireeye, Inc. Verification and enhancement using detection systems located at the network periphery and endpoint devices
US10826933B1 (en) 2016-03-31 2020-11-03 Fireeye, Inc. Technique for verifying exploit/malware at malware detection appliance through correlation with endpoints
US10169585B1 (en) 2016-06-22 2019-01-01 Fireeye, Inc. System and methods for advanced malware detection through placement of transition events
US10462173B1 (en) 2016-06-30 2019-10-29 Fireeye, Inc. Malware detection verification and enhancement by coordinating endpoint and malware detection systems
US10592678B1 (en) 2016-09-09 2020-03-17 Fireeye, Inc. Secure communications between peers using a verified virtual trusted platform module
US10491627B1 (en) 2016-09-29 2019-11-26 Fireeye, Inc. Advanced malware detection using similarity analysis
US10795991B1 (en) 2016-11-08 2020-10-06 Fireeye, Inc. Enterprise search
US10587647B1 (en) 2016-11-22 2020-03-10 Fireeye, Inc. Technique for malware detection capability comparison of network security devices
US10581879B1 (en) 2016-12-22 2020-03-03 Fireeye, Inc. Enhanced malware detection for generated objects
US10552610B1 (en) 2016-12-22 2020-02-04 Fireeye, Inc. Adaptive virtual machine snapshot update framework for malware behavioral analysis
US10523609B1 (en) 2016-12-27 2019-12-31 Fireeye, Inc. Multi-vector malware detection and analysis
US10904286B1 (en) 2017-03-24 2021-01-26 Fireeye, Inc. Detection of phishing attacks using similarity analysis
US10798112B2 (en) 2017-03-30 2020-10-06 Fireeye, Inc. Attribute-controlled malware detection
US10902119B1 (en) 2017-03-30 2021-01-26 Fireeye, Inc. Data extraction system for malware analysis
US10848397B1 (en) 2017-03-30 2020-11-24 Fireeye, Inc. System and method for enforcing compliance with subscription requirements for cyber-attack detection service
US10791138B1 (en) 2017-03-30 2020-09-29 Fireeye, Inc. Subscription-based malware detection
US10855700B1 (en) 2017-06-29 2020-12-01 Fireeye, Inc. Post-intrusion detection of cyber-attacks during lateral movement within networks
US10503904B1 (en) 2017-06-29 2019-12-10 Fireeye, Inc. Ransomware detection and mitigation
US10601848B1 (en) 2017-06-29 2020-03-24 Fireeye, Inc. Cyber-security system and method for weak indicator detection and correlation to generate strong indicators
US10893068B1 (en) 2017-06-30 2021-01-12 Fireeye, Inc. Ransomware file modification prevention technique
US10747872B1 (en) 2017-09-27 2020-08-18 Fireeye, Inc. System and method for preventing malware evasion
US10805346B2 (en) 2017-10-01 2020-10-13 Fireeye, Inc. Phishing attack detection
US11108809B2 (en) 2017-10-27 2021-08-31 Fireeye, Inc. System and method for analyzing binary code for malware classification using artificial neural network techniques
US11271955B2 (en) 2017-12-28 2022-03-08 Fireeye Security Holdings Us Llc Platform and method for retroactive reclassification employing a cybersecurity-based global data store
US11240275B1 (en) 2017-12-28 2022-02-01 Fireeye Security Holdings Us Llc Platform and method for performing cybersecurity analyses employing an intelligence hub with a modular architecture
US11005860B1 (en) 2017-12-28 2021-05-11 Fireeye, Inc. Method and system for efficient cybersecurity analysis of endpoint events
US10826931B1 (en) 2018-03-29 2020-11-03 Fireeye, Inc. System and method for predicting and mitigating cybersecurity system misconfigurations
US10956477B1 (en) 2018-03-30 2021-03-23 Fireeye, Inc. System and method for detecting malicious scripts through natural language processing modeling
US11003773B1 (en) 2018-03-30 2021-05-11 Fireeye, Inc. System and method for automatically generating malware detection rule recommendations
US11558401B1 (en) 2018-03-30 2023-01-17 Fireeye Security Holdings Us Llc Multi-vector malware detection data sharing system for improved detection
US11075930B1 (en) 2018-06-27 2021-07-27 Fireeye, Inc. System and method for detecting repetitive cybersecurity attacks constituting an email campaign
US11314859B1 (en) 2018-06-27 2022-04-26 FireEye Security Holdings, Inc. Cyber-security system and method for detecting escalation of privileges within an access token
US11228491B1 (en) 2018-06-28 2022-01-18 Fireeye Security Holdings Us Llc System and method for distributed cluster configuration monitoring and management
EP3588900B1 (en) * 2018-06-29 2022-10-05 AO Kaspersky Lab System and method of analyzing the content of encrypted network traffic
US11316900B1 (en) 2018-06-29 2022-04-26 FireEye Security Holdings Inc. System and method for automatically prioritizing rules for cyber-threat detection and mitigation
RU2706894C1 (ru) 2018-06-29 2019-11-21 Акционерное общество "Лаборатория Касперского" Система и способ анализа содержимого зашифрованного сетевого трафика
US11182473B1 (en) 2018-09-13 2021-11-23 Fireeye Security Holdings Us Llc System and method for mitigating cyberattacks against processor operability by a guest process
US11763004B1 (en) 2018-09-27 2023-09-19 Fireeye Security Holdings Us Llc System and method for bootkit detection
US11108675B2 (en) 2018-10-31 2021-08-31 Keysight Technologies, Inc. Methods, systems, and computer readable media for testing effects of simulated frame preemption and deterministic fragmentation of preemptable frames in a frame-preemption-capable network
US11368475B1 (en) 2018-12-21 2022-06-21 Fireeye Security Holdings Us Llc System and method for scanning remote services to locate stored objects with malware
US12074887B1 (en) 2018-12-21 2024-08-27 Musarubra Us Llc System and method for selectively processing content after identification and removal of malicious content
US11258806B1 (en) 2019-06-24 2022-02-22 Mandiant, Inc. System and method for automatically associating cybersecurity intelligence to cyberthreat actors
US11556640B1 (en) 2019-06-27 2023-01-17 Mandiant, Inc. Systems and methods for automated cybersecurity analysis of extracted binary string sets
US11392700B1 (en) 2019-06-28 2022-07-19 Fireeye Security Holdings Us Llc System and method for supporting cross-platform data verification
US11886585B1 (en) 2019-09-27 2024-01-30 Musarubra Us Llc System and method for identifying and mitigating cyberattacks through malicious position-independent code execution
US11637862B1 (en) 2019-09-30 2023-04-25 Mandiant, Inc. System and method for surfacing cyber-security threats with a self-learning recommendation engine
CN112306888B (zh) * 2020-11-13 2022-05-10 武汉天喻信息产业股份有限公司 一种基于设备库文件接口的测试系统和方法
US11321218B1 (en) * 2021-03-08 2022-05-03 Correct Computation, Inc. Automated generation of source code models from machine code for code analysis
US20230095080A1 (en) * 2021-09-30 2023-03-30 Mcafee, Llc Object inspection via operating system share function

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289102A (ja) * 1997-02-17 1998-10-27 Nippon Steel Corp プログラムのデータフロー解析装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442752B1 (en) * 1999-08-26 2002-08-27 Unisys Corporation Method, apparatus, and computer program product for replacing a dynamic link library (dll) of a first computing environment with a dll of a second computing environment that can be invoked from the first computing environment in a transparent manner
US7644441B2 (en) * 2003-09-26 2010-01-05 Cigital, Inc. Methods for identifying malicious software
US7770154B2 (en) * 2005-07-01 2010-08-03 Oracle International Corporation Lightweight highly available infrastructure to trace program execution

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289102A (ja) * 1997-02-17 1998-10-27 Nippon Steel Corp プログラムのデータフロー解析装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SACHIKO YOSHIHAMA: "Language-based Information Flow Control in Dynamic Approach", TRANSACTIONS OF INFORMATION PROCESSING SOCIETY OF JAPAN, INFORMATION PROCESSING SOCIETY OF JAPAN, vol. 48, no. 9, 15 September 2007 (2007-09-15), pages 3060 - 3072 *
SATOSHI KATSUNUMA: "Adress Offset ni Chakumoku shita Data Flow Tsuiseki ni yoru Chunyu Kogeki no Kenshutsu", SYMPOSIUM ON ADVANCED COMPUTING SYSTEMS AND INFRASTRUCTURES SACSIS2006 RONBUNSHU, INFORMATION PROCESSING SOCIETY OF JAPAN, vol. 2006, no. 5, 22 May 2006 (2006-05-22), pages 515 - 524 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016103299A (ja) * 2011-01-07 2016-06-02 アビニシオ テクノロジー エルエルシー フロー分析計装
WO2014185165A1 (ja) * 2013-05-16 2014-11-20 日本電信電話株式会社 情報処理装置、および、情報処理方法
JP2014225160A (ja) * 2013-05-16 2014-12-04 日本電信電話株式会社 情報処理装置および情報処理方法
JP6023317B2 (ja) * 2013-05-16 2016-11-09 日本電信電話株式会社 情報処理装置、および、情報処理方法
US10129275B2 (en) 2013-05-16 2018-11-13 Nippon Telegraph And Telephone Corporation Information processing system and information processing method
WO2020252698A1 (zh) * 2019-06-19 2020-12-24 深圳开源互联网安全技术有限公司 一种数据流跟踪方法、系统、存储介质和服务器
CN116467712A (zh) * 2023-04-23 2023-07-21 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统
CN116467712B (zh) * 2023-04-23 2023-12-01 北京安普诺信息技术有限公司 动态污点追踪方法、装置及相关污点传播分析系统

Also Published As

Publication number Publication date
JPWO2010134325A1 (ja) 2012-11-08
JP5459313B2 (ja) 2014-04-02
US20120066698A1 (en) 2012-03-15

Similar Documents

Publication Publication Date Title
JP5459313B2 (ja) 動的データフロー追跡方法、動的データフロー追跡プログラム、動的データフロー追跡装置
US10891369B2 (en) Dynamic switching between pointer authentication regimes
US11507669B1 (en) Characterizing, detecting and healing vulnerabilities in computer code
US10102373B2 (en) Method and apparatus for capturing operation in a container-based virtualization system
US8839215B2 (en) String cache file for optimizing memory usage in a java virtual machine
WO2010134330A1 (ja) 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体
WO2022180702A1 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
CN113961919B (zh) 恶意软件检测方法和装置
US10311233B2 (en) Generic unpacking of program binaries
US9027145B2 (en) Method and apparatus for detecting leak of information resource of device
JP6023317B2 (ja) 情報処理装置、および、情報処理方法
KR101851330B1 (ko) 코드 재사용 공격 탐지 장치 및 그 방법
JP5952218B2 (ja) 情報処理装置および情報処理方法
KR100961146B1 (ko) 악성 스크립트 코드 복호화 방법 및 시스템
WO2023067665A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
CN114491557A (zh) 一种基于容器环境java内存木马威胁检测方法
CN114091111B (zh) 一种区块链智能合约的存储方法及装置
US12050687B1 (en) Systems and methods for malware detection in portable executable files
KR101003097B1 (ko) 폴리몰픽 쉘코드 탐지방법
JP6163678B2 (ja) プログラムバイナリの汎用的なアンパッキング
JP2024072010A (ja) プログラム、命令実行制御装置、及び命令実行制御方法
WO2024137374A1 (en) Processor with delayed instruction pipeline flush

Legal Events

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

Ref document number: 10777563

Country of ref document: EP

Kind code of ref document: A1

WWE Wipo information: entry into national phase

Ref document number: 2011514329

Country of ref document: JP

NENP Non-entry into the national phase

Ref country code: DE

WWE Wipo information: entry into national phase

Ref document number: 13321753

Country of ref document: US

122 Ep: pct application non-entry in european phase

Ref document number: 10777563

Country of ref document: EP

Kind code of ref document: A1