前面四篇把做什么、怎么搭讲完了。最后这篇聊最硬核也最该被问的那句话真出事了怎么办一个远程桌面把你的桌面画面和键鼠都送出去了如果中间任何一环被攻破内容会不会泄露这篇不喊口号直接摆三种具体威胁情形逐一看项目是怎么扛的最后给一张完整的安全设计清单。一、先摆清楚我们要防的是什么谈安全第一步是定义威胁模型——也就是明确你到底在防谁、防什么。不明确这个任何我绝对安全都是空话。在展开之前先给攻击者分个级因为不同能力对应不同防线最低级的是被动监听——只能看路上跑的流量中级的是主动篡改/丢弃——能改能丢能重放最高级的是完全控制某一端比如你的公司电脑本身中毒。本项目要扛的是前两级第三级超出了远程桌面协议的职责不在本篇讨论。分清楚级别你才知道下面每道防线在挡谁。ALSPD-DESK 要保护的核心资产很具体公司电脑的屏幕画面以及你从家里发出的鼠标键盘指令。这两样一旦被第三方还原出来等于把那台机器的操作权交了出去。项目要防的就是中间任何环节看到这两样明文。同时它明确不试图防什么——比如你的公司电脑本身已经中了木马、或者你本机的密码弱到被猜中。这些属于端点本身失守超出了一个远程桌面协议的职责范围。威胁模型的意义就是老老实实划清我负责到哪而不是大包大揽地承诺我保你万无一失。这也是为什么本项目从设计第一天起就把三个具体情形而不是一句安全当作验收标准——能对着具体攻击者说清他拿不到什么才算真安全。下面三种情形覆盖了链路上的三个关键节点中继VPS、公司网络、公网扫描。逐一拆开。二、情形一中继VPS被入侵了这是最常被问的情形我的 VPS 被攻破了攻击者拿到了那台服务器的完整控制权会怎样先说清攻击者最想要什么他拿下 VPS图的是看到你公司的画面、或操纵你的键鼠。下面逐层看这个目标在每一层都被挡住。先看清攻击者能拿到什么。中继在握手阶段确实需要读 HELLO 明文——因为要靠它配对所以它知道房间号、角色agent/viewer、双方随机生成的 nonce。但 nonce 本来就不需保密真正保密的是来自 password 的 PSK房间号和角色也只是元数据不含任何画面或键鼠内容。握手之后画面FRAME和键鼠INPUT全都是端到端密文。攻击者没有password就派生不出会话密钥面对的就是一堆 AES-GCM 密文解不开。他能做的只是原样转发这些密文——而这本来就是中继的本职工作转发密文对他毫无额外收益。那relay_token中继令牌被拿到会不会出事令牌只能用来证明有资格进这个房间也就是攻击者能用它冒充一端去抢配对。但即便他抢进去了看到的依然是密文操作不了内容。令牌是门禁卡不是保险箱钥匙这把钥匙password从没给过中继。再看日志项目源码里中继的日志只记录消息类型和字节数从不记录载荷内容。所以即便攻击者翻日志也翻不到任何画面或键鼠的明文。结论很干脆中继被入侵内容仍然安全——因为内容从没在明面上经过中继。还有一个更刁钻的问题如果攻击者不止看还能改中继转发的密文呢答案是——改了也没用而且会立刻暴露。因为内容用的是 AES-GCM每个密文都带一个认证标签哪怕只改一个字节接收端解密时认证标签就对不上直接报错断开项目里会把这种错误明确提示成会话密钥不一致或数据被篡改。所以攻击者最多让连接断开一种拒绝服务却永远拿不到内容也悄无声息地篡改不了。篡改即暴露这正是带认证加密的价值。三、情形二公司做了 TLS 中间人解密为什么公司要这么做很多企业出于审计和威胁检测会部署透明代理悄悄把出网的 HTTPS 解密再重加密——员工通常无感知。这不是针对你而是企业安全的常规操作。问题在于你的远程桌面在这种环境里能不能既连得上、又不被看穿第二种情形更日常你连回公司电脑时公司网络对出去的 TLS 流量做了中间人解密很多企业出于审计和威胁检测会部署这类 NDR/DLP 设备透明地拦下 HTTPS 再代理解密。这里正好体现TLS 只是伪装层、端到端加密才是锁的设计价值。公司设备解开的只是最外那层 TLS——把wss://这层马甲扒了里面露出来的是应用层的 AES-GCM 密文。公司能看到的到此为止里面的画面和键鼠仍然被端到端密钥锁着解不开。更重要的是连接照样能用。因为公司代理解出来的密文对它是无意义的但它仍然会正常转发所以你的远程桌面不受影响。这跟自签证书 严格钉扎的方案形成对比——那种方案一旦遇到公司中间人解密TLS 指纹对不上连接直接失败项目就死在公司网络上了。本项目故意不把 TLS 钉扎当硬性前置正是为了在公司网络这种真实环境里还能活下来。需要划清边界上面说的是传输途中被中间人看。如果公司不是在传输层动手脚而是直接在你的公司电脑本身上装监控比如终端管控软件截屏那就属于端点失守任何远程桌面协议都无能为力——你不可能在机器已经被对方控制的前提下还保证对方看不到机器上的东西。威胁模型的意义就是诚实地承认本项目保的是链路不是端点。把链路守牢端点的事交给你对那台设备的合规与授权去管。顺带提醒在公司网络里使用本项目请先确认公司的 IT 与安全政策是否允许此类工具并且只在本人拥有、或已获得明确授权的设备上连接。即便传输本身安全合规仍是你自己的责任。四、情形三公网 VPS 被扫描把中继部署在公网等于把它放在了所有人都能敲的位置。能被敲就一定会有人敲——自动化的端口扫描每天在公网上扫来扫去你的 VPS 上线几分钟就可能被扫到。这不是吓唬是常识。任何一台公网 VPS 都会被端口扫描这是常态无法避免也不必恐慌。关键是被扫到之后有没有危害。中继的应对很硬它只接受握手成功、且验证过密钥的连接。握手有时间窗——15 秒内没完成 HELLO 校验就直接断开close 1008, “handshake timeout”。校验包括角色合法、房间非空、令牌常量时间比较通过、nonce 合法等。扫描器通常只发个 SYN 或半截握手根本走不完这套流程就会被踢掉。即便极少数情况扫描器真把握手走完了、连了上来它进房间后也只能收到和转发密文——和情形一一样看不到内容。所以被扫到本身是无害的它既拿不到数据也进不了任何真实会话。补一个具体数字让踢掉更可信中继的握手超时设为 15 秒——15 秒内没完成 HELLO 校验连接直接关闭。扫描器发个 SYN、或半个握手就停根本走不完这套流程连进门的机会都没有。而且令牌比较用的是常量时间比较hmac.compare_digest专门防时序侧信道——攻击者没法通过比对快了慢了来猜令牌的某一位。这些细节都是为了让被扫到从可能漏进来的风险变成连门口都摸不到。想要更硬还可以加可选加固失败连接限速、握手超时已默认开启、fail2ban 自动封禁反复失败的来源 IP、甚至中继 IP 白名单。这些都不是必须的但都是锦上添花的低成本加固按需开启即可。为什么把这些做成可选而不是默认开因为默认开可能误伤正常用户比如 IP 白名单配错就把自己挡外面而它们的收益只在真被针对时才显现。按需开启是不强加负担、但留好武器的务实姿态。五、完整安全设计清单八条把上面散落的设计点收拢项目的安全设计清单一共八条条条都对应前面某段分析端到端 AES-256-GCM核心中的核心。中继无密钥VPS 被入侵也读不到内容。Scrypt 强密钥派生密码不当密钥直接用先拉伸成抗暴力破解的强密钥PSK。序列号 GCM nonce 计数器抗重放。每条消息带递增序号乱序或重复会被直接拒。Agent 零入站端口被控机不监听外来的连接没有可被主动攻击的入口。中继只认认证连接握手超时即踢且只转发密文不解析、不落盘内容。TLS 仅作伪装层被中间人解开也只见密文它存在的意义是穿墙 不显眼。免安装、不依赖管理员权限减少系统层面的改动降低部署阻力与攻击面。可选加固中继 IP 白名单 / fail2ban / 连接限速按需叠加。这八条不是堆功能而是每一层都只补自己该补的洞应用层锁内容、传输层管穿墙、网络层管入口、运维层管加固。职责分得清才不会出现某层以为另一层防了、结果谁都没防的空白。把这八条映射回前面三种情形就清楚它们各自在挡谁第1、2、3条端到端加密、强派生、序号计数器挡的是中继被入侵后想看/想重放第4条零入站端口挡的是直接打被控机第5条只认认证连接和第8条可选加固挡的是公网扫描与暴力连入第6条TLS 仅伪装让公司中间人既看不了也不致死第7条免装免权限挡的是部署本身引入的新攻击面。八条不是罗列是一张覆盖三种情形的防守网。顺带一提安全不只发生在传输层。操作侧同样有四层保命措施——急停热键随时一键停止注入、只读模式默认不注入键鼠、空闲自动断连、本机活动检测本机有人动鼠标就让步。它们防的是注入失控这类端点操作风险和上面的传输安全互为表里。传输守住了链路操作守住了行为才算把一把钥匙的两头都攥牢。六、为什么证书钉扎不作为硬性前置条件先说清证书钉扎是什么正常 TLS 靠证书链里的 CA 来确认服务器身份钉扎则是我只认这一张特定指纹的证书别的哪怕有合法 CA 背书也不认。它更强但也更脆——一旦服务器证书换了自签证书常换所有钉扎的客户端就全连不上得逐个改配置。最后解释一个看似矛盾、实则关键的决定项目支持证书指纹钉扎pinned_fingerprint但默认留空、不强制。钉扎的作用是在 TLS 握手后比对服务器证书指纹不符就立刻断开防止连到伪装成你 VPS的中间人。听着很安全为什么不做成硬性要求因为前面情形二已经说明公司网络的 TLS 中间人解密非常普遍。如果强制钉扎公司代理解密 TLS 时证书必然对不上连接直接失败——而你的远程桌面恰恰最常用在公司网络里。为了一个防伪装的强约束把项目自己在最主要的使用场景里搞死是本末倒置。所以项目的取舍是端到端加密已经锁住了内容TLS 钉扎只是额外确认服务器身份的加分项不是安全的前置条件。默认不钉扎项目在公司网络里照样能连、照样安全如果你处在确定没有中间人、且想更严格确认服务器的环境再去配置指纹钉扎即可。配置项留空即等于不钉扎、信任应用层端到端加密——这正是对真实部署环境最诚实的适配。那什么时候反而该开启钉扎当你明确知道自己处在没有 TLS 中间人、且想额外确认连的就是那台 VPS的环境——比如中继是你完全掌控、证书固定的一台机器。这时填好指纹等于多一道确认服务器身份的保险。但记住它是加分项不是必选项绝大多数日常使用里应用层端到端加密已经锁死了内容钉不钉扎安全性是同级的。别让一个可选加固变成连不上的绊脚石。回到开头那句话威胁模型的价值不在于宣称我刀枪不入而在于清楚地说出哪道防线挡住了哪类攻击者。ALSPD-DESK 的三道情形分析合起来只指向一个结论——只要你的password够强、只在授权设备上用那么无论中继失守、公司解密还是公网扫描你的桌面内容都不会以明文形式泄露。把钥匙攥在自己手里才是这套设计真正的底气。