Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
Lakr233 opened this issue Oct 1, 2022 · 3 comments
Closed

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

Lakr233 opened this issue Oct 1, 2022 · 3 comments
Assignees
Labels
help wanted Extra attention is needed

Comments

@Lakr233
Copy link

Lakr233 commented Oct 1, 2022

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

否(No)

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

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

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

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

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

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

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

给用户提示

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

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

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

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

@Lakr233 Lakr233 added the help wanted Extra attention is needed label Oct 1, 2022
@pppscn
Copy link
Owner

pppscn commented Oct 3, 2022

1、内网穿透后自己加上ssl

2、之所以允许误差1小时,是因为客户端跟服务端时间可能不同步,你的“后续请求时间戳必须大于上一次时间戳”,实际上也有bug,客户端时间快了,请求一次之后,校时了,是不是就请求失败了?

3、【记录一下最后一次签名的时间戳】这个不好弄(或者说不能兼容现有的),客户端vs服务端,是多对一的,时间必须记录到每个客户端上,如果只记录一个,也有时间不同步问题

@Lakr233
Copy link
Author

Lakr233 commented Oct 3, 2022

请求一次之后,校时了,是不是就请求失败了?

那它确实就应该失败了。

是多对一的

可以考虑在请求加一个字段,例如 DeviceSeed (推荐该字段可选以完美兼容现有客户端),来区分多个客户端的请求。

我提的建议目标是让每一个请求不能复用相同的数据,不论是随机数还是 timestamp 也好。能够重放的设计是有问题的,SSL也只是一种保护并不治理设计上的问题。当然兼容性这块还是交给你来考虑,你应该更了解现有设备和部署的情况。

pppscn added a commit that referenced this issue Oct 15, 2022
优化:允许自定义客户端与服务端时间容差,避免请求重放攻击 #227
@pppscn
Copy link
Owner

pppscn commented Oct 15, 2022

新增:HttpServer请求/应答报文进行RSA非对称加密传输
优化:允许自定义客户端与服务端时间容差,避免请求重放攻击 #227

@pppscn pppscn closed this as completed Oct 15, 2022
venpong pushed a commit to venpong/SmsForwarder that referenced this issue Oct 21, 2022
* 'main' of https://github.com/pppscn/SmsForwarder:
  新增:`HttpServer`请求/应答报文进行`国密SM4`对称加密传输 【配套`SmsF`微信小程序】
  新增:`HttpServer`请求/应答报文进行`RSA`非对称加密传输
  升级:gradle及依赖版本
  修复:远程控制发送短信时手机号不能包含国家地区代码 (pppscn#231)
  新增:`HttpServer`请求/应答报文进行`RSA`非对称加密传输 优化:允许自定义客户端与服务端时间容差,避免请求重放攻击 pppscn#227
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants