SMB
L’objectif de ce cours est de présenter le protocole SMB autour des axes suivants :
- Fonctionnement du protocole
- Intérêt d’un point de vue cybersécurité
- Attaques connues
- Détection
Présentation du protocole
Dans les années 80 IBM invente le protocole SMB, l’objectif étant le partage de ressources au travers du réseau, par exemple :
- Imprimantes
- Répertoires
- Routeurs
Le protocole est la par la suite popularisé par Microsoft, cette première implémentation s’appuie sur la couche Netbios (le port utilisé est alors 139). Par la suite le protocole sera porté sur TCP/IP (port 445). Aujourd’hui il est avant tout utilisé dans les environnements Windows et l’Active Directory. Toutefois, il existe une implémentation Linux nommée Samba :
https://doc.ubuntu-fr.org/samba
SMB et Cybersécurité
SMB est un protocole particulièrement intéressant d’un point de vue cybersécurité :
- Il arrive fréquemment que des failles soient découvertes dans SMB, l’exemple le plus marquant étant probablement ms17-010, aussi nommé Eternal Blue utilisé par le ransomware Wannacry.
- Les shares peuvent être utilisés pour exfiltrer des données
- SMB peut faire office de relai ou pivot lors d’une exploitation
- Les shares peuvent contenir des informations sensibles / utiles pour les attaquants, par exemple :
- Des mots de passe
- Des clés SSH
- Des documents confidentiels
Utilisation de base de SMB
Dans une machine Windows il est possible de lister les shares de la machine courante via la commande net view.
On peut référence une machine via son nom de domaine ou bien son nom Netbios :
C:\> net view \\dc01.contoso.local /all
Shared resources at \\dc01.contoso.local
Share name Type Used as Comment
-------------------------------------------------------------------------------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
SYSVOL Disk Logon server share
The command completed successfully.
Source : Attacking Active Directory: 0 to 0.9
Il est possible de monter un share via la commande net use ou bien on peut accéder directement à un share :
C:\> dir \\dc01\sysvol
Volume in drive \\dc01\sysvol has no label.
Volume Serial Number is 609D-528B
Directory of \\dc01\sysvol
28/11/2020 11:02 <DIR> .
28/11/2020 11:02 <DIR> ..
28/11/2020 11:02 <JUNCTION> contoso.local [C:\Windows\SYSVOL\domain]
0 File(s) 0 bytes
3 Dir(s) 20,050,214,912 bytes free
Source : Attacking Active Directory: 0 to 0.9
Shares par défaut
Par défaut un serveur SMB possèdera un ensemble de shares, parmi eux on peut citer :
- Les shares administratifs dont le nom fini par un dollar $ :
- ADMIN$ : Notamment utilisé par psexec pour l’exécution de commandes.
- PRINT$ : Utilisé par les imprimantes.
- IPC$ : Inter-process communication, détaillé dans la section suivante.
- Il existe d’autres shares présents par défaut :
- SYSVOL : Utilisé pour fournir les GPO dans le domaine, peut contenir des mots de passe (voir https://infosecwriteups.com/attacking-gpp-group-policy-preferences-credentials-active-directory-pentesting-16d9a65fa01a)
- NETLOGON : Contient les scripts à exécuter lorsqu’un utilisateur se connecte. C’est également un canal pour l’authentification des utilisateurs.
Attaques et outils fréquemment utilisés
De nombreux outils permettent d’utiliser SMB et de l’énumérer, voici quelques exemples :
- smbclient : Utilitaire en ligne de commande permettant d’accéder à des partages SMB.
- enum4linux : Outil permettant l’énumération SMB dans un environnement Windows ou Samba, se basant notamment sur smbclient. Je vous invite à regarder son code source pour en comprendre le fonctionnement : https://github.com/CiscoCXSecurity/enum4linux/blob/master/enum4linux.pl
- crackmapexec : Aussi appelé par son sigle, CME est un outil versatile qui permet de lancer de nombreuses attaques dans un environnement Windows. Une partie étant dédiée à SMB, CME permet via son système modulaire de réaliser une énumération complète :
Aujourd’hui le projet n’est plus tenu à jour et s’est vu remplacer par un fork nommé NetExec :
https://github.com/Pennyw0rth/NetExec
Exemple
Voici un exemple d’utilisation de smbmap :
Ici on utilise les options suivantes :
- -H : précise le serveur cible (Host), ici 10.129.212.135
- -u : utilisation de la null session
Après avoir remarqué la présence d’un share nommé data, on se connecte à ce dernier puis on utilise les commandes suivantes :
- recurse ON : On active la récursivité pour les opérations sur les fichiers.
- prompt OFF : On désactive les demandes de confirmation avant l’exécution de commande.
- mget * : On télécharge les fichiers du répertoire courant et ceux des sous dossiers étant donné le recurse ON.
Vulnérabilités connues
Au travers des différentes versions SMB a connu plusieurs vulnérabilité. Cette section a pour but de présenter deux exemples.
Zerologon
Zerologon (CVE-2020-147) est une vulnérabilité permettant de devenir Administrateur de domaine qui exploite le protocole Netlogon. La vulnérabilité exploite une implémentation de l’algorithme AES de la part de Microsoft dans laquelle une erreur est présente. Cette room Tryhackme explique clairement le fonctionnement de la vulnérabilité :
https://tryhackme.com/r/room/zer0logon
EternalBlue
EternalBlue (CVE-2017-044) est un exploit développé par la NSA. Ce dernier se voit révélé par un groupe nommé The Shadow Brokers. Son fonctionnement exploite en réalité SMBv1, souvent resté activé dans les environnements Windows et permet une exécution de code à distance (RCE). L’exploit sera utilisé massivement par le ransomware Wannacry. Je vous invite à consulter le repository suivant pour comprendre son fonctionnement :
https://github.com/worawit/MS17-010
Et à exploiter la vulnérabilité via la room Tryhackme suivante :
https://tryhackme.com/r/room/blue
Détection d’attaques SMB
D’un point de vue détection, différentes actions sont possible vis à vis de SMB, cette section présente quelques exemples.
SMB Create Remote File Admin Share
Cette règle a pour but de détecter l’utilisation du share C$, qui permet d’inspecter l’ensemble des fichiers de la machine (cela requiert les droits administrateurs). Lorsqu’un compte non machine effectue cette opération il peut s’agir d’un indicateur d’intrusion :
title: SMB Create Remote File Admin Share
id: b210394c-ba12-4f89-9117-44a2464b9511
status: test
description: Look for non-system accounts SMB accessing a file with write (0x2) access mask via administrative share (i.e C$).
references:
- https://github.com/OTRF/ThreatHunter-Playbook/blob/f7a58156dbfc9b019f17f638b8c62d22e557d350/playbooks/WIN-201012004336.yaml
- https://securitydatasets.com/notebooks/atomic/windows/lateral_movement/SDWIN-200806015757.html?highlight=create%20file
author: Jose Rodriguez (@Cyb3rPandaH), OTR (Open Threat Research)
date: 2020/08/06
modified: 2021/11/27
tags:
- attack.lateral_movement
- attack.t1021.002
logsource:
product: windows
service: security
detection:
selection:
EventID: 5145
ShareName|endswith: 'C$'
AccessMask: '0x2'
filter:
SubjectUserName|endswith: '$'
condition: selection and not filter
falsepositives:
- Unknown
level: high
Source : SigmaHQ
Smbexec
Rappel : Dans un environnement Windows, lorsque l’on souhaite administrer une machine à distance en ligne de commande, l’outil ssh n’est pas disponible (avant Windows Server 2019 / Windows 10 build 1809). C’est pourquoi Microsoft a développé PSExec via sa branche Sysinternals qui fournit différents outils, notamment pour les administrateurs réseau. PSExec permet donc de contrôler une machine à distance, il s’agit d’un outil de choix pour les attaquants (voir : https://attack.mitre.org/software/S0029). L’outil n’est pas installé par défaut mais peut être installé de façon légitime ou bien par des attaquants lors d’une compromission.
Il peut être facile de détecter une installation de PSExec de la part d’attaquant étant donné que ces derniers doivent déposer le binaire. C’est alors qu’intervient SmbExec qui utilise un share SMB pour relayer les commandes. Pour cela deux options sont possibles :
- Utilisation d’un share existant
- Création d’un serveur SMB temporaire sur la machine de l’attaquant
Cette solution a donc pour avantage de n’installer aucun binaire sur la machine de la victime. Cependant l’opération génère un certain nombre de logs qui permettent la détection, notamment l’eventID 5145 avec l’event mask 0x3.
Sources
- https://zer1t0.gitlab.io/posts/attacking_ad
- https://learn.microsoft.com/fr-fr/windows/win32/fileio/microsoft-smb-protocol-and-cifs-protocol-overview
- https://www.varonis.com/fr/blog/protocole-smb-explication-des-ports-445-et-139
- https://book.hacktricks.xyz/network-services-pentesting/pentesting-smb
- https://gitlab.com/kalilinux/packages/enum4linux
- https://github.com/fortra/impacket/blob/master/examples/smbexec.py
- https://learn.microsoft.com/fr-fr/security-updates/securitybulletins/2017/ms17-010
- https://attack.mitre.org/software/S0029/
- https://felix-billieres.gitbook.io/felix-billieres/capture-the-flags/windows/nest#what-is-the-password-of-the-tempuser
- https://github.com/Pennyw0rth/NetExec
- https://infosecwriteups.com/attacking-gpp-group-policy-preferences-credentials-active-directory-pentesting-16d9a65fa01a