iot学习感悟

关于加密

前期接触iot我们遇到固件基本都是binwalk一把梭,但有时候会遇到固件信息混乱,或者分析出来一堆zlma的文件,没有发现有rtos或者文件系统的标志。

这时候会考虑到是否加密,上网查会发现有用 binwalk 的 -E 参数来判断。

那么这个判断的原理是啥?

原理是信息熵。

熵:泛指某些物质系统状态的一种量度,某些物质系统状态可能出现的程度。

初高中应该都学过,熵值越大,说明系统越混乱。

信息熵:1948年C.E.Shannon(香农)从热力学中借用过来提出的概念,解决了对信息的量化度量问题

信息中,重复的内容越多,系统越稳定,能获得的信息越多。

对于没有加密的二进制文件来说,某些指令出现的频率通常很高(如序言、nop序列等),并且数据结构几乎没有随机性。重复概率很高

所以,对于未加密的数据来说熵值一般会比较低。

对于经过加密的文件来说,都会想尽办法隐藏自己的信息,而导致很少有重复的内容,也就导致重复概率低

所以,加密的熵值一般都会高。

上面就是通过信息熵来判断是否加密,binwalk使用相关算法来整理信息熵

image-20220402140534018

关于web服务

嵌入式的web服务通常是cgi+http 或 lua+http

cgi是叫公共网关接口,是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

常见的嵌入式设备使用的web服务多为以下几款

boa

单一任务型的http服务器,只会对CGI请求进行fork进程,没有访问控制功能,身份认证都是厂商后边开发的。

通过translate_uri函数解析请求路径I判断是否为CGI请求,调用init_cgiexecve执行相关CGI程序

translate_uri函数中的init_script_alias函数,负责解析ScriptAlias请求,设置请求cgi类型,查看文件是否存在以及具有相关权限

通过ScriptAliasboa.conf配置文件中,该指令设置CGI执行的真实目录

不止是boa,nginx的设置中也存在alias,小米路由器就曾因为这个设置导致路径穿越

uhttpd

openwrt的默认http服务器,主要是为了和LucI Web接口方便OpenWrt设备管理。

支持与cgi,lua,UBUS来完成请求。

uhttpd使用LuCI框架编写lua处理脚本,安全审计偏向于Web安全中的代码审计。

但也有一些存放的lua脚本是编译过的,需要逆向。

uhttp下dispatch_find函数根据请求的url找到合适的dispatch_handler

请求的url通过check_cgi_path函数校验,则会调用cgi_handle_request函数回调cgi_main函数execl执行对应的CGI程序

最终调用的/www/cgi-bin/luci即Luci,luci是MVC设计思想的web后端框架。

简单了解下,后面一款小米路由器分析思路会详细介绍

Goahead

route.txt定义的路由规则,根据匹配的URI来执行不同的handler:有action handler直接在GoAhead进程中执行C函数,CGI handler执行新的CGI程序,也有默认的file handler处理文件请求,还可以自定义新的handler

详细请看官方文档:https://www.embedthis.com/goahead/doc/

调用websUrlHandlerRequest函数找到匹配URL前缀的处理函数,可以借助websFormDefine函数定义与formName相关联的C处理函数

由上面几个可以看出来,都是通过URL来选择执行CGI/lua或是内部程序

并且根据PATH_INFO选择执行程序内最终的handler函数。

这里属于个人复述,这个文章比较详细:https://github.com/Larryxi/Larryxi.github.io/blob/master/_posts/2020-02-03-iot-web-server-cgi-handler-analysis.md

分析的一些思路

分析的话根据上面的东西来看

一定要有个设备,或者去模拟这些设备。

保证正常的web访问,方便查看功能调用的url/接口。

一定不要去公网站直接用人家的设备,要做个守法的好孩子!!!

根据上面的知识来获取相关功能的具体实现位置。

然后分析危险函数,以及是否可控。

或者

从危险函数向外分析功能点。


iot学习感悟
http://example.com/article/41f88cb3.html
Author
p1yang
Posted on
July 20, 2022
Licensed under