bjdgyc / anylink

AnyLink是一个企业级远程办公 ssl vpn 软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端。
GNU Affero General Public License v3.0
1.59k stars 381 forks source link

feat:根据SNI返回SSL证书 #233

Closed denymz closed 1 year ago

bjdgyc commented 1 year ago

上次没仔细看,你这个提交的功能 主要是干什么,根据sni返回证书的意义是什么

denymz commented 1 year ago

上次没仔细看,你这个提交的功能 主要是干什么,根据sni返回证书的意义是什么

意义在于增强安全性,减少信息泄漏。例如censys等工具会不间断扫描互联网中的主机端口,并收集返回的信息。如果始终提供真实的证书,那么就会被类似引擎收集到。该提交目的在于启动时生成一个临时的证书,如果访问时的域名与证书域名不匹配,则会返回一个假的临时证书。那么类似的扫描工具就无法得知该主机上运行了什么网站或系统,降低被入侵或攻击的风险。

bjdgyc commented 1 year ago

但是现在遇到一个问题,客户端不支持 sni,就没法获取匹配的证书,如 anyconnect 4.8。这种情况是否还需要兼容? 还有就是 假的证书文件,并不能防止用户获取到网站信息,只要有信息返回就可以进一步判断。

denymz commented 1 year ago

但是现在遇到一个问题,客户端不支持 sni,就没法获取匹配的证书,如 anyconnect 4.8。这种情况是否还需要兼容? 还有就是 假的证书文件,并不能防止用户获取到网站信息,只要有信息返回就可以进一步判断。

4.8不支持SNI么?这我就不太清楚了;我测试过新版本是支持的,所以要么升级客户端,要么就忽略证书验证。我认为升级客户端是个不错的选择。 这个SNI机制的主要目的是防止censys类似工具的。在入侵前期,首要的是收集信息,censys等工具是一个重要的收集途径。 你可以尝试使用search.censys.io搜索一下你自己的域名看看效果。

bjdgyc commented 1 year ago

image

我搜索域名的时候显示为空,不知道是不是用的方式不对

denymz commented 1 year ago

image

我搜索域名的时候显示为空,不知道是不是用的方式不对

可能姿势不对,你配置的证书是泛域名而搜索输入的是具体域名吧?或者通过其他方式阻止了主机被扫描到,那你也可以试着搜索anylink,我试过了,有一大堆的主机,你可以点击其中的某个端口就能看到其中的证书信息了。所以如果不用SNI的话,就会出现输入一个域名,就能搜索到这台主机。比如我要攻击 xx.com 的服务器,但是它前面有一层CDN导致我不知道它的具体服务器地址。而这时候如果它的vpn跟其他服务部署在同一台服务器,那么我只要搜索他的域名,就能得到真实服务器地址,从而进行下一步动作。

denymz commented 1 year ago

image image 如上图

bjdgyc commented 1 year ago

ok, 本次我先做了兼容处理,等用户客户端都升级后,新版本再换成严格模式

denymz commented 1 year ago

嗯,如果后续计划支持多域名的话,就可以通过SNI实现,比如 vpn.xx.com 和 vpn.yy.com 指向同一主机的情况。根据不同域名返回不同证书。

bjdgyc commented 1 year ago

非常感谢,后续各种安全问题,都可以多多讨论