V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mikewang
V2EX  ›  信息安全

代理检测:在线检测您是否在使用 Clash

  mikewang · 1 天前 · 16152 次点击

ClashScan

(推荐使用最新 Chrome 内核浏览器) https://mikewang000000.github.io/ClashScan/

代码开源在 GitHub ,页面部署在 GitHub Pages 上。


Clash 是一个比较常见的代理软件,有很多衍生版本和 GUI 程序。
不过我最近才发现它是允许 CORS (跨域)的,这带来了不小的安全隐患。

再加上很多 GUI 默认不加 Secret 进行身份验证,即使运行在 127.0.0.1 ,也能被外部网站随时调用。

如果您没有修改默认配置,值得检测一次。


  • 默认配置下容易检测的:Clash Verge / Clash Verge Rev / ClashX / ClashX Pro / ClashX Meta
  • 默认配置下相对安全的:最新的 Clash for Windows / Clash Nyanpasu
136 条回复    2024-09-30 09:40:14 +08:00
1  2  
yyzh
    1
yyzh  
   1 天前 via Android
在手机上不能用?没看见有按钮
ByteCat
    2
ByteCat  
   1 天前
好慢的扫描
Configuration
    3
Configuration  
   1 天前   ❤️ 1
探测 127.0.0.1 的,循环端口。。。scannedPorts++; 难怪这么慢
GeekGao
    4
GeekGao  
   1 天前
确实是个大问题
yanyao233
    5
yanyao233  
   1 天前   ❤️ 1
草,这确实有点危险了
mikewang
    6
mikewang  
OP
   1 天前
@yyzh 手机端不用扫了(检测电脑端的

@Configuration @ByteCat
实际上常用端口排在最前面的,十秒内没扫到基本上是安全的。
后面虽然会扫整个 65535 ,实际因为浏览器性能低,而且会漏,作用不大。只是作为理论参考。
oneisall8955
    7
oneisall8955  
   1 天前
openclash 透明代理没有检测到
mikewang
    8
mikewang  
OP
   1 天前
@oneisall8955 透明代理等不在 127.0.0.1 上的不会检测到。本质是探测 Clash 在本机的 API 端口。
lower
    9
lower  
   1 天前
太慢了,懒得等了
ffnil
    10
ffnil  
   1 天前
这 Chrome 为啥不阻止网站访问 127.0.0.1
chinni
    11
chinni  
   1 天前
哦扫描本地端口啊 我代理都是在局域网的.. 电脑上啥都没装(
leilinJune
    12
leilinJune  
   1 天前
应该改什么配置
yjxjn
    13
yjxjn  
   1 天前
那怎么避免呢???如何修改默认配置?
s4d
    14
s4d  
   1 天前
有点吓人哦,怎么把我服务器的配置给读出来了?什么原理?
epiphyllum
    15
epiphyllum  
   1 天前
一个解决方法:使用 NoScript 浏览器扩展屏蔽网页对本地网络发起的请求
asuraa
    16
asuraa  
   1 天前
路由上跑的,检测不到
mikewang
    17
mikewang  
OP
   1 天前   ❤️ 1
@leilinJune @yjxjn @s4d 原理是默认端口,并且 API 没有上密码,就被读了。

在 yaml 里面,修改下面两个配置:

external-controller: '127.0.0.1:9090'
secret: 'xxxxxxx'

把 7890 改成随机高位端口,避免扫描; secret 改为随机密码(如果没有这个配置手动加上)。

---

如果被检测并读出服务器配置了,那么你之前可能一直在裸奔(
gzlock
    18
gzlock  
   1 天前   ❤️ 7
1 clash 核心默认打开外部控制功能
2 clash 核心的外部控制功能就是允许跨域的(不然无法使用第三方的外部控制功能 GUI
3 @ffnil 浏览器必然是允许第三方网站读取局域网 ip 资源的
4 @s4d 设置外部控制功能的密钥

其实让这些软件提供个开关切换 启用 / 禁用外部控制功能 即可解决这个问题,楼主的项目正好引发了这个需求
mikewang
    19
mikewang  
OP
   1 天前
#10 @ffnil > 这 Chrome 为啥不阻止网站访问 127.0.0.1

一个是本地调试很多都是在 127.0.0.1 ,另外就是向 QQ 一键登录等功能实际上也是在 127.0.0.1 上的,不过它的接口有鉴权。
ewiglicht
    20
ewiglicht  
   1 天前
不是很懂这个原理,不过我的没扫描出来。PC 本地跑 tun 模式。
LandCruiser
    21
LandCruiser  
   1 天前
@s4d clash 的 gui 你点击打开,相当于在本机运行了一个程序在 127.0.0.1 的某个端口,知道一些 clash 的内部接口,比如获取节点的,然后调用这个接口可以了。
http://127.0.0.1:9097/proxies 比如这个接口,就可以获取 clash 的所有代理节点
gzlock
    22
gzlock  
   1 天前
诸君,刚刚实测把外部控制端口设置为 0 ,即可解决这个问题,clash verge rev 提供的第三方 webui 也无法访问到 clash 核心的数据了

代理功能依然可用,但不确定这些 gui 软件是不是也使用外部控制来控制 clash 核心的,所以把这个信息发出来让大家参与找出 [把外部控制端口设置为 0] 会不会引起其它问题
katsusan
    23
katsusan  
   1 天前
我看了目前在用的机场给 clash 下发的配置都开了这个 external-controller 还是用的默认 9090 端口没加鉴权,
这么大个漏洞居然现在才发现( ╯□╰ )
gzlock
    24
gzlock  
   1 天前
@gzlock #22 好吧,初始阶段没有找到后我就发表了以上回复,但是后续缓慢扫描阶段还是读取出在使用 clash ,上面那个回复当我没发😂😂
gzlock
    25
gzlock  
   1 天前
@gzlock #24 原因:设置 0 端口后,clash 核心就使用随机端口作为外部控制端口了
Goooooos
    26
Goooooos  
   1 天前
127.0.0.1 的还好
openclash 那个如果不是 127.0.0.1 的才危险
chesha1
    27
chesha1  
   1 天前
这速度也太慢了
ochatokori
    28
ochatokori  
   1 天前 via Android
再加个把常见网关地址都扫了
LandCruiser
    29
LandCruiser  
   1 天前
其实我觉得问题不大,上上外网又不是什么杀头的罪,真要较真,运营商那什么都能查到。
ewiglicht
    30
ewiglicht  
   1 天前
貌似原理是循环请求?
因为默认配置无加密,所以请求成功了就知道用户使用了代理软件,甚至根据 api 获取完整配置信息。
因为我修改了控制台的密码,所以检测不出来。
但是我记得如果有密码,HTTP 的响应好像是 403 还是什么来着,而不是无响应,能不能也根据这个判断是否使用了代理类软件。。。
Ashore
    31
Ashore  
   1 天前 via Android
用手机 chrome 请求电脑版网页,能检测出来。。
mikewang
    32
mikewang  
OP
   1 天前
@ewiglicht 是的,加了密码也能扫出来。不过浏览器扫效率太低了,您看上面有很多说慢的(
另外连接数高了也会失败(漏掉)。所以加密码和高端口算是安全的。
mikewang
    33
mikewang  
OP
   1 天前
@Ashore 手机版 Clash 也能读出来吗(捂脸)
出乎意料了。按钮问题是主题设计的,我有空改下。
llsquaer
    34
llsquaer  
   1 天前
这么说本机加个防火墙是不是就好了?
lekai63
    35
lekai63  
   1 天前
所以感觉不是改 7890 端口。而是 external 相关配置咯,端口和 secret
mikewang
    36
mikewang  
OP
   1 天前
#17 @mikewang
#23 @lekai63

是的。我 #17 写的 external-controller 默认应该是 9090 。最好 7890 和 9090 两个一起改了。浏览器一定条件下也能检测 7890 端口的情况,不过读不到东西。
czfy
    37
czfy  
   1 天前
感觉和好久之前提过的这个情况类似?不过看起来是没什么人重视
https://www.v2ex.com/t/946991
nyxsonsleep
    38
nyxsonsleep  
   1 天前   ❤️ 1
把 web 控制直接改成其他地址就行了,比如 127.0.0.2 ,关掉这个控制功能。

没密钥的控制端口,来点漏洞都可以注入攻击了。
mouyase
    39
mouyase  
   1 天前
还以为是什么高端的骚操作,原来只是扫本机的 clash 的 webui 和 proxy 端口……
jqtmviyu
    40
jqtmviyu  
   1 天前
singbox 没扫出来.
其实把常见的客户端端口 9090 9999 之类的扫一扫就行了
crackidz
    41
crackidz  
   1 天前
现在还有一个问题是 Clash Verge Rev 之类的 GUI 客户端覆写了这部分设置,secret 没有生效。你需要去 GUI 界面的设置里调整一下对应的 WebUI 设置。
0o0O0o0O0o
    42
0o0O0o0O0o  
   1 天前
1. 本站曾经有人提醒过 /t/946991 ,我可能也在一些回复里提醒过
2. 想跑题联动一下近期的一个热门帖 /t/1075187 ,不知道有没有哪些朋友看那个帖子 OP 和 @4KMOMhIkocgLELMt 提到的安全隐患觉得不以为然,然而在这个帖子一测试又觉得有被吓到😂
addenvex
    43
addenvex  
   1 天前
我加了 secret ,接口是 401, 也认为我使用了吗

wniming
    44
wniming  
   1 天前
不准,我没用 clash 也能检测成 clash
mikewang
    45
mikewang  
OP
   1 天前   ❤️ 1
#43 @addenvex 是的,即使有密码,返回 401 也能检测到。
请求记录里这些接口会返回 401 ,然后你访问一些其他的路径会返回 404 。通过这些接口路径特征,能推断出 Clash 及其版本号。

#44 @wniming 有一定的推断逻辑在里面,可能你的环境刚好命中特征了。会有误报的可能。
loveqianool
    46
loveqianool  
   1 天前 via Android   ❤️ 1
http://sing-box.sagernet.org/zh/configuration/experimental/clash-api

access_control_allow_origin

自 sing-box 1.10.0 起

允许的 CORS 来源,默认使用 *。

要从公共网站访问私有网络上的 Clash API ,必须在 access_control_allow_origin 中明确指定它而不是使用 *。
access_control_allow_private_network

自 sing-box 1.10.0 起

允许从私有网络访问。

要从公共网站访问私有网络上的 Clash API ,必须启用 access_control_allow_private_network 。
ko20
    47
ko20  
   1 天前
我用的局域网当中的某台机器部署的 clash 暴露出来的 http/https/socks5 代理,然后使用 switchy omega 插件添加 socks5 proxy profile 的。没有检测到 clash
RyougiShiki
    48
RyougiShiki  
   1 天前   ❤️ 1
检测到了,订阅信息都出来了。
ziseyinzi
    49
ziseyinzi  
   1 天前
再加几个常用的路由/旁路由网关地址
shitshit666
    50
shitshit666  
   1 天前
是时候写个蜜罐了,看看是谁偷偷检测了 clash
TossPig
    51
TossPig  
   1 天前
我还以为能扫到我旁路由上的 clash ,结果啥都没监测到
proxytoworld
    52
proxytoworld  
   1 天前
@shitshit666 蜜罐已经自动化利用 cfw 漏洞了...更别说扫描 clash 端口
vvhy
    53
vvhy  
   1 天前
firefox 上被 uBlock Origin 拦截了,关了 ub 之后也被 CORS 拦截了
不会真有人不加密码跑在公网上吧 https://en.fofa.info/result?qbase64=ImV4dGVybmFsLWNvbnRyb2xsZXI6IDkwOTAi
kenvix
    54
kenvix  
   1 天前
TLDR:
如果没开管理端口 secret ,会直接扫出正在打开的网站和节点名称和地址信息
开了 secret 能知道你在用,但无法获取隐私信息
hoofei
    55
hoofei  
   1 天前   ❤️ 1
被检测到了
shizhibuyu2023
    56
shizhibuyu2023  
   1 天前   ❤️ 1
能不能用外行也能看懂的话来描述一下,到底有什么风险?
YCCD
    57
YCCD  
   1 天前
![img]( )
liuzimin
    58
liuzimin  
   1 天前 via Android
你们说的什么外部控制端口?在哪里设置?我只知道 7890 那个。
mikewang
    59
mikewang  
OP
   1 天前   ❤️ 3
#56 @shizhibuyu2023

部分 clash 客户端,默认配置下(默认端口,无密码验证):

1. 即使 clash 端口不暴露外部,运行在本地,外部网站也能通过网页调用,读取或者修改 clash 配置;
2. 如果是老版本 clash 核心,利用这种方法,还可以配合( CVE-2023-24205 )漏洞,控制整台电脑。

如果加了密码,但保持默认端口:

1. 外部网站也能通过网页调用,根据不同的报错情况,推断出你在使用 clash 。

================

#57 @YCCD

好的反馈!我在 macOS Safari 上测试了一下,Safari 不允许从 https 页面上发起 http 请求。
所以是检测不到的。但是如果 GitHub Pages 是 http 的,那就可以调用了。
mikewang
    60
mikewang  
OP
   1 天前
#58 @liuzimin 说的是 9090 的 api 端口,verge 默认是 9097 。
venompool88
    61
venompool88  
   1 天前
配置文件里设置 secret 还没用,要在设置里添加才行,订阅拉取的配置文件被软件覆盖掉了
adsltsee94
    62
adsltsee94  
   1 天前
被检测到了,要怎么搞?
WhatTheBridgeSay
    63
WhatTheBridgeSay  
   1 天前   ❤️ 3
打开控制台发现全被 uBlock Orign 拦截了
WhatTheBridgeSay
    64
WhatTheBridgeSay  
   1 天前
建议在检测页上稍微写一点技术原理,比如这个页面仅仅是通过扫描 127.0.0.1 、遍历端口号的方式查找 clash 及其衍生分支所使用的 external-controller 来确认是否正在使用 clash 。

而不是仅神秘兮兮一句”任何网站都能检测您是否正在使用 Clash 。“,这种表述只会给不明所以的吃瓜群众带来不必要恐慌。

很多情况都会影响判断结果,并且也不一定会造成实际危害。比如 uBlock 之类的拦截器订阅了 Block Outsider Intrusion into LAN 之类的规则,或者干脆浏览器安全策略就直接禁止 FQDN 网站向私有 IP 发起网络请求,并且还有可能各种 GUI 面板给 external-controller 设置了随机密码等等等等实际完全没有危害的情况。
y1y1
    65
y1y1  
   1 天前 via iPhone
跨域不被挡吗?
LeoAshton
    66
LeoAshton  
   1 天前   ❤️ 1
算是挺恶性的漏洞了,clash-verge-rev 默认情况下不设置 secret 是没想到的,建议开个 issue 跟开发者反馈一下
yjxjn
    67
yjxjn  
   1 天前
@gzlock #25 我改成 0 ,并且把密码设置了,貌似可以了。
ltkun
    68
ltkun  
   1 天前
扫描了一个小时 50% 虽然我不用 clash 哈
yexian
    69
yexian  
   1 天前
最新的 Clash for Windows ?什么时候更新了,我还在用很早的版本
gzeng17291
    70
gzeng17291  
   1 天前
把 clash api 的端口给 block 就监测不出了
jhiiii
    71
jhiiii  
   1 天前
还好还好
katana97
    72
katana97  
   1 天前
未发现 Clash,但我是用了的,而且就在 127.0.0.1:7893
blacklinux
    73
blacklinux  
   1 天前
测了一下,无法发现
linux 环境,Clash 在 windows 里,两台物理机
ZeroDu
    74
ZeroDu  
   1 天前
这个被人讲出来有一年了吧,建议还是注明一下。不然以为又是啥大新闻
JingHG
    75
JingHG  
   1 天前
半小时了还在 70%
xxxxxyz
    76
xxxxxyz  
   1 天前
(还用过 op 写的抢座哈哈哈
ZeroDu
    77
ZeroDu  
   1 天前
marc2017
    78
marc2017  
   1 天前
感谢提醒,设了密码好了,不然点订阅节点都给我干出来了。
ihciah
    79
ihciah  
   1 天前
我记得以前某个客户端,api 甚至默认监听 0.0.0.0 ,局域网内即可直接拿到配置信息
asdjgfr
    80
asdjgfr  
   1 天前
clash-verge-rev 默认配置确实被扫到了服务器的配置,必须要在设置里手动设置外部控制器的配置才行,感谢楼主分享
gengGui
    81
gengGui  
   1 天前
还没尝试检测,看了一下 Clash X 设置,包含了这些配置项:
- 代理端口:7890 、
- Api 端口:9090 ,允许局域网控制(不推荐):未勾选、
- Api 密钥:已设置,覆盖配置文件设置:未勾选
为了安全些,是不是要修改默认端口号,更新 Api 密钥,勾选覆盖配置文件设置这些。
clf
    82
clf  
   1 天前
127.0.0.2 就扫不到了。
vishun
    83
vishun  
   1 天前
@nyxsonsleep #38 目前这个程序是扫描'127.0.0.1',如果其他程序设置扫描'127.0.1.2'是不是还是能扫描到?
vishun
    84
vishun  
   1 天前
@WhatTheBridgeSay #64 原理写不写倒是无太关紧要,最好是能将解决方法维护上,方便让大家修改。
nyxsonsleep
    85
nyxsonsleep  
   1 天前
@vishun #83 可以。所以我说了《比如 127.0.0.2 》,一定要设置可以自己高位的 ip ,不在本地的 ip 。也可以自己去改源码,编译,彻底关掉这个功能。
nyxsonsleep
    86
nyxsonsleep  
   1 天前
目前看到的风险主要是钓鱼网站可以通过这个手段偷机场代理。如果 clash 被发现漏洞可以提权抓肉鸡。
opengps
    87
opengps  
   1 天前
这部很原始的穷举本地所有端口方式
SenLief
    88
SenLief  
   1 天前
你们都是有公网 ip 的吗
mikewang
    89
mikewang  
OP
   1 天前 via iPhone   ❤️ 2
@ZeroDu
也不完全一样,做了一些加强。

这次想说明,即使改成 127.0.0.1 ,加密码不改端口号,也能通过路径探测到 clash (虽然获取不到节点信息,但是能知道你在用。)当然不加密码更是直接读配置。

———
@y1y1

之所以能成功跨域,是因为 clash 内核的 header 设置了 Access-Control-Allow-Origin: *,相当于解除浏览器跨域限制,欢迎大家来访问。
不过还有一些浏览器像 Safari 限制更严格,https 不能跨域到 http 被拦截,还有一些隐私插件会拦截,所以不是 100%保证成功。

这次做的比较匆忙,是一个粗糙的 demo ,没有太大技术含量。只是为了证明 CORS 的设置不合理,应有配置能默认关闭。

———
@WhatTheBridgeSay

网页“任何网站都能检测”是对 Access-Control-Allow-Origin: *的解释,通配符允许了所有网站。不过确实不够严谨,因为可能还会遇到其他限制。

时间原因,没法做到面面俱到。网页就在 GitHub 上,如果有好的建议欢迎直接提 PR ~

———
对于端口扫描,正常情况下浏览器前端是没法对本地端口扫描的。Access-Control-Allow-Origin: *导致有被扫到的风险。就是这样。
mikewang
    90
mikewang  
OP
   1 天前 via iPhone   ❤️ 2
@SenLief 这次说明的不是公网问题。而是 Clash 的 CORS 设定不合理,可以通过浏览器前端,让浏览器扫到你 127.0.0.1 上的端口,借浏览器跨域控制 clash 。
wcwac
    91
wcwac  
   1 天前
@nyxsonsleep 直接修改你的代理配置搞中间人攻击也很可怕吧
vitovan
    92
vitovan  
   1 天前
@mikewang #90 感谢楼主。
zmaplex
    93
zmaplex  
   1 天前
提了个提升 128 倍速度的 PR
zmaplex
    94
zmaplex  
   1 天前   ❤️ 2
128 倍扫描速度的体验地址: https://zmaplex.github.io/ClashScan/
PositionZero
    95
PositionZero  
   1 天前
Clash Verge Rev 好像是默认覆盖配置文件里的 external-controller 字段的 ……?确实是个安全问题
lvlongxiang199
    96
lvlongxiang199  
   1 天前
自从 clash 爆出远程代码执行漏洞后, 就把它关在 docker 里的
Felldeadbird
    97
Felldeadbird  
   1 天前
卧槽。马上改。
SiuRayyy
    98
SiuRayyy  
   1 天前
所以这个问题应该怎么解?
wind1986
    99
wind1986  
   1 天前
@ffnil 最新版好像会限制访问本地网站
idou
    100
idou  
   1 天前
谢谢提醒
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4428 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 09:18 · PVG 17:18 · LAX 02:18 · JFK 05:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.