将Symantec VIP Access的一次性验证码转为通用TOTP
背景
使用 Schwab 添加 2 FA 时你会发现,方式只有以下几种:
- Notification to my mobile device
- We’ll send a notification to your mobile device or open your mobile app to verify.
- Text
- We’ll send a code to a number in your profile.
- Security token
使用 app 本身作为 2 FA 显然不是一个好的做法,选项二的短信作为 2 FA 更为丑陋。
特别是使用中国大陆的手机号时, schwab 发的短信验证码是无法收到的,会导致账户被锁死,一定注意。
选项三的 Security token,不是目前通用的 TOTP 方案,而必须使用赛门铁客的闭源专有应用程序「VIP Access 」客户端。
不用「VIP Access 」的理由:
- iOS 的 VIP Access 太丑
- VIP Access 的数据不支持导出、备份
- 我更喜欢 TOTP all in one 在一个程序
- 每次打开不同程序寻找 toptp code 效率低下
- VIP Access 是闭源专有软件
那我们就要想办法将 Symatec「VIP Access 」的 TOTP 转换为通用的 TOTP,以便在诸如 Google Authenticator 、Authy、Yubikey 等软硬件上使用。
安装和使用 python-vipaccess
主要使用项目: https://github.com/dlenski/python-vipaccess 。
该项目由 @cyrozap 逆向「VIP Access 」而开发,后来由 @dlenski 改进维护。
风险提示:
此项目代码,原理是伪装成 Symatec VIP 的一个旧 macOS 版本,一个 Symantec 现在不再使用的版本。
因此,如果一旦 Symantec 的服务器拒绝与旧版本的应用程序通信,则此方法则会失效。
历史上,Symantec曾在 2020 年 5 月短暂地禁用过与此版本客户端的通信,并且可能会在未来任何时候再次这样做。
不过,就算将来禁止,也只是无法转换新的 token ,已经转换过的 token 应该不受影响。
快速开始
# 安装
pip3 install python-vipaccess
# 新版python用
pipx install python-vipaccess
# 生成新的token
vipaccess provision -p -t SYMC
你会看到类似以下的输出:
Generating request...
Fetching provisioning response...
Getting token from response...
Decrypting token...
Checking token...
Credential created successfully:
otpauth://totp/VIP%20Access:VSMT22195338?issuer=Symantec&algorithm=SHA1&secret=SS3MEAKIBPSZYOI5NAOQHE2WDQYUXM3Z&digits=6&period=30
This credential expires on this date: 2022-05-30T14:13:21.891Z
You will need the ID to register this credential: VSMT22195338
You can use oathtool to generate the same OTP codes
as would be produced by the official VIP Access apps:
oathtool -d6 -b --totp SS3MEAKIBPSZYOI5NAOQHE2WDQYUXM3Z # 6-digit code
oathtool -d6 -b --totp -v SS3MEAKIBPSZYOI5NAOQHE2WDQYUXM3Z # ... with extra information
VSMT 22195338
就是你要提交给 Schwab 或者其他(使用 Symantec VIP)网站的凭证SS3MEAKIBPSZYOI5NAOQHE2WDQYUXM3Z
则是用来导入通用TOTP 程序的 secret token- 而这一串输出,可以用来生成二维码 :
otpauth://totp/VIP%20 Access: VSMT 22195338? Issuer=Symantec&algorithm=SHA 1&secret=SS 3 MEAKIBPSZYOI 5 NAOQHE 2 WDQYUXM 3 Z&digits=6&period=30
生成二维码
我个人更喜欢直接使用 key 导入 TOTP 程序,而不是二维码。
如果实在想要生成二维码,那么推荐两种办法:
使用 qrencode 生成二维码
Linux 和 MacOS 可以很容易地安装 qrencode
生成二维码。
qrencode -t ANSI256 'otpauth://totp/VIP%20Access:SYMC54313423?period=30&digits=6&issuer=Symantec&secret=5YKAUZA4I4RAIJIZBU4KME34XLODWEUX&algorithm=SHA1'
Windows 没有测试,不太清楚能不能直接用 qrencode,用 wsl 应该也不困难。
如果有困难推荐用下面方式生成二维码。
使用 CyberChef生成二维码
CyberChef 被誉为「赛博瑞士军刀」,提供了数百种不同的"操作",可以执行编码/解码、加密/解密、数据分析等各种任务。
利用它生成二维码自然不在话下:
它是完全在浏览器中运行的客户端应用, 所有的数据处理都在用户的本地浏览器中完成, 而不会将数据发送到服务器。
当然如果觉得使用别人的实例操作不放心,有能力的自己在本地用 docker 临时起一个 CyberChef 更为推荐。
导出已在使用Symantec VIP Access
很遗憾,「VIP Access 」不支持导出、迁移和备份。
所以如果已经绑定了一个「VIP Access 」,那么方法只有:
- 在账户中解绑已绑定的「VIP Access 」
- 删除 code、卸载「VIP Access 」
- 使用 python-vipaccess 生成新的 secret token, 妥善备份
- 绑定到账户
💬 Comments
You can use your Fediverse account to reply to this post.