Skip to content

YARA · Signature Base (Florian Roth / Nextron)

SIGNATURE_BASE_MAL_G_Backdoor_BRICKSTORM_2

Detects BRICKSTORM backdoor used by APT group UNC5221 (China Nexus)

MalwareSignature Base (Florian Roth / Nextron)Detection Rule License 1.1Compiles with YARA-X
Author
Google Threat Intelligence Group (GTIG) (modified by Florian Roth)
Date
2025-09-25
Modified
2026-05-15
Score / Quality
75 / 85

What this rule detects

Detects BRICKSTORM backdoor used by APT group UNC5221 (China Nexus)

Targets: Linux ELF.

It defines 13 patterns (10 text, 3 hex, 0 regex).

Summary generated from the rule's metadata and condition.

Rule source

mal-g-backdoor-brickstorm-2.yarDetection Rule License 1.1
rule SIGNATURE_BASE_MAL_G_Backdoor_BRICKSTORM_2 : FILE
{
	meta:
		description = "Detects BRICKSTORM backdoor used by APT group UNC5221 (China Nexus)"
		author = "Google Threat Intelligence Group (GTIG) (modified by Florian Roth)"
		id = "03618840-c3f3-5ba6-983b-181a855d506b"
		date = "2025-09-25"
		modified = "2026-05-15"
		reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign"
		source_url = "https://github.com/Neo23x0/signature-base/blob/94a1c48d7ab499879287ff611dfe7f9c56376030/yara/apt_cn_brickstorm_sep25.yar#L20-L53"
		license_url = "https://github.com/Neo23x0/signature-base/blob/94a1c48d7ab499879287ff611dfe7f9c56376030/LICENSE"
		logic_hash = "afea32d3c817473ec0dbc20177daa4070f847c23295318fa093fc3a96a15e764"
		score = 75
		quality = 85
		tags = "FILE"

	strings:
		$decr1 = { 0F B6 4C 04 ?? 0F B6 54 04 ?? 31 D1 88 4C 04 ?? 48 FF C0 [0-4] 48 83 F8 ?? 7C }
		$decr2 = { 40 88 7C 34 34 48 FF C3 48 FF C6 48 39 D6 7D 18 0F B6 3B 48 39 CE 73 63 44 0F B6 04 30 44 31 C7 48 83 FE 04 72 DA }
		$decr3 = { 0F B6 54 0C ?? 0F B6 5C 0C ?? 31 DA 88 14 08 48 FF C1 48 83 F9 ?? 7C E8 }
		$str1 = "main.selfWatcher"
		$str2 = "main.copyFile"
		$str3 = "main.startNew"
		$str4 = "WRITE_LOG=true"
		$str5 = "WRITE_LOGWednesday"
		$str6 = "vami-httpdvideo/webm"
		$str7 = "/opt/vmware/sbin/"
		$str8 = "/home/vsphere-ui/"
		$str9 = "/opt/vmware/sbin/vami-http"
		$str10 = "main.getVFromEnv"

	condition:
		uint32( 0 ) == 0x464c457f and filesize < 10MB and ( 1 of ( $decr* ) and 1 of ( $str* ) or 5 of ( $str* ) )
}

Strings (13 patterns)

IdentifierTypeValueModifiers
$decr1hex{ 0F B6 4C 04 ?? 0F B6 54 04 ?? 31 D1 88 4C 04 ?? 48 FF C0 [0-4] 48 83 F8 ?? 7C }
$decr2hex{ 40 88 7C 34 34 48 FF C3 48 FF C6 48 39 D6 7D 18 0F B6 3B 48 39 CE 73 63 44 0F B6 04 30 44 31 C7 48 83 FE 04 72 DA }
$decr3hex{ 0F B6 54 0C ?? 0F B6 5C 0C ?? 31 DA 88 14 08 48 FF C1 48 83 F9 ?? 7C E8 }
$str1text"main.selfWatcher"
$str2text"main.copyFile"
$str3text"main.startNew"
$str4text"WRITE_LOG=true"
$str5text"WRITE_LOGWednesday"
$str6text"vami-httpdvideo/webm"
$str7text"/opt/vmware/sbin/"
$str8text"/home/vsphere-ui/"
$str9text"/opt/vmware/sbin/vami-http"
$str10text"main.getVFromEnv"

Condition

uint32( 0 ) == 0x464c457f and filesize < 10MB and ( 1 of ( $decr* ) and 1 of ( $str* ) or 5 of ( $str* ) )

In plain words (Heuristic)

  • The file must start with the ELF header — a Linux/Unix executable.
  • The file must be smaller than 10MB (a cheap guard that skips large files).
  • At least 1 patterns in ( $decr* ) must match.
  • At least 1 patterns in ( $str* ) must match.
  • At least 5 patterns in ( $str* ) must match.

Test this rule in your browser

Drop a file to scan it with this rule using YARA-X compiled to WebAssembly. Nothing is uploaded.

Drop a file here or click to chooseScanned locally with YARA-X. Files up to 200 MB.

Open in editor

References

Licence & attribution

Author: Google Threat Intelligence Group (GTIG) (modified by Florian Roth)

Source repository: Signature Base (Florian Roth / Nextron) @ 94a1c48d7a

Licence: Detection Rule License 1.1 (repository licence)

Original rule

Mirrored via YARA Forge 20260927, which prefixes rule names with the source and adds normalised meta fields.

Rule id: 03618840-c3f3-5ba6-983b-181a855d506b

Tags:FILE