SMB
L’objectif de ce cours est de présenter le protocole SMB autour des axes suivants :
- Fonctionnement et origine 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.
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. Une faille utilisée 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 d’une via la commande net view :
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 à ce dernier :
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 le symbole $ :
- 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 Infosecwriteups.
- 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 : GitHub Cisco.
- 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.
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-1472) est une vulnérabilité permettant de devenir Administrateur du domaine en exploitant le protocole Netlogon. Plus précisément, l’attaque vise l’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-0144) 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. L’attaque permet une exécution de code à distance (RCE).
La faille a été massivement utilisée 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
Exfiltration de données et contenu des shares
Les shares peuvent être utilisés par les attaquants pour exfiltrer des données; faire office de relais ou encore pivoter 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
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.
Smbexec
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 : MITRE). L’outil n’est pas installé par défaut mais peut être utilisé 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.
Smbexec quant à lui, 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’événement 5145 avec l’event mask 0x3.
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 : SIGMA HQ
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