Scope statement: this analysis covers a single protected sample (SHA-256 in §1). Findings describe what was observed in this binary; they do not imply that all Everest deployments share identical implementation details. Family-level claims are restricted to indicators flagged as Family in §12.
Reading convention: the markers
**Observed:**,**Inferred:**, and**Hypothesis (not demonstrated):**are used throughout this brief to separate facts read directly from the binary from analytical extrapolation.
1. Executive Summary
| Family | Self-identified as EVEREST (via .everest extension, EVERESTRANSOMWARE.txt note filename, "Greetings from the Everest team" salutation, everestaf@onionmail.org contact, blog onion URL) |
| Sample variant | Per-deployment build (note in <Module>.smethod_5 carries a hard-coded victim salutation; RSA-1024 public key in <Module>.smethod_19 is sample-unique) |
| Platform | Windows .NET 4.0 (PE32 i386 managed, ConfuserEx-protected) |
| Builder fingerprint | ConfuserEx 1.x with rename + constants + anti-tamper + compressor presets, watermark stripped (DIE: "Modified managed EP + Int confusion + Short names + Bad .cctor format") |
| Encryption | AES-128-CBC PKCS#7 (small files) / AES-128-CBC NoPadding intermittent (>10 MB), key+IV derived via PBKDF2-HMACSHA1 from a 32-byte ASCII printable seed wrapped with RSA-1024 PKCS#1 v1.5 |
| Concurrency | 3 background worker threads (anti-RE/RE-tool kill loop 4 s, service+process kill loop 15 s, memory-pig kill loop 2.5 s) plus the main thread |
| Discovery | 5 LAN-enumeration sources (net view, NetDfsEnum, WNetEnumResource, WMI Win32_Share, WMI Win32_NetworkConnection + Win32_MappedLogicalDisk); ARP-cache parsing |
| Pre-encryption operations | Wake-On-LAN UDP magic packet broadcast (ports 7 and 9), mountvol.exe of unlettered volumes, Restart Manager force-release of file handles, process self-DACL deny-Everyone |
| Cryptographic primitives | RSA-1024 PKCS#1 v1.5 (declared RSACryptoServiceProvider(4096) but FromXmlString overrides with a 128-byte modulus); AES-128-CBC (declared KeySize=256 but Key=byte[16] overrides); PBKDF2-HMACSHA1 with static 8-byte salt and 1000 iterations; System.Random for the 32-byte ASCII seed; same Key+IV reused for every file in one run |
| Exfiltration | The note text claims ~1 TB exfiltration. No exfiltration code is present in this binary (no socket/HTTP-POST/WinHTTP/Ws2_32 imports). The claim is text-only |
| Recovery (operator-side) | RSA-wrapped per-sample seed is persisted in HKCU\Software\AppName\PublicKey and inside the dropped note |
| Recovery (victim-side) | The seed is generated by System.Random (boot-tick-seeded by default) and the PBKDF2 salt is static — both are observed facts. Whether either creates an exploitable recovery path against an unknown private RSA key is not demonstrated in this analysis |
| Sample SHA-256 | 1df92bf4c967297d8a39fc3f619a56702ee96d5cf9196b8e1d5b3654746c6514 |
| Onion blog | ransomocmou6mnbquqz44ewosbkjk3o5qjsl3orawojexfook2j7esad.onion |
everestaf@onionmail.org |
2. Notable Observations
2.1 Bespoke binary per engagement
Observed: the decoded note in <Module>.smethod_5 begins with "Dear <name>," where the name is a hard-coded literal embedded in the encrypted UserStrings heap. The RSA public key in <Module>.smethod_19 (modulus listed in §3) is also sample-unique. Both items are part of the same build.
Inferred — operational implication: blocking by SHA-256 alone is insufficient for prevention. Threat hunting must rely on the structural and behavioural artefacts that are stable across builds (mutex GUID format, extension, note filename, command sequences, ConfuserEx fingerprint). The RSA modulus and the salutation string are pivots for the specific sample, not for the family at large.
2.2 Misleading crypto declarations
Observed: the code declares cryptographic primitives at twice the strength they actually use.
| Declared in source | Actual at runtime | Cause |
|---|---|---|
new RSACryptoServiceProvider(4096) |
RSA-1024 | FromXmlString(<XML>) overrides the constructor's keysize with the embedded 128-byte modulus |
aes.KeySize = 256 (set first) |
AES-128 | aes.Key = byte[16] setter (called second) silently downgrades KeySize to 128 |
The runtime values are 1024-bit RSA and 128-bit AES regardless of the constructor arguments. This is a property of how RSACryptoServiceProvider.FromXmlString and AesCryptoServiceProvider.Key setters behave when called after the size declaration.
2.2.1 Cryptographic weakness inventory — three-tier separation
This table separates observed weakness, theoretical security impact, and practical exploit demonstrated in this analysis. The third column prevents misreading "weak primitive" as "decryptable".
| Weakness | Observed | Practical exploit demonstrated? |
|---|---|---|
| Declared RSA-4096 actually RSA-1024 | Yes — FromXmlString overrides keysize, modulus is 128 bytes |
No — 1024-bit factoring remains computationally infeasible without nation-state hardware |
| Declared AES-256 actually AES-128 | Yes — Key=byte[16] silently downgrades KeySize |
No — AES-128 is still cryptographically intact |
32-byte AES seed from System.Random |
Yes — Random.Next(33,127), default seed = Environment.TickCount at first instantiation |
No — would require: (a) tick-precision boot timestamp, (b) all 32 outputs reconstructible from one seed, (c) plus the RSA private key. Hypothesis only |
Static PBKDF2 salt 01 02 03 04 05 06 07 08 |
Yes — hard-coded in Program.Db |
No — static salt enables rainbow tables against passwords, but PBKDF2 input here is the 32-byte ASCII seed (already entropy-bearing); salt does not break the primitive |
| AES Key+IV reused across all files in one run | Yes — both static fields, set once per process lifetime | No — IV reuse with CBC weakens semantic security but does not yield plaintext recovery without same-prefix correlation across files; no exploit pipeline shown |
| RSA-1024 PKCS#1 v1.5 wrapping | Yes — block size 128 B, no OAEP | No — Bleichenbacher-style oracles would require operator-side decryption interaction (not in scope of victim-side analysis) |
2.3 PRNG choice for the seed
char c = (char) random.Next(33, 127); // System.Random
Observed: the 32-byte AES seed is generated by System.Random, not by RNGCryptoServiceProvider. System.Random is documented by Microsoft as not suitable for cryptographic use; the default seed is Environment.TickCount at first instantiation. The PBKDF2 salt used downstream is the static 8-byte sequence 01 02 03 04 05 06 07 08 (in Program.Db). The PBKDF2 iteration count is 1000.
Hypothesis (not demonstrated): if the boot tick can be reconstructed to ms precision from a captured Event Log on the victim host, the 32-byte seed sequence is in principle reproducible — but this would only recover the AES Key+IV from a chain of Random outputs, and the RSA-wrapped seed (the operator-side recovery token) remains untouched. No exploit chain end-to-end is provided.
2.4 Wake-On-LAN broadcast
Observed: WakeOnLan.SendMagicPacket(MAC, IP) constructs a magic packet (0xFF×6 + MAC×16 = 102 bytes) and broadcasts it on UDP ports 7 and 9 to the calculated subnet broadcast address (IP | ~mask, mask hard-coded 255.255.255.0). Targets are sourced from the local ARP cache via arp -a parsing in ArpParser.ParseArpTable.
Order in the spread sequence (observed):
1. arp -a parse → list of (IP, MAC) pairs
2. For each pair: WoL packet to (IP | ~mask) on UDP/7 and UDP/9 (synchronous loop, no rate limiting)
3. Then SMB enumeration begins (net view → NetDfsEnum → WNetEnumResource → WMI Win32_Share / Win32_NetworkConnection / Win32_MappedLogicalDisk)
4. Then net use \\<unc> per discovered share
Fan-out (observed): one call per ARP entry × 2 ports = 2 packets per host. No broadcast aggregation. Frequency is bounded by the loop's I/O throughput on Socket.SendTo, typically ms-scale per packet.
Timing relative to encryption (observed): invocation occurs in LanPropagation.DiscoverAndMountShares, which runs during EP setup before the encryption pass — approximately T-15 s before the first file destruction (see §4 Execution Timeline).
UDP/7 and UDP/9 outbound broadcast traffic with a 102-byte payload is a stable observable for this code path and a high-precision NDR/Zeek pivot.
2.5 Process self-protection via DACL
Observed: KZsyzkgZlDQw.UB() modifies the running process's security descriptor to insert an AccessDenied ACE for the well-known World SID (S-1-1-0):
RawSecurityDescriptor sd = GetKernelObjectSecurity(GetCurrentProcess(), DACL);
sd.DiscretionaryAcl.InsertAce(0,
new CommonAce(AceFlags.None, AceQualifier.AccessDenied,
accessMask: 0x1F0FFF, sid: WorldSid, ...));
SetKernelObjectSecurity(GetCurrentProcess(), DACL, sd);
Effect: standard user-mode termination paths (including common SYSTEM-context tooling such as taskkill /F) fail with Access Denied against this process. Termination requires re-acquiring WRITE_DAC rights on the handle (typically via SetSecurityInfo from the owner SID, or via a kernel-mode driver / SeDebugPrivilege flow that bypasses user-mode DACL evaluation). Modern EDR with kernel callbacks (PsSetCreateProcessNotifyRoutineEx, ObRegisterCallbacks) and SeTakeOwnershipPrivilege can defeat this; legacy AV and many response-tool kill chains do not attempt the DACL repair step. Strong anti-tamper, not absolute.
2.6 Lateral movement broadens the attack surface BEFORE encryption
Observed sequential operations during EP setup (before any file is encrypted):
Set-MpPreference -EnableControlledFolderAccess Disabled(Windows 10/11)Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocolnetsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yesnetsh advfirewall firewall set rule group="Network Discovery" new enable=Yessc config Dnscache start= auto(and 4 other discovery services), thenServiceController.Startreg ADD ...\LongPathsEnabled = 1reg ADD ...\LocalAccountTokenFilterPolicy = 1reg ADD ...\EnableLinkedConnections = 1icacls "C:*" /grant Everyone:F /T /C /Q(and D:, Z:)- Mount unlettered volumes via
mountvol.exe
Inferred: the combination of SMB1 re-enabled + LocalAccountTokenFilterPolicy + EnableLinkedConnections opens the host significantly. Defenders monitoring registry/firewall change events have a clear pre-encryption signal window (typically 30–120 seconds, derived from the observed thread spin-up latency in §4).
2.7 Build-template residual artifact
Observed: the wallpaper file path string is \[WALLNAME].bmp — the literal [WALLNAME] placeholder is present as-is in the binary's strings; it is not substituted to a real filename at build or runtime. This is an unsubstituted template token.
Inferred: as a hunting indicator, the literal [WALLNAME] is observable in any sample where the same template artifact is preserved; this is a build-line artefact rather than a per-sample one.
2.8 Engineering anomalies
- The
gj8BnGv30aeJ.Containscheck at the EP uses a string returned byXXGcXDwCBmxY.tb()(WMIWin32_OperatingSystem.Caption + OSArchitecture). The presence of"10"is checked to gate the Defender CFA bypass, but"10"also matches Windows Server 2010, Windows 10, Windows 11, build numbers containing 10, etc. — an over-broad heuristic. - The ARP-derived RFC1918 filter (
huHoNzPzkzhd.Oc.StartsWith(huHoNzPzkzhd.Oc)) is buggy — theStartsWithargument is the same field, making the check tautological. Effect: all ARP-discovered hosts are processed, including non-RFC1918 (public IPs in the cache), broadening the WoL blast radius. - The string
[FULL]is the sentinel used inProgram.ExtensionWhitelist[0]to signal "no extension filter (encrypt all)";[auto]is the sentinel inProgram.DriveWhitelist[0]for "useDriveInfo.GetDrives()(all drives)". These are literal sentinels in the binary; their value is checked byEncryptor.EncryptAll.
3. Code-level fingerprints
Stable artefacts in the binary, observable across builds of this family:
| Marker | Where in binary |
|---|---|
Note filename literal EVERESTRANSOMWARE.txt |
<Module> getter, decoded via reflection |
File extension .everest |
Same |
Decoded note opens with "Greetings from the Everest team" |
<Module>.smethod_5 |
Contact email everestaf@onionmail.org |
Note text |
Onion blog URL ransomocmou6mnbquqz44ewosbkjk3o5qjsl3orawojexfook2j7esad.onion |
Note text |
Mutex Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 |
EP, before single-instance check |
Wallpaper template literal [WALLNAME].bmp (unsubstituted) |
<Module> getter |
| ConfuserEx 1.x watermark stripped (DIE: Modified managed EP + Int confusion + Short names + Bad .cctor format) | PE/metadata-level |
GZip+Base64+lookup string decryptor <Module>.m(string) |
Decryptor body |
Static PBKDF2 salt 01 02 03 04 05 06 07 08 |
Program.Db field initializer |
Random.Next(33,127) for 32-byte seed (not RNGCryptoServiceProvider) |
Helpers.GenSeed32Random |
| Wake-On-LAN UDP magic packet broadcast on ports 7 and 9 | WakeOnLan.SendMagicPacket |
Per-host file in C:\ProgramData\<MD5(ProcessorId+VolumeSerial)> listing scanned UNCs |
LanPropagation.DiscoverAndMountShares |
Note text typos: "trully", "singifically", "backups , etc. etc." |
Note body |
Sample-specific (non-stable across builds):
| Marker | Source |
|---|---|
| RSA-1024 public key (XML form, base64) | <Module>.smethod_19 |
| Hard-coded victim salutation in note | <Module>.smethod_5 |
The salutation token in this sample is redacted in this report. The binary contains the literal value as part of the encrypted strings heap.
3.1 CIS-exclusion list (factual content)
The geo-fence at the EP compares CultureInfo.InstalledUICulture.Name and CultureInfo.CurrentCulture.LCID against the following lists (decoded from <Module>.smethod_*):
| Type | Values |
|---|---|
| Cultures (string) | hy-AM, az-Cyrl-AZ, Cy-az-AZ, Lt-az-AZ, be-BY, kk-KZ, ky-KZ, ky-KZ, tt-RU, ba-RU, sah-RU, ru-RU, tg-Cyrl-TJ, uz-Cyrl-UZ, uk-UA, ka-GE |
| LCIDs (decimal) | 1049, 1067, 2092, 1068, 1059, 1079, 1087, 1064, 1090, 2115, 1091, 1058 |
On any match, Program.Exit() is called (Process.Kill + Environment.Exit(0)).
4. Execution Timeline (T0 → encryption)
Relative-order timeline (sequential dependencies in the observed code path; absolute timings are approximate, drawn from thread spin-up latency in a representative run).
T+0.0 Mutex Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 created (single-instance gate)
T+0.1 CIS culture/LCID check — Process.Kill + Environment.Exit(0) on match
T+0.5 Self-DACL deny-Everyone ACE inserted — KZsyzkgZlDQw.UB() (anti-tamper)
T+1.0 Set-MpPreference -EnableControlledFolderAccess Disabled (Win10/11 only)
T+2.0 Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol (DISM)
T+3.0 netsh advfirewall — File and Printer Sharing + Network Discovery enable
T+4.0 reg ADD LongPathsEnabled / LocalAccountTokenFilterPolicy / EnableLinkedConnections
T+5.0 sc config Dnscache + Fdrespub + FDPHost + SSDPSRV + UPnPHost (start=auto)
ServiceController.Start on each
T+6.0 icacls "C:*" /grant Everyone:F /T /C /Q (then D:*, Z:*)
T+7.0 mountvol.exe enumeration + mount of \\?\Volume{...} (unlettered volumes)
T+8.0 arp -a parsed by ArpParser.ParseArpTable [Discovery starts]
T+9.0 Wake-On-LAN UDP/7 + UDP/9 broadcast burst (per ARP entry × 2 ports)
T+10.0 Share enumeration — 5 sources in sequence:
net view → NetDfsEnum → WNetEnumResource → WMI Win32_Share
→ WMI Win32_NetworkConnection + Win32_MappedLogicalDisk
T+12.0 net use \\<unc> per discovered share (one-shot mount; failures silent)
Per-host UNC list persisted to C:\ProgramData\<MD5(ProcessorId+VolumeSerial)>
T+15.0 Restart Manager session opened — RmRegisterResources + RmGetList
(force-release of locked file handles)
T+16.0 Worker thread #1 spawn — RE-tool kill loop (4 s interval)
T+16.0 Worker thread #2 spawn — service+process kill loop (15 s interval)
T+16.0 Worker thread #3 spawn — memory-pig kill loop (>250 MB threshold, 2.5 s)
T+18.0 vssadmin Delete Shadows /all /quiet
OR (PowerShell path) Get-CimInstance Win32_ShadowCopy | Remove-CimInstance
T+18.5 Srclient!SRRemoveRestorePoint loop over all restore points
T+19.0 Anti-Raccine cleanup — IFEO entries, HKLM\SOFTWARE\Raccine,
HKCU\…\Run\Raccine Tray, scheduled task "Raccine Rules Updater",
taskkill Raccine.exe / RaccineSettings.exe
T+20.0 cmd.exe /c del /s /f /q against backup file patterns
(*.VHD, *.bak, *.bkf, etc.) on drives C-H
T+22.0 Wallpaper write to %TEMP%\[WALLNAME].bmp
Registry SetValue HKCU\Control Panel\Desktop\WallPaper
T+23.0 Encryption pass begins — Encryptor.EncryptAll
├ Per file: PBKDF2(seed, salt=Db, iter=1000) → AES-128 Key+IV
├ Files >10 MB: intermittent NoPadding chunked encryption
├ Files <10 MB: full PKCS#7 CBC pass
└ File renamed to <orig>.everest
T+N Note drop — EVERESTRANSOMWARE.txt in C:\ProgramData and Desktop
Registry write — HKCU\Software\AppName\PublicKey = <Base64 wrapped seed>
T+N+1 Self-delete — cmd.exe /C ping 127.0.0.7 -n 3 > Nul
& fsutil file setZeroData offset=0 length=<size> <path>
& Del /f /q <path>
Defender takeaway: the first three commands (T+1 → T+3) provide a 30+ second action window before any file is destroyed. The DACL ACE at T+0.5 means user-mode kill commands issued after that point will fail unless the responder re-acquires WRITE_DAC.
5. TTP Highlights for Defender Workflow
5.1 Pre-encryption indicators (high precision, low FP)
| Signal | Source | Time before file destruction |
|---|---|---|
Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 mutex creation |
EDR (Sysmon Event 17 / kernel ETW) | ~immediate |
Set-MpPreference -EnableControlledFolderAccess Disabled |
PowerShell ScriptBlockLogging (Event 4104) or Microsoft-Windows-PowerShell/Operational | T-30 to T-60 s |
Enable-WindowsOptionalFeature SMB1Protocol |
Same | T-30 to T-60 s |
netsh advfirewall ... new enable=Yes (group=Network Discovery) |
Sysmon Event 1 (process creation) | T-30 to T-60 s |
mountvol.exe invoked with \\?\Volume{...} in command line |
Sysmon Event 1 | T-25 s |
arp -a invoked from a non-shell parent |
Sysmon Event 1 | T-20 s |
| Outbound UDP/7 or UDP/9 broadcast (102-byte payload) | NetFlow / firewall logs | T-15 s |
vssadmin.exe Delete Shadows /all /quiet OR Remove-CimInstance on Win32_ShadowCopy |
Sysmon Event 1 / 4104 | T-10 s |
cmd.exe /c rd /s /q %SYSTEMDRIVE%\$Recycle.bin |
Sysmon Event 1 | T-5 s |
icacls "C:*" /grant Everyone:F /T /C /Q |
Sysmon Event 1 | T-3 s |
The first three events (CFA disable, SMB1 enable, netsh) provide a 30+ second action window for defenders.
5.2 During-encryption indicators
| Signal | Source |
|---|---|
cmd.exe /c del /s /f /q <pattern> for *.VHD, *.bak, etc. on multiple drives |
Sysmon Event 1 |
| Service stop wave (~100 services in ~30 s) | Service Control Manager Event 7036 (state changes) |
| Process termination wave matching DBs/AV/backup names | Sysmon Event 5 (process termination) |
File rename/create with .everest extension |
EDR file telemetry / FIM |
| Wallpaper update event | Sysmon Event 12 (registry SetValue on HKCU\Control Panel\Desktop\WallPaper) |
5.3 Post-encryption indicators
| Signal | Source |
|---|---|
EVERESTRANSOMWARE.txt file present in C:\ProgramData and on Desktop |
FIM / EDR scan |
\[WALLNAME].bmp file in %TEMP% |
FIM |
HKCU\Software\AppName\PublicKey exists with a Base64 DWORD blob (~684 chars) |
Registry telemetry |
C:\ProgramData\<32-hex-chars> file (no extension) containing UNC paths |
FIM |
cmd.exe /C ping 127.0.0.7 -n 3 > Nul & fsutil file setZeroData ... & Del /f /q ... |
Sysmon Event 1 |
6. MITRE ATT&CK Matrix
Consolidated mapping of techniques observed in this binary. Tactics not represented (Initial Access, Collection, Command and Control, Exfiltration as code) are listed for completeness.
| Tactic | Technique | ATT&CK ID | Notes |
|---|---|---|---|
| Initial Access | (out of scope) | — | Loader/initial vector not present in this binary |
| Execution | Command and Scripting Interpreter: PowerShell | T1059.001 | Set-MpPreference, Enable-WindowsOptionalFeature, Get-CimInstance |
| Execution | Command and Scripting Interpreter: Windows Cmd | T1059.003 | Multiple cmd.exe /c chains |
| Execution | Native API | T1106 | RmRegisterResources, SetKernelObjectSecurity, WMI |
| Persistence | Modify Registry | T1112 | HKCU\Software\AppName\PublicKey write (recovery token, not autorun) |
| Defense Evasion | Impair Defenses: Disable or Modify Tools | T1562.001 | CFA disable; service kill loop targets AV/EDR processes |
| Defense Evasion | Modify Registry | T1112 | LongPathsEnabled, LocalAccountTokenFilterPolicy, EnableLinkedConnections |
| Defense Evasion | Hide Artifacts | T1564 | DACL self-protection — process inaccessible to standard kill paths |
| Defense Evasion | Modify Authentication Process | T1556 | LocalAccountTokenFilterPolicy = 1 |
| Defense Evasion | Indicator Removal: File Deletion | T1070.004 | Self-delete chain: fsutil setZeroData + Del /f /q |
| Defense Evasion | Obfuscated Files or Information | T1027 | ConfuserEx — string encryption, anti-tamper, constants module |
| Discovery | System Network Configuration Discovery | T1016 | arp -a parsing |
| Discovery | System Network Connections Discovery | T1049 | net view, WNetEnumResource |
| Discovery | Remote System Discovery | T1018 | NetDfsEnum, ARP-derived target list |
| Discovery | Network Share Discovery | T1135 | WMI Win32_Share, Win32_NetworkConnection, Win32_MappedLogicalDisk |
| Discovery | System Information Discovery | T1082 | WMI Win32_OperatingSystem (caption + arch) for OS gating |
| Discovery | System Location Discovery | T1614.001 | CultureInfo.InstalledUICulture, LCID check (CIS exclusion) |
| Lateral Movement | Remote Services: SMB/Windows Admin Shares | T1021.002 | net use \\<unc> per discovered share |
| Lateral Movement | (custom) Wake-On-LAN assist | — | Non-standard — no canonical ATT&CK technique. Tracked as pre-spread enabler |
| Collection | (out of scope) | — | No collection routine in this binary |
| Command and Control | (out of scope) | — | No C2 channel observed |
| Exfiltration | (claimed in note text only) | — | Note states ~1 TB exfil; no exfil code in binary |
| Impact | Data Encrypted for Impact | T1486 | AES-128-CBC pass over file content |
| Impact | Inhibit System Recovery | T1490 | vssadmin Delete Shadows, SRRemoveRestorePoint, backup file deletion |
| Impact | Service Stop | T1489 | Worker thread #2 — service+process kill loop |
| Impact | Defacement: Internal | T1491.001 | Wallpaper change to [WALLNAME].bmp |
| Impact | File and Directory Permissions Modification | T1222.001 | icacls "C:*" /grant Everyone:F /T /C /Q (and D:, Z:) |
7. Hunting Queries
7.1 Splunk SPL — Pre-encryption window detection
index=sysmon EventCode=1
| where (
(CommandLine="*Set-MpPreference*EnableControlledFolderAccess Disabled*")
OR (CommandLine="*Enable-WindowsOptionalFeature*SMB1Protocol*")
OR (CommandLine="*advfirewall*Network Discovery*new enable=Yes*")
OR (CommandLine="*advfirewall*File and Printer Sharing*new enable=Yes*")
OR (CommandLine="*mountvol*\\\\?\\Volume{*")
)
| stats count, values(CommandLine) by host, ParentImage
| where count >= 3
Interpretation: any host running ≥3 of these enabling commands within a sliding window is in the pre-encryption setup phase of an Everest-style ransomware (consistent with observed Everest tradecraft; not exclusive to this family).
7.2 Splunk SPL — Post-incident DFIR pivot
index=sysmon EventCode=11 (TargetFilename="*\\EVERESTRANSOMWARE.txt" OR TargetFilename="*.everest")
| eval first_drop = if(TargetFilename LIKE "%\\EVERESTRANSOMWARE.txt", _time, null)
| stats min(first_drop) as note_drop_time, count(eval(TargetFilename LIKE "%.everest")) as encrypted_count by host
7.3 KQL — Microsoft Defender Advanced Hunting
DeviceProcessEvents
| where Timestamp > ago(7d)
| where (
(ProcessCommandLine has "Set-MpPreference" and ProcessCommandLine has "EnableControlledFolderAccess" and ProcessCommandLine has "Disabled")
or (ProcessCommandLine has "SMB1Protocol")
or (ProcessCommandLine has "advfirewall" and ProcessCommandLine has "Network Discovery")
or (ProcessCommandLine has "mountvol" and ProcessCommandLine has "Volume{")
or (ProcessCommandLine has "icacls" and ProcessCommandLine has "Everyone:F" and ProcessCommandLine has "/T /C /Q")
)
| summarize Pre_Indicators = make_set(ProcessCommandLine), Indicator_Count = dcount(ProcessCommandLine)
by DeviceName, bin(Timestamp, 5m)
| where Indicator_Count >= 3
| order by Timestamp desc
7.4 KQL — DACL self-protection signal
DeviceProcessEvents
| where ProcessCommandLine has "advapi32" and ProcessCommandLine has "SetKernelObjectSecurity"
| join kind=inner DeviceFileEvents on DeviceName, FileName
| where FileName endswith ".everest"
(Note: SetKernelObjectSecurity invocation is rarely triggered from user-mode binaries; this is a high-confidence signal when correlated with .everest write events.)
7.5 Outbound WoL detection (NetFlow / Zeek)
udp.dst_port == 7 or udp.dst_port == 9
| filter packet_size between 102 and 144 # 102 = WoL payload; upper bound covers UDP/IP/Ethernet framing variation across captors
| filter dst_ip in (subnet broadcast list)
| group by src_ip
| where count(distinct dst_mac) >= 3 # multiple wake targets in short window
The exact size depends on what your capture stack reports: 102 (Zeek orig_bytes, application payload), 110 (UDP datagram = payload + 8-byte UDP header), ≥130 (IP packet), ≥144 (full Ethernet frame). Calibrate the range against a known-good WoL appliance trace before deploying.
8. Sigma Rules
title: EVEREST Ransomware Pre-Encryption Setup Sequence
id: c79e0a1c-9b8d-4f1f-9b41-f3a2e1d8f0b1
status: experimental
description: |
Detects the EVEREST ransomware pre-encryption configuration sequence based on
observed CFA disable, SMB1 re-enable, firewall opening, and mountvol.exe usage
occurring within a short window from the same parent process.
references:
- https://www.ransomlook.io/analyses
author: ransomlook.io
date: 2026/05/07
logsource:
product: windows
category: process_creation
detection:
selection_pwsh_cfa:
Image|endswith: '\powershell.exe'
CommandLine|contains|all:
- 'Set-MpPreference'
- 'EnableControlledFolderAccess'
- 'Disabled'
selection_pwsh_smb1:
Image|endswith: '\powershell.exe'
CommandLine|contains|all:
- 'Enable-WindowsOptionalFeature'
- 'SMB1Protocol'
selection_netsh:
Image|endswith: '\netsh.exe'
CommandLine|contains|all:
- 'advfirewall'
- 'new enable=Yes'
selection_mountvol:
Image|endswith: '\mountvol.exe'
CommandLine|contains: 'Volume{'
selection_icacls:
Image|endswith: '\icacls.exe'
CommandLine|contains|all:
- 'Everyone:F'
- '/T /C /Q'
condition: 3 of selection_*
falsepositives:
- Server hardening exercises that intentionally enable SMB1 (rare and policy-controlled)
- Penetration testing engagements
level: high
tags:
- attack.impact
- attack.t1486
- attack.t1490
- attack.t1489
- attack.t1562.001
---
title: EVEREST Ransomware Wake-On-LAN Pre-Spread
id: e1f2c3d4-5a6b-7c8d-9e0f-1a2b3c4d5e6f
status: experimental
description: |
Outbound UDP traffic to port 7 or 9 with a payload size consistent with a WoL
magic packet (102-byte application payload), preceding a wave of SMB
authentication or .everest file writes.
Note: the literal 102-byte figure is the application-layer WoL payload
(6 × 0xFF + 16 × MAC). Sensors may report sizes differently depending on
whether they count payload-only (102), UDP datagram with header (110),
IP packet (≥130), or full Ethernet frame (≥144). Tune the range to match
the local capture stack.
logsource:
product: zeek
service: conn
detection:
selection:
proto: 'udp'
resp_p:
- 7
- 9
orig_bytes|gte: 102
orig_bytes|lte: 144
condition: selection
falsepositives:
- Legitimate MDM/wake-on-LAN appliances (whitelist by source)
- Network monitoring tools using UDP echo (port 7) — rare in modern environments
level: medium
tags:
- attack.discovery
- attack.t1018
9. Detection Confidence Matrix
For each signal, Confidence = how strongly the observation indicates this build line; Evasion difficulty = how hard it would be for the operator to remove or relocate the indicator without breaking core functionality.
| Signal | Confidence | Evasion difficulty | Notes |
|---|---|---|---|
Mutex Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 |
High (this build) | Low | Trivial to randomize the GUID per build |
.everest file extension on encrypted output |
High | Low | Trivial to rename — but breaks ransom-note matching |
EVERESTRANSOMWARE.txt note filename |
High | Low | Trivial to rename — but signals brand |
| 3-of-N pre-encryption commands (CFA/SMB1/netsh/mountvol/icacls) | High | High | Operationally hard to remove without breaking spread/encrypt flow |
icacls "C:*" /grant Everyone:F /T /C /Q (multi-drive) |
High | Medium | Could be split into PowerShell Set-Acl, but the operational intent is detectable |
| Outbound UDP/7+9 broadcast, 102-byte payload | Medium | Medium | Distinctive in modern enterprise traffic; could be moved to TCP/RPC, but at engineering cost |
| WoL fan-out + ARP-derived target list | Medium | Medium | NDR/Zeek differentiator; survives most user-space evasions |
SetKernelObjectSecurity from a user-mode binary writing .everest |
High | High | Architectural to the DACL anti-tamper trick; removing it breaks self-protection |
HKCU\Software\AppName\PublicKey Base64 blob (~684 chars) |
High | Low | Trivial to relocate; high value as DFIR pivot if present |
[WALLNAME].bmp literal in %TEMP% |
Medium | Low | Build-template residue, easy to fix in next build |
| ConfuserEx DIE flags (Modified managed EP + Int confusion + Short names + Bad .cctor format) | Medium | Medium | Family-stable; ConfuserEx is widely shared, so confidence is build-level not family-level |
| 3 worker threads with 4 s / 15 s / 2.5 s loop intervals | Medium | Medium | Distinctive cadence; fingerprint via memory analysis |
Note typos "trully", "singifically", "backups , etc. etc." |
Medium | Low | Cross-campaign signature, low cost to fix |
Static PBKDF2 salt 01..08 |
High | Low | Constant in Program.Db, easy to swap — but signals lazy crypto integration |
arp -a parsed by a non-shell parent (managed binary) |
Medium | High | Required for ARP-driven WoL; removing it breaks the spread chain |
mountvol.exe \\?\Volume{...} from non-admin tooling context |
High | Medium | Required to access unlettered volumes |
10. Memory Artefacts (DFIR / live response)
Artefacts present in the running process's memory during or shortly after the encryption pass. These are valuable for live-response triage when the host is captured before self-delete completes.
| Artefact | Location | Lifetime | DFIR value |
|---|---|---|---|
| AES-128 Key (16 bytes) | Program.AesKey static field |
Process lifetime after first encryption call | Would permit decryption of files encrypted during the same process lifetime (Key+IV reused for all files in one run) |
| AES-128 IV (16 bytes) | Program.AesIv static field |
Process lifetime | Pair with Key above |
| 32-byte ASCII printable seed | Stack frame of Helpers.GenSeed32Random, then .NET string heap |
~seconds (until GC collects) | Pre-PBKDF2 input — equivalent identifier to the Key+IV pair |
| RSA public key XML blob | Managed string heap (loaded by FromXmlString) |
Process lifetime | Sample-pivot identifier (modulus extractable) |
| RSA-wrapped seed (Base64, ~684 chars) | Managed string heap, then written to registry | Process lifetime + persisted | Primary operator-side recovery token observed in this sample — also in HKCU\Software\AppName\PublicKey and the dropped note |
| Decoded UserStrings (note text, salutation, mutex GUID, blog URL, email, command lines) | Managed string heap, .NET string interning | Process lifetime | Cross-reference for cluster pivots and strings-based YARA |
Mutex handle Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 |
Kernel object, handle in process table | Process lifetime | Sysmon Event 17 / handle table dump |
| Worker thread stacks (kill-loop bodies) | 3 managed threads, no Thread.Name set (default worker IDs) |
Process lifetime | Stack-walk identifies the 4 s / 15 s / 2.5 s loops; useful for in-memory YARA |
| Restart Manager session handle | Kernel object | Brief — closed after RmGetList iteration | RmGetList output enumerable from RM session ID if captured live |
Encryptor.TargetPathList |
Managed list field | Process lifetime | Full list of UNC + local paths queued for encryption — identifies victims if captured pre-encryption |
Live-response priority: if the host can be paused or memory-imaged before Program.Exit(), recovering Program.AesKey + Program.AesIv would permit decryption of files encrypted during the same process lifetime, without the operator's RSA private key.
This recovery path is contingent on all of the following:
- the locker process is still resident, or a coherent full-memory dump is captured before self-delete completes;
- the static fields are not paged out (typical for active processes, but not guaranteed under memory pressure or VM-snapshot scenarios);
- the dump tool produces a consistent view of the managed heap (live-acquisition smear can corrupt byte[] fields).
In practice: prefer a frozen-state acquisition (hibernation file, paused VM snapshot, ETW-suspended live dump) over a running-process dump where possible.
11. Defender Priority Queue
P0 (immediate)
- Isolate the host showing the 3-thread fingerprint or any of the §5.1 commands.
- Block outbound UDP/7 and UDP/9 broadcast traffic at the edge (rare in modern environments).
- Snapshot memory of any host showing the mutex
Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5. Per §10, the AES Key+IV are derived in-process and held inProgram.AesKey/Program.AesIvstatic fields during the encryption pass. - Protect the registry value
HKCU\Software\AppName\PublicKeyfrom being wiped — it contains the RSA-wrapped seed, which is the primary operator-side recovery token observed in this sample (a duplicate copy is also embedded in the dropped note).
P1 (≤1 h)
- Scan domain for hosts with
EVERESTRANSOMWARE.txtinC:\ProgramData(FIM signal). - Audit
LongPathsEnabled,LocalAccountTokenFilterPolicy,EnableLinkedConnectionsregistry values across the AD — the locker re-enables these. Any host with these set to1unexpectedly is a survivor or in-progress victim. - Verify SMB1 status on all servers (
Get-SmbServerConfiguration | select EnableSMB1Protocol). Roll back if changed. - Pull Sysmon Event 17 for the mutex string across the SIEM window (mutex is created at the very first instructions of
Program.Main).
P2 (≤24 h)
- Hunt the
\[WALLNAME].bmpliteral in%TEMP%of all systems (the wallpaper artifact remains even after locker self-delete). - Reconstruct lateral movement: read
C:\ProgramData\<32-hex>files (filename = MD5 ofWin32_Processor.ProcessorId+Win32_LogicalDisk.VolumeSerialNumber). Each file contains the list of UNC paths added toEncryptor.TargetPathListfor that host. - Audit and restore Defender CFA configuration.
- Force credential rotation on impacted services (note text claims include "trusted representatives personal info" and "client risk levels" — claim is text-only but rotation is precautionary).
P3 (post-incident)
- Cross-reference RSA-1024 modulus against shared Everest IOC corpora to confirm operator-side key reuse (typical: per-victim, but worth verifying).
- The
System.Randomseed-recovery hypothesis (§2.3) is an analytical path, not an exploit pipeline. Pursuing it requires the boot timestamp to ms precision (Event LogMicrosoft-Windows-Kernel-General/12) and the captured registry/note pair and demonstrated equivalence between reconstructed seed and intercepted ciphertext. Out of scope for this brief.
12. Observables Summary
The Scope column indicates the granularity at which an indicator is expected to be stable. Use this for hunting automation: filter by Family indicators for cross-campaign sweeps, Build indicators to cluster builds, Sample indicators to confirm a specific binary.
| Type | Value | Scope | Confidence |
|---|---|---|---|
| SHA-256 (protected sample) | 1df92bf4c967297d8a39fc3f619a56702ee96d5cf9196b8e1d5b3654746c6514 |
Sample | High |
| MD5 (protected sample) | 0dd70c334507188714bae0af7229b379 |
Sample | High |
| SHA-256 (de4dot-cleaned x4) | b30b7911b256daeceb631dec923f83c0ef17f34eb46452d5ab32aab2540be361 |
Sample (analysis artefact, not a wild ITW indicator) | High |
Mutex GUID Global\7efc73f7-fda1-42d1-a4c5-8f1670bd08a5 |
literal | Build (per-build variation expected) | High |
| Onion blog URL | ransomocmou6mnbquqz44ewosbkjk3o5qjsl3orawojexfook2j7esad.onion |
Family (long-lived Everest blog) | High |
| Contact email | everestaf@onionmail.org |
Family (Everest-stable pattern) | High |
| File extension | .everest |
Family | High |
| Note filename | EVERESTRANSOMWARE.txt |
Family | High |
| Note salutation prefix | "Greetings from the Everest team" |
Family | High |
| Note typos | "trully", "singifically", "backups , etc. etc." |
Family (cross-campaign signature) | High |
| RSA pubkey modulus (Base64) | uByCMcH5MwQ1wXW3pKGb4eP8YVb3+d0Vrg243VI2f9jj00hM4CmRilFu+CrnNo/kZ/eMLOW13T/5RW1ono1c4uOtm6zDW/S229nc8eDjIEyqw9A6McuoVYYdW+lkm3u15pYG2uZBrv3MnAkQRllguCxnvvv+VT8K5rAHemyqVfc= |
Sample (per-victim pivot) | High |
| RSA pubkey exponent | AQAB (65537) |
Family | High |
| Registry persistence path | HKCU\Software\AppName\PublicKey |
Build | High |
| Wallpaper template literal | %TEMP%\[WALLNAME].bmp |
Build (template residue) | High |
| Spread-tracking file path | C:\ProgramData\<MD5(ProcessorId+VolumeSerial)> (no extension) |
Build (algorithm stable) | High |
| User-Agent (dead code, unreachable) | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ... Edge/17.17134 |
Sample | Low |
| WoL UDP ports | 7, 9 (broadcast, 102-byte payload) | Family (across .NET Everest builds) | Medium |
| WoL hardcoded subnet mask | 255.255.255.0 |
Family | Medium |
| ConfuserEx DIE flags | Modified managed EP + Int confusion + Short names + Bad .cctor format |
Build | Medium |
| Static PBKDF2 salt | 01 02 03 04 05 06 07 08 |
Family (build-stable across known builds) | High |
| Worker thread cadence | 4 s / 15 s / 2.5 s | Family | Medium |
| String decryptor signature | <Module>.m(string) — GZip + Base64 + lookup |
Family | High |
13. Conclusion
Observed facts about this sample:
- Self-identified as Everest via embedded strings (
.everestextension,EVERESTRANSOMWARE.txtnote filename,"Greetings from the Everest team"salutation,everestaf@onionmail.orgcontact, blog onion URL). - ConfuserEx 1.x (or compatible fork) protection with watermark stripped; runtime string decryption via
<Module>.m(string)(GZip+Base64+lookup). - Crypto stack as deployed: AES-128-CBC PKCS#7 (small files) and AES-128-CBC NoPadding chunked (>10 MB), key+IV from PBKDF2-HMACSHA1 with static 8-byte salt and 1000 iterations, seed from
System.Random.Next(33,127)for 32 bytes; the seed is wrapped with RSA-1024 PKCS#1 v1.5 using a sample-embedded public key. - Three concurrent worker threads: RE-tool kill (4 s), service+process kill (15 s), memory-pig kill at >250 MB threshold (2.5 s).
- Pre-encryption operations include CFA disable on Windows 10/11, SMB1 enable,
LongPathsEnabled=1,LocalAccountTokenFilterPolicy=1,EnableLinkedConnections=1, network-discovery services started,icaclsgrants Everyone full control on C:/D:/Z:,mountvol.exeenumerates and mounts\\?\Volume{...}. - LAN spread: ARP cache parsing → Wake-On-LAN UDP/7 + UDP/9 broadcast; share enumeration via
net view,NetDfsEnum,WNetEnumResource, WMIWin32_Share,Win32_NetworkConnection,Win32_MappedLogicalDisk;net use \\<unc>per discovered share; UNC list persisted toC:\ProgramData\<MD5(ProcessorId+VolumeSerial)>. - Process self-protection: own DACL is mutated with an AccessDenied ACE for the World SID — defeats standard user-mode termination paths.
- Anti-Raccine: deletion of IFEO entries,
HKLM\SOFTWARE\Raccine,HKCU\…\Run\Raccine Tray, scheduled taskRaccine Rules Updater, plustaskkillofRaccine.exe/RaccineSettings.exe. - Recovery inhibition:
vssadmin Delete Shadows /all /quiet(orGet-CimInstance Win32_ShadowCopy | Remove-CimInstance),Srclient!SRRemoveRestorePointfor every restore point,del /s /f /qagainst backup file patterns on drives c-h. - The note text contains the claim of ~1 TB exfiltration. No exfiltration code is present in the binary.
Inferred: the build line is consistent with observed Everest tradecraft. Family-level attribution is supported by the embedded strings; broader operator-cluster attribution is out of scope without corpus comparison.
Sample-unique items (not portable to other builds): the RSA-1024 modulus in <Module>.smethod_19 and the salutation string in <Module>.smethod_5. All other operational strings, the mutex GUID, the contact email and the onion URL appear in this sample as decoded literals; their portability across other Everest builds is not determined within this analysis.