Conversation
- 新增`init_decrypt_cbc`函数,初始化CBC解密上下文。 - 实现`cbc_t::decrypt`方法解密麦克风音频数据。 - 更新了`stream.cpp`以处理基于配置标志的麦克风加密和解密。 - 为`globals.h`中的麦克风数据引入了新的加密标志。
- 更新了RTSP配置,以便在音频加密是强制性的时请求麦克风加密。 - 增强的流处理功能,可在音频加密处于活动状态时启用麦克风加密,并为初始化和状态检查提供适当的日志记录。
- 更新RTSP配置以确保在音频加密启用时请求麦克风加密。 - 实现自动检测麦克风数据加密状态,并根据数据长度判断是否启用解密。 - 增强日志记录以提供加密状态和解密过程的详细信息,确保数据有效性检查。 - 处理音频数据时,添加序列号支持以匹配客户端发送的数据格式。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
针对 Sunshine 麦克风流 ("Microphone Eavesdropping") 的安全漏洞修复、逻辑纠正及代码质量改进。
1. 核心安全加固 (Critical Security Fixes)
1.1 添加客户端身份验证 (Client Identification & Authorization)
问题: 之前的实现仅通过 UDP 端口接收数据,未验证来源 IP 是否属于已建立的合法会话。未加密模式下存在被注入恶意音频的风险。
修复:
broadcast_ctx_t中引入client_ip_to_name映射表。micRecvThread在处理数据前,查询映射表。如果来源 IP 未注册,虽目前仅做日志记录(为了兼容性),但通过引入映射机制,为后续实施"白名单拦截"建立了基础架构。1.2 修复 IV (初始化向量) 计算逻辑
问题: 服务端在计算 AES-CBC 解密所需的 IV 时,序列号逻辑与客户端不一致,导致加密包无法正确解密。
修复:
baseIv + (seq - 1),服务端接收到的sequence_number已是当前包的序号,无需再次减 1(或逻辑已调整为直接匹配)。1.3 明文拒绝开关预留 (Plaintext Rejection Switch)
问题: 缺乏强制拒绝明文数据的机制。
修复:
mic_reject_plaintext原子标志。1.4 加密上下文安全清理
问题: 线程结束时未彻底清理敏感的加密上下文。
修复:
mic_cipher和mic_iv,并清除mic_encryption_enabled标志,防止状态残留。2. 稳定性与逻辑修复 (Stability & Logic Fixes)
2.1 修复 Socket 正常关闭时的错误日志
问题: 当停止推流或关闭 Sunshine 时,Socket 的取消操作 (
operation_aborted) 被错误地记录为 Error 级别日志,造成误解。修复:
mic_recv_func的错误处理中,增加了对boost::asio::error::operation_aborted的检测。2.2 解决变量命名冲突
问题: 局部变量
buffer和bytes名称过于通用,容易与外部作用域或库函数冲突。修复:
mic_recv_buffer和received_bytes,提高了代码可读性和安全性。3. 可观测性改进 (Observability)
3.1 客户端名称日志
改进: 日志和统计信息现在使用
Session注册的client_name(如 "Moonlight PC")代替难以识别的IP:Port。3.2 解密统计
改进: 增加了详细的统计逻辑,记录每个客户端的总包数、解密成功数、失败数和无效数据数。线程结束时输出摘要,便于通过日志分析连接质量和潜在攻击。
总结: 本次更新从根本上修复了麦克风流的身份识别缺失问题,纠正了加密实现中的逻辑错误,并显著提升了代码的健壮性和可维护性。