YARA Detection Rule: Win32_Ransomware_Cicada3301
Repository: reversinglabs/reversinglabs-yara-rules
Detects: Yara rule that detects Cicada3301 ransomware.
Malware family: CICADA3301
Author: ReversingLabs

Pattern signatures:
$get_valid_drives = {
            55 89 E5 53 57 56 83 EC ?? A1 ?? ?? ?? ?? 0F B6 00 6A ?? 6A ?? E8 ?? ?? ?? ?? 83 C4
            ?? 85 C0 0F 84 ?? ?? ?? ?? 0F 28 05 ?? ?? ?? ?? 0F 28 0D ?? ?? ?? ?? 0F 28 15 ?? ??
            ?? ?? 89 C6 0F 11 00 0F 11 48 ?? 0F 28 0D ?? ?? ?? ?? 0F 11 50 ?? 0F 28 15 ?? ?? ??
            ?? 0F 11 48 ?? 0F 28 0D ?? ?? ?? ?? 0F 11 50 ?? 0F 11 48 ?? C7 40 ?? ?? ?? ?? ?? C7
            40 ?? ?? ?? ?? ?? 83 C0 ?? 8D 4D ?? 50 56 51 E8 ?? ?? ?? ?? 83 C4 ?? 80 7D ?? ?? 0F
            84 ?? ?? ?? ?? E8 ?? ?? ?? ?? 8B 7D ?? 89 45 ?? 83 FF ?? 0F 82 ?? ?? ?? ?? 8B 5D ??
            8D 04 7F 89 75 ?? 89 7D ?? 8D 74 83 ?? 66 2E 0F 1F 84 00 ?? ?? ?? ?? 90 57 6A ?? 8D
            45 ?? 50 E8 ?? ?? ?? ?? 83 C4 ?? 8B 55 ?? 8D 4F ?? 39 D1 0F 83 ?? ?? ?? ?? 39 D0 0F
            83 ?? ?? ?? ?? 8B 56 ?? 8D 04 40 89 CF 89 55 ?? F2 0F 10 06 F2 0F 11 45 ?? 8B 54 83
            ?? F2 0F 10 04 83 F2 0F 11 06 89 56 ?? 83 C6 ?? 83 F9 ?? 8B 55 ?? 89 54 83 ?? F2 0F
            10 45 

Detection condition:
uint16(0) == 0x5A4D and
        (
            all of ($collect_files_recursively_p*)
        ) and
        (
            $get_valid_drives
        ) and
        (
            (
                (
                    all of ($encrypt_files_full_v1_p*)
                )
            )
             or
  

Full rule:
rule Win32_Ransomware_Cicada3301 : tc_detection malicious
{
    meta:

        author              = "ReversingLabs"

        source              = "ReversingLabs"
        status              = "RELEASED"
        sharing             = "TLP:WHITE"
        category            = "MALWARE"
        malware             = "CICADA3301"
        description         = "Yara rule that detects Cicada3301 ransomware."

        tc_detection_type   = "Ransomware"
        tc_detection_name   = "Cicada3301"
        tc_detection_factor = 5

    strings:

        $get_valid_drives = {
            55 89 E5 53 57 56 83 EC ?? A1 ?? ?? ?? ?? 0F B6 00 6A ?? 6A ?? E8 ?? ?? ?? ?? 83 C4
            ?? 85 C0 0F 84 ?? ?? ?? ?? 0F 28 05 ?? ?? ?? ?? 0F 28 0D ?? ?? ?? ?? 0F 28 15 ?? ??
            ?? ?? 89 C6 0F 11 00 0F 11 48 ?? 0F 28 0D ?? ?? ?? ?? 0F 11 50 ?? 0F 28 15 ?? ?? ??
            ?? 0F 11 48 ?? 0F 28 0D ?? ?? ?? ?? 0F 11 50 ?? 0F 11 48 ?? C7 40 ?? ?? ?? ?? ?? C7
            40 ?? ?? ?? ?? ?? 83 C0 ?? 8D 4D ?? 50 56 51 E8 ?? ?? ?? ?? 83 C4 ?? 80 7D ?? ?? 0F
            84 ?? ?? ?? ?? E8 ?? ?? ?? ?? 8B 7D ?? 89 45 ?? 83 FF ?? 0F 82 ?? ?? ?? ?? 8B 5D ??
            8D 04 7F 89 75 ?? 89 7D ?? 8D 74 83 ?? 66 2E 0F 1F 84 00 ?? ?? ?? ?? 90 57 6A ?? 8D
            45 ?? 50 E8 ?? ?? ?? ?? 83 C4 ?? 8B 55 ?? 8D 4F ?? 39 D1 0F 83 ?? ?? ?? ?? 39 D0 0F
            83 ?? ?? ?? ?? 8B 56 ?? 8D 04 40 89 CF 89 55 ?? F2 0F 10 06 F2 0F 11 45 ?? 8B 54 83
            ?? F2 0F 10 04 83 F2 0F 11 06 89 56 ?? 83 C6 ?? 83 F9 ?? 8B 55 ?? 89 54 83 ?? F2 0F
            10 45 ?? F2 0F 11 04 83 77 ?? 8B 45 ?? 8B 75 ?? FF 08 75 ?? FF 48 ?? 75 ?? 6A ?? 68
            ?? ?? ?? ?? 50 E8 ?? ?? ?? ?? 83 C4 ?? 8B 7D ?? 8B 45 ?? F2 0F 10 45 ?? 89 47 ?? F2
            0F 11 07 6A ?? 6A ?? 56 E8 ?? ?? ?? ?? 83 C4 ?? 89 F8 83 C4 ?? 5E 5F 5B 5D C3
        }

        $collect_files_recursively_p1 = {
            55 89 E5 53 57 56 83 E4 ?? 81 EC ?? ?? ?? ?? 8B 4D ?? 8B 7D ?? 8B 75 ?? 8B 45 ?? 89
            4C 24 ?? 89 44 24 ?? 57 5