Malspark

Benchmark

Latrodectus score: iteration 2, default model

Iteration 2 on the default model, scored key by key against the human report.

Default model (Qwen3.6-35B-A3B on ik_llama.cpp, with a 1 GiB prompt cache; iteration 1 used the 8 GiB default), dev @ 39b07c65, default profile, mock sandbox (nothing executed). The method is exactly as in the benchmark page and the iteration-1 score: 57 core items of K1–K10 (K1.1 split), build items as consistency checks only, chain and later items not scored. partly (body) = the body states part of the item or states it with the wrong purpose; partly (appendix) = the value is printed only in Appendix A › Floss: strings. A behaviour that a string in the appendix only hints at is missed. Human sources: B Bitsight (names this hash), E Elastic, P Proofpoint.

Totals (iteration 1 in brackets)

GroupItemsFoundPartly (body)Partly (appendix)MissedWrong
K1 identity53 (3)1 (1)0 (0)1 (1)0 (0)
K2 execution flow60 (0)4 (4)0 (0)2 (2)0 (0)
K3 anti-analysis70 (0)3 (3)0 (0)4 (4)0 (0)
K4 identifiers31 (1)1 (1)1 (1)0 (0)0 (0)
K5 persistence30 (0)3 (2)0 (1)0 (0)0 (0)
K6 C273 (2)1 (1)1 (2)2 (2)0 (0)
K9 IOCs83 (2)2 (1)3 (5)0 (0)0 (0)
Main (K1–K6, K9)3910 (8)15 (13)5 (9)9 (9)0 (0)
K7 commands110 (0)4 (6)0 (0)7 (5)0 (0)
K8 discovery11 (1)0 (0)0 (0)0 (0)0 (0)
K10 ATT&CK61 (3)1 (1)0 (0)4 (2)0 (0)
Depth (K7, K8, K10)182 (4)5 (7)0 (0)11 (7)0 (0)
All core5712 (12)20 (20)5 (9)20 (16)0 (0)

In the baseline's four columns: 12 found / 25 partly / 20 missed / 0 wrong (iteration 1: 12 / 29 / 16 / 0; baseline 3 / 7 / 46 / 1). Discounting appendix-only items: 12 / 20 / 25 / 0 (iteration 1: 12 / 20 / 25 / 0).

Item by item

K1

#ScoreMalspark (quoted)Human source
K1.1a familyfound"Family: Latrodectus (high confidence, 0.90, stated by the judge) [ev_0011]"B intro
K1.1b loaderfound"a malicious DLL loader identified as part of the Latrodectus family"; "Category: Trojan/Loader"B intro
K1.2 IcedID linkmissedfiles/bp.dat named in §5.8 only as a .dat filenameB intro; P, E
K1.4 x64 DLL; arch checkpartly (body)§2 "Type · pe, x86-64, DLL". No architecture checkB System architecture check
K1.5 four exports, one addressfound§7 "All 4 exports share one address, 0x3ce4."E

K2

#ScoreMalsparkSource
K2.1 APIs by hashpartly (body)§5.2 capa rows "resolve function by parsing PE exports", "hash data with CRC32"; §5.1 "imports only kernel32.dll and user32.dll …, limiting its direct API surface". "By hash" never saidB Windows API resolution
K2.2 abort on failed checkmissed—B Anti analysis
K2.3 mutexmissedCreateMutexW only in §7 imports; runnung only in the appendixB Mutex
K2.4 install, then persistpartly (body)§4 step 2 "establishes persistence by creating scheduled tasks (LogonTrigger) and modifying registry Run keys". No copy stepB Persistence
K2.5 register, then command looppartly (body)§4 step 3 "communicates with command-and-control servers via HTTP POST requests, sending collected system data". No loopB Communications protocol
K2.6 update_data.dat for new C2spartly (body)§5.8 ""\update_data.dat" … suggesting it may drop or execute additional payloads" — named, purpose wrongB The update data .dat file

K3

#ScoreMalsparkSource
K3.1 PEB BeingDebuggedpartly (body)§5.2 capa row "PEB access · B0001.019"; §7 "Debugger Detection::Process Environment Block"B Debugger check
K3.2 process countmissed—B
K3.3 architecture / WOW64missed—B, E
K3.4 MAC checkmissed—B
K3.5 PEB walk + CRC32 namespartly (body)§5.2 "capa identifies capabilities including PEB access, RC4 encryption, CRC32 hashing"; §4 step 4 reads CRC32 as obfuscationB
K3.6 string encryptionpartly (body)§5.1 "Despite the absence of a traditional packer, the binary employs significant obfuscation … Emulated decoding routines recovered 81 strings". Scheme given as stackstrings/RC4, not a rolling XORB Strings decryption; E
K3.7 self-deletion via ADSmissed:wtfbbq only in the appendixE Self-deletion

K4–K6

#ScoreMalsparkSource
K4.1 bot IDpartly (appendix)%04X%04X%04X%04X%08X%04X only in Appendix AB Bot ID
K4.2 group → FNV-1apartly (body)§5.2 capa row "hash data using fnv"; Littlehw only in the appendixB Group and Group ID
K4.4 two encrypted C2sfound§5.7 "The sample contains strings indicating communication with two C2 endpoints: hxxps://skinnyjeanso[.]com/live/ and hxxps://titnovacrion[.]top/live/"; §5.1 "Emulated decoding routines recovered 81 strings, including URLs for command-and-control"B C2 decryption
K5.1 Custom_update\Update_%x.dllpartly (body)§5.8 "references a "Custom_update" routine" — the folder named, as a routine; Update_%x only in the appendixB Persistence
K5.2 task Updater, COM, at logonpartly (body)§4 "creating scheduled tasks (LogonTrigger)"; §5.3 "Scheduled Tasks (LogonTrigger)". Updater only in the appendix; COM not said; T1053.005 no longer publishedB Persistence
K5.3 update_data.dat holds new C2 URLspartly (body)named in §5.6/§5.8, purpose "drop or execute additional payloads"B
K6.1 HTTPS POST /live/found§5.2 "C2 communication is structured around HTTP POST requests to URLs such as hxxps://skinnyjeanso[.]com/live/"; §5.7 channel tableB
K6.2 User-Agentfound (iteration 1: appendix)§5.3 "User-Agent · Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Tob 1.1)"; §5.7 "spoofs the User-Agent as Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Tob 1.1)"B
K6.3 RC4 then base64partly (body)§1 "obfuscating data with RC4 encryption"; §5.3 "Encryption · RC4 PRGA"; but the §5.7 channel table says "Encryption · None". Base64 not stated; key 12345 only in the appendixB
K6.4 beacon intervalmissed—B
K6.5 beacon formatfound§5.7 channel table quotes counter=%d&type=%d&guid=%s&os=%d&arch=%d&username=%s&group=%lu&ver=%d.%d&up=%d&direction=%s; registration additions only in the appendixB Beacon data
K6.6 beacon types 1–5missed—B
K6.7 URLS/CLEARURL/COMMAND/ERRORpartly (appendix)only in the appendix; §5.6 says only "a 'stiller' parameter and a 'net_config_ws' parameter, likely for configuration or specific command execution"B

K7–K10

  • K7 commands. partly (body): 4 (the recon set in §5.5/§5.6, not tied to a C2 command), 12 and 13 (§5.6 "references … '.exe' and '.dll' files, suggesting it may drop or execute additional payloads"; §1 rundll32), 18 (files/bp.dat named as a .dat file). missed: 2, 3 (no process list in the body this time), 14, 15 (no self-update sentence this time), 17, 19, 20.
  • K8 discovery: found. §5.5 lists net group "Domain Admins" /domain, nltest /domain_trusts and /all_trusts, net view /all /domain and /all, ipconfig /all, whoami /groups, the SecurityCenter2 WMI query and net config workstation. systeminfo is in §1; the ifconfig.me lookup is missing.
  • K9 IOCs. found: own hashes; /live/; the User-Agent (§5.3, §5.7). partly (body): Custom_update (as a "routine"), update_data.dat. partly (appendix): mutex runnung, Update_%x, task Updater.
  • K10 ATT&CK. found: T1027 (published; RC4/stackstrings). partly: T1218.011 (T1218 only in §10.3 and §11 for rundll32, not published). missed: T1055, T1053.005 and T1059.003 (both found in iteration 1; the static analyst claimed T1082, T1071, T1027, T1014 and T1059.004 instead), T1070.004.
  • Build consistency. skinnyjeanso[.]com, titnovacrion[.]top on B's list of 47 (now in §9 and /iocs); Littlehw and 12345 still only in the appendix — consistent.
  • K11. The drafts are the hash/imphash YARA with the two C2 domains as strings (2 of them) and two Suricata DNS alerts for the domains. None of the decoded host strings (UA, runnung, Custom_update) is a draft string.

IOC recall (K9, 8 core values)

  • Published (/iocs and §9): 1 of 8 (the sample's hashes). /iocs and §9 now also publish the two C2 domains (source judge), which iteration 1 exported in STIX only.
  • Stated in the body: 5 of 8 (hashes, /live/, UA, Custom_update, update_data.dat) — iteration 1: 3.
  • Present anywhere including the appendix: 8 of 8.
  • The host-identifier section that iteration 2 added for exactly these values is missing: "report section 'host_identifiers' is missing: its answer reached the output cap of 8192 tokens and was cut off" (§13).

Reverse direction: claims no human report supports

Claim (quoted)AssessmentHow we know
"establishes persistence by loading a secondary DLL via rundll32.exe, a technique consistent with DLL side-loading" (§1, summary)contradictedB, E: persistence is the Updater task; rundll32 is how the DLL and command 13's payloads run
"modifying registry Run keys, targeting Startup and Personal shell folders"; "to place shortcuts or executables in the user's Startup directory"; judge "registry run keys"contradictedB, E: the task only; the Shell Folders values are E's configurable install location (K5.5)
T1014 Rootkit published ("checking for the presence of specific security products and potentially loading DLLs from non-standard locations")contradictedno report describes rootkit behaviour; the AV query is discovery (command 4)
T1059.004 Unix Shell claimed at 0.90 (not published; attck.platform_mismatch caught it)wrong, caughtWindows DLL
§5.9 "Ransomware behaviour" — encryption scheme "RC4 · stream · per-file key no"unsupportednothing encrypts files; RC4 is the C2 traffic (B)
§5.7 channel "Encryption · None"contradictedB: RC4-encrypted, base64-encoded body; the report's own §1 and §5.3 say RC4
"exfiltrates collected data" (§5.6, §12.3); "prevent further compromise and data exfiltration"unsupported as framedB: the recon results answer command 4; a loader
"attempts to evade detection by checking for security products"contradicted (purpose)B: discovery
judge "The presence of obfuscation and packing"contradicted (packing)the report's own §5.1: "no packer signatures", .data 6.48
§5.1 "The sample does not exhibit persistence mechanisms in this run [ev_0009]"self-contradiction§4 and §5.4 state persistence
T1012 for the Shell Folders registry read (§10.3, §11)correct but newreading Shell Folders is a registry query
Content-Type: application/x-www-form-urlencoded; "does not import WinHTTP or WinINet"correct but newdecoded strings; K3.5
Severity Criticalnew (judgement)—

Nine contradicted or unsupported (iteration 1: eight), one wrong technique caught by the platform.

Edit on GitHub

On this page