SSH : Comprendre & Utiliser

Cybersécurité
1351 mots

Introduction

Le SSH (Secure Shell) est un protocole de communication sécurisé qui permet d'établir une connexion réseau cryptée entre un client et un serveur, généralement pour l'administration à distance des systèmes informatiques. On va détailler tout ça ici (elle claque pas trop la phrase à ChatGPT pour une fois ?)

Comprendre

Connaissances de bases

C'est un Finlandais avec un nom compliqué qui l'a inventé pour rempalcer Telnet & Rlogin parceque ces jolis protocoles transmettaient toutes les données en clair sur le réseau. En gros n'importe quel skid qui savait se servir de Python & Wireshark pouvait voir tout ce que vous faisiez y compris vos mot de passes :)

On utilise actuellement la version SSH-2.

Lors de l'établissement d'une connexion SSH, une session sécurisée est établie par un chiffrement symétrique (comme AES ou 3DES) et une authentification des deux parties (serveur et client). Le chiffrement symétrique garantit que les données envoyées sont illisibles pour toute personne interceptant les paquets.

L'une des principales forces du SSH est l'authentification basée sur une paire de clés cryptographiques. Le client crée une paire de clefs puis partage la clé publique avec le serveur. Lors d'une connexion serveur/client le serveur envoie un message au client qui possède la clé privée, un échange de clés (Diffie-Hellman) est mis en place et si tout se passe bien tout le monde est content et communique de manière sécurisée.

Le protocole SSH utilise des fonctions de hachagecryptographique (par exemple, SHA-2) pour garantir l'intégrité des données transmises. Cela permet de vérifier que les données n'ont pas été modifiées en transit.

Le SSH utilise un mécanisme appelé MAC (Message Authentication Code), basé sur un algorithme de hachage pour vérifier l'intégrité des messages et détecter toute tentative de modification des données pendant leur transmission.

Protocoles & Programmes qui utilisent SSH

SFTP

SSH File Transfer Protocol est la version de FTP qui utilise ssh pour le transfert de fichier sur le réseau. Parceque sans grandes surprises le ftp balance lui aussi tout en clair sur le réseau (port 21)

SCP

SSH Copy Très facile a manier pour copier des fichiers d'un endoirt à un autre via SSH, c'est utile pour les VPS.

SSHFS

SSH File System SSHFS permet de monter un système de fichiers distant sur votre machine locale via une connexion SSH. Cela signifie que vous pouvez accéder aux fichiers d'un serveur distant comme s'ils étaient sur votre propre machine, mais le tout est sécurisé par SSH.

Rsync sur SSH

Rsync est un outil de synchronisation de fichiers populaire qui peut être utilisé sur SSH pour effectuer des transferts de fichiers sécurisés et efficaces. L'avantage de rsync est qu'il permet de transférer uniquement les différences entre deux répertoires (deltas), ce qui le rend particulièrement efficace pour les sauvegardes.

Mosh

Mobile Shell est une alternative à SSH qui est conçue pour être plus robuste dans des conditions de réseau instables, comme les connexions mobiles. Mosh utilise SSH pour l'authentification, mais il fournit un shell plus résistant aux interruptions de réseau et des latences élevées.

Git

Git est un outil de versionning qui utilise principalement HTTPS mais peut utiliser SSH pour la gestion de dépôt distants (Voir l'article Comprendre Git)

X11 Forwarding via SSH

X11 Forwarding est une fonctionnalité qui permet d'exécuter des applications graphiques à distance tout en affichant leur interface graphique sur la machine locale via SSH. Cela peut être très utile pour exécuter des applications Linux/Unix graphiques sur une machine distante, tout en ayant l'affichage local sur votre propre machine.

Ansible via SSH

Ansible, un outil de gestion de configuration et d'automatisation, utilise SSH pour communiquer avec les hôtes distants. Il ne nécessite pas d'agent ou de serveur spécial côté client ou serveur, ce qui le rend plus léger que d'autres solutions d'automatisation comme Puppet ou Chef.

VPN

Il est aussi possible d'utiliser SSH pour établir un VPN sécurisé, en particulier avec des outils comme OpenVPN ou Tinc, qui peuvent encapsuler tout le trafic réseau via un tunnel SSH, assurant ainsi la sécurité des communications même sur des réseaux non sécurisés.

Tunneling SSH (Port Forwarding)

Tunneling ou Redirection de port est une fonctionnalité avancée du SSH qui permet de faire passer des connexions réseau de manière sécurisée à travers une connexion SSH. Il existe plusieurs types de tunneling :

  • Local Port Forwarding : Permet de rediriger un port local vers un serveur distant via une connexion SSH.
  • Remote Port Forwarding : Permet de rediriger un port distant vers un client local via SSH.
  • Dynamic Port Forwarding: Crée un "proxy" via SSH pour acheminer le trafic de manière sécurisée, souvent utilisé pour créer un VPN personnel.

Exemple de tunneling local :

ssh -L 8080:localhost:80 utilisateur@serveur

Cette commande redirige le port local 8080 vers le port 80 du serveur via SSH.

Automatisation de tâches

SSH offre la possibilité de pouvoir se connecter sans mot de passes tout en garantissant la sécurité ds données via un échange de clefs serveur/client:

# Créer une paire de clefs
ssh-key-gen -t ed25519
# Un prompt vous sera addressé, laissez tous les champs vides.

# Puis copiez la clé publique sur le serveur distant
ssh-copy-id -i ~/.ssh/id_ed25519 utilisateur@serveur

Exécution de Commandes via SSH

ssh utilisateur@serveur "ls /var/www"

Quelques Notions de Sécurité

  • Utilisation de clés fortes : Il est essentiel d'utiliser des clés privées suffisamment longues et sécurisées (par exemple, 4096 bits ou plus (ed25519 fera laaaaaaaargement l'affaire)) et de configurer des passphrases pour protéger les clés privées.

  • Désactivation de l'accès par mot de passe: Une bonne pratique consiste à désactiver l'authentification par mot de passe et à n'autoriser que les connexions par clés SSH. Cela renforce la sécurité en éliminant les risques liés à des mots de passe faibles ou compromis.

  • Gestion des clés publiques : Les serveurs SSH doivent vérifier les clés publiques autorisées, et il est important de régulièrement révoquer ou supprimer les clés d'accès non utilisées.

  • Mises à jour régulières (Automatisation préférée): Comme tout logiciel, SSH doit être maintenu à jour pour bénéficier des dernières améliorations et des correctifs de sécurité.

SSH & Windows

Activer la Fonctionnalité

Allez dans Clic Droit Icone Windows > Paramètres > Système > Fonctionnalités Facultatives > Ajouter une Fonctionnalité : Recherchez Client OpenSSH

WinConPtyShell

La théorie

Le WinConPtyShell est une fonctionnalité plus récente de Windows, introduite avec Windows 10 et utilisée principalement pour gérer les connexions à des shells interactifs (reverse_shells, etc...)^^. Ce n'est pas un programme à part entière que vous installez, mais une infrastructure qui permet d'implémenter des shells interactifs, comme SSH, dans des environnements Windows.

Le terme WinConPtyShell fait référence à un mécanisme interne dans Windows qui permet d'établir des sessions interactives avec des shells, en particulier pour des applications comme OpenSSHou des outils de gestion de terminal. Cela permet à des programmes comme PowerShell ou des applications tierces comme OpenSSH d'interagir avec des shells et des terminaux de manière plus fluide.

Concrètement, cela facilite l’intégration de shells de commande interactifs (par exemple, une connexion SSH ou un script PowerShell qui interagit avec un terminal Windows) avec le système d’exploitation Windows.

WinConPtyShell repose sur un concept de "pseudo-terminal" (pty) utilisé dans de nombreux systèmes Unix/Linux. Ce mécanisme permet à un programme de simuler un terminal pour qu'une autre application puisse y interagir.

Le mécanisme fonctionne en deux parties :

  • Le maître (master) : Il envoie des commandes et reçoit les réponses, comme un terminal virtuel.
  • L'esclave (slave) : C'est le shell ou le programme qui reçoit les commandes et renvoie les résultats. C'est typiquement une instance de PowerShell, Command Prompt, ou un shell SSH.

La Pratique

Quand on est développeur ou hackeur ou je ne sais quel autre nom qui fini en eur les WinConPtyShell peuvent être extrêmement utile pour communiquer de manière fluide avec des shell interactif qui casse pas comme netcat en voici un exemple :

$ConPty = New-Object -TypeName System.Management.Automation.Runspaces.PseudoTerminal # Créer l'objet Pseudo Terminal
$Process = Start-Process -FilePath "powershell.exe" -PassThru # Le Processus que va utiliser le Pseudo-Terminal (Ici Powershell mais ça aurait pu être git Bash ou autre)
$ConPty.Create($Process) # On démarre la session powershell dans un pseudo terminal
$ConPty.WriteLine("Get-Process") # On écrit les commandes

On peut aisément créer un programme qui fait tout ça automatiquement :)

Passer à la suite

Pour passer à la suite vous pouvez déjà commencer par contribuer psk j'suis un mec cool et sinon j'ai quelques articles sympathiques ici en lien plus ou moins proche avec celui-ci :

SSH : Comprendre & Utiliser

SSH : Comprendre & Utiliser

Introduction

Le SSH (Secure Shell) est un protocole de communication sécurisé qui permet d'établir une connexion réseau cryptée entre un client et un serveur, généralement pour l'administration à distance des systèmes informatiques. On va détailler tout ça ici (elle claque pas trop la phrase à ChatGPT pour une fois ?)

Comprendre

Connaissances de bases

C'est un Finlandais avec un nom compliqué qui l'a inventé pour rempalcer Telnet & Rlogin parceque ces jolis protocoles transmettaient toutes les données en clair sur le réseau. En gros n'importe quel skid qui savait se servir de Python & Wireshark pouvait voir tout ce que vous faisiez y compris vos mot de passes :)

On utilise actuellement la version SSH-2.

Lors de l'établissement d'une connexion SSH, une session sécurisée est établie par un chiffrement symétrique (comme AES ou 3DES) et une authentification des deux parties (serveur et client). Le chiffrement symétrique garantit que les données envoyées sont illisibles pour toute personne interceptant les paquets.

L'une des principales forces du SSH est l'authentification basée sur une paire de clés cryptographiques. Le client crée une paire de clefs puis partage la clé publique avec le serveur. Lors d'une connexion serveur/client le serveur envoie un message au client qui possède la clé privée, un échange de clés (Diffie-Hellman) est mis en place et si tout se passe bien tout le monde est content et communique de manière sécurisée.

Le protocole SSH utilise des fonctions de hachagecryptographique (par exemple, SHA-2) pour garantir l'intégrité des données transmises. Cela permet de vérifier que les données n'ont pas été modifiées en transit.

Le SSH utilise un mécanisme appelé MAC (Message Authentication Code), basé sur un algorithme de hachage pour vérifier l'intégrité des messages et détecter toute tentative de modification des données pendant leur transmission.

Protocoles & Programmes qui utilisent SSH

SFTP

SSH File Transfer Protocol est la version de FTP qui utilise ssh pour le transfert de fichier sur le réseau. Parceque sans grandes surprises le ftp balance lui aussi tout en clair sur le réseau (port 21)

SCP

SSH Copy Très facile a manier pour copier des fichiers d'un endoirt à un autre via SSH, c'est utile pour les VPS.

SSHFS

SSH File System SSHFS permet de monter un système de fichiers distant sur votre machine locale via une connexion SSH. Cela signifie que vous pouvez accéder aux fichiers d'un serveur distant comme s'ils étaient sur votre propre machine, mais le tout est sécurisé par SSH.

Rsync sur SSH

Rsync est un outil de synchronisation de fichiers populaire qui peut être utilisé sur SSH pour effectuer des transferts de fichiers sécurisés et efficaces. L'avantage de rsync est qu'il permet de transférer uniquement les différences entre deux répertoires (deltas), ce qui le rend particulièrement efficace pour les sauvegardes.

Mosh

Mobile Shell est une alternative à SSH qui est conçue pour être plus robuste dans des conditions de réseau instables, comme les connexions mobiles. Mosh utilise SSH pour l'authentification, mais il fournit un shell plus résistant aux interruptions de réseau et des latences élevées.

Git

Git est un outil de versionning qui utilise principalement HTTPS mais peut utiliser SSH pour la gestion de dépôt distants (Voir l'article Comprendre Git)

X11 Forwarding via SSH

X11 Forwarding est une fonctionnalité qui permet d'exécuter des applications graphiques à distance tout en affichant leur interface graphique sur la machine locale via SSH. Cela peut être très utile pour exécuter des applications Linux/Unix graphiques sur une machine distante, tout en ayant l'affichage local sur votre propre machine.

Ansible via SSH

Ansible, un outil de gestion de configuration et d'automatisation, utilise SSH pour communiquer avec les hôtes distants. Il ne nécessite pas d'agent ou de serveur spécial côté client ou serveur, ce qui le rend plus léger que d'autres solutions d'automatisation comme Puppet ou Chef.

VPN

Il est aussi possible d'utiliser SSH pour établir un VPN sécurisé, en particulier avec des outils comme OpenVPN ou Tinc, qui peuvent encapsuler tout le trafic réseau via un tunnel SSH, assurant ainsi la sécurité des communications même sur des réseaux non sécurisés.

Tunneling SSH (Port Forwarding)

Tunneling ou Redirection de port est une fonctionnalité avancée du SSH qui permet de faire passer des connexions réseau de manière sécurisée à travers une connexion SSH. Il existe plusieurs types de tunneling :

  • Local Port Forwarding : Permet de rediriger un port local vers un serveur distant via une connexion SSH.
  • Remote Port Forwarding : Permet de rediriger un port distant vers un client local via SSH.
  • Dynamic Port Forwarding: Crée un "proxy" via SSH pour acheminer le trafic de manière sécurisée, souvent utilisé pour créer un VPN personnel.

Exemple de tunneling local :

ssh -L 8080:localhost:80 utilisateur@serveur

Cette commande redirige le port local 8080 vers le port 80 du serveur via SSH.

Automatisation de tâches

SSH offre la possibilité de pouvoir se connecter sans mot de passes tout en garantissant la sécurité ds données via un échange de clefs serveur/client:

# Créer une paire de clefs
ssh-key-gen -t ed25519
# Un prompt vous sera addressé, laissez tous les champs vides.

# Puis copiez la clé publique sur le serveur distant
ssh-copy-id -i ~/.ssh/id_ed25519 utilisateur@serveur

Exécution de Commandes via SSH

ssh utilisateur@serveur "ls /var/www"

Quelques Notions de Sécurité

  • Utilisation de clés fortes : Il est essentiel d'utiliser des clés privées suffisamment longues et sécurisées (par exemple, 4096 bits ou plus (ed25519 fera laaaaaaaargement l'affaire)) et de configurer des passphrases pour protéger les clés privées.

  • Désactivation de l'accès par mot de passe: Une bonne pratique consiste à désactiver l'authentification par mot de passe et à n'autoriser que les connexions par clés SSH. Cela renforce la sécurité en éliminant les risques liés à des mots de passe faibles ou compromis.

  • Gestion des clés publiques : Les serveurs SSH doivent vérifier les clés publiques autorisées, et il est important de régulièrement révoquer ou supprimer les clés d'accès non utilisées.

  • Mises à jour régulières (Automatisation préférée): Comme tout logiciel, SSH doit être maintenu à jour pour bénéficier des dernières améliorations et des correctifs de sécurité.

SSH & Windows

Activer la Fonctionnalité

Allez dans Clic Droit Icone Windows > Paramètres > Système > Fonctionnalités Facultatives > Ajouter une Fonctionnalité : Recherchez Client OpenSSH

WinConPtyShell

La théorie

Le WinConPtyShell est une fonctionnalité plus récente de Windows, introduite avec Windows 10 et utilisée principalement pour gérer les connexions à des shells interactifs (reverse_shells, etc...)^^. Ce n'est pas un programme à part entière que vous installez, mais une infrastructure qui permet d'implémenter des shells interactifs, comme SSH, dans des environnements Windows.

Le terme WinConPtyShell fait référence à un mécanisme interne dans Windows qui permet d'établir des sessions interactives avec des shells, en particulier pour des applications comme OpenSSHou des outils de gestion de terminal. Cela permet à des programmes comme PowerShell ou des applications tierces comme OpenSSH d'interagir avec des shells et des terminaux de manière plus fluide.

Concrètement, cela facilite l’intégration de shells de commande interactifs (par exemple, une connexion SSH ou un script PowerShell qui interagit avec un terminal Windows) avec le système d’exploitation Windows.

WinConPtyShell repose sur un concept de "pseudo-terminal" (pty) utilisé dans de nombreux systèmes Unix/Linux. Ce mécanisme permet à un programme de simuler un terminal pour qu'une autre application puisse y interagir.

Le mécanisme fonctionne en deux parties :

  • Le maître (master) : Il envoie des commandes et reçoit les réponses, comme un terminal virtuel.
  • L'esclave (slave) : C'est le shell ou le programme qui reçoit les commandes et renvoie les résultats. C'est typiquement une instance de PowerShell, Command Prompt, ou un shell SSH.

La Pratique

Quand on est développeur ou hackeur ou je ne sais quel autre nom qui fini en eur les WinConPtyShell peuvent être extrêmement utile pour communiquer de manière fluide avec des shell interactif qui casse pas comme netcat en voici un exemple :

$ConPty = New-Object -TypeName System.Management.Automation.Runspaces.PseudoTerminal # Créer l'objet Pseudo Terminal
$Process = Start-Process -FilePath "powershell.exe" -PassThru # Le Processus que va utiliser le Pseudo-Terminal (Ici Powershell mais ça aurait pu être git Bash ou autre)
$ConPty.Create($Process) # On démarre la session powershell dans un pseudo terminal
$ConPty.WriteLine("Get-Process") # On écrit les commandes

On peut aisément créer un programme qui fait tout ça automatiquement :)

Passer à la suite

Pour passer à la suite vous pouvez déjà commencer par contribuer psk j'suis un mec cool et sinon j'ai quelques articles sympathiques ici en lien plus ou moins proche avec celui-ci :

Commentaires

0/500 caractères

Aucun commentaire pour le moment. Soyez le premier à commenter !