// BULWARK-YARA-CAPTURE v1 // generator = "bulwark-black-ioc/yara_capture v1" // article = "https://bulwarkblack.com/aomei-ephemeral-update-tampering-endpoint-response/" // captured = "2026-10-18T07:26:39Z" // rules = 4 // capture_sha256 = "ffca089bb67d89733ae785f8c04a8748812f133606c8ab205320dc3861f64097" // origin[G_APT_Downloader_CROSSROAD_1] = "https://cloud.google.com/blog/topics/threat-intelligence/investigating-ephemeral-supply-chain-tampering/" // origin[G_APT_Backdoor_SHINYROAD_1] = "https://cloud.google.com/blog/topics/threat-intelligence/investigating-ephemeral-supply-chain-tampering/" // origin[G_APT_Backdoor_SHINYROAD_2] = "https://cloud.google.com/blog/topics/threat-intelligence/investigating-ephemeral-supply-chain-tampering/" // origin[G_APT_Launcher_ADAPTAGENT_1] = "https://cloud.google.com/blog/topics/threat-intelligence/investigating-ephemeral-supply-chain-tampering/" // rule G_APT_Downloader_CROSSROAD_1 { meta: author = "Mandiant" desc = "Detects obfuscated and masquerading UNC7017 CROSSROAD downloaders targeting AOMEI software update mechanisms" strings: // Masquerading & Metadata $meta_typo = "AOMEI Update Compent" wide $meta_co = "AOMEI International Network Limited" wide $meta_ver = "8.2.5.0" wide $meta_orig = "upgrade-now.exe" wide $meta_name = "upgrade-now" wide // Embedded Decompression & Downloader Artifacts $miniz1 = "archive is too large" ascii $miniz2 = "failed finding central directory" ascii $miniz3 = "unexpected decompressed size" ascii $whttp1 = "WinHttpCrackUrl" ascii $whttp2 = "WinHttpSendRequest" ascii // Obfuscation & Scheduled Task Artifacts $task1 = "RadminComponentRuntime" wide $task2 = "Radmin Component runtime checkable." wide $flag = "--runtimechk" wide $sob1 = "IsCurrentIpWhitelisted._sob_enc" ascii $sob2 = "DownloadFileFromUrlA._sob_enc" ascii $sob3 = "WinMain._sob_enc." ascii $obf_key = "_sob_key" ascii condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize < 5MB and ( (($meta_typo or ($meta_co and ($meta_orig or $meta_name or $meta_ver))) and any of ($miniz*) and any of ($whttp*)) or (2 of ($sob*) and ($task1 or $flag)) or ($obf_key and $task1 and $task2 and any of ($sob*)) ) } rule G_APT_Backdoor_SHINYROAD_1 { meta: author = "Mandiant" desc = "Detects the SHINYROAD BlkScrDl.dll COM-staging loader and RuntimeComponent.dll PocketPy engine" strings: // Shared SHINYROAD artifacts (shared memory section and mutex) $shm = "Local\\963d3c60-d406-4ad6-aa1e-dc8e45061ccf" ascii wide $mtx = "Global\\{F9E6E3C0-E11A-4F85-9944-AF4AD6E05883}" ascii wide // BlkScrDl.dll loader: config.zip staging and COM server registration $ld1 = "%sconfig.zip" ascii $ld2 = "%scsvc\\RuntimeComponent.dll" ascii $ld3 = "libBlkScrDl.dll" ascii $com1 = "Software\\Classes\\CLSID\\%s" ascii $com2 = "Software\\Classes\\AppID\\%s" ascii $com3 = "%s\\InprocServer32" ascii // RuntimeComponent.dll embedded PocketPy engine $rc1 = "libRuntimeComponent.dll" ascii $rc2 = "metadata.dat" ascii $rc3 = "_pyio_compat" ascii $rc4 = "_pyio_struct" ascii $rc5 = "%sdemo_srv.log" ascii condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize < 5MB and ( ($shm and $mtx) or (($shm or $mtx) and (2 of ($ld*) or 2 of ($rc*))) or (2 of ($ld*) and 2 of ($com*)) or ($rc1 and $rc2 and any of ($rc3, $rc4, $rc5)) ) } rule G_APT_Backdoor_SHINYROAD_2 { meta: author = "Mandiant" desc = "Detects compiled PocketPy bytecode payloads associated with SHINYROAD backdoors" strings: $pkpy_magic = { 4F 43 01 00 } $proto1 = "mct3-handshake-v1" ascii $script = "bootstrap_tcp_slim_v2_call_min.py" ascii $jam1 = "JAM_BURST_PACKETS_MIN" ascii $jam2 = "JAM_MIN_MS" ascii $jam3 = "JAM_MAX_BYTES" ascii $mod1 = "_pyio_struct" ascii $mod2 = "_pyio_compat" ascii $enc1 = "nh_enc" ascii $enc2 = "encbody" ascii condition: $pkpy_magic at 0 and filesize < 500KB and ( $proto1 or $script or all of ($jam*) or (all of ($mod*) and any of ($enc*)) ) } rule G_APT_Launcher_ADAPTAGENT_1 { meta: author = "Mandiant" desc = "Detects UNC7017 ADAPTAGENT post-exploitation loader and sideloaded Adaptix payload (Nitro camouflage)" ref = "https://cloud.google.com/blog/topics/threat-intelligence/investigating-ephemeral-supply-chain-tampering" platforms = "Win" rs1 = "14b31918075e6130b9123158743db0a81e2d7bfcf6d39731ee7d9200a98cd591" strings: // Sideloaded Masquerading & Camouflage $camo_exe1 = "NitroPromotion.exe" ascii wide nocase $camo_exe2 = "Nitro_Scan2PDFApp.exe" ascii wide nocase $camo_dll1 = "Eztwain4.dll" ascii wide nocase $camo_dll2 = "Nitro PDF Eztwain4" ascii wide nocase $camo_ver = "14.10.1.0" ascii wide $camo_copy = "Nitro Software, Inc." ascii wide // NitroPromotion Loader & Staging Functionality $load1 = "DownloadToLocalAppData" ascii $load2 = "ExtractZipToDirectoryA" ascii $load3 = "GetTempZipFileNameA" ascii $load4 = "CreateScheduledTask" ascii // Adaptix C2 & ADAPTAGENT Core Artifacts $adapt1 = "Adaptix Crash Analyzer v1.0" ascii $adapt2 = "Global\\{8d00c640-48d8-4440-a8e1-660fd37f572a}" ascii wide $adapt3 = "\\\\.\\pipe\\%08lx" ascii $adapt4 = "13ConnectorHTTP" ascii $adapt5 = "9Connector" ascii condition: uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and filesize < 10MB and ( // Branch 1: ADAPTAGENT Sideloaded Payload (Eztwain4.dll) (any of ($camo_dll*, $adapt1, $adapt2) and 2 of ($adapt*)) or // Branch 2: NitroPromotion Masquerading Loader (NitroPromotion.exe) (any of ($camo_exe*) and (2 of ($load*) or any of ($adapt1, $adapt2))) or (all of ($camo_ver, $camo_copy) and any of ($camo_exe*) and any of ($load*)) ) }