测试IoT设备中的漏洞

物联网(IoT)涵盖连接到互联网或彼此互联的所有产品。任何需要连接到家庭、汽车或办公室网络来提供其完整功能的产品都列入这个宽广的范畴。事实上,因为现在汽车定期(如果不持续地)与制造厂商交换数据,汽车本身现在是物联网的一部分。

物联网IoT所有物件在使用时收集数据,并经常与其制造厂商共享这些信息,用户没意识到正被收集数据。在许多情况下,产品的功能取决于与互联网的连接,并或许很大程度上被制造厂商所控制。让我们日益复杂生活的所有组成部分相互通信、与我们通信、与内部和外部软件应用通信,这就是物联网IoT的全部。


为什么IoT是安全性差的代名词?

各种电子或电气设备厂商正急于添加连接互联网的功能。在急于冲到市场的过程中,这些公司在急于以最低成本推出最新、最酷的功能时,许多公司没有网络设备经验,势必会忽视硬件和软件安全设计与实施的复杂性。

产品制造商测试这些新领域会和任何他们购买的其他产品部件所做的一样来选择处理硬件,这几乎是一条规则。最老的芯片其设计很久之前就获得收益并且现在非常便宜,它们是只需有限能力或有限容量的设备设计中有吸引力的构建单元。

测试为家用电器或儿童玩具编写的软件只有一个目标 --- 确认它正常工作,并且易于设置(有许多默认选择,甚至密码)。安全是后来的想法。

大多数新产品中使用的硬件(芯片组)非常古老,而且通常有多个已知漏洞。IoT设备包含的软件很少得到深度安全测试,几乎总有自己的系列安全问题。结果就是安装在家庭和商业网络中的数以万计(很快会数以亿计的)家电、设备和玩具已准备好为黑客所攻击。一个广泛部署的产品线中一旦发现了漏洞,那么将会有数千或者可能数十万家庭或商业部门让他们的物联网IoT设备受劫持成为可能,并有可能打开他们的整个网络供查看和攻击。


IOT应用 --- 用户和企业

在用户前沿,IoT四处都有

• 在家中 --- 智能家居当中,诸如电视机、恒温器、灯、门锁、甚至电冰箱等设备连接互联网变得越来越普遍。它们为房主提供对家庭服务和功能的控制,房主不需要真在家里。智能冰箱可监控剩余牛奶量,而后从首选商户自动地重新下单。洗衣机和干衣机完成工作后会通知您的手机。

• 对个人 --- 提供生理指标测量,诸如心率、排汗状况、甚至如血氧量这样的复杂测量的健康和健身可穿戴式设备是可穿戴IoT连接设备的一些范例。在医疗方面,手术植入装置向医生报告健康状况,某些情况下接收医务人员的指示采取行动。所有这些数据都可以发回到制造厂商拥有的中心数据库,供应有被窃取可能的数据流。

• 对于移动 --- 运输系统和现在的汽车使用大量传感器,通常与GPS配合使用,以安全高效的方式从A点到B点。除此之外,汽车越来越智能:车载导航系统、提示您(和制造厂商)从车灯故障到轮压等一切的诊断系统

商业也看到了将IoT连接设备集成来提供新功能、降低成本和提高效率的重要性:

• 防窃签内的RFID标签,帮助零售商监控库存。

• 无人驾驶卡车7x24小时运行,提高生产水平。

• 诸如发电和变电系统、给水系统、运输系统这类关键基础设施系统,正在引进更多的IoT设备,以提高数据与控制的准确性。

• 农场使用连接传感器来检查作物和畜群,以优化农药、肥料和食物的分配。

• IoT连接设备可以提醒车间管理员有关故障或失灵设备。

• 跨越多个公司甚至整个大陆的整个供应链正在整合其生产系统,通过监控和控制行为或位置来实现更好地管理机器和人员。

IoT生成并共享数据量,因此,各个设备易受恶意攻击、数据滥用和数据泄露。为在产品开发阶段自身动态测试、代码、逻辑和漏洞评估提供了强有力的案例。


IoT中的漏洞

根据Gartner,到2020年,连接互联网设备的数量预计将达到500亿。尽管物联网将为许多人改善生活,但消费者和企业面临的安全隐患也将指数级增长。

物联网领域的利益相关者面临隐私问题,大多数时候都还没意识此状况。因此,近几个月来,关于IoT设备的安全监控差和有许多漏洞越来越多地受到关注。由于IOT的扩展而出现的一些常见问题包括:

• IoT用户在没有足够信息或技术知识的情况下,允许收集和存储数据。收集的与第三方共享的抑或是丢失的数据,最终将生成我们个人生活的详细情况,这些情况用户永远不会考虑与街上遇到的陌生人分享。

• 匿名在物联网领域一直是个常见问题,即,物联网平台在共享数据过程中几乎不重视用户的匿名。

• 网络攻击可能成为越来越大的具体(而只是虚拟的)威胁。许多连接互联网的电器,例如相机、电视机和厨房电器已经能够窥探它们家里的人。这些设备积攒了大量个人数据,与其他设备共享,或者是被机构保存在数据库中,这些数据容易被滥用。

• 计算机控制的汽车设备,如喇叭、制动器、发动机、仪表板和车锁有被黑的风险,黑客们为了高兴、恶作剧抑或是个人利益可以随时进入车载网络并随意操控。

• 分层安全的概念和冗余管理IoT风险仍处于萌芽阶段。例如,监测患者状况的智能健康设备的读数或许被更改,当连接到另一装置用于处方药物后分析时,这些读数会被破坏,对患者的诊断或治疗带来不利的影响。

• 当多个IoT设备尝试连接一个特定网站或数据库时,很可能无法访问,造成客户不满意和收入下降。


连接IoT设备的静态测试与动态测试

随着物联网设备成为我们日常生活中不可或缺的一部分,这些设备必须经过彻底测试,并建立安全的最低基线。

如果做任何测试,静态测试是最常用的流程。但是,静态测试的设计目的不是用来查找应用程序安装在其中的诸如处理器和内存之类“现成”部件中存在的漏洞。

另一方面,动态测试能够揭示出代码缺陷以及由硬件引起的任何潜在缺陷或漏洞,这些用静态分析或许看不到。而且,动态测试通常被证明是测试IoT设备的更务实方式,在查找旧处理器上跑新代码时所产生的漏洞发挥关键作用。因此,从别处购买硬件和软件的制造厂商必须进行动态测试,以确保东西是安全的。


网络硬件和Web应用的QA测试

开发者制作的应用程序用尽可能遵循一个协议的方式或多或少地交换信息。然后 QA 团队在测试实验室理想环境中针对该协议来测试应用程序的功能。考虑到程序员会犯错误的几种方式,在一段软件中查找安全漏洞必须是开发流程的组成部分。奇怪的是,情况并非总是如此。为什么呢?因为测试特定产品的安全性会是一个昂贵的主张,开发者往往会将费用与将产品释放给客户所涉及其他因素的成本相比较。就因为这样,在一个严格认识到安全隐患的环境中开发的软件甚至最有可能没经充分测试就发布了。

当应用程序发布后,黑客们自然会以每种可能的畸形协议形式来对应用程序“砸”个不停,来在应用程序中生成一个错误。通过将协议封装推至边缘情况,黑客们可能找到“砸倒”应用程序的方法,生成一个最常利用的设计错误 --- 缓冲区溢出。

黑客们是如何发现开发过程与预发布前标准 QA 阶段遗漏的缓冲区溢出呢?黑客社区已经开发出各种工具,使得基层人员就能发现新漏洞。这些工具(fuzzer)通过生成与发送各种非预期的或畸形的输入来工作,寻找破解应用程序的输入组合。这些工具的制作已形成自己的小产业。质量保障(QA)业界已试图将这些粗略的黑客工具纳入到测试流程当中,取得了一些成功,但也有很多头疼问题。大多数这些黑客开发的工具侧重于单一类型代码弱点,或者是只侧重于单个协议,甚至仅仅关注于某个应用。

在IoT连接设备情况下,企业必须识别流量模式,区分合法流量和恶意流量。举例来说,员工可能会在雇主给他的智能手机下载一些显而易见是正版的应用,却不知道该应用带恶意软件。在这种情况下,该单位必须准备正确的流程,确保充分安全。

大多数IoT设备首次使用时附带默认凭据,这意味着已知管理员ID和密码。还有一些设备带内置Web服务器,有助于管理员远程登录和管理设备。这种巨大的漏洞很容易鼓励黑客们滥用机密数据。为了避免任何数据泄露,各机构必须制定严格的调派流程,其中,可以对设备初始设置进行测试和验证,找出任何可能已存在的漏洞,确认已被识别出来的缺陷必须被关闭,并且在设备投入市场之前应该由合规团队签发“good-to-go”认证。

即便完成所有QA测试之后,还应进行缓冲区溢出错误测试、违反协议测试以及黑盒测试,进一步减少设备被添加漏洞的范围。


缓冲区溢出错误 --- 应用开发过程中产生的漏洞

应用程序开发过程中的需求转化是大多数编程错误的首要原因。举例来说,在一个智能冰箱应用开发之中,项目经理将期望要求转化给编程团队,团队成员转化为各自编程任务。然后,程序员将任务转化为别人编写的编程语言的正确句法,编程语言编译器翻译为相应机器代码。所有这些转化过程都是设计阶段潜在编程错误的来源。

Off-by-one 错误、编程语言使用错误、整数溢出都是程序员将概念转化为正确算法时生成错误的案例。例如:为放“n”个“m”字节长的条目,程序员会让程序分配 n * m 个字节。假如 m * n 大于可呈现的最大数,内存会比预期分配的少。这或许会导致一个缓冲区溢出。举另外一例子:如果程序员假定一个变量只有正整数,但假如有问题的整数实际上是一个有符号整数,算术运算可能导致覆盖最左边比特位并且让结果为负数,有可能导致一个可利用行为(攻击)。

但是,并不是所有编程错误都“生来平等”。有些错误帮助攻击者获得某些东西或者是得到一个他们没有的能力。它们或许使程序崩溃来拒绝其他用户对该程序的访问,或访问他们不应该能访问的信息。某些情况下,它们可能会让程序执行任何告诉程序的命令。这些错误是漏洞。其他错误虽然可能有相同的原因,但不会给攻击者带来他们没有的任何访问权。因此,漏洞研究者的首要任务是判断该编程错误仅仅是一个bug,还是它可导致漏洞利用。如果一个bug能导致漏洞利用,或者自己或者是与其他bug配合使用,它的确是漏洞。

缓冲区溢出,是应用程序在拷贝不可信数据至预先分配的系统内存空间之前没检查可用空间,最终覆盖缓冲区外内存内容而导致的漏洞。其结果是下次程序看内存空间,所看到的是来自溢出的数据而不是原始数据。如果程序试图使用来自该区域的数值,它很可能看不到所期望的,其结果会是从程序的崩溃到诸如拒绝服务(DoS)或更糟的情况---执行某人植入的一个新恶意代码等其他更具潜在危险的行为。基于堆栈的缓冲区溢出可帮助攻击者在受害计算机上执行代码,因为它覆盖了随后要用到的内存地址,而“堆栈溢出”通常会导致一次拒绝服务(DOS),因为它试图写入不可用的内存。

像 beSTORM 这样的多协议、环境可变的“智能”模糊测试器对发现缓冲区溢出至关重要,不仅因为它们自动地发送并记录破损输入,还因为它们密切观察来自应用程序的非预期响应。举例来说,beSTORM 会尝试带畸形包头的数据包,使用电子邮件应用中的 &、<、>、句号和逗号、或 HTTP 服务器的典型URL符号,来操控数据包内容以及提供应用程序或许在找寻的数据类型。如果人工完成,是不可行的。


协议违规 --- API与设备通信时产生的漏洞

设备的协议API帮助应用程序通过业界标准协议与设备“通话”。开发人员需要只是识别该备,然后为之开一个通信通道。开通道提示访问授权,这是在用户没意识到时防止程序意外地或恶意地与一个或多个设备通信的关键一步。一旦授权访问,该应用程序可与一个设备通信,包括开始传输长数据。

通过生成瞄准基本编码错误的攻击源能够攻击实际的协议实施是黑客们取得良好结果的原因,基本编码错误诸如:输入验证或边界检查(防御性编程错误)的不当处理、设计缺陷(逻辑、设计规范、及类似缺陷),以及协议自身的执行错误。主要问题是,可能的攻击组合数量会随着一个重要因素而增加,使得在某些情况下时间与产出比(崩溃或类似情况)不切实际。通过先使用更有可能造成错误的攻击然后继续覆盖整个组合空间的高级算法来解决这个问题。

这些算法不那么容易开发。在某些情况下,尝试利用一个大缓冲区或发送错误数据类型的输入使得捕捉(错误)更容易,但是,模糊测试工具的搜索功能越高级,个体模糊测试工具所使用算法的效率越显著。

基于两种基本类型(数值操控与协议操控)的更高级操控方式的使用相当地影响当今模糊测试工具提供测试结果的能力。举例来说:发送两次登录请求然后将其合并至攻击“熔炉”来尝试攻击程序中的逻辑缺陷增加了所需组合的数量和成功率。能工作于更高级协议,要求模糊测试工具发送下一个请求之前等待一个响应(与基于会话模糊测试的被攻击应用程序基本建立起会话)是模糊测试中的另一步。

某些基于基本设置的更高级操控技术进一步增加底线结果和模糊测试成功率。这样的一种高级技术是逻辑操控,模糊测试工具基于协议操控尝试查找导致潜在漏洞的逻辑编程错误。另一种高级技术是会话操控(也是基于协议操控),它操控实际的会话。举例来说,发送一个密钥请求,然后,接收到密钥时使用另外一个或者没有密钥继续进行,这会导致其他类型的潜在错误。

第二代模糊测试器采用这些新技术时,面临的主要挑战是彻底覆盖组合空间所需的时间。一个产品中的某些新奇漏洞可能会位于组合空间的最末端。解决方案是开发最短可能时间内尝试找到最可能攻击源以触发可能漏洞的技术。

beSTORM也许是唯一的多协议、环境可变的“智能”模糊测试工具,在提供自动二进制与文本分析、高级调试以及堆栈追踪的同时,通过测试250多种协议以及“自学习”新协议的或私有协议解决协议违规问题。


黑盒测试 --- 为漏洞评估和应用测试的基于协议模糊测试

这是一种自动地给程序“喂”特定构造的多输入迭代,以一种方式触发表示为bug的内部错误并有可能让程序崩溃的技术。通常被称为“故障注入”技术,黑盒测试可以适用于网络服务,以及CPU、手机、程序参数、API、Web浏览器或一种文件类型。

测试人员无需了解被测试应用程序的内部工作机理,通过先嗅探目标协议的流量来着手他们的工作,从所观测到的内容生成输入迭代,然后将“随机的”或“乱码的”消息或者是“合法的”鼠标与键盘事件发给应用程序,直到漏洞浮现。应用程序的监视功能多种多样,可以从看程序是否仍在运行的监视程序,到远程检查看服务是否仍然可用和响应,或者用一个调试器来监视预期异常这样的更高级技术。通过数值操控,只对特定数值变化测试特定数据集合。通过协议操控,能测试整个协议结构的实现,或者是两种方式都用。

解决方案是在开发过程中使用您能得到的最好的模糊测试工具来捕获应用程序的缺陷 --- 此时,修正错误相对容易,而且成本更低。

使用基于协议的自动化模糊测试技术,beSTORM,一个功能强大的自动化黑盒审计工具,尝试近乎每一种攻击组合,明智地从最可能的场景开始,检测应用程序的异常,异常表明攻击成功。这样可以在应用程序中更快地找到安全漏洞,没用暴力测试,而且几乎不用用户任何干预。beSTORM易于扩展,能够使用多个处理器或多台机器并行地审计,大大缩短测试周期。


beSTORM --- 业界领先的自动化模糊测试工具

Beyond Security公司的beSTORM是一个全面彻底的模糊测试工具。作为一款功能强大的黑盒审计工具,它旨在查找协议实现中的安全漏洞,使用正式RFC的定义来生成一种攻击语言,反过来,攻击语言用来识别被测应用程序中的漏洞。尽管它支持预先设定好测试用例,并且在继续完整测试之前尝试攻击更有可能的漏洞,beSTORM 的主要目标是允许进行覆盖尽可能多的协议空间的最完整测试。有了beSTORM,也可以用XML为私有协议编写自定义模块。