AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

物联网渗透测试(二):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:001488

评论 1 条评论

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

C语言-strlen和sizeof强化习题练习- I

芒果酱

c++ C语言 5月月更

WorkPlus统一门户:企业信息互通,实现业务协作

BeeWorks

「微博评论」高性能高可用计算架构设计

dan629xy

goscript: 遇见yaegi所带出的思路

humboldt

Go goscript

WordPress 主题和插件

海拥(haiyong.site)

WordPress 5月月更

ansible 模块:delegate_to

ghostwritten

ansible

解构HE2E中的Kubernetes技术应用

华为云开发者联盟

Docker Kubernetes DevOps HE2E CCE部署

下个十年高性能 JSON 库来了:fastjson2!

王磊

Java

招商蛇口重塑客户经营新思路,推动多业态融合升级

科技热闻

PingCAP 宣布 TiDB Cloud 正式商用,助力全球企业在云上构建新一代云原生应用

极客天地

CrossOver2022Mac/Linux/win系统互相如何切换?

茶色酒

crossover

网站开发进阶(五十玖)css实现背景透明,文字不透明

No Silver Bullet

CSS 5月月更

浅述容器和容器镜像的区别

汪子熙

Docker 容器 容器镜像 虚拟化技术 5月月更

企业实践|分布式系统可观测性之应用业务指标监控

阿里巴巴云原生

阿里云 云原生 可观测

“可严可仁”的考勤系统,让数字化不漏掉人性化

明道云

ansible 模块:cron

ghostwritten

ansible

Druid连接池源码阅读02

石小天

ansible 模块:become

ghostwritten

ansible

ansible 模块:debug

ghostwritten

ansible

C语言_字符串与指针的练习

DS小龙哥

5月月更

Docker下的OpenResty三部曲之一:极速体验

程序员欣宸

Docker 5月月更 openrestry

教你用 ECharts 轻松做一个Flappy Bird小游戏

华为云开发者联盟

图表 eCharts 图表库 Flappy Bird 小游戏

SaaS到底是什么?如何做?

小炮

SaaS

为什么前端不能没有监控系统?

杨成功

大前端 构架 5月月更

编码压缩介绍

Loken

音视频 5月月更

金钱无法给你安全感,能力才行,你同意吗?

叶小鍵

druid源码学习二-对锁的理解

Nick

java 并发 lock锁

程序员转型产品经理:懂技术或许是把双刃剑!

博文视点Broadview

网站开发进阶(五十五)CSS padding、margin 属性

No Silver Bullet

5月月更 padding magin

快慢缓急总相宜|ONES 人物

万事ONES

Java遇上SPL:架构优势和开发效率,一个不放过

华为云开发者联盟

Java stream 应用架构 SPL 结构化数据处理

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