内容


与 IoT 网络威胁作斗争

IoT 应用程序安全最佳实践

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分:

敬请期待该系列的后续内容。

此内容是该系列的一部分:

敬请期待该系列的后续内容。

创新、效率和省钱优势正推动物联网 (IoT) 快速兴起。撇开大受瞩目的智能家用电器和可穿戴设备产品不谈,IoT 还改进了每个行业领域的业务运营,而且成为了物流、仓储、生产线、管道运输和交通管理领域的一股经过考验的颠覆力量。连网设备的联网和远程管理,提供了全新的生产力和信息管理能力。

例如,Continental Tires 以前依靠手写笔记在其庞大的轮胎生产厂房内查找橡胶车;该体系往往导致员工很难找到车辆,给企业造成了高成本的生产延误。该问题通过 IoT 技术得到了解决,IoT 使橡胶车能通过无线网络直接与业务库存管理系统集成和连接。员工可以使用一个移动设备应用程序实时找到大型厂房中的任何车辆,而厂房管理团队知道每辆车上的货物,知道将车从当前位置转移到生产线所需的时间,这使得管理团队极大地提高了厂房生产效率。

另一个示例是 Kenya Pipeline Company,它使用能感知油压水平、温度和流速的连网 IoT 设备升级了管道基础设施。这些简单的联网设备不仅向操作管理团队提供了实时度量指标和警报,还能够感知危险并自动作出反应,在检测到石油泄漏时关闭管道。无论泄漏是意外还是盗油所导致,快速的检测和响应为该公司节省了数百万美元,而且通过即时关闭流往受损管道的石油,限制了任何泄露所导致的环境影响。

这个由 IoT 连接、数据收集和物理世界物体的管理组成的新时代带来了新的安全风险,从复杂的自动网络攻击到拼命窃取数据并导致严重破坏的黑客。IoT 设备的安全性高度依赖于用来管理它们的软件和应用程序,这将软件开发人员推到了网络前线,要求软件开发人员知道如何开发安全的 IoT 应用程序。

本文将概述一些安全编码技术和安全功能的最佳实践,这些最佳实践将帮助开发团队创建能降低 IoT 安全风险、具有灾备能力的 IoT 应用程序。

IoT 网络威胁示例

像所有联网计算机一样,IoT 设备会受到攻击,无论是通过它们所连接的网络直接进行攻击,还是通过控制它们的应用程序间接进行攻击。黑客出于多种原因而攻击 IoT 设备。网络罪犯通过控制 IoT 设备来窃取数据、勒索企业来追求利润,或者以付费客户的名义使用 IoT 设备执行大规模分布式拒绝服务 (DDoS) 攻击。众所周知,一些单一民族国家会攻击关键国家基础设施中涉及的 IoT 设备并进行间谍活动。一些黑客只想制造混乱,以获得社会关注和自身价值。甚至一些网络恐怖分子也有兴趣攻击 IoT 设备,因为他们深知一些 IoT 网络攻击能导致真实的损害,包括受伤和死亡。考虑这些 IoT 网络威胁示例:

  • 2014 年发布了一款名为“My Friend Cayla”的儿童智能门铃,该门铃使用语音识别、移动应用程序和互联网来与儿童交互、通话和回答问题。根据定义,这个门铃是一个 IoT 设备,在发布后不久就被安全研究人员攻破,最初发现可以使用粗话,后来发现可用作一个恐怖阴险的刺探工具,攻击者可以使用门铃上的蓝牙默认设置从门外与儿童交流。该安全研究人员既利用了该门铃(IoT 设备)上的糟糕的固件安全性,也利用了控制该门铃的应用程序上糟糕的应用层安全性。2017 年 2 月,德国政府建议家长销毁这款门铃。
  • 2016 年 10 月,历史上最大规模的一次分布式拒绝服务 (DDoS) 攻击导致互联网 DNS 服务提供商 Dyn 瘫痪。这次网络攻击导致 GitHub、Twitter、Reddit、Netflix、Airbub、Starbucks、PayPal 和其他许多公司网站离线。这次大规模网络攻击的背后是一个庞大的受害设备僵尸网络,其中包括超过 152,000 个被恶意软件损害的 IoT 设备。这是第一次在一次 DDoS 攻击中使用如此大量的 IoT 设备。每个 IoT 设备都受到一个名为 Mirari 的恶意软件的损害,该软件使攻击者能远程控制这些设备,让它们向 Dyn 发送大量网络流量。人们发现 IoT 设备的安全性很差,而且它不是根据安全编码实践来设计和开发的,这意味着它们很容易快速遭受大规模损害。
  • 2015 年 2 月,一段 60 分钟的小视频演示了一种名为应用程序缓冲区溢出的攻击,然后演示了如何远程控制一辆车,在该视频中,黑客甚至设法禁用了这辆车的刹车。另外在 2015 年 5 月,一位计算机安全专家使用娱乐应用程序攻击了一架空运飞机;随后的 FBI 调查表明他曾短暂地控制该飞机。在大部分已知的 IoT 事故中,被利用的安全缺陷都在应用层。因此,如何开发 IoT 应用程序可能事关生死。
  • 在 2010 年 6 月,一种高度复杂且独特的计算机蠕虫 Stuxnet 引起了全球媒体的关注。Stuxnet 的设计仅针对在伊朗核电厂使用的特定软件控件。它利用了 Microsoft Windows 中的零天攻击漏洞,通过核电厂的网络传播并扫描存在的 Siemens Step7 软件。Stuxnet 恶意软件成功地攻破了 Siemens 应用程序,并发出指令来快速提高和降低离心分离机的转速,这导致离心机由于振动而遭到破坏。2009 年 11 月到 2010 年 1 月,估计有超过 1000 台离心机被 Stuxnet 恶意软件损坏,这导致伊朗核计划明显推迟。Stuxnet 恶意软件证明了,可以通过损害控制物理世界中的连网机器的连网应用程序来破坏它们。

我们能够从这些 IoT 网络威胁中学到什么?IoT 设备的应用层为黑客提供了最大的攻击面。应用层包含任何连接 IoT 设备的应用程序,这可能包括本地 Web 应用程序、基于云的应用程序,以及智能手机或平板电脑应用程序。因此,应用程序安全性必须是所有 IoT 应用程序的软件开发生命周期 (SDLC) 不可或缺的一部分,尤其是在设计、开发(编写代码)和测试阶段。

设计安全的 IoT 应用程序

在 IoT 应用程序的计划或设计阶段,必须对所计划的应用程序的安全和隐私需求执行一次正式的“自顶向下”评估。IoT 应用程序开发需要一种“安全设计”方法。此方法意味着在设计阶段考虑所有 IoT 应用程序功能的安全需求,而不是在开发过程的后期假设并应用安全特性。像其他任何错误或问题一样,在开发阶段后期更正安全问题不但代价更高,而且花费的时间也更长。因此,在应用程序设计阶段,必须考虑和计划 IoT 应用程序的所有可能的安全需求。

安全需求评审

在设计阶段,完成一次安全需求评审,以评审 IoT 应用程序的安全需求。

  • 规划用户帐户管理功能。确保 IoT 应用程序会拥有适当的帐户自定义水平。
  • 设计一种安全的密码重置机制。为了实现用户便捷性,通常会忽视密码重置过程,但脆弱的密码重置过程可能为系统提供一个简易后门。
  • 设计一种用户帐户结构,根据“必须有”原则来限制管理帐户特权。明智的做法是将管理操作和权限与标准用户帐户分开,因为此配置会限制发生用户错误配置风险,错误配置可能导致严重的安全漏洞。
  • 确定应用程序将如何存储帐户密码。必须避免在数据库和平面文件中以明文形式存储密码。最佳实践是使用一种加盐的哈希算法,比如 SHA-256 和盐,将密码计算为一个唯一的哈希值,这意味着无法通过反转密码得到明文。
  • 考虑添加双因素身份验证功能,尤其对那些将处理机密数据的应用程序,入侵者打算从不受信任网络访问这些机密数据。
  • 考虑添加对集成 IoT 应用程序与帐户管理系统(比如 Microsoft Active Directory Services)的支持。此功能有助于将 IoT 应用程序集成到商业企业环境中。
  • 如果计划将个人或机密数据存储在第三方或不受信任的环境中,可考虑使用加密技术来保护静止数据。
  • 设计一个软件更新功能,确保只有经过数字签名(真实)的更新可供使用,而且如果可行的话,可以考虑采用一种自动更新流程。
  • 提供安全通知功能,允许应用程序使用一个企业安全监控系统或系统日志服务器发送安全警报,比如登录尝试失败。
  • 邀请专业安全人员审核和批准应用程序安全功能和设计。

隐私影响评估

IoT 应用程序收集、存储和处理个人数据时,需要以遵守适用的数据保护和隐私法律的方式进行。根据居民的数据属于哪个国家,数据隐私法律可能有不同程度的严格要求。需要执行一次隐私影响评估,确保应用程序和 IoT 设备遵守适用法律,包括任何云和第三方对个人数据的存储或处理。

  • 记录并证明应用程序对所有计划的个人数据的使用合理性。
  • 仅将个人数据收集限制到绝对必要的程度。
  • 考虑使用例程来匿名化个人数据;只要操作正确,流程可以消除满足数据隐私法律需求的负担。
  • 计划编写例程或使用解决方案(比如 SSL)来加密存储的所有个人数据,以及通过网络(包括私有网络)传输的所有个人数据。
  • 确保隐私功能对用户透明。任何个人数据收集、处理和存储(包括云存储),都必须在隐私声明中向用户阐明。使用个人数据之前,需要获得用户的明确同意,确保用户签署或同意隐私协议,隐私协议需要解释应用程序的所有个人数据用途。
  • 考虑其他遵守行业条例的数据类型。确保所有监管需求都得到充分理解,而且会在应用程序设计中得到遵守。
  • 考虑移动应用程序隐私。移动应用程序可与 GPS、SIM 卡、设备标识码、设备数据和来自第三方移动应用程序的数据进行交互。所有这些交互都可能对应用程序产生隐私问题,必须考虑这些问题。

编写安全的 IoT 应用程序

许多不同类型的应用程序可控制和管理 IoT 设备,比如基于云的应用程序、本地 Web 应用程序、移动应用程序,以及在 IoT 设备自身上运行的软件。Open Web Application Security Project (OWASP) 是一个专注于如何提高软件安全性的组织。该组织有一个物联网项目,该项目汇集了 IoT 安全性的独特方面。他们目前正在为制造商、开发人员和用户起草 IoT 安全性指南

IoT Web 应用程序:安全编码技巧

Web 应用程序通常用于管理 IoT 设备。无论 Web 应用程序打算直接托管在 IoT 设备上、内部网络服务器上还是云中,这些 Web 应用程序的开发(编码)都必须遵守 Web 应用程序安全开发最佳实践,比如十大 OWASP,其中 2013 年批准的列表目前正在审核,并计划在 2017 年年末进行更新。

IoT Web 应用程序开发的一种常见错误是,没有像对面向公众的 Web 应用程序一样勤勉地保护私有网络 Web 应用程序。但是,内部网络可能遭到损坏,变成不受信任的环境。因此,面向内部的 Web 应用程序漏洞可能被黑客和恶意软件利用。

考虑以下这些针对 IoT Web 应用程序的安全编码技巧:

  • 净化所有用户输入。此编码技术可防止最常见的 Web 应用程序攻击,这些攻击利用草率编码的用户数据输入验证来注入恶意脚本,运行 SQL 数据库命令,并执行缓冲区溢出。因此,净化所有用户输入字段,仅接受想要的字符的“白名单”,这是一种基本的应用程序编码实践。一定要在 Web 浏览器内编写客户端验证(比如 Java 脚本),但必须始终在(服务器)应用程序内执行输入净化,因为大部分攻击都是通过 URL 注入代码来尝试的。
  • 安全地使用 cookie。应用程序使用 SSL 确保应用程序将 cookie 标记为安全时,SSL 也会自动对这些 cookie 进行加密。不打算对 Web 应用程序执行 SSL 保护时,可编写一个例程来使用业界认可的加密算法(比如 AES 256)加密 cookie 值。
  • 锁定应用程序错误报告。这些应用程序错误消息可能为攻击者提供如何攻破应用程序和用户帐户的线索。即使最简单的错误消息,比如“用户密码错误”,也可能导致用户帐户名被猜中。
  • 使用数据加密例程。如果需要应用程序加密个人或机密数据,不要尝试编写自己的加密例程。相反,应使用利用了业界认可的加密方法和算法的库。
  • 在使用之前,评估并记录应用程序使用的第三方库的安全性,然后继续监控它们的安全漏洞和补丁。例如,最近发现 OpenSSL(一个用于加密数据通信的开源库)存在安全缺陷,该缺陷使得 Web 应用程序很容易受攻击。该问题很快通过发布该库的更新版本得到解决。
  • 确保所有开发人员(包括合同工和第三方)都有资格和已经过培训来使用 Web 应用程序安全编码技术。

IoT 移动设备应用程序:安全编码技巧

移动 IoT 应用程序,尤其是智能手机和平板电脑应用程序,常常受到攻击者攻击。在开发移动 IoT 应用程序时,还需要采用用于 Web 应用程序的相同安全编码技术。但是,还有其他应用程序安全考虑因素,比如移动设备身份验证、电信和 SMS 数据通信,以及确实存在的进一步隐私风险。

考虑这些针对 IoT 移动设备应用程序的安全编码技巧:

  • 评估该应用程序与移动平台和操作系统的特性及功能的集成,这可能因每个移动平台类型和操作系统的不同而有所不同。与移动功能集成可以提高安全性,但它们也有可能降低应用程序的安全性。例如,使用 Apple 设备上的生物指纹扫描器可增强移动应用程序的身份验证流程;但是,仅依靠可能被禁用的移动设备身份验证系统,可能会严重地降低应用程序的安全性。
  • 确保您的 IoT 移动应用程序使用加密技术保护了所有个人和敏感数据,无论是传输中的还是存储在移动设备上的数据。应用程序需要在互联网和 WiFi 连接上强制使用加密的网络服务(即假设它们是公共的),甚至包含通过蜂窝网络发送的数据。另外,确保应用程序加密了所有存储在可移动介质上的个人数据。

IoT 设备软件:安全编码技巧

除了已介绍的安全应用程序技术之外,在开发将在 IoT 设备上运行的软件时,还有其他一些考虑因素,比如固件使用和对物理接口的访问控制。

考虑这些适用于 IoT 设备软件的安全编码技巧:

  • 确保您使用了最新版的 IoT 设备固件。
  • 关注固件制造商的固件更新通知和已发现的固件安全漏洞。
  • 使用应用程序测试固件的新版本。新固件版本可能要求更新应用程序代码。
  • 评审您的 IoT 设备的物理接口需求,这可能要求应用程序提供访问控制功能。
  • IoT 应用程序必须能够使用安全补丁进行更新。补丁在安装之前需要数字签名并经过应用程序更新流程的验证,以确保无法安装保恶意补丁。
  • IoT 应用程序需要加密所有打算存储在 IoT 设备的可移动介质(即内存卡)上的个人数据,以及敏感的 IoT 设备和应用程序数据。

测试 IoT 应用程序中的安全性

在开发阶段中识别安全缺陷和薄弱环节的最有效技术之一是执行代码评审,无论采用何种 IoT 应用程序类型。代码评审需要由具有适当资格的编码人员执行,他们最好独立于开发项目。确保代码评审是一个正式的周密过程,并考虑使用参加不同项目的开发人员和使用 IBM Security AppScan Source 等工具。AppScan Source 可在 SDLC 中的早期(在测试阶段之前)扫描和识别 Web 和移动应用程序源代码漏洞。它支持在 JavaScript、HTML5、Cordova、Java、Objective-C 或企业移动平台 IBM Mobile Foundation 中编写的代码。

代码评审看起来似乎是 SDLC 的一个高成本、耗时的附加步骤,但它们可以带巨大回报:避免高成本的重新测试,避免发布后的安全补丁,以及避免由于不安全的 IoT 应用程序遭到损坏而导致声誉受损。除了开发阶段中的代码评审之外,SDLC 的测试阶段还必须包含密集的安全测试,这些测试需要特定于每种 IoT 应用程序类型。

适用于 IoT Web 应用程序的安全测试技巧

执行漏洞扫描和渗透测试来检测软件安全缺陷,这是在发布 IoT 应用程序之前采取的关键最后一步。测试应用程序代码可以防止常见的应用程序漏洞,比如 SQL 注入、跨站脚本、跨站请求伪造和缓冲区溢出攻击。

考虑这些适用于 IoT Web 应用程序的安全测试技巧:

  • 使用应用程序漏洞扫描工具(比如 IBM Security AppScan)对应用程序执行安全测试,并识别 Web 应用程序漏洞。参阅 developerWorks 教程“扫描应用程序来查找和修复 2013 年十大 OWASP 漏洞”,了解此方法的更多信息。
  • 确保开发人员理解发现不安全的应用程序编码时存在的问题。
  • 不要忘记保护所有测试 API。
  • 执行渗透测试,该测试会重复熟练的黑客采用的攻击方法。渗透测试必须由经过认证、经验丰富的白帽子黑客 (CEH) 执行。该方法被视为任何面向互联网的应用程序的安全最佳实践。在应用程序发布之前,在执行任何重大编码更改之后,以及在这之后的每年都执行渗透测试。
  • 确保渗透测试人员能够向开发人员充分解释所找到的漏洞和它们的攻击方法。

适用于 IoT 移动应用程序的安全测试技巧

使用一个专业的移动应用程序漏洞扫描工具,比如 IBM Application Security on Cloud,该工具专为安全测试移动应用程序而设计。IBM Application Security 不仅检测移动设备应用程序漏洞,还向开发人员显示了漏洞的细节,以及风险水平和解决该漏洞的解决方案。

适用于 IoT 设备软件的安全测试技巧

IoT 设备软件必须由专门在 IoT 设备软件中查找漏洞的安全专业人员和公司来执行测试。

结束语

安全 IoT 应用程序的开发,会将开发团队的职责拓宽到熟悉的传统舒适领域以外。从长远来讲,在计划或设计阶段花时间分析安全功能和隐私需求,会给安全 IoT 应用程序的开发带来巨大回报。通过在开发阶段使用 IBM Security AppScan Source 执行代码评审,开发人员可在开发过程中及早检测和更正代码漏洞,这比在测试阶段检测和更正漏洞更高效。在测试阶段,开发团队需要使用 IBM Security AppScan 和 IBM Application Security on Cloud 等工具再现黑客执行的应用层攻击。AppScan 包含有帮助的视频教程、漏洞解释和安全编码示例,这些都可指导开发人员改进其安全编码技术,增加他们对编写安全 IoT 应用程序的信心。

这些开发技术减少了总体开发时间和成本,显著降低了出现 IoT 应用程序漏洞的几率,让开发团队受益匪浅。IoT 应用程序发布后发现的应用程序漏洞,尤其是在被黑客发现这些漏洞时,可能需要很大的代价才能解决问题,甚至有可能损害企业和开发团队的声誉。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=物联网, Security
ArticleID=1018280
ArticleTitle=与 IoT 网络威胁作斗争
publish-date=10312017