-
Notifications
You must be signed in to change notification settings - Fork 13
Open
Description
发表一些拙见,考虑不周请多担待。
问题
- 启动时未检查启动的目标是否为正确的核心 (可以启动任何恶意程序)
- 不知道请求是否确实由GUI发出,缺少鉴权手段 (通过连接暴露到局域网的Clash代理访问daemon)
- HTTP API有从网页调用的可能,不带参数的简单POST请求不受CORS限制造成DoS攻击(网页可以直接停止核心)
威胁
- 权限提升
- 拒绝服务
目标
- 检查核心是否正确
- 拒绝不具有Local Access的程序访问daemon (阻止局域网访问、网页简单请求访问)
手段
- 对核心做校验和(阻止其他路径的程序启动,阻止核心被替换为恶意程序)
- 鉴权;限制UA;限制代理访问daemon
实现思路
校验和
- 尝试启动核心前,先对核心做SHA256校验和
- 校验和由GUI生成,写入到本地磁盘上的文件
- GUI需要请求用户以管理员权限执行写入校验和到磁盘的操作,并正确设置校验和文件的权限,阻止非管理员修改校验和文件内容
- daemon收到启动核心请求,首先检查校验和文件是否存在,再检查校验和文件是否设置了正确的权限。校验和文件通过检查后,再对将要启动的核心计算校验和,并比对文件内容。校验和文件权限检查通过(必须检查权限防止校验和被伪造)且核心的校验和与文件中的相同,才允许启动核心。
阻止不合适的人访问daemon
- 考虑直接上一套鉴权,最容易想到但是最麻烦(如何在daemon与GUI之间同步secret)
- 检查来源UA,阻止浏览器访问daemon,启动核心时强行添加一条规则拒绝连接到本地的daemon。(Direct模式绕过规则仍然可以访问)
未能解决的问题
- 攻击者仍可以通过指定启动核心时使用的配置,利用核心的本身的一些功能,以使用核心附带的高权限来进行任意文件的覆写(Linux可以设置Capabilities限制实际权限范围,其他平台?)
- 攻击者通过替换核心程序文件,用户发现无法启动核心,误打误撞重新生成校验和,使攻击者得逞,达到绕过校验的目的(也设置核心文件的权限为仅限管理员写入?当核心文件校验和不对时强制重新下载核心?在GUI对用户发出极其严重的警告?)
Metadata
Metadata
Assignees
Labels
No labels