rule win_petya_auto { meta: description= "Detect the risk of Ransomware Petya Rule 1" strings: $sequence_0 = { 8d4e28 e8???????? 8d4e4c e8???????? } // n = 4, score = 600 // 8d4e28 | lea ecx, [esi + 0x28] // e8???????? | // 8d4e4c | lea ecx, [esi + 0x4c] // e8???????? | $sequence_1 = { 8bc6 c1e810 88442429 8bc6 c1e808 8844242a } // n = 6, score = 600 // 8bc6 | mov eax, esi // c1e810 | shr eax, 0x10 // 88442429 | mov byte ptr [esp + 0x29], al // 8bc6 | mov eax, esi // c1e808 | shr eax, 8 // 8844242a | mov byte ptr [esp + 0x2a], al $sequence_2 = { 0f42f2 6a04 56 e8???????? 8bd8 } // n = 5, score = 600 // 0f42f2 | cmovb esi, edx // 6a04 | push 4 // 56 | push esi // e8???????? | // 8bd8 | mov ebx, eax $sequence_3 = { 6a04 6a20 c705????????20000000 e8???????? } // n = 4, score = 600 // 6a04 | push 4 // 6a20 | push 0x20 // c705????????20000000 | // e8???????? | $sequence_4 = { 51 83c050 03c7 53 50 e8???????? } // n = 6, score = 600 // 51 | push ecx // 83c050 | add eax, 0x50 // 03c7 | add eax, edi // 53 | push ebx // 50 | push eax // e8???????? | $sequence_5 = { e8???????? 8d4e10 e8???????? 8d4e1c e8???????? 8d4e28 e8???????? } // n = 7, score = 600 // e8???????? | // 8d4e10 | lea ecx, [esi + 0x10] // e8???????? | // 8d4e1c | lea ecx, [esi + 0x1c] // e8???????? | // 8d4e28 | lea ecx, [esi + 0x28] // e8???????? | $sequence_6 = { c7461001000000 33c0 5e 8be5 } // n = 4, score = 600 // c7461001000000 | mov dword ptr [esi + 0x10], 1 // 33c0 | xor eax, eax // 5e | pop esi // 8be5 | mov esp, ebp $sequence_7 = { 8bda c1e60e c1e017 33ff 0bf9 c1eb09 8b4c2424 } // n = 7, score = 600 // 8bda | mov ebx, edx // c1e60e | shl esi, 0xe // c1e017 | shl eax, 0x17 // 33ff | xor edi, edi // 0bf9 | or edi, ecx // c1eb09 | shr ebx, 9 // 8b4c2424 | mov ecx, dword ptr [esp + 0x24] $sequence_8 = { 7617 53 33db 8b4e74 03cb } // n = 5, score = 600 // 7617 | jbe 0x19 // 53 | push ebx // 33db | xor ebx, ebx // 8b4e74 | mov ecx, dword ptr [esi + 0x74] // 03cb | add ecx, ebx $sequence_9 = { 8d4e10 e8???????? 8d4e1c e8???????? 8d4e28 e8???????? } // n = 6, score = 600 // 8d4e10 | lea ecx, [esi + 0x10] // e8???????? | // 8d4e1c | lea ecx, [esi + 0x1c] // e8???????? | // 8d4e28 | lea ecx, [esi + 0x28] // e8???????? | condition: 7 of them and filesize < 229376 } rule win_eternal_petya_auto { meta: description= "Detect the risk of Ransomware Petya Rule 2" strings: $sequence_0 = { 8bec 51 57 68000000f0 } // n = 4, score = 400 // 8bec | mov ebp, esp // 51 | push ecx // 57 | push edi // 68000000f0 | push 0xf0000000 $sequence_1 = { 68f0000000 6a40 ff15???????? 8bd8 } // n = 4, score = 400 // 68f0000000 | push 0xf0 // 6a40 | push 0x40 // ff15???????? | // 8bd8 | mov ebx, eax $sequence_2 = { 57 68000000f0 6a18 33ff } // n = 4, score = 400 // 57 | push edi // 68000000f0 | push 0xf0000000 // 6a18 | push 0x18 // 33ff | xor edi, edi $sequence_3 = { 53 8d4644 50 53 6a02 } // n = 5, score = 400 // 53 | push ebx // 8d4644 | lea eax, [esi + 0x44] // 50 | push eax // 53 | push ebx // 6a02 | push 2 $sequence_4 = { 40 49 75f9 56 ff15???????? } // n = 5, score = 400 // 40 | inc eax // 49 | dec ecx // 75f9 | jne 0xfffffffb // 56 | push esi // ff15???????? | $sequence_5 = { 53 6a21 8d460c 50 } // n = 4, score = 400 // 53 | push ebx // 6a21 | push 0x21 // 8d460c | lea eax, [esi + 0xc] // 50 | push eax $sequence_6 = { 50 8d8594f9ffff 50 894dac } // n = 4, score = 300 // 50 | push eax // 8d8594f9ffff | lea eax, [ebp - 0x66c] // 50 | push eax // 894dac | mov dword ptr [ebp - 0x54], ecx $sequence_7 = { ff75f8 8945fc ff15???????? 56 56 6a02 56 } // n = 7, score = 300 // ff75f8 | push dword ptr [ebp - 8] // 8945fc | mov dword ptr [ebp - 4], eax // ff15???????? | // 56 | push esi // 56 | push esi // 6a02 | push 2 // 56 | push esi $sequence_8 = { ff7608 03c1 50 ff15???????? } // n = 4, score = 300 // ff7608 | push dword ptr [esi + 8] // 03c1 | add eax, ecx // 50 | push eax // ff15???????? | $sequence_9 = { 0fb7044a 6685c0 7412 0fb7444584 66890c47 0fb7044a 66ff444584 } // n = 7, score = 300 // 0fb7044a | movzx eax, word ptr [edx + ecx*2] // 6685c0 | test ax, ax // 7412 | je 0x14 // 0fb7444584 | movzx eax, word ptr [ebp + eax*2 - 0x7c] // 66890c47 | mov word ptr [edi + eax*2], cx // 0fb7044a | movzx eax, word ptr [edx + ecx*2] // 66ff444584 | inc word ptr [ebp + eax*2 - 0x7c] $sequence_10 = { 83e001 89412c 8b4320 c7403001000000 } // n = 4, score = 300 // 83e001 | and eax, 1 // 89412c | mov dword ptr [ecx + 0x2c], eax // 8b4320 | mov eax, dword ptr [ebx + 0x20] // c7403001000000 | mov dword ptr [eax + 0x30], 1 $sequence_11 = { 8b4d0c 0fb71441 8955f0 3bd3 0f862fffffff 8b45cc } // n = 6, score = 300 // 8b4d0c | mov ecx, dword ptr [ebp + 0xc] // 0fb71441 | movzx edx, word ptr [ecx + eax*2] // 8955f0 | mov dword ptr [ebp - 0x10], edx // 3bd3 | cmp edx, ebx // 0f862fffffff | jbe 0xffffff35 // 8b45cc | mov eax, dword ptr [ebp - 0x34] $sequence_12 = { 2bc1 d1f8 8d440002 50 6a08 ffd6 50 } // n = 7, score = 300 // 2bc1 | sub eax, ecx // d1f8 | sar eax, 1 // 8d440002 | lea eax, [eax + eax + 2] // 50 | push eax // 6a08 | push 8 // ffd6 | call esi // 50 | push eax $sequence_13 = { 83e001 894304 8bc2 83e003 83e800 } // n = 5, score = 300 // 83e001 | and eax, 1 // 894304 | mov dword ptr [ebx + 4], eax // 8bc2 | mov eax, edx // 83e003 | and eax, 3 // 83e800 | sub eax, 0 $sequence_14 = { 75f5 2bcf d1f9 8d1409 8bce 85d2 } // n = 6, score = 200 // 75f5 | jne 0xfffffff7 // 2bcf | sub ecx, edi // d1f9 | sar ecx, 1 // 8d1409 | lea edx, [ecx + ecx] // 8bce | mov ecx, esi // 85d2 | test edx, edx $sequence_15 = { 50 ffd6 85c0 0f8480000000 8b95f4fdffff 8d8df8fdffff } // n = 6, score = 200 // 50 | push eax // ffd6 | call esi // 85c0 | test eax, eax // 0f8480000000 | je 0x86 // 8b95f4fdffff | mov edx, dword ptr [ebp - 0x20c] // 8d8df8fdffff | lea ecx, [ebp - 0x208] condition: 7 of them and filesize < 851968 } rule win_eternal_petya_w0 { meta: description= "Detect the risk of Ransomware Petya Rule 3" strings: $encrypt_file = { 55 8B EC 83 EC ?? 53 56 57 8B 7D ?? 8B 4F ?? 33 DB 8D 45 ?? 50 53 53 51 89 5D ?? 89 5D ?? 89 5D ?? FF 15 ?? ?? ?? ?? 85 C0 0F 84 ?? ?? ?? ?? 8B 55 ?? 53 53 6A ?? 53 53 68 ?? ?? ?? ?? 52 FF 15 ?? ?? ?? ?? 8B F0 83 FE ?? 0F 84 ?? ?? ?? ?? 8D 45 ?? 50 8D 4D ?? 51 57 8B CE E8 ?? ?? ?? ?? 83 C4 ?? 85 C0 0F 84 ?? ?? ?? ?? 39 5D ?? 0F 84 ?? ?? ?? ?? 39 5D ?? 0F 84 ?? ?? ?? ?? 8D 55 ?? 52 56 FF 15 ?? ?? ?? ?? 8B 4F ?? 8B 45 ?? 83 C1 ?? 2B C1 19 5D ?? 89 45 ?? 89 5D ?? 78 ?? 7F ?? 3D ?? ?? ?? ?? 76 ?? B8 ?? ?? ?? ?? EB ?? C7 45 ?? ?? ?? ?? ?? 53 50 53 6A ?? 53 8B F8 56 89 45 ?? 89 7D ?? FF 15 ?? ?? ?? ?? 8B D8 85 DB 74 ?? 8B 55 ?? 52 6A ?? 6A ?? 6A ?? 53 FF 15 ?? ?? ?? ?? 8B F8 85 FF 74 ?? 8B 4D ?? 8B 55 ?? 8D 45 ?? 50 57 6A ?? 51 6A ?? 52 FF 15 ?? ?? ?? ?? 85 C0 74 ?? 8B 45 ?? 50 57 FF 15 ?? ?? ?? ?? 8B 4D ?? 51 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? 83 C4 ?? 57 FF 15 ?? ?? ?? ?? 53 FF 15 ?? ?? ?? ?? 8B 7D ?? 8B 45 ?? 3B C7 73 ?? 2B F8 EB ?? 33 FF 8B 55 ?? 8B 42 ?? 8D 4C 38 ?? 6A ?? 51 E8 ?? ?? ?? ?? 8B 7D ?? 83 C4 ?? 33 DB 56 FF 15 ?? ?? ?? ?? 8B 55 ?? 52 FF 15 ?? ?? ?? ?? 39 5D ?? 74 ?? 39 5D ?? 75 ?? 8B 47 ?? 8B 35 ?? ?? ?? ?? 50 FF D6 8B 7F ?? 3B FB 74 ?? 57 FF D6 5F 5E 5B 8B E5 5D C3 } $main_encrypt = { 55 8B EC 56 6A ?? 6A ?? 6A ?? 6A ?? FF 15 ?? ?? ?? ?? 8B 75 ?? 89 46 ?? 85 C0 0F 84 ?? ?? ?? ?? 53 8B 1D ?? ?? ?? ?? 57 68 ?? ?? ?? ?? 6A ?? 6A ?? 6A ?? 8D 7E ?? 57 FF D3 85 C0 75 ?? FF 15 ?? ?? ?? ?? 3D ?? ?? ?? ?? 75 ?? 6A ?? 6A ?? 6A ?? 6A ?? 57 FF D3 85 C0 74 ?? 8B 07 8D 5E ?? 53 50 8B 46 ?? E8 ?? ?? ?? ?? 83 C4 ?? 85 C0 74 ?? 8B C6 E8 ?? ?? ?? ?? 85 C0 74 ?? E8 ?? ?? ?? ?? 85 C0 74 ?? 56 8D 4E ?? 6A ?? 51 E8 ?? ?? ?? ?? 8B 56 ?? 83 C4 ?? 52 FF 15 ?? ?? ?? ?? 8B 46 ?? 50 FF 15 ?? ?? ?? ?? 8B 0B 51 FF 15 ?? ?? ?? ?? 8B 17 6A ?? 52 FF 15 ?? ?? ?? ?? 8B 46 ?? 50 FF 15 ?? ?? ?? ?? 5F 5B B9 ?? ?? ?? ?? 8D 46 ?? 8B FF C6 00 ?? 40 49 75 ?? 56 FF 15 ?? ?? ?? ?? 33 C0 5E 5D C2 ?? ?? } $encryption_loop = { 8B 7C 24 ?? 6A ?? 6A ?? 8D 43 ?? 50 33 C0 39 43 ?? 0F 95 C0 40 50 FF 15 ?? ?? ?? ?? 85 C0 0F 84 ?? ?? ?? ?? 83 F8 ?? 0F 84 ?? ?? ?? ?? 83 F8 ?? 0F 84 ?? ?? ?? ?? B9 ?? ?? ?? ?? 8D 44 24 ?? 66 8B 10 66 3B 11 75 ?? 66 85 D2 74 ?? 66 8B 50 ?? 66 3B 51 ?? 75 ?? 83 C0 ?? 83 C1 ?? 66 85 D2 75 ?? 33 C0 EB ?? 1B C0 83 D8 ?? 85 C0 0F 84 ?? ?? ?? ?? B9 ?? ?? ?? ?? 8D 44 24 ?? 8D 64 24 ?? 66 8B 10 66 3B 11 75 ?? 66 85 D2 74 ?? 66 8B 50 ?? 66 3B 51 ?? 75 ?? 83 C0 ?? 83 C1 ?? 66 85 D2 75 ?? 33 C0 EB ?? 1B C0 83 D8 ?? 85 C0 0F 84 ?? ?? ?? ?? 8D 4C 24 ?? 51 57 8D 94 24 ?? ?? ?? ?? 52 FF 15 ?? ?? ?? ?? 85 C0 74 ?? 8B 44 24 ?? A8 ?? 74 ?? A9 ?? ?? ?? ?? 75 ?? 8D BC 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? 85 C0 75 ?? 8B 45 ?? 53 48 50 8B CF 51 E8 ?? ?? ?? ?? 83 C4 ?? EB ?? 8D 54 24 ?? 52 FF 15 ?? ?? ?? ?? 8D 4C 24 ?? 8D 71 ?? 90 66 8B 11 83 C1 ?? 66 85 D2 75 ?? 2B CE D1 F9 8D 4C 4C ?? 3B C1 74 ?? 50 E8 ?? ?? ?? ?? 83 C4 ?? 85 C0 74 ?? 8D 94 24 ?? ?? ?? ?? 53 52 E8 ?? ?? ?? ?? 83 C4 ?? 8B 74 24 ?? 8D 44 24 ?? 50 56 FF 15 ?? ?? ?? ?? 85 C0 0F 85 ?? ?? ?? ??} condition: $encrypt_file and $main_encrypt and $encryption_loop } rule Petya_Ransomware { meta: description= "Detect the risk of Ransomware Petya Rule 4" hash = "26b4699a7b9eeb16e76305d843d4ab05e94d43f3201436927e13b3ebafa90739" strings: $a1 = "WinRAR SFX module" fullword ascii $s1 = "BX-Proxy-Manual-Auth" fullword wide $s2 = "" fullword ascii $s3 = "X-HTTP-Attempts" fullword wide $s4 = "@CommandLineMode" fullword wide $s5 = "X-Retry-After" fullword wide condition: uint16(0) == 0x5a4d and filesize < 500KB and $a1 and 3 of ($s*) } rule Ransom_Petya { meta: description= "Detect the risk of Ransomware Petya Rule 5" strings: $a1 = { C1 C8 14 2B F0 03 F0 2B F0 03 F0 C1 C0 14 03 C2 } $a2 = { 46 F7 D8 81 EA 5A 93 F0 12 F7 DF C1 CB 10 81 F6 } $a3 = { 0C 88 B9 07 87 C6 C1 C3 01 03 C5 48 81 C3 A3 01 00 00 } condition: all of them }