赵 露,康艳荣,刘思棋,龙 源,郭丽莉
(1.公安部物证鉴定中心,北京100038; 2.北京北亚安数科技有限公司,北京100094)
硬盘固件是控制着硬盘进行数据读写、管理数据存放位置、记录缺陷扇区等操作的特殊软件。通常硬盘固件是不会被计算机操作系统识别,传统检验设备和软件无法访问硬盘固件,因此在电子数据取证过程中,硬盘固件区往往不被研究人员所重视。2015年,卡巴斯基安全实验室披露了一系列的硬盘固件区病毒[1]引起了国内外电子物证、信息安全和数据恢复等领域研究人员的广泛重视[2]。有技术能力的犯罪人员(如电信诈骗,网络赌博等)可以通过修改硬盘固件将重要数据隐藏起来[3],同时硬盘固件区隐藏的病毒具有难发现难清除的特点[4],这意味着现有的检验手段和数据恢复方法有可能存在检测不全面的风险。
硬盘固件程序一直是各硬盘厂商的核心机密,因此对于硬盘固件的研究涉及到较多的逆向分析和破解。国际上针对硬盘固件区数据的研究比较权威的是俄罗斯ACE实验室及其出品的PC-3000 UDMA,但是对于机械硬盘市场一大巨头的希捷硬盘目前只能做到获取硬盘固件区系统文件,而不能获取全部硬盘固件区数据。相对来说另一款市场占有率较大的西部数据硬盘固件结构较简单,由此展开的研究较多。研究人员分别通过联合测试工作组(Joint Test Action Group,JTAG)标准接口连接[5]、编程器连接[6]、通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口连接等多种方式对西部数据某一型号硬盘的带电可擦可编程只读存储器(electrically erasable programmable read only memory,EEPROM)中的引导程序进行了读取、分析和修改[7]。也有人通过对硬盘固件区中缺陷替换机制[8]等方面来分析篡改硬盘固件对电子取证造成的影响并提出相应策略[9]。
由于我国尚不具备硬盘固件研发技术,因此研究起步较晚,并且主要应用于硬盘故障维修领域。产品方面如成都效率源公司推出的故障硬盘数据恢复产品、北京北亚硬盘固件维修工具等,可以解决硬盘固件问题造成的数据丢失等问题。学术研究方面,国内一些研究人员对硬盘固件的虚拟[10]、故障预测[11]、硬盘固件病毒防治[12]和硬盘固件漏洞定位[13]等方面进行了研究,不过这些研究主要是应用PC-3000等类似工具获取到硬盘固件数据后进行硬盘固件结构的分析及其它应用,没有涉及到对硬盘固件数据提取等前期基本技术方法的研究。
本文将对希捷官方硬盘固件升级包进行逆向分析,由此给出一种基于串口模式获取希捷硬盘固件级工厂指令的方法。首先,通过清空电路板只读内存镜像(read only memory image,ROMI)数据后,进行串口操作的方式,确定工厂指令操作硬盘的可行性;再利用希捷厂商硬盘固件升级包中数据进行分析,发现其中的工厂指令帮助文档,用其获取工厂指令工作条件及使用方法;最后,通过获取到的工厂指令进行硬盘固件读取实验,证明了通过工厂指令方式操作硬盘固件的可行性和有效性。
希捷机械硬盘除了数据接口和供电接口外,还有一个接口平时并不常用,就是硬盘的串口,在硬盘正常的数据读写过程中是不需要使用的。这个接口是厂商在硬盘出厂前进行调试,或者维修硬盘故障时使用的接口[14]。基于硬盘串口的这些作用,尝试通过串口对硬盘参数信息等硬盘固件数据进行读取和修改。
为了确定通过串口模式使用工厂指令方式对硬盘固件进行操作的可行性,首先需要确定串口模式下的工厂指令在硬盘中的工作条件,明确通过工厂指令方式是否能够对希捷硬盘进行足够的控制权,从而获取到硬盘固件区的全部数据。将电路板ROM中的数据全部清空,再通过超级终端软件[15]发送命令观察硬盘是否还会显示回显数据。如果仍然能够显示则表明工厂指令运行级别低于硬盘电路板ROM硬盘固件,由电路板主芯片提供对外数据连接,可以通过工厂指令方式对希捷硬盘进行完全控制,包括由于硬盘固件或者坏道等原因不能正常识别的硬盘。
首先将一块希捷硬盘电路板连接到编程器并使用编程器清空电路板上全部ROM数据,打开超级终端软件,使用通用串行总线(universal serial bus,USB) 转逻辑门电路(transistor-transistor logic,TTL)转接线连接硬盘,可以看到硬盘主芯片的回显信息为图1,说明希捷硬盘在没有电路板ROM的情况下,主芯片可以独立工作,而且支持对外进行TTL连接。从回显信息中可以查看到该模式下支持的命令有“DS”、“AP”、“WT”等一系列命令。在当前模式下输入回显信息列出的任一指令,如“AP10”,硬盘依旧有响应,这说明工厂指令运行在希捷硬盘最底层,通过工厂指令方式对希捷硬盘固件进行操作的方法是可行的。
图1 电路板ROM程序清空后硬盘回显信息
通过串口模式对硬盘固件进行操作需要输入一些特殊命令,但因操作硬盘固件的指令是硬盘厂家的核心机密,无法在公开渠道获取到。不过,希捷公司对出厂的硬盘会不定期发布硬盘固件升级包来进行一些硬盘固件修补操作,以提高硬盘性能和修复一些错误,这其中必然包含部分硬盘固件数据。作为唯一可以获取到官方硬盘固件数据的合法途径,对硬盘固件升级包进行研究是掌握硬盘固件结构和指令功能的一个方法,因此,希捷官方发布的硬盘固件升级包成为了用来研究硬盘固件指令的一个对象。
以希捷“Barracuda 7200.12”系列硬盘为例,该系列硬盘在希捷官网提供硬盘固件修复程序,新的硬盘固件版本为CC49[16],通过官网查询该版本硬盘固件适用型号及对应容量如表1。
通过希捷官方网站下载后缀名为“.iso”的硬盘固件升级程序,对其进行解压,得到如图2中的文件。其中如“Autorun.inf”、“README.txt”等文件的作用比较一目了然不再赘述,另外发现一个名为“PH-CC49.ima”的文件,通过后缀名分析该文件为一个软盘镜像文件。
使用16进制查看器软件(如 WinHex)打开“PH-CC49.ima”文件,如图 3,从解析出的文件头信息中可知该文件是一个被FreeDOS[17]操作系统格式化出来的FAT12文件系统镜像。
表1 CC49版本硬盘固件升级包适用硬盘型号
图2 CC49版本硬盘固件升级包解压缩
图3 “PH-CC49.ima”文件头解析
进一步解析该文件系统,发现一个名为“LOD.zip”的压缩文件,如图4,提取并解压缩该文件,如图5。发现文件中有三个后缀名为“.LOD”的未知文件,且文件名有规则性,分别为“PHCC491H、PHCC492H、PHCC494H”。
通过表1可知“CC49”版本的硬盘固件支持硬盘容量从160G到1T不等,所以,分析“1H”、“2H”、“4H”分别代表对应支持的硬盘的磁头数。例如ST3160318AS是160G硬盘,硬盘中只有一个磁头所以使用PHCC491H文件进行硬盘固件升级,ST31000528AS是1T容量有4个磁头就需要使用PHCC494H进行升级。
图4 “PH-CC49.ima”文件系统解析
图5 “LOD.zip”文件解压缩
继续对LOD文件进行分析,发现大量美国信息交换标准代码(American standard code for information interchange,ASCII)字符,类似于一种特殊命令,而且这些命令自带帮助说明,并有工作级别区分,且工作级别众多,有“6级”、“全部级别”等和改变指令级别的命令“/”,如图6。已知在某个级别下的Q命令为硬盘所有指令的详细帮助文档,通过运行这个命令可以对了解硬盘固件的大体信息有很大程度的帮助。
使用USB转TTL转接线连接到硬盘串口,通过超级终端软件从1级到Z级依次测试能够显示完整指令帮助信息的Q命令的工作级别。测试完成发现工作在C级别下的Q命令为指令帮助,可以打印出硬盘所支持的所有指令参数,如图7,可以通过指令的描述信息进一步研究指令的具体功能。
图6 LOD文件中的部分指令级别说明
图7 C级别下的Q命令功能说明
通过对各命令级别和指令的功能进行分析,发现通过工厂指令可以实现很多重要的功能,如参数修改,清空自我监测分析与报告技术(selfmonitoring, analysis and reporting technology,SMART)表中数据,硬盘固件数据读取等多种功能,由于工厂指令级别和指令众多无法详述,现将整理出的部分较常用的工厂指令功能和指令对应级别列举如表2。
表2 常用希捷机械硬盘工厂指令及功能
通过对工厂指令功能分析发现硬盘工厂指令可以实现很多功能,比如硬盘固件的读取,硬盘参数修改等等,由于硬盘固件数据的完整读取是进行硬盘固件结构分析的前提,选取比较有代表性的几款希捷硬盘型号,并分别通过工厂指令方式和使用PC-3000进行硬盘固件数据读取,并对比读取数据大小。
首先通过超级终端获取每块硬盘固件区范围,计算硬盘固件区数据大小并记录;再使用PC-3000读取硬盘固件区数据,记录读取数据大小;最后再使用上文获取的工厂指令方式来读取同一块硬盘的硬盘固件区数据,记录其读取的数据大小。
实验结果如表3。实验结果显示:
(1)通过PC-3000读系统文件功能获取的硬盘固件数据小于硬盘固件区数据实际大小;
(2)通过工厂指令方式读取的硬盘固件区数据大于通过PC-3000读系统文件功能获取到的硬盘固件区数据大小;
(3)通过工厂指令方式读取硬盘固件区数据大小与硬盘固件区数据实际大小基本一致,但是部分型号读取的硬盘固件区数据与硬盘固件区数据实际大小有所差异。
经分析,造成个别型号硬盘使用工厂指令方式读取的硬盘固件镜像数据与硬盘固件区数据实际大小存在差异的原因是由于硬盘固件区数据实际大小是根据硬盘固件区起始地址和结束地址计算出来的,这其中包含没有被磁化使用的磁道,这样的磁道无法存储数据,因此在使用工厂指令方式进行读取的时候也无法读取,造成读取数据比硬盘固件区实际数据大小略小。
通过以上实验结果和分析,说明通过工厂指令方式可以读取希捷硬盘固件镜像数据,并且读取硬盘固件镜像数据较完整,结果优于通过PC-3000读系统文件功能获取的硬盘固件数据。
表3 硬盘固件读取实验结果
硬盘固件数据是控制硬盘运行的核心程序,对于硬盘固件的研究无论在电子取证、信息安全、数据恢复等领域都是非常重要的课题,而对于硬盘固件的研究应该建立在对硬盘固件数据的完全获取和操作的基础之上。文中提出的通过逆向分析希捷硬盘固件升级程序得到工厂指令,再在串口模式下通过工厂指令操作希捷硬盘的方法,通过实验证明了可以有效对希捷硬盘固件数据进行完整提取,为电子取证和信息安全领域的硬盘固件研究提供一种可行的技术方法。由于篇幅和研究时间有限,文中仅仅介绍了硬盘固件级工厂指令的一种应用方法,在获取到硬盘固件镜像之后通过对硬盘固件的分析可以产生更多应用,如篡改检测,隐藏数据恢复等,今后课题组将对工厂指令的应用方法进行更多研究,并将研究拓展到更多型号和品牌的硬盘。