{"id":1315,"date":"2026-11-11T15:00:00","date_gmt":"2026-11-11T14:00:00","guid":{"rendered":"https:\/\/remivernier.com\/?p=1315"},"modified":"2026-11-11T15:00:00","modified_gmt":"2026-11-11T14:00:00","slug":"silver-ticket-forger-ticket-service-maquette","status":"publish","type":"post","link":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/","title":{"rendered":"Silver ticket: forger un ticket de service sur maquette"},"content":{"rendered":"<h2>Un 4624 sans 4769<\/h2>\n<p>Sur srv01, le journal S\u00e9curit\u00e9 affiche un \u00e9v\u00e9nement 4624 tout \u00e0 fait banal: ouverture de session de type 3, package d&rsquo;authentification Kerberos, compte TESTLOCAL\\alice, adresse source 192.168.0.110. Sur les contr\u00f4leurs de domaine, nous ne trouvons pourtant aucun \u00e9v\u00e9nement 4769 correspondant \u00e0 une demande de ticket pour HTTP\/monsite.test.local dans ce cr\u00e9neau, et l&rsquo;\u00e9v\u00e9nement 4627 du serveur attribue \u00e0 alice une appartenance au groupe \u00ab Admins du domaine \u00bb qu&rsquo;elle n&rsquo;a jamais eue dans l&rsquo;annuaire.<\/p>\n<p>Ce d\u00e9calage entre ce que le serveur a accept\u00e9 et ce que le KDC a \u00e9mis est la signature d&rsquo;un silver ticket, r\u00e9f\u00e9renc\u00e9 chez MITRE sous la technique <a href=\"https:\/\/d3fend.mitre.org\/offensive-technique\/attack\/T1558.002\/\">T1558.002<\/a>: un ticket de service fabriqu\u00e9 de toutes pi\u00e8ces avec la cl\u00e9 du compte qui porte le SPN, sans jamais parler au KDC.<\/p>\n<p>La maquette reprend celle de l&rsquo;article sur <a href=\"https:\/\/remivernier.com\/index.php\/2018\/06\/24\/iis-kerberos\/\">la configuration de IIS pour Kerberos<\/a>, remise au go\u00fbt du jour:<\/p>\n<ul>\n<li>Domaine: test.local (TESTLOCAL), contr\u00f4leur de domaine dc01<\/li>\n<li>Serveur IIS: srv01, site monsite.test.local, pool d&rsquo;application ex\u00e9cut\u00e9 par svc.monsite@test.local qui porte le SPN HTTP\/monsite.test.local<\/li>\n<li>Client: cli01, utilisateur alice@test.local<\/li>\n<li>Outils: klist, Wireshark, ktpass et PowerShell<\/li>\n<\/ul>\n<p>Je voulais donner des exemples et des commandes \u00e0 d\u00e9rouler sur la maquette.<\/p>\n<p>Tout ce qui suit se rejoue donc sur test.local: l&rsquo;observation d&rsquo;un ticket l\u00e9gitime, le d\u00e9chiffrement de son PAC, la lecture des journaux et le durcissement. Seule la ligne de commande de forge n&rsquo;est pas reproduite ici. Nous la rempla\u00e7ons par la liste de ce qu&rsquo;elle consomme, ce qui suffit pour comprendre le risque.<\/p>\n<h2>Ce que contient un ticket de service<\/h2>\n<p>Commen\u00e7ons par un ticket l\u00e9gitime. Depuis cli01, nous vidons le cache, ouvrons le site puis listons les tickets:<\/p>\n<pre class=\"wp-block-code\"><code>C:\\&gt; klist purge\nC:\\&gt; start msedge https:\/\/monsite.test.local\nC:\\&gt; klist\n\n#1&gt;  Client: alice @ TEST.LOCAL\n     Server: HTTP\/monsite.test.local @ TEST.LOCAL\n     KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96\n     Ticket Flags 0x40a10000 -&gt; forwardable renewable pre_authent name_canonicalize\n     Start Time: 11\/11\/2026 9:12:04 (local)\n     End Time:   11\/11\/2026 19:12:04 (local)\n     Renew Time: 11\/18\/2026 9:12:04 (local)\n     Session Key Type: AES-256-CTS-HMAC-SHA1-96\n     Cache Flags: 0\n     Kdc Called: dc01.test.local<\/code><\/pre>\n<p>Pour voir l&rsquo;int\u00e9rieur du ticket, Wireshark a besoin de la cl\u00e9 du service. Comme nous l&rsquo;avions fait dans l&rsquo;article sur <a href=\"https:\/\/remivernier.com\/index.php\/2018\/07\/07\/kerberos-exploration\/\">le d\u00e9chiffrement du PAC<\/a>, nous g\u00e9n\u00e9rons un keytab pour svc.monsite:<\/p>\n<pre class=\"wp-block-code\"><code>ktpass \/princ HTTP\/monsite.test.local@TEST.LOCAL \/mapuser TESTLOCAL\\svc.monsite ^\n       \/pass * \/crypto All \/ptype KRB5_NT_PRINCIPAL \/out C:\\temp\\monsite.keytab<\/code><\/pre>\n<p>Attention: ktpass applique au compte le mot de passe saisi. Sur la maquette, saisissez le mot de passe actuel de svc.monsite, faute de quoi le pool d&rsquo;application ne d\u00e9marrera plus. Ce fichier contient la cl\u00e9 dont un attaquant a besoin pour forger des tickets: supprimez-le une fois l&rsquo;analyse termin\u00e9e.<\/p>\n<p>Dans Wireshark, le keytab se d\u00e9clare dans \u00ab Edit \u00bb \/ \u00ab Preferences \u00bb \/ \u00ab Protocols \u00bb \/ \u00ab KRB5 \u00bb, en cochant \u00ab Try to decrypt Kerberos blobs \u00bb. Nous capturons ensuite sur le client avec le filtre <code>kerberos || http<\/code>, puis nous ouvrons le KRB_AP_REQ contenu dans l&rsquo;en-t\u00eate \u00ab Authorization \u00bb (celui qui commence par YII). La structure se lit ainsi:<\/p>\n<pre class=\"wp-block-code\"><code>Ticket\n  realm:  TEST.LOCAL                           (en clair)\n  sname:  HTTP\/monsite.test.local              (en clair, hors partie chiffr\u00e9e)\n  enc-part: etype 18 (aes256-cts-hmac-sha1-96)  -&gt; chiffr\u00e9 avec Ks\n    flags, cl\u00e9 de session, crealm, cname: alice\n    authtime, starttime, endtime, renew-till\n    authorization-data\n      AD-IF-RELEVANT\n        AD-WIN2K-PAC\n          PAC_LOGON_INFO (1)        SID du domaine, RID, groupes, SID extra\n          PAC_CLIENT_INFO (10)      nom du client et authtime\n          PAC_UPN_DNS_INFO (12)\n          PAC_ATTRIBUTES_INFO (17), PAC_REQUESTOR (18)\n          PAC_SERVER_CHECKSUM (6)   sign\u00e9 avec Ks\n          PAC_PRIVSVR_CHECKSUM (7)  sign\u00e9 avec la cl\u00e9 krbtgt\n          PAC_TICKET_CHECKSUM (16)  sign\u00e9 avec la cl\u00e9 krbtgt\n          PAC_FULL_CHECKSUM (19)    sign\u00e9 avec la cl\u00e9 krbtgt<\/code><\/pre>\n<p>Tout ce qui d\u00e9cide de l&rsquo;autorisation sur srv01 (identit\u00e9, groupes, dur\u00e9e de vie) se trouve dans la partie chiffr\u00e9e avec Ks, la cl\u00e9 d\u00e9riv\u00e9e du mot de passe de svc.monsite. Le d\u00e9tail de la lecture d&rsquo;un ticket et de la validation du PAC est repris dans l&rsquo;article <a href=\"https:\/\/remivernier.com\/index.php\/2026\/10\/27\/kerberos-lire-ticket-service-klist-wireshark-tgs-req-pac\/\">du KRB_TGS_REQ au PAC valid\u00e9<\/a>.<\/p>\n<h2>Pourquoi la cl\u00e9 du service suffit<\/h2>\n<p>Quand srv01 re\u00e7oit le KRB_AP_REQ, LSASS d\u00e9chiffre le ticket avec Ks, v\u00e9rifie l&rsquo;authenticator avec la cl\u00e9 de session trouv\u00e9e dans le ticket, contr\u00f4le les dates, puis v\u00e9rifie la signature serveur du PAC, elle aussi calcul\u00e9e avec Ks. Si tout est coh\u00e9rent, le jeton d&rsquo;acc\u00e8s est construit \u00e0 partir des SID du PAC. \u00c0 aucun moment le serveur n&rsquo;a besoin de contacter dc01.<\/p>\n<p>Celui qui d\u00e9tient Ks peut donc fabriquer lui-m\u00eame un ticket que srv01 jugera parfaitement valide. Les ingr\u00e9dients sont peu nombreux:<\/p>\n<ol>\n<li>le nom du domaine et son SID, qui ne sont pas des secrets (n&rsquo;importe quel utilisateur les lit dans l&rsquo;annuaire),<\/li>\n<li>le SPN vis\u00e9, ici HTTP\/monsite.test.local,<\/li>\n<li>la cl\u00e9 Ks: l&#8217;empreinte NT du compte pour un ticket en RC4, ou la cl\u00e9 AES d\u00e9riv\u00e9e du mot de passe et du sel,<\/li>\n<li>un nom d&rsquo;utilisateur et un RID, existants ou non,<\/li>\n<li>la liste des groupes \u00e0 placer dans PAC_LOGON_INFO, par exemple 512 (Admins du domaine),<\/li>\n<li>des dates de validit\u00e9 au choix du forgeur.<\/li>\n<\/ol>\n<p>Restent les trois signatures calcul\u00e9es avec la cl\u00e9 krbtgt: srv01 ne conna\u00eet pas cette cl\u00e9 et ne peut pas les v\u00e9rifier seul, le forgeur y place donc n&rsquo;importe quelle valeur de la bonne taille. Ces signatures ont \u00e9t\u00e9 ajout\u00e9es pour d&rsquo;autres attaques, CVE-2020-17049 (Bronze Bit) pour la signature du ticket et CVE-2022-37967 pour la signature compl\u00e8te du PAC. Elles prot\u00e8gent les tickets qui repassent par le KDC, en S4U2proxy par exemple, pas ceux que le service accepte directement.<\/p>\n<figure class=\"wp-block-image\">\n<svg viewBox=\"0 0 720 360\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" font-family=\"sans-serif\" font-size=\"13\">\n<defs>\n<marker id=\"fl\" markerWidth=\"10\" markerHeight=\"8\" refX=\"9\" refY=\"4\" orient=\"auto\"><path d=\"M0,0 L10,4 L0,8 z\" fill=\"#333\"\/><\/marker>\n<\/defs>\n<rect x=\"470\" y=\"20\" width=\"220\" height=\"70\" rx=\"6\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"580\" y=\"50\" text-anchor=\"middle\" font-size=\"14\">dc01 (KDC)<\/text>\n<text x=\"580\" y=\"70\" text-anchor=\"middle\">\u00e9v\u00e9nements 4768 \/ 4769<\/text>\n<rect x=\"470\" y=\"250\" width=\"220\" height=\"80\" rx=\"6\" fill=\"#e6f4ea\" stroke=\"#333\"\/>\n<text x=\"580\" y=\"280\" text-anchor=\"middle\" font-size=\"14\">srv01 (IIS)<\/text>\n<text x=\"580\" y=\"300\" text-anchor=\"middle\">HTTP\/monsite.test.local<\/text>\n<text x=\"580\" y=\"318\" text-anchor=\"middle\">\u00e9v\u00e9nements 4624 \/ 4627<\/text>\n<rect x=\"30\" y=\"110\" width=\"180\" height=\"70\" rx=\"6\" fill=\"#e8f0fe\" stroke=\"#333\"\/>\n<text x=\"120\" y=\"140\" text-anchor=\"middle\" font-size=\"14\">cli01 (alice)<\/text>\n<text x=\"120\" y=\"160\" text-anchor=\"middle\">flux l\u00e9gitime<\/text>\n<rect x=\"30\" y=\"260\" width=\"180\" height=\"70\" rx=\"6\" fill=\"#fdf3e1\" stroke=\"#333\"\/>\n<text x=\"120\" y=\"290\" text-anchor=\"middle\" font-size=\"14\">Poste attaquant<\/text>\n<text x=\"120\" y=\"310\" text-anchor=\"middle\">d\u00e9tient la cl\u00e9 Ks<\/text>\n<line x1=\"210\" y1=\"125\" x2=\"468\" y2=\"50\" stroke=\"#333\" marker-end=\"url(#fl)\"\/>\n<text x=\"250\" y=\"70\" font-size=\"13\">1-2. AS-REQ, TGS-REQ<\/text>\n<line x1=\"468\" y1=\"75\" x2=\"212\" y2=\"145\" stroke=\"#333\" marker-end=\"url(#fl)\"\/>\n<text x=\"300\" y=\"132\" font-size=\"13\">AS-REP, TGS-REP<\/text>\n<line x1=\"210\" y1=\"170\" x2=\"468\" y2=\"265\" stroke=\"#333\" marker-end=\"url(#fl)\"\/>\n<text x=\"250\" y=\"230\" font-size=\"13\">3. AP-REQ (ticket \u00e9mis par le KDC)<\/text>\n<line x1=\"210\" y1=\"300\" x2=\"468\" y2=\"300\" stroke=\"#333\" stroke-dasharray=\"6,4\" marker-end=\"url(#fl)\"\/>\n<text x=\"225\" y=\"345\" font-size=\"13\">AP-REQ avec ticket forg\u00e9, aucun \u00e9change avec le KDC<\/text>\n<line x1=\"640\" y1=\"248\" x2=\"640\" y2=\"92\" stroke=\"#333\" stroke-dasharray=\"3,3\" marker-end=\"url(#fl)\"\/>\n<text x=\"648\" y=\"160\" font-size=\"13\">validation<\/text>\n<text x=\"648\" y=\"176\" font-size=\"13\">du PAC<\/text>\n<text x=\"648\" y=\"192\" font-size=\"13\">(optionnelle)<\/text>\n<\/svg><figcaption>Flux l\u00e9gitime et silver ticket: le KDC n&rsquo;intervient que dans le premier cas, sauf si le serveur demande la validation du PAC.<\/figcaption><\/figure>\n<p>Pour obtenir Ks, l&rsquo;attaquant a plusieurs chemins classiques. Un compte de service utilisateur avec un SPN et un mot de passe humain se casse hors ligne apr\u00e8s un simple Kerberoasting (T1558.003), puisque n&rsquo;importe quel utilisateur du domaine peut demander un ticket pour ce SPN. Un administrateur local de srv01 peut extraire de LSA le secret du compte machine ou celui du compte qui ex\u00e9cute le pool. Enfin, un attaquant qui dispose d\u00e9j\u00e0 des droits de r\u00e9plication lit toutes les cl\u00e9s de l&rsquo;annuaire.<\/p>\n<p>Le rayon d&rsquo;impact d\u00e9pend du compte. Avec la cl\u00e9 de svc.monsite, l&rsquo;attaquant se pr\u00e9sente au site comme n&rsquo;importe qui, avec n&rsquo;importe quels groupes: si l&rsquo;application donne des droits \u00e0 un groupe, il lui suffit de l&rsquo;ajouter \u00e0 son PAC. Avec la cl\u00e9 du compte machine srv01$, c&rsquo;est plus grave. Le nom du service (sname) se trouve hors de la partie chiffr\u00e9e, donc un m\u00eame ticket se pr\u00e9sente indiff\u00e9remment \u00e0 CIFS, HOST, HTTP ou WSMAN d\u00e8s lors que ces services partagent la cl\u00e9 du compte machine. L&rsquo;attaquant obtient alors l&rsquo;administration compl\u00e8te du serveur. La propagation reste toutefois born\u00e9e aux services qui acceptent cette cl\u00e9: l\u00e0 o\u00f9 un golden ticket ouvre aussi srv02, un silver ticket forg\u00e9 avec la cl\u00e9 de srv01$ s&rsquo;arr\u00eate \u00e0 srv01.<\/p>\n<p>Pour la r\u00e9vocation, il n&rsquo;y a rien \u00e0 r\u00e9voquer: le ticket n&rsquo;existe dans aucune base, et sa dur\u00e9e de vie est celle qu&rsquo;a choisie le forgeur. La seule parade consiste \u00e0 changer la cl\u00e9. Attention: pour un compte machine, le serveur conserve aussi le mot de passe pr\u00e9c\u00e9dent afin de ne pas casser les tickets en cours, une seule rotation ne suffit donc pas \u00e0 invalider l&rsquo;ancienne cl\u00e9.<\/p>\n<h2>Validation du PAC et type de chiffrement<\/h2>\n<p>Le service a pourtant un moyen de faire contr\u00f4ler le PAC: l&rsquo;envoyer au contr\u00f4leur de domaine par Netlogon (message KERB_VERIFY_PAC, d\u00e9crit dans [MS-APDS]), qui v\u00e9rifie la signature KDC avec la cl\u00e9 krbtgt. Un PAC forg\u00e9 \u00e9choue \u00e0 ce contr\u00f4le. Malheureusement, Windows ne d\u00e9clenche pas cette v\u00e9rification pour les services qui s&rsquo;ex\u00e9cutent avec le privil\u00e8ge \u00ab Agir en tant que partie du syst\u00e8me d&rsquo;exploitation \u00bb, ce qui est le cas de tout ce qui tourne en Local System, \u00e0 commencer par le serveur SMB. La valeur <code>ValidateKdcPacSignature<\/code> sous <code>HKLM\\SYSTEM\\CurrentControlSet\\Control\\Lsa\\Kerberos\\Parameters<\/code> permet de forcer ce comportement. Ses effets exacts ont toutefois \u00e9volu\u00e9 au fil des mises \u00e0 jour de durcissement du PAC: testez-la sur la maquette avant de compter dessus, en gardant en t\u00eate qu&rsquo;elle ajoute un aller-retour vers un DC \u00e0 chaque ouverture de session.<\/p>\n<p>Le type de chiffrement m\u00e9rite aussi un contr\u00f4le. L&rsquo;attribut <code>msDS-SupportedEncryptionTypes<\/code> du compte guide le KDC quand il \u00e9met un ticket, mais le forgeur, lui, ne passe pas par le KDC. Ce qui compte, c&rsquo;est ce que srv01 accepte, et cela d\u00e9pend de sa strat\u00e9gie locale \u00ab S\u00e9curit\u00e9 r\u00e9seau: configurer les types de chiffrement autoris\u00e9s pour Kerberos \u00bb. Tant que RC4 y reste autoris\u00e9, l&#8217;empreinte NT seule suffit au forgeur. V\u00e9rifions les deux c\u00f4t\u00e9s:<\/p>\n<pre class=\"wp-block-code\"><code>PS&gt; Get-ADUser svc.monsite -Properties servicePrincipalName,msDS-SupportedEncryptionTypes,PasswordLastSet |\n      Select-Object servicePrincipalName,msDS-SupportedEncryptionTypes,PasswordLastSet\n\nPS&gt; reg query HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\Kerberos\\Parameters \/v SupportedEncryptionTypes<\/code><\/pre>\n<p>Une valeur 0x18 (24) c\u00f4t\u00e9 compte correspond \u00e0 AES128 + AES256. Si la strat\u00e9gie locale de srv01 exclut aussi RC4, un ticket en etype 23 devrait \u00eatre refus\u00e9 \u00e0 l&rsquo;AP-REQ. Rejouez le test sur la maquette apr\u00e8s le d\u00e9ploiement de la GPO: un refus appara\u00eet dans la capture sous forme de KRB_ERROR, que nous avions d\u00e9taill\u00e9 dans l&rsquo;article sur <a href=\"https:\/\/remivernier.com\/index.php\/2026\/11\/09\/kerberos-lire-krb-error-codes-erreur\/\">la lecture des KRB_ERROR<\/a>. Attention: retirer RC4 rel\u00e8ve la barre sans fermer la porte, puisqu&rsquo;un attaquant qui a extrait la cl\u00e9 AES forge tout aussi bien.<\/p>\n<h2>Ce qui reste c\u00f4t\u00e9 serveur<\/h2>\n<p>Puisque dc01 ne voit rien, la d\u00e9tection se joue sur srv01. Il faut d&rsquo;abord que l&rsquo;audit y soit actif:<\/p>\n<pre class=\"wp-block-code\"><code>auditpol \/set \/subcategory:\"Logon\" \/success:enable \/failure:enable\nauditpol \/set \/subcategory:\"Special Logon\" \/success:enable\nauditpol \/set \/subcategory:\"Group Membership\" \/success:enable<\/code><\/pre>\n<p>Sur les contr\u00f4leurs de domaine, l&rsquo;audit \u00ab Kerberos Service Ticket Operations \u00bb produit les 4769 qui serviront \u00e0 la corr\u00e9lation. L&rsquo;\u00e9v\u00e9nement 4624 de srv01 porte un champ \u00ab GUID d&rsquo;ouverture de session \u00bb. Pour un ticket l\u00e9gitime, nous retrouvons ce m\u00eame GUID dans le 4769 \u00e9mis par le DC qui a d\u00e9livr\u00e9 le ticket. Pour un ticket forg\u00e9, aucun 4769 ne lui correspond. Voici de quoi faire le rapprochement sur la maquette:<\/p>\n<pre class=\"wp-block-code\"><code>$debut = (Get-Date).AddHours(-12)\n\n$ouvertures = Get-WinEvent -ComputerName srv01 -FilterHashtable @{LogName='Security'; Id=4624; StartTime=$debut} |\n  ForEach-Object {\n    $d = @{}; ([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }\n    if ($d.AuthenticationPackageName -eq 'Kerberos' -and $d.LogonType -eq '3') {\n      [pscustomobject]@{ Heure=$_.TimeCreated; Compte=$d.TargetUserName; Domaine=$d.TargetDomainName; Guid=$d.LogonGuid; Ip=$d.IpAddress }\n    }\n  }\n\n$guidsKdc = Get-ADDomainController -Filter * | ForEach-Object {\n  Get-WinEvent -ComputerName $_.HostName -FilterHashtable @{LogName='Security'; Id=4769; StartTime=$debut.AddHours(-10)} |\n    ForEach-Object { (([xml]$_.ToXml()).Event.EventData.Data | Where-Object Name -eq 'LogonGuid').'#text' }\n}\n\n$ouvertures | Where-Object { $_.Guid -notin $guidsKdc }<\/code><\/pre>\n<p>Attention: ce rapprochement donne des faux positifs (ticket \u00e9mis avant la fen\u00eatre interrog\u00e9e, journaux d&rsquo;un DC purg\u00e9s, GUID nul sur certains \u00e9v\u00e9nements), il sert \u00e0 trier, pas \u00e0 conclure. Il faut interroger tous les DC, et remonter au moins sur la dur\u00e9e de vie d&rsquo;un ticket.<\/p>\n<p>D&rsquo;autres signaux viennent compl\u00e9ter ce tri:<\/p>\n<ul>\n<li>le 4627 liste les groupes tir\u00e9s du PAC: un groupe privil\u00e9gi\u00e9 pour un compte qui n&rsquo;en est pas membre dans l&rsquo;annuaire, ou un SID qui n&rsquo;existe pas, ne s&rsquo;explique pas autrement,<\/li>\n<li>un 4672 (privil\u00e8ges sp\u00e9ciaux) pour un compte ordinaire sur un serveur applicatif,<\/li>\n<li>un champ \u00ab Domaine du compte \u00bb dont la forme diff\u00e8re des ouvertures habituelles (FQDN au lieu du nom NetBIOS, casse inhabituelle), ce qui arrive avec certains outils de forge,<\/li>\n<li>un compte qui n&rsquo;existe plus ou n&rsquo;a jamais exist\u00e9.<\/li>\n<\/ul>\n<p>Sur le poste, quand le ticket a \u00e9t\u00e9 inject\u00e9 dans le cache, klist le montre avec une dur\u00e9e de vie qui sort de la strat\u00e9gie du domaine (10 heures par d\u00e9faut) et souvent un champ \u00ab Kdc Called \u00bb vide. En capture r\u00e9seau, nous voyons un KRB_AP_REQ vers srv01 sans aucun KRB_TGS_REQ pr\u00e9alable de cette machine vers un DC. Avec le keytab charg\u00e9 dans Wireshark, l&rsquo;etype du ticket et les signatures KDC incoh\u00e9rentes apparaissent en clair.<\/p>\n<p>Ces signaux restent difficiles \u00e0 exploiter \u00e0 grande \u00e9chelle, car l&rsquo;ouverture de session forg\u00e9e a toute l&rsquo;apparence d&rsquo;une ouverture normale. Le levier le plus efficace reste de rendre Ks inutilisable ou introuvable. Pour les comptes de service, un gMSA apporte un mot de passe al\u00e9atoire de 240 octets renouvel\u00e9 tous les 30 jours par d\u00e9faut, ce qui ferme le Kerberoasting et limite la dur\u00e9e de vie d&rsquo;une cl\u00e9 vol\u00e9e. Nous v\u00e9rifions aussi que les comptes machine renouvellent bien leur mot de passe (pas de <code>DisablePasswordChange<\/code> positionn\u00e9). Ensuite, nous retirons RC4 des comptes et des serveurs, nous limitons l&rsquo;administration locale de srv01 puisqu&rsquo;elle donne acc\u00e8s aux secrets LSA, et nous ne laissons tra\u00eener aucun keytab. Apr\u00e8s une compromission av\u00e9r\u00e9e, nous changeons le mot de passe de svc.monsite puis red\u00e9marrons le pool, et nous faisons tourner deux fois le mot de passe du compte machine.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,4,37],"tags":[160,136,161,146,5,15,158,159],"class_list":["post-1315","post","type-post","status-publish","format-standard","hentry","category-active-directory","category-kerberos","category-securite","tag-160","tag-active-directory","tag-detection","tag-gmsa","tag-kerberos","tag-pac","tag-silver-ticket","tag-ticket-de-service"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER<\/title>\n<meta name=\"description\" content=\"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER\" \/>\n<meta property=\"og:description\" content=\"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/\" \/>\n<meta property=\"og:site_name\" content=\"R\u00e9mi VERNIER\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-11T14:00:00+00:00\" \/>\n<meta name=\"author\" content=\"R\u00e9mi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"R\u00e9mi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/\"},\"author\":{\"name\":\"R\u00e9mi\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"headline\":\"Silver ticket: forger un ticket de service sur maquette\",\"datePublished\":\"2026-11-11T14:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/\"},\"wordCount\":1990,\"commentCount\":0,\"keywords\":[\"4624\",\"active directory\",\"d\u00e9tection\",\"gmsa\",\"kerberos\",\"pac\",\"silver ticket\",\"ticket de service\"],\"articleSection\":[\"Active Directory\",\"Kerberos\",\"S\u00e9curit\u00e9\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/\",\"url\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/\",\"name\":\"Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\"},\"datePublished\":\"2026-11-11T14:00:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\"},\"description\":\"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/index.php\\\/2026\\\/11\\\/11\\\/silver-ticket-forger-ticket-service-maquette\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/remivernier.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Silver ticket: forger un ticket de service sur maquette\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#website\",\"url\":\"https:\\\/\\\/remivernier.com\\\/\",\"name\":\"R\u00e9mi VERNIER\",\"description\":\"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/remivernier.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/remivernier.com\\\/#\\\/schema\\\/person\\\/a4c76c63a5a3d94454484845e42fc906\",\"name\":\"R\u00e9mi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g\",\"caption\":\"R\u00e9mi\"},\"sameAs\":[\"http:\\\/\\\/www.linkedin.com\\\/in\\\/remi-vernier\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER","description":"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/","og_locale":"fr_FR","og_type":"article","og_title":"Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER","og_description":"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.","og_url":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/","og_site_name":"R\u00e9mi VERNIER","article_published_time":"2026-11-11T14:00:00+00:00","author":"R\u00e9mi","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"R\u00e9mi","Dur\u00e9e de lecture estim\u00e9e":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/#article","isPartOf":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/"},"author":{"name":"R\u00e9mi","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"headline":"Silver ticket: forger un ticket de service sur maquette","datePublished":"2026-11-11T14:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/"},"wordCount":1990,"commentCount":0,"keywords":["4624","active directory","d\u00e9tection","gmsa","kerberos","pac","silver ticket","ticket de service"],"articleSection":["Active Directory","Kerberos","S\u00e9curit\u00e9"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/","url":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/","name":"Silver ticket: forger un ticket de service sur maquette - R\u00e9mi VERNIER","isPartOf":{"@id":"https:\/\/remivernier.com\/#website"},"datePublished":"2026-11-11T14:00:00+00:00","author":{"@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906"},"description":"Ce que contient un ticket de service, pourquoi la cl\u00e9 du compte de service suffit \u00e0 le forger, et les traces qui restent sur le serveur quand le KDC ne voit rien.","breadcrumb":{"@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/remivernier.com\/index.php\/2026\/11\/11\/silver-ticket-forger-ticket-service-maquette\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/remivernier.com\/"},{"@type":"ListItem","position":2,"name":"Silver ticket: forger un ticket de service sur maquette"}]},{"@type":"WebSite","@id":"https:\/\/remivernier.com\/#website","url":"https:\/\/remivernier.com\/","name":"R\u00e9mi VERNIER","description":"Identit\u00e9, s\u00e9curit\u00e9, SAP et IA : Active Directory, Azure &amp; co...","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/remivernier.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/remivernier.com\/#\/schema\/person\/a4c76c63a5a3d94454484845e42fc906","name":"R\u00e9mi","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f750448bc07f5d1d9c1189344283777ec0d33275c184599b199fb6b305bc6fba?s=96&d=mm&r=g","caption":"R\u00e9mi"},"sameAs":["http:\/\/www.linkedin.com\/in\/remi-vernier"]}]}},"_links":{"self":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/comments?post=1315"}],"version-history":[{"count":1,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1315\/revisions"}],"predecessor-version":[{"id":1319,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/posts\/1315\/revisions\/1319"}],"wp:attachment":[{"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/remivernier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}