Saltar al contenido

YARA · Synacktiv rules

SYNACKTIV_SYNACKTIV_WEBSHELL_ASPX_Suo5_May25

Detects the .NET version of the suo5 webshell

WebshellSynacktiv rulesDetection Rule License 1.1Compila con YARA-X
Autor
Synacktiv, Maxence Fossat [@cybiosity]
Fecha
2025-05-12
Puntuación / Calidad
75 / 80

Qué detecta esta regla

Detects the .NET version of the suo5 webshell

Define 18 patrones (17 de texto, 0 hex, 1 regex).

Resumen generado a partir de los metadatos y la condición de la regla.

Código de la regla

synacktiv-webshell-aspx-suo5-may25.yarDetection Rule License 1.1
rule SYNACKTIV_SYNACKTIV_WEBSHELL_ASPX_Suo5_May25 : WEBSHELL COMMODITY FILE
{
	meta:
		description = "Detects the .NET version of the suo5 webshell"
		author = "Synacktiv, Maxence Fossat [@cybiosity]"
		id = "d30a7232-f00b-45ab-9419-f43b1611445a"
		date = "2025-05-12"
		modified = "2025-05-12"
		reference = "https://www.synacktiv.com/en/publications/open-source-toolset-of-an-ivanti-csa-attacker"
		source_url = "https://github.com/synacktiv/synacktiv-rules/blob/d234cc4da0783db7dca56ae8dd5252afdc248df8/2025/offensive_tools/webshell_aspx_suo5.yar#L1-L46"
		license_url = "https://github.com/synacktiv/synacktiv-rules/blob/d234cc4da0783db7dca56ae8dd5252afdc248df8/LICENSE.md"
		hash = "06710575d20cacd123f83eb82994879367e07f267e821873bf93f4db6312a97b"
		hash = "e6979d7df0876679fc2481aa68fcec5b6ddc82d854f63da2bddb674064384f9a"
		hash = "3bbbef1b4ead98c61fba60dd6291fe1ff08f5eac54d820e47c38d348e4a7b1ec"
		hash = "345c383dd439eb523b01e1087a0866e13f04ff53bb8cc11f3c70b4a382f10c7e"
		hash = "838840dd76ff34cee45996fdc9a87856c9a0f14138e65cb9eb6603ed157d1515"
		hash = "d9657ac8dd562bdd39e8fcc1fff37ddced10f7f3f118d9cd4da6118a223dcc45"
		logic_hash = "68dc29b2cedc26e638eaa12bf2a2d0415de323097baf5ea61dba52bd20b5beee"
		score = 75
		quality = 80
		tags = "WEBSHELL, COMMODITY, FILE"
		license = "DRL-1.1"
		tlp = "TLP:CLEAR"
		pap = "PAP:CLEAR"

	strings:
		$user_agent = ".Equals(\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3\")" ascii
		$header = "Response.AddHeader(\"X-Accel-Buffering\", \"no\")" ascii
		$xor = /= \(byte\)\(\w{1,1023}\[\w{1,1023}\] \^ \w{1,1023}\);/
		$s1 = "Request.Headers.Get(\"User-Agent\")" ascii
		$s2 = "if (Request.ContentType.Equals(\"application/plain\"))" ascii
		$s3 = "Response.ContentType = \"application/octet-stream\";" ascii
		$s4 = "= Request.BinaryRead(Request.ContentLength);" ascii
		$s5 = "= Response.OutputStream;" ascii
		$s6 = "new TcpClient()" ascii
		$s7 = ".BeginConnect(" ascii
		$s8 = ".GetStream().Write(" ascii
		$s9 = "new BinaryWriter(" ascii
		$s10 = "new BinaryReader(" ascii
		$s11 = ".ReadBytes(4)" ascii
		$s12 = "BitConverter.GetBytes((Int32)" ascii
		$s13 = "BitConverter.ToInt32(" ascii
		$s14 = "Array.Reverse(" ascii
		$s15 = "new Random().NextBytes(" ascii

	condition:
		filesize < 100KB and ( $user_agent or ( ( $header or $xor ) and 8 of ( $s* ) ) or 12 of ( $s* ) )
}

Cadenas (18 patrones)

IdentificadorTipoValorModificadores
$user_agenttexto".Equals(\"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.1.2.3\")"ascii
$headertexto"Response.AddHeader(\"X-Accel-Buffering\", \"no\")"ascii
$xorregex/= \(byte\)\(\w{1,1023}\[\w{1,1023}\] \^ \w{1,1023}\);/
$s1texto"Request.Headers.Get(\"User-Agent\")"ascii
$s2texto"if (Request.ContentType.Equals(\"application/plain\"))"ascii
$s3texto"Response.ContentType = \"application/octet-stream\";"ascii
$s4texto"= Request.BinaryRead(Request.ContentLength);"ascii
$s5texto"= Response.OutputStream;"ascii
$s6texto"new TcpClient()"ascii
$s7texto".BeginConnect("ascii
$s8texto".GetStream().Write("ascii
$s9texto"new BinaryWriter("ascii
$s10texto"new BinaryReader("ascii
$s11texto".ReadBytes(4)"ascii
$s12texto"BitConverter.GetBytes((Int32)"ascii
$s13texto"BitConverter.ToInt32("ascii
$s14texto"Array.Reverse("ascii
$s15texto"new Random().NextBytes("ascii

Condición

filesize < 100KB and ( $user_agent or ( ( $header or $xor ) and 8 of ( $s* ) ) or 12 of ( $s* ) )

En palabras sencillas (Heurística)

  • El archivo debe ocupar menos de 100KB (un límite barato que descarta archivos grandes).
  • Deben coincidir al menos 8 patrones de ( $s* ).
  • Deben coincidir al menos 12 patrones de ( $s* ).
  • El patrón $user_agent debe estar presente.
  • El patrón $header debe estar presente.
  • El patrón $xor debe estar presente.

Prueba esta regla en tu navegador

Arrastra un archivo para escanearlo con esta regla usando YARA-X compilado a WebAssembly. No se sube nada.

Arrastra un archivo aquí o haz clic para elegirSe escanea en local con YARA-X. Archivos de hasta 200 MB.

Abrir en el editor

Referencias

Hashes de muestras

Hashes de las muestras que el autor lista en los metadatos de la regla (búscalos en tu plataforma de threat intelligence).

  • 06710575d20cacd123f83eb82994879367e07f267e821873bf93f4db6312a97b
  • e6979d7df0876679fc2481aa68fcec5b6ddc82d854f63da2bddb674064384f9a
  • 3bbbef1b4ead98c61fba60dd6291fe1ff08f5eac54d820e47c38d348e4a7b1ec
  • 345c383dd439eb523b01e1087a0866e13f04ff53bb8cc11f3c70b4a382f10c7e
  • 838840dd76ff34cee45996fdc9a87856c9a0f14138e65cb9eb6603ed157d1515
  • d9657ac8dd562bdd39e8fcc1fff37ddced10f7f3f118d9cd4da6118a223dcc45

Licencia y atribución

Autor: Synacktiv, Maxence Fossat [@cybiosity]

Repositorio de origen: Synacktiv rules @ d234cc4da0

Licencia: Detection Rule License 1.1 (indicada en los metadatos de la regla)

“DRL-1.1”

Regla original

Obtenida a través de YARA Forge 20260927, que añade a los nombres el prefijo de la fuente y campos meta normalizados.

Id de la regla: d30a7232-f00b-45ab-9419-f43b1611445a

Metadatos

tlpTLP:CLEAR
papPAP:CLEAR

Etiquetas:WEBSHELLCOMMODITYFILE