某设备CoAP协议漏洞挖掘实战

admin 2022年8月20日01:48:40IoT评论4 views4003字阅读13分20秒阅读模式

某设备CoAP协议漏洞挖掘实战

本文为看雪论坛优秀文章

看雪论坛作者ID:风亦映寒


发现看雪等国内安全论坛好像CoAP协议相关内容很少,以及CVE中基本也是CoAP协议库存在的漏洞,所以将最近对某设备CoAP漏洞挖掘的相关分析整理记录一下。


CoAP原理简要介绍(具体可以看rfc文档)


CoAP可以简单的当做基于UDP协议的轻量化HTTP协议。

协议栈:
某设备CoAP协议漏洞挖掘实战
Constrained RESTful Environments (CoRE)
  • 基于REST

  • 应用于受限节点和网络

  • 帮助client对server进行Resource Discovery


CoAP Resource Discovery 机制
  • 基于CoRE

  • 使用/.well-known/core 作为 Well-Known URI, 详见 rfc8615

  • 例: CoAP server 提供了2个资源

REQ: GET coap://server:port/.well-known/core
RES: 2.05 Content </sensors/temp>;if="sensor", </sensors/light>;if="sensor"

安全机制

CoAP 有四种安全机制:NoSec, PreSharedKey ,RawPublicKey,Certificate, 但是只有NoSec和RawPublicKey是强制实现的。
  • NoSec:no protocol-level security (DTLS is disabled)

  • PreSharedKey: DTLS is enabled. 基于pre-shared keys进行认证。

  • Certificate: DTLS is enabled. 基于具有X.509证书的非对称密钥进行认证。

  • RawPublicKey:DTLS is enabled. 基于 raw public key进行认证。


CoAP 本身没有实现认证和授权机制,而是通过 communication security(IPsec,DTLS)和object security 来完成。

安全考虑

  • 协议解析和URI的处理
传入数据包的处理逻辑可能存在漏洞

  • 代理和缓存
代理会破坏IPsec或DTLS的保护

  • 反射攻击
由于UDP协议无法验证源地址导致的反射攻击
关于这个有一些相关的报告
https://www.netscout.com/blog/asert/coap-attacks-wild
https://anquan.baidu.com/article/807

  • IP地址欺骗攻击
发送伪造的ACK等消息

  • Cross-Protocol Attacks
通过伪造源地址,导致绕过防火墙规则达成的攻击



实战


CoAP协议默认端口为5683或5684,端口为5683时的安全机制为NoSec, 5684则是开启了DTLS。看了下设备端口开启的5683。
udp        0      0 0.0.0.0:5683            0.0.0.0:*

如下,设备实现了基于CoRE 的 Well-Known URI。
if ( *((_BYTE *)v21->hdr + 1) == 1 && !memcmp(key, &unk_A0DC, 4u) ){  coap_log_impl(7, "create default response for %sn", ".well-known/core");  v22 = wellknown_response(context, node->pdu);}

所以可以直接进行 Resourse Discovery 过程:
import asynciofrom aiocoap import *
async def main(): protocol = await Context.create_client_context() msg = Message(code=GET, uri="coap://192.168.1.1:5683/.well-known/core") response = await protocol.request(msg).response print(response.payload)
asyncio.run(main())

可以看到,CoAPserver 提供了以下资源:
b'</>;title="General Info";ct=0,...</device/inform/boot>;title=device/inform/boot,</device/inform/syncreq>;title=device/inform/syncreq,</device/inform/off>;title=device/inform/off,</device/inform/hb>;title=device/inform/hb,</device/inform/data>;title=device/inform/data,</device/cmd/file>;title=device/cmd/file</async>;ct=0'

逆向对应二进制看到的代码实现,对应的函数名和URI也 可以推测下对应功能。
void *__fastcall start_coap_server_thread(void *a1){ pthread_t v1; // $v0 v1 = pthread_self(); pthread_detach(v1); ... registerCoapMethod("device/inform/boot", coapboot_handler) registerCoapMethod("device/inform/syncreq", coapsync_handler) registerCoapMethod("device/inform/off", coapoff_handler) registerCoapMethod("device/inform/hb", coaphb_handler ) registerCoapMethod("device/inform/data", coapdata_handler) registerCoadMethod("device/cmd/url", coapdata_url_handler) ... startCoapService("0.0.0.0", 5683); return 0;}

剩下的就是对这些函数进行进一步漏洞挖掘了。
 
挖掘成果:

1、coapsync_handler函数会将设备SSID,Pwd等参数返回给client,导致了信息泄露,比较鸡肋的一个洞。
...cJSON_AddItemToObject(v73, "SSID", v13);v14 = cJSON_CreateString(&v83[136]);cJSON_AddItemToObject(v73, "SecurityMode", v14);v15 = cJSON_CreateString(&v83[72]);cJSON_AddItemToObject(v73, "Pwd", v15);...

某设备CoAP协议漏洞挖掘实战

2、Url字段数据导致的命令注入。

recv_cmdfile_handler会调用到cmdupgrade_parse。

cmdupgrade_parse会从post的cjson数据中解析出Url的值
v17 = cJSON_GetObjectItem(v9, "Url");    v18 = v17;    if ( v17 )    {      v19 = *(const char **)(v17 + 16);      v20 = 0;      if ( v19 )      {        v21 = strlen(v19);        v20 = malloc(v21 + 1);        v22 = strlen(*(const char **)(v18 + 16));        memset(v20, 0, v22 + 1);        strcpy((char *)v20, *(const char **)(v18 + 16));      }

最终会调用函数do_upgrade, 而Url字段数据会拼接到system执行的命令中,达成未授权RCE。

do_upgrade
int __fastcall do_upgrade(const char *Url){...  if ( !strcmp((const char *)v35, "XXXX-XXXXXX") )    snprintf(cmd, 0x180u, "curl %s -o %s%s -k", Url, "/var/tmp/", uri);  else    snprintf(cmd, 0x180u, "wget -q -P %s %s", "/var/tmp/", Url);  system(cmd);}

一些相关工具

  • cotopaxi

    https://github.com/Samsung/cotopaxi

  • libcoap,aiocoap等 coap 协议实现库



攻击路径


判断是否可以进行resource discovry 操作获取CoAP server 的资源;
判断安全机制是哪种;
判断是否实现了认证机制;
对请求解析函数进行逆向分析。


引用

https://tools.ietf.org/html/rfc8615

https://datatracker.ietf.org/doc/html/rfc6690

https://en.wikipedia.org/wiki/Constrained_Application_Protocol

https://datatracker.ietf.org/doc/html/rfc7252

https://datatracker.ietf.org/doc/html/rfc5785



某设备CoAP协议漏洞挖掘实战


看雪ID:风亦映寒

https://bbs.pediy.com/user-home-647447.htm

*本文由看雪论坛 风亦映寒 原创,转载请注明来自看雪社区

某设备CoAP协议漏洞挖掘实战



# 往期推荐

1.协议分析实战

2.编写一个简单的linux kernel rootkit

3.Tenda摄像头分析

4.Android APP 漏洞之战——WebView 漏洞详解

5.uds诊断协议-逆向题 WP

6.CVE-2018-18708 TENDA缓冲区溢出漏洞



某设备CoAP协议漏洞挖掘实战



某设备CoAP协议漏洞挖掘实战

球分享

某设备CoAP协议漏洞挖掘实战

球点赞

某设备CoAP协议漏洞挖掘实战

球在看



某设备CoAP协议漏洞挖掘实战

点击“阅读原文”,了解更多!

原文始发于微信公众号(看雪学苑):某设备CoAP协议漏洞挖掘实战

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月20日01:48:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  某设备CoAP协议漏洞挖掘实战 http://cn-sec.com/archives/1244620.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: