YARA · ditekSHen detection
DITEKSHEN_MALWARE_Multi_Exaramel
Exaramel Windows/Linux backdoor payload
- Author
- ditekSHen
- Date
- 2020-11-06
- Modified
- 2024-11-01
- Score / Quality
- 75 / 73
What this rule detects
Exaramel Windows/Linux backdoor payload
Associated malware family: Exaramel.
Targets: Windows PE.
It defines 28 patterns (28 text, 0 hex, 0 regex).
Summary generated from the rule's metadata and condition.
Rule source
malware-multi-exaramel.yarBSD 2-Clause License
rule DITEKSHEN_MALWARE_Multi_Exaramel : FILE
{
meta:
= "Exaramel Windows/Linux backdoor payload"
= "ditekSHen"
= "014f10f3-4502-5719-93f6-4b2940f53876"
= "2020-11-06"
= "2024-11-01"
= "https://github.com/ditekshen/detection"
= "https://github.com/ditekshen/detection/blob/e76c93dcdedff04076380ffc60ea54e45b313635/yara/malware.yar#L420-L459"
= "https://github.com/ditekshen/detection/blob/e76c93dcdedff04076380ffc60ea54e45b313635/LICENSE.txt"
= "e64383304bc913b07a2e63d61c81354b996c01171357005f4a28957d4d889599"
= 75
= 73
= "FILE"
= "MALWARE_Linux.Backdoor.Exaramel"
= "MALWARE_Win.Backdoor.Exaramel"
strings:
$s1 = "vendor/golang_org/x/crypto/" ascii
$s2 = "vendor/golang_org/x/net/http2" ascii
$s3 = "vendor/golang_org/x/text/unicode" ascii
$s4 = "vendor/golang_org/x/text/transform" ascii
$s5 = "config.json" ascii
$cmd1 = "App.Update" ascii
$cmd2 = "App.Delete" ascii
$cmd3 = "App.SetProxy" ascii
$cmd4 = "App.SetServer" ascii
$cmd5 = "App.SetTimeout" ascii
$cmd6 = "IO.WriteFile" ascii
$cmd7 = "IO.ReadFile" ascii
$cmd8 = "OS.ShellExecute" ascii
$cmd9 = "awk 'match($0, /(upstart|systemd|sysvinit)/){ print substr($0, RSTART, RLENGTH);exit;" ascii
$ws1 = "/commands/@slp" wide
$ws2 = "/commands/cmd" wide
$ws3 = "/settings/proxy/@password" wide
$ws4 = "/settings/servers/server[@current='true']" wide
$ws5 = "/settings/servers/server/@current[text()='true']" wide
$ws6 = "/settings/servers/server[text()='%s']/@current" wide
$ws7 = "/settings/servers/server[%d]" wide
$ws8 = "/settings/storage" wide
$ws9 = "/settings/check" wide
$ws10 = "/settings/interval" wide
$ws11 = "report.txt" wide
$ws12 = "stg%02d.cab" ascii
$ws13 = "urlmon.dll" ascii
$ws14 = "ReportDir" ascii
condition:
( uint16( 0 ) == 0x457f and ( all of ( $s* ) and 6 of ( $cmd* ) ) ) or ( uint16( 0 ) == 0x5a4d and 12 of ( $ws* ) )
}
Strings (28 patterns)
| Identifier | Type | Value | Modifiers |
|---|---|---|---|
| $s1 | text | "vendor/golang_org/x/crypto/" | ascii |
| $s2 | text | "vendor/golang_org/x/net/http2" | ascii |
| $s3 | text | "vendor/golang_org/x/text/unicode" | ascii |
| $s4 | text | "vendor/golang_org/x/text/transform" | ascii |
| $s5 | text | "config.json" | ascii |
| $cmd1 | text | "App.Update" | ascii |
| $cmd2 | text | "App.Delete" | ascii |
| $cmd3 | text | "App.SetProxy" | ascii |
| $cmd4 | text | "App.SetServer" | ascii |
| $cmd5 | text | "App.SetTimeout" | ascii |
| $cmd6 | text | "IO.WriteFile" | ascii |
| $cmd7 | text | "IO.ReadFile" | ascii |
| $cmd8 | text | "OS.ShellExecute" | ascii |
| $cmd9 | text | "awk 'match($0, /(upstart|systemd|sysvinit)/){ print substr($0, RSTART, RLENGTH);exit;" | ascii |
| $ws1 | text | "/commands/@slp" | wide |
| $ws2 | text | "/commands/cmd" | wide |
| $ws3 | text | "/settings/proxy/@password" | wide |
| $ws4 | text | "/settings/servers/server[@current='true']" | wide |
| $ws5 | text | "/settings/servers/server/@current[text()='true']" | wide |
| $ws6 | text | "/settings/servers/server[text()='%s']/@current" | wide |
| $ws7 | text | "/settings/servers/server[%d]" | wide |
| $ws8 | text | "/settings/storage" | wide |
| $ws9 | text | "/settings/check" | wide |
| $ws10 | text | "/settings/interval" | wide |
| $ws11 | text | "report.txt" | wide |
| $ws12 | text | "stg%02d.cab" | ascii |
| $ws13 | text | "urlmon.dll" | ascii |
| $ws14 | text | "ReportDir" | ascii |
Condition
( uint16( 0 ) == 0x457f and ( all of ( $s* ) and 6 of ( $cmd* ) ) ) or ( uint16( 0 ) == 0x5a4d and 12 of ( $ws* ) )In plain words (Heuristic)
- The file must start with “MZ” — a Windows executable (PE).
- All patterns in ( $s* ) must match.
- At least 6 patterns in ( $cmd* ) must match.
- At least 12 patterns in ( $ws* ) 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.
References
Licence & attribution
Author: ditekSHen
Source repository: ditekSHen detection @ e76c93dcde
Licence: BSD 2-Clause License (repository licence)
Copyright notice: Copyright 2021 by ditekSHen (https://github.com/ditekshen/detection).
Mirrored via YARA Forge 20260927, which prefixes rule names with the source and adds normalised meta fields.
Rule id: 014f10f3-4502-5719-93f6-4b2940f53876
Metadata
| clamav_sig1 | MALWARE_Linux.Backdoor.Exaramel |
|---|---|
| clamav_sig2 | MALWARE_Win.Backdoor.Exaramel |
Tags:FILE
Related rules
- MalwareMalpedia signator rules· Felix Bilstein - yara-signator at cocacoding dot com· 2026-05-04
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO (composed from 4 saparate rules by Florian R…· 2021-02-15
- APT / threat actorSignature Base (Florian Roth / Nextron)· FR/ANSSI/SDO· 2021-02-15