|
|
f1a176aae0
|
fix: 裁决口径重构 — rule_overrides 改处置地板,YARA 权重分档与阈值解耦
三件事,都围绕"分数只反映证据,不放行由地板保证":
- rule_overrides 的 manual_review 旧实现是 score=max(score,65) 并跳过该规则自身权重:
注进去的 65 不是证据,再叠任意 ≥5 分噪声就越过 block_score=70 变拒绝,同时显示分数
与真实证据脱钩。改为步骤 9「复核地板」:权重照常累加,裁决后处置低于复核才抬到
manual_review,已判 reject 不降回。3661 条历史扫描重放 0 收紧 0 放行;把 review_score
下界抬到 36/40/50 或把 DEE 权重降到 10,无地板时干净 exe 静默放行,有地板恒为人工复核。
- DangerousExecutableExtension 进 rule_overrides(manual_review),落实光闸口径「EXE/DLL/
脚本不自动放行」,不再依赖 weight=30 恰好等于 review_score 下界这种数值巧合。
- YARA 权重分档 85/65/45/25 → 85/60/30/10,只有 critical 一档能独立越过 70;
档位与 rules/*.yar 的 meta.risk_level 一一对应,控制台注释与 policy.html 同步。
- 词表:RemoteDownloadUnix/PowerShell 移出零容忍、改判"工具与 URL/IP 同框",
新增 RemoteDownloadExec(40)/PayloadDropToDisk(45) 带内网源站白名单。裸 cmdlet 名会把
nvidiaInspector.exe 的 add_DownloadFileCompleted 白送 30 分,把 45 分复核顶成 75 分拒绝。
- 风险等级文案:裁决已是 malicious/error 时仍输出"打开风险低"是自相矛盾的对外文案,
强制收敛到 critical。
- 靶场 L5-005 expected_verdict reject→review:旧 85 分靠载体45+时间戳20+未签名10+架构10
堆叠,属权重堆叠误报;真实注入器由 C1_PE_ProcessInjection(85) 拦截。
|
2026-11-02 20:27:30 +08:00 |
|
|
|
b6a004bdb7
|
fix: 六引擎误报根因修复 — 解包递归、YARA 恒真规则、签名分级、real_type 溢出
检测范围与证据链修复,不改裁决口径(口径改动在下一条提交)。
- extractor:zip/tar 成员在超限分支外漏加回扫描队列,解包后内容永远不参与检测;
zip 目录条目被当成内嵌对象;tar 超限成员先落盘不删。递归真正生效后深扫耗时可测。
- clamav:_HIGH/_MEDIUM/_UNWANTED 关键词是小写,而签名名是 "Win.Trojan..." 大小写混排,
分级判定恒不命中全走默认档;改统一大写匹配。超过 clamd MaxFileSize 的裸奔区间
(1G~1.5G) 新增 ClamAVSkippedSizeLimit(30) — 按"不可扫描不放行"进复核。
- yara:pe.yar C1 系列改用导入表判定,不再靠裸子串命中字符串表;
linux.yar C7 多条规则条件恒真(裸 nc/fetch 之类)已收紧;C8/C3 相应收窄。
- structure:DangerousExecutableExtension 是载体信号而非恶意行为,critical 权重 45→35,
不再作为把中低置信度信号一起顶过 block_score 的底座。
- scanner/documents:real_type 拼进 libmagic 对 MSI/OLE 的元数据串实测 334+ 字符,
超列宽导致整条 scan_tasks INSERT 连 findings 一起丢(被拒文件不留痕)→
列宽 256→512,migrate.sql 补 ALTER。
|
2026-11-02 20:26:56 +08:00 |
|
|
|
5d3c895542
|
fix: policy 加载 bug + DB 索引 + 归档脚本
【Bug 修复】policy.py _load_db_or_yaml
根因: select(PolicyVersion).order_by(desc).scalar_one_or_none()
表有多条历史版本 → Multiple rows 异常 → 每次启动都回退 YAML
修复: 改成 db.query(PolicyVersion).order_by(desc).first()
用 ORM Query API 取最新一条, 返回真正的 PolicyVersion 对象
验证: 容器启动后日志中不再出现 'DB 加载策略失败(回退 YAML)'
【索引】models.py ScanTask 加复合索引
ix_scan_tasks_channel_created ON (channel, created_at DESC)
解决 dashboard/tasks_page 高频查询的全表扫描问题
(已在运行中 DB 用 CREATE INDEX CONCURRENTLY 补上)
【归档】scripts/archive_old_tasks.py
- scan_tasks 90天前 清 detail JSONB (省空间)
- scan_tasks 365天前 移到 scan_tasks_archive 归档表
- idempotency_records 7天 TTL 清过期幂等缓存
- policy_versions 只留最新 5 个
- 支持 --dry-run (默认) + --apply (真正执行)
- 分批 1000 条处理, 避免长事务锁表
- 归档表 scan_tasks_archive 已建 (含 4 个索引)
数据增长: 日均 523 条 → 年 ~19万条 ≈ 910 MB
当前 3660 条 ≈ 4.5 MB, 增长可控, 脚本可每周/每月 cron 跑一次
|
2026-10-29 17:02:37 +08:00 |
|
|
|
d99d179f0b
|
refactor: API 响应彻底精简,只暴露调用方必须字段
to_response() 重写:砍掉内部实现细节,对外只暴露 7 个顶层字段
保留: task_id, action, reason, status, file(精简), meta(精简)
砍掉: verdict, score, open_risk, findings, extracted, triggered
meta 里的 engines/engine_errors/clamav/policy_version/policy_sha256
file 里的 real_ext/declared_ext
设计原则: 调用方拿了就用,不暴露内部权重/严重度/引擎层/策略链
- action: 调用方直接据此放行/拦截/转人工
- reason: 人可读的判定理由
- file.*: 哈希 + 真实类型,用于追溯举证
- meta.*: 仅耗时 + 时间戳,排除实现细节
影响范围: 仅 to_response() 序列化方法
- API POST/GET /api/v1/scans* 响应 → 精简 ✅
- Console 控制台 → 直接用 ScanOutcome 对象属性,不受影响
- DB 写入 persist_to_db() → 直接用 ScanOutcome 对象,不受影响
|
2026-10-29 16:27:18 +08:00 |
|
|
|
57d89b3d05
|
feat: A+B 缺口全补 + README 待办记录
A 结构层小缺口 (3/3):
✅ structure.py 加 LongFilename 告警 (>120 字符成员名)
✅ extractor.py _SAFE_NAME_RE 扩展 emoji 范围 (保留 emoji 文件名不崩)
✅ 重生成 L0-023_5layer_nested.zip (5 层真嵌套)
B 白名单机制 (2/2):
✅ policy.yaml 加 keyword_whitelist (内网 IP/域名自动放行 RemoteDownloadUnix/PowerShell)
✅ policy.yaml 加 yara_hash_whitelist (MD5 在白名单跳过 YARA 告警)
✅ policy.py Property 类加两个 property 读取白名单
✅ policy.py PolicyEngine.decide() 步骤 -1: 白名单过滤 (优先级最高)
✅ scanner.py decide() 调用补传 md5
外部资源缺口 (3 条,README 已记录):
- L1-009/010 需真实签名 .cvd 文件
- L1-014 需压测脚本 stress_test.py
测试靶场:
✅ rules/test_rules.yar (7 条自动生成 YARA 规则)
✅ README 新增测试靶场待办 + 白名单机制说明 + 脚本清单
|
2026-10-29 14:40:49 +08:00 |
|
|
|
16f134e328
|
feat: MeshSafe 文件摆渡安全卫士 v1.0 初始提交
核心功能:
- 6 层检测管线: L0 结构分析 → L1 ClamAV → L2 文档深度检测 → L3 关键词匹配 → L4 YARA → L5 PE/二进制
- FastAPI + PostgreSQL + Redis + Docker Compose 架构
- 客户端 HMAC-SHA256 签名鉴权 + 限流 + 幂等性
- 控制台 UI (登录/Dashboard/诊断中心/策略管理/任务列表/测试中心/产品介绍页)
- 三层诊断定时器 (error_scan 30s / db_aggregate 30s / container_check 5min)
并发与稳定性修复:
- 诊断定时器 Redis 时间槽位锁 (多 worker 同一槽位只有一个执行)
- JSONL 存储 fcntl 跨进程排他锁 + 容错解码 + 原子重写
- 移除 SQLite fallback, 统一 PostgreSQL
- API_CLIENTS 脱敏为环境变量, .env 已 .gitignore
|
2026-10-28 19:07:11 +08:00 |
|