注意!出现了利用Open Type字体漏洞的攻击
今年11月8日,微软公司发布了Open Type字体漏洞相关的安全补丁。Open Type字体是由微软公司和Adobe公司联合开发的字体类型,OpenType标准还定义了OpenType文件名称的后缀名。包含TureType字体的OpenType文件后缀名为.TTF,包含PostScript字体的文件后缀名为.OTF。如果是包含一系列TrueType字体的字体包文件,那么后缀名为.TTC。(来源:百度百科) 最近发现Opentype字体结构存在漏洞,黑客利用该漏洞可以获取破坏用户系统的信息。 该漏洞最初发现于韩国。
本文讲述Open Type字体发生漏洞的具体过程和其预防方法。
Open Type字体的文件名根据字体轮廓分别使用.OTF或.TTF扩展名。根据决定字体轮廓的数据类型为CFF(Compact Font Format, 压缩字体格式)或者是True Type字体,文件头起始的四个字节的值会不同。如【图 1】所示,CFF的Open Type字体的值为0x4F54544F(OTTO),而True Type的Open Type字体的值为0x00010000。

【图 1】 CFF(Compact Font Format, 压缩字体格式)
此次被发现漏洞的字体是CFF的Open Type字体,文件头起始的四个字节的值由“OTTO”开始。
下面来看一下Open Type字体的构成。如【图 2】所示,Open Type字体包含了偏移表(Offset Table)和表记录(Table Record)及一定数量的表数据。偏移表(大小:0x0C)包含了字体的类型和表的数量信息。另外,每个表包含了表记录(大小:0x10),表记录包含了表的名称、大小、开始位置和校验和。
沿着表记录(Table Records)标记的位置,可以看到每个表数据,同时存在8个必须的表,如cmap、head、hhea、hmtx、maxp、name、OS/2、post,还根据Open Type字体的类型存在追加表。数据类型为CFF的时候,增加CFF、CFF2、VORG等表;True Type的时候增加cvt、fpgm、glyf、loca等表。

【图 2】Open Type字体结构
被发现漏洞的字体类型是CFF的Open Type字体,因此内部包含了CFF数据,并存在CFF名称的表。但在该表内部发现了不遵从Adobe公司定义的规格(ADOBE TECHNICAL NOTE #5176)的结构,由此而发生了漏洞,攻击者利用该漏洞可以执行任意代码。

【图 3】CFF表发生漏洞的部分
具体看一下。大小为四个字节的文件头(0X01000403)后面紧跟着Name Index。Adobe的规格来看,Name Index的字体名称的大小为127字节以下才是正常。但是如【图 3】所示,Name Index的字体名的大小为0X2C0,超过了127字节。而处理字体文件的Windows模块ATMFD.DLL无法校验字体名大小超过127字节与否。因此,当复制该领域的数据时,超过范围的数据也一起被复制,而超过范围的数据则有可能是由攻击者添加的恶意软件。
为了预防Open Type字体漏洞带来的安全威胁,Windows用户需要下载微软公司发布的安全补丁(MS16-132, CVE-2016-7256),该补丁程序可以点击下面链接下载。
https://technet.microsoft.com/zh-cn/library/security/mt674627.aspx
另外,最好不要运行从外部收到的可疑形式的字体文件(*.otf)。
V3产品可以检出利用该字体漏洞的恶意软件。
<V3产品群诊断名>
OTF/Cve-2016-7256 (2016.10.29.00)