KR102538664B1 - Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치 - Google Patents

Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치 Download PDF

Info

Publication number
KR102538664B1
KR102538664B1 KR1020220151154A KR20220151154A KR102538664B1 KR 102538664 B1 KR102538664 B1 KR 102538664B1 KR 1020220151154 A KR1020220151154 A KR 1020220151154A KR 20220151154 A KR20220151154 A KR 20220151154A KR 102538664 B1 KR102538664 B1 KR 102538664B1
Authority
KR
South Korea
Prior art keywords
ptg
array
link
executable file
link information
Prior art date
Application number
KR1020220151154A
Other languages
English (en)
Inventor
이재영
Original Assignee
시큐레터 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 시큐레터 주식회사 filed Critical 시큐레터 주식회사
Priority to KR1020220151154A priority Critical patent/KR102538664B1/ko
Application granted granted Critical
Publication of KR102538664B1 publication Critical patent/KR102538664B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 명세서는 서버가 비실행 파일의 수식(formula) 기능과 관련된 링크정보를 무해화(Disarming) 시키는 방법에 있어서, 상기 비실행 파일의 Workbook 스트림에서 수식 레코드를 탐색하는 단계; 상기 수식 레코드에 근거하여, Ptg 배열을 확인하는 단계; 상기 Ptg 배열에 근거하여, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하는 단계; 및 상기 비실행 파일이 상기 링크와 관련된 수식 기능을 포함한 것에 근거하여, 상기 링크정보를 무해화하는 단계; 를 포함할 수 있다.

Description

Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치 { METHODS AND APPARATUS FOR THE DISARMING OF LINK IN THE FORMULA FUNCTION IN EXCEL DOCUMENT }
본 명세서는 MS Excel 계열에 있는 수식(Formula) 기능을 통해 링크 정보(Hyperlink)가 삽입된 경우, 이를 무해화 하기 위한 방법 및 장치에 관한 것이다.
지능형 지속 위협(Advanced Persistent Threat, APT) 공격은 공격자가 특정 타깃을 정하고 목표한 정보를 빼내기 위해 고도의 공격기법을 적용하여 지속적으로 다양한 형태의 악성 코드를 활용한다. 특히 APT 공격은 초기 침입단계에서 탐지하지 못하는 경우가 많으며, 실행(Portable Executable, PE) 파일보다는 악성 코드를 포함하는 비실행(Non-Portable Executable, Non-PE) 파일을 이용하는 경우가 많다.
비실행 파일은 실행 파일과 반대되는 개념으로서, 자체적으로 실행되지 않는 파일을 의미한다. 비실행 파일로는 워드 파일, 엑셀 파일, 한글 파일, PDF 파일 등의 문서 파일, 이미지 파일, 동영상 파일, 자바스크립트 파일, 및 HTML 파일을 예로 들 수 있다. APT 공격에 악성 코드가 포함된 비실행 파일이 많이 이용되는 이유는 비실행 파일을 실행하는 응용 프로그램이 기본적으로 어느 정도의 보안 취약성을 가지고 있기 때문이다. 뿐만 아니라, 악성 코드를 비실행 파일에 포함시키면 파일을 변경하여 변종 악성 코드를 손쉽게 만들 수 있기 때문이다.
OOXML (Office Open XML, Open XML) 규격은 XML을 기반으로 한 파일 포맷이다. 마이크로소프트가 추진하여 유럽 표준 (ECMA-376)과 국제 표준 (ISO/IEC 29500)으로 승인되었다. 이 규격은 WordprocessML (워드 문서: .docx, .docm 등), PresentationML (파워포인트 문서: .pptx, .pptm 등), SpreadsheetML (엑셀 문서: .xlsx, .xlsm 등)를 포함한다.
MS-XLS 규격은 CFB (Compound File Binary: 여러 파일과 폴더를 파일 하나에 저장하는 형식) 형태로 저장된 바이너리 기반 파일 포맷으로 엑셀 문서 (.xls) 에 사용된다.
엑셀 문서와 같은 비실행 파일에는 유해한 링크 정보가 포함될 가능성이 있기 때문에, 링크 정보가 무해화 되어야 한다. 이 경우에는 비실행 파일의 레이아웃이 바뀌거나 틀어지는 문제가 발생하지 않아야 한다.
본 명세서의 목적은, MS Excel 계열에 있는 수식 기능을 통해 삽입된 Link를 무해화 하기 위한 방법을 제안한다.
본 명세서가 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 이하의 명세서의 상세한 설명으로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
본 명세서의 일 양상은, 서버가 비실행 파일의 수식(formula) 기능과 관련된 링크정보를 무해화(Disarming) 시키는 방법에 있어서, 상기 비실행 파일의 Workbook 스트림에서 수식 레코드를 탐색하는 단계; 상기 수식 레코드에 근거하여, Ptg 배열을 확인하는 단계; 상기 Ptg 배열에 근거하여, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하는 단계; 및 상기 비실행 파일이 상기 링크와 관련된 수식 기능을 포함한 것에 근거하여, 상기 링크정보를 무해화하는 단계; 를 포함할 수 있다.
또한, 상기 Ptg 배열을 확인하는 단계는 상기 수식 레코드에 포함된 CellParsedFormula 구조에 근거할 수 있다.
또한, 제2항에 있어서, 상기 Ptg 배열을 확인하는 단계는 상기 Ptg 배열에 상기 링크정보를 나타내는 문자열이 포함되어 있는지 확인하는 단계; 를 포함할 수 있다.
또한, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하는 단계는 상기 Ptg 배열에 HYPERLINK 수식기능을 나타내는 값이 포함되어 있는 지 확인하는 단계; 를 포함할 수 있다.
또한, 상기 링크정보를 무해화하는 단계는 상기 Ptg 배열에 포함된 상기 링크정보를 나타내는 문자열을 무해화하는 단계; 를 포함할 수 있다.
본 명세서의 또 다른 일 양상은, 비실행 파일의 수식(formula) 기능과 관련된 링크정보를 무해화(Disarming) 시키는 서버에 있어서, 통신부; 메모리; 및 상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서; 를 포함하고, 상기 프로세서는 상기 비실행 파일의 Workbook 스트림에서 수식 레코드를 탐색하고, 상기 수식 레코드에 근거하여, Ptg 배열을 확인하며, 상기 Ptg 배열에 근거하여, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하고, 상기 비실행 파일이 상기 링크와 관련된 수식 기능을 포함한 것에 근거하여, 상기 링크정보를 무해화할 수 있다.
본 명세서의 실시예에 따르면, MS Excel 계열에 있는 수식 기능을 통해 삽입된 Link를 무해화를 수행할 수 있다.
본 명세서에서 얻을 수 있는 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 명세서가 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 명세서와 관련된 서버 또는 클라이언트를 나타내는 도면이다.
도 2는 본 명세서에 적용될 수 있는 비정상 입력의 예시이다.
도 3은 본 명세서가 적용될 수 있는 URI 구성을 예시한다.
도 4는 본 명세서가 적용될 수 있는 링크정보의 무해화 방법의 예시이다.
도 5는 본 명세서가 적용될 수 있는 Fomula 레코드의 예시이다.
도 6은 본 명세서에 적용될 수 있는 CellParsedFormula 구조의 예시이다.
도 7은 본 명세서가 적용될 수 있는 PtgStr 레코드의 예시이다.
도 8은 본 명세서가 적용될 수 있는 PtgFuncVar 구조의 예시이다.
본 명세서에 관한 이해를 돕기 위해 상세한 설명의 일부로 포함되는, 첨부 도면은 본 명세서에 대한 실시예를 제공하고, 상세한 설명과 함께 본 명세서의 기술적 특징을 설명한다.
이하, 첨부된 도면을 참조하여 본 명세서에 개시된 실시예를 상세히 설명하되, 도면 부호에 관계없이 동일하거나 유사한 구성요소는 동일한 참조 번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈" 및 "부"는 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다. 또한, 본 명세서에 개시된 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 실시예의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 또한, 첨부된 도면은 본 명세서에 개시된 실시예를 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 명세서에 개시된 기술적 사상이 제한되지 않으며, 본 명세서의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되지는 않는다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
본 명세서에서, "포함한다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
또한, 명세서에서 사용되는 "부"라는 용어는 소프트웨어 또는 하드웨어 구성요소를 의미하며, "부"는 어떤 역할들을 수행한다. 그렇지만 "부"는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. "부"는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 "부"는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로 코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들 및 변수들을 포함한다. 구성요소들과 "부"들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 "부"들로 결합되거나 추가적인 구성요소들과 "부"들로 더 분리될 수 있다.
또한, 본 명세서의 일 실시예에 따르면 "부"는 프로세서 및 메모리로 구현될 수 있다. 용어 "프로세서"는 범용 프로세서, 중앙 처리 장치 (CPU), 마이크로프로세서, 디지털 신호 프로세서 (DSP), 제어기, 마이크로제어기, 상태 머신 등을 포함하도록 넓게 해석되어야 한다. 몇몇 환경에서는, "프로세서"는 주문형 반도체 (ASIC), 프로그램가능 로직 디바이스 (PLD), 필드 프로그램가능 게이트 어레이 (FPGA) 등을 지칭할 수도 있다. 용어 "프로세서"는, 예를 들어, DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서들의 조합, DSP 코어와 결합한 하나 이상의 마이크로프로세서들의 조합, 또는 임의의 다른 그러한 구성들의 조합과 같은 처리 디바이스들의 조합을 지칭할 수도 있다.
용어 "메모리"는 전자 정보를 저장 가능한 임의의 전자 컴포넌트를 포함하도록 넓게 해석되어야 한다. 용어 메모리는 임의 액세스 메모리 (RAM), 판독-전용 메모리 (ROM), 비-휘발성 임의 액세스 메모리 (NVRAM), 프로그램가능 판독-전용 메모리 (PROM), 소거-프로그램가능 판독 전용 메모리 (EPROM), 전기적으로 소거가능 PROM (EEPROM), 플래쉬 메모리, 자기 또는 광학 데이터 저장장치, 레지스터들 등과 같은 프로세서-판독가능 매체의 다양한 유형들을 지칭할 수도 있다. 프로세서가 메모리로부터 정보를 판독하고/하거나 메모리에 정보를 기록할 수 있다면 메모리는 프로세서와 전자 통신 상태에 있다고 불린다. 프로세서에 집적된 메모리는 프로세서와 전자 통신 상태에 있다.
본 명세서에서 사용되는 "비실행 파일"이란 실행 파일 또는 실행 가능한 파일과 반대되는 개념으로서 자체적으로 실행되지 않는 파일을 의미한다. 예를 들어, 비실행 파일은 PDF 파일, 한글 파일, 워드 파일과 같은 문서 파일, JPG 파일과 같은 이미지 파일, 동영상 파일, 자바 스크립트 파일, HTML 파일 등이 될 수 있으나, 이에 한정되지 않는다.
아래에서는 첨부한 도면을 참고하여 실시예에 대하여 본 명세서가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그리고 도면에서 본 개시를 명확하게 설명하기 위해서 설명과 관계없는 부분들은 생략될 수 있다.
도 1은 본 명세서와 관련된 서버 또는 클라이언트를 나타내는 도면이다.
본 명세서에서 서버(또는 클라우드 서버) 또는 클라이언트는 제어부(100) 및 통신부(130)를 포함할 수 있다. 제어부(100)는 프로세서(110) 및 메모리(120)를 포함할 수 있다. 프로세서(110)는 메모리(120)에 저장된 명령어들을 수행할 수 있다. 프로세서(110)는 통신부(130)를 제어할 수 있다.
프로세서(110)는 메모리(120)에 저장된 명령어에 기초하여 서버 또는 클라이언트의 동작을 제어할 수 있다. 서버 또는 클라이언트는 하나의 프로세서를 포함할 수 있고, 복수의 프로세서를 포함할 수 있다. 서버 또는 클라이언트가 복수의 프로세서를 포함하는 경우, 복수의 프로세서 중 적어도 일부는 물리적으로 이격된 거리에 위치할 수 있다. 또한, 서버 또는 클라이언트는 이에 한정되지 않고 알려진 다양한 방식으로 구현될 수 있다.
통신부(130)는, 서버 또는 클라이언트와 무선 통신 시스템 사이, 서버 또는 클라이언트와 다른 서버 또는 클라이언트 사이, 또는 서버 또는 클라이언트와 외부서버 사이의 무선 통신을 가능하게 하는 하나 이상의 모듈을 포함할 수 있다. 또한, 통신부(110)는, 서버 또는 클라이언트를 하나 이상의 네트워크에 연결하는 하나 이상의 모듈을 포함할 수 있다.
제어부(100)는 메모리(120)에 저장된 응용 프로그램을 구동하기 위하여, 서버 또는 클라이언트의 구성요소들 중 적어도 일부를 제어할 수 있다. 나아가, 제어부(100)는 상기 응용 프로그램의 구동을 위하여, 서버 또는 클라이언트에 포함된 구성요소들 중 적어도 둘 이상을 서로 조합하여 동작 시킬 수 있다.
본 명세서에서 서버는 리버싱 엔진 또는/및 CDR 서비스를 제공하는 CDR 엔진을 포함할 수 있다.
리버싱(Reversing) 엔진
리버싱 엔진이란, 악성 비실행 파일에 대한 리버스 엔지니어링(리버싱) 과정을 자동화 한 분석/진단 엔진이다.
예를 들어, 리버싱 엔진은 다음의 단계를 수행할 수 있다.
1. 파일 분석: 비실행 파일 자체의 외관(예를 들어, 속성, 작성자, 작성 날짜, 파일 타입)을 분석하는 단계로서, 일반 백신 프로그램과 유사하게 비실행 파일 자체의 정보만으로 악성여부를 진단할 수 있다.
2. 정적 분석: 비실행 파일 내의 데이터를 추출, 분석해서 정상, 악성 여부를 판별하는 단계로서, 비실행 파일은 실행하지 않고 파일 구조에 맞게 내부 데이터를 추출하여 비교 분석하여 악성여부를 진단할 수 있다. 이는 매크로, URL 추출 분석 등에 적합할 수 있다.
3. 동적 분석: 비실행 파일을 편집기, 리더기가 포함된 응용프로그램을 통해 읽어들이고 모니터링하면서 행위를 분석하여 악성 여부를 판별하는 단계로서, 매크로, 하이퍼링크, DDE 등 정상기능을 이용한 악성 행위를 탐지하기에 용이하다.
4. 디버깅 분석: 비실행 파일을 읽어들이고 디버깅하여 취약점, 익스플로잇 등을 분석하는 단계로서, 매크로, 하이퍼링크, DDE를 포함하여 문서 내 본문, 표, 폰트, 그림 등을 이용한 응용프로그램의 취약점을 탐지하기에 적합하다.
리버싱 엔진은 디버깅 분석에 사용될 수 있는 디버깅 엔진을 포함할 수 있다. 디버깅 엔진은 비실행 파일의 열람 과정을 디버깅하여 문서 입력, 처리, 출력단계에서 발생하는 취약점을 진단할 수 있다. 여기서 취약점이란, 응용프로그램이 응용프로그램의 개발자가 개발한 코드(로직)에서 예상하지 못한 값을 입력 받았을 때, 발생하는 오류, 버그 등을 이용하는 것으로서, 공격자는 취약점을 통해 비정상 종료로 인한 서비스 거부, 원격 코드 실행 등의 악성 행위를 실행할 수 있다.
CDR(Contents Disarm and Reconstruction)
CDR 서비스는 비실행 파일을 분해해 악성파일 혹은 불필요한 파일을 제거하고 콘텐츠는 원본과 최대한 동일하게 하여, 새로운 파일을 만드는 솔루션이다.
즉, Contents Disarm and Reconstruction(CDR)은 문서 내의 컨텐츠를 무해화(Disarm)하고 재조합(Reconstruction)하여 안전한 문서를 만들어 고객에게 제공하는 서비스를 의미하며, 무해화 대상 파일은 비실행 파일 일체(예를 들어, 워드, 엑셀, 파워포인트, 한글, PDF)를 대상으로 할 수 있으며, 무해화 대상 컨텐츠는 액티브 컨텐츠(예를 들어, 매크로, 하이퍼링크, OLE 객체 등)일 수 있다.
도 2는 본 명세서에 적용될 수 있는 비정상 입력의 예시이다.
도 2를 참조하면, 응용프로그램은 비실행 파일을 통해, 비정상적인 값(예를 들어, 입력값이 정상범위인 2를 초과하는 경우)을 입력 받는 경우, 개발자가 의도하지 않은 실행흐름으로 변경되어 취약점이 동작될 수 있다. 디버깅 엔진은 문서 열람 과정을 자동 디버깅하여 취약점과 관련된 특정 지점에 브레이크 포인트를 설정하고 입력값과 관련된 특정값을 확인하여 입력값이 취약점을 일으키는 값인지 아닌지 판별하여 악성 여부를 진단할 수 있다.
보다 자세하게, 디버깅 엔진은 비실행 파일을 확인하고 이를 열람하기 위한 응용프로그램을 실행하여 디버깅을 시작할 수 있다. 비실행 파일을 열람하는 과정에서 모듈이 로드되면, 디버깅 엔진은 해당 모듈이 분석 대상 모듈인지 확인하고, 분석 대상이라면 지정된 주소에 브레이크 포인트를 설정할 수 있다.
예를 들어, 악성 비실행 파일은 응용프로그램의 버전이나 운영체제 환경 등의 특정 조건이 만족하지 않으면 응용프로그램을 종료하거나 아무런 악성 행위가 발생하지 않는 흐름으로 분기하는 분기 지점들을 가질 수 있다. 서버는 사전에 분석가에 의해 분석되어 이러한 가능성을 가지는 분기 지점에 브레이크 포인트를 설정할 수 있다.
또한, 서버는 해당 분기 지점과 연관되어, 응용프로그램을 종료하지 않고 계속 실행하거나 악성 행위가 발생할 수 있는 흐름으로 유도할 수 있는 조건들을 설정할 수 있다.
응용프로그램의 프로세스 실행 중 해당 브레이크 포인트 지점에서 프로세스가 멈춘 경우, 서버는 탐지 로직에 따라 취약점 여부를 탐지한 후, 결과를 분석 리포트에 저장하는 단계를 수행할 수 있다.
서버에 포함된 자동화 리버싱 엔진은 전술한 단계들을 자동으로 수행하면서 분석하여 분석가가 연구, 개발한 진단 알고리즘을 통해, 악성 비실행 파일을 진단하고 차단할 수 있다.
도 3은 본 명세서가 적용될 수 있는 URI 구성을 예시한다.
도 3을 참조하면, 본 명세서에서 무해화 대상이 되는 링크정보인 URI(Uniform Resource Identifier)를 예시한다.
일반적으로 URI 구문(syntax)은 scheme, authority, path, query, 및 fragment를 포함할 수 있다.
표 1은 본 명세서가 적용될 수 있는 URI 구문의 계층적 시퀀스의 예시이다.
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.
(2) When authority is not present, the path cannot begin with two slash characters ("//").
따라서, URI 에서는 authority의 존재 여부에 따라, path와 관련된 “/”의 개수가 정해질 수 있다. 예를 들어, 서버는 “/”를 통해, authority를 판단할 수 있다.
만일, 무해화 작업을 통해, URI를 모두 제거하면, 오피스 문서에서 링크 표시가 사라지는 경우가 생겨 무해화 결과물이 원본과 레이아웃이 달라질 수가 있다. 이러한 문제가 발생하지 않게 하기 위해, 본 명세서에서는 링크 정보를 무해화하는 방안으로 scheme 부터 슬래시(“/”)까지만 남기도록 할 수 있다.
이를 통해 무해화 대상이 되는 문서는 레이아웃을 유지할 수 있고, 사용자는 기존 링크 정보가 어떤 형태(예: http, file, mailto 등)였는지를 직관적으로 인식할 수 있게 한다.
표 2는 본 명세서가 적용될 수 있는 무해화 결과의 예시이다.
원본 무해화 결과
foo://example.com:8042/over/there?name=ferret#nose foo://
urn:example:animal:ferret:nose urn:
https//seculetter.com https://
mailto:anesin@seculleter.com mailto:
도 4는 본 명세서가 적용될 수 있는 링크정보의 무해화 방법의 예시이다.
MS Excel 계열의 문서 포맷에서는 수식(Formula) 기능을 통해 링크 정보(HYPERLINK)를 문서에 삽입할 수 있다. 이 HYPERLINK 수식에 대한 명세(Spec)도 상세 부분은 MS-OOXML 과 동일하다.
이하에서는 MS Excel 문서 포맷에서 MS-OOXML SpreadsheetML 및 MS-XLS를 예시하고 있으나, 이에 한정되지 않으며, 다른 MS Excel 문서 포맷에도 유사하게 적용될 수 있음은 물론이다. 예를 들어, SpreadsheetML은 Microsoft Office Excel 용 XML 스키마(schema)이다. 또한, 이하에서 예시하는 파일명들은 필요할 경우, 적합한 파일명으로 변경될 수 있다.
링크의 위치 정보는 비실행 파일의 포맷 별로 다르지만, 무해화 대상이 되는 HYPERLINK formula 구조는 모두 동일할 수 있다.
표 3은 HYPERLINK formula 구조의 예시이다.
HYPERLINK ( link-location [ , [ friendly-name ] ] )
표 3을 참조하면, link-location 은 링크정보를 포함하고, friendly-name은 사용자에게 친숙한 대체 텍스트를 포함한다. 예를 들어, friendly-name은 optional 일 수 있다.도 4를 참조하면, MS-XLS 파일에서 수식은 Workbook Stream에 포함될 수 있다.
서버는 비실행 파일의 Workbook 스트림에서 수식(formula) 레코드를 탐색한다(S4010). 이를 위해, 서버는 비실행 파일에 포함된 파일 중, Workbook 스트림을 탐색할 수 있다.
CFB 명세는 웹을 통해 공유되고 있다.
※ 참조 : [MS-XLS]: Excel Binary File Format (.xls) Structure, https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-xls/cd03cb5f-ca02-4934-a391-bb674cb8aa06
이하 명세는 Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 및 Microsoft Office Excel 2003에서 사용하는 이진 파일 형식(.xls)을 지정할 수 있다.
2 Structures
2.4 Records
2.4.127 Formula
Formula 레코드는 셀에 대한 수식(formula)를 지정한다.
도 5는 본 명세서가 적용될 수 있는 Fomula 레코드의 예시이다.
도 5를 참조하면, Fomula 레코드는 다음을 포함할 수 있다 :
cell (6 bytes): 시트(sheet)에서 셀(cell)을 지정하는 셀 구조이다.
val (8 bytes): 수식의 값을 지정하는 수식 값 구조이다.
A - fAlwaysCalc (1 bit): 다음 재계산 중에 수식을 계산해야 하는지 여부를 지정하는 비트이다.
B - reserved1 (1 bit): MUST be zero, and MUST be ignored.
C - fFill (1 bit): 셀에 fill alignment이 있는지 또는 center-across-selection alignment이 있는지 지정하는 비트이다.
D - fShrFmla (1 bit): 수식이 ShrFmla에 정의된 공유 수식의 일부인지 여부를 지정하는 비트이다
E - reserved2 (1 bit): MUST be zero, and MUST be ignored.
F - fClearErrors (1 bit): 수식이 수식 오류 검사에서 제외되는지 여부를 지정하는 비트이다.
reserved3 (10 bits): MUST be zero, and MUST be ignored.
chn (4 bytes): 응용 프로그램별 정보 캐시를 지정하는 필드이다.
formula (variable): 수식을 지정하는 CellParsedFormula 구조이다.
다시, 도 4를 참조하면, 서버는 수식 레코드에 근거하여, Ptg 배열을 확인한다(S4020). 예를 들어, 서버는 수식 레코드에 포함된, CellParsedFormula 구조에 근거하여, Ptg 배열을 확인할 수 있다.
관련된 명세는 다음과 같다.
2.5 Structures
2.5.198 Parsed Expressions
2.5.198.3 CellParsedFormula
CellParsedFormula 구조는 셀에 저장된 수식을 지정한다.
도 6은 본 명세서에 적용될 수 있는 CellParsedFormula 구조의 예시이다.
도 6을 참조하면, CellParsedFormula 구조는 다음을 포함할 수 있다 :
cce (2 bytes): rgce 길이를 바이트 단위로 지정하는 부호 없는 정수이다.
rgce (variable): 수식에 대한 Ptg 들의 시퀀스를 지정하는 Rgce이다.
rgcb (variable): 수식에 대한 보조 데이터를 지정하는 Rbg Extra이다.
2.5.198.104 Rgce
Rgce 구조는 파일에 순차적으로 배치된 Ptg들의 집합을 지정한다.
Ptg는 PtgStr을 포함할 수 있으며, PtgStr의 ACTUAL_PTG_SIZE는 1 + (stringsize + 1) * 2이고, 여기서 stringsize는 PtgStr 구조의 string.cch 필드이다.
예를 들어, 서버는 CellParsedFormula 구조의 rgce 구조에서 Ptg 배열을 확인할 수 있다.
2.5.198.25 Ptg
Ptg 구조는 수식의 단일 요소를 지정한다. 첫 번째 바이트의 값은 수식이 어떤 구조를 나타내는지 결정한다. 예를 들어, Ptg[0]이 PtgStr 인 경우, Ptg 구조의 첫번째 바이트는 0x17이다.
따라서, 서버는 Ptg[0]이 PtgStr을 나타내는 지 확인할 수 있다.
2.5.198.89 PtgStr
PtgStr operand는 유니코드 문자열 값을 지정한다.
도 7은 본 명세서가 적용될 수 있는 PtgStr 레코드의 예시이다.
도 7을 참조하면, PtgStr 레코드는 다음을 포함할 수 있다 :
ptg (7 bits): Reserved. MUST be 0x17.
A - reserved0 (1 bit): MUST be zero, and MUST be ignored.
string (variable): ShortXLUnicodeString 값은 문자열을 지정한다.
예를 들어, PtgStr 레코드의 string에는 링크 정보의 link-location, 즉, 실제 링크 주소가 포함될 수 있다. 따라서, 서버는 Ptg[0]이 PtgStr을 나타내는 것에 근거하여, ShortXLUnicodeString 값에서 link-location을 확인할 수 있다.
이후, 서버는 Ptg[1]이 PtgAttrSpace를 나타내는지 확인한다.
예를 들어, Ptg[1]가 PtgAttrSpace인 경우, Ptg 구조의 첫번째 바이트는 0x19 이고, 두번째 바이트는 0x40 이다. 따라서, 서버는 Ptg[1]이 PtgAttrSpace를 나타내는 지 확인할 수 있다. 여기서, PtgAttrSpace는 구분자 역할을 할 수 있다.
1. Ptg[1]이 PtgAttrSpace를 나타내는 경우 :
서버는 Ptg[2]가 PtgStr을 나타내는지 확인할 수 있다. 여기서, PtgStr은 friendly-name, 즉, 대체 문자열을 포함할 수 있다. 만일, Ptg[2]가 PtgStr을 나타내지 않는 경우, 서버는 수식기능에 링크 정보가 없는 것으로 판단하고, 당해 수식기능에 대한 무해화 작업을 종료한다.
서버는 Ptg[2]가 PtgStr을 나타내는 것에 근거하여, Ptg[3]이 PtgFuncVar을 나타내는지 확인할 수 있다. 예를 들어, PtgFuncVar는 HYPERLINK에 해당하는 구분값을 포함한다.
만일, Ptg[3]이 PtgFuncVar을 나타내지 않는 경우, 서버는 수식기능에 링크 정보가 없는 것으로 판단하고, 당해 수식기능에 대한 무해화 작업을 종료한다.
관련 명세는 다음과 같다.
2.5.198.63 PtgFuncVar
PtgFuncVar 구조는 function-call에서 정의된 바와 같이, 파라미터들의 변수에 대한 함수의 호출을 지정한다.
도 8은 본 명세서가 적용될 수 있는 PtgFuncVar 구조의 예시이다.
도 8을 참조하면, PtgFuncVar 구조는 다음을 포함할 수 있다 :
ptg (5 bits): Reserved. MUST be 0x02
A - type (2 bits): 이 Ptg 값에 대한 데이터 타입을 지정하는 PtgDataType
B - reserved (1 bit): MUST be 0, MUST be ignored.
cparams (1 byte): 파라미터들의 수를 지정하는 부호 없는 정수. tab에 의해 지정된 함수에 대하여 정의된 rage 안에 있어야 한다.
tab (15 bits): 호출될 함수를 지정하는 구조. fCeFunc가 1이면 이 필드는 Cetab 값을 지정하고, fCeFunc가 0이면 이 필드는 Ftab 값을 지정함.
C - fCeFunc (1 bit): tab이 Cetab 값을 지정하는지, Ftab 값을 지정하는지 여부를 지정하는 비트.
2. Ptg[1]이 PtgAttrSpace를 나타내지 않는 경우 :
서버는 Ptg[1] 또는 [3]이 PtgFuncVar을 나타내는지 확인할 수 있다.
만일, Ptg[1] 또는 [3]이 PtgFuncVar을 나타내지 않는 경우, 서버는 수식기능에 링크 정보가 없는 것으로 판단하고, 당해 수식기능에 대한 무해화 작업을 종료한다.
다시, 도 4를 참조하면, 서버는 Ptg 배열에 근거하여, 비실행 파일이 링크와 관련된 수식기능을 포함하고 있는 지 판단한다(S4030).
예를 들어, 서버는 PtgFuncVar 구조에서 tab 구조가 Ftab 값을 지정하는 지 확인할 수 있다.
Ftab 관련 명세는 다음과 같다.
2.5.198.17 Ftab
Ftab 구조는 수식에서 호출될 수 있는 함수를 지정한다.
Ftab 구조는 iftab을 포함한다.
iftab (2 bytes) : 호출될 함수를 지정하는 부호 없는 정수이다. 예를 들어, HYPERLINK를 지정하는 iftab 값은 0x0167이다.
따라서, 서버는 tab 구조가 Ftab 값을 지정하는 것에 근거하여, Ftab 값이 HYPERLINK 수식기능을 나타내는 지 판단할 수 있다.
서버는 비실행 파일이 링크와 관련된 수식기능을 포함한 것에 근거하여, 링크정보를 무해화한다(S4040). 예를 들어, 서버는 Ptg[0]이 나타내는 PtgStr에 포함된 링크정보를 무해화할 수 있다.
보다 자세하게, 서버는 링크정보에서 scheme만 남기거나, “/” 가 존재하는 경우, scheme과 “/” 만 남길 수 있다.
또한, 서버는 널(null) 문자(\0)로 링크정보를 제거하지 않고 공백(0x20)으로 무해화를 수행할 수 있다. 널 문자를 사용하지 않는 이유는 일부 문자열에 대한 MS-CFB 명세가 null-terminated string으로 되어 있는 경우가 있기 때문이다.
전술한 본 명세서는, 프로그램이 기록된 매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 매체는, 컴퓨터 시스템에 의하여 읽혀 질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 매체의 예로는, HDD(Hard Disk Drive), SSD(Solid State Disk), SDD(Silicon Disk Drive), ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광 데이터 저장 장치 등이 있으며, 또한 캐리어 웨이브(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 따라서, 상기의 상세한 설명은 모든 면에서 제한적으로 해석되어서는 아니되고 예시적인 것으로 고려되어야 한다. 본 명세서의 범위는 첨부된 청구항의 합리적 해석에 의해 결정되어야 하고, 본 명세서의 등가적 범위 내에서의 모든 변경은 본 명세서의 범위에 포함된다.
또한, 이상에서 서비스 및 실시 예들을 중심으로 설명하였으나 이는 단지 예시일 뿐 본 명세서를 한정하는 것이 아니며, 본 명세서가 속하는 분야의 통상의 지식을 가진 자라면 본 서비스 및 실시 예의 본질적인 특성을 벗어나지 않는 범위에서 이상에 예시되지 않은 여러 가지의 변형과 응용이 가능함을 알 수 있을 것이다. 예를 들어, 실시 예들에 구체적으로 나타난 각 구성 요소는 변형하여 실시할 수 있는 것이다. 그리고 이러한 변형과 응용에 관계된 차이점들은 첨부한 청구 범위에서 규정하는 본 명세서의 범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (6)

  1. 서버가 비실행 파일의 수식(formula) 기능과 관련된 링크정보를 무해화(Disarming) 시키는 방법에 있어서,
    상기 비실행 파일의 Workbook 스트림에서 수식 레코드를 탐색하는 단계;
    상기 수식 레코드에 근거하여, Ptg 배열을 확인하는 단계;
    상기 Ptg 배열에 근거하여, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하는 단계; 및
    상기 비실행 파일이 상기 링크와 관련된 수식 기능을 포함한 것에 근거하여, 상기 링크정보를 무해화하는 단계;
    를 포함하며,
    상기 링크정보를 무해화 하는 단계는
    상기 Ptg 배열의 첫번째 요소에 포함된 링크정보에서 스키마(schema) 정보 외에 나머지는 빈칸으로 대체하는 단계;
    를 포함하는, 무해화 방법.
  2. 제1항에 있어서,
    상기 Ptg 배열을 확인하는 단계는
    상기 수식 레코드에 포함된 CellParsedFormula 구조에 근거하는, 무해화 방법.
  3. 제2항에 있어서,
    상기 Ptg 배열을 확인하는 단계는
    상기 Ptg 배열의 첫번째 요소가 문자열을 나타내는 것에 근거하여, 상기 Ptg 배열의 두번째 요소를 확인하는 단계;
    상기 Ptg 배열의 두번째 요소에 근거하여, 상기 Ptg 배열의 첫번째 요소에 상기 링크정보를 나타내는 문자열이 포함되어 있는지 확인하는 단계;
    를 포함하는, 무해화 방법.
  4. 제3항에 있어서,
    상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하는 단계는
    상기 Ptg 배열에 HYPERLINK 수식기능을 나타내는 값이 포함되어 있는 지 확인하는 단계;
    를 포함하는, 무해화 방법.
  5. 제4항에 있어서,
    상기 링크정보를 무해화하는 단계는
    상기 Ptg 배열에 포함된 상기 링크정보를 나타내는 문자열을 무해화하는 단계;
    를 포함하는, 무해화 방법.
  6. 비실행 파일의 수식(formula) 기능과 관련된 링크정보를 무해화(Disarming) 시키는 서버에 있어서,
    통신부;
    메모리; 및
    상기 통신부 및 상기 메모리를 기능적으로 제어하는 프로세서; 를 포함하고,
    상기 프로세서는
    상기 비실행 파일의 Workbook 스트림에서 수식 레코드를 탐색하고, 상기 수식 레코드에 근거하여, Ptg 배열을 확인하며, 상기 Ptg 배열에 근거하여, 상기 비실행 파일이 링크와 관련된 수식 기능을 포함하고 있는지를 판단하고, 상기 비실행 파일이 상기 링크와 관련된 수식 기능을 포함한 것에 근거하여, 상기 링크정보를 무해화하며, 상기 링크정보를 무해화 하기 위해, 상기 Ptg 배열의 첫번째 요소에 포함된 링크정보에서 스키마(schema) 정보 외에 나머지는 빈칸으로 대체하는, 서버.
KR1020220151154A 2022-11-14 2022-11-14 Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치 KR102538664B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220151154A KR102538664B1 (ko) 2022-11-14 2022-11-14 Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220151154A KR102538664B1 (ko) 2022-11-14 2022-11-14 Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치

Publications (1)

Publication Number Publication Date
KR102538664B1 true KR102538664B1 (ko) 2023-05-31

Family

ID=86542619

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220151154A KR102538664B1 (ko) 2022-11-14 2022-11-14 Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102538664B1 (ko)

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Microsoft Corporation, "Excel Binary File Format (.xls) Structure"(2022.08.)* *
Microsoft Corporation, "HYPERLINK function"(2022.10.)* *
Ngoc Nguyen, "BazarBackdoor malware infection using CSV text files - How to prevent it"(2022.05.)* *

Similar Documents

Publication Publication Date Title
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
US8615804B2 (en) Complementary character encoding for preventing input injection in web applications
Wassermann et al. Static detection of cross-site scripting vulnerabilities
Guarnieri et al. Saving the world wide web from vulnerable JavaScript
Wassermann et al. Sound and precise analysis of web applications for injection vulnerabilities
Carmony et al. Extract Me If You Can: Abusing PDF Parsers in Malware Detectors.
US20190342332A1 (en) Database query injection detection and prevention
Gupta et al. JS‐SAN: defense mechanism for HTML5‐based web applications against javascript code injection vulnerabilities
JP5863973B2 (ja) プログラム実行装置及びプログラム解析装置
US8635602B2 (en) Verification of information-flow downgraders
Endignoux et al. Caradoc: A pragmatic approach to pdf parsing and validation
Møller et al. Automated detection of client-state manipulation vulnerabilities
US8484232B2 (en) Method, computer arrangement, computer program and computer program product for checking for the presence of control statements in a data value
Leithner et al. Hydra: Feedback-driven black-box exploitation of injection vulnerabilities
US20110265058A1 (en) Embeddable project data
Okun et al. Report on the third static analysis tool exposition (sate 2010)
KR102499555B1 (ko) PDF 또는 HWP에서 Link의 무해화를 위한 방법 및 장치
KR102468431B1 (ko) Ms-ooxml에서 ole object 무해화를 위한 방법 및 장치
Jordan et al. Safe-pdf: Robust detection of javascript pdf malware using abstract interpretation
KR102538664B1 (ko) Excel 계열의 문서에서 수식 기능에 있는 Link의 무해화를 위한 방법 및 장치
KR102494836B1 (ko) MS-DOC에서 Link의 무해화를 위한 방법 및 장치
KR102488943B1 (ko) MS-PPT에서 Link의 무해화를 위한 방법 및 장치
KR102494838B1 (ko) MS-CFB의 DocumentSummaryInformation 스트림에서 Link의 무해화를 위한 방법 및 장치
KR102468434B1 (ko) Ms excel 문서 포맷에서 dde 무해화를 위한 방법 및 장치

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant