NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论 1 条评论

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

JavaScript 数组展平方法: flat() 和 flatMap()

devpoint

11月日更 flat flatMap

程序员如何应对职业天花板

石云升

职场天花板 职场经验 11月日更

架构原则

卢卡多多

架构 11月日更

译文 | Apache Pulsar 集群如何确保消息不丢

Apache Pulsar

Java 分布式 云原生 中间件 Apache Pulsar

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

豪华阵容!13位专家力荐Spring5为企业级开发提供一站式方案

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

【死磕Java并发】-----J.U.C之AQS:阻塞和唤醒线程

chenssy

11月日更 死磕 Java 死磕 Java 并发

博文推荐 | Apache Pulsar 三大跨地域复制解决方案

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

活动预告|AICon全球人工智能与机器学习技术大会

第四范式开发者社区

机器学习 开源 OpenMLDB

直播预告|11.27(周六)观测云&思否联合举办的开发者线上沙龙巡演第3站来啦

观测云

直播 沙龙

天翼账号网关系统架构演进历程

架构 网关 亿级流量 双十一

Tapdata 在线研讨会:DaaS vs 大数据平台,是竞争还是共处?

MongoDB中文社区

mongodb

我滴个乖乖!首次公布Java10W字面经,Github访问量破百万

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

为什么要学习linux内核源码以及如何学习Linux内核源码

赖猫

c++ Linux 运维 嵌入式 Linux内核

DPDK 网络协议栈-vpp-OvS-DDos-虚拟化专家之路

赖猫

Linux 网络协议栈 DPDK

一物一码可追溯!看区块链如何帮助消费者

CECBC

小谈C#异常

喵叔

11月日更

学习Java需要掌握哪些技能?

程序员万金游

Java

2021年底Java最新学习路线图

程序员万金游

Java

公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档

热爱java的分享家

Java 面试 程序人生 经验分享 P8

风口上的低代码:我们看到了这些变化与趋势

脑极体

顺丰科技 x StarRocks :双十一实时运单分析实践

StarRocks

数据库 大数据 数据分析 StarRocks

(文末福利)如果代码莫名其妙跑起来了,就不要去动它了……吗?

Zilliz

数据库

Java线程的生命周期包括哪几种状态?

程序员万金游

java线程

博文推荐|深度解析如何在 Pulsar 中实现隔离

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

头条观察 | 元宇宙成为必然趋势的三种可能

CECBC

激荡十年,从未来窗口 re:Invent 看云计算发展变迁 | Q推荐

亚马逊云科技 (Amazon Web Services)

数据库 云计算 云原生 re:Invent

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

不脱发的程序猿

Python PyQt GUI设计 QSpinBox计数器类

Java Collectors API实践

FunTester

Java API 测试开发 FunTester Collectors

博文推荐|腾讯专家深度解析 Apache Pulsar 五大应用场景

Apache Pulsar

架构 分布式 云原生 Apache Pulsar 消息中间件

声网下一代视频引擎架构探索与实践

声网

音视频 视频处理 RTE 技术详解

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