2014年,IOActive披露了影响多类SATCOM设备的一系列袭击,其中一些部署在船舶上的。毫无疑问,海上资产是应该重点关注的目标,但我们不能只把眼光放在船舶或者大型游轮的通讯设备上。为了应对这种情况,IOActive提供了评估船舶系统和设备的安全态势的服务。
海事安全论
在港口、船舶和海事范围,有着各种设施和多种设备系统,它们对于各国各部门有着重要意义,我们需要花精力去保障它们的安全。
港口安全指的是保护这些海上资产不受盗版行为、恐怖主义,以及其他非法走私活动的侵害。然而,最近有些事件似乎表明,网络攻击这个行业似乎被低估了。随着威胁态势的发展,政府的流程和政策必须考虑改进,以适应这些新的攻击场景。
比如:
https://www.federalregister.gov/articles/2014/12/18/2014-29658/guidance-on-maritime-cybersecurity-standards http://www.gao.gov/assets/670/663784.pdf
这篇文章描述了IOActive某项研究,这是一种船舶上的设备航行数据记录仪(VDR)。为了更加了解这些设备,我将解释下在Furuno VR-3000设备中发现的隐秘和漏洞。
什么是航行数据记录仪
http://www.imo.org/en/OurWork/Safety/Navigation/Pages/VDR.aspx
这玩意儿就相当于飞机的黑匣子,它会记录一些重要数据,如雷达图像、定位、速度和频段等等,这些是可以用来了解事故的根源的。
真实的事件
几年前,海盗行为每日都在上演,几乎每天都有相关新闻报道。因此,民族国家和渔业、船运公司决定派遣军队或者雇佣军,去保护他们的船队。
2012年2月15日,意大利海军陆战队枪杀了Enrica 商船上的两名印度渔民。据传,这群大兵以为自己被海盗袭击了。这次的恶性事件,直接导致意大利和印度之间外交关系极度恶化,并且一直持续到现在,事见:
https://en.wikipedia.org/wiki/Enrica_Lexie_case
神秘的是,由 VDR(航行数据记录仪)和传感器储存的,在事故发生那段时间的音频数据竟然损坏了,有关部门无法利用它调查出到底发生了什么。印度时报指出,航行数据记录仪或许本可以给当局提供事情发生的原委:
http://timesofindia.indiatimes.com/city/chennai/Lost-voice-data-recorder-may-cost-India-Italian-marines-case/articleshow/473559725pxs
奇怪的是,这次事件中遭到破坏的VDR是由Furuno生产的。Kerala最高法院的文件介绍了这个事情:
http://indiankanoon.org/doc/187144571/
然而,我们不能肯定Enrica商船配备的是否是VR-3000。这里备注一下,该船舶制造于2008年,而Furuno的VR-3000是于2007年发布的。
就在几周后,在2012年3月1日,一艘挂着新加坡国旗的货船MV. Prabhu Daya,在Kerala 海岸卷入了一场肇事逃逸事件。在这次事件中,有三个渔民死去,一个不知所踪后来被渔船救起。印度当局发起了对事件的调查,逮捕MV. Prabhu Daya的船长:
在此过程中,几家印度报纸报道了一个有趣的细节:
http://www.thehindu.com/news/national/tamil-nadu/voyage-data-recorder-of-prabhu-daya-may-have-been-tampered-with/article2982183.ece
那么,到底发生了什么呢?
从安全的角度来看,VDR扮演了一个极其有趣的角色。如果你想监视船舶的活动情况,或者想破坏敏感数据。可能会把你的船员置于困难之地,而VDR则是事情的关键。
大家要知道,VDR能提供给当局或者第三方取证调查所需要的重要信息。然而,如果黑客拥有精确改变数据的能力,也可以发动反取证攻击,就如前面提到的那次Enrica数据毁灭事件一样。
VR-3000探究和hack
这次像往常一般,我并没有去接触硬件。但是,我玩了点小花招,找出了目标VDR的固件和软件。下面要讲述的细节,是基于静态分析和用户模式QEMU仿真,这个已经在以前的博文中提过。
基本上,在DCU(数据采集单元)里,有一个具有多种通信接口(如USB、IEEE1394、LAN)的linux机器。在DCU里,还有一个备份硬盘,其中拷贝了部分DRU(数据记录单元)的数据,这里的DRU是为了保护数据不被意外事件所侵害。
它还包含flash闪存,可以存储12小时的数据。这个单元存储了所有必要的导航数据,桥会话、VHF 会话的状态数据,以及雷达图像。
IMO(国际海事组织)建议厂商为所有在2006年7月1日后安装的VDR和S-VDR系统,提供一个将机器里面的数据提取到笔记本电脑的方法。我们需要制造商提供提取数据的软件,提取数据的指令,以及连接记录设备和计算机之间的线缆。
http://www.furunousa.com/ProductDocuments/VR3000%20Data%20Extraction%20Instructions%20for%20version%202.xx.pdf http://www.furunousa.com/ProductDocuments/VR3000%20LivePlayer%20V4%20Operator's%20Manual%20%20for%20Version%202.xx.pdf http://www.furuno.fr/Multimedia/VR3000_VR3000S_OME-G1.pdf
有趣的是,在花了几个小时反编译不同的二进制文件后,发现该设备明显不太安全,其中存在多个缓冲区溢出漏洞和命令执行漏洞。并且,升级固件的机制也是存在漏洞的,加密亦有缺陷。可以说,几乎整个设计都能被称为不安全的。
比如执行这个函数,从Playback软件里提取数据,可以绕过身份验证。对于那些想知道加密器是什么的,我只给出一个词:Scytale(某种密码):
在对该二进制服务的进一步挖掘后,我们发现了一个漏洞。它允许未经身份认证的黑客远程访问并攻击VR-3000,以root权限任意执行命令。这个漏洞足以完全拿下设备,因为黑客可以远程访问、修改、删除储存在船舶设备里的数据,其中包括语音对话、雷达图像和导航数据:
VR-3000可以在windows下软件VDR Maintenance Viewer(客户端)的帮助下,进行固件更新,这是Furuno的专用软件。
VR-3000固件(服务端)包含一个二进制模块,它用来实现固件更新逻辑(moduleserv)的一部分。
这个服务器监听的是10110/TCP端口:
在服务端(DCU)和客户端 (VDR Maintenance Viewer, LivePlayer之类的),都会使用一个专用的面向连接的二进制协议。基本上,每个数据包都可能包含一连串的数据单元,根据自身的类型,将包含不同类型的数据。
Moduleserv的几个控制消息,旨在控制固件升级的过程,让我们来分析下它是如何处理SOFTWARE_BACKUP_START的请求的:
一个由黑客控制的字符串,可以执行一个不会被正确过滤的命令。因此,这个漏洞允许黑客不经过身份验证,远程利用root权限执行任意命令。
通过这一点,黑客可以任意修改储存在DCU里的数据,比如在桥上删除特定的会话,删除雷达图像、改变速度、定位数据。黑客也可以利用VDR监控船员,因为它至少在桥上是直接连到麦克风上的。
然而,DCU被攻陷是不足以掩盖黑客的踪迹的,它只包含一个备份硬盘,这个本来风险就大。进行反取证的关键在于设备DRU。存在漏洞的DCU让黑客获取了权限,同时也能删除、更迭DRU里面的数据。这个单元是由一个 IEEE1394接口直连的,下图显示了DRU的结构:
漏洞的后续跟踪
在IMO的解决方案MSC.233(90)出来前,VDR没有遵循可以防止数据篡改的安全标准。考虑到我们演示的设备可以被黑客成功拿下,因此从设备里收集的数据都应该仔细评估和验证,检测潜在被篡改的迹象。
IOActive负责任地进行了漏洞披露,在2014年10月告知了ICS-CERT漏洞相关的细节。ICS-CERT与JPCERT/CC联手,联系了Furuno 复现和验证了漏洞。Furuno表示他们会争取在2015年的某个时间点,为用户提供补丁。然而,IOActive现在并没有发现有细节表明补丁已经打上。
本文撰写参考
1. http://www.ioactive.com/alerts/maritime-vessel-ship-security-assurance.html 2. http://blog.ioactive.com/2013/09/emulating-binaries-to-discover.html 3. http://www.imo.org/en/KnowledgeCentre/IndexofIMOResolutions/Documents/MSC%20-%20Maritime%20Safety/333(90).pdf
*参考来源: ioactive ,FB小编dawner编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)