将Symantec VIP Access的一次性验证码转为通用TOTP - r0k1s#i

将Symantec VIP Access的一次性验证码转为通用TOTP

Posted on 10月 20, 2024

背景

使用 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 方案,而必须使用赛门铁客 Symantec 的闭源专有应用程序「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'

image

Windows 没有测试,不太清楚能不能直接用 qrencode,用 wsl 应该也不困难。

如果有困难推荐用下面方式生成二维码。

使用 CyberChef生成二维码

CyberChef 被誉为「赛博瑞士军刀」,提供了数百种不同的"操作",可以执行编码/解码、加密/解密、数据分析等各种任务。

利用它生成二维码自然不在话下:

image

它是完全在浏览器中运行的客户端应用, 所有的数据处理都在用户的本地浏览器中完成, 而不会将数据发送到服务器。

当然如果觉得使用别人的实例操作不放心,有能力的自己在本地用 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.