Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Arile! Scopri di più
JavaScript non vive solo nei browser. In ambiente Windows, la sua implementazione JScript gira nel Windows Script Host (WSH) e si integra con il Component Object Model, le pagine HTA di Internet Explorer e decine di componenti di sistema. Su macOS, JavaScript for Automation (JXA) è uno dei soli due linguaggi supportati dall'Open Scripting Architecture di Apple, capace di controllare applicazioni, interagire con il kernel e accedere alle API interne tramite osascript e il framework OSAKit. Su Linux, Node.js trasforma JavaScript in un linguaggio server-side completo, spesso presente su web server e ambienti CI/CD.
La tecnica ricade nella tattica Execution (TA0002): l'avversario esegue codice malevolo su un sistema locale o remoto, spesso combinando l'esecuzione con tecniche di altre fasi della kill chain — esfiltrazione, movimento laterale, persistenza. I numeri confermano la pervasività: 25 gruppi APT documentati, 32 software che sfruttano JS in qualche forma, 5 campagne tracciate e 4 mitigazioni raccomandate. Dalla distribuzione di ransomware via file .js in archivi ZIP protetti da password, fino al credential harvesting con script iniettati in pagine web bancarie, JavaScript offre agli attaccanti un vettore di esecuzione cross-platform, text-based e facilmente offuscabile che continua ad essere tra i più abusati nel panorama delle minacce moderne.
La simulazione dell'esecuzione JavaScript malevola in laboratorio copre tre superfici d'attacco distinte: Windows Script Host, macOS JXA e Node.js su Linux. Ciascuna richiede un approccio specifico.
Windows — WSH e HTA
Il punto di partenza è il classico dropper via wscript.exe. Crea un file .js che istanzia un oggetto WScript.Shell e invoca un comando arbitrario. In laboratorio si può testare con un semplice callback:
wscript.exe /e:JScript C:\lab\payload.js
Per simulare la catena d'attacco documentata in numerosi gruppi — dove il JS viene scaricato ed eseguito da un file Office o HTA — si può costruire un file HTA con blocco <script language="JScript"> che esegue ActiveXObject("WScript.Shell").Run(...). L'esecuzione avviene tramite:
mshta.exe C:\lab\dropper.hta
Per replicare scenari di offuscamento, lo strumento CactusTorch (open source) genera payload JScript che deserializzano assembly .NET in memoria, una tecnica usata da diversi malware documentati. Un'alternativa per generare shellcode eseguibile via JScript è Donut (open source), che supporta output in formato JScript e JavaScript.
Per testare l'efficacia delle regole ASR, abilita la modalità audit prima di passare al block:
Set-MpPreference -AttackSurfaceReductionRules_Ids D3E037E1-3EB8-44C8-A917-57927947596D -AttackSurfaceReductionRules_Actions AuditMode
Questa GUID corrisponde alla regola ASR che impedisce a JavaScript e VBScript di lanciare contenuto scaricato.
macOS — JXA
JavaScript for Automation si testa tramite osascript con il flag -l JavaScript:
osascript -l JavaScript -e 'ObjC.import("Cocoa"); $.NSLog($.NSProcessInfo.processInfo.environment)'
Questo comando legge le variabili d'ambiente del processo corrente tramite bridge Objective-C, dimostrando l'accesso alle API Apple da JXA. Per simulare la compilazione di uno script persistente:
osacompile -l JavaScript -o /tmp/lab_agent.scpt /tmp/payload.js
L'output compilato può essere inserito in un LaunchAgent per testare la persistenza.
Linux — Node.js
La simulazione di web shell JavaScript prevede il deploy di un semplice server Node.js che esegue comandi ricevuti via HTTP. Framework come Caldera (open source, sviluppato da MITRE) includono ability specifiche per T1059.007 che automatizzano l'intera catena. In alternativa, Atomic Red Team (open source) fornisce test atomici pronti per questa sotto-tecnica, eseguibili con il modulo PowerShell Invoke-AtomicTest o in ambiente Linux.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo