一、模块概述

联系人信任图谱引擎 (contact_trust_graph.rs) 是 Rust 邮件安全系统的核心防御模块之一,基于邮件交互历史构建联系人评估模型,动态计算信任等级和风险评分,识别社会工程攻击和异常行为模式。本模块源码 962 行核心 + 555 行 C FFI + 16 个单元测试,定位于攻击链中"人"这一最薄弱环节的工程化防御。

二、信任评估模型

引擎采用 五维加权评估模型,满分 100 分:

评估维度分值核心指标
交互频次分0-30邮件总数 + 最近活跃度加权
回复率分0-25双向交互比例(呼出/呼入)
时间衰减分0-20最后一次交互距今时长(指数衰减)
一致性分0-15交互模式稳定性(方差检测)
风险调整分0-10黑名单标志/风险举报扣减

三、五级信任等级

基于五维评分映射到离散的信任等级:

等级分值区间判定条件
None0无交互记录或已被黑名单
Low1-30少量交互或单向交互(total ≥ 1)
Medium31-60稳定双向交互(total ≥ min_interactions,且有呼出记录)
High61-85频繁双向交互且模式一致(total ≥ min*5,reply_ratio > 0.2)
Verified86-100用户手动标记为可信联系人

四、五级风险等级与检测逻辑

风险等级独立于信任等级计算,基于严重度总分和标志计数双阈值判定:

if total_severity ≥ 15 || flag_count ≥ 4 { High }
else if total_severity ≥ 10 || flag_count ≥ 3 { Medium }
else if total_severity ≥ 5 || flag_count ≥ 1 { Low }
else { None }

五、10种风险标志

引擎内置 10 类风险标志,每个标志赋予 2-9 分的严重度权重:

风险标志严重度检测逻辑
PhishingCompromise9已知钓鱼特征匹配
Spammer7高发送量 + 低回复率
SpoofedDomain8域名与已知联系人高度相似(防域名伪造)
HighRiskDomain6高风险TLD/新注册域名
SuspiciousActivity5交互模式异常(突发批量/频率异常)
UserReported5用户手动举报
HighBounceRate4退信率超阈值(bounce_ratio > 0.3)
BulkSender3单日发送量 ≥ bulk_send_threshold (默认20)
AbnormalTiming3异常时间发送(凌晨/节假日突发)
LowReplyRate2长期单向骚扰(reply_ratio < 0.2)

六、核心数据结构

每个联系人维护一个 ContactProfile:

struct ContactProfile {
    email: String,                    // 规范化小写邮箱
    domain: String,                   // 提取的域名
    interactions: Vec<ContactInteraction>, // 交互记录序列
    risk_flags: Vec<RiskFlag>,        // 当前风险标志集合
    is_verified: bool,               // 用户确认可信
    is_blacklisted: bool,            // 黑名单标记
    bounce_count: u32,               // 退信计数
    first_interaction: u64,          // 首次交互时间戳
    last_interaction: u64,           // 末次交互时间戳
}

七、C FFI 层 (555行)

FFI 层通过 OnceLock<Mutex<String>> 管理全局错误状态,暴露 12 个 C 导出函数:

rust_contact_trust_graph_create()      // 创建引擎实例
rust_contact_trust_record_interaction() // 记录交互事件
rust_contact_trust_analyze()           // JSON 输入输出信任分析
rust_contact_trust_get_level()         // 获取信任等级 (i32)
rust_contact_trust_get_risk()          // 获取风险等级 (i32)
rust_contact_trust_verify()            // 标记可信
rust_contact_trust_blacklist()         // 加入黑名单
rust_contact_trust_quick_score()       // 快速评分 (0-100)
rust_contact_trust_stats()             // 全局统计 JSON
rust_contact_trust_config()            // 配置 JSON 导出
rust_contact_trust_get_error()         // 获取最后错误
rust_contact_trust_free_string()       // 释放字符串内存

八、高管保护与BEC联动

引擎与 bec_detector.rs(BEC 商业电子邮件妥协检测引擎)联动,对标记为"高管"的联系人启用更严格的信任验证:

  • 高管发件人邮件要求最低 Medium 信任等级才允许执行敏感操作(如转账、数据导出指令)
  • 当检测到 SpoofedDomain 标志并针对高管时,触发即时告警
  • 高管的交互记录采用更短的衰减半衰期(30天 vs 普通联系人60天)

九、单元测试(16个)

测试用例覆盖所有核心路径:

  • test_record_interaction: 记录交互并更新统计
  • test_trust_levels_none_low: 无交互和少量交互的等级判定
  • test_trust_levels_medium_high: 稳定双向交互的等级判定
  • test_blacklist_trust_override: 黑名单强制覆盖信任等级
  • test_verify_trust_override: 验证标记强制提升信任等级
  • test_risk_flag_detection_low_reply: 低回复率自动标记
  • test_risk_flag_detection_bulk_sender: 批量发送标记
  • test_risk_level_calculation: 风险等级双阈值判定
  • test_confidence_score: 交互量与置信度的正相关
  • test_quick_score_blacklist: 黑名单联系人快速评分归零
  • test_contact_stats_distribution: 统计分布数组正确性
  • test_remove_contact_updates_stats: 删除联系人同步更新统计
  • test_known_contact_lookup: 已知联系人查询
  • test_config_defaults: 默认配置参数验证
  • test_analyze_with_history: 批量导入历史交互后的分析结果
  • test_ffli_error_handling: FFI 层空指针和无效参数错误处理

十、设计取舍分析

1. 为什么不使用图算法(PageRank/社区发现)?

联系人信任本质上是一对一的关系评估,引入图计算(PageRank、社区发现)会增加 O(V+E) 复杂度但收益有限。实际场景中,用户需要快速判断"这封邮件是否来自可信的人",而非"这个联系人在网络中处于什么位置"。

2. 离散等级 vs 连续分数?

同时提供两种输出:信任等级 (0-4 离散) 用于策略判定(如 Medium 以上放行),置信度 (0.0-0.95 连续) 用于 UI 展示和进一步的评分融合。这种设计平衡了工程决策的确定性和用户体验的丰富性。

3. 风险标志的严重度为什么是硬编码的?

不同组织的风险偏好差异很大。当前采用硬编码严重度(2-9)而非可配置权重,是为了保证 FFI 调用方不需要额外的序列化/反构开销。未来可通过 TrustGraphConfig 扩展支持自定义权重。

十一、总结

联系人信任图谱引擎以 962 行精炼的 Rust 代码 实现了完整的联系人评估流水线:交互采集 → 信任评分 → 风险检测 → 策略输出。其设计哲学体现了"以数据驱动信任"的理念 — 不是静态的白名单/黑名单二选一,而是基于持续的行为积累动态调整信任判断。这使其成为防范 BEC 攻击和社会工程钓鱼的关键防线。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部