/*
    YARA Hunting Rules for Msilperseus (Infostealer)
    Source: SystemHelpDesk Malware Families Catalog
    Reference: https://malware-families-catalog.systemhelpdesk.com/families/msilperseus
    License: Apache-2.0
    Generated: 2026-10-16
*/

rule MALWARE_WIN_MSILPERSEUS_T1_ARTIFACT
{
    meta:
        description = "Tier 1 Primitive Artifact: Raw string matches for Msilperseus (Infostealer)"
        category = "Infostealer"
        tier = "T1 - Primitive Artifact"
        confidence = "Medium (Fast Triage)"
        author = "SystemHelpDesk Threat Research Desk"
        reference = "https://malware-families-catalog.systemhelpdesk.com/families/msilperseus"
        date = "2026-10-16"
    strings:
        $fam_name = "msilperseus" ascii wide nocase
        $alias_1 = "trojan:msil/perseus!rfn" ascii wide nocase
        $alias_2 = "trojan.msil.perseus" ascii wide nocase
        $alias_3 = "msil/perseus" ascii wide nocase
        $alias_4 = "trojan:msil/perseus.a" ascii wide nocase
        $alias_5 = "win32/perseus.stealer" ascii wide nocase
    condition:
        uint16(0) == 0x5a4d and any of them
}

rule MALWARE_WIN_MSILPERSEUS_T3_ATTRIBUTION
{
    meta:
        description = "Tier 3 Attribution Fingerprint: Heuristic detection for Msilperseus tradecraft"
        category = "Infostealer"
        tier = "T3 - Attribution Fingerprint"
        confidence = "High (Confirmed Family Signature)"
        author = "SystemHelpDesk Threat Research Desk"
        reference = "https://malware-families-catalog.systemhelpdesk.com/families/msilperseus"
        date = "2026-10-16"
    strings:
        $attrib_str = "msilperseus" ascii wide nocase
        $pe_magic = "MZ" ascii
        $net_marker1 = "http" ascii nocase
        $net_marker2 = "POST" ascii
        $net_marker3 = "User-Agent:" ascii nocase
        $steal_marker1 = "Login Data" ascii wide nocase
        $steal_marker2 = "Cookies" ascii wide nocase
        $vault_marker = "CryptUnprotectData" ascii
    condition:
        uint16(0) == 0x5a4d and $attrib_str and (1 of ($steal_marker*) or $vault_marker)
}
