黑科技:看我如何利用多个漏洞黑掉一台机器人系统

皮鲁安全之家mp 2017-08-31

机器人科技网络安全

2898 字丨阅读本文需 6 分钟

  在我们看来传统的是很无趣的。通常情况下,它们独自或者在人类的指导下在制造和生产环境中执行重复性的,程序化的任务。它们经常被用来执行危险或不适合人类去干的任务,因此,它们的工作环境往往与人类或者其他有价值的机器隔离开来。

  但是最新一代的协同(“cobots”)并非如此。在符合安全标准的同时,他们与人类或者其他机器在共同的环境中工作。这一代机器人与人类携手并进,协助人类完成工作,而不仅仅是执行自动化的,危险性的操作。 Cobots可以学习移动,通过高清摄像机“看”,或通过麦克风“听到”来完成工作。

  因此,Cobots比传统的工业机器人呈现出了更为有趣的攻击研究。但是,Cobots只限于工业?不,他们也可以被集成到其他装置中!

  去年二月,Cesar Cerrudo和我发表了一篇非技术论文“Hacking Robots Before Skynet”,在这篇论文中我们对来自多家知名厂商的几款家用,商用以及工业机器人进行了研究,在这些机器人中我们发现了近50个关键的安全漏洞。在Cobots这部分机器人部分,我们对包括来自Rethink Robotics的Baxter / Sawyer和Universal的UR机器人进行了研究,这些都是工业机器人行业的领导者。

  Baxter / Sawyer:针对这款机器人,我们发现其存在身份验证漏洞,采用不安全的协议传输和默认的部署配置,易受到物理攻击以及使用了一个存在多个安全漏洞的框架-ROS,该公司已经在2017年2月修复了我们报告的主要问题。

  UR:我们在许多控制协议中发现了身份验证问题、易受到物理攻击、内存破坏漏洞以及不安全的通信传输等安全漏洞。所有这些问题在最新版本(3.4.2.65,2017年5月)的系统中中仍未修补。

  根据IOActive网络安全公司漏洞披露的政策,我们已经在去年1月份与供应商取得了联系,所以他们有足够的时间来修复这些漏洞并通知客户。我们的目标是使cobots机器人更安全,防止攻击者利用漏洞对企业,员工和周围环境造成严重伤害。我真的希望这篇文章可以推动cobots机器人的安全性能够向前发展,使得我们可以安全地使用现在的这些机器人以及后续更多代的机器人。

  在这篇文章中,我将讨论攻击者如何通过cobot(例如UR3,UR5,UR10 - Universal Robots)机器人的多个漏洞来远程修改安全设置,违反适用的安全准则,通过移动机器人对其周围的工作人员造成身体上的伤害。通过这个例子我们可以看到如果这些系统被黑客攻击或者控制可能会给人类造成多么严重的后果,操纵安全限制和禁用紧急按钮可能直接威胁到人的生命。在这个例子中,我们利用了cobot机器人的六个漏洞来改变其安全限制,并通过远程网络禁用安全面板和紧急按钮/传感器,演示可以在下面这个url中看到:

  问:这些机器人真的可以伤害一个人吗?

  答:是的,加拿大蒙特利尔(ETS)技术研究所的控制和机器人实验室的一项研究清楚地表明,即使是较小的UR5模型,其强大到足以严重伤害一个人。即使是在慢速移动中,他们的力量也足以造成颅骨骨折

  问:等等,他们有没有安全功能,防止他们伤害附近的人类?

  A:是的,但是黑客可以远程入侵,我将在下一个技术部分告诉你黑客是如何入侵机器人系统的。

  问:这些机器人部署在哪里?

  A:世界各地,每天在多个生产环境中都有机器人在工作。

  集成商定义所有安全装置

  Universal Robots公司是UR机器人的制造商,但是在特定应用中安装UR机器人的公司是集成商,一个机器人只有集成和安装之后才被认为是一个完整的机器。 UR机器人的集成商负责确保消除整个机器人系统的任何重大危险,这包括但不限于:

  1. 对整个系统进行风险评估,在许多国家,这是法律规定的的必要流程。

  2. 如果风险评估认为安全,则连接其他机器和其他安全装置

  3. 在Polyscope软件(控制面板)中设置相应的安全设置,确保用户不会使用“安全密码”来修改任何安全措施。

  4. 验证整个系统的设计和安装是否正确

  Universal Robots公司已经意识到集成商必须考虑机器人存在的潜在的重大危害例如:

  1. 机器人工具或者工具连接器上的锋利的刀边或者刀尖有可能刺伤皮肤;

  2. 机器人轨道附近的障碍物上的锋利刀边或者刀尖有可能刺伤皮肤;

  3. 由机器人的碰撞引起的瘀伤;

  4. 由机器人沉重的机器零件或者材料表面之间的碰撞而产生的扭伤或骨折;

  5. 由于未经授权更改安全配置参数而导致的错误

  一些安全相关功能是专为cobot应用而设计的,这些功能包括:

  1. 力和功率限制:用于在机器人和操作员之间碰撞的情况下,减少机器人在运动方向上施加的夹紧力和压力;

  2. 动量限制:通过降低机器人的速度,用于在机器人和操作者之间碰撞的情况下减少高瞬态能量和冲击力;

  3. 刀具定向限制:避免锋利的刀边指向操作者;

  4. 速度限制:用于确保机器人手臂低速运行;

  5. 安全边界:用于限制机器人的工作空间,强制其停留在定义的虚拟平面的正确一侧,而不能通过它们。

  6. 安全I/O:当触发此输入安全功能(通过紧急按钮,传感器等)时,向输入端发送低信号,并使安全系统转换到“减小”模式。

  安全设置可以有效防止许多潜在危险事件。但是,如果恶意攻击者绕过这些安全措施,操纵机器人来威胁人类生命,那可能会发生些什么呢?

  UR用户指南的声明

  远程更改安全配置

  “安全配置只能根据集成商进行的风险评估进行更改。如果改变了安全参数,机器人的整个系统应当被认为是新的,这意味着包括风险评估在内的整个安全审批流程应该相应的更新“。

  远程更改安全配置的过程如下所示:

  步骤1.通过在UR Dashboard Server上利用身份验证漏洞来确认远程机器人系统的版本信息;

  步骤2.通过在UR Modbus TCP服务中利用基于堆栈的缓冲区溢出漏洞获得对系统的控制权限,并以root身份执行命令;

  步骤3.修改security.conf文件,该文件将覆盖所有的通用安全限制,接头限制,边界和安全I/O值限制;

  步骤4.强制绕过计算校验和值,并上传新文件。我们需要伪造这个校验和值,因为通常集成商很可能在硬件上写入当前的校验和值;

  步骤5.重新启动机器人,以便更新安全配置;

  步骤6.通过利用UR控制服务上的认证问题,以任意危险的方式操作机器人。

  通过逆向分析ursys-CB3.1-3.3.4-310.img这个系统镜像,我知道了机器人的入口点以及允许网络上的其他机器与操作系统进行交互的服务程序。对于此演示,我使用供应商提供的URSim模拟器,该模拟器包含了机器人镜像中大部分核心的二进制文件。尽管这个示例使用模拟器可以更为清楚展示攻击效果,但我还是修改了这个二进制文件,修改后的文件部分代码可以在Linux机器上正常运行。URControl这个二进制文件中导出了很多不同的网络服务,这些网络服务的私有协议在实现上都没有使用强大的认证机制。例如,网络上的任何用户都可以向其中一个服务发出命令,并获取正在运行的进程的远程操作系统的版本(步骤1):

  现在我已经验证了远程目标运行着一个易受攻击的系统ursys-CB3.1-3.3.4-310(UR3,UR5或UR10),下一步我准备利用网络服务漏洞来破坏这个机器人系统(步骤2)。由于UR Modbus TCP服务(端口502)不支持对命令源的认证机制,因此,网络攻击者可能会在控制的过程中破坏机器人系统。与机器人IP连接的攻击者可以发出Modbus读/写请求,并部分更改机器人的状态或向操作人员发送请求,以更改控制链接的状态。发送Modbus写请求并不能改变机器人的任何安全设置,然而,我们在在UR Modbus TCP接收器(URControl内核的一个二进制文件)中发现了一个基于堆栈的缓冲区溢出。

  UR Modbus TCP服务程序的recv函数存在堆栈缓冲区溢出漏洞,攻击者通过该函数可以向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的,这是一个很常见的堆栈缓冲区漏洞。

  在进行漏洞利用之前,我们先来看一下漏洞利用的将要面临的阻碍。机器人的Linux内核被设置为堆栈随机化(randomize_va_space = 1 => ASLR),VDSO(virtual dynamic shared object page)和内存区域共享。此外,由于内核中的"No eXecute" (NX) 被置位,因此该内核文件是不可写以及不可执行的。

  当对目标缓冲区进行溢出操作时,我们也需要要对指向函数参数的指针执行溢出操作。在函数返回之前,这些参数在其他函数调用中被使用,所以我们必须要为这些函数调用提供有效的实参。否则,我们永远不能找到函数的返回点以及控制函数的执行流程。

免责声明:凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处本网。非本网作品均来自其他媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如您发现有任何侵权内容,请依照下方联系方式进行沟通,我们将第一时间进行处理。

0赞 好资讯,需要你的鼓励
来自:皮鲁安全之家mp
0

参与评论

登录后参与讨论 0/1000

为你推荐

加载中...