- Partage d’expérience sur le processus de développement de defendnot, un outil qui désactive Windows Defender en exploitant directement l’API du service Windows Security Center (WSC)
- Le projet a commencé en cherchant à dépasser les limites techniques et les problèmes juridiques de l’ancien projet no-defender
- Le reverse engineering et le débogage ont été menés malgré de nombreux obstacles, notamment un environnement atypique (MacBook arm64, débogage à distance, forte latence)
- Analyse du contournement de l’enregistrement de Defender et des mécanismes de vérification des processus, puis amélioration progressive jusqu’à un fonctionnement stable après de nombreux échecs et tentatives
- Au final, la fonction d’exécution automatique a elle aussi été implémentée, avec en parallèle un retour honnête sur les difficultés rencontrées pendant le projet
Introduction
- Partage d’expérience autour du parcours d’implémentation de l’outil defendnot qui désactive Windows Defender
- Le texte se concentre moins sur les détails techniques que sur les problèmes concrets rencontrés et les tâtonnements en conditions réelles
- Une documentation formelle et des explications techniques plus détaillées seront publiées séparément plus tard
Retour un an en arrière
- Il y a environ un an, l’auteur a publié un projet nommé no-defender, qui exploitait le fonctionnement par lequel Windows Defender est désactivé via l’API WSC
- Ce projet s’appuyait sur du code tiers provenant d’un éditeur d’antivirus afin de faire croire au système qu’un autre antivirus était enregistré
- Après sa sortie, le projet a suscité beaucoup d’intérêt et obtenu environ 1 500 stars, mais une demande de retrait DMCA de l’éditeur concerné a conduit à la suppression du code source et à l’arrêt du projet
Pourquoi lancer ce projet
- Au moment de la rédaction, l’auteur séjournait dans un Airbnb à Séoul
- Son principal environnement de développement était un MacBook M4Pro, sans machine dédiée au reverse engineering x86
- À cause d’un CTF et d’un planning de voyage, il a dû travailler sans appareil x86
- En parallèle d’une réflexion sur une implémentation plus « normale » de no-defender, il a commencé à explorer la possibilité d’une implémentation autonome, indépendante de tout AV
Enquête initiale (jour 1)
- Avec l’aide d’un ami, l’auteur a obtenu le binaire wsc et a tenté de réimplémenter l’enregistrement WSC avec une structure similaire à celle du projet précédent
- L’implémentation via l’API COM de WSC a toutefois échoué avec une erreur Access Denied
- Il a identifié l’origine du problème dans le fait que WSC vérifie la signature et l’authentification du processus qui appelle l’API
- En injectant un module dans un processus AV pour tenter l’enregistrement, il a pu constater qu’un AV était alors enregistré avec succès
Remplacement du binaire AV et expériences supplémentaires (jour 1)
- Une tentative d’exécuter l’outil via un processus système signé (
cmd.exe, etc.) a échoué lors de la vérification PPL (Protected Process Light)
- L’analyse détaillée du désassemblage et du traçage a été reportée à plus tard, et le travail temporairement mis en pause
Mise en place de l’environnement (jour 2)
- À cause des limites d’un MacBook arm64, le débogage Windows x86 était extrêmement difficile
- L’auteur a utilisé à distance le PC d’un ami vivant aux États-Unis (Parasec, Anydesk, etc.) pour mener le débogage et les tests dans un environnement à forte latence
- L’alternance complexe entre compilation du code et débogage de VM a entraîné lenteurs et confusion
Débogage du service WSC (jour 2)
- Il a confirmé que le service WSC était structuré comme une DLL exécutée par svchost
- Pour désactiver la protection PPL, il a appliqué un contournement via un pilote spécial, puis vérifié l’entrée dans les fonctions avec un débogueur
- Il a découvert qu’une vérification du jeton SID de WinDefend avait lieu à l’intérieur du service
- Il a alors formulé l’hypothèse qu’il serait possible de contourner l’authentification en imitant un processus possédant le SID WinDefend
Imitation du SID WinDefend (jour 2)
- Il a approfondi son apprentissage de la structure et du fonctionnement des jetons Windows
- Après avoir implémenté puis exécuté un code imitant le SID WinDefend, tous les appels COM retournaient SUCCESS, mais aucun AV n’était réellement enregistré
Reconstruction de l’algorithme de vérification (jour 3)
- Il a réanalysé avec soin le binaire AV pour vérifier si le contrôle du SID passait réellement
- En cas d’échec du contrôle SID, le service vérifiait aussi l’élévation de privilèges, la signature du binaire et le drapeau DllCharacteristics du PE (
ForceIntegrity)
- Il a reproduit la fonction réalisant cette logique et mené des tests en l’appliquant à des binaires core du système
Utilisation du processus Taskmgr (jour 3)
- Une nouvelle tentative avec
Taskmgr.exe comme processus cible a échoué, car WSC rejetait la requête à cause d’une erreur dans la transmission du nom et d’un bug IPC
- Après avoir amélioré l’inférence du chemin de fichier et la manière de transmettre le nom de l’AV, il a confirmé un fonctionnement normal
Nettoyage du code (jour 3)
- Il a réorganisé les fonctionnalités et tenté d’implémenter la fonction d’exécution automatique (autorun)
- Des échecs intermittents dans la gestion de l’exécution automatique l’ont conduit à répéter les vérifications du code et de l’environnement pour en identifier la cause
Implémentation de l’exécution automatique (jour 4)
- Il a fini par identifier comme cause une option du planificateur de tâches (Task Scheduler) configurée pour empêcher l’exécution si l’ordinateur portable n’était pas branché sur secteur
- Après avoir désactivé ce paramètre, l’exécution automatique a fonctionné normalement
- Il a terminé par un nettoyage du code et des tests
Conclusion
- Le travail de reverse engineering dans un environnement limité et inconfortable a été une expérience extrêmement éprouvante, psychologiquement et physiquement
- Une documentation plus détaillée sur l’implémentation de WSC sera publiée séparément plus tard
Remerciements
- Pindos : un ami qui a prêté son PC la nuit pour aider au débogage et a réchauffé la chambre
- MrBruh : un collègue qui a stimulé le démarrage de l’exploration du projet et fourni des retours sur les idées
- Merci aussi aux proches qui sont restés en contact pendant toute la durée du projet et ont apporté leur soutien
- L’auteur confesse son amour pour le kimchi
- Merci également à l’artiste qui a laissé un graffiti sur notre mur
1 commentaires
Commentaires Hacker News
C:\ProgramData\Microsoft\Windows Defender, puis créer un fichier vide à sa placenetcat.exe