WO2024063184A1 - Method and apparatus for disarming link in pdf or hwp - Google Patents
Method and apparatus for disarming link in pdf or hwp Download PDFInfo
- Publication number
- WO2024063184A1 WO2024063184A1 PCT/KR2022/014298 KR2022014298W WO2024063184A1 WO 2024063184 A1 WO2024063184 A1 WO 2024063184A1 KR 2022014298 W KR2022014298 W KR 2022014298W WO 2024063184 A1 WO2024063184 A1 WO 2024063184A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- link information
- file
- server
- record
- extracting
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000001784 detoxification Methods 0.000 claims description 20
- 230000009471 action Effects 0.000 claims description 13
- 238000004891 communication Methods 0.000 claims description 12
- 238000004458 analytical method Methods 0.000 description 12
- 239000000284 extract Substances 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000003745 diagnosis Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 102000008016 Eukaryotic Initiation Factor-3 Human genes 0.000 description 1
- 108010089790 Eukaryotic Initiation Factor-3 Proteins 0.000 description 1
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 230000002155 anti-virotic effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000012774 diagnostic algorithm Methods 0.000 description 1
- 238000007429 general method Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
Definitions
- This specification relates to a method and device for detoxifying links in PDF and HWP documents.
- Advanced Persistent Threat (APT) attacks involve attackers selecting a specific target and continuously utilizing various types of malicious code by applying advanced attack techniques to steal targeted information.
- APT Advanced Persistent Threat
- Non-PE Non-Portable Executable
- the purpose of this specification is to propose a method to detoxify Link while maintaining the overall structure of PDF and HWP.
- One aspect of the present specification is a method for a server to disarm a non-executable file, including collecting records from the HWP file based on the format of the non-executable file being an HWP file; extracting first link information based on the record indicating a text hyperlink; extracting second link information based on the record indicating an entity hyperlink; extracting third link information based on the record indicating data linkage; and detoxifying the extracted link information, wherein the extracted link information may include the first link information, the second link information, or the third link information.
- the format of the non-executable file is a PDF file
- traversing the basic elements of the PDF file and searching for a dictionary type Checking whether the data type includes a URI entry; and detoxifying the URI entry based on whether the URI entry is included, where the data type may include a URI action object.
- the step of checking whether the URI entry is included may be based on the “S” key and the “URI” key.
- the step of detoxifying the URI entry may include maintaining only the Link schema information in the ASCII string value of the “URI” key.
- the step of detoxifying the extracted link information may include replacing the rest of the extracted link information other than schema information with blank spaces.
- the step of collecting the records includes extracting a Section stream included in BodyText storage of the HWP file; and collecting records of the Section stream.
- collecting the record includes obtaining a Tag ID from the header of the record; and determining a data area based on the Tag ID; may further include.
- the step of extracting the first link information includes determining a ctrl ID in the data area based on the Tag ID indicating a control header; determining the command length based on the ctrl ID; and extracting a string representing a link address based on the command length; may include.
- a server for disarming non-executable files comprising: a communication unit; Memory; and a processor that functionally controls the communication unit and the memory, wherein the processor collects a record from the HWP file based on the format of the non-executable file being an HWP file, and the record is text. extracting first link information based on the record indicating a hyperlink, extracting second link information based on the record indicating an entity hyperlink, and based on the record indicating a data connection, Third link information is extracted and the extracted link information is rendered harmless, and the extracted link information may include the first link information, the second link information, or the third link information.
- Link can be detoxified while maintaining the overall structure of PDF and HWP.
- FIG. 1 is a diagram showing a server or client related to this specification.
- Figure 2 is an example of abnormal input that can be applied to this specification.
- Figure 3 illustrates a detoxification method to which the present disclosure can be applied.
- Figure 4 illustrates a method of detoxification of an HWP file to which this specification can be applied.
- Figure 5 illustrates the structure of a general HWP file to which this specification can be applied.
- Figure 6 is an example of a record structure to which this specification can be applied.
- Figure 7 is an example of a record of a Section stream to which this specification can be applied.
- Figure 8 is an example of a record indicating a text hyperlink to which this specification can be applied.
- Figure 9 is an example of a record indicating an entity hyperlink to which this specification can be applied.
- Figure 10 is an example of a record indicating data connection to which this specification can be applied.
- Figure 11 illustrates a method for detoxifying a PDF file to which this specification can be applied.
- unit refers to a software or hardware component, and the “unit” performs certain roles. However, “wealth” is not limited to software or hardware.
- the “copy” may be configured to reside on an addressable storage medium and may be configured to run on one or more processors.
- part refers to software components, such as object-oriented software components, class components, and task components, processes, functions, properties, procedures, Includes subroutines, segments of program code, drivers, firmware, microcode, circuits, data, databases, data structures, tables, arrays, and variables.
- the functionality provided within the components and “parts” may be combined into smaller numbers of components and “parts” or may be further separated into additional components and “parts”.
- unit may be implemented with a processor and memory.
- processor should be interpreted broadly to include general purpose processors, central processing units (CPUs), microprocessors, digital signal processors (DSPs), controllers, microcontrollers, state machines, etc.
- processor may refer to an application-specific integrated circuit (ASIC), programmable logic device (PLD), field programmable gate array (FPGA), etc.
- ASIC application-specific integrated circuit
- PLD programmable logic device
- FPGA field programmable gate array
- processor refers to a combination of processing devices, for example, a combination of a DSP and a microprocessor, a combination of a plurality of microprocessors, a combination of one or more microprocessors in combination with a DSP core, or any other such combination of configurations. It may also refer to
- memory should be interpreted broadly to include any electronic component capable of storing electronic information.
- the terms memory include random access memory (RAM), read-only memory (ROM), non-volatile random access memory (NVRAM), programmable read-only memory (PROM), erasable-programmable read-only memory (EPROM), electrical may refer to various types of processor-readable media, such as erasable PROM (EEPROM), flash memory, magnetic or optical data storage, registers, etc.
- RAM random access memory
- ROM read-only memory
- NVRAM non-volatile random access memory
- PROM programmable read-only memory
- EPROM erasable-programmable read-only memory
- electrical may refer to various types of processor-readable media, such as erasable PROM (EEPROM), flash memory, magnetic or optical data storage, registers, etc.
- EEPROM erasable PROM
- flash memory magnetic or optical data storage, registers, etc.
- non-executable file refers to a file that does not execute on its own, as opposed to an executable file or executable file.
- non-executable files may be document files such as PDF files, Hangul files, Word files, image files such as JPG files, video files, JavaScript files, HTML files, etc., but are not limited thereto.
- FIG. 1 is a diagram showing a server or client related to this specification.
- a server or cloud server or client may include a control unit 100 and a communication unit 130.
- the control unit 100 may include a processor 110 and a memory 120.
- the processor 110 may execute instructions stored in the memory 120.
- the processor 110 can control the communication unit 130.
- the processor 110 may control the operation of the server or client based on instructions stored in the memory 120.
- a server or client may include one processor or may include multiple processors. When a server or client includes a plurality of processors, at least some of the plurality of processors may be located physically spaced apart from each other. Additionally, the server or client is not limited to this and may be implemented in various known ways.
- the communication unit 130 may include one or more modules that enable wireless communication between a server or client and a wireless communication system, between a server or client and another server or client, or between a server or client and an external server. Additionally, the communication unit 110 may include one or more modules that connect servers or clients to one or more networks.
- the control unit 100 may control at least some of the components of the server or client to run the application program stored in the memory 120. Furthermore, the control unit 100 can operate at least two of the components included in the server or client in combination with each other to run the application program.
- the server may include a reversing engine or/and a CDR engine that provides a CDR service.
- the reversing engine is an analysis/diagnosis engine that automates the reverse engineering process for malicious non-executable files.
- a reversing engine can perform the following steps:
- File analysis This is the step of analyzing the appearance of the non-executable file itself (e.g., properties, author, creation date, file type). Similar to a general anti-virus program, it is possible to diagnose maliciousness using only the information of the non-executable file itself. You can.
- Static analysis This is a step to extract and analyze the data in a non-executable file to determine whether it is normal or malicious. Non-executable files are not executed, but internal data is extracted and compared and analyzed according to the file structure to diagnose maliciousness. there is. This can be suitable for macros, URL extraction analysis, etc.
- Dynamic analysis This is a step to determine whether it is malicious by analyzing its behavior while executing and monitoring non-executable files. It is easy to detect malicious behavior using normal functions such as macros, hyperlinks, and DDE.
- Debugging analysis This is the step of analyzing vulnerabilities, exploits, etc. by executing and debugging non-executable files. It detects vulnerabilities in the application using the body of the document, tables, fonts, pictures, etc., including macros, hyperlinks, and DDE. It is suitable for
- the reversing engine may include a debugging engine that can be used for debugging analysis.
- the debugging engine can diagnose vulnerabilities that occur in the document input, processing, and output stages by debugging the viewing process of non-executable files.
- a vulnerability refers to taking advantage of errors, bugs, etc. that occur when an application receives unexpected values from the code (logic) developed by the application developer. Through the vulnerability, an attacker can cause denial of service due to abnormal termination, etc. It can perform malicious actions such as remote code execution.
- CDR Content Disarm and Reconstruction
- the CDR service is a solution that creates a new file by disassembling non-executable files, removing malicious or unnecessary files, and keeping the content as identical as possible to the original.
- CDR Contents Disarm and Reconstruction
- the files subject to detoxification include all non-executable files (e.g. For example, Word, Excel, PowerPoint, Hangul, PDF) can be targeted, and the content targeted for detoxification can be active content (eg, macros, hyperlinks, OLE objects, etc.).
- Figure 2 is an example of abnormal input that can be applied to this specification.
- an application program when an application program receives an abnormal value (for example, when the input value exceeds the normal range of 2) through a non-executable file, the execution flow is changed to an unintentional one by the developer, resulting in a vulnerability.
- the debugging engine automatically debugs the document viewing process, sets breakpoints at specific points related to vulnerabilities, checks specific values related to input values, and determines whether the input value causes a vulnerability or not, thereby diagnosing whether it is malicious.
- the debugging engine can identify non-executable files and start debugging by running an application to view them.
- the debugging engine checks whether the module is the target of analysis, and if so, can set a breakpoint at the specified address.
- a malicious non-executable file may terminate the application if certain conditions, such as the version of the application or the operating system environment, are not met, or may have branching points that branch to a flow in which no malicious action occurs.
- the server is analyzed by an analyst in advance and breakpoints can be set at branch points that have this possibility.
- the server can set conditions in relation to the branch point that can continue to run the application without terminating it or lead to a flow in which malicious actions can occur.
- the server can detect vulnerabilities according to detection logic and then store the results in an analysis report.
- the automated reversing engine included in the server automatically performs and analyzes the above-mentioned steps, and can diagnose and block malicious non-executable files through diagnostic algorithms researched and developed by analysts.
- Figure 3 illustrates a detoxification method to which the present disclosure can be applied.
- the server can determine the document format of the non-executable file (S3010). For example, in order to determine the document format of a non-executable file, the server can open the non-executable file and check the signature type in the binary code to determine the format of the document.
- each non-executable file has its own unique format, and the basic content of the format is the file signature.
- File signatures can also be used to distinguish file formats by specifying the specific bytes located at the beginning of the file.
- an HWP file may have a signature of “D0 CF 11 E0 A1 B1 1A E1”, and a PDF file may have a signature of “25 50 44 46”.
- the server determines that the format of the non-executable file is a PDF file, it can perform detoxification of the PDF file (S3020), and if it determines that the format of the non-executable file is a HWP file, it can perform detoxification of the HWP file (S3030) ).
- Figure 4 illustrates a method of detoxification of an HWP file to which this specification can be applied.
- the server determines that the format of the non-executable file is an HWP file
- a method for detoxifying the HWP file is illustrated.
- Figure 5 illustrates the structure of a general HWP file to which this specification can be applied.
- BodyText may include a Section stream.
- BodyText - Section stream Contents such as paragraphs, tables, and drawing objects corresponding to the body of the document can be stored here. Link information can also be stored in the Section stream. Depending on the body section of the HWP file, it can be divided into Section0, Section1, etc.
- Streams can be compressed (e.g. zlib style) to reduce file size.
- Streams can be compressed (e.g. zlib style) to reduce file size.
- the contents are the same, and the Section stream is also subject to compression.
- the server can perform a detoxification operation according to the HWP link function.
- Table 1 is an example of HWP link function to which this specification can be applied.
- type explanation text hyperlink Hyperlink set in text object hyperlink A hyperlink set to an object such as a picture or shape.
- data connection Hyperlink set in text The way it is displayed in the text is different from a hyperlink.
- BodyText storage includes Section streams, and the Section stream can be composed of HWP data records.
- the server can extract the Section stream within the HWP file and detoxify link-related records by traversing all records within the Section stream.
- Figure 6 is an example of a record structure to which this specification can be applied.
- Figure 6 is an example of a record structure referring to the Hangul Document File Structure 5.0 (Hwp Document File Formats 5.0), revision 1.3:20181108 document (HWP specification).
- the size of the record header is 32 bits and consists of TagID (10 bits), Level (10 bits), and Size (12 bits).
- Tag ID This is a tag that indicates the type of data that the record represents.
- Tag ID uses 10 bits, so 0x000 - 0x3FF is possible.
- Level In most cases, one object is composed of multiple records, so the concept of “logically related consecutive records” rather than a single record is needed.
- the level is information to express a logical bundle of related records. All records that make up a stream can be expressed in a hierarchical structure, and the level represents the depth in this hierarchical structure.
- Size Indicates the length of the data area in bytes. When all 12 bits are 1, the length of the data area is 4095 bytes or more. In this case, a DWORD indicating the length is added to the record header. In other words, when data exceeds 4095 bytes, the record is expressed as an extended data record.
- the server collects records from the HWP file (S4010).
- a server can collect records from a Section stream in BodyText storage.
- Table 2 is an example of a data record of the body (BodyText) to which this specification can be applied.
- the server can extract the Tag ID from the header of the record and determine the meaning of the header.
- HWPTAG_BEGIN 0x010.
- Figure 7 is an example of a record of a Section stream to which this specification can be applied.
- the server can parse the first 4 bytes of header information (for example, 0x4200 8001). For example, the server can obtain a Tag ID from the header and determine that the Tag ID means a paragraph header according to Table 2. Based on which record headers indicate paragraph headers, the server can determine the data area.
- header information for example, 0x4200 8001.
- the server can obtain a Tag ID from the header and determine that the Tag ID means a paragraph header according to Table 2. Based on which record headers indicate paragraph headers, the server can determine the data area.
- Table 3 is an example of the operation of the server parsing records of the Section stream.
- the server can determine the data area through the Size value. For example, the server may determine the data area 720 after the header area 710. The server can parse the data area into paragraph header data because the Tag ID indicates the paragraph header. Through this operation, the server can collect records of the Section stream. Referring again to FIG. 4, the server extracts first link information based on the record indicating a text hyperlink (S4020). For example, if the Tag ID indicates HWPTAG_CTRL_HEADER (control header) in the header information of the record, the server may determine that the record indicates a hyperlink. In this case, the data area may start with 0x6B 6C 68 25 (klh%).
- Figure 8 is an example of a record indicating a text hyperlink to which this specification can be applied.
- the server can analyze header information 810 of a record indicating a text hyperlink.
- Table 4 is an example of server header information analysis.
- the server can determine the data area based on the specification (Spec) of the control header.
- Table 5 is an example of a control header specification to which this specification can be applied.
- Table 6 is an example of extracting first link information of a text hyperlink to which this specification can be applied.
- the server extracts second link information based on the record indicating an object hyperlink (S4030).
- Object hyperlinks can be created in the form of HWPTAG_CTRL_DATA (control arbitrary data records) following an object record.
- an object hyperlink may have the form of a HWPTAG_SHAPE_COMPONENT record + HWPTAG_CTRL_DATA record, and the second link information may be included in the HWPTAG_CTRL_DATA record.
- the server can ⁇ control arbitrary data records ⁇ .
- Figure 9 is an example of a record indicating an entity hyperlink to which this specification can be applied.
- the server can analyze header information 910 of a record indicating a text hyperlink.
- Table 7 is an example of server header information analysis.
- the server can determine the data area in any data record under control.4. data record
- Table 8 illustrates the parameter set of the HWP specification to which this specification can be applied.
- Table 9 illustrates parameter items of the HWP specification to which this specification can be applied.
- Table 10 illustrates the types of parameter items of the HWP specification to which this specification can be applied.
- the server can parse the data area by referring to Tables 8 to 10.
- Table 11 is an example of extracting second link information of an entity hyperlink to which this specification can be applied.
- the server extracts third link information based on the record indicating data connection (S4040).
- a data link is a control header tag, just like a text hyperlink, and the ctrl ID can have the value %unk (unknown field).
- the Tag ID is HWPTAG_CTRL_HEADER (control header), and the data area can start with 0x6B 6E 75 25 (knu%).
- Figure 10 is an example of a record indicating data connection to which this specification can be applied.
- the server can analyze header information 1010 of a record indicating a text hyperlink.
- Table 12 is an example of server header information analysis.
- Tag ID (0x047) is a control header
- the server can interpret the record based on the specifications in Table 5.
- Table 13 is an example of third link information extraction of data connection to which this specification can be applied.
- These 70 bytes contain the following two pieces of information: - String for web address + “
- the server detoxifies the extracted link information (S4050).
- the server creates a schema from link information (e.g., first/second/third link information). You can leave only the information and replace the rest with blank spaces (2000). Through this, the entire length of the link information can be maintained as is, and the link information can be rendered harmless with minimal modification.
- Figure 11 illustrates a method for detoxifying a PDF file to which this specification can be applied.
- the server determines that the format of the non-executable file is a PDF file
- a method for detoxifying the PDF file is illustrated.
- the server searches for the dictionary type by traversing the basic elements of the PDF file (S1110). For example, the server can traverse obj as the basic element of a PDF file. Depending on the value set in obj, the actual role and function of the element can be defined.
- objs can have a dictionary type.
- a dictionary type is one of eight basic data types (Boolean values, Integer and Real numbers, Strings, Names, Arrays, Dictionaries, Streams, and the null object) and consists of a ⁇ key ⁇ - ⁇ value ⁇ pair. It can be included as a single entry with a corresponding relationship.
- the server checks whether the searched data type includes a URI (Uniform Resource Identifier) entry (S1120).
- URI Uniform Resource Identifier
- a data type can contain a URI action object.
- URI Action is a Dictionary type and includes S and URI as required elements (for example, ⁇ /S URI /URI ( https://www.seculetter.com) >>).
- the server can check the URI entry based on whether it contains S and the URI key.
- Table 14 is an example of S and URI keys to which this specification can be applied.
- the server detoxifies the URI entry based on the fact that the URI entry is included (S1130). For example, the server can leave only the Link schema information in the ASCII string value of the URI key.
- Table 15 is an example of URI entry detoxification to which this specification can be applied.
- the server performs detoxification by minimally modifying only the parts that are actually problematic.
- the server can repeatedly detoxify URI entries for other basic elements.
- Computer-readable media includes all types of recording devices that store data that can be read by a computer system. Examples of computer-readable media include HDD (Hard Disk Drive), SSD (Solid State Disk), SDD (Silicon Disk Drive), ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical data storage device, etc. It also includes those implemented in the form of carrier waves (e.g., transmission via the Internet). Accordingly, the above detailed description should not be construed as restrictive in all respects and should be considered illustrative. The scope of this specification should be determined by reasonable interpretation of the appended claims, and all changes within the equivalent scope of this specification are included in the scope of this specification.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
The present specification relates to a method by which a server disarms a non-portable executable file, comprising: collecting a record from an HWP file on the basis that the format of the non-portable executable file is that of the HWP file; extracting first link information on the basis that the record indicates a text hyper link; extracting second link information on the basis that the record indicates an entity hyper link; extracting third link information on the basis that the record indicates a data link; and disarming the extracted link information, wherein the extracted link information can include the first link information, the second link information, or the third link information.
Description
본 명세서는 PDF 및 HWP 문서에서 Link의 무해화를 위한 방법 및 장치에 관한 것이다.This specification relates to a method and device for detoxifying links in PDF and HWP documents.
지능형 지속 위협(APT: Advanced Persistent Threat) 공격은 공격자가 특정 타깃을 정하고 목표한 정보를 빼내기 위해 고도의 공격기법을 적용하여 지속적으로 다양한 형태의 악성 코드를 활용한다.Advanced Persistent Threat (APT) attacks involve attackers selecting a specific target and continuously utilizing various types of malicious code by applying advanced attack techniques to steal targeted information.
특히 APT 공격은 초기 침입단계에서 탐지하지 못하는 경우가 많으며, 주로 악성 코드를 포함하는 비실행((Non-PE: Non-Portable Executable) 파일을 이용하는 경우가 많다.In particular, APT attacks are often not detected in the initial intrusion stage, and often use non-executable (Non-PE: Non-Portable Executable) files containing malicious code.
비실행 파일의 악성 여부 검사 방법으로, 시그니처 기반의 검사 방법이 있다. 이것은 비실행 파일이 악성 코드의 시그니처를 포함하는지를 검사하는 방법이다. 그런데 대부분의 악성 비실행 파일은 악성 코드를 자바스크립트나 매크로스크립트와 같은 스크립트에 포함시키거나 경우에 따라서는 스크립트를 인코딩하여 이러한 진단을 회피하는데, 비실행 파일 자체로는 그 안에 어떤 스크립트가 존재하는지 알기 어렵다. 따라서 기존의 시그니처 기반 검사 방법으로는 비실행 파일의 악성 여부를 제대로 검사하는 것이 거의 불가능하다.There is a signature-based inspection method for checking whether non-executable files are malicious. This is a way to check whether a non-executable file contains signatures of malicious code. However, most malicious non-executable files avoid this diagnosis by including malicious code in a script such as JavaScript or macroscript, or in some cases, encoding the script, but the non-executable file itself does not know what script is inside it. It's hard to know. Therefore, it is almost impossible to properly check whether non-executable files are malicious using existing signature-based inspection methods.
본 명세서의 목적은, PDF 및 HWP의 전체 구조를 유지하면서 Link를 무해화 하기 위한 방법을 제안한다.The purpose of this specification is to propose a method to detoxify Link while maintaining the overall structure of PDF and HWP.
본 명세서가 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 이하의 명세서의 상세한 설명으로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.The technical problems to be achieved by this specification are not limited to the technical problems mentioned above, and other technical problems not mentioned will be clear to those skilled in the art from the detailed description of the specification below. It will be understandable.
본 명세서의 일 양상은, 서버가 비실행 파일을 무해화(Disarming) 시키는 방법에 있어서, 상기 비실행 파일의 포맷이 HWP 파일인 것에 근거하여, 상기 HWP 파일로부터 레코드(record)를 수집하는 단계; 상기 레코드가 텍스트 하이퍼 링크를 지시하는 것에 근거하여, 제1 링크 정보를 추출하는 단계; 상기 레코드가 개체 하이퍼 링크를 지시하는 것에 근거하여, 제2 링크 정보를 추출하는 단계; 상기 레코드가 자료 연결을 지시하는 것에 근거하여, 제3 링크 정보를 추출하는 단계; 및 추출된 링크 정보를 무해화 하는 단계;를 포함하며, 상기 추출된 링크 정보는 상기 제1 링크 정보, 상기 제2 링크 정보, 또는 상기 제3 링크 정보를 포함할 수 있다.One aspect of the present specification is a method for a server to disarm a non-executable file, including collecting records from the HWP file based on the format of the non-executable file being an HWP file; extracting first link information based on the record indicating a text hyperlink; extracting second link information based on the record indicating an entity hyperlink; extracting third link information based on the record indicating data linkage; and detoxifying the extracted link information, wherein the extracted link information may include the first link information, the second link information, or the third link information.
또한, 상기 비실행 파일의 포맷이 PDF 파일인 것에 근거하여, 상기 PDF 파일의 기본 요소들을 기준으로 순회하여, 자료형(dictionary type)을 탐색하는 단계; 상기 자료형에 URI entry가 포함되어 있는 지를 검사하는 단계; 및 상기 URI entry가 포함되어 있는 것에 근거하여, 상기 URI entry를 무해화하는 단계;를 포함하며, 상기 자료형은 URI 액션(action) 개체를 포함할 수 있다.In addition, based on the fact that the format of the non-executable file is a PDF file, traversing the basic elements of the PDF file and searching for a dictionary type; Checking whether the data type includes a URI entry; and detoxifying the URI entry based on whether the URI entry is included, where the data type may include a URI action object.
또한, 상기 URI entry가 포함되어 있는 지를 검사하는 단계는 “S” 키, 및 “URI” 키에 근거할 수 있다.Additionally, the step of checking whether the URI entry is included may be based on the “S” key and the “URI” key.
또한, 상기 URI entry를 무해화하는 단계는 상기 “URI” 키의 ASCII string값에서 Link의 스키마(schema) 정보만을 유지시키는 단계;를 포함할 수 있다.Additionally, the step of detoxifying the URI entry may include maintaining only the Link schema information in the ASCII string value of the “URI” key.
또한, 상기 추출된 링크 정보를 무해화 하는 단계는 상기 추출된 링크 정보에서 스키마(schema) 정보 외에 나머지는 빈칸으로 대체하는 단계;를 포함할 수 있다.Additionally, the step of detoxifying the extracted link information may include replacing the rest of the extracted link information other than schema information with blank spaces.
또한, 상기 레코드를 수집하는 단계는 상기 HWP 파일의 BodyText 스토리지(storage)에 포함된 Section 스트림(stream)을 추출하는 단계; 및 상기 Section 스트림의 레코드를 수집하는 단계;를 포함할 수 있다.In addition, the step of collecting the records includes extracting a Section stream included in BodyText storage of the HWP file; and collecting records of the Section stream.
또한, 상기 레코드를 수집하는 단계는 상기 레코드의 헤더(header)로부터 Tag ID를 획득하는 단계; 및 상기 Tag ID에 근거하여, 데이터 영역을 판단하는 단계; 를 더 포함할 수 있다.Additionally, collecting the record includes obtaining a Tag ID from the header of the record; and determining a data area based on the Tag ID; may further include.
또한, 상기 제1 링크 정보를 추출하는 단계는 상기 Tag ID가 컨트롤 헤더를 지시하는 것에 근거하여, 상기 데이터 영역에서 ctrl ID를 판단하는 단계; 상기 ctrl ID에 근거하여, command 길이를 판단하는 단계; 및 상기 command 길이에 근거하여, 링크 주소를 나타내는 문자열을 추출하는 단계; 를 포함할 수 있다.In addition, the step of extracting the first link information includes determining a ctrl ID in the data area based on the Tag ID indicating a control header; determining the command length based on the ctrl ID; and extracting a string representing a link address based on the command length; may include.
본 명세서의 또 다른 일 양상은 비실행 파일을 무해화(Disarming) 시키는 서버에 있어서, 통신부; 메모리; 및 상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서;를 포함하고, 상기 프로세서는 상기 비실행 파일의 포맷이 HWP 파일인 것에 근거하여, 상기 HWP 파일로부터 레코드(record)를 수집하고, 상기 레코드가 텍스트 하이퍼 링크를 지시하는 것에 근거하여, 제1 링크 정보를 추출하며, 상기 레코드가 개체 하이퍼 링크를 지시하는 것에 근거하여, 제2 링크 정보를 추출하고, 상기 레코드가 자료 연결을 지시하는 것에 근거하여, 제3 링크 정보를 추출하며, 추출된 링크 정보를 무해화 하고, 상기 추출된 링크 정보는 상기 제1 링크 정보, 상기 제2 링크 정보, 또는 상기 제3 링크 정보를 포함할 수 있다.Another aspect of the present specification is a server for disarming non-executable files, comprising: a communication unit; Memory; and a processor that functionally controls the communication unit and the memory, wherein the processor collects a record from the HWP file based on the format of the non-executable file being an HWP file, and the record is text. extracting first link information based on the record indicating a hyperlink, extracting second link information based on the record indicating an entity hyperlink, and based on the record indicating a data connection, Third link information is extracted and the extracted link information is rendered harmless, and the extracted link information may include the first link information, the second link information, or the third link information.
본 명세서의 실시예에 따르면, PDF 및 HWP의 전체 구조를 유지하면서 Link를 무해화를 수행할 수 있다.According to the embodiment of the present specification, Link can be detoxified while maintaining the overall structure of PDF and HWP.
본 명세서에서 얻을 수 있는 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.The effects that can be obtained in this specification are not limited to the effects mentioned above, and other effects not mentioned can be clearly understood by those skilled in the art from the description below. .
도 1은 본 명세서와 관련된 서버 또는 클라이언트를 나타내는 도면이다.1 is a diagram showing a server or client related to this specification.
도 2는 본 명세서에 적용될 수 있는 비정상 입력의 예시이다.Figure 2 is an example of abnormal input that can be applied to this specification.
도 3은 본 명세서가 적용될 수 있는 무해화 방법을 예시한다.Figure 3 illustrates a detoxification method to which the present disclosure can be applied.
도 4는 본 명세서가 적용될 수 있는 HWP 파일의 무해화 방법을 예시한다. Figure 4 illustrates a method of detoxification of an HWP file to which this specification can be applied.
도 5는 본 명세서가 적용될 수 있는 일반적인 HWP 파일의 구조를 예시한다.Figure 5 illustrates the structure of a general HWP file to which this specification can be applied.
도 6은 본 명세서가 적용될 수 있는 레코드(record) 구조의 예시이다.Figure 6 is an example of a record structure to which this specification can be applied.
도 7은 본 명세서가 적용될 수 있는 Section 스트림의 레코드의 예시이다.Figure 7 is an example of a record of a Section stream to which this specification can be applied.
도 8은 본 명세서가 적용될 수 있는 텍스트 하이퍼 링크를 지시하는 레코드의 예시이다.Figure 8 is an example of a record indicating a text hyperlink to which this specification can be applied.
도 9는 본 명세서가 적용될 수 있는 개체 하이퍼 링크를 지시하는 레코드의 예시이다.Figure 9 is an example of a record indicating an entity hyperlink to which this specification can be applied.
도 10은 본 명세서가 적용될 수 있는 자료 연결을 지시하는 레코드의 예시이다.Figure 10 is an example of a record indicating data connection to which this specification can be applied.
도 11은 본 명세서가 적용될 수 있는 PDF 파일의 무해화 방법을 예시한다.Figure 11 illustrates a method for detoxifying a PDF file to which this specification can be applied.
본 명세서에 관한 이해를 돕기 위해 상세한 설명의 일부로 포함되는, 첨부 도면은 본 명세서에 대한 실시예를 제공하고, 상세한 설명과 함께 본 명세서의 기술적 특징을 설명한다.The accompanying drawings, which are included as part of the detailed description to aid understanding of the present specification, provide embodiments of the present specification and explain technical features of the present specification together with the detailed description.
이하, 첨부된 도면을 참조하여 본 명세서에 개시된 실시예를 상세히 설명하되, 도면 부호에 관계없이 동일하거나 유사한 구성요소는 동일한 참조 번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈" 및 "부"는 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다. 또한, 본 명세서에 개시된 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 실시예의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 또한, 첨부된 도면은 본 명세서에 개시된 실시예를 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 명세서에 개시된 기술적 사상이 제한되지 않으며, 본 명세서의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. Hereinafter, embodiments disclosed in the present specification will be described in detail with reference to the attached drawings. However, identical or similar components will be assigned the same reference numbers regardless of reference numerals, and duplicate descriptions thereof will be omitted. The suffixes “module” and “part” for components used in the following description are given or used interchangeably only for the ease of preparing the specification, and do not have distinct meanings or roles in themselves. Additionally, in describing the embodiments disclosed in this specification, if it is determined that detailed descriptions of related known technologies may obscure the gist of the embodiments disclosed in this specification, the detailed descriptions will be omitted. In addition, the attached drawings are only for easy understanding of the embodiments disclosed in this specification, and the technical idea disclosed in this specification is not limited by the attached drawings, and all changes included in the spirit and technical scope of this specification are not limited. , should be understood to include equivalents or substitutes.
제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되지는 않는다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.Terms containing ordinal numbers, such as first, second, etc., may be used to describe various components, but the components are not limited by the terms. The above terms are used only for the purpose of distinguishing one component from another.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.When a component is said to be "connected" or "connected" to another component, it is understood that it may be directly connected to or connected to the other component, but that other components may exist in between. It should be. On the other hand, when it is mentioned that a component is “directly connected” or “directly connected” to another component, it should be understood that there are no other components in between.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.Singular expressions include plural expressions unless the context clearly dictates otherwise.
본 명세서에서, "포함한다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.In this specification, terms such as “comprise” or “have” are intended to indicate the presence of features, numbers, steps, operations, components, parts, or combinations thereof described in the specification, but are not intended to indicate the presence of one or more other features. It should be understood that this does not exclude in advance the possibility of the existence or addition of elements, numbers, steps, operations, components, parts, or combinations thereof.
또한, 명세서에서 사용되는 "부"라는 용어는 소프트웨어 또는 하드웨어 구성요소를 의미하며, "부"는 어떤 역할들을 수행한다. 그렇지만 "부"는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. "부"는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 "부"는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 및 변수들을 포함한다. 구성요소들과 "부"들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 "부"들로 결합되거나 추가적인 구성요소들과 "부"들로 더 분리될 수 있다.Additionally, the term “unit” used in the specification refers to a software or hardware component, and the “unit” performs certain roles. However, “wealth” is not limited to software or hardware. The “copy” may be configured to reside on an addressable storage medium and may be configured to run on one or more processors. Thus, as an example, “part” refers to software components, such as object-oriented software components, class components, and task components, processes, functions, properties, procedures, Includes subroutines, segments of program code, drivers, firmware, microcode, circuits, data, databases, data structures, tables, arrays, and variables. The functionality provided within the components and “parts” may be combined into smaller numbers of components and “parts” or may be further separated into additional components and “parts”.
또한, 본 명세서의 일 실시예에 따르면 "부"는 프로세서 및 메모리로 구현될 수 있다. 용어 "프로세서"는 범용 프로세서, 중앙 처리 장치 (CPU), 마이크로프로세서, 디지털 신호 프로세서 (DSP), 제어기, 마이크로제어기, 상태 머신 등을 포함하도록 넓게 해석되어야 한다. 몇몇 환경에서는, "프로세서"는 주문형 반도체 (ASIC), 프로그램가능 로직 디바이스 (PLD), 필드 프로그램가능 게이트 어레이 (FPGA) 등을 지칭할 수도 있다. 용어 "프로세서"는, 예를 들어, DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서들의 조합, DSP 코어와 결합한 하나 이상의 마이크로프로세서들의 조합, 또는 임의의 다른 그러한 구성들의 조합과 같은 처리 디바이스들의 조합을 지칭할 수도 있다.Additionally, according to an embodiment of the present specification, “unit” may be implemented with a processor and memory. The term “processor” should be interpreted broadly to include general purpose processors, central processing units (CPUs), microprocessors, digital signal processors (DSPs), controllers, microcontrollers, state machines, etc. In some contexts, “processor” may refer to an application-specific integrated circuit (ASIC), programmable logic device (PLD), field programmable gate array (FPGA), etc. The term “processor” refers to a combination of processing devices, for example, a combination of a DSP and a microprocessor, a combination of a plurality of microprocessors, a combination of one or more microprocessors in combination with a DSP core, or any other such combination of configurations. It may also refer to
용어 "메모리"는 전자 정보를 저장 가능한 임의의 전자 컴포넌트를 포함하도록 넓게 해석되어야 한다. 용어 메모리는 임의 액세스 메모리 (RAM), 판독-전용 메모리 (ROM), 비-휘발성 임의 액세스 메모리 (NVRAM), 프로그램가능 판독-전용 메모리 (PROM), 소거-프로그램가능 판독 전용 메모리 (EPROM), 전기적으로 소거가능 PROM (EEPROM), 플래쉬 메모리, 자기 또는 광학 데이터 저장장치, 레지스터들 등과 같은 프로세서-판독가능 매체의 다양한 유형들을 지칭할 수도 있다. 프로세서가 메모리로부터 정보를 판독하고/하거나 메모리에 정보를 기록할 수 있다면 메모리는 프로세서와 전자 통신 상태에 있다고 불린다. 프로세서에 집적된 메모리는 프로세서와 전자 통신 상태에 있다.The term “memory” should be interpreted broadly to include any electronic component capable of storing electronic information. The terms memory include random access memory (RAM), read-only memory (ROM), non-volatile random access memory (NVRAM), programmable read-only memory (PROM), erasable-programmable read-only memory (EPROM), electrical may refer to various types of processor-readable media, such as erasable PROM (EEPROM), flash memory, magnetic or optical data storage, registers, etc. A memory is said to be in electronic communication with a processor if the processor can read information from and/or write information to the memory. The memory integrated into the processor is in electronic communication with the processor.
본 명세서에서 사용되는 "비실행 파일"이란 실행 파일 또는 실행 가능한 파일과 반대되는 개념으로서 자체적으로 실행되지 않는 파일을 의미한다. 예를 들어, 비실행 파일은 PDF 파일, 한글 파일, 워드 파일과 같은 문서 파일, JPG 파일과 같은 이미지 파일, 동영상 파일, 자바 스크립트 파일, HTML 파일 등이 될 수 있으나, 이에 한정되지 않는다.As used herein, “non-executable file” refers to a file that does not execute on its own, as opposed to an executable file or executable file. For example, non-executable files may be document files such as PDF files, Hangul files, Word files, image files such as JPG files, video files, JavaScript files, HTML files, etc., but are not limited thereto.
아래에서는 첨부한 도면을 참고하여 실시예에 대하여 본 명세서가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그리고 도면에서 본 개시를 명확하게 설명하기 위해서 설명과 관계없는 부분들은 생략될 수 있다.Below, with reference to the attached drawings, embodiments will be described in detail so that those skilled in the art can easily implement them. In order to clearly explain the present disclosure in the drawings, parts unrelated to the description may be omitted.
도 1은 본 명세서와 관련된 서버 또는 클라이언트를 나타내는 도면이다.1 is a diagram showing a server or client related to this specification.
본 명세서에서 서버(또는 클라우드 서버) 또는 클라이언트는 제어부(100) 및 통신부(130)를 포함할 수 있다. 제어부(100)는 프로세서(110) 및 메모리(120)를 포함할 수 있다. 프로세서(110)는 메모리(120)에 저장된 명령어들을 수행할 수 있다. 프로세서(110)는 통신부(130)를 제어할 수 있다.In this specification, a server (or cloud server) or client may include a control unit 100 and a communication unit 130. The control unit 100 may include a processor 110 and a memory 120. The processor 110 may execute instructions stored in the memory 120. The processor 110 can control the communication unit 130.
프로세서(110)는 메모리(120)에 저장된 명령어에 기초하여 서버 또는 클라이언트의 동작을 제어할 수 있다. 서버 또는 클라이언트는 하나의 프로세서를 포함할 수 있고, 복수의 프로세서를 포함할 수 있다. 서버 또는 클라이언트가 복수의 프로세서를 포함하는 경우, 복수의 프로세서 중 적어도 일부는 물리적으로 이격된 거리에 위치할 수 있다. 또한, 서버 또는 클라이언트는 이에 한정되지 않고 알려진 다양한 방식으로 구현될 수 있다.The processor 110 may control the operation of the server or client based on instructions stored in the memory 120. A server or client may include one processor or may include multiple processors. When a server or client includes a plurality of processors, at least some of the plurality of processors may be located physically spaced apart from each other. Additionally, the server or client is not limited to this and may be implemented in various known ways.
통신부(130)는, 서버 또는 클라이언트와 무선 통신 시스템 사이, 서버 또는 클라이언트와 다른 서버 또는 클라이언트 사이, 또는 서버 또는 클라이언트와 외부서버 사이의 무선 통신을 가능하게 하는 하나 이상의 모듈을 포함할 수 있다. 또한, 통신부(110)는, 서버 또는 클라이언트를 하나 이상의 네트워크에 연결하는 하나 이상의 모듈을 포함할 수 있다.The communication unit 130 may include one or more modules that enable wireless communication between a server or client and a wireless communication system, between a server or client and another server or client, or between a server or client and an external server. Additionally, the communication unit 110 may include one or more modules that connect servers or clients to one or more networks.
제어부(100)는 메모리(120)에 저장된 응용 프로그램을 구동하기 위하여, 서버 또는 클라이언트의 구성요소들 중 적어도 일부를 제어할 수 있다. 나아가, 제어부(100)는 상기 응용 프로그램의 구동을 위하여, 서버 또는 클라이언트에 포함된 구성요소들 중 적어도 둘 이상을 서로 조합하여 동작 시킬 수 있다.The control unit 100 may control at least some of the components of the server or client to run the application program stored in the memory 120. Furthermore, the control unit 100 can operate at least two of the components included in the server or client in combination with each other to run the application program.
본 명세서에서 서버는 리버싱 엔진 또는/및 CDR 서비스를 제공하는 CDR 엔진을 포함할 수 있다.In this specification, the server may include a reversing engine or/and a CDR engine that provides a CDR service.
리버싱(Reversing) 엔진Reversing engine
리버싱 엔진이란, 악성 비실행 파일에 대한 리버스 엔지니어링(리버싱) 과정을 자동화 한 분석/진단 엔진이다. The reversing engine is an analysis/diagnosis engine that automates the reverse engineering process for malicious non-executable files.
예를 들어, 리버싱 엔진은 다음의 단계를 수행할 수 있다.For example, a reversing engine can perform the following steps:
1. 파일 분석: 비실행 파일 자체의 외관(예를 들어, 속성, 작성자, 작성 날짜, 파일 타입)을 분석하는 단계로서, 일반 백신 프로그램과 유사하게 비실행 파일 자체의 정보만으로 악성여부를 진단할 수 있다.1. File analysis: This is the step of analyzing the appearance of the non-executable file itself (e.g., properties, author, creation date, file type). Similar to a general anti-virus program, it is possible to diagnose maliciousness using only the information of the non-executable file itself. You can.
2. 정적 분석: 비실행 파일 내의 데이터를 추출, 분석해서 정상, 악성 여부를 판별하는 단계로서, 비실행 파일은 실행하지 않고 파일 구조에 맞게 내부 데이터를 추출하여 비교 분석하여 악성여부를 진단할 수 있다. 이는 매크로, URL 추출 분석 등에 적합할 수 있다.2. Static analysis: This is a step to extract and analyze the data in a non-executable file to determine whether it is normal or malicious. Non-executable files are not executed, but internal data is extracted and compared and analyzed according to the file structure to diagnose maliciousness. there is. This can be suitable for macros, URL extraction analysis, etc.
3. 동적 분석: 비실행 파일을 실행하고 모니터링하면서 행위를 분석하여 악성 여부를 판별하는 단계로서, 매크로, 하이퍼링크, DDE 등 정상기능을 이용한 악성 행위를 탐지하기에 용이하다.3. Dynamic analysis: This is a step to determine whether it is malicious by analyzing its behavior while executing and monitoring non-executable files. It is easy to detect malicious behavior using normal functions such as macros, hyperlinks, and DDE.
4. 디버깅 분석: 비실행 파일을 실행하고 디버깅하여 취약점, 익스플로잇 등을 분석하는 단계로서, 매크로, 하이퍼링크, DDE를 포함하여 문서 내 본문, 표, 폰트, 그림 등을 이용한 응용프로그램의 취약점을 탐지하기에 적합하다.4. Debugging analysis: This is the step of analyzing vulnerabilities, exploits, etc. by executing and debugging non-executable files. It detects vulnerabilities in the application using the body of the document, tables, fonts, pictures, etc., including macros, hyperlinks, and DDE. It is suitable for
리버싱 엔진은 디버깅 분석에 사용될 수 있는 디버깅 엔진을 포함할 수 있다. 디버깅 엔진은 비실행 파일의 열람 과정을 디버깅하여 문서 입력, 처리, 출력단계에서 발생하는 취약점을 진단할 수 있다. 여기서 취약점이란, 응용프로그램이 응용프로그램의 개발자가 개발한 코드(로직)에서 예상하지 못한 값을 입력 받았을 때, 발생하는 오류, 버그 등을 이용하는 것으로서, 공격자는 취약점을 통해 비정상 종료로 인한 서비스 거부, 원격 코드 실행 등의 악성 행위를 실행할 수 있다.The reversing engine may include a debugging engine that can be used for debugging analysis. The debugging engine can diagnose vulnerabilities that occur in the document input, processing, and output stages by debugging the viewing process of non-executable files. Here, a vulnerability refers to taking advantage of errors, bugs, etc. that occur when an application receives unexpected values from the code (logic) developed by the application developer. Through the vulnerability, an attacker can cause denial of service due to abnormal termination, etc. It can perform malicious actions such as remote code execution.
CDR(Contents Disarm and Reconstruction)Content Disarm and Reconstruction (CDR)
CDR 서비스는 비실행 파일을 분해해 악성파일 혹은 불필요한 파일을 제거하고 콘텐츠는 원본과 최대한 동일하게 하여, 새로운 파일을 만드는 솔루션이다.The CDR service is a solution that creates a new file by disassembling non-executable files, removing malicious or unnecessary files, and keeping the content as identical as possible to the original.
즉, Contents Disarm and Reconstruction(CDR)은 문서 내의 컨텐츠를 무해화(Disarm)하고 재조합(Reconstruction)하여 안전한 문서를 만들어 고객에게 제공하는 서비스를 의미하며, 무해화 대상 파일은 비실행 파일 일체(예를 들어, 워드, 엑셀, 파워포인트, 한글, PDF)를 대상으로 할 수 있으며, 무해화 대상 컨텐츠는 액티브 컨텐츠(예를 들어, 매크로, 하이퍼링크, OLE 객체 등)일 수 있다.In other words, Contents Disarm and Reconstruction (CDR) refers to a service that provides customers by creating a safe document by disarming and reconstructing the content in the document, and the files subject to detoxification include all non-executable files (e.g. For example, Word, Excel, PowerPoint, Hangul, PDF) can be targeted, and the content targeted for detoxification can be active content (eg, macros, hyperlinks, OLE objects, etc.).
도 2는 본 명세서에 적용될 수 있는 비정상 입력의 예시이다.Figure 2 is an example of abnormal input that can be applied to this specification.
도 2를 참조하면, 응용프로그램은 비실행 파일을 통해, 비정상적인 값(예를 들어, 입력값이 정상범위인 2를 초과하는 경우)을 입력 받는 경우, 개발자가 의도하지 않은 실행흐름으로 변경되어 취약점이 동작될 수 있다. 디버깅 엔진은 문서 열람 과정을 자동 디버깅하여 취약점과 관련된 특정 지점에 브레이크 포인트를 설정하고 입력값과 관련된 특정값을 확인하여 입력값이 취약점을 일으키는 값인지 아닌지 판별하여 악성 여부를 진단할 수 있다.Referring to Figure 2, when an application program receives an abnormal value (for example, when the input value exceeds the normal range of 2) through a non-executable file, the execution flow is changed to an unintentional one by the developer, resulting in a vulnerability. This can work. The debugging engine automatically debugs the document viewing process, sets breakpoints at specific points related to vulnerabilities, checks specific values related to input values, and determines whether the input value causes a vulnerability or not, thereby diagnosing whether it is malicious.
보다 자세하게, 디버깅 엔진은 비실행 파일을 확인하고 이를 열람하기 위한 응용프로그램을 실행하여 디버깅을 시작할 수 있다. 비실행 파일을 열람하는 과정에서 모듈이 로드되면, 디버깅 엔진은 해당 모듈이 분석 대상 모듈인지 확인하고, 분석 대상이라면 지정된 주소에 브레이크 포인트를 설정할 수 있다.More specifically, the debugging engine can identify non-executable files and start debugging by running an application to view them. When a module is loaded in the process of viewing a non-executable file, the debugging engine checks whether the module is the target of analysis, and if so, can set a breakpoint at the specified address.
예를 들어, 악성 비실행 파일은 응용프로그램의 버전이나 운영체제 환경 등의 특정 조건이 만족하지 않으면 응용프로그램을 종료하거나 아무런 악성 행위가 발생하지 않는 흐름으로 분기하는 분기 지점들을 가질 수 있다. 서버는 사전에 분석가에 의해 분석되어 이러한 가능성을 가지는 분기 지점에 브레이크 포인트를 설정할 수 있다. For example, a malicious non-executable file may terminate the application if certain conditions, such as the version of the application or the operating system environment, are not met, or may have branching points that branch to a flow in which no malicious action occurs. The server is analyzed by an analyst in advance and breakpoints can be set at branch points that have this possibility.
또한, 서버는 해당 분기 지점과 연관되어, 응용프로그램을 종료하지 않고 계속 실행하거나 악성 행위가 발생할 수 있는 흐름으로 유도할 수 있는 조건들을 설정할 수 있다.In addition, the server can set conditions in relation to the branch point that can continue to run the application without terminating it or lead to a flow in which malicious actions can occur.
응용프로그램의 프로세스 실행 중 해당 브레이크 포인트 지점에서 프로세스가 멈춘 경우, 서버는 탐지 로직에 따라 취약점 여부를 탐지한 후, 결과를 분석 리포트에 저장하는 단계를 수행할 수 있다.If the process stops at the breakpoint point during execution of the application process, the server can detect vulnerabilities according to detection logic and then store the results in an analysis report.
서버에 포함된 자동화 리버싱 엔진은 전술한 단계들을 자동으로 수행하면서 분석하여 분석가가 연구, 개발한 진단 알고리즘을 통해, 악성 비실행 파일을 진단하고 차단할 수 있다.The automated reversing engine included in the server automatically performs and analyzes the above-mentioned steps, and can diagnose and block malicious non-executable files through diagnostic algorithms researched and developed by analysts.
도 3는 본 명세서가 적용될 수 있는 무해화 방법을 예시한다.Figure 3 illustrates a detoxification method to which the present disclosure can be applied.
도 3을 참조하면, 서버는 비실행 파일의 문서 포맷을 판단할 수 있다(S3010). 예를 들어, 서버는 비실행 파일의 문서 포맷을 판단하기 위해, 비실행 파일을 열고 바이너리 코드 상의 식별(Signature) 타입을 확인하여, 문서의 포맷이 무엇인지 확인할 수 있다.Referring to FIG. 3, the server can determine the document format of the non-executable file (S3010). For example, in order to determine the document format of a non-executable file, the server can open the non-executable file and check the signature type in the binary code to determine the format of the document.
예를 들어, 비실행 파일들은 각각 고유한 포맷을 가지고 있는데 포맷의 기본이 되는 내용이 파일 시그니처(File Signature)이다. 파일 시그니처는 파일의 가장 처음에 위치하는 특정 바이트들도 파일 포맷을 구분하기 위해 사용될 수 있다. For example, each non-executable file has its own unique format, and the basic content of the format is the file signature. File signatures can also be used to distinguish file formats by specifying the specific bytes located at the beginning of the file.
예를 들어, HWP 파일은 “D0 CF 11 E0 A1 B1 1A E1″의 시그니처를 갖을 수 있고, PDF 파일은 “25 50 44 46”의 시그니처를 갖을 수 있다.For example, an HWP file may have a signature of “D0 CF 11 E0 A1 B1 1A E1”, and a PDF file may have a signature of “25 50 44 46”.
서버는 비실행 파일의 포맷을 PDF 파일로 판단한 경우, PDF 파일의 무해화를 수행하고(S3020), 비실행 파일의 포맷을 HWP 파일로 판단한 경우, HWP 파일의 무해화를 수행할 수 있다(S3030). If the server determines that the format of the non-executable file is a PDF file, it can perform detoxification of the PDF file (S3020), and if it determines that the format of the non-executable file is a HWP file, it can perform detoxification of the HWP file (S3030) ).
도 4는 본 명세서가 적용될 수 있는 HWP 파일의 무해화 방법을 예시한다. Figure 4 illustrates a method of detoxification of an HWP file to which this specification can be applied.
도 4를 참조하면, 서버가 비실행 파일의 포맷을 HWP 파일로 판단한 경우, HWP 파일의 무해화 방법을 예시한다.Referring to FIG. 4, when the server determines that the format of the non-executable file is an HWP file, a method for detoxifying the HWP file is illustrated.
HWP 파일을 비롯한 CFB 계열의 파일에 대해 압축을 해제하면, 디렉토리와 파일 구조를 확인할 수 있다. 이 때 디렉토리 형태를 스토리지(storage), 파일 형태를 스트림(stream)이라고 한다. If you decompress CFB-type files, including HWP files, you can check the directory and file structure. At this time, the directory type is called storage and the file type is called stream.
도 5는 본 명세서가 적용될 수 있는 일반적인 HWP 파일의 구조를 예시한다.Figure 5 illustrates the structure of a general HWP file to which this specification can be applied.
도 5를 참조하면, BodyText는 Section 스트림을 포함할 수 있다.Referring to Figure 5, BodyText may include a Section stream.
BodyText - Section 스트림 : 여기에는 문서의 본문에 해당하는 문단, 표, 그리기 개체 등의 내용들이 저장될 수 있다. 링크 정보 또한 Section 스트림에 저장될 수 있다. HWP 파일의 본문 구역에 따라 Section0, Section1 등으로 구분될 수 있다.BodyText - Section stream: Contents such as paragraphs, tables, and drawing objects corresponding to the body of the document can be stored here. Link information can also be stored in the Section stream. Depending on the body section of the HWP file, it can be divided into Section0, Section1, etc.
파일 압축 저장 : 파일 크기를 줄이기 위해 스트림은 압축 저장될 수 있다(예를 들어, zlib 방식). 압축해제 시 내용은 동일하며, Section 스트림 또한 압축 대상이다.Compressed storage of files: Streams can be compressed (e.g. zlib style) to reduce file size. When decompressed, the contents are the same, and the Section stream is also subject to compression.
다시 도 4를 참조하면, 서버는 HWP 링크 기능에 따라 무해화 동작을 수행할 수 있다.Referring again to FIG. 4, the server can perform a detoxification operation according to the HWP link function.
표 1은 본 명세서가 적용될 수 있는 HWP 링크 기능의 예시이다.Table 1 is an example of HWP link function to which this specification can be applied.
종류type | 설명explanation |
텍스트 하이퍼링크text hyperlink | 텍스트에 설정된 하이퍼링크.Hyperlink set in text. |
개체 하이퍼링크object hyperlink | 그림이나 도형 등 개체에 설정된 하이퍼링크.A hyperlink set to an object such as a picture or shape. |
자료 연결data connection |
텍스트에 설정된 하이퍼링크. 본문에 표시되는 방식이 하이퍼링크와 다름.Hyperlink set in text. The way it is displayed in the text is different from a hyperlink. |
이러한 링크 기능의 정보는 본문 영역(Section 스트림)에 저장될 수 있다.BodyText 스토리지에 Section 스트림들이 포함되며, Section 스트림은 HWP 데이터 레코드로 구성될 수 있다. 서버는 HWP 파일 내 Section 스트림을 추출하고, Section 스트림 내 모든 레코드를 순회하면서 링크 관련 레코드를 무해화 할 수 있다. Information of this link function can be stored in the body area (Section stream). BodyText storage includes Section streams, and the Section stream can be composed of HWP data records. The server can extract the Section stream within the HWP file and detoxify link-related records by traversing all records within the Section stream.
도 6은 본 명세서가 적용될 수 있는 레코드(record) 구조의 예시이다.Figure 6 is an example of a record structure to which this specification can be applied.
도 6은 한글 문서 파일 구조 5.0 (Hwp Document File Formats 5.0), revision 1.3:20181108 문서(HWP 명세)를 참조한, 레코드 구조의 예시이다.Figure 6 is an example of a record structure referring to the Hangul Document File Structure 5.0 (Hwp Document File Formats 5.0), revision 1.3:20181108 document (HWP specification).
레코드 헤더의 크기는 32bits이고 TagID(10bits), Level(10bits), Size(12bits)로 구성된다.The size of the record header is 32 bits and consists of TagID (10 bits), Level (10 bits), and Size (12 bits).
(1) Tag ID : 레코드가 나타내는 데이터의 종류를 나타내는 태그이다. Tag ID에는 10 비트가 사용되므로 0x000 - 0x3FF까지 가능하다.(1) Tag ID: This is a tag that indicates the type of data that the record represents. Tag ID uses 10 bits, so 0x000 - 0x3FF is possible.
- 0x000 - 0x00F = 일반 레코드 태그가 아닌 특별한 용도로 사용한다.- 0x000 - 0x00F = Used for special purposes rather than general record tags.
- 0x010 - 0x1FF = 한글에 의해 내부용으로 예약된 영역(HWPTAG_BEGIN = 0x010)- 0x010 - 0x1FF = Area reserved for internal use by Hangul (HWPTAG_BEGIN = 0x010)
- 0x200 - 0x3FF = 외부 어플리케이션이 사용할 수 있는 영역- 0x200 - 0x3FF = Area that can be used by external applications
(2) Level : 대부분 하나의 오브젝트는 여러 개의 레코드로 구성되는 것이 일반적이기 때문에 하나의 레코드가 아닌 "논리적으로 연관된 연속된 레코드"라는 개념이 필요하다. 레벨은 이와 같이 연관된 레코드의 논리적인 묶음을 표현하기 위한 정보이다. 스트림을 구성하는 모든 레코드는 계층 구조로 표현할 수 있는데, 레벨은 바로 이 계층 구조에서의 depth를 나타낸다.(2) Level: In most cases, one object is composed of multiple records, so the concept of “logically related consecutive records” rather than a single record is needed. The level is information to express a logical bundle of related records. All records that make up a stream can be expressed in a hierarchical structure, and the level represents the depth in this hierarchical structure.
(3) Size : 데이터 영역의 길이를 바이트 단위로 나타낸다. 12개의 비트가 모두 1일 때는 데이터 영역의 길이가 4095 바이트 이상인 경우로, 이때는 레코드 헤더에 연이어 길이를 나타내는 DWORD가 추가된다. 즉, 4095 바이트 이상의 데이터일 때 레코드는 확장 데이터 레코드와 같이 표현된다.(3) Size: Indicates the length of the data area in bytes. When all 12 bits are 1, the length of the data area is 4095 bytes or more. In this case, a DWORD indicating the length is added to the record header. In other words, when data exceeds 4095 bytes, the record is expressed as an extended data record.
다시 도 4를 참조하면, 서버는 HWP 파일로부터 레코드를 수집한다(S4010).Referring again to FIG. 4, the server collects records from the HWP file (S4010).
예를 들어, 서버는 BodyText 스토리지의 Section 스트림으로부터 레코드를 수집할 수 있다.For example, a server can collect records from a Section stream in BodyText storage.
표 2는 본 명세서가 적용될 수 있는 본문(BodyText)의 데이터 레코드의 예시이다.Table 2 is an example of a data record of the body (BodyText) to which this specification can be applied.
Tag IDTag ID | ValueValue | 설명explanation |
HWPTAG_PARA_HEADERHWPTAG_PARA_HEADER | HWPTAG_BEGIN+50HWPTAG_BEGIN+50 | 문단 헤더paragraph header |
HWPTAG_PARA_TEXTHWPTAG_PARA_TEXT | HWPTAG_BEGIN+51HWPTAG_BEGIN+51 | 문단의 텍스트the text of the paragraph |
HWPTAG_PARA_CHAR_SHAPEHWPTAG_PARA_CHAR_SHAPE | HWPTAG_BEGIN+52HWPTAG_BEGIN+52 | 문단의 글자 모양letter shape in paragraph |
HWPTAG_PARA_LINE_SEGHWPTAG_PARA_LINE_SEG | HWPTAG_BEGIN+53HWPTAG_BEGIN+53 | 문단의 레이아웃Layout of paragraphs |
HWPTAG_PARA_RANGE_TAGHWPTAG_PARA_RANGE_TAG | HWPTAG_BEGIN+54HWPTAG_BEGIN+54 | 문단의 영역 태그Paragraph area tag |
HWPTAG_CTRL_HEADERHWPTAG_CTRL_HEADER | HWPTAG_BEGIN+55HWPTAG_BEGIN+55 | 컨트롤 헤더control header |
HWPTAG_LIST_HEADERHWPTAG_LIST_HEADER | HWPTAG_BEGIN+56HWPTAG_BEGIN+56 | 문단 리스트 헤더Paragraph list header |
HWPTAG_PAGE_DEFHWPTAG_PAGE_DEF | HWPTAG_BEGIN+57HWPTAG_BEGIN+57 | 용지 설정Paper settings |
HWPTAG_FOOTNOTE_SHAPEHWPTAG_FOOTNOTE_SHAPE | HWPTAG_BEGIN+58HWPTAG_BEGIN+58 | 각주/미주 모양Footnote/Endnote Appearance |
HWPTAG_PAGE_BORDER_FILLHWPTAG_PAGE_BORDER_FILL | HWPTAG_BEGIN+59HWPTAG_BEGIN+59 | 쪽 테두리/배경Page border/background |
HWPTAG_SHAPE_COMPONENTHWPTAG_SHAPE_COMPONENT | HWPTAG_BEGIN+60HWPTAG_BEGIN+60 | 개체individual |
HWPTAG_TABLEHWPTAG_TABLE | HWPTAG_BEGIN+61HWPTAG_BEGIN+61 | 표 개체table object |
HWPTAG_SHAPE_COMPONENT_LINEHWPTAG_SHAPE_COMPONENT_LINE | HWPTAG_BEGIN+62HWPTAG_BEGIN+62 | 직선 개체straight object |
HWPTAG_SHAPE_COMPONENT_RECTANGLEHWPTAG_SHAPE_COMPONENT_RECTANGLE | HWPTAG_BEGIN+63HWPTAG_BEGIN+63 | 사각형 개체square object |
HWPTAG_SHAPE_COMPONENT_ELLIPSEHWPTAG_SHAPE_COMPONENT_ELLIPSE | HWPTAG_BEGIN+64HWPTAG_BEGIN+64 | 타원 개체ellipse object |
HWPTAG_SHAPE_COMPONENT_ARCHWPTAG_SHAPE_COMPONENT_ARC | HWPTAG_BEGIN+65HWPTAG_BEGIN+65 | 호 개체arc object |
HWPTAG_SHAPE_COMPONENT_POLYGONHWPTAG_SHAPE_COMPONENT_POLYGON | HWPTAG_BEGIN+66HWPTAG_BEGIN+66 | 다각형 개체polygonal object |
HWPTAG_SHAPE_COMPONENT_CURVEHWPTAG_SHAPE_COMPONENT_CURVE | HWPTAG_BEGIN+67HWPTAG_BEGIN+67 | 곡선 개체curved object |
HWPTAG_SHAPE_COMPONENT_OLEHWPTAG_SHAPE_COMPONENT_OLE | HWPTAG_BEGIN+68HWPTAG_BEGIN+68 | OLE 개체OLE object |
HWPTAG_SHAPE_COMPONENT_PICTUREHWPTAG_SHAPE_COMPONENT_PICTURE | HWPTAG_BEGIN+69HWPTAG_BEGIN+69 | 그림 개체drawing object |
HWPTAG_SHAPE_COMPONENT_CONTAINERHWPTAG_SHAPE_COMPONENT_CONTAINER | HWPTAG_BEGIN+70HWPTAG_BEGIN+70 | 컨테이너 개체container object |
HWPTAG_CTRL_DATAHWPTAG_CTRL_DATA | HWPTAG_BEGIN+71HWPTAG_BEGIN+71 | 컨트롤 임의의 데이터control random data |
HWPTAG_EQEDITHWPTAG_EQEDIT | HWPTAG_BEGIN+72HWPTAG_BEGIN+72 | 수식 개체formula object |
RESERVEDRESERVED | HWPTAG_BEGIN+73HWPTAG_BEGIN+73 | 예약reservation |
HWPTAG_SHAPE_COMPONENT_TEXTARTHWPTAG_SHAPE_COMPONENT_TEXTART | HWPTAG_BEGIN+74HWPTAG_BEGIN+74 | 글맵시Nice writing |
HWPTAG_FORM_OBJECTHWPTAG_FORM_OBJECT | HWPTAG_BEGIN+75HWPTAG_BEGIN+75 | 양식 개체form object |
HWPTAG_MEMO_SHAPEHWPTAG_MEMO_SHAPE | HWPTAG_BEGIN+76HWPTAG_BEGIN+76 | 메모 모양note shape |
HWPTAG_MEMO_LISTHWPTAG_MEMO_LIST | HWPTAG_BEGIN+77HWPTAG_BEGIN+77 | 메모 리스트 헤더Memo list header |
HWPTAG_CHART_DATAHWPTAG_CHART_DATA | HWPTAG_BEGIN+79HWPTAG_BEGIN+79 | 차트 데이터chart data |
HWPTAG_VIDEO_DATAHWPTAG_VIDEO_DATA | HWPTAG_BEGIN+82HWPTAG_BEGIN+82 | 비디오 데이터video data |
HWPTAG_SHAPE_COMPONENT_UNKNOWNHWPTAG_SHAPE_COMPONENT_UNKNOWN | HWPTAG_BEGIN+99HWPTAG_BEGIN+99 | UnknownUnknown |
표 2를 참조하면, 서버는 레코드의 헤더에서 Tag ID를 추출하여, 헤더의 의미를 판단할 수 있다. 여기서, HWPTAG_BEGIN = 0x010 일 수 있다.도 7은 본 명세서가 적용될 수 있는 Section 스트림의 레코드의 예시이다.
Referring to Table 2, the server can extract the Tag ID from the header of the record and determine the meaning of the header. Here, HWPTAG_BEGIN = 0x010. Figure 7 is an example of a record of a Section stream to which this specification can be applied.
도 7을 참조하면, 서버는 헤더정보 첫 4 바이트를 (예를 들어, 0x4200 8001) 파싱할 수 있다. 예를 들어, 서버는 헤더로부터 Tag ID를 획득하고, 표 2에 따라 Tag ID 가 문단 헤더를 의미함을 판단할 수 있다. 레코드의 헤더가 문단 헤더를 지시하는 것에 근거하여, 서버는 데이터 영역을 판단할 수 있다.Referring to FIG. 7, the server can parse the first 4 bytes of header information (for example, 0x4200 8001). For example, the server can obtain a Tag ID from the header and determine that the Tag ID means a paragraph header according to Table 2. Based on which record headers indicate paragraph headers, the server can determine the data area.
표 3은 서버가 Section 스트림의 레코드를 파싱하는 동작의 예시이다.Table 3 is an example of the operation of the server parsing records of the Section stream.
순서order | 동작movement |
1One |
- 4바이트 0x4200 8001를 바이트 단위로 분리 후 역순으로 배치 바이트 단위 : 42 00 80 01(16) (2자리가 1바이트, 1자리는 4bit) 역순 배치 : 01 80 00 42(16) 비트 배치 : (Size)0000 0001 1000 (Level)0000 0000 00(Tag ID)00 0100 0010(2) - Separate 4 bytes 0x4200 8001 into byte units and place them in reverse order. Byte unit: 42 00 80 01 (16) (2 digits are 1 byte, 1 digit is 4 bits) Reverse arrangement: 01 80 00 42 (16) Bit placement: (Size)0000 0001 1000 (Level)0000 0000 00(Tag ID)00 0100 0010 (2) |
22 |
Tag ID는 비트 0번~9번까지 하위 10비트00 0100 0010(2)
= 0 4 2(16) (= 0x042) = 0x010 + 0x032 = 0x010 + 50(10) => 문단 헤더를 지시함Tag ID is the lower 10 bits from = 0 4 2 (16) (= 0x042) = 0x010 + 0x032 = 0x010 + 50 (10) => Indicates paragraph header |
33 | 데이터 영역의 Size는 비트 20번~31번까지 상위 12비트0000 0001 1000(2) = 0x018The size of the data area is the upper 12 bits from bits 20 to 310000 0001 1000 (2) = 0x018 |
44 | Level정보는 0x0000000 0000 00(2) = 0x000Level information is 0x0000000 0000 00 (2) = 0x000 |
서버는 Size 값을 통해, 데이터 영역을 판단할 수 있다. 예를 들어, 서버는 헤더 영역(710) 이후, 데이터 영역(720)을 판단할 수 있다. 서버는 Tag ID 가 문단 헤더를 지시하므로, 데이터 영역을 문단 헤더 데이터로 파싱할 수 있다. 이러한 작업을 통해, 서버는 Section 스트림의 레코드를 수집할 수 있다.다시 도 4를 참조하면, 서버는 레코드가 텍스트 하이퍼 링크를 지시하는 것에 근거하여, 제1 링크 정보를 추출한다(S4020). 예를 들어, 서버는 레코드의 헤더정보에서 Tag ID가 HWPTAG_CTRL_HEADER (컨트롤 헤더)를 지시하면, 레코드가 하이퍼 링크를 지시한다고 판단할 수 있다. 이 경우, 데이터 영역은 0x6B 6C 68 25 (klh%)로 시작할 수 있다.The server can determine the data area through the Size value. For example, the server may determine the data area 720 after the header area 710. The server can parse the data area into paragraph header data because the Tag ID indicates the paragraph header. Through this operation, the server can collect records of the Section stream. Referring again to FIG. 4, the server extracts first link information based on the record indicating a text hyperlink (S4020). For example, if the Tag ID indicates HWPTAG_CTRL_HEADER (control header) in the header information of the record, the server may determine that the record indicates a hyperlink. In this case, the data area may start with 0x6B 6C 68 25 (klh%).
도 8은 본 명세서가 적용될 수 있는 텍스트 하이퍼 링크를 지시하는 레코드의 예시이다.Figure 8 is an example of a record indicating a text hyperlink to which this specification can be applied.
도 8을 참조하면, 서버는 텍스트 하이퍼 링크를 지시하는 레코드의 헤더정보(810)를 분석할 수 있다.Referring to FIG. 8, the server can analyze header information 810 of a record indicating a text hyperlink.
표 4는 서버의 헤더정보 분석의 예시이다.Table 4 is an example of server header information analysis.
종류type | 값value |
헤더header | 0x4704 B0040x4704 B004 |
바이트 단위로 역순배치Arrange in reverse order by byte | 04 B0 04 47(16) 04 B0 04 47 (16) |
비트 단위로 배치Lay out bit by bit | (Size)0000 0100 1011 (Level)0000 0000 01(Tag ID)00 0100 0111(2) (Size)0000 0100 1011 (Level)0000 0000 01(Tag ID)00 0100 0111 (2) |
Tag ID (하위 10비트)Tag ID (lower 10 bits) |
00 0100 0111(2)
= 0x047 = 0x010 + 0x37 = 0x010 + 55(10) = HWPTAG_CTRL_HEADER (컨트롤 헤더)00 0100 0111 (2) = 0x047 = 0x010 + 0x37 = 0x010 + 55 (10) = HWPTAG_CTRL_HEADER (Control Header) |
Size (상위 12비트)Size (upper 12 bits) |
0000 0100 1011(2)
= 0x04B0000 0100 1011 (2) = 0x04B |
LevelLevel |
00 0000 0001(2)
= 0x00100 0000 0001 (2) = 0x001 |
표 4를 참조하면, 서버는 Tag ID 가 컨트롤 헤더를 지시하므로, 데이터 영역을 컨트롤 헤더의 명세(Spec)를 근거로 판단할 수 있다.Referring to Table 4, since the Tag ID indicates the control header, the server can determine the data area based on the specification (Spec) of the control header.
표 5는 본 명세서가 적용될 수 있는 컨트롤 헤더 명세의 예시이다.Table 5 is an example of a control header specification to which this specification can be applied.
자료형data type | 길이(바이트)Length (bytes) |
설명 |
UINT32UINT32 | 44 |
ctrl ID |
UINTUINT | 44 | 속성(표 153 참조)Attributes (see Table 153) |
BYTEBYTE | 1One |
기타 속성 |
WORDWORD | 22 | command 길이(len)command length (len) |
WCHAR array[len]WCHAR array[len] | 2Хlen2Хlen | command(각 필드 종류마다 처리해야할 고유 정보)command (unique information to be processed for each field type) |
UINT32 |
44 | id(문서 내 고유 아이디)id (unique ID within the document) |
전체 길이total length | 가변variable | 15 + (2Хlen)15 + (2Хlen) |
표 6은 본 명세서가 적용될 수 있는 텍스트 하이퍼 링크의 제1 링크 정보 추출의 예시이다.Table 6 is an example of extracting first link information of a text hyperlink to which this specification can be applied.
순서order | 동작movement |
1One |
[ctrl ID]데이터 영역에서 ctrl ID 인 첫 4바이트(820)를 읽어 들이고, 역순으로 배치 6B 6C 68 25 = klh% 서버는 Tag ID가 컨트롤 헤더이고 ctrl ID가 %hlk 이기 때문에, 해당 레코드를 텍스트 하이퍼링크로 인식[ctrl ID] Read the first 4 bytes (820) of the ctrl ID from the data area and place them in reverse order. 6B 6C 68 25 = klh% Because the tag ID is the control header and the ctrl ID is %hlk, the server Recognize the record as a text hyperlink |
22 | [속성]데이터 영역에서 그 다음 4바이트(830)를 읽어 들임.[Property] Read the next 4 bytes (830) from the data area. |
33 | [기타 속성]데이터 영역에서 그 다음 1바이트(840)를 읽어 들임.[Other properties] Read the next 1 byte (840) from the data area. |
44 |
[command 길이]데이터 영역에서 그 다음 2바이트(850)를 읽어 들이고, 역순으로 배치 1C 00 => 00 1C command 길이는 0x001C = 28(10) [command length] Read the next 2 bytes (850) from the data area and place them in reverse order. 1C 00 => 00 1C command length is 0x001C = 28 (10) |
55 |
[command]데이터 영역에서 그 다음 {command 길이 - 14}(= 56 - 14 = 42) 바이트를 읽어 들임. (6800 7400 7400 7000 5C00 3A00 2F00 2F00 7700 7700 7700 2E00 6E00 6100 7600 6500 7200 2E00 6300 6F00 6D00) Command 길이가 28이고, 하나의 문자는 2바이트의 길이를 갖기 때문에, 실제 길이는 28*2 =56 바이트 한편, 56바이트 중 하위 14바이트는 문자열 정보가 아닌 옵션 값이기 때문에, 링크 주소의 문자열을 구하기 위해서는 56 - 14 = 42 바이트 만큼을 읽어 들임 이 42바이트에는 다음의 2가지 정보가 포함되어 있음. - 웹주소에 대한 문자열 + “|” (구분자) + 설명할 문자열 실제 필요한 데이터는 웹주소에 대한 문자열이므로, 서버는 42바이트 중 “|” 문자가 나오기 전까지를 웹주소 문자열로 인식, 문자열에 “|” 문자가 없는 경우에, 서버는 42바이트 전체가 웹주소 문자열로 인식 따라서, 서버는 “http\://www.naver.com” 문자열을 제1 링크 정보로 추출[command] Reads the next {command length - 14} (= 56 - 14 = 42) bytes from the data area. (6800 7400 7400 7000 5C00 Since the Command length is 28 and one character is 2 bytes long, the actual length is 28*2 =56 bytes. Meanwhile, since the lower 14 bytes of the 56 bytes are option values rather than string information, 56 - 14 = 42 bytes must be read to obtain the link address string. These 42 bytes contain the following two pieces of information. - String for web address + “|” (separator) + string to explain Since the actual data needed is a string for a web address, the server uses “|” among the 42 bytes. The period before the character appears is recognized as a web address string, with “|” in the string. If there are no characters, the server recognizes the entire 42 bytes as a web address string. Therefore, the server extracts the “http\://www.naver.com” string as the first link information |
다시 도 4를 참조하면, 서버는 레코드가 개체 하이퍼 링크를 지시하는 것에 근거하여, 제2 링크 정보를 추출한다(S4030). 개체 하이퍼링크는 개체 레코드를 뒤따르는 HWPTAG_CTRL_DATA (컨트롤 임의의 데이터 레코드)의 형태로 생성될 수 있다. 예를 들어, 개체 하이퍼 링크는 HWPTAG_SHAPE_COMPONENT 레코드 + HWPTAG_CTRL_DATA 레코드 형태를 갖을 수 있으며, 제2 링크 정보는 HWPTAG_CTRL_DATA 레코드에 포함될 수 있다. 서버는 Section 스트림에서 개체 하이퍼 링크의 레코드 구조를 확인한 후, {컨트롤 임의의 데이터 레코드}를 무해할 수 있다.도 9는 본 명세서가 적용될 수 있는 개체 하이퍼 링크를 지시하는 레코드의 예시이다.
Referring again to FIG. 4, the server extracts second link information based on the record indicating an object hyperlink (S4030). Object hyperlinks can be created in the form of HWPTAG_CTRL_DATA (control arbitrary data records) following an object record. For example, an object hyperlink may have the form of a HWPTAG_SHAPE_COMPONENT record + HWPTAG_CTRL_DATA record, and the second link information may be included in the HWPTAG_CTRL_DATA record. After checking the record structure of the object hyperlink in the Section stream, the server can {control arbitrary data records}. Figure 9 is an example of a record indicating an entity hyperlink to which this specification can be applied.
도 9를 참조하면, 서버는 텍스트 하이퍼 링크를 지시하는 레코드의 헤더정보(910)를 분석할 수 있다.Referring to FIG. 9, the server can analyze header information 910 of a record indicating a text hyperlink.
표 7은 서버의 헤더정보 분석의 예시이다.Table 7 is an example of server header information analysis.
종류type |
값 |
헤더header | |
0x570C 00050x570C 0005 | |
바이트 단위로 역순배치Arrange in reverse order by byte | 05 00 0C 57(16) 05 00 0C 57 (16) |
비트 단위로 배치Lay out bit by bit | (Size)0000 0101 0000 (Level)0000 0000 11(Tag ID)00 0101 0111(2) (Size)0000 0101 0000 (Level)0000 0000 11(Tag ID)00 0101 0111 (2) |
Tag ID (하위 10비트)Tag ID (lower 10 bits) |
00 / 0101 /0111(2)
= 0 / 5 / 7(16) ( = 0x057) = 0x010 + 0x47 = 0x010 + 71(10) = HWPTAG_CTRL_DATA (컨트롤 임의의 데이터)00 / 0101 /0111 (2) = 0 / 5 / 7 (16) ( = 0x057) = 0x010 + 0x47 = 0x010 + 71 (10) = HWPTAG_CTRL_DATA (Control Random Data) |
Size (상위 12비트)Size (upper 12 bits) |
0000 0101 0000(2)
= 0x0500000 0101 0000 (2) = 0x050 |
LevelLevel |
00 0000 0011(2)
= 0x00300 0000 0011 (2) = 0x003 |
서버는 HWP 명세에 근거하여, 컨트롤 임의의 데이터 레코드에서 데이터 영역을 판단할 수 있다.4. 데이터 레코드Based on the HWP specification, the server can determine the data area in any data record under control.4. data record
4.2. '문서 정보'의 데이터 레코드4.2. Data records in 'Document Information'
4.2.12. 문서 임의의 데이터4.2.12. document random data
파라미터 아이템의 개수만큼 아이템 데이터를 얻는다.Obtain item data equal to the number of parameter items.
표 8은 본 명세서가 적용될 수 있는 HWP 명세의 파라미터 셋을 예시한다.Table 8 illustrates the parameter set of the HWP specification to which this specification can be applied.
자료형data type | 길이(바이트)Length (bytes) |
설명 | |
WORDWORD | 22 |
파라미터 셋 IDParameter | |
INT16INT16 | 22 | 파라미터 셋에 존재하는 아이템 개수(n)Number of items in the parameter set (n) | |
Parameter ItemParameter Item | 가변ХnVariableХn | 파라미터 아이템(표 9 참조)Parameter items (see Table 9) | |
전체 길이 | 가변variable | 4 + (가변Хn) 바이트4 + (variableХn) bytes |
표 9는 본 명세서가 적용될 수 있는 HWP 명세의 파라미터 아이템을 예시한다.Table 9 illustrates parameter items of the HWP specification to which this specification can be applied.
자료형data type | 길이(바이트)Length (bytes) |
설명 | |
WORDWORD | 22 |
파라미터 아이템 IDParameter | |
WORDWORD | 22 | 파라미터 아이템 종류(표 10 참조)Parameter item types (see Table 10) | |
Parameter Item TypeParameter Item Type |
가변variable | 파라미터 아이템 데이터Parameter item data | |
전체 길이 | 가변variable | 4 + 가변 바이트4 + variable bytes |
표 10은 본 명세서가 적용될 수 있는 HWP 명세의 파라미터 아이템 종류를 예시한다.Table 10 illustrates the types of parameter items of the HWP specification to which this specification can be applied.
값value | 구분division |
자료형 | 설명explanation | |
00 | PIT_NULLPIT_NULL | UINTUINT | NULLNULL | |
1One | PIT_BSTRPIT_BSTR | WORDWORD | 문자열 길이(slen)String length (slen) | |
WCHAR array[len]WCHAR array[len] |
문자열 |
|||
22 | PIT_I1PIT_I1 | UINTUINT | INT8INT8 | |
33 |
PIT_I2 | UINTUINT | INT16INT16 | |
44 | PIT_I4PIT_I4 | UINTUINT | INT32INT32 | |
55 | PIT_IPIT_I | UINTUINT | INTINT | |
66 | PIT_UI1PIT_UI1 | UINTUINT | UINT8UINT8 | |
77 |
PIT_UI2 | UINTUINT | UINT16UINT16 | |
88 | PIT_UI4PIT_UI4 | UINTUINT | UINT32UINT32 | |
99 | PIT_UIPIT_UI | UINTUINT | UINTUINT | |
0x80000x8000 | PIT_SETPIT_SET | Parameter SetParameter Set | 파라미터 셋parameter set | |
0x80010x8001 | PIT_ARRAYPIT_ARRAY | INT16INT16 | 파라미터 셋 개수Number of parameter sets | |
ParameterArrayParameterArray | 파라미터 셋 배열Parameter set array | |||
0x80020x8002 | PIT_BINDATAPIT_BINDATA | UINT16UINT16 | 바이너리 데이터 IDBinary data ID |
서버는 표 8 내지 표 10을 참조하여, 데이터 영역을 파싱할 수 있다.The server can parse the data area by referring to Tables 8 to 10.
표 11은 본 명세서가 적용될 수 있는 개체 하이퍼 링크의 제2 링크 정보 추출의 예시이다.Table 11 is an example of extracting second link information of an entity hyperlink to which this specification can be applied.
순서order | 동작movement |
1One |
[파라미터 셋 ID]데이터 영역에서 파라미터 셋 ID 인 첫 2바이트(920)를 읽어 들임. - 1B 02 => 02 1B[Parameter set ID] Read the first 2 bytes (920) of the parameter set ID from the data area. - 1B 02 => 02 1B |
22 |
[파라미터 셋에 존재하는 아이템 개수]데이터 영역에서 그 다음 4바이트(930)를 읽어 들이고, 역순으로 배치 - 0100 0000(2) => 0000 0001(2) = 1(10) - 파라미터 셋에 존재하는 아이템 개수는 1개[Number of items in the parameter set] Read the next 4 bytes (930) from the data area and place them in reverse order. - 0100 0000 (2) => 0000 0001 (2) = 1 (10) - The number of items in the parameter set is 1. |
33 |
[파라미터 아이템 - 파라미터 아이템 ID]데이터 영역에서 그 다음 2바이트(940)를 읽어 들임 - 6F 02 => 02 6F[Parameter Item - Parameter Item ID] Read the next 2 bytes (940) from the data area. - 6F 02 => 02 6F |
44 |
[파라미터 아이템 - 파라미터 아이템 종류]데이터 영역에서 그 다음 2바이트(950)를 읽어 들이고, 역순으로 배치 - 00 80 => 80 00 - 0x8000 이므로, 서버는 이후의 데이터를 파라미터 셋으로 해석[Parameter item - Parameter item type] Read the next 2 bytes (950) from the data area and place them in reverse order. - 00 80 => 80 00 - Since it is 0x8000, the server interprets the subsequent data as a parameter set. |
55 |
[파라미터 셋 ID]데이터 영역에서 그 다음 2바이트(960)를 읽어 들임. - 6F 02 => 02 6F[Parameter set ID] Read the next 2 bytes (960) from the data area. - 6F 02 => 02 6F |
66 |
[파라미터 셋에 존재하는 아이템 개수]데이터 영역에서 그 다음 4바이트(0100 0000)를 읽어 들이고, 역순으로 배치 - 0100 0000(2) => 0000 0001(2) = 1(10) - 서버는 파라미터 셋에 존재하는 아이템 개수를 1개로 판단[Number of items in the parameter set] Read the next 4 bytes (0100 0000) from the data area and arrange them in reverse order. - 0100 0000 (2) => 0000 0001 (2) = 1 (10) - The server determines that the number of items in the parameter set is 1. |
77 |
[파라미터 아이템 - 파라미터 아이템 ID]데이터 영역에서 그 다음 2바이트(6502)를 읽어 들임 - 65 02 => 02 65[Parameter Item - Parameter Item ID] Read the next 2 bytes (6502) from the data area. - 65 02 => 02 65 |
88 |
[파라미터 아이템 - 파라미터 아이템 종류]데이터 영역에서 그 다음 2바이트(0100)를 읽어 들이고, 역순으로 배치 - 01 00 => 00 01 - 서버는 1 = PIT_BSTR(표 10 참조) 이므로, 이후의 데이터를 “문자열 길이(2바이트) + 문자열”로 해석[Parameter item - Parameter item type] Read the next 2 bytes (0100) from the data area and arrange them in reverse order. - 01 00 => 00 01 - Since 1 = PIT_BSTR (see Table 10), the server interprets the subsequent data as “string length (2 bytes) + string”. |
99 |
[문자열 길이]데이터 영역에서 그 다음 2바이트(1D00)를 읽어 들이고, 역순으로 배치 - 1D 00 => 00 1D - 문자열 길이는 0x1D = 29(10) [String length] Read the next 2 bytes (1D00) from the data area and place them in reverse order. - 1D 00 => 00 1D - String length is 0x1D = 29 (10) |
1010 |
[문자열]서버는 데이터 영역에서 그 다음 {문자열 길이 - 14}(= 58 - 14 = 44) 바이트(6800 ~ 6D00)를 읽어 들임 - Command 길이가 29이고, 하나의 문자는 2바이트의 길이를 갖기 때문에, 실제 길이는 29*2 =58 바이트 - 한편, 58바이트 중 하위 14바이트는 문자열 정보가 아닌 옵션 값이기 때문에, 링크 주소의 문자열을 구하기 위해서는 58 - 14 = 44 바이트 만큼을 읽어 들임 이 44바이트에는 다음의 2가지 정보가 포함되어 있음 - 웹주소에 대한 문자열 + “|” (구분자) + 설명할 문자열 실제 필요한 데이터는 웹주소에 대한 문자열이므로, 서버는 42바이트 중 “|” 문자가 나오기 전까지를 웹주소 문자열로 인식 - “|” 문자가 없기 때문에 서버는 44바이트 전체가 웹주소 문자열로 인식 서버는 제2 링크 정보로서 “http\://www.google.com” 문자열을 추출[String] The server reads the next {string length - 14} (= 58 - 14 = 44) bytes (6800 ~ 6D00) from the data area. - Since the Command length is 29 and one character has a length of 2 bytes, the actual length is 29*2 =58 bytes. - Meanwhile, since the lower 14 bytes of the 58 bytes are option values rather than string information, 58 - 14 = 44 bytes must be read to obtain the link address string. These 44 bytes contain the following two pieces of information: - String for web address + “|” (separator) + string to explain Since the actual data needed is a string for a web address, the server uses “|” among the 42 bytes. The period before the character appears is recognized as a web address string. - “|” Because there are no characters, the server recognizes all 44 bytes as a web address string. The server extracts the string “http\://www.google.com” as second link information. |
다시 도 4를 참조하면, 서버는 레코드가 자료 연결을 지시하는 것에 근거하여, 제3 링크 정보를 추출한다(S4040). 예를 들어, 자료 연결은 텍스트 하이퍼 링크와 동일하게 컨트롤 헤더 태그이며, ctrl ID은 %unk (unknown field) 값을 갖을 수 있다. 보다 자세하게, 자료 연결을 지시하는 레코드의 헤더 정보에서 Tag ID 는 HWPTAG_CTRL_HEADER (컨트롤 헤더)이며, 데이터 영역은 0x6B 6E 75 25 (knu%)로 시작할 수 있다.도 10은 본 명세서가 적용될 수 있는 자료 연결을 지시하는 레코드의 예시이다.
Referring again to FIG. 4, the server extracts third link information based on the record indicating data connection (S4040). For example, a data link is a control header tag, just like a text hyperlink, and the ctrl ID can have the value %unk (unknown field). More specifically, in the header information of the record indicating data connection, the Tag ID is HWPTAG_CTRL_HEADER (control header), and the data area can start with 0x6B 6E 75 25 (knu%). Figure 10 is an example of a record indicating data connection to which this specification can be applied.
도 10을 참조하면, 서버는 텍스트 하이퍼 링크를 지시하는 레코드의 헤더정보(1010)를 분석할 수 있다.Referring to FIG. 10, the server can analyze header information 1010 of a record indicating a text hyperlink.
표 12는 서버의 헤더정보 분석의 예시이다.Table 12 is an example of server header information analysis.
종류type | 값value |
헤더header | 0x4704 70060x4704 7006 |
바이트 단위로 역순배치Arrange in reverse order by byte | 06 70 04 47(16) 06 70 04 47 (16) |
비트 단위로 배치Lay out bit by bit | (Size)0000 0110 0111 (Level)0000 0000 01(Tag ID)00 0100 0111(2) (Size)0000 0110 0111 (Level)0000 0000 01(Tag ID)00 0100 0111 (2) |
Tag ID (하위 10비트)Tag ID (lower 10 bits) |
00 0100 0111(2)
= 0x047 = 0x010 + 0x37 = 0x010 + 55(10) = 컨트롤 헤더00 0100 0111 (2) = 0x047 = 0x010 + 0x37 = 0x010 + 55 (10) = control header |
Size (상위 12비트)Size (upper 12 bits) |
0000 0110 0111(2)
= 0x0670000 0110 0111 (2) = 0x067 |
LevelLevel |
00 0000 0001(2)
= 0x00100 0000 0001 (2) = 0x001 |
표 12를 참조하면, 서버는 Tag ID(0x047)가 컨트롤 헤더이므로, 표 5의 명세에 근거하여, 레코드를 해석할 수 있다.Referring to Table 12, since Tag ID (0x047) is a control header, the server can interpret the record based on the specifications in Table 5.
표 13은 본 명세서가 적용될 수 있는 자료 연결의 제3 링크 정보 추출의 예시이다.Table 13 is an example of third link information extraction of data connection to which this specification can be applied.
순서order | 동작movement |
1One |
[ctrl ID]데이터 영역에서 ctrl ID 인 첫 4바이트(1020)를 읽어 들임 - 6B 6E 75 25 = knu% - 역순으로 배치하면 %unk 서버는 Tag ID가 컨트롤 헤더이고 ctrl ID가 %unk 이므로, 해당 레코드를 자료 연결을 지시하는 것으로 판단[ctrl ID] Reads the first 4 bytes (1020) of ctrl ID from the data area. - 6B 6E 75 25 = knu% - %unk if placed in reverse order The server determines that the record indicates data connection because the Tag ID is a control header and the ctrl ID is %unk. |
22 | [속성]데이터 영역에서 그 다음 4바이트(1030)를 읽어 들임[Property] Read the next 4 bytes (1030) from the data area |
33 | [기타 속성]데이터 영역에서 그 다음 1바이트(1040)를 읽어 들임[Other properties] Read the next 1 byte (1040) from the data area. |
44 |
[command 길이]데이터 영역에서 그 다음 2바이트(1050)를 읽어 들이고, 역순으로 배치 - 2A 00 => 00 2A command 길이는 0x002A = 42(10) [command length] Read the next 2 bytes (1050) from the data area and place them in reverse order. - 2A 00 => 00 2A command length is 0x002A = 42 (10) |
55 |
서버는 우선 데이터 영역에서 그 다음 {문자열 길이 - 14}(= 84 - 14 = 70) 바이트(6800~6500)를 읽어 들임- Command 길이가 42이고, 하나의 문자는 2바이트의 길이를 갖기 때문에, 실제 길이는 42*2 =84 바이트. 다만, 84바이트 중 하위 14바이트는 문자열 정보가 아닌 옵션 값이기 때문에, 서버는 링크 주소의 문자열을 구하기 위해서 84 - 14 = 70 바이트 만큼을 읽어 들임 이 70바이트에는 다음의 2가지 정보가 포함되어 있음 - 웹주소에 대한 문자열 + “|” (구분자) + 표시할 문자열 실제 필요한 데이터는 웹주소에 대한 문자열이므로, 서버는 70바이트 중 “|” 문자가 나오기 전까지를 웹주소 문자열로 인식. 서버는 제3 링크 정보로서, “http\://www.google.com” 문자열을 추출The server first reads the next {string length - 14} (= 84 - 14 = 70) bytes (6800~6500) from the data area - because the Command length is 42 and one character has a length of 2 bytes, Actual length is 42*2 =84 bytes. However, because the lower 14 bytes of the 84 bytes are option values rather than string information, the server reads 84 - 14 = 70 bytes to obtain the link address string. These 70 bytes contain the following two pieces of information: - String for web address + “|” (Separator) + String to display Since the actual data needed is a string for the web address, the server uses “|” among the 70 bytes. The period before the character appears is recognized as a web address string. The server extracts the string “http\://www.google.com” as third link information. |
다시 도 4를 참조하면, 서버는 추출된 링크 정보를 무해화한다(S4050).예를 들어, 서버는 링크 정보(예를 들어, 제1/제2/제3 링크정보)에서 스키마(schema) 정보만 남기고, 나머지는 빈칸(2000)으로 대체할 수 있다. 이를 통해, 링크 정보의 전체 길이는 그대로 유지될 수 있으며, 최소한의 수정으로 링크 정보는 무해화 될 수 있다.Referring again to FIG. 4, the server detoxifies the extracted link information (S4050). For example, the server creates a schema from link information (e.g., first/second/third link information). You can leave only the information and replace the rest with blank spaces (2000). Through this, the entire length of the link information can be maintained as is, and the link information can be rendered harmless with minimal modification.
도 11은 본 명세서가 적용될 수 있는 PDF 파일의 무해화 방법을 예시한다. Figure 11 illustrates a method for detoxifying a PDF file to which this specification can be applied.
도 11을 참조하면, 서버가 비실행 파일의 포맷을 PDF 파일로 판단한 경우, PDF 파일의 무해화 방법을 예시한다.Referring to FIG. 11, when the server determines that the format of the non-executable file is a PDF file, a method for detoxifying the PDF file is illustrated.
서버는 PDF 파일의 기본 요소(element)들을 기준으로 순회하여 자료형(dictionary type)을 탐색한다(S1110). 예를 들어, 서버는 PDF 파일의 기본 요소로서 obj를 기준으로 순회할 수 있다. obj에 설정된 값에 따라, 당해 요소의 실제 역할과 기능이 정의될 수 있다. The server searches for the dictionary type by traversing the basic elements of the PDF file (S1110). For example, the server can traverse obj as the basic element of a PDF file. Depending on the value set in obj, the actual role and function of the element can be defined.
만일, 각 페이지를 기준으로 순회하여 페이지 내부의 요소를 확인하는 일반적인 방법의 경우, 실제 문서에서는 Action obj가 자기 자신을 순환 참조하는 등, 많은 예외가 존재할 수 있으므로, 예외 처리가 누락될 위험이 있다.In the case of the general method of checking elements inside the page by traversing each page, there may be many exceptions in the actual document, such as Action obj circularly referencing itself, so there is a risk of missing exception handling. .
예를 들어, PDF는 indirect obj를 참조하는 일이 빈번하기 때문에, obj 기준으로 순회하는 것이 시간복잡도 측면에서도 안정적이다. For example, since PDF frequently references indirect obj, traversing by obj is more stable in terms of time complexity.
또한, 하나의 obj를 여러 페이지에서 각각 참조할 수 있기 때문에, 중복 탐색의 문제도 고려해야 한다. obj를 기준으로 순회하는 방식은 일정한 문서의 모든 obj를 순회할 수 있으므로, 한 번의 순회로 모든 obj에 대한 탐색을 보장할 수 있다.Additionally, since one obj can be referenced on multiple pages, the problem of redundant search must also be considered. Since the method of traversing based on obj can traverse all objs of a certain document, searching for all objs in one traversal can be guaranteed.
이러한 obj는 dictionary type을 갖을 수 있다. 예를 들어, dictionary type은 8가지 기본 데이터 형식(Boolean values, Integer and Real numbers, Strings, Names, Arrays, Dictionaries, Streams, and the null object) 중 하나로서, {key}-{value} 한 쌍의 대응관계를 갖는 하나의 엔트리로 포함할 수 있다. These objs can have a dictionary type. For example, a dictionary type is one of eight basic data types (Boolean values, Integer and Real numbers, Strings, Names, Arrays, Dictionaries, Streams, and the null object) and consists of a {key}-{value} pair. It can be included as a single entry with a corresponding relationship.
서버는 탐색된 자료형에 URI(Uniform Resource Identifier) entry가 포함되어 있는 지 검사한다(S1120).The server checks whether the searched data type includes a URI (Uniform Resource Identifier) entry (S1120).
예를 들어, 자료형은 URI 액션 개체를 포함할 수 있다. URI Action은 Dictionary 타입이며, 필수요소로 S와 URI를 포함한다(예를 들어, <</S URI /URI (https://www.seculetter.com)>>). 서버는 S와 URI 키(key)가 포함되어 있는 지를 기준으로 URI entry를 검사할 수 있다.For example, a data type can contain a URI action object. URI Action is a Dictionary type and includes S and URI as required elements (for example, << /S URI /URI ( https://www.seculetter.com) >>). The server can check the URI entry based on whether it contains S and the URI key.
표 14는 본 명세서가 적용될 수 있는 S와 URI 키의 예시이다.Table 14 is an example of S and URI keys to which this specification can be applied.
KeyKey | TypeType | ValueValue |
SS | namename |
(Required) (Required)
The type of action that this dictionary describes; shall be The type of action that this dictionary describes; shall be URI URI for a URI action. for a URI action. |
URIURI | ASCII stringASCII string | (Required) The uniform resource identifier to resolve, encoded in 7-bit ASCII. (Required) The uniform resource identifier to resolve, encoded in 7-bit ASCII. |
서버는 URI entry가 포함되어 있는 것에 근거하여, URI entry를 무해화 한다(S1130).예를 들어, 서버는 URI 키의 ASCII string값에서 Link의 스키마 정보만 남길 수 있다.The server detoxifies the URI entry based on the fact that the URI entry is included (S1130). For example, the server can leave only the Link schema information in the ASCII string value of the URI key.
표 15는 본 명세서가 적용될 수 있는 URI 엔트리 무해화의 예시이다.Table 15 is an example of URI entry detoxification to which this specification can be applied.
무해화 이전Before detoxification | 무해화 이후After detoxification |
<< /S URI /URI ( https://www.seculetter.com) /Next 10 0 R >><< /SURI /URI ( https://www.seculetter.com) /Next 10 0 R >> |
<< /S URI /URI (https://) /Next 10 0 R >><< /SURI /URI (https://) /Next 10 0 R >> |
만일, 필수요소가 제거되거나, URI Action 자체를 제거하는 경우, URI Action과 연결된 Next Action 동작이 수행되지 않는 문제가 발생할 수 있다. 따라서. 서버는 실제로 문제가 되는 부분만을 최소한으로 수정하여 무해화를 수행한다.서버는 다른 기본 요소들에 대해서도 반복적으로 URI entry 무해화를 수행할 수 있다. If essential elements are removed or the URI Action itself is removed, a problem may occur in which the Next Action associated with the URI Action is not performed. thus. The server performs detoxification by minimally modifying only the parts that are actually problematic. The server can repeatedly detoxify URI entries for other basic elements.
전술한 본 명세서는, 프로그램이 기록된 매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 매체는, 컴퓨터 시스템에 의하여 읽혀 질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 매체의 예로는, HDD(Hard Disk Drive), SSD(Solid State Disk), SDD(Silicon Disk Drive), ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장 장치 등이 있으며, 또한 캐리어 웨이브(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 따라서, 상기의 상세한 설명은 모든 면에서 제한적으로 해석되어서는 아니되고 예시적인 것으로 고려되어야 한다. 본 명세서의 범위는 첨부된 청구항의 합리적 해석에 의해 결정되어야 하고, 본 명세서의 등가적 범위 내에서의 모든 변경은 본 명세서의 범위에 포함된다.The above-mentioned specification can be implemented as computer-readable code on a program-recorded medium. Computer-readable media includes all types of recording devices that store data that can be read by a computer system. Examples of computer-readable media include HDD (Hard Disk Drive), SSD (Solid State Disk), SDD (Silicon Disk Drive), ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical data storage device, etc. It also includes those implemented in the form of carrier waves (e.g., transmission via the Internet). Accordingly, the above detailed description should not be construed as restrictive in all respects and should be considered illustrative. The scope of this specification should be determined by reasonable interpretation of the appended claims, and all changes within the equivalent scope of this specification are included in the scope of this specification.
또한, 이상에서 서비스 및 실시 예들을 중심으로 설명하였으나 이는 단지 예시일 뿐 본 명세서를 한정하는 것이 아니며, 본 명세서가 속하는 분야의 통상의 지식을 가진 자라면 본 서비스 및 실시 예의 본질적인 특성을 벗어나지 않는 범위에서 이상에 예시되지 않은 여러 가지의 변형과 응용이 가능함을 알 수 있을 것이다. 예를 들어, 실시 예들에 구체적으로 나타난 각 구성 요소는 변형하여 실시할 수 있는 것이다. 그리고 이러한 변형과 응용에 관계된 차이점들은 첨부한 청구 범위에서 규정하는 본 명세서의 범위에 포함되는 것으로 해석되어야 할 것이다.In addition, although the description has been made above with a focus on services and embodiments, this is only an example and does not limit the present specification, and those skilled in the art will understand that it does not deviate from the essential characteristics of the services and embodiments. It can be seen that various modifications and applications not exemplified above are possible. For example, each component specifically shown in the embodiments can be modified and implemented. And the differences related to these modifications and applications should be construed as being included in the scope of the present specification as defined in the attached claims.
Claims (9)
- 서버가 비실행 파일을 무해화(Disarming) 시키는 방법에 있어서,In how the server disarms non-executable files,상기 비실행 파일의 포맷이 HWP 파일인 것에 근거하여, 상기 HWP 파일로부터 레코드(record)를 수집하는 단계;Based on the format of the non-executable file being an HWP file, collecting records from the HWP file;상기 레코드가 텍스트 하이퍼 링크를 지시하는 것에 근거하여, 제1 링크 정보를 추출하는 단계;extracting first link information based on the record indicating a text hyperlink;상기 레코드가 개체 하이퍼 링크를 지시하는 것에 근거하여, 제2 링크 정보를 추출하는 단계;extracting second link information based on the record indicating an entity hyperlink;상기 레코드가 자료 연결을 지시하는 것에 근거하여, 제3 링크 정보를 추출하는 단계; 및extracting third link information based on the record indicating data linkage; and추출된 링크 정보를 무해화 하는 단계;Detoxifying the extracted link information;를 포함하며,Includes,상기 추출된 링크 정보는 The extracted link information is상기 제1 링크 정보, 상기 제2 링크 정보, 또는 상기 제3 링크 정보를 포함하는, 무해화 방법.A detoxification method comprising the first link information, the second link information, or the third link information.
- 제1항에 있어서,According to paragraph 1,상기 비실행 파일의 포맷이 PDF 파일인 것에 근거하여, 상기 PDF 파일의 기본 요소들을 기준으로 순회하여, 자료형(dictionary type)을 탐색하는 단계;Based on the fact that the format of the non-executable file is a PDF file, searching for a dictionary type by traversing basic elements of the PDF file;상기 자료형에 URI entry가 포함되어 있는 지를 검사하는 단계; 및Checking whether the data type includes a URI entry; and상기 URI entry가 포함되어 있는 것에 근거하여, 상기 URI entry를 무해화하는 단계;를 포함하며,A step of detoxifying the URI entry based on whether the URI entry is included,상기 자료형은The above data type isURI 액션(action) 개체를 포함하는, 무해화 방법.A detoxification method containing a URI action object.
- 제2항에 있어서,According to paragraph 2,상기 URI entry가 포함되어 있는 지를 검사하는 단계는The step of checking whether the URI entry is included is“S” 키, 및 “URI” 키에 근거하는, 무해화 방법.Disarming method based on “S” key and “URI” key.
- 제3항에 있어서,According to paragraph 3,상기 URI entry를 무해화하는 단계는The step of detoxifying the URI entry is상기 “URI” 키의 ASCII string값에서 Link의 스키마(schema) 정보만을 유지시키는 단계;Maintaining only Link schema information in the ASCII string value of the “URI” key;를 포함하는, 무해화 방법.A method of detoxification, including.
- 제1항에 있어서,According to paragraph 1,상기 추출된 링크 정보를 무해화 하는 단계는The step of detoxifying the extracted link information is상기 추출된 링크 정보에서 스키마(schema) 정보 외에 나머지는 빈칸으로 대체하는 단계;Replacing the rest of the extracted link information except schema information with blank spaces;를 포함하는, 무해화 방법.Detoxification method, including.
- 제5항에 있어서,According to clause 5,상기 레코드를 수집하는 단계는The step of collecting the records is상기 HWP 파일의 BodyText 스토리지(storage)에 포함된 Section 스트림(stream)을 추출하는 단계; 및Extracting a Section stream included in BodyText storage of the HWP file; and상기 Section 스트림의 레코드를 수집하는 단계;collecting records of the Section stream;를 포함하는, 무해화 방법.A method of detoxification, including.
- 제6항에 있어서,According to clause 6,상기 레코드를 수집하는 단계는The step of collecting the records is상기 레코드의 헤더(header)로부터 Tag ID를 획득하는 단계; 및Obtaining a Tag ID from the header of the record; and상기 Tag ID에 근거하여, 데이터 영역을 판단하는 단계;determining a data area based on the Tag ID;를 더 포함하는, 무해화 방법.A detoxification method further comprising:
- 제7항에 있어서,In clause 7,상기 제1 링크 정보를 추출하는 단계는The step of extracting the first link information is상기 Tag ID가 컨트롤 헤더를 지시하는 것에 근거하여, 상기 데이터 영역에서 ctrl ID를 판단하는 단계;determining a ctrl ID in the data area based on the Tag ID indicating a control header;상기 ctrl ID에 근거하여, command 길이를 판단하는 단계; 및determining the command length based on the ctrl ID; and상기 command 길이에 근거하여, 링크 주소를 나타내는 문자열을 추출하는 단계;extracting a string representing a link address based on the command length;를 포함하는, 무해화 방법.A method of detoxification, including.
- 비실행 파일을 무해화(Disarming) 시키는 서버에 있어서,In a server that disarms non-executable files,통신부;Ministry of Communications;메모리; 및Memory; and상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서;를 포함하고,It includes a processor that functionally controls the communication unit and the memory,상기 프로세서는The processor is상기 비실행 파일의 포맷이 HWP 파일인 것에 근거하여, 상기 HWP 파일로부터 레코드(record)를 수집하고, 상기 레코드가 텍스트 하이퍼 링크를 지시하는 것에 근거하여, 제1 링크 정보를 추출하며, 상기 레코드가 개체 하이퍼 링크를 지시하는 것에 근거하여, 제2 링크 정보를 추출하고, 상기 레코드가 자료 연결을 지시하는 것에 근거하여, 제3 링크 정보를 추출하며, 추출된 링크 정보를 무해화 하고, 상기 추출된 링크 정보는 상기 제1 링크 정보, 상기 제2 링크 정보, 또는 상기 제3 링크 정보를 포함하는, 서버.Based on the format of the non-executable file being an HWP file, a record is collected from the HWP file, and based on the record indicating a text hyperlink, first link information is extracted, and the record is extracting second link information based on indicating an entity hyperlink; extracting third link information based on the record indicating a data connection; detoxifying the extracted link information; Link information includes the first link information, the second link information, or the third link information.
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020227033330A KR102499555B1 (en) | 2022-09-23 | 2022-09-23 | Methods and apparatus for disarming a link in pdf or hwp |
PCT/KR2022/014298 WO2024063184A1 (en) | 2022-09-23 | 2022-09-23 | Method and apparatus for disarming link in pdf or hwp |
KR1020237004696A KR102547757B1 (en) | 2022-09-23 | 2022-09-23 | Methods and apparatus for disarming a link in hwp |
KR1020237004697A KR102583399B1 (en) | 2022-09-23 | 2022-09-23 | Methods and apparatus for disarming a link in pdf |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/KR2022/014298 WO2024063184A1 (en) | 2022-09-23 | 2022-09-23 | Method and apparatus for disarming link in pdf or hwp |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2024063184A1 true WO2024063184A1 (en) | 2024-03-28 |
Family
ID=85330646
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/KR2022/014298 WO2024063184A1 (en) | 2022-09-23 | 2022-09-23 | Method and apparatus for disarming link in pdf or hwp |
Country Status (2)
Country | Link |
---|---|
KR (3) | KR102499555B1 (en) |
WO (1) | WO2024063184A1 (en) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024063184A1 (en) * | 2022-09-23 | 2024-03-28 | 시큐레터 주식회사 | Method and apparatus for disarming link in pdf or hwp |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101860546B1 (en) * | 2017-04-28 | 2018-05-23 | (주)지란지교시큐리티 | Apparatus and method for disarm of contents included in file, recording medium thereof |
KR20220098316A (en) * | 2020-12-29 | 2022-07-12 | (주)기원테크 | Mail security-based zero-day URL attack defense service providing device and its operation method |
KR102499555B1 (en) * | 2022-09-23 | 2023-02-16 | 시큐레터 주식회사 | Methods and apparatus for disarming a link in pdf or hwp |
-
2022
- 2022-09-23 WO PCT/KR2022/014298 patent/WO2024063184A1/en unknown
- 2022-09-23 KR KR1020227033330A patent/KR102499555B1/en active IP Right Grant
- 2022-09-23 KR KR1020237004696A patent/KR102547757B1/en active IP Right Grant
- 2022-09-23 KR KR1020237004697A patent/KR102583399B1/en active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101860546B1 (en) * | 2017-04-28 | 2018-05-23 | (주)지란지교시큐리티 | Apparatus and method for disarm of contents included in file, recording medium thereof |
KR20220098316A (en) * | 2020-12-29 | 2022-07-12 | (주)기원테크 | Mail security-based zero-day URL attack defense service providing device and its operation method |
KR102499555B1 (en) * | 2022-09-23 | 2023-02-16 | 시큐레터 주식회사 | Methods and apparatus for disarming a link in pdf or hwp |
Non-Patent Citations (3)
Title |
---|
"APT : Malicious Codes Spreading Through Malicious HWP Files", MALWARES OFFICIAL BLOG, MALWARES, KR, KR, pages 1 - 17, XP009554045, Retrieved from the Internet <URL:https://story.malwares.com/66> * |
BRANDIS RON, STELLER LUKE: "Threat Modelling Adobe PDF: DSTO-TR-2730", DSTO FORMAL REPORTS, 1 August 2012 (2012-08-01), pages 1 - 122, XP093149332, Retrieved from the Internet <URL:https://www.dst.defence.gov.au/sites/default/files/publications/documents/DSTO-TR-2730.pdf> * |
CHOI, MIN JI: "Hide Tight, You'll See the Malicious Codes", CSRC WEBLOG, KR, KR, pages 1 - 7, XP009554047, Retrieved from the Internet <URL:https://csrc.kaist.ac.kr/blog/2021/09/16/%ED%95%9C%EA%B8%80-%EB%AC%B8%EC%84%9C-%EA%BC%AD%EA%BC%AD-%EC%88%A8%EC%96%B4%EB%9D%BC-%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-%EB%B3%B4%EC%9D%BC%EB%9D%BC/> * |
Also Published As
Publication number | Publication date |
---|---|
KR102499555B1 (en) | 2023-02-16 |
KR102583399B1 (en) | 2023-09-27 |
KR102547757B1 (en) | 2023-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10902111B2 (en) | Methods, media, and systems for detecting attack on a digital processing device | |
US7636945B2 (en) | Detection of polymorphic script language viruses by data driven lexical analysis | |
Halfond et al. | Preventing SQL injection attacks using AMNESIA | |
Halfond et al. | WASP: Protecting web applications using positive tainting and syntax-aware evaluation | |
Jana et al. | Abusing file processing in malware detectors for fun and profit | |
WO2013168951A1 (en) | Apparatus and method for checking malicious file | |
WO2024063184A1 (en) | Method and apparatus for disarming link in pdf or hwp | |
WO2024071451A1 (en) | Method for detecting malicious macro in non-executable file by using ocr technology, and apparatus therefor | |
Wang et al. | Patchrnn: A deep learning-based system for security patch identification | |
WO2019160195A1 (en) | Apparatus and method for detecting malicious threats contained in file, and recording medium therefor | |
US20080027866A1 (en) | System and method for authenticating file content | |
Li et al. | FEPDF: a robust feature extractor for malicious PDF detection | |
WO2023229063A1 (en) | Method for improving efficiency of original file back up space, using delta extraction method in disarming operation, and device therefor | |
US8495733B1 (en) | Content fingerprinting using context offset sequences | |
WO2022108318A1 (en) | Apparatus and method for analyzing smart contract code vulnerabilities | |
WO2023090864A1 (en) | Apparatus and method for automatically analyzing malicious event log | |
Brengel et al. | {YARIX}: Scalable {YARA-based} malware intelligence | |
WO2023229062A1 (en) | Method and device for disarming ole object in ms-ooxml | |
WO2023229066A1 (en) | Reversing engine-based document action determination method, and device therefor | |
WO2023229065A1 (en) | Method and device for blocking malicious non-portable executable file by utilizing reversing engine and cdr engine | |
WO2023229061A1 (en) | Method and apparatus for disarming javascript in pdf or hwp | |
WO2023229068A1 (en) | Method and device for disarming dde in ms excel document format | |
Zhou et al. | A Large-scale Fine-grained Analysis of Packages in Open-Source Software Ecosystems | |
Jang et al. | Understanding anti-forensic techniques with timestamp manipulation | |
KR102494836B1 (en) | Methods and apparatus for disarming a link in ms-doc |
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: 22959617 Country of ref document: EP Kind code of ref document: A1 |