青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 阿里巴巴全资合并UC优视7个问题解读阿里巴巴收购UC »

GoAgent的安全风险

  GoAgent 利用 Google App Engine (GAE) 来实现安全上网,以免费、快速、稳定的特点深受网民的欢迎。但是,GoAgent 的安装和配置中存在两点严重安全风险的问题却鲜为人知。这两点安全风险都可能被攻击者利用进行 “中间人攻击(man-in-the-middle attack)” 来窃取 GoAgent 用户的网络帐号密码等敏感信息,其概括描述如下:

  • GoAgent 在启动时会尝试自动往系统的可信根证书中导入一个名为 “GoAgent CA” 的证书。由于这个证书的私钥是公开的,导致任何人都可以利用这个私钥来伪造任意网站的证书进行 HTTPS 中间人攻击。即使在不开启 GoAgent 时,这种攻击的风险仍然存在。换而言之,一旦这个证书被导入,攻击者可以用此绕过几乎所有网站的 HTTPS 保护。
  • GoAgent 本身对 TLS 证书的认证存在问题,而且默认时不对证书进行检查,这导致在使用 GoAgent 时存在 HTTPS 中间人攻击的风险。

  事实上曾经有用户在 GoAgent 主页上的问题跟踪列表中指出了这两个安全问题(见以下链接),但既没有修复也没有广泛公开,多数用户,尤其是非中文用户可能并不知情。下面是这两个问题的详细解释。

https://code.google.com/p/goagent/issues/detail?id=11091
https://code.google.com/p/goagent/issues/detail?id=8031

  GoAgent 导入公开私钥根证书的问题

  GoAgent 在启动时会尝试在系统中导入一个根证书来避免访问 HTTPS 网站时的证书报警,但在默认情况下所导入证书的私钥是公开的。因为私钥公开,任何人可以作为 “GoAgent CA” 来签发任何网站的证书。即使在 GoAgent 没有启动甚至卸载的情况下,这个公钥仍会遗留在系统中。在有些系统中,GoAgent 所导入的根证书不仅被 GoAgent 默认使用的浏览器信任,其他的浏览器也可能会信任这一根证书,从而受到这一问题的影响。

  GoAgent 所导入的这一公开私钥根证书的指纹是:

SHA1 Fingerprint=AB:70:2C:DF:18:EB:E8:B4:38:C5:28:69:CD:4A:5D:EF:48:B4:0E:33MD5 Fingerprint=56:B1:20:86:1B:0A:B0:61:38:00:1B:C3:67:CF:0C:CC

  包含这一 “GoAgent CA” 证书以其私钥(文件中 -----BEGIN RSA PRIVATE KEY----- 位置)的文件 URL 为:

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/local/CA.crt

  根据版本信息,这一证书和私钥从 2011 年 6 月甚至更早的时间以来一直保持不变。

https://github.com/goagent/goagent/blob/fa9959e577395e48a477fd5495afbc2363a51baa/local/CA.key

  GoAgent 主要包含两个部分:一个在用户计算机上运行的本地代理程序 proxy.py,以及一个在 GAE 上运行的远程代理程序 gae.py

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/local/proxy.py
https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/server/gae/gae.py

  安装时,用户需要上传 gae.py 到 GAE。用户浏览器通过设置一个本地代理将 HTTP/HTTPS 请求转发到 proxy.py,再由 proxy.pygae.py 进行通信。

  默认情况下,GoAgent 在启动时试图导入上述 GoAgent CA 证书。具体的代码为 proxy.py 中的 CertUtil.import_ca

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/local/proxy.py#L337

  这个函数会根据用户操作系统通过不同的方式尝试导入证书,在某些情况下会需要管理员(root/administrator)权限。在 Windows 下,这个函数会调用 CertAddEncodedCertificateToStore 这一 API。在 OS X 下,会尝试执行系统命令

security find-certificate -a -c "GoAgent" | grep "GoAgent" >/dev/null || security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "pwd/CA.crt"

  在 Ubuntu 下,会拷贝证书文件到 /usr/local/share/ca-certificates 然后执行 update-ca-certificates。在其他 GNU/Linux 发行版中,会尝试执行以下命令更改 NSS 数据库:

certutil -L -d sql:$HOME/.pki/nssdb | grep "GoAgent" || certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n "GoAgent" -i "pwd/CA.crt"

  由于 Firefox 采用了不同的方式存储证书,这一自动安装过程不会导入 GoAgent CA 证书到 Firefox 中。但是 GoAgent 的安装指南和 FAQ 中说明了如何手动导入这一证书:

https://code.google.com/p/goagent/wiki/InstallGuide
https://code.google.com/p/goagent/wiki/FAQ

  这一证书随后被 proxy.py 用来作为 HTTPS 中间人来避免浏览器在访问 HTTPS 网站时出现报警。GoAgent 的工作原理如下:首先 proxy.py 将浏览器的 HTTP 请求进行编码并转发给 gae.pygae.py 完成收到的请求然后将结果进行编码后返回给 proxy.py,最后 proxy.py 将结果转发给浏览器来完成 “翻墙” 过程。由于 GAE 的限制 (免费 app 无法使用 socket 接口),对于 HTTPS 请求,proxy.py 无法进行透明转发,只能作为中间人先和浏览器完成连接,然后获得其中的明文请求以后在转发给 gae.py。当收到 CONNECT 请求(这意味着浏览器正在浏览一个 HTTPS 网站), proxy.py 首先利用 GoAgent CA 签发一个假的证书来和浏览器完成握手,从用户的角度,所有的 HTTPS 网站的证书都是由事先导入的 “GoAgent CA” 认证的,所以不会报警。有些浏览器会对少数网站的证书进行特别的检查(Certificate Pinning),这种情况下 "GoAgent CA” 所签发的证书可能会触发证书不安全的报警。GoAgent 的这种工作方式导致 HTTPS 不再是浏览器到网站的端到端安全通信,而变成了 proxy.py 到 GAE,以及 GAE 到网站两段独立的 HTTPS 连接,GAE 能够看到请求和应答的明文。

GoAgent的安全风险

GoAgent的安全风险

  测试页面

  请访问

https://goagent-cert-test.bamsoftware.com/

  来进行测试。这个页面使用了一个由 GoAgent CA 签发的证书。如果你的浏览器没有受到影响,会显示报警信息;如果没有看到报警,则表明你的浏览器导入了公开的 GoAgent CA 证书,存在严重安全风险。

  如何防止风险

  GoAgent 本身带有生成证书文件 CA.crt 的功能。只需要删除 local/CA.crt 文件就能保证 GoAgent 所导入的证书是唯一的,不会被网络上的攻击者利用来进行攻击。

  下面的 “补丁(patch)” 文件会帮助你从 GoAgent 的 git 仓库中删除 CA.crt 文件,请下载补丁文件并执行以下命令: git am 0001-Remove-static-CA.crt.patch. 如果你不是通过 git 获得 GoAgent(例如直接从 http://code.google.com/p/goagent/ 上的链接下载得到),请手动删除 local/CA.crt 文件。

0001-Remove-static-CA.crt.patch

  如果你以前曾经使用过 GoAgent,务必要检查系统中任何可能的地方,删除 SHA-1 指纹为 AB:70:2C:DF:18:EB:E8:B4:38:C5:28:69:CD:4A:5D:EF:48:B4:0E:33 的 “GoAgent CA” 证书(建议使用浏览器访问上面的测试页面进行检查)。下面说明在常见系统中检查和删除 GoAgent CA 证书的方法。

  如何删除 GoAgent CA 证书

  Firefox 中,打开 “preferences”,”Advanced”, “Certificates”, “View Certificates”, “Authorities”,然后在证书列表中找到 “GoAgent CA”,选中并点击 “Delete or Distrust...” 按钮,然后确认。

GoAgent的安全风险

  Ubuntu 下,删除 /usr/local/share/ca-certificates/GoAgent.crt 然后执行

update-ca-certificates --fresh

  Windows 下,请参考以下链接:

http://technet.microsoft.com/en-us/library/cc754841.aspx#BKMK_addlocal

  中 "Adding certificates to the Trusted Root Certification Authorities store for a local computer" 的步骤,但是在 step 8 时右键选中 "GoAgent CA" 然后选择 "Delete"。

GoAgent的安全风险

  在 Mac OS X下,打开 “Keychain Access” 应用,点击锁图标并输入密码解锁。在边上的控制面板中,选择 "System" 以及 "Certificates",选中 "GoAgent CA" 然后按 “Delete” 键,点击 "Delete" 按钮并输入你的密码确认。

GoAgent的安全风险

  GoAgent 没有进行正确的 TLS 验证,存在中间人攻击的风险

  默认情况下,GoAgent 会通过 HTTPS 来保护本地 proxy.py 和 GAE 服务器上的 gae.py 之间的通信 (在配置文件 proxy.ini 中相关的设置默认为 gae.mode=https)。但是同样在默认情况下,GoAgent 不会要求对 GAE 服务器的证书进行验证(gae.validate=0),这导致本地 proxy.py 和 App Engine 服务器之间的通信存在 HTTPS 中间人攻击的风险。此外, gae.validate 配置项同样控制 App Engine 上的 gae.py 是否对网站服务器的证书进行验证,默认配置下这一配置为 0 导致 gae.py 也不会对网站证书进行验证,使得 gae.py 和网站之间的通信同样存在 HTTPS 中间人攻击的风险

  即使修改配置启用证书验证(gae.validate=1),GoAgent 对 App Engine 服务器证书的验证也并不严格:在 proxy.py 中只是对证书的 organizationName 进行了粗略的检查(是否为 “Google ” 开头),而没有对主机名(hostname)进行匹配。

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/local/proxy.py#L1623

  将配置改为 gae.validate=1 同时会启用 gae.py 段对网站服务器证书的验证,这部分的事先没有明显的问题。

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/server/gae/gae.py#L184

  GoAgent 还提供了一个可选功能,通过 RC4 和一个共享密钥来对 proxy.pygae.py 之间的数据进行进一步的混淆。启用这一功能需要在 proxy.ini 中设置 gae.password,以及 gae.options=rc4,并在 gae.py 中设置 __password__ 变量。

https://github.com/goagent/goagent/blob/c4386808ea943e2ebed25f1e5264943354e3f9cb/server/gae/gae.py#L5

  但是,这里的 RC4 加密只能起到一个简单的混淆作用,无法在不启用 HTTPS 的情况下利用这一功能来防止中间人攻击。GoAgent 中的 RC4 无法实现数据的机密性,因为密码本身会通过一个 G-password 头在 proxy.pygae.py 中传送,而且在两段通信中会使用同样的密码流(keystream),导致攻击者很容易通过密文的 XOR 操作来获得 XOR 过的明文(见流密码的重用问题,Stream Cipher Key Reuse),进而得到明文。在这里 RC4 只能起到防止其他 GoAgent 用户共享服务端流量的目的,无法提供更多的保护来防止网络攻击。

  如何防止风险

  确认在 proxy.ini 中设置了 gae.mode=https (默认),并且启用了证书验证 gae.validate=1(非默认)。这样的设定基本上能够防止 proxy.py 和 GAE 服务器,以及 GAE 服务器和网站服务器之间的 HTTPS 中间人攻击。由于 proxy.py 中没有对证书的主机名进行严格匹配,proxy.py 和 GAE 服务器的通信仍存在(相对较小的)风险,如果有人能够申请到 organizationName 字段以 “Google ” 开头的证书,仍然能够成功进行HTTPS 中间人攻击。

  来源:bamsoftware,原文链接



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/3882.html
  • 文章排行:
  • 1.Jd刘锟洋
  • 老子宁愿攻击 也不相同百度。
    blue 于 2016/3/27 16:06:21 回复
    强烈推荐这个: proxy999.objweb。com 本人一直在用,秒开国外一切网站,速度杠杠的!
  • 2014/6/13 20:10:14   支持(89)反对(43) 回复
  • 2.tkiller
  • 使用 GoAgent 需要采取如下措施来保证安全:
    1. 将 zip 解压缩后删除 Goagent\local 下的 CA.crt 和 cacert.pem 以及certs目录;
    2. 在 win+R 打开运行框,输入 certmgr.msc 启动证书管理器 - 受信任的根证书颁发机构 - 证书 - 在右侧列表中找到 GoAgent CA 并删除;
    3. 确认 proxy.ini 中的设置为
    [gae]
    mode = https(默认)- 启用“超文本传输安全协议”
    validate = 1(非默认)- 启用“证书验证”

    4. 重新运行 GoAgent ,其会重新自动随机生成本地证书,此证书是安全的!
    kaka 于 2015-3-12 15:14:38 回复
    您好,请问我删除了CA证书之后,再次启动goagent还会生成新的CA证书,这个新的就是安全的了吗?
    谢谢!
  • 2014/6/17 10:52:35   支持(75)反对(36) 回复
  • 3.xman
  • goagent提问区有很多内奸,别用那里提供的IP测试工具,只要以测试,那IP过一会全被封掉,
    现在挂了很多好IP,可惜了,切记别用那里的IP测试工具,
    最新版goagent 默认设置就可以,就是稍微慢了点~
  • 2014/6/13 20:58:32   支持(51)反对(30) 回复
  • 4.小白鼠
  • chrome浏览器,按要求删除证书,删除CA.crt,结果测试网站还是能正常上,google、youtube等ssl证书错误
    lilali1991 于 2014-6-13 10:04:46 回复
    同样,删除goagent CA以后,现在无法打开google了
    lilali1991 于 2014-6-13 10:09:10 回复
    又能上了,。。。。。
  • 2014/6/13 7:57:20   支持(38)反对(27) 回复
  • 5.峪飞鹰
  • 之前正好看过这些问题,所以建议用GoAgent的时候,不要登录任何帐号,最好用一个单独的浏览器使用,并且不要加CA证书。
  • 2014/6/13 8:17:09   支持(36)反对(26) 回复
  • 6.无名
  • 说了半天原来是为了最后一个VPN做广告,哈哈,有意思。
  • 2014/7/2 2:07:50   支持(38)反对(28) 回复
  • 7.suruiqiang
  • 从一开始就没敢导入他的根证书,还是花几块钱买个SSH用的安心也省心!
  • 2014/6/13 9:00:11   支持(35)反对(26) 回复
  • 8.LouisHan
  • 木有办法啊 还是得继续用
  • 2014/6/12 21:27:05   支持(33)反对(25) 回复
  • 9.Asen_Shi
  • 所谓的中间人,不一定是那些想要你帐号密码的人,也有可能是造墙的人。。所以有用Goagent的请注意一下。及时根据提示修改自己的配置。
  • 2014/6/13 9:14:12   支持(41)反对(33) 回复
  • 10.snail
  • 大多是Google搜索需要时才开启翻一翻, 要MIMT请随意,
  • 2015/3/12 5:45:14   支持(26)反对(20) 回复
  • 11.TheRoverCat
  • 更想了解shadowsocks的安全性。
  • 2014/6/13 9:07:12   支持(32)反对(27) 回复
  • 12.anyongege
  • 证书已经删除,但chrome还是可以直接打开测试连接,是什么情况?
  • 2014/6/13 17:58:28   支持(33)反对(28) 回复
  • 13.北
  • 不信任证书不就可以了,只不过每次多点一下而已
  • 2014/6/17 19:05:46   支持(29)反对(24) 回复
  • 15.sss
  • 难道你一直认为在这个郭家,有隐私可言???
  • 2014/6/19 11:56:07   支持(33)反对(29) 回复
  • 16.求教
  • 被封后,如何管理google adsense呢?
  • 2014/6/12 18:44:14   支持(32)反对(29) 回复
  • 17.抹茶温度
  • 很早就注意到了,但是你如果加密的话,访问速度不是一般的慢~但是为了速度,放弃安全,忍了吧。PS:这货早不用了,太搓。不能上传视频和图片
  • 2014/6/13 9:22:13   支持(26)反对(23) 回复
  • 18.tohours
  • 小心,小心,一定要小心这样的事情出现
  • 2014/6/12 22:31:51   支持(33)反对(31) 回复
  • 19.发粪图墙ING
  • 河北长城宽带可以直接打开facebook了。。。。。。
    mypayne 于 2014-6-18 9:10:17 回复
    去年广州联通也是可以。不改host的情况下https能上youtube和facebook,不过twitter不行。现在貌似被修复了
  • 2014/6/13 8:05:08   支持(34)反对(32) 回复
  • 20.卖田
  • 海淘遇到需要翻墙刷卡的时候,是GAE安全点还是VPN呢
  • 2014/6/13 8:30:10   支持(29)反对(27) 回复
  • 22.nihao
  • 我将证书删除之后,使用goagent不能访问google了,但是可以访问facebook和youtube,这个要怎么解决啊,我是小白,能帮帮我吗?
    nihao 于 2014-6-13 10:37:40 回复
    清楚了浏览器数据之后能上了。。。好吧
  • 2014/6/13 10:34:04   支持(31)反对(29) 回复
  • 23.达文西亮
  • 。。。看了得找收费VPN了,推荐个靠谱的吧。
  • 2014/6/13 8:20:10   支持(32)反对(31) 回复
  • 24.初九---
  • 虽然不懂,但是还是在用GAE
  • 2014/6/16 23:24:52   支持(27)反对(26) 回复
  • 25.Hacintosh
  • 是的,我很早就注意到这个问题了。
  • 2014/6/13 8:43:11   支持(27)反对(27) 回复
  • 27.766
  • ie会报警,火狐为什么不报警呢
  • 2014/6/15 19:34:12   支持(32)反对(32) 回复
  • 28.1465959849132
  • hello ,
    楼主,你的usr用法不对吧,Beikao帝(Http://Www.Beikaodi.Com/word/usr.html)中的例句好像不是你这么用的
    time:11:04:09 AM
  • 2016/6/15 11:05:37   支持(0)反对(0) 回复
  • 29.小三子
  • 使用 Goagent 还有一个隐私问题,会向访问的网站发送 appid 账号。
  • 2014/6/12 21:51:09   支持(34)反对(35) 回复
  • 31.Bensye
  • 境外买服务器架设VPN是最安全的选择
  • 2014/6/13 9:17:12   支持(26)反对(27) 回复
  • 33.112
  • 月光你说的这些问题早已过时了。证书的问题不想多说,删除原有CA证书后,GOA自动生成一个独一无二的证书。中间人攻击问题,你可以在proxy.ini中将validate = 0设置为validate = 1 即可避免中间人攻击。配置ini文件开启RC4加密。这些都不是问题
  • 2014/6/27 22:49:13   支持(36)反对(37) 回复
  • 35.JeanTse
  • 但最近google服务整个被封掉,GAE应该也没法用了吧。。。
  • 2014/6/13 8:24:10   支持(32)反对(34) 回复
  • 38.一朵云
  • 最近feedly进不去是goagent原因还是。不管用不用都进不去。。
    vingc 于 2014-6-13 9:28:05 回复
    Feedly的原因,我用vpn也上不去,官方提示“故障,正在修复”
    vingc 于 2014-6-13 9:28:25 回复
    今天可以上了
  • 2014/6/13 8:56:39   支持(26)反对(29) 回复
  • 39.YuanTheGreat
  • 不要用它自带的证书,由GoAgent软件生成证书即破。
  • 2014/6/13 9:39:14   支持(32)反对(35) 回复
  • 40.彬尐尐彬
  • 博主,问下,Dropbox怎么能实现同步?谢谢
  • 2014/6/12 16:45:29   支持(20)反对(24) 回复
  • 41.ray心碎乌托邦
  • 那我还想问下,自由门安全吗
  • 2014/6/13 9:11:12   支持(26)反对(30) 回复
  • 44.__bradlee__
  • 自己动手搭建的vpn是王道。。。
  • 2014/6/12 16:52:30   支持(37)反对(42) 回复
  • 45.kevin
  • 重新生成的证书和原来的是一样的,是这样吗?
  • 2014/6/14 10:01:00   支持(29)反对(34) 回复
  • 47.766
  • 删除证书后,那个测试页面进去,还是没有报警啊
  • 2014/6/15 19:19:54   支持(25)反对(31) 回复
  • 48.Mark
  • 看了这个马上删掉了cert,但是这样google什么完全上不了了,想再装回来发现一添加就证书管理器未响应。
  • 2014/6/20 16:35:29   支持(24)反对(30) 回复
  • 49.谁抢了蓝小星
  • 还能愉快地上网吗?!!!
  • 2014/6/13 9:44:14   支持(21)反对(29) 回复
  • 50.dsfdf
  • 不安全!目田门有后门。详情自己搜索
    动机不纯 于 2014-6-13 9:50:49 回复
    关目田门鸟事?没看清文章就来黑,动机不纯啊。
  • 2014/6/12 18:52:14   支持(31)反对(40) 回复
  • 52.sunny
  • 按上述操作没有警告的清理下浏览器试下,另外重新载入后速度慢了好多
  • 2014/8/7 20:21:00   支持(26)反对(36) 回复
  • 53.这个
  • 删除了证书之后firefox基本废了。
  • 2014/12/4 11:42:58   支持(19)反对(34) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

相关文章

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.