Tips : Supervision d’un serveur OpenSSH Windows
Bonjour à tous, je vous présente dans cet article comment mettre en place un serveur SSH sur votre machine Windows mais également comment le superviser à l’aide d’un agent WinCollect et de l’outil d’IBM QRadar.
Pour pouvoir effectuer les différentes actions de cet article, il va vous falloir les prérequis suivants pour pouvoir tester :
- Une machine Windows avec un agent WinCollect en mode “managed“
- Un collecteur QRadar (typiquement le All-in-One QRadar CE donc je vous ai présenté l’installation ici)
2. Activation du serveur OpenSSH
Dans un premier nous allons activer le serveur SSH sur la machine Windows, il existe plusieurs de techniques pour arriver à nos fins que vous trouverez partout sur internet. Je vous partage ici la solution en ligne de commande.
Attention
Avant d’effectuer les différentes commandes et surtout l’activation du serveur je vous conseille très fortement de vérifier que la machine n’est pas exposée sur internet (machine en DMZ, redirection de port…). En effet, une machine exposée va se retrouver scannée massivement et si votre mot de passe est trop faible ou que votre machine est vulnérable, elle va vite se faire compromettre.
Maintenant que nous avons pris toutes les précautions, voici les commandes à exécuter dans un terminal PowerShell avec les droits élevés :
- On ajoute la “Capability” à notre machine
PS C:\> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
- On configure le démarrage du serveur en “Automatic“, il y a la possibilité ici de mettre en “Manual” si on ne souhaite pas que le serveur SSH démarre automatiquement
PS C:\> Set-Service -Name sshd -StartupType 'Automatic'
- On démarre le service pour qu’il soit opérationnel
PS C:\> Start-Service sshd
Pour vérifier que tout fonctionne, nous allons effectuer une connexion en local, pour ce faire tapez la commande ci-dessous en remplaçant “<USERNAME>” par le nom d’utilisateur de votre machine (récupérable en faisant un “net user” dans votre terminal) :
PS C:\> ssh <USERNAME>@localhost
Ensuite il faut mettre le mot de passe de ce compte quand il vous est demandé, puis vous allez avoir votre session SSH.
Remarque : Si vous avez un code PIN pour votre compte, vous pouvez le mettre en lieu et place de votre mot de passe, cela devrait également fonctionner.
3. Ajustement de la collecte
Dans un deuxième temps, nous allons mettre en place la collecte pour avoir les logs nous informant des connexions, déconnexions… sur le serveur SSH. Pour cela, il faut déjà qu’il y ait un agent WinCollect sur la machine Windows. Si ce n’est pas le cas, je vous invite à faire un petit détour par cette procédure pour l’installer en mode “Managed“.
Une fois qu’il est installé, nous allons modifier la configuration de l’agent par le biais du Log Source Management. Nous allons utiliser la technologie XPath qui est expliquée ici, pour trouver le filtre XML qui correspond à nos besoins il faut ouvrir l’observateur d’événements sur votre machine Windows.
En déroulant les différents journaux, on constate qu’il y a un dossier “OpenSSH“, de plus, en cliquant sur le fichier “Operational“, on peut retrouver les tests de connexion de local faits dans la première partie.
Pour obtenir le filtre XML il existe plusieurs méthodes, nous allons opter ici pour la plus simple :
- Faites clic droit sur le fichier “Operational“
- Cliquez sur “Filtrer le journal actuel“, une nouvelle fenêtre va s’ouvrir
- Cliquez sur l’onglet “XML“
- Copiez collez le filtre et vous obtiendrez quelque chose de très similaire voire identique au filtre ci-dessous
<QueryList>
<Query Id="0" Path="OpenSSH/Operational">
<Select Path="OpenSSH/Operational">*</Select>
</Query>
</QueryList>
Maintenant que nous avons le filtre, il ne reste plus qu’à l’ajouter dans le paramètre correspondant dans QRadar.
- Ouvrez le Log Source Management de votre instance QRadar
- Cliquez sur votre log source Windows Security
- Allez dans l’onglet “Protocol“
- Cliquez sur le bouton “Edit“
- Collez le filtre XML dans le champ “XPath Query“
- Cliquez sur “Save“
Remarque :
En fonction de la fréquence de synchronisation de la configuration de votre agent, la mise en place de cette modification peut prendre plus ou moins de temps.
4. Modification du DSM QRadar
Troisièmement, nous allons modifier quelque peu la configuration du DSM “Microsoft Windows Security Event Log” pour qu’il prenne en charge les logs venant de notre serveur SSH car oui, ce n’est pas pris en charge par défaut 😢
Je vous ai mis à disposition un fichier qui va contenir tous le mapping des événements, vous le retrouverez sur mon Github juste ici.
Pour l’installer sur votre instance QRadar :
- Téléchargez le fichier
- Allez sur l’onglet “Admin” de votre instance QRadar puis cliquez sur “Extensions Management“, une nouvelle fenêtre va s’ouvrir
- Cliquez sur “Add“, une nouvelle fenêtre va s’ouvrir
- Cliquez sur “Browse“, une fenêtre d’explorateur de fichiers va s’ouvrir
- Sélectionnez le fichier téléchargé au début puis cliquez sur “Ouvrir“
- Cochez l’option “Install immediatly“
- Cliquez sur “Add“
Une fois l’installation effectuée, vous aurez les événements (QID) correspondants aux connexions, déconnexions… d’un serveur OpenSSH Windows.
Avant que tout fonctionne parfaitement, il faut effectuer un peu de parsing pour le log source type “Microsoft Windows Security Event Log“.
- Allez sur l’onglet “Admin” de votre instance QRadar puis cliquez sur “DSM Editor“, une nouvelle fenêtre va s’ouvrir
- Choisissez le type “Microsoft Windows Security Event Log“
- Cliquez sur le bouton en forme de crayon en haut à droite de la fenêtre
- Collez le contenu que vous retrouverez en annexe 1
- Cliquez ensuite sur le bouton en forme “v” en haut à droite de la fenêtre
Dernière ajustement avant de modifier les propriétés :
- Cliquez sur la molette à droite au milieu de la fenêtre
- Cochez uniquement les propriétés suivantes :
- Event Category
- Event ID
- Event Name*
- Source IP
- Source Port
- Username
Maintenant nous allons modifier les propriétés suivantes :
- Event ID
- Source IP
- Source Port
- Username
Pour ce faire, il faut faire dans le panel à gauche de la fenêtre :
- Cliquez sur l’onglet “Properties“
- Recherchez la propriété que vous souhaitez
- Cliquez sur la propriété
- Cochez l’option “Override system behavior“
- Sélectionnez l’option “Regex” dans le menu déroulant
- Copiez collez la valeur de l’expression de votre regex en fonction du tableau ci-dessous
Propriété | Expression | Format String |
Event ID | Message=sshd:.*(Accepted password|Connection closed|Connection reset|Disconnected from|Failed password|Received disconnect) | $1 |
Source IP | Message=sshd:.*\s((?:[0-9]{1,3}.){3}[0-9]{1,3}|::1|localhost) | $1 |
Source Port | port\s+(\d{1,5}) | $1 |
Username | sshd:.for\s+(.)\s+from | $1 |
Une fois le tout configuré, vous devrez obtenir le tableau suivant :
Il faut bien penser à sauvegarder le tout en cliquant sur “Save” pour que le rendu dans les logs soient bon.
5. Conclusion
Nous voici donc à la conclusion de ce tips sur la collecte des logs d’un Server OpenSSH sous Windows. J’ai souhaité le faire pour présenter la puissance de l’utilisation du XPath avec l’agent WinCollect mais également le fait qu’il est important de collecter ce type d’informations dans un système d’informations.
N’hésitez pas à me faire part de d’autres technologies qu’il serait intéressant de collecter.
6. Bibliographie
- Exporter la configuration d’un QRadar à l’autre : Content type identifiers for exporting custom content
7. Annexe
#1 : Exemple de logs OpenSSH
<13>May 20 11:43:19 TEST-COMPUTER AgentDevice=WindowsLog AgentLogFile=OpenSSH/Operational PluginVersion=7.3.1.22 Source=OpenSSH Computer=TEST-COMPUTER OriginatingComputer=TEST-COMPUTER User=Système Domain=AUTORITE NT EventID=4 EventIDCode=4 EventType=4 EventCategory=0 RecordNumber=22 TimeGenerated=1684575796 TimeWritten=1684575796 Level=Informational Keywords=0x4000000000000000 Task=None Opcode=Info Message=sshd: Disconnected from ::1 port 49637
<13>May 20 11:43:19 TEST-COMPUTER AgentDevice=WindowsLog AgentLogFile=OpenSSH/Operational PluginVersion=7.3.1.22 Source=OpenSSH Computer=TEST-COMPUTER OriginatingComputer=TEST-COMPUTER User=Système Domain=AUTORITE NT EventID=4 EventIDCode=4 EventType=4 EventCategory=0 RecordNumber=21 TimeGenerated=1684575796 TimeWritten=1684575796 Level=Informational Keywords=0x4000000000000000 Task=None Opcode=Info Message=sshd: Received disconnect from ::1 port 49637:11: disconnected by user
<13>May 20 11:43:04 TEST-COMPUTER AgentDevice=WindowsLog AgentLogFile=OpenSSH/Operational PluginVersion=7.3.1.22 Source=OpenSSH Computer=TEST-COMPUTER OriginatingComputer=TEST-COMPUTER User=Système Domain=AUTORITE NT EventID=4 EventIDCode=4 EventType=4 EventCategory=0 RecordNumber=20 TimeGenerated=1684575781 TimeWritten=1684575781 Level=Informational Keywords=0x4000000000000000 Task=None Opcode=Info Message=sshd: Accepted password for TestUser from ::1 port 49637 ssh2
<13>May 20 11:42:37 TEST-COMPUTER AgentDevice=WindowsLog AgentLogFile=OpenSSH/Operational PluginVersion=7.3.1.22 Source=OpenSSH Computer=TEST-COMPUTER OriginatingComputer=TEST-COMPUTER User=Système Domain=AUTORITE NT EventID=4 EventIDCode=4 EventType=4 EventCategory=0 RecordNumber=18 TimeGenerated=1684575756 TimeWritten=1684575756 Level=Informational Keywords=0x4000000000000000 Task=None Opcode=Info Message=sshd: Disconnected from ::1 port 49454
<13>May 20 11:42:58 TEST-COMPUTER AgentDevice=WindowsLog AgentLogFile=OpenSSH/Operational PluginVersion=7.3.1.22 Source=OpenSSH Computer=TEST-COMPUTER OriginatingComputer=TEST-COMPUTER User=Système Domain=AUTORITE NT EventID=4 EventIDCode=4 EventType=4 EventCategory=0 RecordNumber=19 TimeGenerated=1684575777 TimeWritten=1684575777 Level=Informational Keywords=0x4000000000000000 Task=None Opcode=Info Message=sshd: Failed password for TestUser from 192.168.192.168 port 49637 ssh2