Skip to content

修补当前漏洞的建议 #10

@KawaiiZapic

Description

@KawaiiZapic

发表一些拙见,考虑不周请多担待。

问题

  1. 启动时未检查启动的目标是否为正确的核心 (可以启动任何恶意程序)
  2. 不知道请求是否确实由GUI发出,缺少鉴权手段 (通过连接暴露到局域网的Clash代理访问daemon)
  3. HTTP API有从网页调用的可能,不带参数的简单POST请求不受CORS限制造成DoS攻击(网页可以直接停止核心)

威胁

  1. 权限提升
  2. 拒绝服务

目标

  1. 检查核心是否正确
  2. 拒绝不具有Local Access的程序访问daemon (阻止局域网访问、网页简单请求访问)

手段

  1. 对核心做校验和(阻止其他路径的程序启动,阻止核心被替换为恶意程序)
  2. 鉴权;限制UA;限制代理访问daemon

实现思路

校验和

  1. 尝试启动核心前,先对核心做SHA256校验和
  2. 校验和由GUI生成,写入到本地磁盘上的文件
  3. GUI需要请求用户以管理员权限执行写入校验和到磁盘的操作,并正确设置校验和文件的权限,阻止非管理员修改校验和文件内容
  4. daemon收到启动核心请求,首先检查校验和文件是否存在,再检查校验和文件是否设置了正确的权限。校验和文件通过检查后,再对将要启动的核心计算校验和,并比对文件内容。校验和文件权限检查通过(必须检查权限防止校验和被伪造)且核心的校验和与文件中的相同,才允许启动核心。

阻止不合适的人访问daemon

  1. 考虑直接上一套鉴权,最容易想到但是最麻烦(如何在daemon与GUI之间同步secret)
  2. 检查来源UA,阻止浏览器访问daemon,启动核心时强行添加一条规则拒绝连接到本地的daemon。(Direct模式绕过规则仍然可以访问)

未能解决的问题

  1. 攻击者仍可以通过指定启动核心时使用的配置,利用核心的本身的一些功能,以使用核心附带的高权限来进行任意文件的覆写(Linux可以设置Capabilities限制实际权限范围,其他平台?)
  2. 攻击者通过替换核心程序文件,用户发现无法启动核心,误打误撞重新生成校验和,使攻击者得逞,达到绕过校验的目的(也设置核心文件的权限为仅限管理员写入?当核心文件校验和不对时强制重新下载核心?在GUI对用户发出极其严重的警告?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions