/* * Hound built-in starter pack. * * Deliberately tiny and deliberately tight. Every rule here requires * several independent strings before it fires, because a false positive * in an antivirus is worse than a miss — one rule that quarantines a * system binary ends the product. * * The real corpus lands in Phase 3 (the signed Hound Linux pack, gated * behind the goodware CI regression suite). This pack exists so a fresh * install detects *something* before it has ever contacted the network. */ rule EICAR_Test_File { meta: name = "EICAR-Test-Signature" severity = "info" desc = "Industry-standard antivirus test file. Harmless." strings: $eicar = "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" condition: // The standard defines the EICAR file as exactly this 68-byte // string, optionally padded with whitespace to at most 128 bytes. // Without the size bound this rule matches any file that merely // CONTAINS the string — and on a live server it quarantined an // 8.5 MB rustc incremental-compilation cache, because the test // source being compiled contained the literal. That killed the // build with a compiler panic. // // Anyone whose source, logs or documentation mention EICAR has // the same problem, which is most security work. filesize <= 128 and $eicar } rule Linux_Coinminer_XMRig { meta: name = "Linux.Coinminer.XMRig" severity = "critical" desc = "XMRig cryptocurrency miner. Requires pool protocol plus two config keys." strings: $pool1 = "stratum+tcp://" ascii $pool2 = "stratum+ssl://" ascii $cfg1 = "donate-level" ascii $cfg2 = "rig-id" ascii $cfg3 = "randomx" ascii nocase $name = "xmrig" ascii nocase condition: // ELF magic is not optional here. // // Without it this rule matches any TEXT that mentions mining: // a blog post, a support ticket, a threat-intelligence report, // or — as happened on a live server — an AI session transcript // in which somebody was writing this very rule. Malware is a // program; a document about malware is not. uint32(0) == 0x464c457f and ($pool1 or $pool2) and 2 of ($cfg*) and $name } rule Linux_Webshell_PHP_Eval { meta: name = "Linux.Webshell.PHP-Eval" severity = "critical" desc = "PHP webshell: request-driven eval of decoded input." strings: $php = "