오픈타입 폰트 취약점 공격, 주의!
지난 11월 8일, 마이크로소프트(Microsoft)는 오픈타입(OpenType) 폰트(font) 취약점과 관련된 보안 패치를 배포했다. 오픈타입 폰트는 마이크로소프트와 어도비(Adobe)가 함께 개발한 폰트 형식으로, 폰트 구조로 인해 발생한 취약점이 공격의 통로가 될 수 있는 것으로 확인됐다. 오픈타입 폰트에서 취약점이 발생하게 되는 구체적인 과정과 피해 예방을 위한 방법을 살펴보자.
오픈타입 폰트는 ‘*.otf’ 또는 ‘*.ttf’ 형태를 갖는다. 폰트 모양을 결정하는 데이터가 CFF(Compact Font Format) 형식인지 트루타입(TrueType) 형식인지에 따라 폰트 파일의 시작 부분 첫 4 바이트 값이 달라지는데, [그림 1]과 같이 CFF 형식의 오픈타입 폰트는 0x4F54544F(‘OTTO’), 트루타입 형식의 오픈타입 폰트는 0x00010000의 값을 가진다.
[그림 1] CFF 형식(위)과 트루타입 형식(아래)
이번에 취약점이 발견된 폰트의 경우, 파일의 첫 4 바이트 값이 ‘OTTO’로 시작되는 CFF 형식의 오픈타입 폰트였다.
오픈타입 폰트가 어떻게 구성되어 있는지 살펴보자. 오픈타입 폰트는 기본적으로 [그림 2]와 같이 오프셋 테이블(Offset Table)과 테이블 레코드(Table Record) 및 다수의 테이블 데이터로 구성된다. 오프셋 테이블(크기: 0x0C)에는 폰트의 종류 및 테이블의 개수 정보가 존재한다. 또한, 각 테이블마다 테이블 레코드(크기: 0x10)가 존재하고, 테이블 레코드에는 테이블의 이름, 크기, 시작 위치, 체크섬이 표기되어 있다.
테이블 레코드에 표기된 위치를 따라가면 각각의 테이블 데이터가 존재하는데, 8개의 필수 테이블인 cmap, head, hhea, hmtx, maxp, name, OS/2, post와 더불어 해당 오픈타입 폰트의 종류에 따라 추가 테이블이 존재한다. CFF 형식인 경우에는 CFF, CFF2, VORG 등의 테이블이, 트루타입 형식인 경우에는 cvt, fpgm, glyf, loca 등의 테이블이 추가된다.

취약점이 발견된 폰트는 CFF 형식의 오픈타입 폰트이기 때문에 내부에 CFF 형식의 데이터를 포함하고 있으며, CFF라는 이름의 테이블이 존재한다. 그런데 이 테이블 내부에 어도비에서 정의한 스펙(ADOBE TECHNICAL NOTE #5176)을 따르지 않는 구조가 발견되었으며, 이로 인해 취약점이 발생하고 공격자가 임의의 코드를 실행할 수 있는 것으로 확인됐다.

구체적으로 살펴보면, 4 바이트 크기의 파일 시작 부분(0X01000403) 이후에 네임 인덱스(NAME INDEX)가 등장하는데, 어도비 스펙상 네임 인덱스의 폰트명 길이는 127 바이트 이하여야 정상이다. 하지만 [그림 3]에서 네임 인덱스의 폰트명 크기가 127 바이트를 초과한 0X2C0으로, 어도비 스펙을 따르지 않고 있다. 폰트 파일을 처리하는 윈도우(Windows) 내부 모듈인 ATMFD.DLL에서는 이와 관련하여 폰트명이 127 바이트 이하인지 아닌지 여부를 확인하는 경계 체크 부분이 존재하지 않는 것으로 파악됐다. 이로 인해 해당 영역의 데이터를 복사할 때 초과되는 범위의 데이터까지 함께 복사되는데, 초과된 범위의 데이터가 공격자에 의해 추가된 악성코드일 수 있는 것이다.
오픈타입 폰트 취약점으로 인한 피해를 예방하기 위해 윈도우를 사용하는 모든 사용자는 마이크로소프트에서 배포한 보안 패치(MS16-132, CVE-2016-7256)를 다음 경로에서 다운로드하여 적용할 것을 권장한다.
https://technet.microsoft.com/ko-kr/library/security/mt674627.aspx |
[표 1] 마이크로소프트 보안 패치 경로
또한 외부로부터 전달된 의심스러운 형태의 폰트 파일(*.otf)이나 문서 파일에 대해서는 가급적 실행하지 않는 것이 좋다.
V3 제품에서는 해당 폰트 취약점 악성코드를 다음과 같은 진단명으로 탐지하고 있다.
<V3 제품군의 진단명>
OTF/Cve-2016-7256 (2016.10.29.00)
[참고자료]
Microsoft 보안 공지 MS16-132: https://technet.microsoft.com/ko-kr/library/security/ms16-132.aspx
CVE-2016-7256: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7256
OpenType Font Specification: https://www.microsoft.com/typography/otspec/otff.htm
Compact Font Format Specification: https://partners.adobe.com/public/developer/en/font/5176.CFF.pdf
- AhnLabASEC분석팀