越来越多的员工家里装了各种各样的IoT设备,员工在家接入公司网络办公的现象也越来越普遍。巨大的威胁阴影开始笼罩在公司网络上空。
1. 设计糟糕的网页用户界面( Web UI )
每个人都喜欢看设计好看的网页界面。对IoT应用来说,Web UI 能让用户更快更方便地控制各种功能、配置设备和将设备集成到系统中。问题是,罪犯也能使用 Web UI 提供这些便利。
IoT网页界面的问题,很大程度上也是企业网页应用面临的问题。虽然IoT应用不太可能遭遇SQL注入问题,但指令注入、跨站脚本和跨站请求伪造,却全都是可令罪犯染指设备和整个系统以控制、监视和操纵现实世界运营的编程漏洞。
幸运的是,大多数 Web UI 安全问题的解决方案,也正是多年来Web开发者被耳提面命的那些正确操作:验证输入,要求强口令(且不允许在初始设置之后还继续使用默认口令),别暴露凭证,限制口令尝试次数,确保口令和用户名恢复流程是健壮的。做好基础安全防护操作最重要。
2. 身份验证缺失
验证IoT应用用户身份是个不错的操作。当应用能控制大楼门禁和环境温度湿度,或者能访问可监视住户的音视频设备,身份验证似乎是个“必须”项,但大多数情况却是连最基本的身份验证都欠奉。
有两种身份验证对IoT应用而言非常重要。第一种是用户身份验证。鉴于很多IoT环境的复杂性,该问题归结为是不是每个设备都要求单独的用户身份验证,或者一个系统验证就足以访问网络上所有IoT设备。出于易用性考虑,大多数系统设计者都选择了后一个选项,令中心节点或控制界面的强身份验证变得尤其关键。
系统单点登录还让另一种验证形式——设备身份验证,变得更为重要。因为用户不在每个设备界面进行验证,IoT网络中的设备就应要求相互验证,以便攻击者无法使用系统验证中暗含的信任登堂入室。
与Web界面安全类似,关闭身份验证安全漏洞的基础,在于将IoT当成“真实”的应用网络来对待。因为很多设备都没有原生用户界面——依赖浏览器UI或人机交互App,怎么验证就成了问题,但设备身份验证的缺乏,会令IoT边界安全变得更加关键。
3. 锁定默认设置
你知道IoT设备预设了默认用户名和口令吗?谷歌或者百度一下就能查到。所以,不让修改默认设置的设备和系统就真成问题了。
默认用户凭证(真正重要的是“admin”)就是IoT安全设置中最大最闪亮的警告标志,但并非唯一重要的设置项。网络参数也是应能按个人部署需求修改的安全设置,包括所用端口、管理员权限设置、日志启用(或禁用)、事件通知(或不通知)等等。
除了可令IoT设备的安全设置与部署环境中现有的安全基础设施结合更加紧密,还可以对默认设置进行修改,让入侵者更难以登录IoT攻击界面。但与本文中其他IoT问题类似,这并不是用户可以轻易左右得了的事。不可修改的默认设置确确实实需要覆盖在IoT部署之上的安全基础设施进行额外的审查。
4. 固件问题
固件也在发展。开发人员指出错误和漏洞易发地,提出改进的办法,然后发布新的固件来做出改善。但很多IoT设备并没有预留固件更新的途径。于是,固件成了IoT设备的一大漏洞。
经常更新的固件可以带来的好处之一,是可以让系统变成移动靶而不是固定靶。如果设备上的固件保持不变且不可更换,攻击者就可以慢慢研究,开发出漏洞利用程序,充满自信地对用了该固件的所有设备发起攻击。5月的VPNFilter攻击,就是一大类设备无法更新会招致何种恶果的样例。即便设备可以更新,只要用户不愿或不能应用可用更新,结果也是一样的。
很明显,如果设备可以更新,那么最佳安全实践就是保持更新。如果设备无法更新,那就需要紧跟已知漏洞,确保部署环境中其他安全措施能够防住这些漏洞。
5. 有缝隙的云接口
几乎没有哪个商业自动化系统功能是不依赖云承担部分处理能力和命令知识库存储的,尤其是使用了语音处理或指令翻译功能的时候。于是,与云的连接就可能成为巨大的漏洞。
想想那些可以在IoT实例及其宿主云之间游走的消息。显然有简单的控制数据包流,但也可能录制了音频和视频、任务列表、日程事件,以及发往DevOps框架及工具的指令。这些敏感数据流真的是通过加密隧道传输的?你确定?
IoT安全有很多方面,真正的问题在于:大多数时候,用户对界面到云端的安全防护情况是没有发言权的。而且大部分用户压根儿不知道云基础设施在哪个地方,很可能已经陷入安全及合规噩梦而不自知。所以,有必要了解IoT设备的功能、设备数据的发送目的地,以及自己可以利用封包类、防火墙、入侵预防系统(IPS)和其他安全工具为堵住云接口漏洞做哪些工作。
6. 脆弱的网络安全
编写糟糕的IoT设备应用程序可以从内部给你的防火墙开几个洞,让攻击者经由这些通洞爬进你的系统,对IoT设备和通用计算机发起攻击。诱使天真的用户在自家网络安装IoT设备却不配置防火墙规则,也可以创建供攻击者用来绕过精密防护的连接。
很多情况下,防火墙是面向外部的:关注试图从外部进入网络的流量。IoT设备可以从网络内部发起对其控制服务器的连接请求,然后以常规心跳传输维持该连接。依靠该连接,攻击者可利用缺乏身份验证还不加密的流量中的漏洞,将恶意流量发回到内部网络中。
有人可能会说,那得攻击者事先知道此类设备和连接的存在才可以利用漏洞呀。没错,确实如此,但他们可能没听说过联网设备搜索引擎Shodan。一条简单的Shodan搜索命令,就可以找出各种各样的设备、通信和开放端口,快速便捷省时省力。而一旦找到目标,编写简单的脚本就可以自动化漏洞利用过程。于是,利用脆弱的网络安全状况,不过是收集有漏洞的IoT系统,而不是费尽心力地去狩猎它们。
7. MQTT问题
最后,如果系统设计者或开发人员彻底忘了安全,出问题是一定的。就拿工业控制领域的消息队列遥测传输(MQTT)协议来说,已经部署的成千上万套系统甚至连最基本的安全都没有。
多年来,工业控制安全模型都非常简单,有两个隐含的定势思维在里面:首先,这些系统基本不接入任何更大型的网络。其次,谁会想要攻击工业控制系统呢?根本没价值嘛!
但如今,多少系统都要依赖互联网,而各种各样的攻击者都想藉由对IoT设备的访问或控制,获得它们产生的数据或发起对其他系统的攻击。需要指出的是,MQTT和其他协议的漏洞未必存在于协议本身,而是存在于协议的具体实现方法。
守卫IoT部署安全的关键在于知识:有关IoT网络中到底部署了哪些设备的知识,这些设备在网络中到底在做些什么的知识,以及本地设备及其赖以进行数据分析与控制的云系统之间传输的数据流的知识。
【本文是51CTO专栏作者“”李少鹏“”的原创文章,转载请通过安全牛(微信公众号id:gooann-sectv)获取授权】