본문 바로가기
악성코드 정보

코드 상의 특징을 통해 살펴본 2가지 공격그룹 (한글문서 취약점)

by 분석팀 2019. 11. 18.

안랩 ASEC 분석팀은 한글 EPS 취약점(CVE-2017-8291)을 이용하는 악성코드에서 쉘코드(ShellCode)를 실행하기 위한 전 단계에서 제작자 실수로 추정되는 코드상의 오류가 확인되었다. 전체 악성코드 동작에는 영향이 없지만, 이러한 코드상의 실수가 2018년부터 최근 한글 문서 악성코드에서도 지속적으로 발견되고 있다. 또한, 이러한 코드상의 실수가 없는 형태도 함께 발견되고 있는 점을 볼 때, 코드상의 특징을 바탕으로 제작자를 2개의 그룹으로 분류할 수 있다.

한글 EPS 취약점 파일들은 악의적인 쉘코드를 실행하기 전 공통적으로 해당 메모리 영역의 속성을 변경하기 위해 VirutalProtect 라는 API를 사용한다. 코드상의 오류라고 판단하는 부분은 VirutalProtect API 호출을 통해 쉘코드 영역의 메모리의 속성을 변경(PAGE_EXECUTE_READWRITE) 시, 변경하고하 하는 영역이 쉘코드 주소가 아닌 쉘코드 크기 값으로 잘못 전달되는 부분이다.

하지만, 이러한 코드상의 오류에도 불구하고 동작에 문제가 없는 것은 취약한 "gsdll32.dll"을 실행하는 "gbb.exe"와 "gswin32c.exe"에 DEP(데이터 실행 방지) 옵션이 해제되어 있기 때문이다.

[그림 1] VirtualProtect 호출 실패 (0xC0000045) -> STATUS_INVALID_PAGE_PROTECTION

VirtualProtect 호출에 실패하는 한글 문서 파일은 [그림 2]과 같이 ROP(Return-Oriented Programming) 가젯 구성 시, 스택에 저장된 0x74948C50(VirtualProtect 주소)와 0x02496AF8(쉘코드 주소)값 사이에 리턴 주소 값이 누락된 것을 확인할 수 있다.

[그림 2] 잘못된 가젯 구성 사례 - (KINU 전문가 자문 요청사항(한미동맹과 한중관계).hwp)

리턴 주소 값이 누락되었기 때문에 VirtualProtect 호출 시 공격자가 의도한 쉘코드 주소의 메모리 보호 속성 변경이 아닌 쉘코드 사이즈(0x968)에 대한 메모리 보호 속성 변경을 시도하게 된다. 따라서 [그림 2] 쉘코드는 잘못된 메모리 주소의 보호 속성을 시도함으로써 결과적으로 VirtualProtect 호출에 실패한다.

이와 반대로 [그림 3] 처럼 ROP 가젯을 정확하게 구성하여 유포한 사례도 있다. 이 경우 ROP 가젯 구성 시 VirtualProtect 호출 뒤에 리턴할 주소를 포스트 스크립트 코드에 삽입하였기 때문에 에러코드가 반환되지 않고 정확하게 메모리 보호 속성 값을 변경할 수 있다.

[그림 3] 정확한 가젯 구성 사례 - (미국 라스베가스 CES 2020 참관단 참가신청서.hwp)

 다음 [표 1]과 [표 2]는 18년도부터 최근까지 바이러스 토탈(www.virustotal.com)에 조회 가능한 악성 한글 문서 파일의 ROP 가젯 구성 성공 유무를 기준으로 2가지 형태로 파일을 분류한 것이다.

날짜 문서제목
2019-10-16 KINU 전문가 자문 요청사항(한미동맹과 한중관계).hwp
(MD5 : 42ae424f27d83fa132b2967b64f6ba21)
2019-06-10 청구인용.hwp
(MD5 : 2bc233b892b8308cebadb09ae915b8d9)
2019-06-07 이벤트 당첨자 개인정보 수집 및 이용 동의 안내서.hwp
(MD5 : 34ef0e67dad9ea8540f0fb3d91468dcf)
2019-04-10 2018년 고속철도 개통 현황.hwp
(MD5 : a5320c6a6afea3c7cc21bfcdbd5e2f6b)
2019-02-21 한미우호협회.hwp
(MD5 : 48d9e625ea3efbcbef3963c8714544a7)
2019-02-07 보도자료 양식.hwp
(MD5 : 48d9e625ea3efbcbef3963c8714544a7)
2018-09-17 2018년도 국정감사계획서-수정(안).hwp
(MD5 : 98b68c2f2fdc67db371bb6783b811c8f)
2018-06-11 미북 정상회담 전망 및 대비.hwp
(MD5 : c87696a3224f97e30200a93021e44ab6)

[표 1] ROP 가젯 구성 실패 사례

날짜 문서제목
2019-10-24 미국 라스베가스 CES 2020 참관단.hwp
(MD5 : f865ea5f29bac6fe7f1d976a36c79713)
2019-07-22 중고폰매각 공고문_19년 7차.hwp
(MD5 : 7d1d7ffee0e2f2778dc6e941bcafbd08)
2018-10-23 국가핵심인력등록관리제등검토요청(10.16)(***변호사).hwp
(MD5 : 0316f6067bc02c23c1975d83c659da21)
2018-09-13 일일동향보고.hwp
(MD5 : f392492ef5ea1b399b4c0af38810b0d6)

[표 2] ROP 가젯 구성 성공 사례

ROP 가젯 구성 실패의 원인을 포스트 스크립트 코드를 통해 살펴보면 [표 1] 사례의 모든 한글 문서 악성코드에서는 [그림 4]처럼 공통적으로 VirtualProtect 호출 후 리턴을 위한 쉘코드 주소가 누락되었다.

[그림 4] KINU 전문가 자문 요청사항(한미동맹과 한중관계).hwp 내부 포스트 스크립트 코드

반면에 ROP 가젯을 정확하게 구성한 한글 문서 악성코드의 포스트 스크립트는 [그림 5]와 같이 리턴할 쉘코드 주소를 가젯에 추가로 저장하는 것을 확인할 수 있다.

[그림 5] 중고폰매각 공고문_19년 7차.hwp 내부 포스트 스크립트 코드

따라서 동일한 취약점을 사용함에도 불구하고 가젯 구성 방식이 다른 형태로 유포되고 있는 것은 공격자들이 사용하는 악성 한글 문서 제작 시 사용하는 빌더(Builder)는 최소 두 가지이며, 악성 포스트 스크립트(PS)의 가젯 구성 방식 분류를 통해서 공격 그룹을 추적, 분류하는데 유용한 정보로 활용될 수 있다.

현재 안랩 제품에서는 EPS 취약점을 사용하는 한글 문서 악성코드에 대해 다음과 같이 진단하고 있다.

[파일진단]

  • EPS/Exploit.S1 ~ EPS/Exploit.S8
  • EPS/Exploit
  • HWP/Exploit

[행위진단]

  • Malware/MDP.Behavior.M2006
  • Malware/MDP.Behavior.M2037
  • Malware/MDP.Behavior.M2411

 

 

댓글