YARA · Synacktiv rules
SYNACKTIV_SYNACKTIV_WEBSHELL_ASPX_Suo5_May25
Detects the .NET version of the suo5 webshell
- 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
rule SYNACKTIV_SYNACKTIV_WEBSHELL_ASPX_Suo5_May25 : WEBSHELL COMMODITY FILE
{
meta:
= "Detects the .NET version of the suo5 webshell"
= "Synacktiv, Maxence Fossat [@cybiosity]"
= "d30a7232-f00b-45ab-9419-f43b1611445a"
= "2025-05-12"
= "2025-05-12"
= "https://www.synacktiv.com/en/publications/open-source-toolset-of-an-ivanti-csa-attacker"
= "https://github.com/synacktiv/synacktiv-rules/blob/d234cc4da0783db7dca56ae8dd5252afdc248df8/2025/offensive_tools/webshell_aspx_suo5.yar#L1-L46"
= "https://github.com/synacktiv/synacktiv-rules/blob/d234cc4da0783db7dca56ae8dd5252afdc248df8/LICENSE.md"
= "06710575d20cacd123f83eb82994879367e07f267e821873bf93f4db6312a97b"
= "e6979d7df0876679fc2481aa68fcec5b6ddc82d854f63da2bddb674064384f9a"
= "3bbbef1b4ead98c61fba60dd6291fe1ff08f5eac54d820e47c38d348e4a7b1ec"
= "345c383dd439eb523b01e1087a0866e13f04ff53bb8cc11f3c70b4a382f10c7e"
= "838840dd76ff34cee45996fdc9a87856c9a0f14138e65cb9eb6603ed157d1515"
= "d9657ac8dd562bdd39e8fcc1fff37ddced10f7f3f118d9cd4da6118a223dcc45"
= "68dc29b2cedc26e638eaa12bf2a2d0415de323097baf5ea61dba52bd20b5beee"
= 75
= 80
= "WEBSHELL, COMMODITY, FILE"
= "DRL-1.1"
= "TLP:CLEAR"
= "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)
| Identificador | Tipo | Valor | Modificadores |
|---|---|---|---|
| $user_agent | texto | ".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 | texto | "Response.AddHeader(\"X-Accel-Buffering\", \"no\")" | ascii |
| $xor | regex | /= \(byte\)\(\w{1,1023}\[\w{1,1023}\] \^ \w{1,1023}\);/ | |
| $s1 | texto | "Request.Headers.Get(\"User-Agent\")" | ascii |
| $s2 | texto | "if (Request.ContentType.Equals(\"application/plain\"))" | ascii |
| $s3 | texto | "Response.ContentType = \"application/octet-stream\";" | ascii |
| $s4 | texto | "= Request.BinaryRead(Request.ContentLength);" | ascii |
| $s5 | texto | "= Response.OutputStream;" | ascii |
| $s6 | texto | "new TcpClient()" | ascii |
| $s7 | texto | ".BeginConnect(" | ascii |
| $s8 | texto | ".GetStream().Write(" | ascii |
| $s9 | texto | "new BinaryWriter(" | ascii |
| $s10 | texto | "new BinaryReader(" | ascii |
| $s11 | texto | ".ReadBytes(4)" | ascii |
| $s12 | texto | "BitConverter.GetBytes((Int32)" | ascii |
| $s13 | texto | "BitConverter.ToInt32(" | ascii |
| $s14 | texto | "Array.Reverse(" | ascii |
| $s15 | texto | "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.
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”
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
| tlp | TLP:CLEAR |
|---|---|
| pap | PAP:CLEAR |
Etiquetas:WEBSHELLCOMMODITYFILE
Reglas relacionadas
- Herramienta ofensivaSynacktiv rules· Synacktiv, Maxence Fossat [@cybiosity]· 2025-05-12
- Herramienta ofensivaSynacktiv rules· Synacktiv, Maxence Fossat [@cybiosity]· 2025-05-12