# ============================================================ # MeshSafe 全局检测策略 # 说明:所有裁决逻辑集中在此文件,调整策略无需改动代码。 # 修改后调用 POST /api/v1/policies/reload 或重启服务生效。 # ============================================================ version: "2026.10.2" description: "MeshSafe 默认全局策略(麒麟桌面/UOS x86 + WPS 目标终端)" # ---------- 全局阈值 ---------- global: # 风险分 ≥ 该值直接拒绝 block_score: 70 # 风险分落在该区间转人工复核 review_score: [30, 70] # 引擎不可用时的降级策略:fail_closed(拒绝)/ fail_open(放行) # 生产环境应为 fail_closed,满足等保"安全优先"要求 engine_failure_mode: fail_closed # 单文件大小上限(字节)—— 与 ClamAV MaxFileSize=1G 对齐,留余量给其他 5 引擎 max_file_size: 1610612736 # 1.5 GB # 同步模式的最大文件大小,超过转异步 sync_max_size: 536870912 # 512 MB(超过转异步扫描,避免请求超时) # 是否允许加密压缩包 allow_encrypted_archive: false # 是否允许加密文档(Office 加密) allow_encrypted_document: false # ================================================================ # 零容忍规则集(独立于评分模型,优先级最高) # 命中即 reject,不走评分累加。与 §7.2 步骤 0 对应。 # ================================================================ zero_tolerance_rules: # ---- 跨平台通用载体 ---- - PdfJavaScript # PDF 打开即执行脚本 - PdfLaunchAction # PDF 打开即启动程序 - PdfOpenAction # PDF 打开即执行动作 - PathTraversal # 解包路径穿越 - IsoWithExecutable # ISO 挂载后内部含可执行 - MacroObfuscated # 宏代码混淆/加密(意图不可知) - AttachedTemplate # Office 外部模板注入 # ---- 宏相关(WPS on Linux 生效)---- - VBAAutoExec # VBA 宏 AutoOpen 自动执行入口 - VBAAutoExecShell # VBA 宏自动执行 + Shell/CreateObject 调用 - MRaptorAutoExec # mraptor 判定为自动执行宏 - MRaptorAutoExecSuspicious # mraptor 判定为可疑自动执行宏 - DDEAutoExecution # DDE/DDEAUTO 自动执行字段 - EmbeddedExecutable # 文档内嵌可执行对象 # ---- Linux 专属载体 ---- - LinuxExecutable # ELF 原生二进制 - DesktopFileAutoExec # .desktop 文件 Exec= 字段含危险命令 - ShellScriptDangerous # Shell/Python/Perl/Ruby 脚本含危险函数 - LinuxPortableExecutable # AppImage/Flatpak/Snap 便携包 - ArchiveContainsLinuxExec # 压缩包内混有 .sh/.deb/.run/.bin # ---- Windows 专属载体(纵深防御)---- - LnkWithAutoExec # LNK 快捷方式(Linux 不识别,保持检测) - ChmWithScript # CHM 帮助文件(Linux 默认不自动执行) # ---- ClamAV 引擎检测 ---- - Eicar-Test-Signature # EICAR 测试病毒(等保要求:检测到即阻断) # ---- L3 高危关键词(白名单优先,剩余命中即阻断)---- - ReverseShellNetcat # 反弹 Shell (nc/ncat//dev/tcp/bash -i) - ReverseShellPowershell # PowerShell 反弹 Shell (-enc) - CredentialStealer # 凭据窃取工具 (mimikatz/sekurlsa/wce/...) - CredentialExport # 凭据导出命令 (reg save/reg export/...) # ---------- 文件类型白名单 ---------- # 只允许这些类型通过。空列表表示不限制(不推荐生产使用)。 allowed_extensions: # --- Office 文档 --- - .doc - .docx - .docm - .xls - .xlsx - .xlsm - .ppt - .pptx - .pptm - .rtf - .pdf - .wps # WPS 文字 - .et # WPS 表格 - .dps # WPS 演示 # --- 文本与图像 --- - .txt - .csv - .json - .xml - .yaml - .yml - .html - .htm - .md # Markdown(飞书/Notion 导出) - .markdown - .jpg - .jpeg - .png - .gif - .bmp - .tiff - .svg - .webp # --- 音视频 --- - .mp4 - .mov - .avi - .mkv - .wmv - .flv - .webm - .mp3 - .wav - .flac - .m4a # --- 脑图/设计 --- - .xmind - .drawio - .vsdx - .bpmn - .epub # --- 邮件 --- - .eml - .msg # --- 归档(允许进入后递归扫描)--- - .zip - .rar - .7z - .tar # --- 业务源码/脚本/数据(业务开发/运维合法上传)--- - .java - .py - .js - .ts - .go - .c - .cpp - .cs - .sql - .sh - .log # 运维日志 - .ini - .cfg - .conf - .properties # --- 专业文档/素材 --- - .odt - .ods - .odp - .ttf # 字体文件 - .otf - .dwg # CAD 图纸 - .dxf - .stl - .fbx - .step - .iges - .gz - .bz2 - .xz - .iso # --- 可执行与脚本(零容忍规则拦截,此处允许进入裁决流程)--- # 两层防御:零容忍(步骤 0)先拦截,扩展名白名单(步骤 3)作为兜底 # 这样策略中临时禁用某个零容忍规则时,文件仍可进入评分裁决 - .exe - .dll - .msi - .scr - .com - .elf - .so - .desktop - .appimage - .deb - .rpm - .run - .bin - .snap - .sh - .bash - .zsh - .py - .pl - .rb - .js - .vbs - .bat - .cmd - .ps1 - .hta - .lnk - .chm # ---------- 需要强制深检的类型 ---------- # 一期无沙箱,此配置预留。命中这些类型自动转异步。 sandbox_required_extensions: - .exe - .msi - .iso # ---------- 特定规则的处置覆盖 ---------- # 仅针对未进入零容忍集的规则。零容忍规则已在上方处理,此处不再覆盖。 # rule_name: [action, reason_override] # action 取值:pass / pass_with_flag / manual_review / reject / reject_and_notify rule_overrides: # 光闸口径:EXE/DLL/脚本一律不自动放行,最低人工复核。 # 用 override 而不是靠 weight=30 恰好等于 review_score 下界来维持—— # 数值巧合意味着把下界调到 >35 或把权重降一点,干净可执行文件就会静默放行。 DangerousExecutableExtension: action: manual_review reason: "可执行/脚本类型文件,按光闸口径最低转人工复核" VBAShellInvocation: action: manual_review reason: "宏调用 Shell 但无自动执行入口,需人工复核" ArchiveContainsExecutable: action: manual_review reason: "压缩包内含 Windows 可执行文件,转人工确认(Linux 不识别)" ArchiveBombSuspect: action: reject reason: "压缩比异常,疑似压缩炸弹" ExtensionMismatch: action: reject reason: "声明扩展名与真实类型不一致,疑似伪装" DoubleExtension: action: reject reason: "双扩展名伪装,高风险" # ---- 邮件相关 ---- EmailAttachmentDangerous: action: manual_review reason: "邮件附件为高风险类型,需人工确认是否为钓鱼/恶意附件" EmailAttachmentDisguised: action: reject reason: "邮件附件存在双扩展名伪装,高风险钓鱼特征" EmailPhishingKeyword: action: manual_review reason: "邮件正文/Subject 命中钓鱼特征,需人工确认" # ---- 加密 ---- OfficeEncrypted: action: reject reason: "Office 文档已加密,策略禁止加密文档进入内网" # ---------- 通知设置 ---------- notification: # 拒绝时是否返回详细原因给调用方(便于摆渡系统向用户提示) include_reason: true # 拒绝原因的最大长度 max_reason_length: 500 # ---------- YARA 规则权重映射 ---------- # 档位权重与 rules/*.yar 的 meta.risk_level 一一对应(由 binary.py 读取 meta 得到 # 默认严重度,再用本表覆盖为固定权重,保证规则文件与策略只有一处真相)。 # critical=85(单独命中即 reject)/ high=60 / medium=30 / low=10 # 只有 critical 一档可以独立越过 block_score=70;其余档位需与其他信号叠加。 # 不在本表的规则:沿用 meta.risk_level 推导出的默认权重。 yara_rule_weights: critical: # weight=85 - C1_PE_ProcessInjection - C1_PE_RAT_CommandControl - C3_JSP_Webshell_Deserialization - C3_JSP_Webshell_RuntimeExec - C3_PHP_Webshell_Oneliner - C3_Webshell_Behinder - C3_Webshell_CommandExecutionEcho - C3_Webshell_Godzilla - C7_Linux_ReverseShell_Bash - C7_Linux_ReverseShell_NC - C7_Linux_Rootkit_KernelModule - C8_Ransomware_BlackCat - C8_Ransomware_Conti - C8_Ransomware_Encryption - C8_Ransomware_LockBit high: # weight=60 - C1_PE_DLLHijacking - C1_PE_Downloader_Loader - C1_PE_LOLBin_Usage - C3_JSP_Webshell_MemoryShell - C3_PHP_Webshell_Obfuscated - C3_PHP_Webshell_VariableDeformation - C3_Webshell_ASP_Classic - C3_Webshell_ASPNET - C3_Webshell_AntSword - C7_Linux_Persistence_AuthorizedKeys - C7_Linux_Persistence_Crontab - C7_Linux_Persistence_LD_PRELOAD - C7_Linux_Persistence_SystemD - C7_Linux_ReverseShell_Perl - C7_Linux_ReverseShell_Python - C7_Linux_ReverseShell_Socat - C8_Mining_Monero - C8_Ransomware_Ryuk_Pseudo - C8_Ransomware_VolumeShadow medium: # weight=30 - C1_PE_EntropyHighNetwork - C1_PE_Mutex_Persistence - C7_Linux_Miner_Generic - C7_Linux_ReverseShell_Misc - C7_Misc_Ruby_Lua_ReverseShell - C7_Network_Tools_Malicious - C8_Ransomware_Note_Filename - C9_Packer_Themida_VMP low: # weight=10 - C8_Ransomware_Extension_Blacklist - C9_Packer_UPX # ---------- 内网特征词表引擎(P1)---------- # 规则为数据驱动:在 policy.yaml 中声明,引擎从 PolicyStore 加载。 # 控制台 P2 可实时修改并热重载。 # 每条规则字段: # name: 规则名(Finding.rule) # match: contains | regex | any_of # pattern: contains/regex 模式的匹配串 # keywords: any_of 模式的关键词列表 # weight: 评分权重(默认 30) # severity: low | medium | high | critical(默认 medium) # ignore_case: 正则模式是否忽略大小写 keyword_rules: # ---- 内网合规特征(辅助判断,不进零容忍)---- - name: ClassifiedLevelMarkers match: any_of keywords: ["绝密", "机密", "秘密", "内部文件", "内部资料", "禁止外传"] weight: 25 severity: low - name: InternalDocumentPatterns match: regex pattern: "(?:国家机密|涉密|密级[::]\\s*[一二三四五])" ignore_case: true weight: 30 severity: medium # ================================================================ # 恶意行为特征词表(覆盖 CSV L3 全部 25 条用例) # ================================================================ # ---- 远程下载即执行(要有完整动作链,裸词不算;README 里的安装命令进复核而非直接拒)---- # cross_line:命令换行/续行是本类特征最常见的绕过(curl \ + 下一行 | sh), # 拼接后仍要求"下载工具 + 执行动作"同框,散文里的多行文本不会凑出这条链。 - name: RemoteDownloadExec match: regex pattern: "(?:\\b(?:curl|wget)\\b[^\\n]{0,120}\\|\\s*(?:ba|z|k|da)?sh\\b|\\b(?:curl|wget)\\b[^\\n]{0,120}(?:&&|;)\\s*(?:chmod\\s+\\+x|\\./)|(?:^|[^\\w$-])(?:iex|invoke-expression)\\b[^\\n]{0,60}(?:\\biwr\\b|invoke\\s*[-_]?\\s*web\\s*[-_]?\\s*request|invoke\\s*[-_]?\\s*rest\\s*[-_]?\\s*method|downloadstring)|\\b(?:iwr|invoke\\s*[-_]?\\s*web\\s*[-_]?\\s*request|invoke\\s*[-_]?\\s*rest\\s*[-_]?\\s*method)\\b[^\\n]{0,120}\\|\\s*(?:iex|invoke-expression)\\b|certutil\\s+[-/]urlcache[^\\n]{0,60}\\.exe\\b|mkfifo[^\\n]{0,60}(?:\\bnc\\s|\\bnetcat\\b))" ignore_case: true cross_line: true weight: 40 severity: critical # ---- 下载并落地成可执行文件(dropper 行为,比"下载即执行"弱一档但仍高危)---- - name: PayloadDropToDisk match: regex pattern: "(?:\\b(?:curl|wget)\\b[^\\n]{0,120}(?:-o|-O|--output)\\s+\\S*\\.(?:exe|dll|ps1|bat|cmd|vbs|jar|msi|so|bin)\\b|\\b(?:i\\s*[-_]?\\s*wr|invoke\\s*[-_]?\\s*web\\s*[-_]?\\s*request|invoke\\s*[-_]?\\s*rest\\s*[-_]?\\s*method)\\b[^\\n]{0,120}-o(?:utfile)?\\s+\\S*\\.(?:exe|dll|ps1|bat|cmd|vbs)\\b|\\b(?:new-object|activexobject)\\s+system\\.net\\.webclient[^\\n]{0,80}downloadfile)" ignore_case: true cross_line: true weight: 45 severity: critical # ---- 外部下载动作(cmdlet/API + 无执行链):计分进复核,不再零容忍 ---- # cmdlet 名(Invoke-WebRequest/Invoke-RestMethod/BitsAdmin)是 PowerShell 专有写法, # 单独出现即进复核。.NET/Win32 的方法名(DownloadString/DownloadFile)不一样—— # 它们存在于所有托管程序的标识符表里,裸匹配实测把 nvidiaInspector.exe 的 # `add_DownloadFileCompleted`、`DownloadFileAsync` 各算一次命中,白送 30 分, # 把 45 分的人工复核顶成 75 分拒绝。所以方法名必须与 URL/IP 同框才算下载。 - name: RemoteDownloadPowerShell match: regex pattern: "(?:\\b(?:Invoke-WebRequest|Invoke-RestMethod|Start-BitsTransfer|BitsAdmin)\\b|\\bDownload(?:String|File)\\b[^\\n]{0,40}(?:https?://|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:https?://|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})[^\\n]{0,40}\\bDownload(?:String|File)\\b)" ignore_case: true weight: 30 severity: medium # ---- 下载工具 + 明确地址:只认"工具与 URL/IP 同框",裸 -o 参数不算 ---- # 旧写法里的 `curl|wget -O/-o 任意值` 会命中任何写成两段的安装文档,去掉。 - name: RemoteDownloadUnix match: regex pattern: "(?:\\b(?:curl|wget|certutil)\\b[^\\n]{0,80}(?:https?://|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}))" ignore_case: true weight: 30 severity: medium # ---- 反弹 Shell ---- - name: ReverseShellNetcat match: regex # 只认「执行原语」形态:nc/ncat/netcat 带 -e/-c(把 shell 交给连接), # 或 /dev/tcp、bash -i >& 这类内核级反连。裸 nc / nc -l / nc -z 是运维常用, # 出现在速查文档和二进制字符串表里必然误报,不计分。 pattern: "(\\b(?:nc|ncat|netcat)\\s+(?:[^\\n]{0,60}\\s)?-[ec]\\w*\\s*(?:/bin/|/usr/|cmd\\.exe\\b|\\S*sh\\b)|/dev/tcp/|bash\\s+-i\\s+>&|sh\\s+-i\\s+>&)" ignore_case: true weight: 40 severity: critical - name: ReverseShellPowershell match: regex pattern: "(powershell\\s+-enc|powershell\\s+-w\\s+hidden\\s+-enc|powershell\\s+-ExecutionPolicy\\s+Bypass\\s+-enc)" ignore_case: true weight: 35 severity: critical # ---- 凭据窃取工具 ---- - name: CredentialStealer match: regex # 全部加 \b 词边界, wce 要求后跟 .exe / 空格 / / (二进制随机字节里的 WCE 不会触发) pattern: "(\\bmimikatz\\b|\\bsekurlsa\\b|\\bwce(\\.exe\\b|\\s|\\/)|\\bgsecdump\\b|\\bfgdump\\b|\\blsadump\\b|\\bdcsync\\b|\\bdcsyncer\\b|\\brubeus\\b)" ignore_case: true weight: 45 severity: critical # ---- 凭据导出命令 ---- - name: CredentialExport match: regex pattern: "(reg\\s+save\\s+HKLM\\\\SYSTEM|reg\\s+save\\s+HKLM\\\\SAM|reg\\s+export\\s+SAM|reg\\s+export\\s+SYSTEM|hxdump|secretsdump)" ignore_case: true weight: 45 severity: critical # ---- 远程会话劫持 ---- - name: RemoteSessionHijack match: regex pattern: "(\\btscon\\b|\\brdpclip\\b|\\brdp_shadow\\b|\\bshadow\\s+[0-9]+\\b|CreateRemoteThread)" ignore_case: true weight: 35 severity: high # ---- 命令执行混淆 ---- - name: CommandExecutionObfuscated match: regex pattern: "(cmd\\s+/c|cmd\\s+/d|certutil\\s+-decode|certutil\\s+-urlcache|\\bmshta\\b|\\bregsvr32\\s+\\/s)" ignore_case: true weight: 25 severity: medium # ---- WMI/LDAP 攻击 ---- - name: WMILdapAttack match: regex pattern: "(wmic\\s+path|wmic\\s+process\\s+call\\s+create|ldapsearch\\s+-x|ldapwhoami)" ignore_case: true weight: 30 severity: high # ---------- 白名单(规则命中后二次放宽) ---------- # 优先级:白名单 > 关键词规则 > YARA 规则 > 评分累加 # 命中白名单的规则会从 findings 中过滤,不再进入裁决 keyword_whitelist: # ---- 内网合法运维地址/域名(白名单放行 curl/wget 下载)---- - rule: RemoteDownloadUnix # curl/wget 下载特征 allowed_keywords: - "192.168." - "10." - "172.16." - "172.17." - "172.18." - "172.19." - "172.2" - "172.3" - ".senmesh.com" - "repo.internal" - "mirror.internal" - rule: RemoteDownloadExec # 下载即执行:内网源站安装脚本按白名单放行 allowed_keywords: - "192.168." - "10." - "172.16." - "172.17." - "172.18." - "172.19." - "172.2" - "172.3" - ".senmesh.com" - "repo.internal" - "mirror.internal" - rule: PayloadDropToDisk # 下载落地可执行文件:内网源站安装包放行 allowed_keywords: - "192.168." - "10." - "172.16." - "172.17." - "172.18." - "172.19." - "172.2" - "172.3" - ".senmesh.com" - "repo.internal" - "mirror.internal" - rule: RemoteDownloadPowerShell # Invoke-WebRequest/BitsAdmin allowed_keywords: - "192.168." - "10." - ".senmesh.com" yara_hash_whitelist: # YARA 命中后,文件 MD5 在此列表 → 跳过告警 # 典型场景:已知安全的开源工具被 YARA 误匹配 - md5: "00000000000000000000000000000000" note: "示例:占位,生产按需补充" # ---------- 审计 ---------- audit: # 记录扫描结果明细到审计日志 log_findings: true # 是否记录提取到的子文件路径 log_extracted_paths: true