2018. 05. 04 MS Office 수식편집기취약점분석 CVE-2017-11882 / CVE-2018-0802 안랩시큐리티대응센터 (ASEC) 분석연구팀 경기도성남시분당구판교역로 220 ( 우 ) 13493 대표전화 : 031-722-8000 팩스 : 031-722-8901 www.ahnlab.com AhnLab, Inc. All rights reserved.
목차 개요... 3 CVE-2017-11882/CVE-2018-0802 요약... 3 CVE-2017-11882/CVE-2018-0802 분석... 5 1. 취약점발생원인... 5 2. CVE-2017-11882 와 CVE-2018-0802 의연관성및차이점... 7 CVE-2017-11882/CVE-2018-0802 익스플로잇상세분석...10 1. CVE-2017-11882...10 1.1) EQNEDT32.EXE 버전 2000.11.09.0 환경 ( 보안업데이트적용전 )...10 1.2) EQNEDT32.EXE 버전 2017.08.14.0 환경 ( 보안업데이트적용후 )...12 2. CVE-2018-0802...17 2.1) EQNEDT32.EXE 버전 2000.11.09.0 환경 ( 보안업데이트적용전 )...17 2.2) EQNEDT32.EXE 버전 2017.08.14.0 환경 ( 보안업데이트적용후 )...20 안랩제품의대응현황...23 결론...24 참고자료...25 AhnLab, Inc. All rights reserved. 2
개요 CVE-2017-11882, CVE-2018-0802은마이크로소프트오피스 (Microsoft Office) 에포함된수식편집기 (Equation Editor) 관련취약점으로, 각각 2017년 11월과 2018년 1월에공개됐다. 마이크로소프트 ( 이하 MS) 에서는 CVE-2017-11882 취약점해결을위한보안패치를발표했으나, 결과적으로 CVE-2018-0802 취약점이존재하게되었다. 한편, CVE-2017-11882 취약점이공개된지난 2017년 11월이후, 관련샘플이비록소량이지만지속적으로나타나고있다. 해외에서는지난 2017년연말지능형위협공격 (Advanced Persistent Threat, APT) 에해당취약점이이용된사례가확인된바있다. 국내에서는기업을대상으로스팸메일을통한관련샘플유포가확인되었으며, 지난 2018년 3월에는외형적으로기존샘플들과다소의차이를보이는변종도확인된바있다. 본보고서에서는주요샘플을이용해이들취약점의발생원인과함께유사성및차이점에대해상세히 살펴본다. CVE-2017-11882/CVE-2018-0802 요약 CVE-2017-11882, CVE-2018-0802 취약점은마이크로소프트오피스 (Microsoft Office, 이하 MS오피스 ) 컴포넌트인수식편집기 (Equation Editor, 이하 EQNEDT32.EXE) 의취약점으로, EQNEDT32.EXE가메모리상에서특정오브젝트를적절하게처리하지못하는과정에서발생한다. MS오피스메모리손상취약점 (Microsoft Office Memory Corruption Vulnerability) 으로알려져있다 [1][2]. AhnLab, Inc. All rights reserved. 3
[ 그림 1] CVE-2017-11882 취약점공지 (* 출처 : National Vulnerability Database) 공격자가해당취약점을악용할경우, 현재사용자의관리자권한으로로그인해임의의코드를실행할수있다. 이들취약점에영향받는제품군은 MS오피스 2007, 2010, 2013, 2016 등으로, 현재시중에서이용되고있는대다수의 MS오피스제품군이해당된다. 즉, 수많은 MS오피스사용자들이영향받을수있으며, 이에따라이들취약점의심각도또한 높음 (HIGH) 으로분류되어있다. 주목할점은 [ 표 1] 에서볼수있는것처럼 CVE-2017-11882 취약점에대한보안업데이트가발표된지 10여일만에 CVE-2018-0802가보고되었다는사실이다. 이들취약점은동일한프로그램에서동일한원리 ( 스택오버플로우 ) 에의해발현되는데, 당초배포된보안업데이트에서잠재적으로취약한모든부분에대해조치가이루어지지못했기때문에이러한현상이발생했다. 일시 주요내용 2017 년 8 월 3 일 CVE-2017-11882 취약점보고 ( 보고자 : Embedi [3] ) 2017 년 11 월 14 일 2017 년 11 월 24 일경 2018 년 1 월 9 일 CVE-2017-11882 취약점공식발표및 MS 보안업데이트배포 [4] - 업데이트된 EQNEDT32.EXE 버전 : 2017.08.14.0 CVE-2018-0802 취약점보고 ( 보고자 : Qihoo 360, 0patch, Check Point Software Technologies 등다수분석가 [5] ) CVE-2018-0802 취약점공식발표및 MS 보안업데이트배포 [5] - 보안업데이트배포후 EQNEDT32.EXE 가 MS오피스패키지에서제거됨 [ 표 1] CVE-2017-11882/CVE-2018-0802 취약점타임라인 AhnLab, Inc. All rights reserved. 4
[ 그림 1] CVE-2017-11882 취약버전 ( 왼쪽 ) 과 CVE-2018-0802 취약버전 ( 오른쪽 ) EQNEDT32.EXE 이와관련해제로패치 (0patch) 는보안업데이트가배포되면업데이트된내용에대해상세한분석을수행 하는경우가많아지는추세로, CVE-2018-0802 취약점또한이러한과정에서발견된것이라할수있다 [6]. CVE-2017-11882/CVE-2018-0802 분석 1. 취약점발생원인 MS오피스의수식편집기를이용하여수식을삽입하면해당수식은임베디드 (embedded) OLE 형태로아래와같은스트림에저장된다. \x01ole \x01compobj \x03objinfo Equation Native - POC 예제에서사용됨 \x01ole10native - 이후변형악성샘플에서발견됨 AhnLab, Inc. All rights reserved. 5
이러한수식이포함된문서를열때수식 OLE 객체를처리하기위해 EQNEDT32.EXE 가실행된다. 수식처리 과정에서내부적으로 IPersistStorage::Load() 메소드가호출되며, 각데이터스트림의구조에따라필요한데 이터를차례로파싱 (parsing) 한다. Equation Native 스트림을예로들면, 먼저 Equation Native 헤더가파싱되고차례로 MTEF 데이터가파싱된다. [ 그림 3] 과같이 MTEF 데이터스트림은내부에다수의레코드를포함할수있다. 레코드의시작부분데이터가 0x08이면폰트 (FONT) 레코드로서처리되는데, 폰트레코드내부의폰트명 (Font Name) 데이터가 CVE-2017-11882 및 CVE-2018-0802 취약점과관련있는부분이다. [ 그림 2] Equation Native 스트림내부구조 EQNEDT32.EXE 에서폰트레코드의폰트명을처리하는과정에서 strcpy() 가사용되며, 문자열복사대상버퍼는 32바이트로선언되어있다. 그러나복사과정에서원본 대상버퍼에대한경계체크가이루어지지않는다. 따라서복사원본버퍼 ( 폰트명 ) 에 32 바이트를초과하는데이터가존재하더라도대상버퍼로그대로복사되는스택오버플로우가발생하게된다. 예를들어 [ 그림 4] 의예시와같이복사되는버퍼의내용 ( 폰트명 ) 을적절히조작하면해당함수의리턴 (Return) 주소를덮어써공격자가원하는지점으로분기하도록할수있다. [ 그림 4] 의예시에서는리턴주소 를 0x430C12 로덮어썼으며, 이후부터해당주소의코드를실행하게된다. AhnLab, Inc. All rights reserved. 6
[ 그림 3] Equation Native 스트림내부의악성데이터예시 2. CVE-2017-11882 와 CVE-2018-0802 의연관성및차이점 CVE-2017-11882 취약점이처음발견됐을당시, 아래와같은 EQNEDT32.EXE 취약한부분 2 가지가확인되었 다. SUB_41160F() 내부의 strcpy() - CVE-2017-11882 취약점관련 SUB_421774() 내부의 SUB_421E39() 에서의 strcpy() - CVE-2018-0802 취약점관련 이들모두 strcpy() 사용시버퍼경계의체크가없어스택오버플로우취약성이존재하지만코드의흐름 상 SUB_41160F() 에서먼저취약점이발생함에따라실질적으로 SUB_421E39() 까지는제어가올수없는구 조였다. 지난 2017년 11월배포된 MS 보안업데이트를통해 SUB_41160F() 함수에는 strcpy() 전 후버퍼크기를확인하는코드가추가되었지만, SUB_421E39() 의 strcpy() 에대해서는조치가취해지지않았다. 더구나업데이트이후기존에문제가되었던 SUB_41160F() 를자연스럽게통과하여 SUB_421E39() 까지제어가넘어올수있게되면서기존취약점유발데이터를조금만조작하면두번째취약점까지악용하는것이가능해졌다. 이것이 CVE-2018-0802 취약점이다. AhnLab, Inc. All rights reserved. 7
SUB_41160F() 2017.08.14.0 이전버전 2017.08.14.0 버전 * 길이체크없는 strcpy() 가사용됨 * strlen() 후 qmemcpy() 가사용됨 SUB_421E39() * 길이체크없는 strcpy() 가사용됨 * 길이체크없는 strcpy() 가그대로존재함 (CVE-2018-0802 취약점원인 ) [ 표 2] MS 보안업데이트전후의 EQNEDT32.EXE 비교 CVE-2017-11882 와 CVE-2018-0802 는서로연관된취약점이지만익스플로잇 (exploit) 과관련해서는다음과 AhnLab, Inc. All rights reserved. 8
같은차이를보인다. CVE-2017-11882 취약점악용익스플로잇 2017년 11월 MS 보안업데이트가적용되기이전의 EQNEDT32.EXE 에서만동작한다. (2017.08.14.0 이전버전 ) 해당업데이트이후에도 SUB_421E39() 은여전히취약하기때문에해당함수내부에서스택오버플로우는발생하지만, 실제익스플로잇은제대로발현되지않는다. 리턴주소를덮어쓰기위해복사해야하는데이터의크기가달라져야하기때문이다. CVE-2018-0802 취약점악용익스플로잇 2017년 11월 MS 보안업데이트가적용된 EQNEDT32.EXE 에서만동작한다. (2017.08.14.0 버전 ) 해당업데이트이전에는 SUB_421E39() 이전에 SUB_41160F() 에서먼저스택오버플로우가발생하며, 이때리턴주소를정확히덮어쓰지못하기때문에익스플로잇이성공하지못한다. 이들두취약점의동작환경을정리하면다음과같다. 취약점 ID 2017.08.14.0 이전버전 2017.08.14.0 버전 CVE-2017-11882 익스플로잇성공 익스플로잇실패 CVE-2018-0802 익스플로잇실패 익스플로잇성공 [ 표 3] EQNEDT32.EXE 버전별취약점동작환경 AhnLab, Inc. All rights reserved. 9
CVE-2017-11882/CVE-2018-0802 익스플로잇상세분석 CVE-2017-11882 와 CVE-2018-0802 는연관된취약점임에도불구하고익스플로잇발현환경과과정에서 차이가존재한다. 2017 년 11 월 MS 보안업데이트적용전후의 EQNEDT32.EXE 버전에따른이들두취약 점의익스플로잇과정을상세히살펴본다. 1. CVE-2017-11882 1.1) EQNEDT32.EXE 버전 2000.11.09.0 환경 ( 보안업데이트적용전 ) EQNEDT32.EXE 의 SUB_41160F() 내의취약한 strcpy() 는 [ 그림 5] 와같다. [ 그림 4] EQNEDT32.EXE 내부의취약한 strcpy() MS 오피스로악성문서를불러오면우선정상적으로폰트가몇차례파싱되며, 이후악성폰트레코드데 이터가복사된다. 복사되는데이터는총 0x30 이며마지막은 null(0x00) 로끝난다. 해당데이터는이후쉘코 드 (shellcode) 서동작한다. [ 그림 5] CVE-2017-11882 취약점을악용하는폰트명데이터 strcpy() 호출전후의스택의모습은 [ 그림 7] 과같다. AhnLab, Inc. All rights reserved. 10
[ 그림 6] CVE-2017-11882 취약점익스플로잇성공시스택 원래는 0x20 크기의데이터가복사되어야하지만, 경계체크루틴이존재하지않아 [ 그림 7] 과같이공격 자가의도한대로 0x30 크기의데이터가모두복사되었으며, SUB_41160F() 호출후복귀할리턴주소가덮 어써진것을확인할수있다 (@12F250 = 0x4115D8 0x40C4B1). 또하나주목할부분은리턴주소바로다음의값이다. 이는 SUB_41160F() 호출당시첫번째인자로전달 된값이며, strcpy() 에서원본버퍼의주소 (ESI) 에해당한다. 즉, 복사대상이었던 0x30 크기의쉘코드가존재 하는주소다 ( 익스플로잇성공시분기할주소, @12F254 = 0x12F3D0) AhnLab, Inc. All rights reserved. 11
SUB_41160F() 함수종료후 [ 그림 8] 과같이 0x40C4B1 주소로리턴하는것을확인할수있다. [ 그림 7] 쉘코드분기를위해사용되는 RETN 명령어 [ 그림 8] 의메모리상에보이는 @40C4B1 은 EQNEDT32.EXE 내부 SUB_40C46C() 함수의종료부분의 RETN 명령을가리키고있다. 실제로는 EIP 에직접값을대입할수없지만이 RETN 명령으로인해이론적으로 POP EIP 와같은효과가나타난다. 현재 ESP 위치 (@12F254) 에저장된값 (0x12F3D0) 으로 EIP 값이대체된다. RETN 실행후 [ 그림 9] 와같이 EIP 가 0x12F3D0 로설정되며코드분기가이동한것을확인할수있다. 이 주소영역은앞서설명한바와같이 strcpy() 복사원본이었던 0x30 크기의쉘코드시작부분에해당한다. [ 그림 8] CVE-2017-11882 익스플로잇성공후쉘코드 이후 Equation Native 스트림내부에포함된추가쉘코드로분기가이루어지며, 이에따른악성행위가수 행된다. 1.2) EQNEDT32.EXE 버전 2017.08.14.0 환경 ( 보안업데이트적용후 ) 2017년 11월보안업데이트가적용된 EQNEDT32.EXE 에서는 SUB_41160F() 에버퍼경계체크가추가되었기때문에 CVE-2017-11882 취약점이동작하지는않는다. 그러나앞서언급한바와같이여전히 SUB_421774() 내부의 SUB_421E39() 에는 [ 그림 10] 과같이취약한 strcpy() 가그대로남아있는상태다. AhnLab, Inc. All rights reserved. 12
[ 그림 9] 보안업데이트에서조치되지않은 strcpy() 취약구간 이환경에서앞서살펴본것과동일한예제샘플을실행하면 SUB_421E39() 내에서복사대상의버퍼크기 인 0x20 를초과한총 0x30 의데이터가복사되지만, 쉘코드로의분기는성공하지못한다. 그이유는복사하 는데이터가리턴주소를덮어쓸만큼충분하지않았기때문이다. 코드를좀더상세히살펴보면, SUB_421774() 는 4 개의인자를필요로하는데, 이는 [ 그림 11] 의 lplogfont, a2, a3, a4 에해당한다. [ 그림 10] CVE-2018-0802 취약점관련 EQNEDT32.EXE 내부함수 (1) 하위의 SUB_421E39() 는 3 개의인자를받아동작하며, [ 그림 12] 에서 lplogfont, a2 와 LOGFONTA 형의 &lf 를 확인할수있다. AhnLab, Inc. All rights reserved. 13
[ 그림 11] CVE-2018-0802 취약점관련 EQNEDT32.EXE 내부함수 (2) 위에서확인한바와같이이들두함수는 lplogfont 와 a2 등 2 개의인자를공유한다. SUB_421E39() 내부에 서 strcpy() 호출시점에복사원본은 lplogfont 가, 복사대상은 &lf(+0x1c 지점 ) 가된다. [ 그림 12] CVE-2018-0802 취약점관련 EQNEDT32.EXE 내부함수 (3) [ 그림 14] 에서확인할수있는것처럼 lplogfont 의데이터는앞서확인한 0x30 크기의쉘코드와일치한다. [ 그림 13] strcpy() 호출시복사원본데이터 (lplogfont) SUB_421E39() 함수진입및 strcpy() 호출전후의스택모습은 [ 그림 15] 와같다. AhnLab, Inc. All rights reserved. 14
[ 그림 14] MS 보안업데이트후 CVE-2017-11882 취약점익스플로잇실패스택 [ 그림 15] 의스택데이터에서확인할수있는것처럼 strcpy() 에의해 @12F2F0 부터 @12F320 까지총 0x30 의데이터가성공적으로복사되었다. 그러나이데이터는리턴주소를덮어쓰기에는부족하기때문에익스 플로잇은실패했으며, 이후나머지코드가정상적으로실행된다. [ 그림 16] 은두취약점관련함수의지역변수사용시스택영역을비교한것이다. SUB_421774() 함수에 진입후에는 SUB ESP, 0D8 명령을사용하여총 0xD8 만큼의지역변수를위한스택영역을확보하는반면, SUB_41160F() 함수의경우에는 0x88 만큼의스택영역을확보함을확인할수있다. AhnLab, Inc. All rights reserved. 15
함수 스택영역 SUB_41160F() SUB_421774() 로컬변수영역확보 = 0x88 로컬변수영역확보 = 0xD8 [ 그림 16] 두취약점관련함수의지역변수사용공간차이 SUB_41160F() 함수의경우, strcpy() 에의해데이터가복사되는대상주소 (EDI) 는 @12F224이며, 리턴주소가저장된위치는 @12F250이다. 주소크기가 4바이트인점을고려하면실제로는 0x30 만큼, 즉 @12F254까지전부덮어써야한다. 샘플의쉘코드가정확히 0x30 바이트였기때문에해당쉘코드는위의 [ 그림 7] 에서확인한바와같이리턴주소를덮어쓰는것이가능했던것이다. 또한 [[ 그림 14] 에서확인할수있는것처럼 SUB_421774() 함수에서 SUB_421E39() 를호출하여 strcpy() 로데이터를복사할때대상주소 (EDI, &lparam + 0x1C 위치 ) 는 @12F2F0이며, 리턴주소가저장된위치는 @12F384이다. 앞서와같은이유로 4바이트를더하면리턴주소를정확하게덮어쓰기위해서는 0x98만큼의데이터가필요하다는결론에도달한다. 이를토대로 [ 그림 17] 과같이 0x98 만큼의데이터가복사되도록테스트를진행했다. 0x94 크기의 NOP 에리 턴주소를덮어쓰기위한 4 바이트를추가하여데이터를구성하였으며, 덮어쓰는리턴주소는 EQNEDT32.EXE 내부의 'RETN' 명령어가있는임의의주소 (@421773) 를사용하였다. 테스트결과, 예상한바와같이리턴주소를덮어쓰는것에성공했다. 의도한위치의 RETN 명령어를실행 하여스택에저장된복사원본주소 (ESI) 로분기가이동하는것을확인할수있었다. 여기에서는 NOP 명령 AhnLab, Inc. All rights reserved. 16
으로해당영역을채웠지만쉘코드를적절하게구성할경우추가악성행위가얼마든지가능하다는것을 알수있다. [ 그림 15] EQNEDT32.EXE 보안업데이트후에도리턴주소를덮어쓰도록조작한예시 2. CVE-2018-0802 2.1) EQNEDT32.EXE 버전 2000.11.09.0 환경 ( 보안업데이트적용전 ) CVE-2018-0802 취약점과관련해공개된 POC 샘플을사용하여분석한내용이다. 해당샘플또한 Equation Native 객체를포함하고있다. [ 그림 18] 은 CVE-2017-11882 샘플과 CVE-2018-0802 샘플의익스플로잇을비교한것이다. [ 그림 18] 에표시 된부분은총 0x96* 바이트의폰트명으로복사되는데이터이며, 익스플로잇에사용되는쉘코드를포함한다. (* 직전에 NOP 로테스트한데이터의경우 0x98 이었다. 이차이에대해서는아래에서추가로설명한다.) AhnLab, Inc. All rights reserved. 17
[ 그림 18] CVE-2017-11882 와 CVE-2018-0802 익스플로잇비교 [ 그림 19] 는 SUB_41160F() 에서취약한 strcpy() 함수를사용하여복사되기직전의모습이다. 현재 ESI (@12F3D0) 가가리키는곳의데이터가 [ 그림 18] 의표시된 0x26 부터의폰트명부분데이터에해당하는것 을확인할수있다. [ 그림 16] CVE-2018-0802 취약점을악용하는폰트데이터 strcpy() 함수가실행되기전후의스택모습은 [ 그림 20] 과같다. AhnLab, Inc. All rights reserved. 18
[ 그림 20]17 CVE-2018-0802 익스플로잇실패시의스택 SUB_41160F() 함수의리턴주소를덮어쓰고자한다면 @12F294 까지만데이터가복사되어야했다. 그러나 [ 그림 20] 의스택데이터에서볼수있는것처럼만일실제로는 @12F2B8 까지데이터가복사되었으며, 이 는결과적으로나중에사용하기위해스택에저장해두었던데이터손상을초래한다. 만일 SUB_41160F() 함수가정상적으로종료된다면리턴주소가 @20202020 으로변경되므로, 해당주소상의코드실행을시도하다가예외가발생했을것이다. 물론, 미리해당주소에메모리공간이할당되어있었고, 실행가능속성이있지않았을경우에한한다. 그러나실제로는 SUB_41160F() 함수가종료되기전부터스택손상으로인한영향이나타난다. 문제의 strcpy() 루틴직후에나타나는 strstr() 함수에서참조하는데이터가올바르지않은주소를참조하게되면서접근위반 (Access Violation) 오류가발생하며, 따라서해당익스플로잇은실패로끝나게된다. AhnLab, Inc. All rights reserved. 19
2.2) EQNEDT32.EXE 버전 2017.08.14.0 환경 ( 보안업데이트적용후 ) 마찬가지로위와동일한 CVE-2018-0802 POC 샘플을 2017 년 11 월보안업데이트가적용된 EQNEDT32.EXE 환경에서사용하여분석하였다. [ 그림 21] 과같이보안업데이트를통해취약했던 SUB_41160F() 내부에데이터크기를검증하는코드가추 가됨에따라원본크기에상관없이최대 0x20 크기만큼만데이터가복사된다. 즉, 계산된문자열길이가 0x21 이상인경우, 0x20 으로길이를강제치환하기때문에더이상스택오버플로우가발생하지않는다. [ 그림 181] 보안업데이트로인해수정된데이터복사구간 그러나해당업데이트에서수정되지않은 SUB_421774() 함수에서는내부의 SUB_421E39() 함수에서여전히 strcpy() 에의한스택오버플로우가발생하며, SUB_421774() 함수종료후리턴주소가 [ 그림 22] 와같이변 경된다. AhnLab, Inc. All rights reserved. 20
[ 그림 192] 보안업데이트적용환경에서 CVE-2018-0802 익스플로잇성공시스택 [ 그림 22] 의스택에서주목할점은리턴주소가덮어써진방식이다. 앞서확인한바와같이 NOP를활용한테스트당시에는 0x98 크기의데이터를사용했지만 POC 샘플에서는 0x96 만큼의데이터를사용했다. 이차이는 0x94의데이터이후에추가되는데이터크기에서기인한다. 4바이트를추가한경우 : 리턴주소덮어쓰기에전체주소복사 0x94 바이트 + 00421773 2바이트를추가한경우 : 리턴주소덮어쓰기에상대주소복사 0x94 바이트 + 0025 4바이트의원래주소 004214E2 에서상위 2바이트를남기고하위 2바이트만 0025로치환되어 00420025로변경됨 메모리상의 @420025 위치에는 EQNEDT32.EXE 내부의특정함수의종료부분의 RETN 명령이존재한다. 해당 RETN 명령이실행되면 POP EIP와동일한효과가발생한다. 즉, CVE-2017-11882와동일하게리턴주소바로직전 (@12F388) 에저장된값 (= SUB_421774() 호출시첫번째인자로전달된값 (= lplogfont = ESI = 쉘코드시작점 ) 으로 EIP를변경하기위한방법이다. AhnLab, Inc. All rights reserved. 21
[ 그림 203] 상대주소로서참조된 RETN 명령어 이전까지는 RETN 명령어의주소를참조할때스택오버플로우를통해리턴주소를덮어쓰는값인 4바이트주소를전부사용했다. 그러나이번경우에서하위 2바이트의상대적인오프셋만사용한이유는 EQNEDT32.EXE 의 ASLR(Address Space Layout Randomization) 을우회하기위한목적으로보인다. 2017년 11 월보안업데이트이전버전의 EQNEDT32.EXE 에는 ASLR이활성화되지않았지만, 해당보안업데이트를위해새로빌드된 EQNEDT32.EXE 에는 ASLR이적용된상태이기때문이다. CVE-2018-0802가제대로동작하기위해서는 2017년 11월보안업데이트가적용되어야한다는전제조건이존재한다. 즉, 해당익스플로잇이동작할 EQNEDT32.EXE 환경에서는 ASLR이활성화된상태이며, 따라서해당프로그램 / 코드가메모리상에로드된베이스주소를보장할수없다. 이러한환경을극복하기위해전체주소 (4바이트) 가아닌상대적인오프셋 (2바이트) 만으로 RETN 명령이있는주소를찾아사용한것으로보인다. [ 그림 214] 2017 년 11 월보안업데이트전후의 EQNEDT32.EXE 의 ASLR 설정값 RETN 명령으로인해 EIP 전환이이루어지면 [ 그림 25] 와같이 strcpy() 시에 ESI 로사용된 @12F3D0 위치로 코드가분기하여쉘코드가실행된다. AhnLab, Inc. All rights reserved. 22
[ 그림 225] CVE-2018-0802 익스플로잇성공후쉘코드 안랩제품의대응현황 안랩 V3 제품군에서는 CVE-2017-11882 및 CVE-2018-0802 취약점관련악성코드를다음과같은진단명으로탐지하고있다. <V3 제품군진단명 > - RTF/Cve-2017-11882 - RTF/Exploit - RTF/Shellcode - X97M/Downloader - PDF/Dropper AhnLab, Inc. All rights reserved. 23
결론 본보고서에서살펴본 MS 오피스수식편집기 (EQNEDT32.EXE) 프로그램의취약점은처음부터존재했음에도 불구하고배포후 17 년이지나보안연구가들이발견할때까지알려지지않았다. 해당취약점이발표된이 후악성코드제작자들은공격적으로이를이용한악성파일을제작, 배포하는사례가다수확인되고있다. 이사례는우리에게시사하는바가크다. 지금이순간에는별다른문제없이사용하고있는프로그램이 라도단지아직알려지지않았을뿐다수의약점이존재할수있으며, 동시에언제라도공격에악용될수 있다는가능성을내포하고있기때문이다. 알려지지않은취약점에의한보안위협의피해를방지하기위해서는프로그램제작사, 사용자, 그리고보안관계자의노력이동반되어야한다. 프로그램제작사는지속적인모니터링과더불어제품의취약점보완시미처해결되지않은취약한요소가존재하지않는지, 혹은예상치못한영향은없는지더욱신중하고면밀하게검토해야한다. 사용자들은최신보안업데이트를적극적으로적용하는습관이필요하다. 또한기업과기관에서는알려지지않은공격에대한대응방안을마련하는한편다양한운영체제및소프트웨어프로그램의보안패치를효율적으로적용할수있어야한다. 특히보안관리자는평소취약점및보안업데이트소식에관심을가져야한다. 최근많은보안연구가들이취약점뿐만아니라보안업데이트에대한분석을수행하고있으며, 업데이트로인해어떠한부분이변경되었는지, 또취약한요소를제대로보완하였는지등에대한상세한자료를공개하고있다. 여기에안랩을비롯한주요보안업체및관련기관에서제공하는위협인텔리전스를적극적으로활용하는노력이필요하다. AhnLab, Inc. All rights reserved. 24
참고자료 [1] https://nvd.nist.gov/vuln/detail/cve-2017-11882 [2] https://nvd.nist.gov/vuln/detail/cve-2018-0802 [3] https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/cve-2017-11882 [4] https://embedi.com/blog/skeleton-closet-ms-office-vulnerability-you-didnt-know-about/ [5] https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/cve-2018-0802 [6] https://0patch.blogspot.kr/2018/01/the-bug-that-killed-equation-editor-how.html AhnLab, Inc. All rights reserved. 25