又一场黑掉飞机的大戏?IOActive研究员声称可入侵松下机载娱乐系统。在黑客Chris Roberts去年声称因入侵飞机系统被FBI逮捕之后,很长一段时间,我们都没有再听过黑掉飞机的精彩故事了。最近,IOActive研究员Ruben Santamarta披露了松下航空电子设备公司的机载娱乐系统(IFE)漏洞。据Santamarta所说,攻击者入侵IFE系统能够干扰飞机运营,盗取敏感信息。不过他也在文中提到,如果说IFE系统与飞机控制系统物理隔离,则此类攻击对于飞行安全是不会产生影响的。
不过松下航空电子这两天特别向媒体回应,他们确实在2015年接收到了Santamarta的漏洞报告,但都是一些低风险漏洞,并不能导致其IFE系统被攻击控制。松下航空电子严重质疑IOActive的研究测试,并呼吁IOActive尽快澄清。&*%这都是些什么剧情…..以下就是这名研究人员的文章编译内容:
你们就打着嘴仗吧,我们来详细看看这篇漏洞分析报告:
在IOActive的五年间,我有幸到很多地方出差访问,所以坐飞机成了我日常生活的一部分。你可能觉得这不是什么大问题,但对于一直害怕坐飞机的我来说,我经常有“恐飞”焦虑症状,在飞机一起飞时我的手心会出汗,所以,在长期的飞行途中,我总尝试着去适应,给自己找点其它事情做,比如花时间研究如何黑掉机载系统。在飞机上,我沉浸于研究飞行系统原理,所以逐渐适应了各种噪音、颠簸和震荡。在这篇文章中,我就和大家来聊聊松下航空电子设备公司研发的机载娱乐系统(In-Flight Entertainment Systems,IFE)。
研究起因
当两年前我从华沙飞迪拜的行程中,决定试试运气捣鼓一下飞机上的IFE系统。在我点击了触摸屏幕上角的某个特定点之后,系统跳出了以下调试信息:
到达迪拜后,我在谷歌上搜索以上调试信息中出现的关键词,发现多家航空公司都公开了数以百计的该类固件更新:
很显然,这些文件正被一直更新使用,所以从这里就可以获得部署在飞机上的最新版本固件(目前这些目录列表已不可访问,www2.airborne.aero/files4/)。
可以公开找到此类固件更新的航空公司包括:
阿联酋航空公司
法国航空公司
美联航
美国航空
斯堪的纳维亚航空
阿根廷航空
维珍航空
伊比利亚航空
新加坡航空
芬兰航空
卡塔尔航空
阿提哈德航空
IFE系统的主要组成部件
系统控制装置(System Control Unit,SCU):一个机载认证服务器。该装置通过航空电子总线(通常为ARINC 429)接收风速、纬度、经度、高度和外界温度等信息,并显示在通过以太网连接的乘客屏幕端,以方便乘客及时了解飞行状态。
座椅显示装置(Seat Display Unit,SDU):一个线性可替换装置,嵌入式触摸屏设备,可以为乘客提供多种服务功能,如看电影、购物、电子阅读或连接互联网等。目前,SDU最新版本为安卓系统,而传统版本则为linux系统。
乘客个人控制装置(Personal Control Unit,PCU):这是一个可选的手持控制器,可以对SDU进行延长线控制,另外它还有信用卡读卡器功能。
机组人员控制面板系统:机组和乘务人员使用它进行飞行状态控制,如灯光、制动器、座椅、广播通告、机上购物和旅客广播系统(PA系统)等。
另外,松下航空电子设备公司还把机舱管理系统(CMS)和全球通讯服务系统都集成在了IFE机载娱乐系统中,方便机组人员进行操作(参考:panasonic),可以从乘务员面板系统访问CrewApp。
松下有多款航空IFE系统,早前版本为Linux系统的3000/3000i系列,现在最新版为安卓系统X系列的eFX、eX2和eX3。这些系统支持很多个性化功能,各版本之间虽然硬件有所不同,但都有相同的体系结构和部署代码。
在我现场对固件文件的分析中没有显示具体的数据加载注入方法。尽管在飞行途中,有机载互联网和卫星通讯网络,但通常,IFE系统一般都是在飞机着陆时,通过航空电子设备公司的固定WI-FI热点进行更新,像松下就是利用人力网(sneakernet)来对IFE系统进行预装内容更新。
松下IFE系统是由以下三部份前端程序组成C/S架构:
CrewApp
SeatApp
Backend
在上述的网站中我找到了多个版本的CrewApp和SeatApp程序,甚至通过Google在另一个以.aero结尾的网站上找到了这些后台程序的公开源代码,在这些松下的代码库中,包含了其它航空公司的定制功能模块。由于其它航空公司的IFE系统都是基于松下的IFE代码框架进行了利用扩展,所以本文只针对松下IFE的某些特定功能进行研究分析。
静态分析
在以下的静态分析中,我只是对松下IFE系统中的某个更新固件进行了逆向分析,这类固件可以从上述提到的网站中获取到。这确实有些遗憾,如果有机会对IFE全系统进行逆向分析的话,可能将会得到更多有价值的信息。
脚本
松下在程序实现中声明了自己的脚本语言,这些脚本用于从主程序中或GUI用户端进行扩展接入,它支持数十种覆盖了大多数功能的系统命令。
对主要的二进制文件进行分析可以侧面了解的工作原理,所以让我们从#define函数开始。该脚本以逐行方式运行,在逆向分析中,当代码执行到#define声明时,它就试图跳转到sub_80C2690进行解析:
在该函数中有五种定义类型:flash、draw、timer、value
让我们从第一行#define代码说起,首先,读取定义名称,检查变量(绿色块内容)值是否为数字(绿色块内容):
如果变量值不为数字,则对脚本中一系列的其它内设值进行核对比较:
如果变量值为数字,则其匹配的名称/变量值将被添加到一个定义好的全局数组中(蓝色块内容):
而在CMD语句中,将遍历cmd语句,调用相关程序,并传递参数:
在这里,可以发现很多有意思的功能,如手持端读取信用卡刷卡数据程序:
甚至可以从读卡器(dev/ccr/)上跟踪并打印出有效的信用卡消费信息:
还可以看到很多通用文件,如shell脚本、包含硬编码密码信息的配置文件、数据库、资源文件、代码库文件等。另外,我通过Twitter从某人手上获取了松下IFE系统的重启加载文件loadlru.h,该文件与SeatAppBase文件相同:
在最新版本的安卓X系列IFE系统中,松下把脚本语言从old.txt模式升级为QT QML模式:
后台架构则使用php,初步分析它存在漏洞:
上面的图片属于“座位端(seat-2-seat)聊天功能,从图中你可以发现一些数据库配置文件。
漏洞验证
当然,这并不是问题的全部,另外,还存在演示信用卡绕过验证、任意文件访问和SQL注入漏洞,在以下的视频中,我将一一进行测试:
信用卡绕过验证
潜在影响
到底在什么情况下,黑客才能对IFE系统漏洞进行攻击利用呢?这没有一个标准答案,但我们可以充分发挥想像力,假设在某些条件下,脑补一下这种潜在的场景。
机载软件适航标准(DO-178B)定义了飞机系统和设备的软件的规范,IFE系统应该达到D或E级标准,松下的IFE系统也被认证为E级,这就意味着,即使整个系统出现错误,也都被认为是”毫无影响“或者”乘客不适“。
而我个人认为飞机数据网络应该根据数据归属分成四个区域,乘客娱乐区、乘客个人设备区、飞行信息服务区和飞行控制区。
需要物理控制的系统应该位于飞行控制区域,与乘客娱乐区分离,但通常来说,并不总是这样,为实现物理意义上的隔离,有些飞机使用光数据信号连接,而有些飞机使用电子网关模块,但只要有连接通道,我们就不能忽视这种攻击。否则,这类攻击将对飞行控制区域造成威胁,整架飞机的控制系统面临被黑风险。
因此,IFE系统可能成为一个攻击向量。在某些场景下,由于系统分离,攻击是不大可能达成的,然而,在其它情景下,因为IFE系统和飞行控制系统物理连接,存在理论攻击可行——当然这其实只是一种假设。
早在2014年的时候,IOActive已经在非航空器中成功入侵过电子网关模块,跨过乘客娱乐区、个人设备区和飞行控制系统之间的“红线”,很大程度上依赖目标飞机系统内部署的特定设备、软件和配置。
从通讯系统方面来说,入侵IFE系统意味着,攻击者能控制飞行信息通知,例如,攻击者可能会篡改乘客座椅后背上屏幕显示的内容,如飞行高度和路径,在屏幕上显示虚假航向。另外,攻击者还可以入侵CrewApp装置,控制旅客广播系统、灯光、座椅位置等,如果将这些攻击形成攻击链,恶意攻击者可能会制造出令乘客惊恐不安的场景。
获取个人信息,包括信用卡详细信息(虽然不在研究范围内),如果某些特定航空公司的飞行常客/VIP会员的后端网站配置不当,从技术上讲,个人信息获取仍然可行。
漏洞披露过程
2015年3月,我们把相关漏洞信息向松下方面作了通知,他们应该有足够的时间来研究和开发补丁。因为涉及到数十家航空公司和上百个版本软件,要完全修复漏洞是一项很难的工作。
尾声
目前,IOActive研究员Santamarta还未针对松下的质疑有任何回应。松下(Panasonic Avionics)自己的数据显示,他们已经为许多航空公司提供超8000机上娱乐与通讯系统和1300机上连接解决方案。较早的松下IFE系统基于Linux,新版X系列产品则基于Android。IFE系统的安全性当然也是相当重要的,实际上Panasonic Avionics最近才发布了漏洞奖励计划,奖金在100-10000美元之间。
相关飞机入侵大戏:去年,Chris Roberts搭乘美国联合航空,在推特发信息说,他入侵了该航空公司飞机的通信系统,还能让氧气罩掉下来。当天当他下飞机抵达纽约雪城机场后,随即被FBI带走调查。几天以后,当他试图登上飞往加州的班机时,才发现自己成了美国联合航空公司的拒绝客户,未来再也无法搭乘该公司的任何航班。