remote desktop protocol
Opérations de sécurité

Remote Desktop Protocol : Exécution de la requête Login 4624_4625

Garder un œil sur ceux qui tentent d’accéder à votre réseau, qu’ils réussissent ou non, peut s’avérer payant à plusieurs niveaux différents.

La requête d’événement Login 4624_4625 fournit aux défenseurs, en particulier aux analystes, un outil utile pour identifier les connexions RDP (Remote Desktop Protocol) réussies (événement de log de sécurité Windows 4624) et les tentatives échouées (événement de log de sécurité Windows 4625). Ces événements peuvent être générés par les systèmes, les contrôleurs de domaine et les postes de travail.

Ces événements Windows sont bien sûr visibles dans l’Event Viewer, mais dans cet article (et dans la vidéo d’accompagnement que nous avons mise sur notre chaîne YouTube), nous vous présenterons notre analyse à l’aide de Sophos Central. La requête SQL que nous utiliserons ci-dessous est accessible à tous sur notre Github.

Construire et exécuter la requête

La requête SQL avec laquelle nous allons travailler ressemble au code présenté ci-dessous :

SELECT
strftime('%Y-%m-%dT%H:%M:%SZ',datetime) AS date_time,
eventid AS EventID,
CASE
WHEN eventid = 4624 THEN eventid || ' - Successful Login'
WHEN eventid = 4625 THEN eventid || ' - Failed login'
END AS Description,
'Security' AS Source,
JSON_EXTRACT(data, '$.EventData.TargetUserName') AS Target_User,
JSON_EXTRACT(data, '$.EventData.WorkstationName') AS Source_Machine_Network,
JSON_EXTRACT(data, '$.EventData.IpAddress') AS Source_IP,
JSON_EXTRACT(data, '$.EventData.ProcessName') AS Process_Name,
JSON_EXTRACT(data, '$.EventData.LogonType') AS Logon_Type,
JSON_EXTRACT(data, '$.EventData.TargetUserSid') AS Target_User_SID,
JSON_EXTRACT(data, '$.EventData.Status') AS Logon_Status_Code,
JSON_EXTRACT(data, '$.EventData.TargetDomainName') AS Target_Domain_Name,
JSON_EXTRACT(data, '$.EventData.AuthenticationPackageName') AS Authentication_package,
NULL AS SessionID,
NULL AS Session_ID,
'Security EVTX' AS Data_Source,
'Logins.01.1' AS Query
FROM sophos_windows_events
WHERE source = 'Security'
AND (eventid = 4624 OR eventid = 4625)
AND JSON_EXTRACT(data, '$.EventData.TargetUserName') LIKE '$$username$$'
AND JSON_EXTRACT(data, '$.EventData.IpAddress') LIKE '$$source_ip$$'
AND JSON_EXTRACT(data, '$.EventData.WorkstationName') LIKE '$$workstation$$'
AND time > 0

Pour exécuter cette opération via Sophos Central, rendez-vous dans :

Centre d’analyse des menaces> Live Discover> Mode concepteur

et cliquez sur le bouton ‘Créer une nouvelle requête’, comme illustré dans la figure 1.

remote desktop protocol

Figure 1 : Création d’une requête sur l’écran du mode Concepteur ; le bouton ‘Créer une nouvelle requête’ se trouve à droite, au niveau du milieu de l’écran.

En cliquant sur le bouton, vous accédez à un écran avec une zone SQL dans laquelle vous collerez la requête.

Notez que cette requête comporte deux variables : une pour le(s) nom(s) utilisateur ciblé (username) et une pour l’adresse IP de l’entité tentant d’accéder (source_ip). Ces deux éléments sont des chaînes (strings) ; pour garantir que la requête renvoie le plus grand nombre possible de résultats, ceux-ci doivent inclure des caractères génériques pour ces variables (lorsque nos investigateurs en réponse aux incidents l’utilisent dans le cadre de leur travail, ils l’exécutent généralement sur tous les appareils Windows du réseau ; la première fois que vous l’exécutez et occasionnellement par la suite, envisagez de faire de même pour obtenir la vue la plus large possible sur les évènements se produisant sur votre réseau).

Pour ce faire, modifiez ces deux variables dans l’éditeur de variables juste au-dessus de la zone dans laquelle la requête est collée. Cliquez sur ‘Afficher l’éditeur de variable’, puis cliquez sur ‘+ Ajouter une variable’. Dans le champ ‘Nom descriptif’, saisissez le premier nom de variable (username) ; le type (String) et le nom de la variable SQL ($$username$$) se rempliront automatiquement. Sur la ligne suivante, faites de même pour la deuxième variable ($$source_ip$$). Sur la droite, ajoutez le signe de pourcentage (%) qui indique un caractère générique, comme illustré dans la figure 2 :

remote desktop protocol

Figure 2 : L’édition des variables est presque terminée, encore un caractère ‘pourcentage’ et c’est fini.

Ensuite, faites défiler jusqu’à la zone ‘Filtres’ et sélectionnez les machines sur lesquelles la requête doit être exécutée (comme il s’agit d’un événement Windows, il ne sert à rien de l’exécuter sur les machines macOS ou Linux de votre parc, celles-ci doivent donc être filtrées). En cliquant sur la case à côté de “Statut en ligne” (en haut de la colonne), vous sélectionnez tout ; cliquez sur “Mettre à jour la liste des appareils sélectionnés” pour confirmer.

Une fois les variables et les filtres définis, cliquez sur ‘Exécuter la requête’, puis cliquez à nouveau lorsque le système vous demande si vous souhaitez exécuter cette requête non testée. L’exécution commence ; le délai pour obtenir les résultats dépendra bien entendu de la taille de votre domaine, de votre vitesse de connexion et surtout de la taille des logs d’événement. Cependant, elle finira par conclure en renvoyant un tableau de résultats. Il est bien sûr possible de les consulter directement dans Sophos Central, mais il est également possible (et peut-être un peu plus agréable) d’exporter le tout vers un fichier CSV pour une lecture avec le tableur de votre choix.

Comprendre les résultats

Quelle que soit la manière avec laquelle vous préférez afficher les résultats renvoyés, quelques champs ressortent :

Résultats de la recherche : Aperçu global 
epName Nom de l’endpoint
date_time L’heure au format UTC à laquelle l’événement a été enregistré dans les logs interrogés ; le tri au niveau de ‘date_time’ peut identifier des pics d’activité à des moments inattendus.
EventID Soit la connexion a réussi (4624), soit elle a échoué (4625)
Source Les logs dans lequel ces résultats de requête ont été trouvés.
Username Le nom d’utilisateur proposé lors de la tentative de connexion. Cela vaut la peine de vérifier les utilisateurs qui ne devraient pas faire de tentatives de connexion RDP, ainsi que les noms d’utilisateur qui ne correspondent pas au “style” de votre entreprise (par exemple, si cette dernière appelle les comptes d’administration système “Administrateur”, le fait de voir “ADMINISTRATEUR”, “admin”, ou autre devrait attirer votre attention).
Source_Machine_Network Le vrai nom de l’hôte qui s’est connecté (ou a tenté de se connecter) ; un nom que vous ne reconnaissez pas ou qui ne correspond pas au schéma de dénomination de l’entreprise mérite probablement une investigation plus approfondie.
Source_IP L’adresse IP d’origine ; si cette dernière ne vient pas de l’intérieur du domaine (c’est-à-dire s’il s’agit d’une connexion non RFC 1819, d’une adresse IP distante), un examen minutieux est nécessaire.
Logon_Type Microsoft attribue une douzaine de codes à différents types de connexion ; dans cette situation, les investigateurs examinant les abus RDP peuvent noter le type 3 (connexions réseau, notamment post-NLA), le type 7 (le poste de travail a été déverrouillé ; si le champ IP associé à cet événement est une adresse distante, c’est suspect), ou tapez 10 (connexion à distance à l’aide de Terminal Services ou bien RDP).

 

Dans le tableau ci-dessus, nous avons noté un certain nombre de motifs potentiels pour une investigation plus approfondie en fonction des résultats renvoyés par cette requête ; en voici un de plus. Bien que cette requête puisse détecter des problèmes potentiels d’exposition au RDP, elle peut détecter autre chose qui nécessite votre attention immédiate, par exemple au niveau du SMB.

Il n’y a, en 2024 (soit sept années révolues depuis l’abandon d’EternalBlue et de WannaCry), aucune bonne raison de laisser un dossier ou un disque partagé traîner sur Internet de cette manière, et pourtant, un cas sur cinq traité en 2022 et 2023 par l’équipe de réponse aux incidents présentait des preuves d’abus du SMB. Cette statistique ne tient pas compte de l’horrible domination du RDP dans nos résultats IR, où plus de 90 % des cas incluent des résultats liés au RDP, mais c’est un bon rappel qui confirme que garder un œil sur les logs de votre entreprise avec des requêtes exécutées régulièrement comme celle-ci peut effectivement donner des résultats révélateurs.

Remote Desktop Protocol : Présentation de la série d’articles

Partie 1 : Remote Desktop Protocol : Introduction (article, vidéo)
Partie 2 : Remote Desktop Protocol : Un RDP accessible depuis Internet (est dangereux) (article, vidéo)
Partie 3 : Remote Desktop Protocol : Requêtes pour investigation (article, vidéo)
Partie 4 : RDP et écart de fuseau horaire/Time Zone Bias (article, vidéo)
Partie 5 : Exécution de la requête RDP externe (article, vidéo)
Partie 6 : Exécution de la requête Login 4624_4625 ([article en cours de lecture], vidéo)
Dépôt de requêtes sur GitHub : SophosRapidResponse/OSQuery
Dépôt de la transcription des vidéos : sophoslabs/video-transcripts
Playlist YouTube : Remote Desktop Protocol : Présentation de la série d’articles

Billet inspiré de Remote Desktop Protocol: Executing the 4624_4625 Login Query, sur le Blog Sophos.