KR20240050230A - Methods and apparatus for disarming a link in ms-xls - Google Patents

Methods and apparatus for disarming a link in ms-xls Download PDF

Info

Publication number
KR20240050230A
KR20240050230A KR1020230007571A KR20230007571A KR20240050230A KR 20240050230 A KR20240050230 A KR 20240050230A KR 1020230007571 A KR1020230007571 A KR 1020230007571A KR 20230007571 A KR20230007571 A KR 20230007571A KR 20240050230 A KR20240050230 A KR 20240050230A
Authority
KR
South Korea
Prior art keywords
record
binary value
hyperlink
link information
file
Prior art date
Application number
KR1020230007571A
Other languages
Korean (ko)
Inventor
이재영
Original Assignee
시큐레터 주식회사
Filing date
Publication date
Application filed by 시큐레터 주식회사 filed Critical 시큐레터 주식회사
Publication of KR20240050230A publication Critical patent/KR20240050230A/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • G06F16/9566URL specific, e.g. using aliases, detecting broken or misspelled links
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action

Abstract

본 명세서는 서버가 비실행 파일의 링크정보를 무해화(Disarming) 시키는 방법에 있어서, 상기 비실행 파일의 포맷이 MS-XLS 파일인 것에 근거하여, 상기 MS-XLS 파일의 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색하고, 상기 제1 레코드 또는 상기 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색하며, 상기 제1 바이너리 값이 검색된 것에 근거하여, 상기 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색하고, 상기 제2 바이너리 값이 검색된 것에 근거하여, 상기 제2 바이너리 값을 지정한 레코드에서 링크정보를 검색하며, 상기 링크정보가 검색된 것에 근거하여, 상기 링크정보를 무해화하며, 상기 제1 레코드는 HLink를 포함하고, 상기 제2 레코드는 MsoDrawing 레코드를 포함할 수 있다.This specification describes a method for a server to disarm link information of a non-executable file, based on the format of the non-executable file being an MS-XLS file, and a cell in the work stream of the MS-XLS file. ) Retrieves a first record associated with a hyperlink or a second record associated with an image hyperlink, and based on the first record or the second record being retrieved, retrieves a first binary value associated with the hyperlink, and 1 Based on the binary value being searched, searching for a second binary value related to the hyperlink in the record specifying the first binary value, and based on the second binary value being searched, searching for the second binary value in the record specifying the second binary value Search for link information, and detoxify the link information based on the searched link information. The first record may include an HLink, and the second record may include an MsoDrawing record.

Description

MS-XLS에서 Link의 무해화를 위한 방법 및 장치 {METHODS AND APPARATUS FOR DISARMING A LINK IN MS-XLS}Method and apparatus for disarming a link in MS-XLS {METHODS AND APPARATUS FOR DISARMING A LINK IN MS-XLS}

본 명세서는 MS-XLS 문서에서 Link의 무해화를 위한 방법 및 장치에 관한 것이다.This specification relates to a method and device for detoxifying links in MS-XLS documents.

지능형 지속 위협(Advanced Persistent Threat, APT) 공격은 공격자가 특정 타깃을 정하고 목표한 정보를 빼내기 위해 고도의 공격기법을 적용하여 지속적으로 다양한 형태의 악성 코드를 활용한다. 특히 APT 공격은 초기 침입단계에서 탐지하지 못하는 경우가 많으며, 실행(Portable Executable, PE) 파일보다는 악성 코드를 포함하는 비실행(Non-Portable Executable, Non-PE) 파일을 이용하는 경우가 많다. Advanced Persistent Threat (APT) attacks involve attackers selecting a specific target and applying advanced attack techniques to continuously utilize various types of malicious code to steal targeted information. In particular, APT attacks are often not detected in the initial intrusion stage, and non-portable executable (Non-PE) files containing malicious code are often used rather than executable (portable executable, PE) files.

비실행 파일은 실행 파일과 반대되는 개념으로써, 자체적으로 실행되지 않는 파일을 의미한다. 비실행 파일로는 워드 파일, 엑셀 파일, 한글 파일, PDF 파일 등의 문서 파일, 이미지 파일, 동영상 파일, 자바스크립트 파일, 및 HTML 파일을 예로 들 수 있다. APT 공격에 악성 코드가 포함된 비실행 파일이 많이 이용되는 이유는 비실행 파일을 실행하는 응용 프로그램이 기본적으로 어느 정도의 보안 취약성을 가지고 있기 때문이다. 뿐만 아니라, 악성 코드를 비실행 파일에 포함시키면 파일을 변경하여 변종 악성 코드를 손쉽게 만들 수 있기 때문이다. A non-executable file is the opposite of an executable file and refers to a file that does not run on its own. Examples of non-executable files include document files such as Word files, Excel files, Hangul files, and PDF files, image files, video files, JavaScript files, and HTML files. The reason why non-executable files containing malicious code are often used in APT attacks is because applications that run non-executable files have a certain degree of security vulnerability. In addition, if malicious code is included in a non-executable file, variant malicious code can be easily created by changing the file.

문서 행위란 비실행 파일이 관련된 응용 프로그램의 액션을 실행하는 행위이다. 기존의 APT 솔루션들은 문서 행위 기반으로 동작하기 때문에 문서 행위 발생 후, 샌드박스(Virtural Machine, VM)의 변화를 관찰하여 악성 여부를 판단한다. 이는 문서 행위의 발현을 전부 기다린 후 악성 여부를 파악하기 때문에 분석시간이 오래 걸린다. A document action is the act of executing an action in an application program involving a non-executable file. Existing APT solutions operate based on document behavior, so after document behavior occurs, changes in the sandbox (Virtural Machine, VM) are observed to determine whether it is malicious. This takes a long time to analyze because it waits for all document actions to occur before determining whether they are malicious.

또한, CDR과 같은 기존 APT 솔루션들은 악성 액티브 콘텐츠를 제거할 수는 있지만, 문서의 필수 요소(예를 들어, 본문, 폰트)에서 발생하는 취약점을 제거할 수는 없기 때문에 보안 공백이 발생한다. Additionally, existing APT solutions such as CDR can remove malicious active content, but cannot eliminate vulnerabilities arising from essential elements of the document (e.g., body, font), creating a security gap.

비실행 파일에는 유해한 링크 정보가 포함될 가능성이 있기 때문에, 링크 정보를 무해화하여야 한다. 이 경우에는 비실행 파일의 레이아웃이 바뀌거나 틀어지는 문제가 발생하지 않아야 한다.Since non-executable files may contain harmful link information, the link information must be rendered harmless. In this case, the problem of the layout of the non-executable file changing or being distorted should not occur.

본 명세서의 목적은, MS-XLS의 전체 구조를 유지하면서 Link를 무해화 하기 위한 방법을 제안한다.The purpose of this specification is to propose a method to detoxify Link while maintaining the overall structure of MS-XLS.

본 명세서가 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 이하의 명세서의 상세한 설명으로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.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) 시키는 방법에 있어서, 상기 비실행 파일의 포맷이 MS-XLS 파일인 것에 근거하여, 상기 MS-XLS 파일의 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색하는 단계; 상기 제1 레코드 또는 상기 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색하는 단계; 상기 제1 바이너리 값이 검색된 것에 근거하여, 상기 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색하는 단계; 상기 제2 바이너리 값이 검색된 것에 근거하여, 상기 제2 바이너리 값을 지정한 레코드에서 링크정보를 검색하는 단계; 및 상기 링크정보가 검색된 것에 근거하여, 상기 링크정보를 무해화하는 단계; 를 포함하며, 상기 제1 레코드는 HLink를 포함하고, 상기 제2 레코드는 MsoDrawing 레코드를 포함할 수 있다.One aspect of the present specification is a method for a server to disarm link information of a non-executable file, based on the format of the non-executable file being an MS-XLS file, the Work Stream of the MS-XLS file. searching for a first record related to a cell hyperlink or a second record related to an image hyperlink; retrieving a first binary value associated with a hyperlink based on whether the first record or the second record is retrieved; Based on the search for the first binary value, searching for a second binary value related to a hyperlink in the record specifying the first binary value; Based on the second binary value being searched, searching for link information in a record specifying the second binary value; and detoxifying the link information based on the link information being searched. Includes, wherein the first record may include an HLink, and the second record may include an MsoDrawing record.

또한, 상기 제1 바이너리 값은 HFD 레코드의 clsid 값을 포함할 수 있다.Additionally, the first binary value may include the clsid value of the HFD record.

또한, 상기 제2 바이너리 값은 HyperlinkMoniker 레코드의 CLSID_StdHl 값을 포함할 수 있다.Additionally, the second binary value may include the CLSID_StdHl value of the HyperlinkMoniker record.

또한, 상기 링크정보를 검색하는 단계는 상기 HyperlinkMoniker 레코드 내에 URLMoniker 레코드를 검색하는 단계; 를 포함할 수 있다.Additionally, the step of searching the link information includes searching a URLMoniker record within the HyperlinkMoniker record; may include.

또한, 상기 링크정보를 무해화하는 단계는 상기 URLMoniker 레코드의 url 필드값을 무해화하는 단계; 를 포함할 수 있다.Additionally, the step of detoxifying the link information includes detoxifying the url field value of the URLMoniker record; may include.

또한, 상기 url 필드값을 무해화하는 단계는 상기 url 필드값에서 scheme 만 남기는 단계; 를 포함할 수 있다.Additionally, the step of detoxifying the url field value includes leaving only the scheme in the url field value; may include.

본 명세서의 또 다른 일 양상은, 비실행 파일의 링크정보를 무해화(Disarming) 시키는 서버에 있어서, 통신부; 메모리; 및 상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서;를 포함하고, 상기 프로세서는 상기 비실행 파일의 포맷이 MS-XLS 파일인 것에 근거하여, 상기 MS-XLS 파일의 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색하고, 상기 제1 레코드 또는 상기 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색하며, 상기 제1 바이너리 값이 검색된 것에 근거하여, 상기 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색하고, 상기 제2 바이너리 값이 검색된 것에 근거하여, 상기 제2 바이너리 값을 지정한 레코드에서 링크정보를 검색하며, 상기 링크정보가 검색된 것에 근거하여, 상기 링크정보를 무해화하고, 상기 제1 레코드는 HLink를 포함하며, 상기 제2 레코드는 MsoDrawing 레코드를 포함할 수 있다.Another aspect of the present specification is a server that disarms link information of non-executable files, comprising: a communication unit; Memory; and a processor that functionally controls the communication unit and the memory, wherein the processor selects a cell hyperlink in the work stream of the MS-XLS file based on the format of the non-executable file being an MS-XLS file. Retrieving a first record associated with a link or a second record associated with an image hyperlink, and based on the first record or the second record being retrieved, retrieving a first binary value associated with the hyperlink, the first binary Based on the value being searched, a second binary value related to the hyperlink is searched from the record specifying the first binary value, and based on the second binary value being searched, link information is retrieved from the record specifying the second binary value. Searches for, and based on the searched link information, the link information may be rendered harmless, the first record may include an HLink, and the second record may include an MsoDrawing record.

본 명세서의 실시예에 따르면, MS-XLS의 전체 구조를 유지하면서 Link를 무해화를 수행할 수 있다.According to the embodiment of the present specification, Link can be detoxified while maintaining the overall structure of MS-XLS.

본 명세서에서 얻을 수 있는 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.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은 본 명세서와 관련된 서버 또는 클라이언트를 나타내는 도면이다.
도 2는 본 명세서에 적용될 수 있는 비정상 입력의 예시이다.
도 3은 본 명세서가 적용될 수 있는 URI 구성을 예시한다.
도 4는 본 명세서가 적용될 수 있는 무해화 방법을 예시한다.
도 5는 본 명세서가 적용될 수 있는 MS-DOC 파일의 무해화 방법을 예시한다.
도 6은 본 명세서가 적용될 수 있는 HFD 구조를 예시한다.
도 7은 본 명세서가 적용될 수 있는 Hyperlink Object를 예시한다.
도 8은 본 명세서가 적용될 수 있는 HyperlinkMoniker의 예시이다.
도 9는 본 명세서가 적용될 수 있는 URLMoniker의 예시이다.
도 10은 본 명세서가 적용될 수 있는 Data Stream의 예시이다.
도 11은 본 명세서가 적용될 수 있는 링크정보 무해화의 예시이다.
도 12는 본 명세서가 적용될 수 있는 MS-XLS 파일의 무해화 방법을 예시한다.
도 13은 본 명세서가 적용될 수 있는 HLink 레코드를 예시한다.
도 14는 본 명세서가 적용될 수 있는 MsoDrawing 레코드를 예시한다.
도 15는 본 명세서가 적용될 수 있는 OfficeArtDgContainer 레코드를 예시한다.
도 16은 본 명세서가 적용될 수 있는 IHlink 레코드를 예시한다.
본 명세서에 관한 이해를 돕기 위해 상세한 설명의 일부로 포함되는, 첨부 도면은 본 명세서에 대한 실시예를 제공하고, 상세한 설명과 함께 본 명세서의 기술적 특징을 설명한다.
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 URI configuration to which this specification can be applied.
Figure 4 illustrates a detoxification method to which the present disclosure can be applied.
Figure 5 illustrates a method for detoxifying an MS-DOC file to which this specification can be applied.
Figure 6 illustrates a HFD structure to which this specification can be applied.
Figure 7 illustrates a Hyperlink Object to which this specification can be applied.
Figure 8 is an example of HyperlinkMoniker to which this specification can be applied.
Figure 9 is an example of URLMoniker to which this specification can be applied.
Figure 10 is an example of a data stream to which this specification can be applied.
Figure 11 is an example of link information detoxification to which this specification can be applied.
Figure 12 illustrates a method for detoxification of MS-XLS files to which this specification can be applied.
Figure 13 illustrates an HLink record to which this specification can be applied.
Figure 14 illustrates an MsoDrawing record to which this specification can be applied.
Figure 15 illustrates an OfficeArtDgContainer record to which this specification can be applied.
Figure 16 illustrates an IHlink record 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 numerals 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 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 designate 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 it 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, such as, 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. 파일 분석: 비실행 파일 자체의 외관(예를 들어, 속성, 작성자, 작성 날짜, 파일 타입)을 분석하는 단계로서, 일반 백신 프로그램과 유사하게 비실행 파일 자체의 정보만으로 악성여부를 진단할 수 있다.One. 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, maliciousness can be diagnosed using only the information of the non-executable file itself. .

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 can be extracted and compared and analyzed according to the file structure to diagnose maliciousness. This can be suitable for macros, URL extraction analysis, etc.

3. 동적 분석: 비실행 파일을 편집기, 리더기가 포함된 응용프로그램을 통해 읽어들이고 모니터링하면서 행위를 분석하여 악성 여부를 판별하는 단계로서, 매크로, 하이퍼링크, DDE 등 정상기능을 이용한 악성 행위를 탐지하기에 용이하다.3. Dynamic analysis: This is a step to determine whether or not a non-executable file is malicious by reading and monitoring it through an application program that includes an editor and reader and analyzing its behavior. It is used to detect malicious behavior using normal functions such as macros, hyperlinks, and DDE. It's easy.

4. 디버깅 분석: 비실행 파일을 읽어들이고 디버깅하여 취약점, 익스플로잇 등을 분석하는 단계로서, 매크로, 하이퍼링크, DDE를 포함하여 문서 내 본문, 표, 폰트, 그림 등을 이용한 응용프로그램의 취약점을 탐지하기에 적합하다.4. Debugging analysis: This is the step of reading and debugging non-executable files to analyze vulnerabilities, exploits, etc., to detect vulnerabilities in applications using the body of the document, tables, fonts, pictures, etc., including macros, hyperlinks, and DDE. Suitable.

리버싱 엔진은 디버깅 분석에 사용될 수 있는 디버깅 엔진을 포함할 수 있다. 디버깅 엔진은 비실행 파일의 열람 과정을 디버깅하여 문서 입력, 처리, 출력단계에서 발생하는 취약점을 진단할 수 있다. 여기서 취약점이란, 응용프로그램이 응용프로그램의 개발자가 개발한 코드(로직)에서 예상하지 못한 값을 입력 받았을 때, 발생하는 오류, 버그 등을 이용하는 것으로서, 공격자는 취약점을 통해 비정상 종료로 인한 서비스 거부, 원격 코드 실행 등의 악성 행위를 실행할 수 있다.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 an error or bug that occurs when an application receives an unexpected value from the code (logic) developed by the application developer. An attacker can use the vulnerability to 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 creates safe documents and provides them to customers by disarming and reconstructing the content in the document, and the files subject to detoxification are 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 diverge 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은 본 명세서가 적용될 수 있는 URI 구성을 예시한다.Figure 3 illustrates a URI configuration to which this specification can be applied.

도 3을 참조하면, 본 명세서에서 무해화 대상이 되는 링크정보인 URI(Uniform Resource Identifier)를 예시한다.Referring to FIG. 3, URI (Uniform Resource Identifier), which is link information subject to detoxification in this specification, is illustrated.

일반적으로 URI 구문(syntax)은 scheme, authority, path, query, 및 fragment를 포함할 수 있다. Generally, URI syntax may include scheme, authority, path, query, and fragment.

표 1은 본 명세서가 적용될 수 있는 URI 구문의 계층적 시퀀스의 예시이다.Table 1 is an example of a hierarchical sequence of URI syntax to which this specification can be applied.

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

hier-part = "//" authority path-abempty
/path-absolute
/path-rootless
/path-empty

예를 들어, URI 구문은 다음의 표 1과 같은 계층적 시퀀스로 구성될 수 있다.도 3 및 표 1을 참조하면, URI에서 “/”와 관련된 규칙은 다음과 같을 수 있다.(1) When authority is present, the path must either be empty or begin with a slash ("/") character.For example, the URI syntax may be composed of a hierarchical sequence as shown in Table 1 below. Referring to Figure 3 and Table 1, the rules related to “/” in URI may be as follows. (1) When authority is present, the path must either be empty or begin with a slash ("/") character.

(2) When authority is not present, the path cannot begin with two slash characters ("//").(2) When authority is not present, the path cannot begin with two slash characters ("//").

따라서, URI 에서는 authority의 존재 여부에 따라, path와 관련된 “/”의 개수가 정해질 수 있다. 예를 들어, 서버는 “/”를 통해, authority를 판단할 수 있다.Therefore, in URI, the number of “/” related to the path can be determined depending on the presence or absence of authority. For example, the server can determine authority through “/”.

만일, 무해화 작업을 통해, URI를 모두 제거하면, 오피스 문서에서 링크 표시가 사라지는 경우가 생겨 무해화 결과물이 원본과 레이아웃이 달라질 수가 있다. 이러한 문제가 발생하지 않게 하기 위해, 본 명세서에서는 링크 정보를 무해화하는 방안으로 scheme 부터 슬래시(“/”)까지만 남기도록 할 수 있다. If all URIs are removed through the detoxification process, the link indicator may disappear from the office document, so the detoxification result may have a different layout from the original. To prevent this problem from occurring, in this specification, only the slash (“/”) from the scheme can be left as a way to make the link information harmless.

이를 통해 무해화 대상이 되는 문서는 레이아웃을 유지할 수 있고, 사용자는 기존 링크 정보가 어떤 형태(예: http, file, mailto 등)였는지를 직관적으로 인식할 수 있게 한다.Through this, documents subject to detoxification can maintain their layout, and users can intuitively recognize what type of existing link information was (e.g. http, file, mailto, etc.).

표 2는 본 명세서가 적용될 수 있는 무해화 결과의 예시이다.Table 2 is an example of detoxification results to which this specification can be applied.

원본original 무해화 결과Detoxification result foo://example.com:8042/over/there?name=ferret#nosefoo://example.com:8042/over/there?name=ferret#nose foo://foo:// urn:example:animal:ferret:noseurn:example:animal:ferret:nose urn:urn: https//seculetter.comhttps://seculetter.com https://https:// mailto:anesin@seculleter.commailto:anesin@seculleter.com mailto:mailto:

도 4는 본 명세서가 적용될 수 있는 무해화 방법을 예시한다.도 4를 참조하면, 서버는 비실행 파일의 문서 포맷을 판단할 수 있다(S4010). 예를 들어, 서버는 비실행 파일의 문서 포맷을 판단하기 위해, 비실행 파일을 열고 바이너리 코드 상의 식별(Signature) 타입을 확인하여, 문서의 포맷이 무엇인지 확인할 수 있다. Figure 4 illustrates a detoxification method to which the present disclosure can be applied. Referring to FIG. 4, the server can determine the document format of the non-executable file (S4010). 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.

서버는 비실행 파일의 포맷을 MS-DOC 파일로 판단한 경우, DOC 파일의 무해화를 수행하고(S4020), 비실행 파일의 포맷을 MS-XLS 파일로 판단한 경우, MS-XLS 파일의 무해화를 수행할 수 있다(S4030). If the server determines that the format of the non-executable file is an MS-DOC file, it performs detoxification of the DOC file (S4020), and if it determines that the format of the non-executable file is an MS-XLS file, it detoxifies the MS-XLS file. It can be performed (S4030).

도 5는 본 명세서가 적용될 수 있는 MS-DOC 파일의 무해화 방법을 예시한다. Figure 5 illustrates a method for detoxification of MS-DOC files to which this specification can be applied.

도 5를 참조하면, 서버가 비실행 파일의 포맷을 MS-DOC 파일로 판단한 경우, MS-DOC 파일의 무해화 방법을 예시한다.Referring to FIG. 5, when the server determines that the format of the non-executable file is an MS-DOC file, a method for detoxifying the MS-DOC file is illustrated.

MS-DOC 파일을 비롯한 CFB 계열의 파일에 대해 압축을 해제하면, 디렉토리와 파일 구조를 확인할 수 있다. 이 때 디렉토리 형태를 스토리지(storage), 파일 형태를 스트림(stream)이라고 한다. If you decompress CFB files, including MS-DOC 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.

MS-DOC는 필드 기능 중 HYPERLINK를 사용해 링크 정보를 삽입한다. 이 필드 기능은 MS-OOXML 기반인 WordprocessingML 에도 공통으로 해당될 수 있다.MS-DOC inserts link information using HYPERLINK among the field functions. This field function may also be common to WordprocessingML, which is based on MS-OOXML.

서버는 Data 스트림에 저장되는 개체(object)(예를 들어, 이미지, 도형 등)용 링크 정보를 무해화 할 수 있다.The server can detoxify link information for objects (e.g., images, shapes, etc.) stored in the data stream.

예를 들어, 서버는 MS-DOC 명세(Spec)에 근거하여, NilPICFAndBinData - HFD 항목을 찾고, MS-OSHARED 명세(Spec)에 근거하여, Hyperlink Object 내부의 URLMoniker에 있는 링크 정보를 무해화할 수 있다. For example, the server can find the NilPICFAndBinData - HFD item based on the MS-DOC specification (Spec) and detoxify the link information in URLMoniker inside the Hyperlink Object based on the MS-OSHARED specification (Spec).

본 명세서에 적용될 수 있는 명세(Spec)은 다음과 같다.Specifications that can be applied to this specification are as follows.

[MS-DOC]: Word (.doc) Binary File Format[MS-DOC]: Word (.doc) Binary File Format

(https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-doc/ccd7b486-7881-484c-a137-51170af7cc22)( https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-doc/ccd7b486-7881-484c-a137-51170af7cc22 )

1. IntroductionOne. Introduction

워드 이진 파일 포맷(Word Binary File Format)은 텍스트, 테이블, 필드, 그림, 내장된 XML 마크업 및 기타 문서 내용을 지정하는 레코드 및 구조 모음이다. 콘텐츠는 다양한 크기의 페이지에 인쇄되거나 다양한 장치에 표시될 수 있다.The Word Binary File Format is a collection of records and structures that specify text, tables, fields, pictures, embedded XML markup, and other document content. Content can be printed on pages of different sizes or displayed on a variety of devices.

워드 이진 파일 포맷은 파일 내의 다른 모든 데이터를 참조할 수 있는 파일 정보 블록(File Information Block)이라는 마스터 레코드로 시작할 수 있다. 파일 정보 블록의 링크를 통해, 응용 프로그램은 파일에서 모든 텍스트와 다른 개체를 찾고 해당 개체의 속성을 계산할 수 있다.The Word binary file format begins with a master record called the File Information Block, which can reference all other data within the file. Through links in file information blocks, an application can find all text and other objects in a file and calculate the properties of those objects.

2. Structures2. Structures

2.9 Basic Types2.9 Basic Types

2.9.115 HFD2.9.115 HFD

도 6은 본 명세서가 적용될 수 있는 HFD 구조를 예시한다.Figure 6 illustrates a HFD structure to which this specification can be applied.

도 6을 참조하면, HFD 구조는 하이퍼링크를 통과할 때 하이퍼링크를 처리하는 방법, 및 당해 문서 또는 외부 문서 또는 웹 페이지에서의 위치를 포함하는 하이퍼링크 필드 데이터를 지정할 수 있다.Referring to FIG. 6, the HFD structure can specify hyperlink field data, including how to handle a hyperlink when passing through it, and its location in the document or an external document or web page.

bits (1 byte): 하이퍼링크를 통과할 때 하이퍼링크를 처리하는 방법을 지정하는 HFDBit이다.bits (1 byte): HFDBit specifies how to handle hyperlinks when passing through them.

clsid (16 bytes): 하이퍼링크를 생성하는 데 사용되는 COM(Component Object Model) 구성 요소를 지정하는 CLSID(class identifier)이다.clsid (16 bytes): A CLSID (class identifier) that specifies the COM (Component Object Model) component used to create hyperlinks.

hyperlink (variable): [MS-OSHARED] 섹션 2.3.7.1에 명시된 하이퍼링크 개체이다. 이 개체는 이 문서 또는 외부 문서 또는 웹 페이지에서 위치를 지정한다.hyperlink (variable): [MS-OSHARED] A hyperlink object specified in section 2.3.7.1. This object specifies a location in this document or an external document or web page.

2.9.158 NilPICFAndBinData2.9.158 NilPICFAndBinData

NilPICFndBinData 구조는 헤더 정보 및 하이퍼링크, 양식 필드 또는 추가 필드에 대한 이진 데이터를 저장할 수 있다. NilPICFanndBinData 구조는 데이터 스트림에 저장되어야 한다.The NilPICFndBinData structure can store header information and binary data for hyperlinks, form fields, or additional fields. The NilPICFanndBinData structure must be stored in the data stream.

[MS-OSHARED]: Office Common Data Types and Objects Structures[MS-OSHARED]: Office Common Data Types and Objects Structures

(https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-oshared/d93502fa-5b8f-4f47-a3fe-5574046f4b8d)(https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-oshared/d93502fa-5b8f-4f47-a3fe-5574046f4b8d)

1. IntroductionOne. Introduction

Office 공통 데이터 유형(Common Data Types) 및 개체 구조(Objects Structures)는 다양한 Office 응용 프로그램 이진 파일 포멧에 사용되는 공통 데이터 유형, 개체 및 알고리즘들의 컬렉션을 제공할 수 있다.Office Common Data Types and Objects Structures can provide a collection of common data types, objects, and algorithms used in various Office application binary file formats.

2. Structures2.Structures

2.3 Common Objects2.3 Common Objects

2.3.7 Hyperlinks2.3.7 Hyperlinks

이하에서 하이퍼링크와 관련된 개체들을 예시한다.Below are examples of objects related to hyperlinks.

2.3.7.1 Hyperlink Object2.3.7.1 Hyperlink Object

도 7은 본 명세서가 적용될 수 있는 Hyperlink Object를 예시한다.Figure 7 illustrates a Hyperlink Object to which this specification can be applied.

도 7을 참조하면, Hyperlink Object의 구조는 하이퍼링크 및 하이퍼링크 관련 정보를 지정할 수 있다.Referring to FIG. 7, the structure of the Hyperlink Object can specify hyperlinks and hyperlink-related information.

moniker (variable): 하이퍼링크 모니커(hyperlink moniker)를 지정하기 위한 optional HyperlinkString이다. hlstmfHasMoniker가 1이고 hlstmfMonikerSavedAsStr이 1인 경우에만 존재한다.moniker (variable): Optional HyperlinkString to specify a hyperlink moniker. Exists only when hlstmfHasMoniker is 1 and hlstmfMonikerSavedAsStr is 1.

2.3.7.2 HyperlinkMoniker2.3.7.2 HyperlinkMoniker

*도 8은 본 명세서가 적용될 수 있는 HyperlinkMoniker의 예시이다. * Figure 8 is an example of HyperlinkMoniker to which this specification can be applied.

도 8을 참조하면, 하이퍼링크 모니커를 지정하기 위한 구조를 예시한다.Referring to Figure 8, a structure for specifying a hyperlink moniker is illustrated.

monikerClsid (16 bytes): COM(Component Object Model) 구성 요소를 지정하는 CLSID(class identifier)이다.monikerClsid (16 bytes): CLSID (class identifier) that specifies COM (Component Object Model) components.

표 3은 monikerClsid의 예시이다.Table 3 is an example of monikerClsid.

ValueValue MeaningMeaning {0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B}{0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B} Data field contains a  URLMoniker  (section 2.3.7.6). Data field contains a URLMoniker (section 2.3.7.6). {0x00000303, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}{0x00000303, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} Data field contains a  FileMoniker  (section 2.3.7.8). Data field contains a FileMoniker (section 2.3.7.8). {0x00000309, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}{0x00000309, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46} Data field contains a CompositeMoniker (section 2.3.7.3). Data field contains a CompositeMoniker (section 2.3.7.3). {0x00000305, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 }{0x00000305, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } Data field contains an  AntiMoniker  (section 2.3.7.4). Data field contains an AntiMoniker (section 2.3.7.4). {0x00000304, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 }{0x00000304, 0x0000, 0x0000, { 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 } Data field contains an  ItemMoniker  (section 2.3.7.5). Data field contains an ItemMoniker (section 2.3.7.5).

2.3.7.6 URLMoniker도 9는 본 명세서가 적용될 수 있는 URLMoniker의 예시이다. 2.3.7.6 URLMoniker Figure 9 is an example of URLMoniker to which this specification can be applied.

도 9를 참조하면, URLMoniker의 구조를 예시한다.Referring to Figure 9, the structure of URLMoniker is illustrated.

url (variable): 유니코드 문자열의 null 종료 배열은 URL을 지정한다. 배열의 문자 수는 종료되는 NULL 문자의 위치에 의해 결정될 수 있다.url (variable): A null-terminated array of Unicode strings that specifies a URL. The number of characters in an array can be determined by the position of the terminating NULL character.

전술한 명세 목록은 상위부터 하위까지 포함 관계를 갖을 수 있다. 예를 들어, NilPICFAndBinData가 HFD를 포함하고, 다시 HFD 가 Hyperlink Object를 포함할 수 있다. The above-mentioned specification list may have an inclusion relationship from top to bottom. For example, NilPICFAndBinData may contain HFD, and HFD may contain Hyperlink Object.

도 10은 본 명세서가 적용될 수 있는 Data Stream의 예시이다.Figure 10 is an example of a data stream to which this specification can be applied.

도 10을 참조하면, 오브젝트에 대한 링크 정보는 Data Stream에 저장될 수 있다. 이러한 링크 정보는 위 명세에 적힌 레코드를 순차적으로 검색하면 찾을 수 있다. Referring to FIG. 10, link information about an object may be stored in a data stream. This link information can be found by sequentially searching the records listed in the above specification.

만일, 일부 레코드에만 있는 CLSID를 사용한다면, 성능 및 간결성 측면에서 유리한 방식으로 접근할 수 있다. 즉, 레코드를 순차적으로 검색하는 방법은 레코드 헤더 구조를 통해 탐색을 해야 하는 반면, CLSID를 이용하면, Stream 자체를 놓고 바이너리 탐색을 진행하는 방식이라 성능과 간결성에 있어 이점이 있다.If you use a CLSID that exists only in some records, you can approach it in a way that is advantageous in terms of performance and simplicity. In other words, while searching for records sequentially requires searching through the record header structure, using CLSID involves performing a binary search on the stream itself, which has advantages in terms of performance and simplicity.

다시 도 5를 참조하면, 서버는 Data Stream에서 하이퍼링크와 관련된 제1 바이너리 값을 검색한다(S5010). 예를 들어, 서버는 Data Stream의 바이너리 값이 {79eac9d0-baf9-11ce-8c82-00aa004ba90b}인지 순차적으로 검색할 수 있다. 보다 자세하게, 제1 바이너리 값은 HFD 레코드의 clsid(1010)를 포함할 수 있다.Referring again to FIG. 5, the server searches the data stream for the first binary value related to the hyperlink (S5010). For example, the server can sequentially search whether the binary value of the data stream is {79eac9d0-baf9-11ce-8c82-00aa004ba90b}. More specifically, the first binary value may include clsid(1010) of the HFD record.

제1 바이너리 값이 검색된 것에 근거하여, 서버는 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색한다(S5020). 예를 들어, 서버는 HFD 레코드의 범위 안에서 HyperlinkMoniker의 값이 {79eac9e0-baf9-11ce-8c82-00aa004ba90b}인지 순차적으로 검색할 수 있다. 보다 자세하게, 제2 바이너리 값은 HyperlinkMoniker 레코드의 CLSID_StdHlink(1020)를 포함할 수 있다.Based on the search for the first binary value, the server searches for the second binary value related to the hyperlink in the record specifying the first binary value (S5020). For example, the server can sequentially search whether the value of HyperlinkMoniker is {79eac9e0-baf9-11ce-8c82-00aa004ba90b} within the range of the HFD record. More specifically, the second binary value may include CLSID_StdHlink (1020) of the HyperlinkMoniker record.

제2 바이너리 값이 검색된 것에 근거하여, 서버는 제2 바이너리 값을 지정한 레코드에서 링크정보가 있는지 검색한다(S5030). 예를 들어, 서버는 HyperlinkMoniker 레코드 내에 URLMoniker 레코드(1030)가 있는지 검색할 수 있다.Based on the search for the second binary value, the server searches for link information in the record specifying the second binary value (S5030). For example, the server can search for a URLMoniker record 1030 within a HyperlinkMoniker record.

링크정보가 검색된 것에 근거하여, 서버는 링크정보를 무해화한다(S5040). 예를 들어, 서버는 URLMoniker 레코드의 url 필드값을 무해할 수 있다. 보다 자세하게, 서버는 url 필드값에서 scheme만 남기거나, “/” 가 존재하는 경우, scheme과 “/” 만 남길 수 있다. Based on the link information being retrieved, the server renders the link information harmless (S5040). For example, a server may benign the value of the url field of a URLMoniker record. More specifically, the server can leave only the scheme in the url field value, or if “/” exists, only the scheme and “/”.

도 11은 본 명세서가 적용될 수 있는 링크정보 무해화의 예시이다.Figure 11 is an example of link information detoxification to which this specification can be applied.

도 11을 참조하면, 서버는 도 10 에서 널(null) 문자(\0)로 링크정보를 제거하지 않고 공백(0x20)으로 무해화를 수행할 수 있다. 널 문자를 사용하지 않는 이유는 일부 문자열에 대한 MS-CFB 명세가 null-terminated string으로 되어 있는 경우가 있기 때문이다.Referring to FIG. 11, the server may not remove link information using the null character (\0) in FIG. 10, but may perform detoxification using a space (0x20). The reason for not using the null character is that the MS-CFB specification for some strings may be null-terminated strings.

도 12는 본 명세서가 적용될 수 있는 MS-XLS 파일의 무해화 방법을 예시한다. Figure 12 illustrates a method for detoxification of MS-XLS files to which this specification can be applied.

도 12를 참조하면, 서버가 비실행 파일의 포맷을 MS-XLS 파일로 판단한 경우, MS-XLS 파일의 무해화 방법을 예시한다.Referring to FIG. 12, when the server determines that the format of the non-executable file is an MS-XLS file, a method for detoxifying the MS-XLS file is illustrated.

예를 들어, MS-XLS에서 링크정보는 셀, 개체, 수식에 포함될 수 있다.For example, in MS-XLS, link information can be included in cells, objects, and formulas.

관련된 명세(Spec)은 다음과 같다.The related specifications are as follows.

[MS-XLS]: Excel Binary File Format (.xls) Structure[MS-XLS]: Excel Binary File Format (.xls) Structure

(https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/cd03cb5f-ca02-4934-a391-bb674cb8aa06)( https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/cd03cb5f-ca02-4934-a391-bb674cb8aa06 )

1. IntroductionOne. Introduction

Excel 이진 파일 포맷(.xls) 구조는 Excel 이진 파일 포맷(.xls)을 지정할 수 있다. Excel 이진 파일 포맷(.xls)은 워크북(workbook) 콘텐츠을 지정하는 레코드 및 구조의 모음으로, 숫자, 텍스트 또는 숫자와 텍스트, 수식(formula), 외부 데이터 연결, 차트 및 이미지의 비정형 또는 반구조 테이블을 포함할 수 있다. 워크북 콘텐츠는 일반적으로 레이아웃 기반의 그리드(grid)로 구성될 수 있으며, 숫자 데이터, 구조화 데이터 및 수식이 포함되는 경우가 많다.The Excel Binary File Format (.xls) structure can specify the Excel Binary File Format (.xls). The Excel binary file format (.xls) is a collection of records and structures that specify the workbook content: unstructured or semi-structured tables of numbers, text, or numbers and text, formulas, external data connections, charts, and images. may include. Workbook content can generally be organized into a layout-based grid and often includes numeric data, structured data, and formulas.

2. Structures2. Structures

2.1 File Structure2.1 File Structure

2.1.7 Storage and Streams2.1.7 Storage and Streams

이하에서 Excel 이진 파일 포맷(.xls) 파일의 Storage, 스트림 및 하위 스트림(substream)을 지정할 수 있다.Below you can specify the storage, stream, and substream of the Excel binary file format (.xls) file.

2.1.7.20 Workbook Stream (Workbook)2.1.7.20 Workbook Stream (Workbook)

워크북 스트림은 워크북의 전역 속성 및 데이터, 워크북을 구성하는 sheet를 지정할 수 있다. The workbook stream can specify the global properties and data of the workbook, and the sheets that make up the workbook.

2.1.7.20.5 Workbook Substream2.1.7.20.5 Workbook Substream

워크북 하위 스트림은 worksheet를 지정한다.The workbook substream specifies a worksheet.

표 4는 Workbook Substream의 구조를 예시한다.Table 4 illustrates the structure of Workbook Substream.

WORKSHEETCONTENT = [Uncalced] Index GLOBALS PAGESETUP [HeaderFooter] [BACKGROUND] *BIGNAME [PROTECTION] COLUMNS [SCENARIOS] SORTANDFILTER Dimensions [CELLTABLE] OBJECTS *HFPicture *Note *PIVOTVIEW [DCON] 1*WINDOW *CUSTOMVIEW *2SORT [DxGCol] *MergeCells [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS *HLINK [DVAL] [CodeName] *WebPub *CellWatch [SheetExt] *FEAT *FEAT11 *RECORD12 EOF

WORKSHEET = BOF WORKSHEETCONTENT

SCENARIOS = ScenMan *(SCENARIO *Continue)

SORTANDFILTER = [Sort] [SORTDATA12] [FilterMode] [DropDownObjIds] [AUTOFILTER]

PIVOTVIEW = PIVOTCORE [PIVOTFRT]

PIVOTCORE = SxView *PIVOTVD *2PIVOTIVD [PIVOTPI] *SXDI *PIVOTLI PIVOTEX

PIVOTFRT = PIVOTFRT9 [PIVOTADDL]

PIVOTFRT9 = QsiSXTag [DBQUERYEXT] [PIVOTVIEWEX] SXViewEx9

PIVOTVD = Sxvd *SXVI SXVDEx

PIVOTIVD = SxIvd *Continue

PIVOTPI = SXPI *Continue

PIVOTLI = SXLI *Continue

PIVOTEX = SXEx *PIVOTSELECT *PIVOTFORMAT

PIVOTSELECT = SxSelect PIVOTRULE

PIVOTFORMAT = SxFormat PIVOTRULE [SxDXF]

PIVOTVIEWEX = SXViewEx *PIVOTTH *SXPIEx *PIVOTVDTEX

PIVOTTH = SXTH *ContinueFrt

PIVOTVDTEX = SXVDTEx *ContinueFrt

QUERYTABLE = Qsi DBQUERY QsiSXTag DBQUERYEXT [SXADDLQSI] [QSIR] [SORTDATA12]

SXADDLQSI = SXAddl_SXCQsi_SXDId SXADDLDBQUERY *UNKNOWNFRT SXAddl_SXCQsi_SXDEnd

QSIR = Qsir *Qsif

DBQUERY = DbOrParamQry [1*SXString [DbOrParamQry *(SXString DbOrParamQry)]] *SXString

DBQUERYEXT = DBQueryExt [ExtString] *4[OleDbConn *ExtString] [TxtQry *ExtString]

CONDFMTS = *(CONDFMT / CONDFMT12) *(CFEx [CF12])

CONDFMT = CondFmt 1*3CF

CONDFMT12 = CondFmt12 1*CF12

HLINK = HLink [HLinkTooltip]

DVAL = DVal *65534Dv

PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString [SXAddl_SXCView_SXDVer10Info] [SXAddl_SXCView_SXDVer12Info] *SXADDLCALCMEMBER *SXADDLHIERARCHY *SXADDLFIELD *UNKNOWNFRT [SXAddl_SXCView_SXDTableStyleClient] [SXAddl_SXCView_SXDCompactRwHdr *Continue_SxaddlSxString] [SXAddl_SXCView_SXDCompactColHdr *Continue_SxaddlSxString] [SXAddl_SXCView_SXDVerUpdInv] [SXADDLCONDFMTS] [SXADDLSXFILTERS12] *SXAddl_SXCView_SXDVerUpdInv *SXAddl_SXCView_SXDSXPIIvmb [SXAddl_SXCView_SXDVerUpdInv] SXAddl_SXCView_SXDEnd

SXADDLCALCMEMBER = (SXAddl_SXCView_SXDCalcMember [SXAddl_SXCView_SXDCalcMemString *Continue_SxaddlSxString])

SXADDLCONDFMTS = SXAddl_SXCSXCondFmts_SXDId *SXADDLCONDFMT SXAddl_SXCSXCondFmts_SXDEnd

SXADDLCONDFMT = SXAddl_SXCSXCondFmt_SXDSXCondFmt *SXADDLSXRULE SXAddl_SXCSXCondFmt_SXDEnd

SXADDLAUTOSORT = SXAddl_SXCAutoSort_SXDId SXADDLSXRULE SXAddl_SXCAutoSort_SXDEnd

SXADDLSXRULE = SXAddl_SXCSXrule_SXDId SXAddl_SXCSXrule_SXDSXrule *SXADDLSXFILT SXAddl_SXCSXrule_SXDEnd

SXADDLSXFILT = SXAddl_SXCSXfilt_SXDId SXAddl_SXCSXfilt_SXDSXfilt [SXAddl_SXCSXfilt_SXDSXItm] SXAddl_SXCSXfilt_SXDEnd

SXADDLSXFILTERS12 = SXAddl_SXCSXFilters12_SXDId *SXADDLSXFILTER12 SXAddl_SXCSXFilters12_SXDEnd

SXADDLSXFILTER12 = SXAddl_SXCSXFilter12_SXDId SXAddl_SXCSXFilter12_SXDSXFilter [SXAddl_SXCSXFilter12_SXDCaption *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDSXFilterDesc *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDSXFilterValue1 *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDSXFilterValue2 *Continue_SxaddlSxString] SXAddl_SXCSXFilter12_SXDXlsFilter [SXAddl_SXCSXFilter12_SXDXlsFilterValue1 *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDXlsFilterValue2 *Continue_SxaddlSxString] SXAddl_SXCSXFilter12_SXDEnd

SXADDLFIELD = [SXAddl_SXCField_SXDId *Continue_SxaddlSxString SXAddl_SXCField_SXDVer10Info SXAddl_SXCField_SXDEnd] [SXADDLFIELD12]

SXADDLFIELD12 = SXAddl_SXCField12_SXDId *Continue_SxaddlSxString SXAddl_SXCField12_SXDVer12Info SXAddl_SXCField12_SXDVerUpdInv [SXAddl_SXCField12_SXDMemberCaption *Continue_SxaddlSxString] [SXAddl_SXCField12_SXDAutoshow] [SXAddl_SXCField12_SXDISXTH] [SXADDLAUTOSORT] SXAddl_SXCField12_SXDVerUpdInv *UNKNOWNFRT SXAddl_SXCField12_SXDEnd

SXADDLHIERARCHY = SXAddl_SXCHierarchy_SXDId *Continue_SxaddlSxString *SXAddl_SXCHierarchy_SXDProperty *SXADDLGRPLEVEL [SXAddl_SXCHierarchy_SXDVerUpdInv] *SXAddl_SXCHierarchy_SXDFilterMember [SXAddl_SXCHierarchy_SXDVerUpdInv] [SXAddl_SXCHierarchy_SXDSXSetParentUnique *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDIconSet] [SXAddl_SXCHierarchy_SXDUserCaption *Continue_SxaddlSxString] *UNKNOWNFRT [SXAddl_SXCHierarchy_SXDVerUpdInv] *SXAddl_SXCHierarchy_SXDFilterMember12 [SXAddl_SXCHierarchy_SXDVerUpdInv] [SXAddl_SXCHierarchy_SXDInfo12] [SXAddl_SXCHierarchy_SXDDisplayFolder *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDMeasureGrp *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDParentKPI *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIValue *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIGoal *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIStatus *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPITrend *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIWeight *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPITime *Continue_SxaddlSxString] SXAddl_SXCHierarchy_SXDEnd

SXADDLGRPLEVEL = SXAddl_SXCGrpLevel_SXDId *Continue_SxaddlSxString SXAddl_SXCGrpLevel_SXDGrpLevelInfo *SXADDLGROUP *UNKNOWNFRT SXAddl_SXCGrpLevel_SXDEnd

SXADDLGROUP = SXAddl_SXCGroup_SXDId *Continue_SxaddlSxString SXAddl_SXCGroup_SXDGrpInfo *SXAddl_SXCGroup_SXDMember *UNKNOWNFRT SXAddl_SXCGroup_SXDEnd
WORKSHEETCONTENT = [Uncalced] Index GLOBALS PAGESETUP [HeaderFooter] [BACKGROUND] *BIGNAME [PROTECTION] COLUMNS [SCENARIOS] SORTANDFILTER Dimensions [CELLTABLE] OBJECTS *HFPicture *Note *PIVOTVIEW [DCON] 1*WINDOW *CUSTOMVIEW *2SORT [DxGCol] *MergeCells [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS *HLINK [DVAL] [CodeName] *WebPub *CellWatch [SheetExt] *FEAT *FEAT11 *RECORD12 EOF

WORKSHEET = BOF WORKSHEETCONTENT

SCENARIOS = ScenMan *(SCENARIO *Continue)

SORTANDFILTER = [Sort] [SORTDATA12] [FilterMode] [DropDownObjIds] [AUTOFILTER]

PIVOTVIEW = PIVOTCORE [PIVOTFRT]

PIVOTCORE = SxView *PIVOTVD *2PIVOTIVD [PIVOTPI] *SXDI *PIVOTLI PIVOTEX

PIVOTFRT = PIVOTFRT9 [PIVOTADDL]

PIVOTFRT9 = QsiSXTag [DBQUERYEXT] [PIVOTVIEWEX] SXViewEx9

PIVOTVD = Sxvd *SXVI SXVDEx

PIVOTIVD = SxIvd *Continue

PIVOTPI = SXPI *Continue

PIVOTLI = SXLI *Continue

PIVOTEX = SXEx *PIVOTSELECT *PIVOTFORMAT

PIVOTSELECT = SxSelect PIVOTRULE

PIVOTFORMAT = SxFormat PIVOTRULE [SxDXF]

PIVOTVIEWEX = SXViewEx *PIVOTTH *SXPIEx *PIVOTVDTEX

PIVOTTH = SXTH *ContinueFrt

PIVOTVDTEX = SXVDTEx *ContinueFrt

QUERYTABLE = Qsi DBQUERY QsiSXTag DBQUERYEXT [SXADDLQSI] [QSIR] [SORTDATA12]

SXADDLQSI = SXAddl_SXCQsi_SXDId SXADDLDBQUERY *UNKNOWNFRT SXAddl_SXCQsi_SXDEnd

QSIR = Qsir *Qsif

DBQUERY = DbOrParamQry [1*SXString [DbOrParamQry *(SXString DbOrParamQry)]] *SXString

DBQUERYEXT = DBQueryExt [ExtString] *4[OleDbConn *ExtString] [TxtQry *ExtString]

CONDFMTS = *(CONDFMT / CONDFMT12) *(CFEx [CF12])

CONDFMT = CondFmt 1*3CF

CONDFMT12 = CondFmt12 1*CF12

HLINK = HLink [HLinkTooltip]

DVAL = DVal *65534Dv

PIVOTADDL = SXAddl_SXCView_SXDId *Continue_SxaddlSxString [SXAddl_SXCView_SXDVer10Info] [SXAddl_SXCView_SXDVer12Info] *SXADDLCALCMEMBER *SXADDLHIERARCHY *SXADDLFIELD *UNKNOWNFRT [SXAddl_SXCView_ SXDTableStyleClient] [SXAddl_SXCView_SXDCompactRwHdr *Continue_SxaddlSxString] [SXAddl_SXCView_SXDCompactColHdr *Continue_SxaddlSxString] [SXAddl_SXCView_SXDVerUpdInv] [SXADDLCONDFMTS] [SXADDLSXFILTERS12] *S S

SXADDLCALCMEMBER = (SXAddl_SXCView_SXDCalcMember [SXAddl_SXCView_SXDCalcMemString *Continue_SxaddlSxString])

SXADDLCONDFMTS = SXAddl_SXCSXCondFmts_SXDId *SXADDLCONDFMT SXAddl_SXCSXCondFmts_SXDEnd

SXADDLCONDFMT = SXAddl_SXCSXCondFmt_SXDSXCondFmt *SXADDLSXRULE SXAddl_SXCSXCondFmt_SXDEnd

SXADDLAUTOSORT = SXAddl_SXCAutoSort_SXDId SXADDLSXRULE SXAddl_SXCAutoSort_SXDEnd

SXADDLSXRULE = SXAddl_SXCSXrule_SXDId SXAddl_SXCSXrule_SXDSXrule *SXADDLSXFILT SXAddl_SXCSXrule_SXDEnd

SXADDLSXFILT = SXAddl_SXCSXfilt_SXDId SXAddl_SXCSXfilt_SXDSXfilt [SXAddl_SXCSXfilt_SXDSXItm] SXAddl_SXCSXfilt_SXDEnd

SXADDLSXFILTERS12 = SXAddl_SXCSXFilters12_SXDId *SXADDLSXFILTER12 SXAddl_SXCSXFilters12_SXDEnd

SXADDLSXFILTER12 = SXAddl_SXCSXFilter12_SXDId SXAddl_SXCSXFilter12_SXDSXFilter [SXAddl_SXCSXFilter12_SXDCaption *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDSXFilterDesc *Continue_SxaddlSxStr ing] [SXAddl_SXCSXFilter12_SXDSXFilterValue1 *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDSXFilterValue2 *Continue_SxaddlSxString] SXAddl_SXCSXFilter12_SXDXlsFilter [SXAddl_SXCSXFilter12_SXDX lsFilterValue1 *Continue_SxaddlSxString] [SXAddl_SXCSXFilter12_SXDXlsFilterValue2 *Continue_SxaddlSxString] SXAddl_SXCSXFilter12_SXDEnd

SXADDLFIELD = [SXAddl_SXCField_SXDId *Continue_SxaddlSxString SXAddl_SXCField_SXDVer10Info SXAddl_SXCField_SXDEnd] [SXADDLFIELD12]

Sxaddlfield12 = sxaddl_sxcfield12_sxdid FIELD2_SXDMEMBERCAPTION *Continue_sxadlsxString] [sxaddl_sxcfield12_sxdautoshow] [sxaddl_sxcfield12_sxdisxth] Sxcfield12_sxdverupdinv *unknownfrt sxaddl_sxcfield12_sxdend

SXADDLHIERARCHY = SXAddl_SXCHierarchy_SXDId *Continue_SxaddlSxString *SXAddl_SXCHierarchy_SXDProperty *SXADDLGRPLEVEL [SXAddl_SXCHierarchy_SXDVerUpdInv] *SXAddl_SXCHierarchy_SXDFilterMember [SXAddl_SXCH ierarchy_SXDVerUpdInv] [SXAddl_SXCHierarchy_SXDSXSetParentUnique *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDIconSet] [SXAddl_SXCHierarchy_SXDUserCaption *Continue_SxaddlSxString] *UNKNOWNFRT [SXAddl_SXCHier archy_SXDVerUpdInv] *SXAddl_SXCHierarchy_SXDFilterMember12 [SXAddl_SXCHierarchy_SXDVerUpdInv] [SXAddl_SXCHierarchy_SXDInfo12] [SXAddl_SXCHierarchy_SXDDisplayFolder *Continue_SxaddlSxString] [SXAddl_S XCHierarchy_SXDMeasureGrp *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDParentKPI *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIValue *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIGoal *Continue_SxaddlSxString] [SX Addl_SXCHierarchy_SXDKPIStatus *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPITrend *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPIWeight *Continue_SxaddlSxString] [SXAddl_SXCHierarchy_SXDKPITime *Continue_SxaddlSxString] SXAddl_SXCHierarchy_SXDEnd

SXADDLGRPLEVEL = SXAddl_SXCGrpLevel_SXDId *Continue_SxaddlSxString SXAddl_SXCGrpLevel_SXDGrpLevelInfo *SXADDLGROUP *UNKNOWNFRT SXAddl_SXCGrpLevel_SXDEnd

SXADDLGROUP = SXAddl_SXCGroup_SXDId *Continue_SxaddlSxString SXAddl_SXCGroup_SXDGrpInfo *SXAddl_SXCGroup_SXDMember *UNKNOWNFRT SXAddl_SXCGroup_SXDEnd

표 4를 참조하면, 워크북 하위 스트림의 각 레코드는 다시 하위 레코드를 가질 수 있다. 이러한 sequence 중 하이퍼링크(hyperlink)에 대한 레코드는 HLink이다.2.1.7.20.6 Common Productions복수개의 하위 스트림들에 공통될 수 있는 레코드 시퀀스 조각들(Record sequence fragments)이 지정될 수 있다.Referring to Table 4, each record in the workbook sub-stream may have sub-records. Among these sequences, the record for the hyperlink is HLink. 2.1.7.20.6 Common Productions Record sequence fragments that can be common to multiple sub-streams can be specified.

표 5는 Common Productions의 구조를 예시한다.Table 5 illustrates the structure of Common Productions.

GLOBALS = CalcMode CalcCount CalcRefMode CalcIter CalcDelta CalcSaveRecalc PrintRowCol PrintGrid GridSet Guts DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks]

PAGESETUP = Header Footer HCenter VCenter [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls *Continue] Setup

BACKGROUND = BkHim *Continue

BIGNAME = BigName *ContinueBigName

PROTECTION = [Protect] [ScenarioProtect] [ObjProtect] [Password]

COLUMNS = DefColWidth *255ColInfo

AUTOFILTER = AutoFilterInfo *(AutoFilter / (AutoFilter12 *ContinueFrt12)) *SORTDATA12

CELLTABLE = 1*(1*Row *CELL 1*DBCell) *EntExU2

CELL = FORMULA / Blank / MulBlank / RK / MulRk / BoolErr / Number / LabelSst

FORMULA = [Uncalced] Formula [Array / Table / ShrFmla / SUB] [String *Continue]

PHONETICINFO = PhoneticInfo *Continue

OBJECTS = *(MSODRAWING *(TEXTOBJECT / OBJ)) [MsoDrawingSelection]

MSODRAWING = MsoDrawing *Continue

OBJ = Obj *Continue *CHART

CHART = CHARTSHEET *Continue

TEXTOBJECT = TxO *Continue

DCON = DCon *(DConName / DConBin / DConRef)

WINDOW = Window2 [PLV] [Scl] [Pane] *Selection

CUSTOMVIEW = UserSViewBegin *Selection [HorizontalPageBreaks] [VerticalPageBreaks] [Header] [Footer] [HCenter] [VCenter] [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls] [Setup] [PrintSize] [HeaderFooter] [AUTOFILTER] UserSViewEnd

SORT = RRSort *Continue

SORTDATA12 = SortData *ContinueFrt12

PIVOTRULE = SxRule *PRFILTER

PRFILTER = SxFilt [SxItm *Continue]

FEAT = FeatHdr *(Feat *ContinueFrt)

FEAT11 = FeatHdr11 *((Feature11 / Feature12) *ContinueFrt11 *List12 [AutoFilter12 *ContinueFrt12] *List12 [SORTDATA12])

RECORD12 = HeaderFooter

SXADDLDBQUERY = [SXAddl_SXCQuery_SXDXMLSource *Continue_SxaddlSxString] [SXAddl_SXCQuery_SXDSrcDataFile *Continue_SxaddlSxString] [SXAddl_SXCQuery_SXDSrcConnFile *Continue_SxaddlSxString] [SXAddl_SXCQuery_SXDReconnCond] SXAddl_SXCQuery_SXDEnd

UNKNOWNFRT = SXAddl
GLOBALS = CalcMode CalcCount CalcRefMode CalcIter CalcDelta CalcSaveRecalc PrintRowCol PrintGrid GridSet Guts DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks]

PAGESETUP = Header Footer HCenter VCenter [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls *Continue] Setup

BACKGROUND = BkHim *Continue

BIGNAME = BigName *ContinueBigName

PROTECTION = [Protect] [ScenarioProtect] [ObjProtect] [Password]

COLUMNS = DefColWidth *255ColInfo

AUTOFILTER = AutoFilterInfo *(AutoFilter / (AutoFilter12 *ContinueFrt12)) *SORTDATA12

CELLTABLE = 1*(1*Row *CELL 1*DBCell) *EntExU2

CELL = FORMULA / Blank / MulBlank / RK / MulRk / BoolErr / Number / LabelSst

FORMULA = [Uncalced] Formula [Array / Table / ShrFmla / SUB] [String *Continue]

PHONETICINFO = PhoneticInfo *Continue

OBJECTS = *(MSODRAWING *(TEXTOBJECT / OBJ)) [MsoDrawingSelection]

MSODRAWING = MsoDrawing *Continue

OBJ = Obj *Continue *CHART

CHART = CHARTSHEET *Continue

TEXTOBJECT = TxO *Continue

DCON = DCon *(DConName / DConBin / DConRef)

WINDOW = Window2 [PLV] [Scl] [Pane] *Selection

CUSTOMVIEW = UserSViewBegin *Selection [HorizontalPageBreaks] [VerticalPageBreaks] [Header] [Footer] [HCenter] [VCenter] [LeftMargin] [RightMargin] [TopMargin] [BottomMargin] [Pls] [Setup] [PrintSize] [HeaderFooter] [AUTOFILTER] UserSViewEnd

SORT = RRSort *Continue

SORTDATA12 = SortData *ContinueFrt12

PIVOTRULE = SxRule *PRFILTER

PRFILTER = SxFilt [SxItm *Continue]

FEAT = FeatHdr *(Feat *ContinueFrt)

FEAT11 = FeatHdr11 *((Feature11 / Feature12) *ContinueFrt11 *List12 [AutoFilter12 *ContinueFrt12] *List12 [SORTDATA12])

RECORD12 = HeaderFooter

SXADDLDBQUERY = [SXAddl_SXCQuery_SXDXMLSource *Continue_SxaddlSxString] [SXAddl_SXCQuery_SXDSrcDataFile *Continue_SxaddlSxString] [SXAddl_SXCQuery_SXDSrcConnFile *Continue_SxaddlSxString] [SXAddl_SXCQuery_ SXDReconnCond] SXAddl_SXCQuery_SXDEnd

UNKNOWNFRT = SXAddl

표 5를 참조하면, 이미지 하이퍼링크와 연관된 레코드는 MsoDrawing이다.2.4 Records2.4.140 HLinkReferring to Table 5, the record associated with the image hyperlink is MsoDrawing.2.4 Records2.4.140 HLink

도 13은 본 명세서가 적용될 수 있는 HLink 레코드를 예시한다.Figure 13 illustrates an HLink record to which this specification can be applied.

도 13을 참조하면, HLink 레코드는 셀 범위와 연관된 하이퍼링크를 지정할 수 있다.Referring to Figure 13, an HLink record can specify a hyperlink associated with a cell range.

ref8 (8 bytes): 하이퍼링크가 포함된 셀의 범위를 지정하는 Ref8U 구조이다.ref8 (8 bytes): Ref8U structure that specifies the range of cells containing hyperlinks.

hlinkClsid (16 bytes): 하이퍼링크의 하이퍼링크 개체([MS-OSHARED] 섹션 2.3.7.1에서 정의된 대로)를 저장한 COM 구성 요소를 지정하는 클래스 식별자(CLSID)이다.hlinkClsid (16 bytes): A class identifier (CLSID) that specifies the COM component that stores the hyperlink's hyperlink object (as defined in [MS-OSHARED] section 2.3.7.1).

hyperlink (variable): 하이퍼링크 및 하이퍼링크 관련 정보를 지정하는 하이퍼링크 개체([MS-OSHARED] 섹션 2.3.7.1에서 정의한 바와 같이)이다.hyperlink (variable): A hyperlink object (as defined in [MS-OSHARED] section 2.3.7.1) that specifies a hyperlink and hyperlink-related information.

여기서, hlinkClsid는 UUID(universally unique identifier) 형식으로 바이너리 값 {79eac9d0-baf9-11ce-8c82-00aa004ba90b}을 갖을 수 있다. hyperlink 레코드는 Hyperlink Object를 포함할 수 있으며, 다시 하위 레코드로 HyperlinkMoniker, URLMoniker가 포함될 수 있다.Here, hlinkClsid may have a binary value {79eac9d0-baf9-11ce-8c82-00aa004ba90b} in UUID (universally unique identifier) format. A hyperlink record can include a Hyperlink Object, and HyperlinkMoniker and URLMoniker can be included as child records.

2.4.170 MsoDrawing2.4.170 MsoDrawing

도 14는 본 명세서가 적용될 수 있는 MsoDrawing 레코드를 예시한다.Figure 14 illustrates an MsoDrawing record to which this specification can be applied.

도 14를 참조하면, MsoDrawing 레코드는 그림(drawing)을 지정할 수 있다.Referring to FIG. 14, the MsoDrawing record can specify a drawing.

rgChildRec (variable): 그림을 지정하는 [MS-ODRAW]에서 설명된 OfficeArtDgContainer 구조이다.rgChildRec (variable): OfficeArtDgContainer structure described in [MS-ODRAW] that specifies a picture.

2.2.13 OfficeArtDgContainer2.2.13 OfficeArtDgContainer

도 15는 본 명세서가 적용될 수 있는 OfficeArtDgContainer 레코드를 예시한다.Figure 15 illustrates an OfficeArtDgContainer record to which this specification can be applied.

도 15를 참조하면, OfficeArtDgContainer 레코드는 그림 개체에 대한 모든 파일 레코드의 컨테이너를 지정할 수 있다.Referring to Figure 15, the OfficeArtDgContainer record can specify the container of all file records for a picture object.

shape (variable): OfficeArtSpContainer 레코드이다. 그룹에 포함되지 않는 형태(shape)에 대한 컨테이너(container)를 지정할 수 있다.shape (variable): OfficeArtSpContainer record. You can specify a container for shapes that are not included in the group.

OfficeArtSpContainer 레코드는 이미지와 관련된 링크정보를 포함한다. OfficeArtSpContainer 레코드에는 pihlShape 과 pihlShape_complex가 동등 관계로 나열될 수 있다. 보다 자세하게, 후자(pihlShape_complex) 여부에 대한 정보가 전자(pihlShape) 필드에 담겨 있을 수 있다.OfficeArtSpContainer records contain link information related to images. In the OfficeArtSpContainer record, pihlShape and pihlShape_complex can be listed as equal. More specifically, information about whether the latter (pihlShape_complex) exists may be contained in the former (pihlShape) field.

pihlShape_complex는 하위 IHlink 레코드를 포함할 수 있다.pihlShape_complex can contain child IHlink records.

2.2.60 IHlink2.2.60 IHlink

도 16은 본 명세서가 적용될 수 있는 IHlink 레코드를 예시한다.Figure 16 illustrates an IHlink record to which this specification can be applied.

도 16을 참조하면, IHlink 레코드는 하이퍼링크를 지정할 수 있다.Referring to Figure 16, an IHlink record can specify a hyperlink.

CLSID_StdHlink (16 bytes): GUID는 {79eac9d0-baf9-11ce-8c82-00aa004ba90b} 이어야 한다.CLSID_StdHlink (16 bytes): GUID must be {79eac9d0-baf9-11ce-8c82-00aa004ba90b}.

hyperlink (variable): [MS-OSHARED] 섹션 2.3.7.1에서 설명된 바와 같이 직렬화된 하이퍼링크 개체를 지정하는 가변 길이 필드이다.hyperlink (variable): [MS-OSHARED] A variable-length field that specifies a serialized hyperlink object, as described in section 2.3.7.1.

CLSID_StdHlink는 {79eac9d0-baf9-11ce-8c82-00aa004ba90b}로 고정되어 있다. 즉, HLink 항목 내 hlinkClsid 필드와 동일한 값을 갖을 수 있다. IHlink의 hyperlink 는 HLink 항목 내 hyperlink 필드와 동일한 값을 갖을 수 있다. CLSID_StdHlink is fixed to {79eac9d0-baf9-11ce-8c82-00aa004ba90b}. In other words, it can have the same value as the hlinkClsid field in the HLink item. The hyperlink in IHlink can have the same value as the hyperlink field in the HLink item.

따라서, MS-DOC에서의 무해화 방법이 유사하게 적용될 수 있다. Therefore, the detoxification method in MS-DOC can be similarly applied.

즉, HyperlinkMoniker 과 URLMoniker 모두 같은 구조가 되고, 여기서 주요한 값인 HyperlinkMoniker 레코드 내 monikerClsid 필드가 {0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B} 이 될 수 있다.In other words, both HyperlinkMoniker and URLMoniker have the same structure, and the monikerClsid field in the HyperlinkMoniker record, which is the main value, can be {0x79EAC9E0, 0xBAF9, 0x11CE, 0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B}.

다시 도 12를 참조하면, 서버는 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색한다(S1210). 예를 들어, 제1 레코드는 HLink를 포함하고, 제2 레코드는 MsoDrawing 레코드를 포함할 수 있다. 각 레코드들은 Work Stream에서 중첩형태가 아닌 나열된(sequence) 형태이므로, 서버는 이러한 레코드들을 바로 검색할 수 있다.Referring again to FIG. 12, the server searches the work stream for a first record related to a cell hyperlink or a second record related to an image hyperlink (S1210). For example, the first record may include an HLink and the second record may include an MsoDrawing record. Since each record is in the form of a sequence rather than a nested form in the Work Stream, the server can immediately search for these records.

서버는 제1 레코드 또는 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색한다(S1220). 예를 들어, 서버는 검색된 제1 레코드 또는 제2 레코드 내에서 바이너리 값이 {79eac9d0-baf9-11ce-8c82-00aa004ba90b}인지 순차적으로 검색할 수 있다. 보다 자세하게, 제1 바이너리 값은 HFD 레코드의 clsid를 포함할 수 있다.The server searches for the first binary value related to the hyperlink based on whether the first record or the second record was searched (S1220). For example, the server may sequentially search for the binary value {79eac9d0-baf9-11ce-8c82-00aa004ba90b} within the searched first record or second record. More specifically, the first binary value may include the clsid of the HFD record.

제1 바이너리 값이 검색된 것에 근거하여, 서버는 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색한다(S1230). 예를 들어, 서버는 HFD 레코드의 범위 안에서 HyperlinkMoniker의 값이 {79eac9e0-baf9-11ce-8c82-00aa004ba90b}인지 순차적으로 검색할 수 있다. 보다 자세하게, 제2 바이너리 값은 HyperlinkMoniker 레코드의 CLSID_StdHlink를 포함할 수 있다.Based on the search for the first binary value, the server searches for a second binary value related to the hyperlink in the record specifying the first binary value (S1230). For example, the server can sequentially search whether the value of HyperlinkMoniker is {79eac9e0-baf9-11ce-8c82-00aa004ba90b} within the range of the HFD record. More specifically, the second binary value may include the CLSID_StdHlink of the HyperlinkMoniker record.

서버는 제2 바이너리 값이 검색된 것에 근거하여, 제2 바이너리 값을 지정한 레코드에서 링크정보가 있는지 검색한다(S1240). 예를 들어, 서버는 HyperlinkMoniker 레코드 내에 URLMoniker 레코드가 있는지 검색할 수 있다.Based on the search for the second binary value, the server searches for link information in the record specifying the second binary value (S1240). For example, a server can search for a URLMoniker record within a HyperlinkMoniker record.

서버는 링크정보가 검색된 것에 근거하여, 링크정보를 무해화한다(S1250).The server renders the link information harmless based on the link information being searched (S1250).

예를 들어, 서버는 URLMoniker 레코드의 url 필드값을 무해할 수 있다. 보다 자세하게, 서버는 url 필드값에서 scheme만 남기거나, “/” 가 존재하는 경우, scheme과 “/” 만 남길 수 있다.For example, a server may benign the value of the url field of a URLMoniker record. More specifically, the server can leave only the scheme in the url field value, or if “/” exists, only the scheme and “/”.

전술한 본 명세서는, 프로그램이 기록된 매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 매체는, 컴퓨터 시스템에 의하여 읽혀 질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 매체의 예로는, HDD(Hard Disk Drive), SSD(Solid State Disk), SDD(Silicon Disk Drive), ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장 장치 등이 있으며, 또한 캐리어 웨이브(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 따라서, 상기의 상세한 설명은 모든 면에서 제한적으로 해석되어서는 아니되고 예시적인 것으로 고려되어야 한다. 본 명세서의 범위는 첨부된 청구항의 합리적 해석에 의해 결정되어야 하고, 본 명세서의 등가적 범위 내에서의 모든 변경은 본 명세서의 범위에 포함된다.The above-described 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. This 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 above description focuses on the services and embodiments, this is only an example and does not limit the present specification, and those of ordinary skill in the field to which this specification pertains 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 (7)

서버가 비실행 파일의 링크정보를 무해화(Disarming) 시키는 방법에 있어서,
상기 비실행 파일의 포맷이 MS-XLS 파일인 것에 근거하여, 상기 MS-XLS 파일의 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색하는 단계;
상기 제1 레코드 또는 상기 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색하는 단계;
상기 제1 바이너리 값이 검색된 것에 근거하여, 상기 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색하는 단계;
상기 제2 바이너리 값이 검색된 것에 근거하여, 상기 제2 바이너리 값을 지정한 레코드에서 링크정보를 검색하는 단계; 및
상기 링크정보가 검색된 것에 근거하여, 상기 링크정보를 무해화하는 단계;
를 포함하며,
상기 제1 레코드는 HLink를 포함하고,
상기 제2 레코드는 MsoDrawing 레코드를 포함하는, 무해화 방법.
In a method for a server to disarm the link information of a non-executable file,
Based on the format of the non-executable file being an MS-XLS file, searching for a first record related to a cell hyperlink or a second record related to an image hyperlink in the Work Stream of the MS-XLS file;
retrieving a first binary value associated with a hyperlink based on whether the first record or the second record is retrieved;
Based on the search for the first binary value, searching for a second binary value related to a hyperlink in the record specifying the first binary value;
Based on the second binary value being searched, searching for link information in a record specifying the second binary value; and
Based on the link information being searched, detoxifying the link information;
Includes,
The first record includes HLink,
The method of claim 1, wherein the second record includes a MsoDrawing record.
제1항에 있어서,
상기 제1 바이너리 값은
HFD 레코드의 clsid 값을 포함하는, 무해화 방법.
According to paragraph 1,
The first binary value is
Decomposition method, including the clsid value of the HFD record.
제2항에 있어서,
상기 제2 바이너리 값은
HyperlinkMoniker 레코드의 CLSID_StdHl 값을 포함하는, 무해화 방법.
According to paragraph 2,
The second binary value is
A decomposition method, including the CLSID_StdHl value of the HyperlinkMoniker record.
제3항에 있어서,
상기 링크정보를 검색하는 단계는
상기 HyperlinkMoniker 레코드 내에 URLMoniker 레코드를 검색하는 단계;
를 포함하는, 무해화 방법.
According to paragraph 3,
The step of retrieving the link information is
searching for a URLMoniker record within the HyperlinkMoniker record;
Detoxification method, including.
제4항에 있어서,
상기 링크정보를 무해화하는 단계는
상기 URLMoniker 레코드의 url 필드값을 무해화하는 단계;
를 포함하는, 무해화 방법.
According to paragraph 4,
The step of detoxifying the link information is
Detoxifying the url field value of the URLMoniker record;
Detoxification method, including.
제5항에 있어서,
상기 url 필드값을 무해화하는 단계는
상기 url 필드값에서 scheme 만 남기는 단계;
를 포함하는, 무해화 방법.
According to clause 5,
The step of detoxifying the url field value is
Leaving only scheme in the url field value;
Detoxification method, including.
비실행 파일의 링크정보를 무해화(Disarming) 시키는 서버에 있어서,
통신부;
메모리; 및
상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서;를 포함하고,
상기 프로세서는
상기 비실행 파일의 포맷이 MS-XLS 파일인 것에 근거하여, 상기 MS-XLS 파일의 Work Stream에서 셀(cell) 하이퍼링크와 관련된 제1 레코드 또는 이미지 하이퍼링크와 관련된 제2 레코드를 검색하고, 상기 제1 레코드 또는 상기 제2 레코드가 검색된 것에 근거하여, 하이퍼링크와 관련된 제1 바이너리 값을 검색하며, 상기 제1 바이너리 값이 검색된 것에 근거하여, 상기 제1 바이너리 값을 지정한 레코드에서 하이퍼링크와 관련된 제2 바이너리 값을 검색하고, 상기 제2 바이너리 값이 검색된 것에 근거하여, 상기 제2 바이너리 값을 지정한 레코드에서 링크정보를 검색하며, 상기 링크정보가 검색된 것에 근거하여, 상기 링크정보를 무해화하고, 상기 제1 레코드는 HLink를 포함하며, 상기 제2 레코드는 MsoDrawing 레코드를 포함하는, 서버.

In a server that disarms link information of non-executable files,
Ministry of Communications;
Memory; and
It includes a processor that functionally controls the communication unit and the memory,
The processor is
Based on the format of the non-executable file being an MS-XLS file, a first record related to a cell hyperlink or a second record related to an image hyperlink is searched in the Work Stream of the MS-XLS file, Based on whether the first record or the second record was retrieved, a first binary value associated with the hyperlink is retrieved, and based on the first binary value being retrieved, a first binary value associated with the hyperlink is retrieved from the record specifying the first binary value. Retrieving a second binary value, searching for link information in a record specifying the second binary value based on the second binary value being retrieved, and detoxifying the link information based on the link information being retrieved; , wherein the first record includes an HLink and the second record includes an MsoDrawing record.

KR1020230007571A 2023-01-18 Methods and apparatus for disarming a link in ms-xls KR20240050230A (en)

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020220129560A Division KR102494836B1 (en) 2022-10-11 2022-10-11 Methods and apparatus for disarming a link in ms-doc

Publications (1)

Publication Number Publication Date
KR20240050230A true KR20240050230A (en) 2024-04-18

Family

ID=

Similar Documents

Publication Publication Date Title
US10902111B2 (en) Methods, media, and systems for detecting attack on a digital processing device
Halfond et al. Preventing SQL injection attacks using AMNESIA
Gupta et al. XSS-SAFE: a server-side approach to detect and mitigate cross-site scripting (XSS) attacks in JavaScript code
Halfond et al. WASP: Protecting web applications using positive tainting and syntax-aware evaluation
Carmony et al. Extract Me If You Can: Abusing PDF Parsers in Malware Detectors.
Halfond et al. Using positive tainting and syntax-aware evaluation to counter SQL injection attacks
Saxena et al. SCRIPTGARD: automatic context-sensitive sanitization for large-scale legacy web applications
Mohammadi et al. Detecting cross-site scripting vulnerabilities through automated unit testing
Endignoux et al. Caradoc: A pragmatic approach to pdf parsing and validation
Møller et al. Automated detection of client-state manipulation vulnerabilities
Medeiros et al. SEPTIC: detecting injection attacks and vulnerabilities inside the DBMS
Leithner et al. Hydra: Feedback-driven black-box exploitation of injection vulnerabilities
KR102583399B1 (en) Methods and apparatus for disarming a link in pdf
US20070130620A1 (en) Method, computer arrangement, computer program and computer program product for checking for the presence of control statements in a data value
Ming et al. MalwareHunt: semantics-based malware diffing speedup by normalized basic block memoization
Chai et al. Invoke-deobfuscation: AST-based and semantics-preserving deobfuscation for PowerShell scripts
KR102468431B1 (en) Method and apparatus for disarming ole object in ms-ooxml
Jordan et al. Safe-pdf: Robust detection of javascript pdf malware using abstract interpretation
KR102494836B1 (en) Methods and apparatus for disarming a link in ms-doc
Ulucenk et al. Techniques for analysing pdf malware
KR20240050230A (en) Methods and apparatus for disarming a link in ms-xls
Perkins et al. AutoRand: Automatic keyword randomization to prevent injection attacks
KR102494838B1 (en) Methods and apparatus for disarming a link on documentsummaryinformation stream in ms-cfb
KR102538664B1 (en) Methods and apparatus for the disarming of link in the formula function in excel document
KR102468428B1 (en) Method and device for disarming of JavaScript in PDF or HWP