Cybersécurité et PowerShell
De l'attaque à la défense du système d'information
Éni éditions
Avant-propos
Chapitre 1
Fondamentaux et mise en place du Lab
1. Les fondamentaux de la cybersécurité11
1.1 Le risque et les compromis de sécurité dans le temps11
1.2 Les quatre piliers de la sécurité14
2. Les différents acteurs de la cybersécurité15
2.1 Les équipes de production15
2.2 Les équipes cyber16
2.3 La gouvernance17
2.4 Les utilisateurs18
2.5 Les « attaquants »18
3. Les éléments clés de PowerShell pour la sécurité19
3.1 Pour les administrateurs19
3.2 Pour les attaquants21
3.2.1 Live off the land21
3.2.2 Fileless attack21
4. Mise en place de l'environnement de test virtuel22
4.1 L'infrastructure du Lab24
4.2 Infrastructure réseau25
4.2.1 VirtualBox25
4.2.2 pfSense27
4.3 Infrastructure logique Active Directory38
4.3.1 Windows Server 1938
4.3.2 Finaliser la configuration pfSense43
4.3.3 Création du domaine Active Directory49
4.4 Déploiement des clients55
4.4.1 Client Windows 1055
4.4.2 Client Windows 7 (optionnel)60
4.4.3 Machine de l'attaquant : Kali-Linux61
5. Conclusion75
Chapitre 2
Les attaquants et PowerShell
1. Quelques exemples d'attaques77
1.1 Balayage réseau en PowerShell78
1.1.1 Définition d'un scan réseau79
1.1.2 Développement80
1.1.3 Cas pratique81
1.2 Attaques sur KeePass82
1.2.1 Présentation de KeePass82
1.2.2 Recherche de KeePass sur un système84
1.2.3 Analyse du fichier de configuration85
1.2.4 Bruteforce87
1.2.5 Quelques bonnes pratiques relatives à KeePass88
1.3 Kerberoasting89
1.3.1 Présentation89
1.3.2 Mise en place92
1.3.3 Attaque94
1.3.4 Bilan96
1.4 Chiffrement97
1.4.1 « On dit chiffrer »97
1.4.2 Les attaquants100
1.4.3 Chiffrement et déchiffrement asymétriques en PowerShell100
1.4.4 Chiffrement et déchiffrement symétriques en PowerShell102
1.4.5 Bilan104
2. Un cas dans la vraie vie : Emotet104
3. Conclusion107
Chapitre 3
Malware maison
1. Introduction109
2. Comment est architecture un malware ?110
3. Étape 1 : le dropper Memory Only112
4. Étape 2 : le serveur de contenu115
4.1 Serveur HTTP en Python115
4.2 Serveur HTTP en PowerShell116
5. Étape 3 : le C&C et le reverse shell118
5.1 Le C&C : mettre le serveur en écoute120
5.2 Le reverse shell : établir une communication123
5.3 Action125
6. Étape 4 : le ransomware127
6.1 Chiffrement127
6.2 Déchiffrement134
7. L'attaque, pas à pas136
8. Conclusion138
Chapitre 4
PowerShell Empire
1. Historique et présentation141
2. Déploiement144
2.1 Les sources et la documentation144
2.2 Installation144
2.2.1 Empire144
2.2.2 Starkiller146
2.2.3 API REST d'Empire147
3. Utilisation d'Empire pour attaquer un système d'information148
3.1 Help !148
3.2 Listeners150
3.2.1 Présentation150
3.2.2 Un premier listener152
3.2.3 Analyse du dropper associé153
3.2.4 Exécution du launcher156
3.3 Stagers157
3.3.1 Présentation157
3.3.2 Création d'un stager158
3.3.3 Empaqueter le launcher dans une macro159
3.3.4 Ouverture d'une pièce jointe piégée162
3.4 Agents164
3.4.1 Présentation164
3.4.2 Interagir avec un agent165
3.4.3 Élévation de privilèges sous Windows 7167
3.4.4 Zoom sur l'attaque ByPass UAC169
3.5 Modules171
3.5.1 Elévation de privilèges pour W10171
3.5.2 Collecte d'informations173
3.5.3 Persistance174
3.6 Propagation176
3.6.1 Bruteforce du mot de passe Administrateur176
3.6.2 Vol du jeton179
3.6.3 Pivot SMB et RDP181
3.6.4 Restricted Admin mode, RDP et pass-the-hash183
3.7 Scripts184
3.7.1 NTDS184
3.7.2 DSInternals184
4. Conclusion186
Chapitre 5
Sécuriser PowerShell
1. Introduction189
2. Supprimer PowerShell190
2.1 Désinstaller, désactiver ou bloquer ?190
2.2 Bloquer PowerShell par GPO191
2.3 Contrôler le blocage192
2.4 Quelques considérations193
3. Execution policy194
3.1 Présentation194
3.2 Configuration196
3.2.1 Locale196
3.2.2 Domaine197
3.3 Tester et contourner200
3.3.1 Tester200
3.3.2 Contourner201
3.4 Bilan203
4. Code signing204
4.1 Présentation204
4.2 Mettre en oeuvre une Autorité de Certification pour le code signing206
4.2.1 Autorité racine206
4.2.2 Serveur de liste de révocation209
4.2.3 Autorité intermédiaire212
4.2.4 Certificat de signature utilisateur213
4.2.5 Déployer le certificat d'AC214
4.2.6 Déployer le certificat utilisateur219
4.2.7 Usage de XCA pour une PKI d'entreprise220
4.3 Exemple de code signing222
4.3.1 Signer un script222
4.3.2 Timestamping224
4.4 Bilan224
5. AMSI225
5.1 Présentation225
5.2 AMSI : banc de test227
5.3 Observateur d'événements232
5.4 Bilan234
6. Conclusion235
Chapitre 6
Restreindre PowerSheil
1. Introduction237
2. Remote PowerSheil238
2.1 PSSessions, WS-Management et WinRM238
2.1.1 Sessions238
2.1.2 Sécurité des communications réseau240
2.1.3 Activer WinRM241
2.2 Sécurisation de WinRM246
2.2.1 Pare-feu246
2.2.2 Contrôle d'accès par groupe AD et GPO247
2.2.3 Contrôle d'accès SDDL250
2.2.4 HTTPS253
2.2.5 Authentification par certificats258
2.3 WMI260
2.3.1 Firewall261
2.3.2 Contrôle d'accès262
2.3.3 Démarrer un processus à distance265
2.3.4 Bilan266
3. PowerSheil JEA : Just Enough Administration266
3.1 Présentation266
3.2 Stratégie de mise en oeuvre267
3.3 Capacité de rôle268
3.4 Configuration de sessions269
3.5 Activer et désactiver la configuration JEA271
3.6 Tester JEA272
3.7 Bilan273
4. Constrained Language Mode et AppLocker274
4.1 Language Mode274
4.2 AppLocker276
4.2.1 Bloquer l'exécution de scripts avec AppLocker276
4.2.2 AppLocker et les journaux d'événements281
4.3 Langage contraint avec WDAC282
4.3.1 Configuration282
4.3.2 Contournement partiel285
4.4 Bilan286
5. Conclusion286
Chapitre 7
Défendre son SI avec PowerShell
1. Introduction289
2. Durcissement290
2.1 RDP : Remote Desktop Protocol290
2.1.1 Authentification, NLA et gestion des accès290
2.1.2 Pare-feu291
2.2 Configurer TLS292
2.3 SMB296
2.3.1 Server Message Block - Présentation296
2.3.2 Forcer SMB v3297
2.3.3 Bilan299
3. Windows Firewall299
3.1 Qu'est-ce qu'un pare-feu déjà ?299
3.2 Appliquer une politique No-inbound301
3.3 Tracer les connexions réseau304
3.4 Bilan306
4. Défendre et contrôler son AD307
4.1 Les comptes de service managés307
4.2 AdminSDHolder312
5. Live-forensics et PowerShell314
5.1 WinRM et le live-forensics314
5.2 WMI : abonnements aux événements système315
5.2.1 Exemples de requêtes WQL316
5.2.2 Filtres, consommateur et binding317
5.3 Quelques exemples d'abonnements WMI317
5.3.1 Abonnement permanent : détection des nouveaux périphériques317
5.3.2 Abonnement temporaire : détection d'un démarrage de processus dans PowerShell320
5.4 Persistance pour les attaquants322
6. Conclusion323
Chapitre 8
Superviser PowerShell
1. Introduction325
2. Collecter les logs Windows et Sysmon326
2.1 Surveiller les logs Windows avec PowerShell326
2.2 Mettre en place Sysmon327
2.3 Transférer les logs Sysmon vers un serveur Syslog330
2.3.1 WinEventForwarding330
2.3.2 Retransmettre vers un serveur syslog338
2.4 Bilan342
3. Les logs PowerShell342
3.1 Logs PowerShell343
3.2 Transcript344
3.3 Script Block Logging348
3.4 Protected Event Logging353
3.5 Bilan361
4. Surveiller avec un SIEM362
4.1 Installer une instance Splunk362
4.2 Indexer les premiers logs365
4.2.1 Injecter un fichier de log et créer le source type366
4.2.2 Surveiller un dossier371
4.3 Quelques règles de détections simples pour PowerShell373
4.3.1 Observer les événements bruts374
4.3.2 Travailler et filtrer sur les champs376
4.3.3 Faire des statistiques376
4.3.4 Mettre en place une alerte379
4.3.5 Pour aller plus loin avec Splunk381
5. Conclusion382
Conclusion383
Index385