2016 11 8, Microsoft 에서 OpenType 폰트 취약점 관련하여 보안패치를 배포하였다. (MS16-132, CVE-2016-7256) 해당 취약점은 국내에서 최초 발견 및 보고된 것으로 피해를 예방하기 위해 아래의 보안패치를 적용하는 것이 필요하다.

[보안패치] https://technet.microsoft.com/ko-kr/library/security/mt674627.aspx

 

OpenType 폰트는 Microsoft Adobe 가 함께 개발한 폰트 형식으로, .otf 또는 .ttf 확장자를 갖는다. 폰트의 모양새를 결정하는 데이터가 Compact Font Format (CFF) 형식인지 TrueType 형식인지에 따라 파일의 시작부분 첫 4 바이트의 값이 달라지는데, 아래의 [그림 1]과 같이 CFF 형식의 OpenType 폰트는 0x4F54544F("OTTO"), TrueType 형식의 OpenType 폰트는 0x00010000 의 값을 갖는다.

이번에 발견된 취약점 폰트의 경우 파일 첫 4 바이트가 "OTTO" 로 시작되는, CFF 데이터 형식의 OpenType 폰트이다.

[그림 1] CFF 형식() TrueType 형식(아래)


OpenType 폰트의 구조는 [그림 2]와 같이 Offset Table Table Record 그리고 다수의 Table 데이터로 구성된다. Offset Table(0x0C 크기)에는 폰트의 종류 및 Table 의 개수 정보가 존재한다. 또한, Table 마다 Table Record(0x10 크기)가 존재하고, Table Record에는 Table 의 이름, 크기, 시작위치, 체크섬이 표기되어 있다. 

Table Record에 표기된 위치를 따라가면 각각의 Table 데이터가 존재하는데, 8개의 필수 테이블(cmap, head, hhea, hmtx, maxp, name, OS/2, post)과 더불어 해당 OpenType 폰트의 종류에 따라 추가 테이블이 존재한다. CFF 형식일 경우에는 CFF, CFF2, VORG 등의 테이블이, TrueType 형식의 경우에는 cvt, fpgm, glyf, loca 등이 여기에 해당한다.

 

[그림 2] OpenType 폰트 구조

 

해당 취약점 악용 폰트의 경우, 내부에 CFF 형식의 데이터를 포함하며 따라서 CFF 라는 이름의 테이블이 존재한다. 해당 테이블 내부에서 Adobe 에서 정의한 스펙(Adobe Technical Note #5176)을 따르지 않는 구조가 발견되었으며, 이로 인해 취약점이 발생하고 공격자가 임의의 코드를 실행할 수 있는 것으로 확인되었다.

취약점이 발생하는 CFF 테이블 데이터의 내부 구조는 [그림 3]과 같다. 4 바이트 크기의 헤더부분(0x01000403) 이후에 등장하는 것은 Name INDEX 부분이며, Adobe의 스펙을 따르지 않는 내용은 다음과 같다.

  [*] Name INDEX 의 폰트명의 길이는 127 바이트 이하 (취약점파일: 0x2C0)

[그림 3] CFF 테이블의 취약점 발생부분

 

폰트 파일을 처리하는 Windows 내부 모듈인 ATMFD.DLL 에서는 이와 관련하여, 폰트명이 실제 127 바이트 이상인지 여부를 확인하는 경계 체크 부분이 존재하지 않는 것으로 파악되었으며, 이로 인해 해당 영역의 데이터를 복사할 때 초과되는 범위의 데이터가 함께 복사되어 이후 취약점 발생에 영향을 주는 것으로 확인하였다.

 

2016118Microsoft 에서 해당 취약점에 대한 패치를 배포 하였으므로, Windows 를 사용하는 모든 사용자는 최신 업데이트를 적용할 것이 권장된다. 또한 외부로부터 전달된 의심스러운 형태의 폰트파일(*.OTF) 또는 문서파일에 대해서는 가급적 실행하지 않는 것이 권장된다.

 

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

신고
Posted by disruption