启明星辰 PowerSDP(eTrust)密码找回案例

记一次启明星辰 PowerSDP(eTrust)密码找回案例

背景:公司使用启明星辰 PowerSDP(eTrust)作为远程办公 VPN 接入工具。某天同事忘记登录口令,管理员重置流程较长,于是尝试从本地数据入手恢复凭据。本文记录了完整的安全审计过程以及最终的工具化方案。


一、问题起源

同事忘记了自己的 eTrust VPN 登录密码,正常流程需要提交工单找 IT 管理员重置,周期较长。但该同事之前在客户端勾选了「记住密码」,说明凭据是保存在本地的。

于是我们思考:既然本地保存了密码,能否安全地恢复出来?

这本质上是一个本地凭据存储安全审计的问题。


二、审计过程 --- 密码存在哪?

2.1 系统钥匙串

首先检查 macOS 钥匙串(Keychain),这是系统级的凭据管理器:

bash 复制代码
security find-generic-password -s "etrust" ~/Library/Keychains/login.keychain-db
# 结果:未找到相关条目

钥匙串中只存了设备 Token(fc_uuidForDevice),没有用户登录密码。

2.2 应用配置文件

接着查看应用 plist 配置,发现了一些元信息:

bash 复制代码
defaults read ~/Library/Containers/E37A953A-.../Data/Library/Preferences/com.sdp.etrust.plist

输出中包含:

  • 应用信息:启明星辰 ©2000-2023
  • 密码策略:8位以上,需含大小写+数字+特殊字符
  • 一个可疑字段:simkey.default = "kema49cf6mEqprc76FYIOw=="(SIM 认证密钥,非登录密码)

配置里有密码策略,但没有密码本身。

2.3 应用数据目录 --- SQLite 数据库

在沙盒容器中发现了一个 SQLite 数据库:

复制代码
~/Library/Containers/<UUID>/Data/Library/Application Support/SIMguard/Model.sqlite

打开看看:

bash 复制代码
sqlite3 Model.sqlite ".tables"
# ZVSGADDRESSENTITY  ZVSGUSERENTITY  ...

sqlite3 Model.sqlite "SELECT ZUSERNAME, ZPASSWORD FROM ZVSGUSERENTITY;"
# chenzeyao|7s7JmSsc4xM9vcB+vIFHWQ==

找到了凭据存储位置! 用户名是明文,密码是一段编码后的数据。

2.4 数据库结构

sql 复制代码
-- 用户凭据表
CREATE TABLE ZVSGUSERENTITY (
    ZUSERNAME TEXT,    -- 用户名
    ZPASSWORD TEXT,    -- 密码(编码存储)
    ZRECORD INTEGER,
    ZAUTOLOGIN INTEGER
);

-- 服务器地址表
CREATE TABLE ZVSGADDRESSENTITY (
    ZADDRESS TEXT,     -- VPN 服务器地址
    ZPORT INTEGER      -- 端口号
);

2.5 存储路径汇总

平台 可能的路径
macOS(沙盒) ~/Library/Containers/<UUID>/Data/Library/Application Support/SIMguard/Model.sqlite
macOS(非沙盒) ~/Library/Application Support/eTrust/Model.sqlite
Windows %APPDATA%\Venusense\Model.sqlite%LOCALAPPDATA%\eTrust\Model.sqlite

三、安全审计发现

通过对存储方式的分析,我们发现了几个值得关注的安全隐患:

# 问题 风险等级 说明
1 固定密钥硬编码 🔴 高 加密密钥写死在二进制中,可被提取
2 固定初始向量 🔴 高 IV 固定,相同密码总产生相同密文
3 可逆加密存储 🟡 中 凭据以可逆方式保存,提取到密钥即可还原
4 无密钥派生 🟡 中 未使用 KDF,无法防御暴力枚举

如果您是企业安全工程师,建议对内部使用的 VPN 客户端进行类似的安全评估。


四、凭据恢复工具

基于审计结论,我开发了一个跨平台的凭据恢复工具,支持 macOS 和 Windows。

4.1 工具特性

特性 说明
🔍 自动搜索数据库 支持多种安装路径,无需手动指定
🔑 自动扫描密钥 从应用二进制中提取候选密钥并自动验证
🖥️ GUI + CLI 双模式 双击即用 GUI,也支持命令行
📦 零外部依赖 内嵌纯 Python AES 实现
📋 一键复制 恢复结果直接复制到剪贴板
💻 跨平台 macOS / Windows / Linux

4.2 macOS / Linux 使用方法

方式一:GUI 图形界面(推荐)

bash 复制代码
python3 etrust_password_decryptor.py --gui

双击 .app 包也可以直接启动。

方式二:命令行模式

bash 复制代码
# 自动搜索数据库并恢复
python3 etrust_password_decryptor.py

# 手动指定数据库路径
python3 etrust_password_decryptor.py -p /path/to/Model.sqlite

# 恢复单条密文
python3 etrust_password_decryptor.py -d "7s7JmSsc4xM9vcB+vIFHWQ=="

# 安静模式(只输出密码,适合脚本调用)
python3 etrust_password_decryptor.py -q

# 显示详细信息(含服务器地址)
python3 etrust_password_decryptor.py --all

命令行输出示例:

复制代码
  eTrust Password Decryptor v2.0
  ======================================

  正在搜索 eTrust 数据库...
  [√] /Users/xxx/Library/Containers/.../SIMguard/Model.sqlite

  正在扫描密钥并解密...

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  服务器: xxxxxxxx
  用户名: xxxxxx
  密  码: xxxxx
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

4.3 Windows 使用方法

方式一:双击 BAT 文件(零配置)

解压 eTrust密码解密-Windows版.zip,双击 eTrust密码解密.bat

脚本会自动处理 Python 环境:

  1. 检测系统 Python --- PATH、py launcher、常见安装路径
  2. 未安装则自动下载 --- 下载 Python 便携版(约 8MB,仅首次)
  3. 启动 GUI 界面 --- 自动搜索并恢复凭据

整个过程无需任何手动配置。

方式二:命令行

cmd 复制代码
REM 自动搜索
python etrust_password_decryptor.py

REM 指定路径
python etrust_password_decryptor.py -p C:\Users\xxx\AppData\Roaming\Venusense\Model.sqlite

4.4 自动密钥扫描

工具会从应用二进制中自动提取并验证加密密钥:

复制代码
Step 1: 自动查找应用安装路径
Step 2: 提取候选密钥字符串
Step 3: 过滤干扰项(类名、函数名等)
Step 4: 逐个验证,找到有效密钥
Step 5: 缓存结果,后续直接使用

这意味着工具可以适配不同版本的应用,无需手动更新密钥。

4.5 GUI 界面说明

工具使用 tkinter 构建,界面简洁直观:

  • 蓝色标题栏
  • 可选的数据库路径输入框(留空则自动搜索)
  • 「解密」按钮(或启动时自动执行)
  • 结果以卡片形式展示:用户名 + 大号密码显示 + 复制按钮
  • 解密操作在后台线程执行,不会卡住界面

五、改进建议

对厂商和开发者的安全建议:

  1. 使用系统密钥存储 --- 利用 Keychain(macOS)/ Keystore(Windows)管理加密密钥,绑定设备硬件
  2. 采用不可逆存储 --- 如果只做认证,应存储加盐哈希(bcrypt / Argon2),而非可逆加密
  3. 密钥派生函数 --- 使用 HKDF / PBKDF2 从用户输入派生密钥
  4. 随机初始向量 --- 每次加密使用随机 IV,防止密文模式分析
  5. 增加防护措施 --- 代码混淆、反调试等技术增加分析难度

对用户的建议:

  • 不要过度依赖客户端的「记住密码」功能
  • 重要密码应使用专业密码管理器(1Password、Bitwarden 等)
  • 定期更换 VPN 密码

六、总结

通过对 eTrust(启明星辰 PowerSDP)VPN 客户端的本地凭据存储进行安全审计,我们发现了固定密钥硬编码、固定 IV 等安全隐患,并基于审计结论开发了一个跨平台的凭据恢复工具。

工具已成功帮助多位同事恢复了遗忘的 VPN 密码,避免了漫长的管理员重置流程。

核心文件

文件 说明
etrust_password_decryptor.py 核心脚本(跨平台,零依赖)
eTrust密码解密.bat Windows 启动器(自动下载 Python)
eTrust密码解密-Windows版.zip Windows 打包版

相关工具可以在www.zaodao.tech工具箱中找到;gui虽然简陋,但是能解决问题就行

本文仅供网络安全研究与学习交流,请遵守相关法律法规。所有操作均在自有设备的本地环境中完成。