text: 目前，IoT技术还处于起步阶段，与金融、电子商务等其他行业相比，安全性尚未得到充分理解和明确定义。开发一款IoT产品时，不论是像可穿戴设备这样的小型产品，还是像油田传感器网络或全球配送作业这样的大型IoT部署，从一开始就必须考虑到安全问题。要了解安全的问题所在，就需要了解IoT设备的攻击方法，通过研究攻击方法提高IoT产品的防御能力。
  作为国内最早从事智能硬件安全攻防研究的团队，基于长期的智能硬件安全攻防实践，360攻防实验室对智能硬件设备的安全隐患进行了系统的分析和梳理，总结了智能硬件设备存在的八大安全隐患。
  毫无疑问，移动设备用户面临的最大风险是设备丢失或被盗。任何捡到或偷盗设备的人都能得到存储在设备上的信息。这很大程度上依赖设备上的应用为存储的数据提供何种保护。很多智能硬件手机客户端的开发者对于智能硬件的配置信息和控制信息都没有选择可靠的存储方式。可以通过调试接口直接读取到明文或者直接输出至logcat中。用户身份认证凭证、会话令牌等，可以安全地存储在设备的信任域内，通过对移动设备的破解，即可达到劫持控制的目的。
  现有智能硬件的安全策略由于要降低对于服务端的性能损耗，很多情况下是把安全的过规则部署在客户端，没有对所有客户端输入数据的输入检查和标准化。使用正则表达式和其他机制来确保只有允许的数据能进入客户端应用程序。在设计时并没有实现让移动端和服务端支持的一套共同的安全需求，可以通过将数据参数直接提交至云端，客户端APK对参数过滤的限制，达到破解设备功能的目的。
  在智能硬件的使用过程中，存在连接开放Wi-Fi网络的情况，故应设计在此场景下的防护措施。我们列一个清单，确保所有清单内的应用数据在传输过程中得到保护（保护要确保机密性和完整性）。清单中应包括身份认证令牌、会话令牌和应用程序数据。确保传输和接收所有清单数据时使用SSL/TLS加密（SeeCFNetworkProgrammingGuide）。确保你的应用程序只接受经过验证的SSL证书（CA链验证在测试环境是禁用的；确保你的应用程序在发布前已经删除这类测试代码）。通过动态测试来验证所有的清单数据在应用程序的操作中都得到充分保护。通过动态测试，确保伪造、自签名等方式生成的证书在任何情况下都不被应用程序接受，如下图所示。
  手机客户端和Web应用程序的输入验证和输出过滤应该遵循同样的规则。要标准化转换和积极验证所有的输入数据。即使对于本地SQLite/SQLcipher的查询调用，也使用参数化查询。当使用URLscheme时，要格外注意验证和接收输入，因为设备上的任何一个应用程序都可以调用URLscheme。当开发一个Web/移动端混合的应用时，保证本地/local的权限是满足其运行要求的最低权限。还有就是控制所有UIWebView的内容和页面，防止用户访问任意的、不可信的网络内容。
  授权和身份认证大部分是由服务端进行控制的，服务端会存在用户安全校验简单、设备识别码规律可循、设备间授权不严等安全问题。目前可以在分析出设备身份认证标识规律的情况下，如MAC地址、SN号等都可以通过猜测、枚举的方式得到，从而批量控制大量设备，如下图所示。这个漏洞的危害在智能硬件里是最大的，因为它能够影响到全部的智能硬件。
  有些IoT产品在开发过程中考虑到了安全加密，比如使用AES128位加密做为传输加密的内容，使用MD5加密用户密码。在对于对称性加密方式的处理过程中，密钥的保存方式是至关重要的。在IoT解决方案中，手机客户端发起的请求需要对数据内容进行加密，也就是说，手机客户端内需要有AES的密钥。如果对于密钥存放的方式不当，可以轻而易举地将数据还原成明文进行逆向分析，从而进行进一步的攻击。在对大量的IoT设备进行安全研究后发现，设备基本上都会把AES的密钥存放在手机客户端中，有的做得很简单，写在了一个加密函数里。有的做得很深，放在了一个Lib库中。但这些只是提高了一定的技术门槛而已，不是解决安全问题的办法，如下图所示。
  有很多智能设备都会由于会话管理措施不当，造成能够通过会话劫持攻击，直接控制设备，达到设备被破解的一种程度，所以说永远不要使用设备唯一标示符（如UDID、IP、MAC地址、IEME）来标示一个会话。保证令牌在设备丢失/被盗取、会话被截获时可以被迅速重置。务必保护好认证令牌的机密性和完整性（例如，只使用SSL/TLS来传输数据）。使用可信任的服务来生成会话。
  对于智能设备的安全研究，可以通过智能设备所泄露出来的数据，进行进一步利用，从而获得控制权限。所以必须保证安全的东西都不放在移动设备上；最好将它们（如算法、专有/机密信息）存储在服务器端。如果安全信息必须存储在移动设备上，尽量将它们保存在进程内存中。如果一定要放在设备存储上，就要做好保护。不要硬编码或简单地存储密码、会话令牌等机密数据。在发布前，清理被编译进二进制数据中的敏感信息，因为编译后的可执行文件仍然可以被逆向破解物。