Skip to content

[讨论]: 本地服务器模式不太安全 #227

@Lakr233

Description

@Lakr233

是否有人曾提过类似的问题?

否(No)

你觉得APP有什么不足之处?

有这么几个原因吧,本地部署默认不支持 SSL 的样子,这样一来会导致一些问题。

举个简单的例子,你的签名请求只有时间戳和密钥,时间戳可以复用,这样一来一旦请求被拦截了(尤其是本地没有 SSL 的情况下这个攻击可以轻而易举的在路由器上面完成)攻击者就可以利用这个签名在一小时内随意操作设备。

演示一下:
假设:我们捕获了从手机发送出来的响应数据。(HTTP 模式可以直接从代理软件看到请求)
结果:可以使用发回来的时间戳和他的签名伪造新的请求对设备进行任意控制。

代码:
截屏2022-10-02 01 50 33
截取:
截屏2022-10-02 02 04 59

你觉得该怎么去完善会比较好?【非必答】

我知道,内网设备应该处于受信任的状态再开启这项功能,但是有个很简单的方法可以避免这类攻击。所以我提两点建议吧就说。

给用户提示

比方说,在按钮下面放一行话:开启这项功能要求网络环境是安全的。

记录一下最后一次签名的时间戳

我们的目标是让所有签名只能使用一次,那么请求中毫秒级别的时间戳递增特性可以直接拿来使用。在每一次 请求校验成功 >和< 生成响应数据的签名 时记录时间戳,要求后续请求时间戳必须大于当前即可。基于这种方案做的改进不会影响到客户端现有兼容性,可以考虑实现一下。(首次启动的时候记得将时间戳设置到当前)

上面这种方案也带来了新的问题,在客户端数量较多的极端情况下可能会丢弃大量请求。可以考虑在请求加一个字段,例如 DeviceSeed (推荐该字段可选以完美兼容现有客户端),来区分多个客户端的请求。

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is needed

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions