50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

物联网渗透测试(二):IoT 中的 Web 应用

  • 2020-05-10
  • 本文字数:2667 字

    阅读完需:约 9 分钟

物联网渗透测试(二):IoT 中的 Web 应用

编者按:本文节选自华章网络空间安全技术丛书《物联网渗透测试》一书中的部分章节。

IoT 中的 Web 应用

网站,也称为 Web 应用,已经无须对其进行过多的介绍了。基本的 Web 应用程序通常最少由前端 HTML 页面、JavaScript 脚本、1 台后台 Web 服务器、1 台应用程序服务器和 1 套数据库组成。随着 Web 应用的发展,为了降低后端架构或设备的计算载荷,Web 应用程序开始更多地依赖 JavaScript 脚本等前端代码。但是运行在互联网中的 Web 应用同运行在嵌入式设备中的 Web 应用略有不同。


读者所熟悉的 Web 应用组件之间存在更多的依赖关系,因为常见的 Web 应用会将 Web 服务器、应用服务器、数据库服务器以及后台运行的微服务进行分离。其中服务器的分离是出于性能和可用性等方面的考虑。而通常嵌入式 Web 应用被设计为在自包含的环境中运行。从更深层次上来说,也就是对嵌入式 Web 应用的性能和可用性方面关注较少。


目前 IoT 领域中主要有两种不同的 Web 应用模型,分别是混合云模型与独立嵌入式服务器模型。混合云模型中包含了厂商或者供应商提供的基于软件即服务(Software as a Service,SaaS) 的 Web 应用,作用是同运行在嵌入式设备固件中的 Web 应用程序建立连接,然后,将数据从厂商的云服务器中同步到本地网络的嵌入式设备中。有些 IoT 设备则会直接使用 IoT 云服务提供商的 SDK,例如 AWS 提供的 IoT SDK 和 Azure 提供的 IoT SDK,并且将这些 SDK 编译进设备的 Web 应用程序栈中。为了确保符合机构的服务条款并且遵循所在区域的法律规范,混合云模型的识别非常重要。许多采用混合云模型的 IoT 公司经常以 OEM 的方式借助第三方软件开发公司或 ODM 来管理其 Web 应用。这些 ODM 的 Web 应用通常被贴牌为某款 OEM 产品,在没有设置通信流量代理的情况下,用户通常不会注意到这种情况。


IoT 设备的混合云模型如图 1 所示,其中 IoT 设备能够连接到互联网。该场景中,在厂商云平台与用户设备之间由设备接口提供 Web 服务,用户访问设备接口进行操作或者进行数据收集。



图 1 混合云 Web 应用模型


如前所述,嵌入式设备的 Web 应用在设备固件内部运行,以 lighttpd 或者 nginx 等程序作为嵌入式 Web 服务器,而不存在外部依赖。读者可能对这些独立嵌入式 Web 应用比较熟悉,在打印机、VoIP 电话和家庭路由器中都可以找到这些应用。通常情况下,用户输入直接发送到设备固件,如果未对用户输入进行验证或过滤,攻击者则可以向设备发起攻击尝试执行任意命令。在某些情况下,出于防止外部攻击或者便于管理的目的,嵌入式 Web 应用设计为仅在局域网(Local Area Network,LAN)环境中运行。这也是家用 IoT、工控设备和商用设备中的典型情况。通常将设备限定在局域网环境下是出于安全方面的考量,但从我们所了解的情况来看,这种方式难以有效地缓解攻击。这是因为,持有这种观点的设备厂商在现实中发现客户总是会有意无意地将设备连接到互联网上,从而给用户网络带来安全隐患。


图 2 展示了用户通过 Web 浏览器连接独立嵌入式 Web 应用的过程,其中该应用不依赖于外部系统。



图 2 本地嵌入式 Web 应用模型

Web 通信

浏览器、嵌入式服务器和 Web 应用服务器之间的通信通常要么借助简单对象访问协议(Simple Object Access Protocol,SOAP)/XML 等 Web 服务,要么借助基于 HTTP/HTTPS 符合 REST 规范的 API 来实现。SOAP 请求中通常包含 1 个 envelope 元素、1 个 xmlns:soap 命名空间、1 个 encodingStyle 属性,此外还包括其他元素,例如 SOAP 中的 body 元素。读者可以通过访问链接https://www.w3schools.com/xml/xml_soap.asp了解更多关于 SOAP 协议的内容。


下面展示了一个查询账户余额的 HTTP SOAP 请求示例:


POST http://example.com/soap/webservices HTTP/1.1User-Agent:Mozzilla/t.0 (Machintosh;Intel Mac OS X 10.12; rv:49.0)Gecko/20100101 Firefox/49.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Authorization: BasicYWRtaW46YWRtaW4=Content-Length: 821Content-Type: text/plain;charset=UTF-8DNT: 1Connection: keep-aliveHost: example.com
<soapenv:Envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:v1="http://example.com/webservices/BillingAccountSummary/V1"> <soapenv:Header/> <soapenv:Body> <getAccountBalance> <messageHeader> <action>get</v1:action> <scopeObject>AccountBalance</v1:scopeObject> <revision>1.0</v1:revision><createdTimestamp>2017-01-13T09:15:01.469</v1:createdTimestamp> <sourceInterface>WEB</v1:sourceInterface> <messageIdentifier>00810187-101EDDA4</v1:messageIdentifier> <functionName>getAccountBalance</v1:functionName> </messageHeader><billingAccountIdentifier>1234566</v1:billingAccountIdentifier> </getAccountBalance> </soapenv:Body></soapenv:Envelope>
复制代码


REST 风格的 API 用到了多个 HTTP 方法,而这些方法的使用并不符合传统 Web 应用的用法,例如传统 Web 应用采用 PUT 方法更新资源,采用 DELETE 方法删除资源,而采用 REST 风格的请求则是通过 URL(对于敏感数据不推荐采用此方法进行处理),或者以 JSON 格式表示的 HTTP 协议报文等方式调用参数。


在电子邮件分发列表中添加邮件地址 test@example.com 的 REST 请求示例如下:


POST /rest/email/subscribe HTTP/1.0Host: example.comUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:49.0)Gecko/20100101 Firefox/49.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Content-Type: application/jsonContent-Length: 160Connection: close
{ "subscriberId":"12345", "emailAdress":"test@example.com", "confirmed":"Y"}
复制代码


可以采用中间人代理来查看基于 SOAP 协议或符合 REST 风格的请求报文。常用的 Web 代理工具包括 Burp Suite 与 OWASP ZAP,借助这些工具可以查看从浏览器和移动应用发送到 Web 应用后端的所有请求。我们将在第 4 章中详细介绍如何配置代理来查看应用流量。


对于 IoT 设备而言,常常采用 Web 应用对其设备进行控制,因此,无论是从网络内部还是网络外部来看,Web 应用都是发起攻击的常见途径。在第 4 章中,我们将会了解如何识别 IoT 设备中 Web 应用的缺陷与漏洞。


图书简介https://item.jd.com/12623610.html



相关阅读


物联网渗透测试(一):简介


2020-05-10 10:001612

评论 1 条评论

发布
用户头像
可以寻求合作吗?
2023-03-26 16:35 · 菲律宾
回复
没有更多了
发现更多内容

git bisect:让你闭眼都能定位疑难 bug的利器

华为云开发者联盟

开发 bug git bisect 二分法定位

大咖说·图书分享|阿里官方为你分享内部测试之道

大咖说

阿里巴巴 测试 开发

直播回顾|携手 Opentelemetry 中国社区,走进可观测性

Daocloud 道客

云原生 可观测性

关于敏捷测试象限的“秘密”

BY林子

敏捷开发 敏捷测试 测试策略

【技术干货】代码示例:使用 Apache Spark 连接 TDengine

TDengine

数据库 tdengine 开源 时序数据库

A New ETL Language -- Easy SQL

Bright

数据开发 ETL 大数据开发 EasySQL

【等保测评】2022年北京正规等保测评机构新名单公布

行云管家

等保测评 北京

中科大脑知识图谱平台建设及业务实践

NebulaGraph

图数据库 知识图谱

艾莫尔研究院基于Karmada的落地实践

华为云开发者联盟

云原生 Karmada 自动化集群管理

实验室信息管理系统如何工作?

低代码小观

低代码 实验室管理系统 企业管理系统 LIMS实验室信息管理系统 企业管理软件

常用的 Lambda 表达式案例解析,工作中都会用到!

CRMEB

【等保测评】等保测评师怎么考,前景怎么样?

行云管家

网络安全 IT运维 等保测评 等保测评师

企评家,企业成长性评价系统怎么用?

企评家

企业成长性分析 企评家 企业投资价值评价

给小白的 PG 容器化部署教程(上)

RadonDB

postgresql 容器化 数据库·

MSVC编译静态库

Loken

5月月更

精彩回顾|KubeCon EU 2022 Kubernetes Batch + HPC 专题日

Daocloud 道客

Kubernetes 云原生 HPC batch

上新了 亚麻云 | 远程办公有点上头?解锁云上应用现代化的奥秘

亚马逊云科技 (Amazon Web Services)

远程办公 应用

VPN的应用场景

源字节1号

小程序开发

ZooKeeper 在阿里巴巴的服务形态演进

阿里巴巴云原生

Apache zookeeper 阿里云 开源 云原生

【直播预告】研发效率百倍提升的秘密,这些破圈思路了解一下!

FinClip

小程序 finclip 直播预告

UniqueMergeTree:支持实时更新删除的ClickHouse表引擎

字节跳动数据平台

Clickhouse 表引擎 实时

揭秘华为云GaussDB(for Influx)最佳实践:hint查询

华为云开发者联盟

数据库 倒排索引 GaussDB(for Influx) hint 单时间线

PostgreSQL 15 新特性解读 | 墨天轮优质文章合集

墨天轮

数据库 sql postgresql 新特性

MSVC编译多个C程序文件

Loken

音视频 5月月更

3D赛车【附源码】设计实现

JavaPub

直击中小企业转型通用痛点 联想百应推出智能会议解决方案

极客天地

编程,不止有代码,还有艺术

华为云开发者联盟

数据库 倒排索引 GaussDB(for Influx) hint

固态硬盘和机械硬盘的区别(7大区别,简单易懂)

源字节1号

软件开发 前端开发 后端开发 小程序开发

一份优秀的产品帮助文档怎么写?

小炮

Java 实现 1024 小游戏【附源码】

JavaPub

Java 实现 贪吃蛇 小游戏【附源码】

JavaPub

物联网渗透测试(二):IoT 中的 Web 应用_安全_亚伦·古兹曼,阿迪蒂亚·古普塔_InfoQ精选文章