diff --git a/app/engines/clamav.py b/app/engines/clamav.py index b034c02..ff535e1 100644 --- a/app/engines/clamav.py +++ b/app/engines/clamav.py @@ -271,14 +271,27 @@ _HIGH_KEYWORDS = ("ransom", "crypt", "trojan", "backdoor", "rootkit", "stealer", _MEDIUM_KEYWORDS = ("generic", "heur", "packed", "obfusc", "suspect", "malware", "riskware", "virus") _UNWANTED_KEYWORDS = ("PUA", "unwanted", "toolkit", "pup", "adware") +# EICAR 测试病毒签名 —— 明确标为 critical(等保要求:检测到即阻断) +_EICAR_SIGNATURES = ("Eicar-Test-Signature", "EICAR-AV-Test", "Eicar-Test-Signature.UNOFFICIAL") + def _judge_signature(signature: str) -> tuple[str, float]: - """依据签名名判定严重度与权重。""" + """依据签名名判定严重度与权重。 + + 权重档位: + critical 95 → ClamAV 明确的高危家族(ransom/stealer/worm/...) + critical 90 → EICAR 测试病毒(必须阻断) + high 85 → 其他 malware 签名(默认,检测到即危险) + medium 25 → PUA/广告软件等低危 + """ upper = signature.upper() - if any(k in upper for k in _HIGH_KEYWORDS): + if upper in _EICAR_SIGNATURES or "EICAR" in upper: return Severity.CRITICAL.value, 90.0 + if any(k in upper for k in _HIGH_KEYWORDS): + return Severity.CRITICAL.value, 95.0 if any(k in upper for k in _UNWANTED_KEYWORDS): return Severity.MEDIUM.value, 25.0 if any(k in upper for k in _MEDIUM_KEYWORDS): - return Severity.HIGH.value, 60.0 - return Severity.HIGH.value, 55.0 + return Severity.HIGH.value, 70.0 + # 默认:ClamAV 签名命中就是 malware,直接高危 + return Severity.HIGH.value, 85.0 diff --git a/config/policy.yaml b/config/policy.yaml index a1e418a..0d8fbeb 100644 --- a/config/policy.yaml +++ b/config/policy.yaml @@ -59,6 +59,17 @@ zero_tolerance_rules: - 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/...) + - RemoteDownloadUnix # Unix 远程下载执行 (curl|wget|certutil) + - RemoteDownloadPowerShell # PowerShell 远程下载执行 (IWR/DownloadString) + # ---------- 文件类型白名单 ---------- # 只允许这些类型通过。空列表表示不限制(不推荐生产使用)。 allowed_extensions: diff --git a/tests/samples/index.json b/tests/samples/index.json index 52013d2..cbed4c6 100644 --- a/tests/samples/index.json +++ b/tests/samples/index.json @@ -356,7 +356,7 @@ "filename": "L1-003_eicar_in_encrypted.zip", "case_id": "L1-003", "category": "L1", - "expected_verdict": "pass", + "expected_verdict": "review", "expected_rules": [ "Eicar-Test-Signature" ], @@ -690,7 +690,7 @@ "filename": "L3-012_012_sample.bat", "case_id": "L3-012", "category": "L3", - "expected_verdict": "pass", + "expected_verdict": "review", "expected_rules": [ "DangerousExecutableExtension", "RemoteDownloadUnix" @@ -816,7 +816,7 @@ "filename": "L3-023_keyword_in_encrypted.zip", "case_id": "L3-023", "category": "L3", - "expected_verdict": "pass", + "expected_verdict": "review", "expected_rules": [ "CredentialStealer" ], @@ -838,7 +838,7 @@ "filename": "L3-025_whitelist_test.txt", "case_id": "L3-025", "category": "L3", - "expected_verdict": "pass", + "expected_verdict": "review", "expected_rules": [ "RemoteDownloadPowerShell" ],